使用OpenSSL EVP_DigestSign*生成CMAC密钥失败

use*_*152 7 openssl cmac

我正在尝试生成使用OpenSSL计算CMAC的密钥.

但是,这些似乎失败了,下面复制了错误消息.有人能指出问题所在吗?有人EVP_DigestSign*打电话给CMAC 吗?

以下是代码的一部分,该代码是通过https://wiki.openssl.org/index.php/EVP_Key_and_Parameter_Generation中的示例构建的:

BIO *out = NULL;   
out = BIO_new(BIO_s_file());

if (out == NULL)
        return -1;
BIO_set_fp(out, stdout, BIO_NOCLOSE);

EVP_MD_CTX* rctx = NULL;
EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *kctx = NULL;

rctx = EVP_MD_CTX_create();
if(rctx == NULL) {
    printf("EVP_MD_CTX_create failed\n");
}
 if(!EVP_PKEY_keygen_init(kctx)){
     printf("EVP_PKEY_keygen_init failed\n");
}

if (EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,EVP_PKEY_CTRL_CIPHER,0, (void *)EVP_aes_256_ecb()) <= 0)
    printf("EVP_PKEY_CTX_ctrl 1  failed\n");

if (EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,EVP_PKEY_CTRL_SET_MAC_KEY,/*key length*/32, "01234567890123456789012345678901") <= 0)
    printf("Set the key data failed 1\n");
Run Code Online (Sandbox Code Playgroud)

这里的错误:

EVP_PKEY_CTX_ctrl failed
3073898120:error:06093096:lib(6):func(147):reason(150):pmeth_gn.c:122:
3073898120:error:06089093:lib(6):func(137):reason(147):pmeth_lib.c:390:
Run Code Online (Sandbox Code Playgroud)

在pmeth_lib.c的第390行:

EVPerr(EVP_F_EVP_PKEY_CTX_CTRL, EVP_R_COMMAND_NOT_SUPPORTED);
Run Code Online (Sandbox Code Playgroud)

我正在使用OpenSSL 1.0.1e.

另请参见如何使用OpenSSL的CMAC_xxx函数计算AES CMAC?

Jos*_*vic 1

目前这是不可能的,因为它不受支持。

您唯一可以尝试的就是使用最新的 OpenSSL 并尝试相同的操作,但我怀疑它是否有效。尝试不使用 EVP。