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
pyOpenSSL 検証のユニットテストを参照した以前の SO の質問を見ました。
編集:私が使用しているpyOpenSSLのバージョンがpyOpenSSL-0.14-py3.4であることを忘れていました。