是的,您似乎可以在以下位置找到它gcrypt.h
:
GCRY_MAC_CMAC_AES = 201,
并在此处的文档中。您可以使用创建 MAC 上下文gcry_mac_open
(有关详细信息,请参阅 gcrypt.pdf)。
您还可以在cipher.h
其中找到您正在寻找的功能,但毫无疑问,使用上面的常量(而不是特定模式下的密码)创建 MAC 上下文会更好。
内部危险品:
/*-- cipher-cmac.c --*/
gcry_err_code_t _gcry_cmac_generate_subkeys
/* */ (gcry_cipher_hd_t c, gcry_cmac_context_t *ctx);
gcry_err_code_t _gcry_cmac_write
/* */ (gcry_cipher_hd_t c, gcry_cmac_context_t *ctx,
const byte * inbuf, size_t inlen);
gcry_err_code_t _gcry_cmac_final
/* */ (gcry_cipher_hd_t c, gcry_cmac_context_t *ctx);
void _gcry_cmac_reset (gcry_cmac_context_t *ctx);
我猜发生的事情是 libgcrypt 刚开始使用 CBC-MAC 作为一种特殊的密码模式,之后使用单独的上下文添加了其他 MAC。
请注意,GCM 是一种使用 GMAC 的身份验证模式,它比 CMAC 更快,因此使用 GCM 和 CMAC 来验证密文(再次)意义不大。如果您想依赖 CMAC(可以说它更安全),那么您也可以选择 AES-EAX 模式;它是使用 AES-CTR 和 AES-CMAC 作为原语构建的。
简而言之GCRY_CIPHER_CBC_MAC
,不是必需的,也可能不应该使用;如果您有经过身份验证的密码,则已经提供了消息完整性/真实性。