INNER CODE UNIT · C

new_pin_len

polhenarejos/pico-openpgp · src/openpgp/cmd_change_pin.c:72

    size_t new_pin_len = apdu.nc - pin_len;
    bool allow_empty_new_pin = false;
#ifdef ENABLE_ADMINLESS_MODE
    /* Empty PW3 is Gnuk's "PW3 not configured" transition. Keep its
     * current verifier so KDF-backed host flows can still verify it. */
    bool clear_pw3 = P2(apdu) == 0x83 && new_pin_len == 0;
    if (clear_pw3) {
        new_pin = apdu.data;
        new_pin_len = pin_len;
    }
    allow_empty_new_pin = clear_pw3;
    bool sync_adminless_pw3 = P2(apdu) == 0x81 && (openpgp_adminless_is_active() || (openpgp_adminless_is_pending() && new_pin_len >= 8));
    bool disable_pending_adminless = P2(apdu) == 0x81 && openpgp_adminless_is_pending() && new_pin_len < 8;
    bool enable_adminless = P2(apdu) == 0x83 && !clear_pw3 && pw3_matches_nonfactory_pw1(new_pin, new_pin_len);
#endif
    if (!allow_empty_new_pin && (r = check_pin_len(fid, new_pin_len)) != 0x9000) {
        return r;
    }

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…