@@ -5446,6 +5446,63 @@ static CK_RV test_sign_verify(void* args)
54465446 return ret;
54475447}
54485448
5449+ static CK_RV test_sign_verify_op_not_supported(void* args)
5450+ {
5451+ CK_SESSION_HANDLE session = *(CK_SESSION_HANDLE*)args;
5452+ CK_RV ret;
5453+ CK_MECHANISM mech;
5454+ CK_OBJECT_HANDLE key;
5455+ byte keyData[32];
5456+ CK_ULONG keySz = sizeof(keyData);
5457+ CK_BBOOL falseVal = CK_FALSE;
5458+ CK_BBOOL trueVal = CK_TRUE;
5459+
5460+ CK_ATTRIBUTE noSignKey[] = {
5461+ { CKA_CLASS, &secretKeyClass, sizeof(secretKeyClass) },
5462+ { CKA_KEY_TYPE, &genericKeyType, sizeof(genericKeyType) },
5463+ { CKA_SIGN, &falseVal, sizeof(falseVal) },
5464+ { CKA_VERIFY, &trueVal, sizeof(trueVal) },
5465+ { CKA_VALUE, keyData, keySz },
5466+ };
5467+ CK_ATTRIBUTE noVerifyKey[] = {
5468+ { CKA_CLASS, &secretKeyClass, sizeof(secretKeyClass) },
5469+ { CKA_KEY_TYPE, &genericKeyType, sizeof(genericKeyType) },
5470+ { CKA_SIGN, &trueVal, sizeof(trueVal) },
5471+ { CKA_VERIFY, &falseVal, sizeof(falseVal) },
5472+ { CKA_VALUE, keyData, keySz },
5473+ };
5474+
5475+ memset(keyData, 9, sizeof(keyData));
5476+ mech.mechanism = CKM_SHA256_HMAC;
5477+ mech.ulParameterLen = 0;
5478+ mech.pParameter = NULL;
5479+
5480+ /* Create key with CKA_SIGN=FALSE, try C_SignInit */
5481+ ret = funcList->C_CreateObject(session, noSignKey,
5482+ sizeof(noSignKey)/sizeof(*noSignKey), &key);
5483+ CHECK_CKR(ret, "Create generic key with CKA_SIGN=FALSE");
5484+ if (ret == CKR_OK) {
5485+ ret = funcList->C_SignInit(session, &mech, key);
5486+ CHECK_CKR_FAIL(ret, CKR_KEY_TYPE_INCONSISTENT,
5487+ "SignInit should fail with CKA_SIGN=FALSE");
5488+ }
5489+
5490+ /* Create key with CKA_VERIFY=FALSE, try C_VerifyInit */
5491+ if (ret == CKR_OK) {
5492+ ret = funcList->C_CreateObject(session, noVerifyKey,
5493+ sizeof(noVerifyKey)/sizeof(*noVerifyKey),
5494+ &key);
5495+ CHECK_CKR(ret, "Create generic key with CKA_VERIFY=FALSE");
5496+ }
5497+ if (ret == CKR_OK) {
5498+ ret = funcList->C_VerifyInit(session, &mech, key);
5499+ CHECK_CKR_FAIL(ret, CKR_KEY_TYPE_INCONSISTENT,
5500+ "VerifyInit should fail with CKA_VERIFY=FALSE");
5501+ }
5502+
5503+ return ret;
5504+ }
5505+
54495506static CK_RV test_recover(void* args)
54505507{
54515508 CK_SESSION_HANDLE session = *(CK_SESSION_HANDLE*)args;
@@ -16773,6 +16830,7 @@ static TEST_FUNC testFunc[] = {
1677316830#endif
1677416831 PKCS11TEST_FUNC_SESS_DECL(test_digest_fail),
1677516832 PKCS11TEST_FUNC_SESS_DECL(test_sign_verify),
16833+ PKCS11TEST_FUNC_SESS_DECL(test_sign_verify_op_not_supported),
1677616834 PKCS11TEST_FUNC_SESS_DECL(test_recover),
1677716835#if !defined(NO_RSA) && defined(WC_RSA_DIRECT)
1677816836 PKCS11TEST_FUNC_SESS_DECL(test_verify_recover_pkcs),
0 commit comments