问题描述
我正尝试通过以下方式通过软件实现来测试我的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实施,并继续进行签名验证。
请注意,如果您的引擎也实现了摘要并且还想对其进行测试,则可能必须对签名计算期间使用的摘要执行类似的操作。