Skip to content

Commit 99ebafd

Browse files
committed
Add correct flags for PBKDF2 keys
F-2038
1 parent c8d6a4d commit 99ebafd

2 files changed

Lines changed: 73 additions & 5 deletions

File tree

src/crypto.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6772,6 +6772,25 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
67726772

67736773
wc_ForceZero(derivedKey, derivedKeyLen);
67746774
XFREE(derivedKey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6775+
6776+
if (rv == CKR_OK) {
6777+
rv = WP11_Object_GetAttr(pbkdf2Key, CKA_SENSITIVE, &getVar,
6778+
&getVarLen);
6779+
if ((rv == CKR_OK) && (getVar == CK_TRUE)) {
6780+
rv = WP11_Object_SetAttr(pbkdf2Key, CKA_ALWAYS_SENSITIVE,
6781+
&trueVar, sizeof(CK_BBOOL));
6782+
}
6783+
if (rv == CKR_OK) {
6784+
rv = WP11_Object_GetAttr(pbkdf2Key, CKA_EXTRACTABLE,
6785+
&getVar, &getVarLen);
6786+
if ((rv == CKR_OK) && (getVar == CK_FALSE)) {
6787+
rv = WP11_Object_SetAttr(pbkdf2Key,
6788+
CKA_NEVER_EXTRACTABLE,
6789+
&trueVar, sizeof(CK_BBOOL));
6790+
}
6791+
}
6792+
}
6793+
67756794
return rv;
67766795
}
67776796
#ifdef WOLFPKCS11_NSS
@@ -6870,6 +6889,25 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
68706889

68716890
wc_ForceZero(derivedKey, derivedKeyLen);
68726891
XFREE(derivedKey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6892+
6893+
if (rv == CKR_OK) {
6894+
rv = WP11_Object_GetAttr(pbeKey, CKA_SENSITIVE, &getVar,
6895+
&getVarLen);
6896+
if ((rv == CKR_OK) && (getVar == CK_TRUE)) {
6897+
rv = WP11_Object_SetAttr(pbeKey, CKA_ALWAYS_SENSITIVE,
6898+
&trueVar, sizeof(CK_BBOOL));
6899+
}
6900+
if (rv == CKR_OK) {
6901+
rv = WP11_Object_GetAttr(pbeKey, CKA_EXTRACTABLE,
6902+
&getVar, &getVarLen);
6903+
if ((rv == CKR_OK) && (getVar == CK_FALSE)) {
6904+
rv = WP11_Object_SetAttr(pbeKey,
6905+
CKA_NEVER_EXTRACTABLE,
6906+
&trueVar, sizeof(CK_BBOOL));
6907+
}
6908+
}
6909+
}
6910+
68736911
return rv;
68746912
}
68756913
#endif

tests/pbkdf2_keygen_attrs_test.c

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ static int test_pbkdf2_keygen_attrs(CK_SESSION_HANDLE session)
208208
CK_OBJECT_HANDLE key;
209209
CK_BBOOL local = CK_FALSE;
210210
CK_MECHANISM_TYPE genMech = CK_UNAVAILABLE_INFORMATION;
211+
CK_BBOOL alwaysSensitive = CK_FALSE;
212+
CK_BBOOL neverExtractable = CK_FALSE;
211213
int result = 0;
212214

213215
CK_BYTE password[] = "TestPassword123";
@@ -239,17 +241,23 @@ static int test_pbkdf2_keygen_attrs(CK_SESSION_HANDLE session)
239241

240242
CK_OBJECT_CLASS keyClass = CKO_SECRET_KEY;
241243
CK_KEY_TYPE keyType = CKK_GENERIC_SECRET;
244+
CK_BBOOL bTrue = CK_TRUE;
245+
CK_BBOOL bFalse = CK_FALSE;
242246

243247
CK_ATTRIBUTE genTmpl[] = {
244-
{ CKA_CLASS, &keyClass, sizeof(keyClass) },
245-
{ CKA_KEY_TYPE, &keyType, sizeof(keyType) },
246-
{ CKA_VALUE_LEN, &keyLength, sizeof(keyLength) },
248+
{ CKA_CLASS, &keyClass, sizeof(keyClass) },
249+
{ CKA_KEY_TYPE, &keyType, sizeof(keyType) },
250+
{ CKA_VALUE_LEN, &keyLength, sizeof(keyLength) },
251+
{ CKA_SENSITIVE, &bTrue, sizeof(bTrue) },
252+
{ CKA_EXTRACTABLE, &bFalse, sizeof(bFalse) },
247253
};
248254
CK_ULONG genTmplCnt = sizeof(genTmpl) / sizeof(*genTmpl);
249255

250256
CK_ATTRIBUTE getTmpl[] = {
251-
{ CKA_LOCAL, &local, sizeof(local) },
252-
{ CKA_KEY_GEN_MECHANISM, &genMech, sizeof(genMech) },
257+
{ CKA_LOCAL, &local, sizeof(local) },
258+
{ CKA_KEY_GEN_MECHANISM, &genMech, sizeof(genMech) },
259+
{ CKA_ALWAYS_SENSITIVE, &alwaysSensitive, sizeof(alwaysSensitive) },
260+
{ CKA_NEVER_EXTRACTABLE, &neverExtractable, sizeof(neverExtractable) },
253261
};
254262
CK_ULONG getTmplCnt = sizeof(getTmpl) / sizeof(*getTmpl);
255263

@@ -282,6 +290,28 @@ static int test_pbkdf2_keygen_attrs(CK_SESSION_HANDLE session)
282290
printf("PASS: CKA_KEY_GEN_MECHANISM is CKM_PKCS5_PBKD2\n");
283291
test_passed++;
284292

293+
if (alwaysSensitive != CK_TRUE) {
294+
fprintf(stderr,
295+
"FAIL: CKA_ALWAYS_SENSITIVE: expected CK_TRUE, got %d\n",
296+
(int)alwaysSensitive);
297+
test_failed++;
298+
result = -1;
299+
goto cleanup;
300+
}
301+
printf("PASS: CKA_ALWAYS_SENSITIVE is CK_TRUE\n");
302+
test_passed++;
303+
304+
if (neverExtractable != CK_TRUE) {
305+
fprintf(stderr,
306+
"FAIL: CKA_NEVER_EXTRACTABLE: expected CK_TRUE, got %d\n",
307+
(int)neverExtractable);
308+
test_failed++;
309+
result = -1;
310+
goto cleanup;
311+
}
312+
printf("PASS: CKA_NEVER_EXTRACTABLE is CK_TRUE\n");
313+
test_passed++;
314+
285315
cleanup:
286316
return result;
287317
}

0 commit comments

Comments
 (0)