INNER CODE UNIT · C

pw3_matches_nonfactory_pw1

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

static bool pw3_matches_nonfactory_pw1(const uint8_t *pin, size_t pin_len) {
    file_t *pw1 = file_search_by_fid(EF_PW1, NULL, SPECIFY_EF);
    uint8_t verifier[34];

    if (!pw1 || !file_has_data(pw1) || file_get_data(pw1)[0] < 8) {
        return false;
    }
    if (file_get_size(pw1) == 33) {
        verifier[0] = pin_len;
        double_hash_pin(CONST_BYTE_ARRAY(pin, pin_len), verifier + 1);
        return mbedtls_ct_memcmp(file_get_data(pw1), verifier, 33) == 0;
    }
    if (file_get_size(pw1) == 34) {
        verifier[0] = pin_len;
        verifier[1] = 0x1;
        pin_derive_verifier(CONST_BYTE_ARRAY(pin, pin_len), verifier + 2);
        return mbedtls_ct_memcmp(file_get_data(pw1), verifier, sizeof(verifier)) == 0;
    }

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…