c3defd344c
* Add support for WebAuthn PRF extension Original context: https://bugzilla.mozilla.org/show_bug.cgi?id=1863819 * Send correct PIN protocol ID in hmac-secret Before this change, OpenSK (tag 2.1, commit 893faa5113f47457337ddb826b1a58870f00bc78) returns CTAP2_ERR_INVALID_PARAMETER in response to attempts to use the WebAuthn PRF extension. Original context: https://bugzilla.mozilla.org/show_bug.cgi?id=1863819 * Extract function HmacSecretResponse::decrypt_secrets * Clarify and correct hmac-secret and PRF client outputs in makeCredential * Delete unnecessary impl Default * Rename HmacSecretFromHmacSecretOrPrf to HmacCreateSecretOrPrf * Use HmacGetSecretOrPrf data model in getAssertion too * Add examples/prf.rs * Construct channels outside loop * Remove unused loop * Add tests for HmacSecretResponse::decrypt_secrets * Extract function AuthenticationExtensionsPRFInputs::eval_to_salt * Extract AuthenticationExtensionsPRFInputs::select_eval and ::select_credential * Add doc comment to AuthenticationExtensionsPRFInputs::calculate * Fix clippy lint * Return empty prf output if no eval or evalByCredential entry matched * Extract function HmacGetSecretOrPrf::calculate * Add tests of calculating hmac-secret/PRF inputs * Fix outdated error messages * Separate hmac_secret tests that require a crypto backend * Add debug output to error paths of HmacSecretResponse::decrypt_secrets * Fix a typo and a cryptic comment * Eliminate unnecessary sha256 function * Simplify to Sha256::digest where possible * Derive PartialEq always, not just in cfg(test) * Document generation of hmac_secret test data * Remove unnecessary comma * Tweak imports per review * Take PinUvAuthToken as reference in HmacSecretExtension::calculate * Deduplicate decrypt_pin_token code in tests * Extract function GetAssertion::process_hmac_secret_and_prf_extension * Move allow_list assignment to top level scope * Add tests of hmac-secret and prf processing in GetAssertion::finalize_result * Fail hmac-secret salt calculation if input salts are too long This is prescribed by the [CTAP spec][ctap]: >**Client extension processing** >1. [...] >2. If present in a get(): > 1. Verify that salt1 is a 32-byte ArrayBuffer. > 2. If salt2 is present, verify that it is a 32-byte ArrayBuffer. > [...] [ctap]: https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-hmac-secret-extension * Add tests of GetAssertion::process_hmac_secret_and_prf_extension * Propagate WrongSaltLength as InvalidRelyingPartyInput in GetAssertion::process_hmac_secret_and_prf_extension * Return PrfUnmatched instead of None when shared secret is not available This is needed because the PRF extension should return an empty extension output `prf: {}` when the extension is processed but no eligible authenticator is found. Thus we need to differentiate these cases so that `GetAssertion::finalize_result` can match on `PrfUnmatched` and generate the empty output. * Add debug logging when no shared secret is available * Add debug logging when hmac-secret output decryption fails * Add test of serializing uninitialized and unmatched PRF inputs * Add missing test of serializing hmac-secret with PIN protocol 2 |
||
---|---|---|
.. | ||
ctap2.rs | ||
ctap2_discoverable_creds.rs | ||
interactive_management.rs | ||
prf.rs | ||
reset.rs | ||
set_pin.rs | ||
test_exclude_list.rs |