C++ 使用 OpenSSL 1.1.1n 生成新的 EC_KEY
C++ generate new EC_KEY using OpenSSL 1.1.1n
我对这个 OpenSSL 的东西还很陌生,正在尝试学习它。我想生成一个 ec 密钥,但一直无法生成。我目前正在使用 OpenSSL 1.1.1n,这里是基于通过文档和其他人在线示例了解 EC_Key 的片段:
EC_KEY* key = EC_KEY_new_by_curve_name(NID_secp521r1);
if (!key)
{
ERROR
}
EC_GROUP* ecgroup = EC_GROUP_new_by_curve_name(NID_secp521r1);
if (ecgroup)
{
printf("ECGROUP IS NOT NULL!\n");
if (EC_KEY_set_group(key, ecgroup) != 1)
{
ERROR
}
}
if (EC_KEY_generate_key(key) != 1) //<-- fails at this function
{
ERROR
}
可能这段代码来自旧版本的 OpenSSL,但我没有在更改日志中看到该功能。任何帮助将非常感激!提前致谢!
编辑:
感谢 Jakob 的回答,我能够通过使用 ERR_get_error()
函数获得有关失败的更多信息。我现在看到的错误是
error:2406C06E:random number generator:RAND_DRBG_instantiate:error retrieving entropy
manual 状态:
EC_KEY_generate_key()
generates a new public and private key for the
supplied eckey object. eckey must have an EC_GROUP
object associated
with it before calling this function. [...]
在调用函数之前,您是否将 EC_GROUP
与键相关联?有一个名为 EC_KEY_set_group()
的函数可用于添加组对象。可以使用 EC_GROUP_new()
.
创建这样的对象
顺便问一下,您仍在使用 OpenSSL 1.1.1 是有原因的。我建议使用最新版本的库 OpenSSL 3.0。即使你只是想学习东西,如果你立即学习更新的版本,它可能更有用。
编辑
我不知道,你的 ERROR
宏背后是什么,但学习 OpenSSL 错误处理系统可能是个好主意。像 ERR_print_errors() 这样的函数可能会提示您出了什么问题。
我自己回答,以防有人遇到同样的问题。
我能够通过使用 no-shared
标志构建 OpenSSL 来解决这个问题。我不确定这对获取熵的库有何影响,但这是使 EC_KEY_generate_key()
起作用的参数。
这是我的工作配置命令:
perl Configure no-shared VC-WIN32
我对这个 OpenSSL 的东西还很陌生,正在尝试学习它。我想生成一个 ec 密钥,但一直无法生成。我目前正在使用 OpenSSL 1.1.1n,这里是基于通过文档和其他人在线示例了解 EC_Key 的片段:
EC_KEY* key = EC_KEY_new_by_curve_name(NID_secp521r1);
if (!key)
{
ERROR
}
EC_GROUP* ecgroup = EC_GROUP_new_by_curve_name(NID_secp521r1);
if (ecgroup)
{
printf("ECGROUP IS NOT NULL!\n");
if (EC_KEY_set_group(key, ecgroup) != 1)
{
ERROR
}
}
if (EC_KEY_generate_key(key) != 1) //<-- fails at this function
{
ERROR
}
可能这段代码来自旧版本的 OpenSSL,但我没有在更改日志中看到该功能。任何帮助将非常感激!提前致谢!
编辑:
感谢 Jakob 的回答,我能够通过使用 ERR_get_error()
函数获得有关失败的更多信息。我现在看到的错误是
error:2406C06E:random number generator:RAND_DRBG_instantiate:error retrieving entropy
manual 状态:
EC_KEY_generate_key()
generates a new public and private key for the supplied eckey object. eckey must have anEC_GROUP
object associated with it before calling this function. [...]
在调用函数之前,您是否将 EC_GROUP
与键相关联?有一个名为 EC_KEY_set_group()
的函数可用于添加组对象。可以使用 EC_GROUP_new()
.
顺便问一下,您仍在使用 OpenSSL 1.1.1 是有原因的。我建议使用最新版本的库 OpenSSL 3.0。即使你只是想学习东西,如果你立即学习更新的版本,它可能更有用。
编辑
我不知道,你的 ERROR
宏背后是什么,但学习 OpenSSL 错误处理系统可能是个好主意。像 ERR_print_errors() 这样的函数可能会提示您出了什么问题。
我自己回答,以防有人遇到同样的问题。
我能够通过使用 no-shared
标志构建 OpenSSL 来解决这个问题。我不确定这对获取熵的库有何影响,但这是使 EC_KEY_generate_key()
起作用的参数。
这是我的工作配置命令:
perl Configure no-shared VC-WIN32