如何动态地在Openssl引擎和Openssl软件实现之间切换?

问题描述

我正尝试通过以下方式通过软件实现来测试我的openssl引擎代码。

第1步:加载我的openssl引擎。
第2步:将ECDSA与openssl-Engine(使用的API使用ECDSA_sign)进行签名。
第3步:卸载openssl引擎。
第4步:使用openssl的软件实现进行验证(api使用ECDSA_verify)。

加载引擎后,我无法卸载openssl引擎。
我使用了ENIGINE_finish和ENGINE_free api,它删除了结构和功能参考。仍然不会删除引擎信息。

如何动态地在Openssl引擎和openssl软件实现之间切换?

解决方法

让我们假设您在第1步中正在做类似的事情,为了简洁起见,我省略了所有返回代码检查:

board = [
    ['X','0','.'],['.','X','0'],['0','.','X']]

coordinates = list()
for r,row in enumerate(board):
    for c,col in enumerate(row):
        if "." in board[r][c]:
            coordinates.append([r,c])

print(coordinates)

然后,在执行ECDSA签名计算之后,我相信(未经实际测试)使用相同的ENGINE *e = ENGINE_by_id("dynamic"); ENGINE_ctrl_cmd_string(e,"SO_PATH","my-engine",0); ENGINE_ctrl_cmd_string(e,"LOAD",NULL,0); ENGINE_set_default_EC(e) 值来调用就足够了,

e

切换回OpenSSL随附的默认EC实施,并继续进行签名验证。

请注意,如果您的引擎也实现了摘要并且还想对其进行测试,则可能必须对签名计算期间使用的摘要执行类似的操作。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...