Как проверить подпись с помощью M2Crypto 0.16 - PullRequest
1 голос
/ 17 мая 2010

После некоторого изумления я нашел несколько обычных ответов на этот вопрос, таких как:
Как загрузить ключ RSA из файла PEM и использовать его в python-crypto

некоторый код:

x509 = X509.load_cert_string(certificate)
pubkey = x509.get_pubkey()
pubkey.reset_context(md=sha1)
pubkey.verify_init()
pubkey.verify_update(content)
decoded_signature = signature.decode('base64')

if pubkey.verify_final(decoded_signature)==0:
    print 'error'
    sys.exit(1)

и приведенный выше код прекрасно работает в M2Crypto 0.20. Но мне нужно сделать то же самое, используя M2Crypto 0.16 (официальный пакет в RHEL5), и у меня возникли проблемы с использованием метода pubkey.verify_final, поскольку в этой конкретной версии параметр подписи не существует. Так как я могу это сделать? используя M2Crypto 0.16 Спасибо.

1 Ответ

2 голосов
/ 20 мая 2010

К счастью для вас, необходимая вам функция OpenSSL доступна в M2Crypto 0.16, это просто метод Python, который не предоставляет дополнительный аргумент, который вам нужен. Это легко обойти. Где бы вы позвонили pubkey.verify_final(decoded_signature), позвоните pubkey_verify_final(pubkey, decoded_signature), который вы определите в своем коде как:

from M2Crypto import m2

def pubkey_verify_final(pubkey, decoded_signature):
    return m2.verify_final(pubkey.ctx, decoded_signature, pubkey.pkey)

(Обратите внимание, я не проверял это на самом деле, просто сравнил источник между 0,16 и 0,20.)

...