我正在尝试通过使用
cryptography
python 包的 default_backend
. 在 OpenSSL 中使用 EC 算术运算
我需要对
cryptography
使用的公钥进行点乘、加法等操作。我根本不熟悉 OpenSSL API,所以我找到了这个旧的存储库,它试图做我需要做的事情:https://github.com/tuxxy/hazmat-math
不幸的是,上面的回购已经死了,作者不活跃所以我不期待他们的回答,因此我在这里问这个问题。
不幸的是,当我尝试执行以下代码时
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import ec, utils
from hazmat_math import operations as ops
nist256 = ec.SECP256R1()
priv = ec.generate_private_key(nist256, default_backend())
pub = priv.public_key()
pub2 = ops.EC_POINT_MUL(pub, priv)
我收到以下错误:
Traceback (most recent call last):
File "/home/gidavid/Documents/eVoting/test_bench/test_arithmetic.py", line 11, in <module>
pub2 = ops.EC_POINT_MUL(pub, priv)
File "/home/gidavid/Documents/eVoting/test_bench/venv/lib/python3.8/site-packages/hazmat_math/operations.py", line 190, in EC_POINT_MUL
return _point_to_public_key(backend, group, prod)
File "/home/gidavid/Documents/eVoting/test_bench/venv/lib/python3.8/site-packages/hazmat_math/utils.py", line 53, in _point_to_public_key
res = backend._lib.EC_KEY_set_group(ec_key, group)
AttributeError: module 'lib' has no attribute 'EC_KEY_set_group'
我怀疑这可能与 openSSL 版本有关,因为根据文档https://www.openssl.org/docs/man3.0/man3/EC_KEY_set_public_key.html,EC_KEY_set_group 函数在 v3.0.0 中已弃用 但是,打开 python shell 并获取 openssl 版本号返回:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.1.1f 31 Mar 2020'
试图辨别加密库是否以某种方式使用与我的 python 安装不同版本的 openssl:
>>> from cryptography.hazmat.backends import default_backend
>>> d = default_backend()
>>> d._binding.lib.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER
1
这意味着它实际上是 3.0.0 或更高版本,因此该功能已被弃用。
根据我的估计,这给我留下了两个选择:
非常感谢任何输入