我正在尝试使用Python 3.4.2的pyOpenSSL来验证签名。这是我的代码。
from OpenSSL import crypto
some_byte_string = b'This is a byte string.'
crt = crypto.load_certificate(crypto.FILETYPE_PEM, pem)
# self.signature is a base64 encoded string
crypto.verify(crt, self.signature, some_byte_string, 'sha1')
这会产生以下异常:
verify_result = _lib.EVP_VerifyFinal(md_ctx, signature, len(signature), pkey)
TypeError: initializer for ctype 'unsigned char *' must be a bytes or list or tuple, not str
我也尝试过为'some_byte_string'使用常规字符串,但是当我尝试使用时会出现以下异常:
_lib.EVP_VerifyUpdate(md_ctx, data, len(data))
TypeError: initializer for ctype 'void *' must be a cdata pointer, not str
我看到之前的SO问题引用了unittest for pyOpenSSL verify,这似乎就是我正在做的事情,虽然显然出现了问题。
编辑: 忘了提到我使用的pyOpenSSL版本是pyOpenSSL-0.14-py3.4。