3

我正在尝试使用带有 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 问题,它引用了pyOpenSSL 验证的单元测试,这似乎是我正在做的事情,尽管显然有问题。

编辑:忘记提及我使用的 pyOpenSSL 版本是 pyOpenSSL-0.14-py3.4。

4

1 回答 1

1

显然这是 0.14 的一个错误,将在 0.15 中修复。

https://github.com/pyca/pyopenssl/issues/15

于 2015-03-02T19:41:36.317 回答