如何使用M2Crypto 0.16验证签名

时间:2010-05-17 11:21:17

标签: signature m2crypto

经过一番调整之后,我找到了这个问题的常用答案,例如:
How to load an RSA key from a PEM file and use it in 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 个答案:

答案 0 :(得分: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之间的来源。)