Skip to content

Commit 6dfe00d

Browse files
committed
F-2380 - https://fenrir.wolfssl.com/finding/2380 - Add test for CKA_SIGN/CKA_VERIFY attribute enforcement in C_SignInit/C_VerifyInit
1 parent 809b99f commit 6dfe00d

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

tests/pkcs11test.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
54495506
static 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

Comments
 (0)