在我的C程序中,我生成了一个带有函数C_GenerateKeyPair
的公钥/私钥对和一个带有C_GenerateKey
的敏感(秘密)密钥。目的是用公钥包装密钥,但是当我调用函数C_WrapKey
时,我得到错误CKR_KEY_TYPE_INCONSISTENT。如果我使用另一个带有属性包装和加密集的包装密钥,代码就会运行。用于公钥的模板是 PKCS#11 文档中提出的模板:
CK_SESSION_HANDLE hSession;
CK_OBJECT_HANDLE hPublicKey, hPrivateKey;
CK_MECHANISM mechanism = {
CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0
};
CK_ULONG modulusBits = 768;
CK_BYTE publicExponent[] = { 3 };
CK_BYTE id[] = {123};
CK_BBOOL true = CK_TRUE;
CK_ATTRIBUTE publicKeyTemplate[] = {
{CKA_ENCRYPT, &true, sizeof(true)},
{CKA_VERIFY, &true, sizeof(true)},
{CKA_WRAP, &true, sizeof(true)},
{CKA_MODULUS_BITS, &modulusBits, sizeof(modulusBits)},
{CKA_PUBLIC_EXPONENT, publicExponent, sizeof(publicExponent)}
};
包装和加密属性被正确指定,而对于要包装的密钥,我CKA_EXTRACTABLE添加属性。提前感谢您的帮助。
错误CKR_KEY_TYPE_INCONSISTENT是由于函数C_WrapKey中使用的错误CK_MECHANISM造成的。如果我们想用 RSA 公钥包装密钥,请设置以下机制:
CK_MECHANISM dec_mec = {CKM_RSA_PKCS, NULL_PTR, 0};