Skip to content

Commit 2ca4190

Browse files
committed
Add FIPS unlock/lock on private key access.
1 parent 085e486 commit 2ca4190

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/tpm2_wrap.c

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2951,11 +2951,15 @@ int wolfTPM2_DecodeRsaDer(const byte* der, word32 derSz,
29512951
rc = wc_RsaPublicKeyDecode(der, &idx, key, derSz);
29522952
}
29532953
if (rc == 0) {
2954-
if (isPrivateKey)
2954+
if (isPrivateKey) {
2955+
PRIVATE_KEY_UNLOCK();
29552956
rc = wc_RsaExportKey(key, (byte*)&e, &eSz, n, &nSz, d, &dSz,
29562957
p, &pSz, q, &qSz);
2957-
else
2958+
PRIVATE_KEY_LOCK();
2959+
}
2960+
else {
29582961
rc = wc_RsaFlattenPublicKey(key, (byte*)&e, &eSz, n, &nSz);
2962+
}
29592963
}
29602964
if (rc == 0 && nSz > sizeof(pub->publicArea.unique.rsa.buffer))
29612965
rc = BUFFER_E;
@@ -3046,11 +3050,15 @@ int wolfTPM2_DecodeEccDer(const byte* der, word32 derSz, TPM2B_PUBLIC* pub,
30463050
if (rc == 0) {
30473051
curveId = TPM2_GetTpmCurve(key->dp->id);
30483052

3049-
if (isPrivateKey)
3053+
if (isPrivateKey) {
3054+
PRIVATE_KEY_UNLOCK();
30503055
rc = wc_ecc_export_private_raw(key, qx, &qxSz, qy, &qySz,
30513056
d, &dSz);
3052-
else
3057+
PRIVATE_KEY_LOCK();
3058+
}
3059+
else {
30533060
rc = wc_ecc_export_public_raw(key, qx, &qxSz, qy, &qySz);
3061+
}
30543062
}
30553063
if (rc == 0 && qxSz > sizeof(pub->publicArea.unique.ecc.x.buffer))
30563064
rc = BUFFER_E;
@@ -3416,8 +3424,10 @@ int wolfTPM2_RsaPrivateKeyImportDer(WOLFTPM2_DEV* dev,
34163424
rc = wc_RsaPrivateKeyDecode(input, &idx, key, inSz);
34173425

34183426
if (rc == 0) {
3427+
PRIVATE_KEY_UNLOCK();
34193428
rc = wc_RsaExportKey(key, (byte*)&e, &eSz, n, &nSz, d, &dSz, p, &pSz, q,
34203429
&qSz);
3430+
PRIVATE_KEY_LOCK();
34213431
}
34223432

34233433
if (rc == 0) {
@@ -3746,17 +3756,22 @@ int wolfTPM2_CreateEccKeyBlob(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* parentKey,
37463756
if (rc == 0)
37473757
rc = wc_export_int(point->y, qy, &qySz, keySz,
37483758
WC_TYPE_UNSIGNED_BIN);
3749-
if (rc == 0)
3759+
if (rc == 0) {
3760+
PRIVATE_KEY_UNLOCK();
37503761
rc = wc_ecc_export_private_only(wolfKey, d, &dSz);
3762+
PRIVATE_KEY_LOCK();
3763+
}
37513764
wc_ecc_del_point(point);
37523765
}
37533766
}
37543767
else {
37553768
/* export the raw private/public ECC portions */
3769+
PRIVATE_KEY_UNLOCK();
37563770
rc = wc_ecc_export_private_raw(wolfKey,
37573771
qx, &qxSz,
37583772
qy, &qySz,
37593773
d, &dSz);
3774+
PRIVATE_KEY_LOCK();
37603775
}
37613776

37623777
if (rc == 0) {
@@ -3817,17 +3832,22 @@ int wolfTPM2_EccKey_WolfToTpm_ex(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* parentKey,
38173832
if (rc == 0)
38183833
rc = wc_export_int(point->y, qy, &qySz, keySz,
38193834
WC_TYPE_UNSIGNED_BIN);
3820-
if (rc == 0)
3835+
if (rc == 0) {
3836+
PRIVATE_KEY_UNLOCK();
38213837
rc = wc_ecc_export_private_only(wolfKey, d, &dSz);
3838+
PRIVATE_KEY_LOCK();
3839+
}
38223840
wc_ecc_del_point(point);
38233841
}
38243842
}
38253843
else {
38263844
/* export the raw private/public ECC portions */
3845+
PRIVATE_KEY_UNLOCK();
38273846
rc = wc_ecc_export_private_raw(wolfKey,
38283847
qx, &qxSz,
38293848
qy, &qySz,
38303849
d, &dSz);
3850+
PRIVATE_KEY_LOCK();
38313851
}
38323852

38333853
if (rc == 0) {

0 commit comments

Comments
 (0)