首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从命令行测试自定义openSSL引擎

从命令行测试自定义openSSL引擎
EN

Stack Overflow用户
提问于 2017-04-16 21:57:10
回答 1查看 2.6K关注 0票数 0

快速问题:如何验证我从命令行编写的自定义openSSL引擎的功能?

现在,我正在跟随伟大的教程,并且能够成功地使用我的测试程序(这里的源代码,位于test/wssha256engine_test.c)来练习引擎(它返回所有2‘s的摘要值)。

代码语言:javascript
运行
复制
brett@wintermute:~/openssl_ws/wssha256engine$ make test
make[1]: Entering directory 
/home/brett/openssl_ws/wssha256engine/test
make[1]: '../bin/test' is up to date.
make[1]: Leaving directory 
/home/brett/openssl_ws/wssha256engine/test
brett@wintermute:~/openssl_ws/wssha256engine$ bin/test
Engine Loaded...
Initializing wssha256 engine...
*TEST: Successfuly initialized engine [A test engine for the ws sha256 hardware encryption module, on the Xilinx ZYNQ7000]
    init result = 1
Digest NID=672 requested
SHA256 algorithm context initialized
*TEST: Digest INIT 1
SHA256 update
*TEST: Digest Update 1
SHA256 final: sizeof(EVP_MD)= 120
SHA256 cleanup
*TEST: Digest Final 1 Digest size:32
22222222222222222222222222222222

但是,由于原因,我还想使用openssl命令行接口来使用我刚刚编写的引擎,并让它计算一个随机字符串的摘要,比如在另一个教程中,只使用sha256而不是md5。

但是,当我尝试这样做时,引擎不会加载并导致错误,告诉我我的摘要中的NID不存在,而只是用标准算法散列字符串:

代码语言:javascript
运行
复制
brett@wintermute:~/openssl_ws/wssha256engine$ echo "Hello" | openssl dgst -engine /home/brett/Thesis/openssl_ws/wssha256engine/bin/libwssha256engine.so -sha256
ERROR: Digest is empty! (NID = 0)
engine "wssha256" set.
(stdin)= 66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18

为什么我不能在命令行上使用我的引擎,但是我可以创建一个C程序来加载它?如何使用我的引擎从命令行计算摘要呢?

注意:我可以从命令行加载引擎,只是不使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-22 16:39:35

经过深入研究,我能够找出为什么我的引擎的CLI调用不能工作,并修复了这个问题。

这个问题出现在我的摘要选择器函数中(下面注释掉了原始的坏代码)。最初,我从摘要选择器函数返回了一个失败状态,而不是返回引擎支持的摘要ID的数量。

代码语言:javascript
运行
复制
static int wssha256engine_digest_selector(ENGINE *e, const EVP_MD **digest, const int **nids, int nid)
{
    if (!digest)
  {
    *nids = wssha256_digest_ids;

    // THIS ORIGINAL CODE CAUSES THE ENGINE TO NEVER INITIALIZE FROM A CLI INVOCATION
    //printf("ERROR: Digest is empty! (NID = %d)\n",nid);
    //return FAIL;

    // THIS FIXES IT
    int retnids = sizeof(wssha256_digest_ids - 1) / sizeof(wssha256_digest_ids[0]);
    printf("wssha256engine: digest nids requested...returning [%d]\n",retnids);
    return retnids;
}

更仔细地阅读,我们可以发现OpenSSL以以下(单独)的方式调用摘要选择器函数:

  1. 摘要是空的。在这种情况下,预期将为*nids分配一个以零结尾的NID数组,并且调用返回的是可用的NID数。OpenSSL使用它来确定这个引擎支持什么摘要。
  2. 摘要是非空的。在这种情况下,预期将指定指向EVP_MD结构的指针,该指针对应于nid给出的NID。如果请求NID是此引擎支持的请求,则调用返回1,否则为0。

因此,即使我的引擎支持sha256,但是CLI调用不起作用,因为在调用摘要选择器函数之前,它必须没有用摘要初始化(不知道在使用CLI时操作的顺序)。但是,当我在我的测试程序中手动初始化它时,所有的操作都很好。更改为一个非失败的返回值,以支持上面的调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43442572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档