Это мой первый вопрос здесь, потому что я не нашел решения для этого. Надеюсь, у кого-то есть ответ на этот вопрос.
Я пытаюсь подписать и проверить сообщение с помощью DSA (алгоритма цифровой подписи) и оболочки pyOpenSSL.
Я создал пример ниже:
from OpenSSL.crypto import TYPE_DSA, Error, PKey
from OpenSSL.crypto import FILETYPE_PEM, sign
from Crypto.Hash import SHA
key = PKey()
key.generate_key(TYPE_DSA, 1024)
message = "abc"
digest = SHA.new(message).digest()
data_to_sign = base64.b64encode(digest)
signature = sign(key, data_to_sign, 'sha1')
После запуска этого фрагмента кода я получу следующий результат:
OpenSSL.crypto.Error: [('digital envelope routines', 'EVP_SignFinal', 'wrong public key type')]
EVP_Sign*
иEVP_Verify*
— старые интерфейсы. Вы должны использовать новый механизм OpenSSL:EVP_DigestSign*
иEVP_DigestVerify*
. - person jww   schedule 17.01.2015ed25519
. - person jww   schedule 17.01.2015