2010-05-17 2 views
1

После некоторого выпучив я нашел некоторые обычные ответы на этот вопрос, как:
How to load an RSA key from a PEM file and use it in python-cryptoКак проверить подпись с помощью M2Crypto 0,16

код:

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 Спасибо.

ответ

2

К счастью для вас, функция 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.)