Skip to content

Commit 1e22908

Browse files
committed
Fix PIN POLICY
Signed-off-by: Pol Henarejos <[email protected]>
1 parent f8974ff commit 1e22908

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

src/openpgp/piv.c

+22-3
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,15 @@ static int cmd_authenticate() {
541541
if ((meta_len = meta_find(key_ref, &meta)) <= 0) {
542542
return SW_REFERENCE_NOT_FOUND();
543543
}
544-
if (meta[1] == PINPOLICY_ALWAYS && !has_pwpiv && (key_ref == EF_PIV_KEY_AUTHENTICATION || key_ref == EF_PIV_KEY_SIGNATURE || key_ref == EF_PIV_KEY_KEYMGM || IS_RETIRED(key_ref))) {
544+
if (meta[1] == PINPOLICY_DEFAULT) {
545+
if (key_ref == EF_PIV_KEY_SIGNATURE) {
546+
meta[1] = PINPOLICY_ALWAYS;
547+
}
548+
else {
549+
meta[1] = PINPOLICY_ONCE;
550+
}
551+
}
552+
if ((meta[1] == PINPOLICY_ALWAYS || meta[1] == PINPOLICY_ONCE) && (!has_pwpiv && (key_ref == EF_PIV_KEY_AUTHENTICATION || key_ref == EF_PIV_KEY_SIGNATURE || key_ref == EF_PIV_KEY_KEYMGM || key_ref == EF_PIV_KEY_CARDAUTH || IS_RETIRED(key_ref)))) {
545553
return SW_SECURITY_STATUS_NOT_SATISFIED();
546554
}
547555
uint8_t chal_len = (algo == PIV_ALGO_3DES ? sizeof(challenge) / 2 : sizeof(challenge));
@@ -778,6 +786,9 @@ static int cmd_authenticate() {
778786
}
779787
}
780788
}
789+
if (meta[1] == PINPOLICY_ALWAYS) {
790+
has_pwpiv = false;
791+
}
781792
return SW_OK();
782793
}
783794

@@ -878,7 +889,11 @@ static int cmd_asym_keygen() {
878889
}
879890
else if (a80.data[0] == PIV_ALGO_X25519) {
880891
}
881-
uint8_t meta[] = {a80.data[0], asn1_len(&aaa) ? aaa.data[0] : PINPOLICY_ALWAYS, asn1_len(&aab) ? aab.data[0] : TOUCHPOLICY_ALWAYS, ORIGIN_GENERATED};
892+
uint8_t def_pinpol = PINPOLICY_ONCE;
893+
if (key_ref == EF_PIV_KEY_SIGNATURE) {
894+
def_pinpol = PINPOLICY_ALWAYS;
895+
}
896+
uint8_t meta[] = {a80.data[0], asn1_len(&aaa) ? aaa.data[0] : def_pinpol, asn1_len(&aab) ? aab.data[0] : TOUCHPOLICY_ALWAYS, ORIGIN_GENERATED};
882897
meta_add(key_ref, meta, sizeof(meta));
883898
low_flash_available();
884899
return SW_OK();
@@ -1205,7 +1220,11 @@ static int cmd_import_asym() {
12051220
else {
12061221
return SW_WRONG_DATA();
12071222
}
1208-
uint8_t meta[] = { algo, asn1_len(&aaa) ? aaa.data[0] : PINPOLICY_ALWAYS, asn1_len(&aab) ? aab.data[0] : TOUCHPOLICY_ALWAYS, ORIGIN_IMPORTED };
1223+
uint8_t def_pinpol = PINPOLICY_ONCE;
1224+
if (key_ref == EF_PIV_KEY_SIGNATURE) {
1225+
def_pinpol = PINPOLICY_ALWAYS;
1226+
}
1227+
uint8_t meta[] = { algo, asn1_len(&aaa) ? aaa.data[0] : def_pinpol, asn1_len(&aab) ? aab.data[0] : TOUCHPOLICY_ALWAYS, ORIGIN_IMPORTED };
12091228
meta_add(key_ref, meta, sizeof(meta));
12101229
return SW_OK();
12111230
}

0 commit comments

Comments
 (0)