Skip to content

Commit bb8028a

Browse files
committed
Add correct flags for PBKDF2 keys
F-2038
1 parent 65f89f5 commit bb8028a

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
@@ -6928,6 +6928,25 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
69286928

69296929
wc_ForceZero(derivedKey, derivedKeyLen);
69306930
XFREE(derivedKey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6931+
6932+
if (rv == CKR_OK) {
6933+
rv = WP11_Object_GetAttr(pbkdf2Key, CKA_SENSITIVE, &getVar,
6934+
&getVarLen);
6935+
if ((rv == CKR_OK) && (getVar == CK_TRUE)) {
6936+
rv = WP11_Object_SetAttr(pbkdf2Key, CKA_ALWAYS_SENSITIVE,
6937+
&trueVar, sizeof(CK_BBOOL));
6938+
}
6939+
if (rv == CKR_OK) {
6940+
rv = WP11_Object_GetAttr(pbkdf2Key, CKA_EXTRACTABLE,
6941+
&getVar, &getVarLen);
6942+
if ((rv == CKR_OK) && (getVar == CK_FALSE)) {
6943+
rv = WP11_Object_SetAttr(pbkdf2Key,
6944+
CKA_NEVER_EXTRACTABLE,
6945+
&trueVar, sizeof(CK_BBOOL));
6946+
}
6947+
}
6948+
}
6949+
69316950
return rv;
69326951
}
69336952
#ifdef WOLFPKCS11_NSS
@@ -7026,6 +7045,25 @@ CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession,
70267045

70277046
wc_ForceZero(derivedKey, derivedKeyLen);
70287047
XFREE(derivedKey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7048+
7049+
if (rv == CKR_OK) {
7050+
rv = WP11_Object_GetAttr(pbeKey, CKA_SENSITIVE, &getVar,
7051+
&getVarLen);
7052+
if ((rv == CKR_OK) && (getVar == CK_TRUE)) {
7053+
rv = WP11_Object_SetAttr(pbeKey, CKA_ALWAYS_SENSITIVE,
7054+
&trueVar, sizeof(CK_BBOOL));
7055+
}
7056+
if (rv == CKR_OK) {
7057+
rv = WP11_Object_GetAttr(pbeKey, CKA_EXTRACTABLE,
7058+
&getVar, &getVarLen);
7059+
if ((rv == CKR_OK) && (getVar == CK_FALSE)) {
7060+
rv = WP11_Object_SetAttr(pbeKey,
7061+
CKA_NEVER_EXTRACTABLE,
7062+
&trueVar, sizeof(CK_BBOOL));
7063+
}
7064+
}
7065+
}
7066+
70297067
return rv;
70307068
}
70317069
#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)