PKCS#11 C_CreateObject 因参数错误而失败

PKCS#11 C_CreateObject fails with bad arguments

我有一个 C_CreateObject PKCS#11 API 调用来生成一个 128 位 AES 密钥,但因参数错误而失败。

任何人都可以帮我找出模板有什么问题吗?

                            CK_OBJECT_HANDLE hKey;
                            CK_OBJECT_CLASS keyClass = CKO_SECRET_KEY;
                            CK_KEY_TYPE keyType = CKK_AES;
                            CK_BBOOL _true = TRUE;
                            CK_BBOOL _false = FALSE;                              
                            CK_BYTE key_value[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};

                            CK_ATTRIBUTE keyTemplate[] = {
                               {CKA_CLASS, &keyClass, sizeof(keyClass)},
                               {CKA_KEY_TYPE, &keyType, sizeof(keyType)},
                               {CKA_ENCRYPT, &_true, sizeof(_true)},
                               {CKA_DECRYPT, &_true, sizeof(_true)},
                               {CKA_TOKEN, &_true, sizeof(_true)},      /* token object  */
                               {CKA_PRIVATE, &_false, sizeof(_false)},  /* public object */
                               {CKA_VALUE, key_value, sizeof(key_value)},
                               {CKA_LABEL, CK_VOID_PTR("key"), sizeof("key")}
                             };

                             rv =  pfunc11->C_CreateObject(session, keyTemplate, sizeof (keyTemplate)/sizeof (CK_ATTRIBUTE), &hKey);
                             if (rv != CKR_OK) {
                                printf("ERROR: rv=0x%08X: C_CreateObject:\n", (unsigned int)rv);
                                return false;
                             }

您的密钥值对于 AES key 而言太短 -- 您需要在 key_value 中提供 16 字节(128 位)或 32 字节(256 位),例如:

CK_BYTE key_value[] = { 
        0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
        0xcd, 0xef, 0x89, 0xab, 0x45, 0x67, 0x01, 0x23, 
};

祝你好运!