From 56cdf9a0241c6bcabadf5006768d01ce44197572 Mon Sep 17 00:00:00 2001 From: daxpedda Date: Thu, 16 Nov 2023 20:07:46 +0100 Subject: [PATCH] Test P-521 (#349) * Test P-521 * De-duplicate generic calls * Simplify full test vectors generation --- Cargo.toml | 4 + src/keypair.rs | 2 + src/serialization/tests.rs | 22 + src/tests/full_test.rs | 1306 +++++++++----------------------- src/tests/full_test_vectors.rs | 734 ++++++++++++++++++ src/tests/mod.rs | 2 + 6 files changed, 1129 insertions(+), 941 deletions(-) create mode 100644 src/tests/full_test_vectors.rs diff --git a/Cargo.toml b/Cargo.toml index b460975..dfdf2be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,6 +61,10 @@ p384 = { version = "0.13", default-features = false, features = [ "hash2curve", "voprf", ] } +p521 = { version = "0.13.3", default-features = false, features = [ + "hash2curve", + "voprf", +] } proptest = "1" rand = "0.8" regex = "1" diff --git a/src/keypair.rs b/src/keypair.rs index c189c8a..6e8f7fe 100644 --- a/src/keypair.rs +++ b/src/keypair.rs @@ -249,6 +249,7 @@ mod tests { inner::(); inner::<::p256::NistP256>(); inner::<::p384::NistP384>(); + inner::<::p521::NistP521>(); } macro_rules! test { @@ -296,6 +297,7 @@ mod tests { test!(ristretto, crate::Ristretto255); test!(p256, ::p256::NistP256); test!(p384, ::p384::NistP384); + test!(p521, ::p521::NistP521); #[test] fn remote_key() { diff --git a/src/serialization/tests.rs b/src/serialization/tests.rs index 5a37b39..903dff0 100644 --- a/src/serialization/tests.rs +++ b/src/serialization/tests.rs @@ -64,6 +64,15 @@ impl CipherSuite for P384 { type Ksf = crate::ksf::Identity; } +struct P521; + +impl CipherSuite for P521 { + type OprfCs = ::p521::NistP521; + type KeGroup = ::p521::NistP521; + type KeyExchange = TripleDh; + type Ksf = crate::ksf::Identity; +} + fn random_point() -> ::Pk where as OutputSizeUser>::OutputSize: @@ -115,6 +124,7 @@ fn client_registration_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -169,6 +179,7 @@ fn server_registration_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -212,6 +223,7 @@ fn registration_request_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -264,6 +276,7 @@ fn registration_response_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -326,6 +339,7 @@ fn registration_upload_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -384,6 +398,7 @@ fn credential_request_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -473,6 +488,7 @@ fn credential_response_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -505,6 +521,7 @@ fn credential_finalization_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -573,6 +590,7 @@ fn client_login_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -613,6 +631,7 @@ fn ke1_message_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -657,6 +676,7 @@ fn ke2_message_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -692,6 +712,7 @@ fn ke3_message_roundtrip() -> Result<(), ProtocolError> { inner::()?; inner::()?; inner::()?; + inner::()?; Ok(()) } @@ -783,3 +804,4 @@ macro_rules! test { test!(ristretto255, Ristretto255); test!(p256, P256); test!(p384, P384); +test!(p521, P521); diff --git a/src/tests/full_test.rs b/src/tests/full_test.rs index c4bde97..bb5c991 100644 --- a/src/tests/full_test.rs +++ b/src/tests/full_test.rs @@ -75,6 +75,17 @@ impl CipherSuite for Ristretto255P384 { type Ksf = Identity; } +#[cfg(feature = "ristretto255")] +struct Ristretto255P521; + +#[cfg(feature = "ristretto255")] +impl CipherSuite for Ristretto255P521 { + type OprfCs = p521::NistP521; + type KeGroup = crate::Ristretto255; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + struct P256; impl CipherSuite for P256 { @@ -93,6 +104,15 @@ impl CipherSuite for P256P384 { type Ksf = Identity; } +struct P256P521; + +impl CipherSuite for P256P521 { + type OprfCs = p521::NistP521; + type KeGroup = p256::NistP256; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + #[cfg(feature = "ristretto255")] struct P256Ristretto255; @@ -122,6 +142,15 @@ impl CipherSuite for P384P256 { type Ksf = Identity; } +struct P384P521; + +impl CipherSuite for P384P521 { + type OprfCs = p521::NistP521; + type KeGroup = p384::NistP384; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + #[cfg(feature = "ristretto255")] struct P384Ristretto255; @@ -133,6 +162,44 @@ impl CipherSuite for P384Ristretto255 { type Ksf = Identity; } +struct P521; + +impl CipherSuite for P521 { + type OprfCs = p521::NistP521; + type KeGroup = p521::NistP521; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + +struct P521P256; + +impl CipherSuite for P521P256 { + type OprfCs = p256::NistP256; + type KeGroup = p521::NistP521; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + +struct P521P384; + +impl CipherSuite for P521P384 { + type OprfCs = p384::NistP384; + type KeGroup = p521::NistP521; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + +#[cfg(feature = "ristretto255")] +struct P521Ristretto255; + +#[cfg(feature = "ristretto255")] +impl CipherSuite for P521Ristretto255 { + type OprfCs = crate::Ristretto255; + type KeGroup = p521::NistP521; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + #[cfg(all(feature = "curve25519", feature = "ristretto255"))] struct Curve25519Ristretto255; @@ -166,6 +233,17 @@ impl CipherSuite for Curve25519P384 { type Ksf = Identity; } +#[cfg(feature = "curve25519")] +struct Curve25519P521; + +#[cfg(feature = "curve25519")] +impl CipherSuite for Curve25519P521 { + type OprfCs = p521::NistP521; + type KeGroup = crate::Curve25519; + type KeyExchange = TripleDh; + type Ksf = Identity; +} + pub struct TestVectorParameters { pub client_s_pk: Vec, pub client_s_sk: Vec, @@ -204,459 +282,43 @@ pub struct TestVectorParameters { static STR_PASSWORD: &str = "password"; static STR_CREDENTIAL_IDENTIFIER: &str = "credential_identifier"; -// To regenerate these test vectors, run: -// cargo test --features curve25519 -- --nocapture generate_test_vectors -#[cfg(feature = "ristretto255")] -static TEST_VECTOR_RISTRETTO255: &str = r#" -{ - "client_s_pk": "26716bbe69e8a0f5af491ee125ebcf1ba570fded8429a5efe3a411572046f168", - "client_s_sk": "f4a4b1f3c2c54257b91a0d87db527505428cbee4b6139e653160d44418f2110c", - "client_e_pk": "6ef6b77b5640a9edc6f70c51498008113d616abcaecb93665184f960d109fe52", - "client_e_sk": "e2ea723e5c50da359eb157b61305ceba76e782def7900f49c4d6710255dab502", - "server_s_pk": "88a0a8d7d4af520eed596ed1ba0f559ef3938e0760ba4dc0edda61516f786c34", - "server_s_sk": "119d9d4d6a0d346b32bd098545374bb13d3c62292ee46244ad198388e33d7d0c", - "server_e_pk": "bc7cc5a25ae069bda90f1c7dd1171025ab795f27e45b78839f6991f29a56e052", - "server_e_sk": "5b7e3196121b14d54f326ad51849264aeaeef95ea4f4bfde96b31266df92200b", - "fake_sk": "45caf0bf77b445fedbac477bde6b4302122c29c572b8a4b0760e25c7ae992d0a", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "4c590eff6854bda8024117051aa86c838b5d37bf408714a6004c671e7f72fb03", - "oprf_seed": "77b3fa30df8c1a6cf848a3cd747f5e28dae23b522e80b9ed67d4d06f09f53136dbc44bbb511b56fec4de8780572bac59b2647c1a71f080e42e70e573f10c6e8a", - "masking_nonce": "586157850ffa2085e7f857a27b5c942f5419331ca8f9d7467dfd2825e1ec6a3cf85ec715b14eeaadc89615d07c8d49d6859940ff84649df740f97ecaef168f9b", - "envelope_nonce": "21946497a938b40c9bdeb84d286fc7e9b3ef1e6d150660bd2330e400eac5c5bc", - "client_nonce": "d49d84dcfdde7c09eecf7b6ddaab79c3269a9d2511ba72d01d363fae862b5a83", - "server_nonce": "1e5a5cc267d99866ea30678c1ee43c53400b78e4a27b7dcf2b4521667b78c3b3", - "context": "636f6e74657874", - "registration_request": "70815fce02606dcb4a45ac1b3e312e201501d5cada02691953297e982e1f9b32", - "registration_response": "9e2ae845f8f4bd555c4c8df2b5bcff75fa6d1f0650011c422ad349b8d16edc3788a0a8d7d4af520eed596ed1ba0f559ef3938e0760ba4dc0edda61516f786c34", - "registration_upload": "66723c5c39695106d654570842a1edab79711a36ea4f34f65078b8c35731ea494d10c64e8239e9ed8a476faf6a4df44dd60a58fb0036ef65d5241541c7ca87aa050a7ea198c68d490d02f23419d0e002c7819805f8c9a6517a062d67a2de8b4df4a4b1f3c2c54257b91a0d87db527505428cbee4b6139e653160d44418f2110cedf21caa38e4cfbef0a7e5254082231d0b0dd056ff9014f2fa313e2107925dd8e69e45c126b8dae8c00567da34d09c8658aa7acab6e2fcb43359b263b4642773", - "credential_request": "70815fce02606dcb4a45ac1b3e312e201501d5cada02691953297e982e1f9b32d49d84dcfdde7c09eecf7b6ddaab79c3269a9d2511ba72d01d363fae862b5a83306781008374dd7ae51f6ea634f742c5db39774daed51d781e1a2e155a804666", - "credential_response": "9e2ae845f8f4bd555c4c8df2b5bcff75fa6d1f0650011c422ad349b8d16edc37586157850ffa2085e7f857a27b5c942f5419331ca8f9d7467dfd2825e1ec6a3c0e282fab682070fe5f5eaac1c4c01607c753263d6089bec28cf159483d9d8d3bae87a9ae56d6234b34187cd59740eb5e1cbcfe14e048f04ddd020b223365877b175ec2778d8cb0b427ea592751b1456d7f0c7295bc35bc70803e1a69e9ef0039b805f52c349b47ac42896152b738cd2babd230633a30d005fbfdae4a62b168f55b7e3196121b14d54f326ad51849264aeaeef95ea4f4bfde96b31266df92200bfe12195f75aa85845eb390e4eec3ee3594370f9fde7f3864dac00fb5c967dd00f198994831bc346a4b558e0570302b653436f9ecba165dc1f2ac3137f0a0df68aa209353dbf8539a39a4f9d7ff289195b2df5c5e84cb8ff02bbe552c384009f1", - "credential_finalization": "5f944d84bb4b92fa2a2ae5719eb7f3c486f4dc3c9622d8b23b8512383b2e9be96ecf3540c7a343a519a447ddd74bf651602dbaa54e6b41e44d24fbe00e4888d3", - "client_registration_state": "4c590eff6854bda8024117051aa86c838b5d37bf408714a6004c671e7f72fb0370815fce02606dcb4a45ac1b3e312e201501d5cada02691953297e982e1f9b32", - "client_login_state": "4c590eff6854bda8024117051aa86c838b5d37bf408714a6004c671e7f72fb0370815fce02606dcb4a45ac1b3e312e201501d5cada02691953297e982e1f9b32d49d84dcfdde7c09eecf7b6ddaab79c3269a9d2511ba72d01d363fae862b5a83306781008374dd7ae51f6ea634f742c5db39774daed51d781e1a2e155a8046668d4d5de82f0c234b84eb97934b87f2d43960fae1b6bd5d3d6944caf5154d6308d49d84dcfdde7c09eecf7b6ddaab79c3269a9d2511ba72d01d363fae862b5a83", - "server_login_state": "30234f3b8cead1e011aa7dfeaae19b64913115daaa46f3cfd033c2a64fdd0a3959e62584463cf961b0471a6aff255eb0537edafef843dd59145ae1a96536b42476799bfed1b5332d0547740d550554fdf83b2fa13ef9850c8664a6932e7da165b629fb87a8993b3dca588a96199e5e5d5454e4597d60482390925ecece9f62fd87a6422c13f1ed7bc5b844ebb29f7b35a2230d9a4d798763d91feb7f2be228b6c46277fd8d9589066c3c656d7daf75c71ce257ff9c7b7c8d017cc5dc766858c1", - "password_file": "66723c5c39695106d654570842a1edab79711a36ea4f34f65078b8c35731ea494d10c64e8239e9ed8a476faf6a4df44dd60a58fb0036ef65d5241541c7ca87aa050a7ea198c68d490d02f23419d0e002c7819805f8c9a6517a062d67a2de8b4df4a4b1f3c2c54257b91a0d87db527505428cbee4b6139e653160d44418f2110cedf21caa38e4cfbef0a7e5254082231d0b0dd056ff9014f2fa313e2107925dd8e69e45c126b8dae8c00567da34d09c8658aa7acab6e2fcb43359b263b4642773", - "export_key": "f529f81953f783863c758dc677dc5673d39e3b17508c5ccff96a3bb8dc29b3d09966c6b8cb11afe53ac1784b3768d8789d47c85a300ec2431a4b48b63d0724fc", - "session_key": "87a6422c13f1ed7bc5b844ebb29f7b35a2230d9a4d798763d91feb7f2be228b6c46277fd8d9589066c3c656d7daf75c71ce257ff9c7b7c8d017cc5dc766858c1" -} -"#; +macro_rules! run_all { + ($name:ident $(, $par:expr)*) => { + use super::full_test_vectors; -#[cfg(feature = "ristretto255")] -static TEST_VECTOR_RISTRETTO255_P256: &str = r#" -{ - "client_s_pk": "96860d1458e14e8724abc569401bcd1b6bcfeddf09742103d760a6014804cc73", - "client_s_sk": "0daf879c98ee31788e0014af07cebe6ff594ea3c4f6e308abcc2bb878b8fa605", - "client_e_pk": "5a049d36bf732157b108dbfc9230a9e67fea0020f16035856c10ca81d8930f07", - "client_e_sk": "b1683ccba5ced8986407ca6f6047749a239418ebe1bde10c793db752e6980c06", - "server_s_pk": "12396a13fddef61cf0134aa4c2a6aaf3d1be57cb13ea4f4b9838d71fc54ee80c", - "server_s_sk": "0f383b8fc12a075e1625771cb0e5dbe415f11f5bf1782b890c72c079214db30d", - "server_e_pk": "922dc5a69f7cad85dd41191458f4964176c47dd563d02bfd49c3023329b3ec6c", - "server_e_sk": "02ea163c9f6e9178774981e0c1e85f15279bfedc3dda8e6d61d29a3a6cb7100c", - "fake_sk": "85dd0108f49dfba87cc20ddbf26e50fa2f75617eadd79f981166918dd46d0b07", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "0c4bce66bf65a8546ef873df3753d1d7be8b03c7117e4db915db6c39e8e2ba3c", - "oprf_seed": "189debd660e17b3e4bf4e867d341715e9106d1c8fe50f1c7494b844f84581520", - "masking_nonce": "cf06408b0fb43754f84212958c57c9f1f80ee9c286f09f4a8abb0df17a34f5c7fb0678eb323d4c08bf48261066876c41e552f0fa0597bcf72723745084074c33", - "envelope_nonce": "48485d8f1020b7a37c39b1d30b32a8e1627f090602bc6d252210feced34f5380", - "client_nonce": "2299b1cbada1e9f1aab6ae243db020674b38e3c3d9d48c09a77e68cb5a3dbc89", - "server_nonce": "e930041050fbfe8ee81dc9769d9b70ef4bc1aa214fcc816566a94c216dd25a1b", - "context": "636f6e74657874", - "registration_request": "03bd2e315c39a7f0262844c53d8474cf45ff0eb1702b583f190b902b80dd636211", - "registration_response": "0295b6e042acf53567b5e0c33f6ef78867387f97be9cfa032d63dd59b0a3bbe69612396a13fddef61cf0134aa4c2a6aaf3d1be57cb13ea4f4b9838d71fc54ee80c", - "registration_upload": "1cbf711b9e1dff7c2aaf72a2b6f1539575829b8810bfe226e24fbbefbcd2894dc919828b717bfe9b990b34447ae288e858d92188d447aeed5e567d22145b3d4c0daf879c98ee31788e0014af07cebe6ff594ea3c4f6e308abcc2bb878b8fa6052b8c9a902bbc1e1ebc7ddfe5bc8d8f0373643ebc8aa14068cfd59023c08a9c2b", - "credential_request": "03bd2e315c39a7f0262844c53d8474cf45ff0eb1702b583f190b902b80dd6362112299b1cbada1e9f1aab6ae243db020674b38e3c3d9d48c09a77e68cb5a3dbc898e49984d760ede86d52699fa452d5297c4939007ce7aa197374e1048a6035d46", - "credential_response": "0295b6e042acf53567b5e0c33f6ef78867387f97be9cfa032d63dd59b0a3bbe696cf06408b0fb43754f84212958c57c9f1f80ee9c286f09f4a8abb0df17a34f5c7537e2b0fddecff2140a12fff250cf71dc909d80397aef7ef4b127762dcfcc718c7023064997840e593afea87022470bdee8954a0640992403f8ec4a14b7c845d49010dae5bf99c6db15c34fb354c3c385c7dc45853ec9b1dcf9afab48281a8cb02ea163c9f6e9178774981e0c1e85f15279bfedc3dda8e6d61d29a3a6cb7100caa4daad8755b1ffb28695e317278215428bd4d1ecd969e62059a93fba1af40018caf3978ca1456277ec344116a4f189a32c91fd28c1d23cc7be0e80e10a57422", - "credential_finalization": "4db5e4b91877f7bcee7d63b015793559fc788e7196b3c53f34b63ff8bf9bb91d", - "client_registration_state": "0c4bce66bf65a8546ef873df3753d1d7be8b03c7117e4db915db6c39e8e2ba3c03bd2e315c39a7f0262844c53d8474cf45ff0eb1702b583f190b902b80dd636211", - "client_login_state": "0c4bce66bf65a8546ef873df3753d1d7be8b03c7117e4db915db6c39e8e2ba3c03bd2e315c39a7f0262844c53d8474cf45ff0eb1702b583f190b902b80dd6362112299b1cbada1e9f1aab6ae243db020674b38e3c3d9d48c09a77e68cb5a3dbc898e49984d760ede86d52699fa452d5297c4939007ce7aa197374e1048a6035d46f62b5e93fa459dcdf3ee17e3e2447f0809e85f15b17e46d06f8894baa3c0e20a2299b1cbada1e9f1aab6ae243db020674b38e3c3d9d48c09a77e68cb5a3dbc89", - "server_login_state": "3a31ecc4fdee405375e58df2e9f4fe25965859cb6173d7e6709fb24fd2698d53933d8bc443c8860da1d4096d8b2ea2a5c651d744a22da9b2c9f73ff0ad17fc0b5c0df6a11fedcc36dcd1173ab7e55f3f2627d399e464ec29671cee7566d6d912", - "password_file": "1cbf711b9e1dff7c2aaf72a2b6f1539575829b8810bfe226e24fbbefbcd2894dc919828b717bfe9b990b34447ae288e858d92188d447aeed5e567d22145b3d4c0daf879c98ee31788e0014af07cebe6ff594ea3c4f6e308abcc2bb878b8fa6052b8c9a902bbc1e1ebc7ddfe5bc8d8f0373643ebc8aa14068cfd59023c08a9c2b", - "export_key": "e785a045278a7fa931ef1f8910d0ba85dc3d6c7537dfe5a9f4bd7bfa317e1762", - "session_key": "5c0df6a11fedcc36dcd1173ab7e55f3f2627d399e464ec29671cee7566d6d912" + #[cfg(feature = "ristretto255")] + $name::(full_test_vectors::TEST_VECTOR_RISTRETTO255 $(, $par)*)?; + #[cfg(feature = "ristretto255")] + $name::(full_test_vectors::TEST_VECTOR_RISTRETTO255_P256 $(, $par)*)?; + #[cfg(feature = "ristretto255")] + $name::(full_test_vectors::TEST_VECTOR_RISTRETTO255_P384 $(, $par)*)?; + #[cfg(feature = "ristretto255")] + $name::(full_test_vectors::TEST_VECTOR_RISTRETTO255_P521 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P256 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P256_P384 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P256_P521 $(, $par)*)?; + #[cfg(feature = "ristretto255")] + $name::(full_test_vectors::TEST_VECTOR_P256_RISTRETTO255 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P384 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P384_P256 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P384_P521 $(, $par)*)?; + #[cfg(feature = "ristretto255")] + $name::(full_test_vectors::TEST_VECTOR_P384_RISTRETTO255 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P521 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P521_P256 $(, $par)*)?; + $name::(full_test_vectors::TEST_VECTOR_P521_P384 $(, $par)*)?; + #[cfg(feature = "ristretto255")] + $name::(full_test_vectors::TEST_VECTOR_P521_RISTRETTO255 $(, $par)*)?; + #[cfg(feature = "curve25519")] + $name::(full_test_vectors::TEST_VECTOR_CURVE25519_P256 $(, $par)*)?; + #[cfg(feature = "curve25519")] + $name::(full_test_vectors::TEST_VECTOR_CURVE25519_P384 $(, $par)*)?; + #[cfg(feature = "curve25519")] + $name::(full_test_vectors::TEST_VECTOR_CURVE25519_P521 $(, $par)*)?; + #[cfg(all(feature = "curve25519", feature = "ristretto255"))] + $name::(full_test_vectors::TEST_VECTOR_CURVE25519_RISTRETTO255 $(, $par)*)?; + }; } -"#; - -#[cfg(feature = "ristretto255")] -static TEST_VECTOR_RISTRETTO255_P384: &str = r#" -{ - "client_s_pk": "4e2c60441878e85783c9800406ebd5e7e881dff80616d03b567947b82e5c7a57", - "client_s_sk": "dce2e0634b405f06caf29c1265fe223cb534535bb7c27cdf2e12f6291b39c00a", - "client_e_pk": "5e49aef294f9dce3c6522d66805d864337dc0fadfe88fe2e0f037c32c105a82d", - "client_e_sk": "dfb45d06440e1cbcdda340d9582de46237c44413f05b40339a6187115bfcc404", - "server_s_pk": "543f5a039f83eacc40c62fc5c5acecfd4650873dce4d6dbceb04a327baf86f2f", - "server_s_sk": "0c0d7c18c7ff0860f5d6648d5ebea2fec4a3cff45d436f3be5aa680608e7f605", - "server_e_pk": "e063a148282a82945d5ea35b9bcbc4fdacc175f73bee2ba4d0f72e7b3aec1338", - "server_e_sk": "a50f4953424642bcfc681fd4b6f8f9c71bd4a052bbc5f46047d22727da26af0b", - "fake_sk": "4305d00aa1b28f5fa20a4c939c97ce51150b948f87307191d5febc66ea2ea606", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "ebb318997438ae2f5e3238f03b75b975c15574221dc5366b28fd9f3401230420fbdaea1919df12380f986f7c6dcaee4d", - "oprf_seed": "f28b12958dfe452b0819cc0df743666cb27c9f7d5b07818de0c79b21bbc8a3987257a81a1c57c21bccebd2af0e6fbe94", - "masking_nonce": "cbe822a5e60816a19d6b707308876147e4c0be5436e0658802c88d257f9523f873c3c248f599aa0854a047ff227676b2ef036e847aad26113df99cf494ada455", - "envelope_nonce": "f5af3d4e880da0abaf85dfb4da5b7b23549c83c90bffbce20fc84d8a22014b00", - "client_nonce": "97cb195111c2bd433a1d1cafed854d9039936ae9559942cc701dafcb9dd51524", - "server_nonce": "4b15d916d5fb9bfc3e0a110dfcade484e4c98f6bebd9860f7b7956880a806efe", - "context": "636f6e74657874", - "registration_request": "0335ded8e0d44b32ef46a01d530365171b4a0656bc97362c731e5228c8d82cc66a7be5bbb4af2df2c69fab5946951bddba", - "registration_response": "037afbd911baaeaf20b8f81a323b9394b0483b622b92a02d19c6956b229264f645b2c82d42207a43c14445c9b77d5812d1543f5a039f83eacc40c62fc5c5acecfd4650873dce4d6dbceb04a327baf86f2f", - "registration_upload": "f0009445fd1d418db028788a28b21992786ad8b697a2a8baebe30547733f9143bdb7d21117484fed96d101d15e148c5a63623687e4844834c2d22a48913aaf0feeeb831dfb5ca91a91be5d2d7d46680fdce2e0634b405f06caf29c1265fe223cb534535bb7c27cdf2e12f6291b39c00a659cfc677db765aa62682b8095a1ab39dcd73ddbe49b668eb63f7bd5f4396f6e6b40ad646ebbb1af13b3589b73d69371", - "credential_request": "0335ded8e0d44b32ef46a01d530365171b4a0656bc97362c731e5228c8d82cc66a7be5bbb4af2df2c69fab5946951bddba97cb195111c2bd433a1d1cafed854d9039936ae9559942cc701dafcb9dd51524962707435be9a80153f6e4ec9ebc2440163ba73c232a418c958e25e77aa85863", - "credential_response": "037afbd911baaeaf20b8f81a323b9394b0483b622b92a02d19c6956b229264f645b2c82d42207a43c14445c9b77d5812d1cbe822a5e60816a19d6b707308876147e4c0be5436e0658802c88d257f9523f8020480a4ed9d375068b49232966147564a442f1dfe5cab652453c60a29d384863194bfb106012b50ca488869460200f16360b01a1337cfe3f03e118eb48bbba6ccd4c56eb181539277bc2b72f1dc15afabecd59885ca66fe42595382d085692bbd0278b83759deb8230883bf2c3181eea50f4953424642bcfc681fd4b6f8f9c71bd4a052bbc5f46047d22727da26af0b3405b452e6d6dabfe98ba19092987ebbfae106116b40a0f65dacbd709ac4f7756c3e6d1965246cca600fc88be6abd548299f728d756bc966b3021c2fb1a8c43a0b53a886a9594c93b3975536e59c71e1", - "credential_finalization": "4adf8d88cfd65aeec5b01e53cb0c791fba6239a7140994105b2d43c30d1921e9f3510d03c6f097f1d170cb7ae665e7cf", - "client_registration_state": "ebb318997438ae2f5e3238f03b75b975c15574221dc5366b28fd9f3401230420fbdaea1919df12380f986f7c6dcaee4d0335ded8e0d44b32ef46a01d530365171b4a0656bc97362c731e5228c8d82cc66a7be5bbb4af2df2c69fab5946951bddba", - "client_login_state": "ebb318997438ae2f5e3238f03b75b975c15574221dc5366b28fd9f3401230420fbdaea1919df12380f986f7c6dcaee4d0335ded8e0d44b32ef46a01d530365171b4a0656bc97362c731e5228c8d82cc66a7be5bbb4af2df2c69fab5946951bddba97cb195111c2bd433a1d1cafed854d9039936ae9559942cc701dafcb9dd51524962707435be9a80153f6e4ec9ebc2440163ba73c232a418c958e25e77aa85863dea54ac07a062a89450b947cd563d9b3c7bbec1460212b78c21d509f45f1310997cb195111c2bd433a1d1cafed854d9039936ae9559942cc701dafcb9dd51524", - "server_login_state": "ed32e9f19429767a8297ece379a7f2ca317543fa601f9d575577c4004a22240814814df482a466fb9456f2a8ea175f61d589b838e49246593d6fa7e2f41335961f0d890be0ff0f196d6c54b0ea909e9833cce7f57c20cdde215c23d0107bb32173700ee1021612393ecb5a619d95774b74ac82c7a2243ea01091aa34059bb6b93763af9e3270d17e15d31e2c36a22c1d", - "password_file": "f0009445fd1d418db028788a28b21992786ad8b697a2a8baebe30547733f9143bdb7d21117484fed96d101d15e148c5a63623687e4844834c2d22a48913aaf0feeeb831dfb5ca91a91be5d2d7d46680fdce2e0634b405f06caf29c1265fe223cb534535bb7c27cdf2e12f6291b39c00a659cfc677db765aa62682b8095a1ab39dcd73ddbe49b668eb63f7bd5f4396f6e6b40ad646ebbb1af13b3589b73d69371", - "export_key": "d610a300a933f98e70927f01cd97b7aead44e98b1405c40b42c15e25e20dc0ce237eca5cc623d2f7f185aa3db7846cf1", - "session_key": "73700ee1021612393ecb5a619d95774b74ac82c7a2243ea01091aa34059bb6b93763af9e3270d17e15d31e2c36a22c1d" -} -"#; - -static TEST_VECTOR_P256: &str = r#" -{ - "client_s_pk": "02c2e8f49855c9f783a851dcefbd8987ce90d8e85cf191c7aa475950c771a1a392", - "client_s_sk": "5ae546ad6e00e6434492285305f0a087a2c0fd4c70d867c87e59aa18df7168d1", - "client_e_pk": "039f4ec8755bb55f7b815f08fdda9da51a05edbc22025a3d4f5ff7b6ddcdecf847", - "client_e_sk": "efaaaad9104f1eaf18014d70ac70a61073cb1cf471b02b89dc16f6a338c9aac5", - "server_s_pk": "03923edfe871973dc0e549692526eeed3967fec567cd4ccba30ea3696614e5c9d6", - "server_s_sk": "21cbcff4c92ceb1acade2eccf301c7defe655f55d7354d1326a1259de4f6afc9", - "server_e_pk": "037ae15922e04a5e1d288494176932c8b4defae649eae82dd40876e9bc5afe7236", - "server_e_sk": "6162bef0095725abad6b72a7e3e64599fc1b5df9064e7ce40766fb0ac7e7964e", - "fake_sk": "da212727cf2f6f38c536014c883c22c35cb9efc4a27228563d364ab4d12ec5fa", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "9d781bd63f99a84b819c99c7ce497e6288f9122834048945997f2d76147efde4", - "oprf_seed": "b09d533d8960cb471b05a36882927adbcbe7ef600ba74e1af31d1486230e8adf", - "masking_nonce": "2590367466a06ccc880d11398181d1c302144c05e4ac5a0528ef3336fc26e4f13e45edf9d43d0d4e9c6ec08536895968111c4d23f6f9ecc6734999e7466ae9c5", - "envelope_nonce": "aacb6bb400ab28256d2e54d9eca742857f6d5e29c92b7b0044c95215b6db4892", - "client_nonce": "27e8fe90451e2934e8dc358fe30ba07d15175e2c70a6fda88b1bab732e80c140", - "server_nonce": "fefe1c85ec03f03f8ab66d4037a661f677954cda1695765381fe56ee553275bf", - "context": "636f6e74657874", - "registration_request": "03493e2bda2f5ce79408178469ddb1424bd6880b796945caf97eca254091493c4f", - "registration_response": "03f66c48699b84e856f2110cb770c46c59fd75831d5fe0a4b1c164a2b13272798503923edfe871973dc0e549692526eeed3967fec567cd4ccba30ea3696614e5c9d6", - "registration_upload": "033975e189b8c31851993d7b38abf30c0fc666ab8fb93e5ad8581a035fbeb60283bf546c8d3d8f1759d16dd4db3653c45248c8420703beba195304e1f5600cded75ae546ad6e00e6434492285305f0a087a2c0fd4c70d867c87e59aa18df7168d107ed74db82d4ef8d7268bc2dbcb146681347aafd7ed9bb8e78399766d753688f", - "credential_request": "03493e2bda2f5ce79408178469ddb1424bd6880b796945caf97eca254091493c4f27e8fe90451e2934e8dc358fe30ba07d15175e2c70a6fda88b1bab732e80c140026a65dd93748b6d545fe24839cdcba11db412e3649d704e88a0a24b3600671a77", - "credential_response": "03f66c48699b84e856f2110cb770c46c59fd75831d5fe0a4b1c164a2b1327279852590367466a06ccc880d11398181d1c302144c05e4ac5a0528ef3336fc26e4f1fc2abe70c70551c2922019c4e8aa092a32492dd50e0be8aaa44913d2c7253c8255ffec37fd5612b651b7ac26e5f2aeebb0caeddae68e8dd49aa0ee522dce90900da3537d718ae15954a5b5c2678d6efa31c846f6bd46605b56fdf70a448c3143c46162bef0095725abad6b72a7e3e64599fc1b5df9064e7ce40766fb0ac7e7964e03f609f0b7575cf87465a11900d2ac4e91f8097f34c5668b974e55af50ae1ddf4895d3f8760cfd8699c9bf6ea54fdaaa7af049e2ec205505ab33fad7c0ce680c14", - "credential_finalization": "e6aa42333906d3294b5f6f153c746974bfbb3f9d6eee94fabff2757994ae0828", - "client_registration_state": "9d781bd63f99a84b819c99c7ce497e6288f9122834048945997f2d76147efde403493e2bda2f5ce79408178469ddb1424bd6880b796945caf97eca254091493c4f", - "client_login_state": "9d781bd63f99a84b819c99c7ce497e6288f9122834048945997f2d76147efde403493e2bda2f5ce79408178469ddb1424bd6880b796945caf97eca254091493c4f27e8fe90451e2934e8dc358fe30ba07d15175e2c70a6fda88b1bab732e80c140026a65dd93748b6d545fe24839cdcba11db412e3649d704e88a0a24b3600671a77d406726833e0a9451751dbb50af5764e45187906840cdfe814282d5aa0efa95527e8fe90451e2934e8dc358fe30ba07d15175e2c70a6fda88b1bab732e80c140", - "server_login_state": "dab1a874a0f1db74fa0c9526e6b55b2c4843f26d181b410278b76f1a5a65b0b960e1c6fa8b17cca50f4dc45d53a7f5ef975e31406b31418b87d2d9cab0991e2326ca86363e475842c54ce152c8075b5d633ce3d44f3123bccfbb9a444833f6ed", - "password_file": "033975e189b8c31851993d7b38abf30c0fc666ab8fb93e5ad8581a035fbeb60283bf546c8d3d8f1759d16dd4db3653c45248c8420703beba195304e1f5600cded75ae546ad6e00e6434492285305f0a087a2c0fd4c70d867c87e59aa18df7168d107ed74db82d4ef8d7268bc2dbcb146681347aafd7ed9bb8e78399766d753688f", - "export_key": "5b8816c59a360431bf7afe5d93644136617c2d25bd67673785cc593cc40b1e35", - "session_key": "26ca86363e475842c54ce152c8075b5d633ce3d44f3123bccfbb9a444833f6ed" -} -"#; - -static TEST_VECTOR_P256_P384: &str = r#" -{ - "client_s_pk": "0300ffa27e9e1c07e726f3446303fd6e169a824e938be7142c5d57c966c41f48cd", - "client_s_sk": "63bcffa26f32783271d78d3b84dbdefda3a4533bc11d7ce73de145c6a80ea659", - "client_e_pk": "03f46e7129db840987843f76ec3c1521c7c753740bcb22f00b37b2cf52a9dc5974", - "client_e_sk": "502bd0e6474522e6c0572f81e4d7ba6cb87430aa34bad5eb7509d0dd5f2aa01e", - "server_s_pk": "02ec3bb6cdaa17e7e0872a57e2c89e2647983bced0b86ffd0d7fcdfa304f90e03f", - "server_s_sk": "47965063ae881466b08ba9e96cf1fc48d6bfb7e23d0a6bac30498b114dfc5a54", - "server_e_pk": "0304fc747fa5640c258d4846be2f6529ad35d61782f3e45a48efd6d6dbd1cedf07", - "server_e_sk": "1bdbabc050b6f5d59d01b02a03d187b0954c8a9341b696cb60c49a8511ab9712", - "fake_sk": "cf19797c598f15e3cddc5e01388999e85ca49ef729dc2e8ac10d8f10ff59d2c7", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "ef8bb36f1ad0921181910a8a1a497e18c1192264c5389f4e2cdc270d322e0a0c9b74284ee2af3d476cc7893fe7597d01", - "oprf_seed": "1f9b1338fb64584fdd2ef104c15a15a75cd9b922dedcdc4037409c4dd69c5aee2ecada1652d380f3335352baf92974c0", - "masking_nonce": "889e0b260347814b97b922fca5c96f89e3974776f2d6486399d17f7634d90d3a7fe5cecf435269a054b3b24d968c20c586ead3fe3b529b7a129f2cd75bb11645", - "envelope_nonce": "df7b5518d79f0c5748cbe6ba671786680e895ab470e8a8399018ab4a245e308d", - "client_nonce": "ed8e76fe71017d89879ec9580cbee48e1dff47f05d52e4e7655ea65a813897a5", - "server_nonce": "92fd03780d2b4035ebe83915fe37fa650477ac7d20a8d83b553d43a569beb584", - "context": "636f6e74657874", - "registration_request": "03f98a111741a24c1ad90f15985ac345636e631cddde1d05dd8d7f5fc00e57483c5504f390e8bda613345aa89d3493bed0", - "registration_response": "029daa00653cd0b4f9ac0b9e5640e6c6b608543e02955a40de853bcc530f3180bdd52991e528e570e650a6c50d6ed06b5602ec3bb6cdaa17e7e0872a57e2c89e2647983bced0b86ffd0d7fcdfa304f90e03f", - "registration_upload": "020b1901303ffe1ea63379d6e310d39712521ca43609a8bcfa4db28866411355862282ab14133a5a1c095c9af7b4ffc61aa5371b3ed762a24f94448e6ca0bb87b7c0ce558dce762c73aeb6ba1f4b56681363bcffa26f32783271d78d3b84dbdefda3a4533bc11d7ce73de145c6a80ea659033f437455f7be8b3ed47fd871057beb6e30785364bb586c074c0c4b475d17129383f531042647448933a17914cc2b61", - "credential_request": "03f98a111741a24c1ad90f15985ac345636e631cddde1d05dd8d7f5fc00e57483c5504f390e8bda613345aa89d3493bed0ed8e76fe71017d89879ec9580cbee48e1dff47f05d52e4e7655ea65a813897a5027204ea166787e2d7766ae8101143be5283f79ba8107b33f8db03339d72970597", - "credential_response": "029daa00653cd0b4f9ac0b9e5640e6c6b608543e02955a40de853bcc530f3180bdd52991e528e570e650a6c50d6ed06b56889e0b260347814b97b922fca5c96f89e3974776f2d6486399d17f7634d90d3a68490a295fd49a787786c1db2bb1e31e38b56e8151e958f8770041746fb5496696be499beb470f04a2ea7074502918277c024cd785b534de8ced805918a2a0bce17eded3cf11e6fc2e54d67d641632fe1d2fb56bf641540c34a023d32913fa9eddfad0aadd9fddfbe1c9af4a96da04887b1bdbabc050b6f5d59d01b02a03d187b0954c8a9341b696cb60c49a8511ab971202d56b40e364d4947215d3befb46b114cedd8ae3f75f9d38767a7cc87315e3473d94ca79a51b45a5bdc935be80d9bf697d384ded48d5d5b9bdb85432e3d85ee5aba8729d55ec530313d28ca3208090ce11", - "credential_finalization": "6ab06573cb9bb92a5e4ae2c6623bffc5463f94b81c2d38c1416e4dce35c32e49d2225ac5957a9913e1badcab819f35af", - "client_registration_state": "ef8bb36f1ad0921181910a8a1a497e18c1192264c5389f4e2cdc270d322e0a0c9b74284ee2af3d476cc7893fe7597d0103f98a111741a24c1ad90f15985ac345636e631cddde1d05dd8d7f5fc00e57483c5504f390e8bda613345aa89d3493bed0", - "client_login_state": "ef8bb36f1ad0921181910a8a1a497e18c1192264c5389f4e2cdc270d322e0a0c9b74284ee2af3d476cc7893fe7597d0103f98a111741a24c1ad90f15985ac345636e631cddde1d05dd8d7f5fc00e57483c5504f390e8bda613345aa89d3493bed0ed8e76fe71017d89879ec9580cbee48e1dff47f05d52e4e7655ea65a813897a5027204ea166787e2d7766ae8101143be5283f79ba8107b33f8db03339d72970597de1f1c0591eaeacea4eaddf441e4f78007347895f79775d836aeef03269ef260ed8e76fe71017d89879ec9580cbee48e1dff47f05d52e4e7655ea65a813897a5", - "server_login_state": "4af2c9dc93a9681293550723eccabed75aec6fc72b688bca2c68d8bdd8fe21c66b94753b04b4f9b9d1dfb3661397ca712f8990baea7679888d3045640cf0f17c98a6704146f5e4f6cfa2c764532fa1bfe78bfdbda526213af50d2c6b8dbd83eeb78c21b07ad43485cacaa2bb6743962ea4d450fab27f9d3848b4d4f5a50ecea2ce3fcf3007867d8e708182d76f97ba2a", - "password_file": "020b1901303ffe1ea63379d6e310d39712521ca43609a8bcfa4db28866411355862282ab14133a5a1c095c9af7b4ffc61aa5371b3ed762a24f94448e6ca0bb87b7c0ce558dce762c73aeb6ba1f4b56681363bcffa26f32783271d78d3b84dbdefda3a4533bc11d7ce73de145c6a80ea659033f437455f7be8b3ed47fd871057beb6e30785364bb586c074c0c4b475d17129383f531042647448933a17914cc2b61", - "export_key": "f79bdebcf6534e9fbb727a295edb160e952a8bda27b0e1d3f2379ece6bde6fc5d0d4486e2a37ef41d2fd1d0fe1719fc9", - "session_key": "b78c21b07ad43485cacaa2bb6743962ea4d450fab27f9d3848b4d4f5a50ecea2ce3fcf3007867d8e708182d76f97ba2a" -} -"#; - -#[cfg(feature = "ristretto255")] -static TEST_VECTOR_P256_RISTRETTO255: &str = r#" -{ - "client_s_pk": "026a80b08688346c0a5d884119239af863b0729ef14bf8b86b285b5751b6e2b067", - "client_s_sk": "8ea03094d56fdfd7937b9a4b8b89e2b09f8a2a493d6409d39dfec1f4612a4fdf", - "client_e_pk": "0326c437e32e7a5604807b24f92385cd732e6b70f70793fd59022d9470e6579622", - "client_e_sk": "4fe1d7f5159e429d35bb4d3c66ca20f50b133893f1e1712e89d9edd34c044612", - "server_s_pk": "02267105ddf0f2a9531a0875ab315f1c831766134af1b7e4ad9c4f298ce0536eea", - "server_s_sk": "8871c04d141df9881e3ef15210660112c164cc32867f3ec0bd67d68cbbd87424", - "server_e_pk": "03315305fc11f61944bc790a112f01e1020df7a830479618e7a42dd2204d30075b", - "server_e_sk": "225599a7b01f047bee6fba835c86f271410b786b3933cd7542abc8c58afb10f8", - "fake_sk": "61ea20ed0bde67756fe11072c5a8aa3103085a293d60bcbb0b5c5e09920d07d8", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "269627e7fb86bc28052c4538cd8a4a8cf30ed530196e0e2d99a8382a78c21f00", - "oprf_seed": "3abaf808e5435b5fb9929d98dc3060827fe627bbaefdaeb9205b9cdf2037a625ce8a687ab3f85c0a70629f94c1f23212f8d67b3dd0fc422c5f65a600350267b2", - "masking_nonce": "093ba9502b07a9a838f28bd2bfb9699315549db299ef6196fa32233acdfaabf9b97a0dd265db7ff52ca1b1f3fadedfa9dca26751b166972e6ab6569ff08ff5b5", - "envelope_nonce": "d7e0137e8adf2de3b00cd9e0c888f36ecba2ee18f92e51b7298fbaa654d286ba", - "client_nonce": "1186e18b135739cd36cde4a2dd72ce5d1c4a92a96da279ead6f54813f84d9d86", - "server_nonce": "9589f0bbec5cc2c68b98684158b8ef40f81f7f0fb8b2197e90d8e3666cfd1682", - "context": "636f6e74657874", - "registration_request": "f28816d64e1d4f17a0f36830ed92349d29de1e0444f21147a23d1952a4355573", - "registration_response": "7c734fdd7907d3aeef3fd17a8bb1d08642ab04f36c1eca4d8e6b10147c8a505f02267105ddf0f2a9531a0875ab315f1c831766134af1b7e4ad9c4f298ce0536eea", - "registration_upload": "03ce990fb3f9331bccd12eeadcf92f938dcf3acb07ec660c2936f8adc34554d7c7ecb4d45aa36908729dc4ca3e7c6e0a4a605fef0e7aa9c84de814e304a27dae2b8738f10785f2a1005d906a37f12b259b83a9f8406b6d6783180ba471e27393858ea03094d56fdfd7937b9a4b8b89e2b09f8a2a493d6409d39dfec1f4612a4fdfaa6224b035117cd28adba5aeba7c4733b66b44fa47052f2f50fd68b02360a769157fbd7e00af377f755d2ae0d1f6042eeb8e45c0c870eb7a985c8cd867aad53e", - "credential_request": "f28816d64e1d4f17a0f36830ed92349d29de1e0444f21147a23d1952a43555731186e18b135739cd36cde4a2dd72ce5d1c4a92a96da279ead6f54813f84d9d8603eb66e9a64dd24d6aa1a89dc0002e3e12f01b3dc6d9005bd72a03ef934377f23b", - "credential_response": "7c734fdd7907d3aeef3fd17a8bb1d08642ab04f36c1eca4d8e6b10147c8a505f093ba9502b07a9a838f28bd2bfb9699315549db299ef6196fa32233acdfaabf92bdd08e08a4ac46f690d1dc4ad05eb4323770753adbf0c354f7fe215200c3091b4342949f456fb3d0e2d6a59ce9da891930dde787b9b6943446bebf9b029a82e878e2ca9412df818403c9a8b817985f9697219d1319bd90b57793a64472995b72b0f15551d35c1f90db203b8dbfc3448fe35982b350349255b4d1a8bc100d0f280225599a7b01f047bee6fba835c86f271410b786b3933cd7542abc8c58afb10f8027a0c4c39a84d38b39f2b54c62c20b312fd37090e841337483b27047c143b94a1d57a81fed7757d80845053b83cb02890e60ec0f48d241965f752dbc826b88753d2d256b76e8c181f48d7c24351da7b2bad1c41790c20776db86c654bf48cb9ae", - "credential_finalization": "643a6547dc003d7caa81adadfb74be774853e0a422bf58fc61e5918a3dff35e9854b4150c73ddea93283deb6aa4216437fad406fdea480ec229fcdae3c83d6da", - "client_registration_state": "269627e7fb86bc28052c4538cd8a4a8cf30ed530196e0e2d99a8382a78c21f00f28816d64e1d4f17a0f36830ed92349d29de1e0444f21147a23d1952a4355573", - "client_login_state": "269627e7fb86bc28052c4538cd8a4a8cf30ed530196e0e2d99a8382a78c21f00f28816d64e1d4f17a0f36830ed92349d29de1e0444f21147a23d1952a43555731186e18b135739cd36cde4a2dd72ce5d1c4a92a96da279ead6f54813f84d9d8603eb66e9a64dd24d6aa1a89dc0002e3e12f01b3dc6d9005bd72a03ef934377f23bd8fabb81cc58414997e3c76aba160146183de4cc966657e5b1def258df81ff6b1186e18b135739cd36cde4a2dd72ce5d1c4a92a96da279ead6f54813f84d9d86", - "server_login_state": "13bab355577815ab29a0571bc571f6911d88f92cc64d6e930872674364b7400cacb5cab973263ca4da8687f36f894c06fb8939e96a7c6d1d4bed17dc1e00a12878b01cb72645993a5186b124808b8604a24b63aa3d934424dc78f9e56d02b506941b0af906d06edec7ab2eed07847fa424b5881e71282aa306d223902b37c354ed6f8a57a79a4433771a1b3aec9ab490df027ac3383a42cf7d09bed5c35e1dd1e092354e18d809935e1c19929906398286669f2603153de7026674823149fed0", - "password_file": "03ce990fb3f9331bccd12eeadcf92f938dcf3acb07ec660c2936f8adc34554d7c7ecb4d45aa36908729dc4ca3e7c6e0a4a605fef0e7aa9c84de814e304a27dae2b8738f10785f2a1005d906a37f12b259b83a9f8406b6d6783180ba471e27393858ea03094d56fdfd7937b9a4b8b89e2b09f8a2a493d6409d39dfec1f4612a4fdfaa6224b035117cd28adba5aeba7c4733b66b44fa47052f2f50fd68b02360a769157fbd7e00af377f755d2ae0d1f6042eeb8e45c0c870eb7a985c8cd867aad53e", - "export_key": "2fe20c906ff2656ba5c9c4bb313788f88395ef86281e4448462d5b1f5438d4afc91d2ccf9b8f340c0434db96a1996bc90cfa8a378c349c18e4291e793277e31f", - "session_key": "ed6f8a57a79a4433771a1b3aec9ab490df027ac3383a42cf7d09bed5c35e1dd1e092354e18d809935e1c19929906398286669f2603153de7026674823149fed0" -} -"#; - -static TEST_VECTOR_P384: &str = r#" -{ - "client_s_pk": "027ad019b16564c074d6f2ae68bdf20a738d7d2e9839a0abfa438a760d0c06c16048fcb8fd4f1dd115a7dfc3fea5f09b58", - "client_s_sk": "834a110fe6c0e7b6cea98c3bc534a928d6a842116774a1e01b513584405cd2e31970f765d7bf0db0ade9bf27fcd9cd0c", - "client_e_pk": "036a8b6a879e4b771b980f60263761fe7fe8ea7caf25f72093e4e7becaaea14a11a6acdc9ff156f0f9663623e17738a541", - "client_e_sk": "44760cfc351b43df634d788300fe8a21d3a1045654421a0c7db0e4def8a4f95f78900b61e9ceeff021f381270cdb5418", - "server_s_pk": "02f66681149226426db92504e9c0604e8f9fdbfc5f36f399e77d2a9b1383a00d693a04e3549bf909acbbd700162cefbca9", - "server_s_sk": "5dc037810ae1265de50fe0262b18f9f494866dfd9e8b10d7cd9126e513de0f3248510c8af60e8e61d875eb702610a010", - "server_e_pk": "0345d90f8c96cdec81eaaeb147250f54e25824b5fa9df6a333fa932cc73e3768228f3ba8b81a1480c1c8cd705775ea9761", - "server_e_sk": "c82bf9be4884f55e97240bb1fddf2c21cb9d44ea208a6448dcd0dfa25b4500b60990c58e8de1041a10068c8b1390353c", - "fake_sk": "c75ce826bfcfaa3328fbf6ca2060c5f80313048082da3bbe9b81654c4f6bdf87374e15ad49594315e973e0cd289c6bf9", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "bc8fd9384462ca535b97649453851e7d053165c1d813f88f168e91deadbd58ff2f1ce08628948d75db1ae9ddca1d5b97", - "oprf_seed": "b06de4f6d4a0dd8efe8afb46f51d197a3e098d0af21b52b4a5117d4980ca8fcd90c629400a43476271e89291d6618096", - "masking_nonce": "5469703e134b2b70a9ad0aad851cdd22038fce9291147198b87d5731ec1ab5000ebf49eacbb3b90e6ea84bc1ec0032b233b9edf505289298db7ef65720e1f2aa", - "envelope_nonce": "f4320d83faae12c799f3ceca6a84c4aabc9bc1896b11b217087a9b820c6ff075", - "client_nonce": "4edb4057671642bb7630028923812954abdd34f57bf6f62ad4f24568680bc0be", - "server_nonce": "aa49c4593ad1ff89776852ab9f555a68eba4b5d86c7ec7f39577cdb04684e24f", - "context": "636f6e74657874", - "registration_request": "0305632a043103148c0c50187844d031dc33aa81ab6b9d13919469b317703774ee3eea7c7b4b63445fb446ce2c4bde9173", - "registration_response": "03f878aaf28a28fbce8805a11b0feccf82233c46a75f7c8513c47a23bba92bced8f95d97c795c70a7755ac3c5b290a14a302f66681149226426db92504e9c0604e8f9fdbfc5f36f399e77d2a9b1383a00d693a04e3549bf909acbbd700162cefbca9", - "registration_upload": "03499599951aa81858e10fd6394610cdceee52195ca2f5eab241fb8a30d24f4f6ce3f33839c025bf5ebbc056d489e55797cab6175299333799ad308b718815a97d3326c82311f380dbc3d3f3bbb1c9922fa75b4eb2125fa386b75b610a07c2f639834a110fe6c0e7b6cea98c3bc534a928d6a842116774a1e01b513584405cd2e360093806a0701ac9820c29ac81ab66b91d12243b036b20309c2dab1a473869c03efadc490a20af8f3e5dec0f5643a621", - "credential_request": "0305632a043103148c0c50187844d031dc33aa81ab6b9d13919469b317703774ee3eea7c7b4b63445fb446ce2c4bde91734edb4057671642bb7630028923812954abdd34f57bf6f62ad4f24568680bc0be025cbaa73207a363589d904f9ccc29197ddad82e32580db1e4fcc26eaee9e202cb40e8b0a08b5d1f1240e835f9da08d0e2", - "credential_response": "03f878aaf28a28fbce8805a11b0feccf82233c46a75f7c8513c47a23bba92bced8f95d97c795c70a7755ac3c5b290a14a35469703e134b2b70a9ad0aad851cdd22038fce9291147198b87d5731ec1ab5003eff2203d3b86ee028fe1889fd24b6459a3ed00fda3cf90bfbb9508ce62367a185609ec407a7765a2cdfb9d4558c984bc3c235451a584c133ca70c57ef5573f3dcf29dfdce332106e53d4778331e8dcf4f807f3f13c41748fd251c5af002f64efc48cfbd7243d78ab451b9c9cc0dad4fca77583abe51538f2f42cb198cb698b7fccb9d44ea208a6448dcd0dfa25b4500b60990c58e8de1041a10068c8b1390353c021e31dcaffe65a256f1b32c8e91fda21d475a4b4fe06c961a6e23a7aca49214846a5d999db011e5de464859ee8d023cf96d3c35ef24a969602bc8b9346dc55a5a4fcb14aa9f42932986885a79317945d277e9601dc4ccdb5fee028f17fb33f14e", - "credential_finalization": "4d9dd316ad4c575ef6c6a26f90e72f26672d8740e03c9d8808c95449f3279ec8709c5d2f1fc1cf14270d3919ee952e86", - "client_registration_state": "bc8fd9384462ca535b97649453851e7d053165c1d813f88f168e91deadbd58ff2f1ce08628948d75db1ae9ddca1d5b970305632a043103148c0c50187844d031dc33aa81ab6b9d13919469b317703774ee3eea7c7b4b63445fb446ce2c4bde9173", - "client_login_state": "bc8fd9384462ca535b97649453851e7d053165c1d813f88f168e91deadbd58ff2f1ce08628948d75db1ae9ddca1d5b970305632a043103148c0c50187844d031dc33aa81ab6b9d13919469b317703774ee3eea7c7b4b63445fb446ce2c4bde91734edb4057671642bb7630028923812954abdd34f57bf6f62ad4f24568680bc0be025cbaa73207a363589d904f9ccc29197ddad82e32580db1e4fcc26eaee9e202cb40e8b0a08b5d1f1240e835f9da08d0e2e546cb8ed99c8d3ad4c1f32c4cf19ce4da1e2a13700df0a0a1eed43f251261f6e7edb92cb124f652241186604c5f1cdb4edb4057671642bb7630028923812954abdd34f57bf6f62ad4f24568680bc0be", - "server_login_state": "2e33ed0981c481b9141212ab38ca6e8ed1cbc132f8b96c70c2268b6b10aca88c38411cae2cf819b786922785bb2b7019e20c7da8c330d03e251b1fb4555995389964ad78cda9a6ea30c9b0e5b3733656c40cdf92f31ad08331baddf5c98a4ff6641618b739a79bd6a29f917505c30ca462b3d43b762fd7cfc8181fe439055f4f151e5ea1796bcc0f146305e9712c6376", - "password_file": "03499599951aa81858e10fd6394610cdceee52195ca2f5eab241fb8a30d24f4f6ce3f33839c025bf5ebbc056d489e55797cab6175299333799ad308b718815a97d3326c82311f380dbc3d3f3bbb1c9922fa75b4eb2125fa386b75b610a07c2f639834a110fe6c0e7b6cea98c3bc534a928d6a842116774a1e01b513584405cd2e360093806a0701ac9820c29ac81ab66b91d12243b036b20309c2dab1a473869c03efadc490a20af8f3e5dec0f5643a621", - "export_key": "4e00ea96339443ec9427a94d5ffc38faf7abfe49bc45f33a2b8893ca05266eb7c3d9dda533244384656e3595e589d4d0", - "session_key": "641618b739a79bd6a29f917505c30ca462b3d43b762fd7cfc8181fe439055f4f151e5ea1796bcc0f146305e9712c6376" -} -"#; - -static TEST_VECTOR_P384_P256: &str = r#" -{ - "client_s_pk": "03aa7fcc3a2b13ed9080a84f4c73ef1e8431cb0f981911d8e9b1bbf6d1b13a97c6b4230bfeb638d960f2deea221c699e80", - "client_s_sk": "e465935788fc3d6f16cdef00c912f9e032a6aa4d9452c86cbbf2549217f390b0a81faffdca2b752ec7bfdee0dbcda7a5", - "client_e_pk": "020c105b40758cf0d0c596644d387eaf598dc215652fb8c7ae3f9cab07b72ca87feb3385ede83ca6792df13959ca866650", - "client_e_sk": "a5c0e6f2080c4952fefdb7e50753942e8f46ed5dcd16925d976a6919d601721e7d2bd75f89b07e4a48cb7e9a5afdd450", - "server_s_pk": "0295c88cdbfefcacbab08754dd36b58abc72026e761a6e0337b4feee1392dd4dd0f2ac6817bb1e12df2c6020a790343695", - "server_s_sk": "82aaee1871a785361798e2b78179a333ae3c4da7fb8d537534e244f889c2bbc51f92c4505b24bef69dbb5028cf87653e", - "server_e_pk": "03363da7ae2f5ebf0ae9e3d98fe6c7ecc41fec55afa834959e71a61d848d850cf50f2636c877f78e8a7a3d525408dd79ef", - "server_e_sk": "a271eb33e9b9ec5f8bc797a66596bf477cbf8d4b7fbe69b18509dfe633f4159cbd3a5e92d3bd0fd2de81a7d9bb6499f5", - "fake_sk": "90574e2a941462615a8958064f02cfd2070ee0c2f12761eb77e70d6b5f5eb8417843b6812c89b6841ff7bdbbd2db33cc", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "48408a664deda29200696fdb750224da0210d17f45a0b59de34162e63b57b994", - "oprf_seed": "94b2ded5dc7b7bf787234c8deaa2107d2522b51125d2e58b331e36b6329ad4c1", - "masking_nonce": "2b7d2d7e3e856bb56a1b52b0e2caf2b166b72f3542dd96913979eec031ffe9dacce0484db3069adde7e122d145a993c31bb0f6f663c178e1f95fafc7a0be8a58", - "envelope_nonce": "e2476436fb2d0a4fbb17821008da5e16650a8fa03f68138b733a5d200e6c2983", - "client_nonce": "3bd63f9517a75441ea79144e4f6b050b815cb05211737902a074ae83c6aeb2f8", - "server_nonce": "cbbb2b55ef928799ec4007730505e0cf2189d5e60c5d914948d32e4a02ca4488", - "context": "636f6e74657874", - "registration_request": "0350999de8c8a3dfb259b5ce85966712c2989449758ac6ac14076c93c8abf3e656", - "registration_response": "03138b9a92582ac291858e1954b2dff11098c89fae57c2ff137400ba95b901a39a0295c88cdbfefcacbab08754dd36b58abc72026e761a6e0337b4feee1392dd4dd0f2ac6817bb1e12df2c6020a790343695", - "registration_upload": "03808b6fa408dc690f92e06196131aad15dff9164e10e11991d1cdcc763f979cfb4577cf766164fa6ffc75a67b13ac2a910b878ac6b600b274baa71d8eb97323ccf45443577c62faf1222bf0fe017d983ae465935788fc3d6f16cdef00c912f9e032a6aa4d9452c86cbbf2549217f390b0d55fc01d6e91ea395a9233165418b5584f38f31175083cccfae69578e85758b1", - "credential_request": "0350999de8c8a3dfb259b5ce85966712c2989449758ac6ac14076c93c8abf3e6563bd63f9517a75441ea79144e4f6b050b815cb05211737902a074ae83c6aeb2f802386993c958a9a14fc3a788d73f89fc932930a077c86d3222d9c40f07e3f0795d9f5c7191118978242bb722f72a082ac7", - "credential_response": "03138b9a92582ac291858e1954b2dff11098c89fae57c2ff137400ba95b901a39a2b7d2d7e3e856bb56a1b52b0e2caf2b166b72f3542dd96913979eec031ffe9da93db2760bead8c6834ed76bade81fe8cb849f92f957991ff9f41d1ecb7fa4eeb82acab5ba32fdbeff970a50986e16c069a230989b18a6d2488f096a52949a6e4c824f25e803253cd8498991c3707cb1ee9edc14c5b4b8b4d2e03b4059c075a785bcba61873a9d3994029e98580a55437d67cbf8d4b7fbe69b18509dfe633f4159cbd3a5e92d3bd0fd2de81a7d9bb6499f5039cf64cf96647d66faf21348683a4d80ee69fcbd8cb6545dc8a13aa52e226c77389c0f1a7bb2396bee9a6807ec566835041259eb94980ac4c5634dde99c9d0f5124e2653102170a34626f32907745e5c3", - "credential_finalization": "4fe1618a77247445239c7733cb0d25380fc728d86f5785fd08bbe13419fd94f5", - "client_registration_state": "48408a664deda29200696fdb750224da0210d17f45a0b59de34162e63b57b9940350999de8c8a3dfb259b5ce85966712c2989449758ac6ac14076c93c8abf3e656", - "client_login_state": "48408a664deda29200696fdb750224da0210d17f45a0b59de34162e63b57b9940350999de8c8a3dfb259b5ce85966712c2989449758ac6ac14076c93c8abf3e6563bd63f9517a75441ea79144e4f6b050b815cb05211737902a074ae83c6aeb2f802386993c958a9a14fc3a788d73f89fc932930a077c86d3222d9c40f07e3f0795d9f5c7191118978242bb722f72a082ac76bcd42cbe5150c7632326bf7b038ac8fd5cb09530c144cdfe798847035a7f14c82849c114e13883295de509a7a9a15d73bd63f9517a75441ea79144e4f6b050b815cb05211737902a074ae83c6aeb2f8", - "server_login_state": "882a3c1a309a19a32907ed72540b465f308380cb9adcb3e1d906d6e0c255f91de5ff8b87edbe0af9daa50908efb34a9a8da444ced5f1b0e2bfce8ffd4947e1e64d169ed4727febf302256f84ee462e2219c5217236da8749c8e3aec996eedf2e", - "password_file": "03808b6fa408dc690f92e06196131aad15dff9164e10e11991d1cdcc763f979cfb4577cf766164fa6ffc75a67b13ac2a910b878ac6b600b274baa71d8eb97323ccf45443577c62faf1222bf0fe017d983ae465935788fc3d6f16cdef00c912f9e032a6aa4d9452c86cbbf2549217f390b0d55fc01d6e91ea395a9233165418b5584f38f31175083cccfae69578e85758b1", - "export_key": "7c242005347a90ed8a263e0963f554d1c0fc2d0df3b3bdb4a818e94569da2cfa", - "session_key": "4d169ed4727febf302256f84ee462e2219c5217236da8749c8e3aec996eedf2e" -} -"#; - -#[cfg(feature = "ristretto255")] -static TEST_VECTOR_P384_RISTRETTO255: &str = r#" -{ - "client_s_pk": "02c1d4d7d66aeb737564a1b854dd415b93cdc77c09652783d62947bac97d501bbb6a9fae15244f06b38f0f1c82a5585e5a", - "client_s_sk": "a0563c18fa5e065414411f2b7a05a42ccafffe6c3f820a453fdc5ec4bcbf75164646c3dda5ad48424c33342cd7e7e4df", - "client_e_pk": "02cfab78104a87ec00bbb5a59b9da3a2e8007ccf2b280129594f61f38702bdb9431f770201bda3cab38a583e907b686c16", - "client_e_sk": "5254f4ded1c5274d284bd01dd1eed07ec23ae9748857606282c6170d5a722058763367284abe9caf9389d942a523db5b", - "server_s_pk": "038b01c3863136ab24e59be966b61516c622bb2cbe4d615d598b692aec4584ccf03617949fa2eb768890b50f91316997f0", - "server_s_sk": "6dd0f63b233b2bd25288bce7b7c4128e595d7e7ae14a502151f17496d821b976f2ffc636ad02dab23786054c943a5248", - "server_e_pk": "0243dc3cd7669109cbe9dcd71c10c0df3c571603c90cb8f836471851c8c4e59b2b33df99a83e5f82b9997509b0937c5af7", - "server_e_sk": "0c6514cb587895583f71bea545cd793eb5c6c3a7b47af02bf7eec36995013ff5e62d020aebaa8584cd0c09db2a57c394", - "fake_sk": "bd88b0857965e266c8b9c070af374335ceed0a2588081b338128985d8e6d9ac5cf7dd28a4eab2ed92a8d1c5e40586667", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "945e750cc030ea56fb69fd959b1c869bbbd11598a55cca1c344680bb3af39e0c", - "oprf_seed": "6ede60508d189654155ebdf35e3e1f9ffac1b0a3a7c3af5623a16f0db771341826aed1298ce0a2c9458d810d0db29fb91d2220c58e5a4866ce8d26449d2ca5dd", - "masking_nonce": "581e546cc899d1aefb99c2b7444b66702b7e810f863303b3ae542cacee4e5fabf1b048c70e198d7f4ff92d9ef651e462ae64813d2a61dfb76834ab41ada048d4", - "envelope_nonce": "c1711624ac043ceaefff11d3e7cd8d0968ce5cd737edccffdf981b6e550eda63", - "client_nonce": "c45770702f6a169965cdc6bde6bd684ae0cca88beff84a10a10531c44881a251", - "server_nonce": "e22873960b1dce985b72c7aceca1211b0d62901a12ec24d5836bee01d0fa3069", - "context": "636f6e74657874", - "registration_request": "38f651deae743ceb93947f3b29c0b6a8bdca06cd2ddbf8bf4034f188eb21a341", - "registration_response": "9a35389a31de25ffdb70f4c76630c55089acf2b4f4de9543f59ece5ebe3a4626038b01c3863136ab24e59be966b61516c622bb2cbe4d615d598b692aec4584ccf03617949fa2eb768890b50f91316997f0", - "registration_upload": "037243f014bbdfa0dbbc3caa7333fcad50be492f2c08233f81a798fed8fabef6b4b400920800531dc9eb25d3af5d9f20a1ac1cb96ceb4f40c0dc2a86f9b3fd0cb869b697b95cef3ceb267219df86f74d143102a91ea5499b1beb4d184964722caef65d052c9527104424e0320809928391a0563c18fa5e065414411f2b7a05a42ccafffe6c3f820a453fdc5ec4bcbf75161189765050d2b8e8e288f7e7d4dae5a4d864e39de8dfe6b56d4ecd2f7aa1d73b970ef1d89e00dd468e92465676f11fcbb3ce89dfa165700034942a4120ac8c14", - "credential_request": "38f651deae743ceb93947f3b29c0b6a8bdca06cd2ddbf8bf4034f188eb21a341c45770702f6a169965cdc6bde6bd684ae0cca88beff84a10a10531c44881a25102ff65f91c0f286b9469d0f33463b70868e2693f8c511c92dba2e55689bbd298a440c2c6b0c831fe87dfb8ad6286460d1b", - "credential_response": "9a35389a31de25ffdb70f4c76630c55089acf2b4f4de9543f59ece5ebe3a4626581e546cc899d1aefb99c2b7444b66702b7e810f863303b3ae542cacee4e5fab6a5aae2fee1f37a48874d26eda94d6285d5002bcc0c070fccf0c7731f55ceca1b678e1c355d4d933992866bee7f9f28b43359b348e63292bc9ffbd5d41ff8f14d5398384c86920b882e92476b954d4481234fbc01021b0c5e78327bc170aa0278eec426b7cedddd0d6b3d807bc3d9f52f3fc3a40a425f5514200f16eb92e0d7c67530fb4f215bc3e6b14e95cd4f03cbd7eb5c6c3a7b47af02bf7eec36995013ff5e62d020aebaa8584cd0c09db2a57c3940241e8e3ea63ecb7374164f8713b915f2d563a18f99c13e855a82d8f2af5af048835e4146f56612b9fd4e67f823a70e48a19df97488e6d1b7ff3a0a1e949ed25aa4835d88ea7a44f5028e8ad58ca0203c0087439e22dd7aea4ce64d8fae6432bfcb601acd244fe9e44b392c69cfc116ad4", - "credential_finalization": "50f417b52847e0af257a96f03ec433bc1b202528727cd0d768247c7584d0e14879d9eff7a4a61c1b954f923c64b0c2fffb328cdba031b7be95b3dc49e23042d6", - "client_registration_state": "945e750cc030ea56fb69fd959b1c869bbbd11598a55cca1c344680bb3af39e0c38f651deae743ceb93947f3b29c0b6a8bdca06cd2ddbf8bf4034f188eb21a341", - "client_login_state": "945e750cc030ea56fb69fd959b1c869bbbd11598a55cca1c344680bb3af39e0c38f651deae743ceb93947f3b29c0b6a8bdca06cd2ddbf8bf4034f188eb21a341c45770702f6a169965cdc6bde6bd684ae0cca88beff84a10a10531c44881a25102ff65f91c0f286b9469d0f33463b70868e2693f8c511c92dba2e55689bbd298a440c2c6b0c831fe87dfb8ad6286460d1bd089e7b04a5bddab582c56c919ed4972e43ec70695d516b48b3d54f3a98a5c4b47e663fbc0691f3eaf2d33d7c6e951acc45770702f6a169965cdc6bde6bd684ae0cca88beff84a10a10531c44881a251", - "server_login_state": "ab1b5088cc404142917da8cb9f0460800e222acd0abb20a0411824bbb3a33530caa46508d6a4d6778394fa3a1c7dc7c922241761e84567b0900365479ca10cdcae0c9adf368396b41a0c857c52274c3705ea4cc35b3dce1c83cd6b17b75723a0a93996c25c33f2fd1d2367416c40743ca0019db466d62c64cf832670a5e4e2e0526b13f76de824546a13c404d9545a6d401c13d0034c9e4b748854eaf316b74c5df9c3dc2caa274f196b9bd5c0e2ebf9036ec462f72da000d8e9631490aa19e0", - "password_file": "037243f014bbdfa0dbbc3caa7333fcad50be492f2c08233f81a798fed8fabef6b4b400920800531dc9eb25d3af5d9f20a1ac1cb96ceb4f40c0dc2a86f9b3fd0cb869b697b95cef3ceb267219df86f74d143102a91ea5499b1beb4d184964722caef65d052c9527104424e0320809928391a0563c18fa5e065414411f2b7a05a42ccafffe6c3f820a453fdc5ec4bcbf75161189765050d2b8e8e288f7e7d4dae5a4d864e39de8dfe6b56d4ecd2f7aa1d73b970ef1d89e00dd468e92465676f11fcbb3ce89dfa165700034942a4120ac8c14", - "export_key": "9763c031678a1b0398640298c9b2ab1651c580ca573e77279fb8e5869fd2d728faf4eff799ff9f6da74452935afe513da1dbaee132514c79529cd48680fa9df7", - "session_key": "526b13f76de824546a13c404d9545a6d401c13d0034c9e4b748854eaf316b74c5df9c3dc2caa274f196b9bd5c0e2ebf9036ec462f72da000d8e9631490aa19e0" -} -"#; - -#[cfg(feature = "curve25519")] -static TEST_VECTOR_CURVE25519_P256: &str = r#" -{ - "client_s_pk": "356d33885c60c90a4bca2ca9e758c72842016738cb29114efe5b363a77e60e18", - "client_s_sk": "98e74559a5af2af21de2f4caf01dd88232ee6a542e6bd2ed68b9dfa9ddf65e6f", - "client_e_pk": "d9a367a4aa1f2822a5e50d3616f8763bda41a0882f2d29d78e25db36594dd44a", - "client_e_sk": "f8ca80bc3fc0301986545adc309928a756d2aa1e79c6c617386a2ce9bc31da5c", - "server_s_pk": "fd69aa024b1896f5911c50d2990ec5075738a5a86a9722b9779eb3032eb74838", - "server_s_sk": "b06d35d129927c7427b2532656d7b33db7e6ff0070c630ab37a5022af8899b6d", - "server_e_pk": "05369b574ab94ef297688d377c4fb4693b80898733128ebce44ad6614290aa64", - "server_e_sk": "a02c5c8d35a1924823bd9ece4a67906211a29674355896061f2c72b63a806959", - "fake_sk": "48faf5b2e5852fa92c7e431eee79383886885e9b2fa0e5957728614af670c964", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "afde4969d9abad215bc2d476b968a4113ce39c8736da16e107e067abbb9343c9", - "oprf_seed": "1b55db8ba8bed7c6dffee2682971f938ae43f91898698c5f34a6c6dd64e69a19", - "masking_nonce": "da87388c66103598f4b49a44abc7ac2ebf6caad4db2e32e19fb59d845e9d9b820f7afe413703648d03501421f9d2e25bd38bf35bd0a5b7167927cebe237c3dad", - "envelope_nonce": "3c9f900ce6674b8ea3ee734678bd1e9397a1842392f2c79b3400434bee6934f4", - "client_nonce": "e1b52de2ccb8b8b9175bca18cac32ac5138717d2bdea57dd1e8182f71e98af8e", - "server_nonce": "d26610cea1112c2c57955b5e24242be031632dfd8ce1a018cc62ee653e5a8e33", - "context": "636f6e74657874", - "registration_request": "035741c014e89d5a10fd6f2b81e2cfc9f35e53222c619fb6fd20608843530b74ae", - "registration_response": "0264db058e5010d658021d7c1b972d626fa353712c83bf7a7500d4a9bc22e85358fd69aa024b1896f5911c50d2990ec5075738a5a86a9722b9779eb3032eb74838", - "registration_upload": "9dc1380a44873401d0dc181baecf898e9bc1f4bbcd75e7de3e28ef9f6b570479e059b27ad6ed0f9b240d9dde050aedbf30a5684e23dfe1af47f6bb75b240c74a98e74559a5af2af21de2f4caf01dd88232ee6a542e6bd2ed68b9dfa9ddf65e6f85396cff1f5d230d09bd9e662bd5a4d9594a32d2ab2b2f8a581542db82467f5e", - "credential_request": "035741c014e89d5a10fd6f2b81e2cfc9f35e53222c619fb6fd20608843530b74aee1b52de2ccb8b8b9175bca18cac32ac5138717d2bdea57dd1e8182f71e98af8ed9a367a4aa1f2822a5e50d3616f8763bda41a0882f2d29d78e25db36594dd44a", - "credential_response": "0264db058e5010d658021d7c1b972d626fa353712c83bf7a7500d4a9bc22e85358da87388c66103598f4b49a44abc7ac2ebf6caad4db2e32e19fb59d845e9d9b82aac713b4beab61312d2d57d98249f1a6e5e7c8bd435d704149679a381fe3c8da8b9b682af290e93422d1c52fa5cb94135823f8587b3c2a9056ab36845659ff2cad86ca029fd836b316471f1a42ee1a928331a4f7c1ec7aefc6429a13008c88bea02c5c8d35a1924823bd9ece4a67906211a29674355896061f2c72b63a806959606d4e3a19bfa8f940c87e5dc9e63ddf6c083d7406942c8c32e6bf7b35c504231d00490013365017c87b0c786f7d58e0bbe69c3c7f22f75e67c4a2ebf716c595", - "credential_finalization": "e9e0ec963e9096dcfcbed47fdf6ac5c0fa43103a11753d7f82652ea3d64a2657", - "client_registration_state": "afde4969d9abad215bc2d476b968a4113ce39c8736da16e107e067abbb9343c9035741c014e89d5a10fd6f2b81e2cfc9f35e53222c619fb6fd20608843530b74ae", - "client_login_state": "afde4969d9abad215bc2d476b968a4113ce39c8736da16e107e067abbb9343c9035741c014e89d5a10fd6f2b81e2cfc9f35e53222c619fb6fd20608843530b74aee1b52de2ccb8b8b9175bca18cac32ac5138717d2bdea57dd1e8182f71e98af8ed9a367a4aa1f2822a5e50d3616f8763bda41a0882f2d29d78e25db36594dd44af8ca80bc3fc0301986545adc309928a756d2aa1e79c6c617386a2ce9bc31da5ce1b52de2ccb8b8b9175bca18cac32ac5138717d2bdea57dd1e8182f71e98af8e", - "server_login_state": "f34318b0b8512ad4aed925465f80e25f3ca18b6ac57f0341beeaeda4ce944580d541e1e80e929cd4f2ce6e91c71a816e09833176a3a3e48801e9583b7da585535266262802364c33b9f4ebbf1e5fafe05b4beb6871bd197c5c3110d22404dd5b", - "password_file": "9dc1380a44873401d0dc181baecf898e9bc1f4bbcd75e7de3e28ef9f6b570479e059b27ad6ed0f9b240d9dde050aedbf30a5684e23dfe1af47f6bb75b240c74a98e74559a5af2af21de2f4caf01dd88232ee6a542e6bd2ed68b9dfa9ddf65e6f85396cff1f5d230d09bd9e662bd5a4d9594a32d2ab2b2f8a581542db82467f5e", - "export_key": "644446d460267013ccc320a626484f6d8b4fa773f1558c43eb0ddce656a53570", - "session_key": "5266262802364c33b9f4ebbf1e5fafe05b4beb6871bd197c5c3110d22404dd5b" -} -"#; - -#[cfg(feature = "curve25519")] -static TEST_VECTOR_CURVE25519_P384: &str = r#" -{ - "client_s_pk": "f94d2f4ed06a99e5dc09edb4ed4566a29cb6706243ad0665019b559932a93375", - "client_s_sk": "8034c5724cb6345b3534de5b1e44f6e4e97f5a98c3f5c7203f84aa370f00dd54", - "client_e_pk": "3a8ec2f554673ecf8c706759d6f24a3a068594f49e22769c763a3f712e289a22", - "client_e_sk": "60dac79209e340f068112840c69c681f458d55916af81521e3aac61058aed542", - "server_s_pk": "70dafba720cf8ed7c5001107f1679974c8dd53f51bb12c6362024bd46d294e6a", - "server_s_sk": "b0beb05237a893edeefad4bfb87d8a56d79120e2ef71ccf335fb36719822bf54", - "server_e_pk": "7e5ac26d2eece1e95a7db76a2c9b0f63119c59755bde71baa153b700d10afa09", - "server_e_sk": "004fb840dc8e2b4bf44cbce8bc9fb2439439ea8c81bf9299fe62a6a7eb133572", - "fake_sk": "a8b7f29cc8faa909eccd741c8a9c043adf30b76ceb29979015e4905aa8c98975", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "b448ff1079b9bb899acb01f271303e43a1db682c515780cff8ede88795ab7aae65af947df67425dacce97080a82d63ee", - "oprf_seed": "453a628c1033f01a8a7e289afd6a0701249eb387115e68dda5e9762815acc3c6890201190623466deb6ebcfa8d348c97", - "masking_nonce": "043b357b425f2fa9a3bcd694f4599838ade3d2a565f3debb64549400922f698bee9d14b0246b92eecf22aee99d9267643e33bf2e6d1985da0b12fb06a1acf102", - "envelope_nonce": "872593dc9342df3095eabdd5f238c27874e6bfdac3f7f2b413f396aa878dcc30", - "client_nonce": "5b11f9c0204aa46756eb81a3929a54e3723294459cb82b37694cf7c1b8c130c0", - "server_nonce": "2ed607c5c0d2cf6babe59b07b175eb2daca2c7b7f4f18ab8109edde08a2467db", - "context": "636f6e74657874", - "registration_request": "03840be924a75bf138c7d6ae38a34cee612df596e2e375482cdec3416bcee6e18ced4de0fb21325b54695724bcb2f6fb4b", - "registration_response": "037179bd08a76c2e668c9665df3a6b47d2753a6cd0d3cc84ceaccc8719f538a603a4704e4cc1e8c04dcb3e1f30fb69badd70dafba720cf8ed7c5001107f1679974c8dd53f51bb12c6362024bd46d294e6a", - "registration_upload": "036855719f79f2e7431c00616260933a2ead332dddc0d6a431945095f3abc62da8d6f332c5d8508850d33745ef81d4a87c7c684c6546aa31ce1084a279bbdc6d76b7c58c398d438e046e1e2b60ae9c9a8034c5724cb6345b3534de5b1e44f6e4e97f5a98c3f5c7203f84aa370f00dd5432cae335c0d7f1dd6abcce898bc8a7c7fe2ccc1e8b37accacd9f28f8a236f71979e28d47fe3ccaadb292fff9d4cc4c67", - "credential_request": "03840be924a75bf138c7d6ae38a34cee612df596e2e375482cdec3416bcee6e18ced4de0fb21325b54695724bcb2f6fb4b5b11f9c0204aa46756eb81a3929a54e3723294459cb82b37694cf7c1b8c130c03a8ec2f554673ecf8c706759d6f24a3a068594f49e22769c763a3f712e289a22", - "credential_response": "037179bd08a76c2e668c9665df3a6b47d2753a6cd0d3cc84ceaccc8719f538a603a4704e4cc1e8c04dcb3e1f30fb69badd043b357b425f2fa9a3bcd694f4599838ade3d2a565f3debb64549400922f698b817494112f8b8547a859357085e26d06cdb5cf3fc1d815fc35c158d0fd079bcee961df7356749be2fd54f310f89260a7cf67de23b12ef4b3a1f4f39f9454279602f6c32842f7618aa41cb16cd94c58490e2174641dcc05134e3d7806c5a0af9eacc7c53bf8aea591bb25a7ac9ae6307d004fb840dc8e2b4bf44cbce8bc9fb2439439ea8c81bf9299fe62a6a7eb133572891c828f84395e2fa18bddf2779342d51d87a6cc0382ff7b4f792ec1d25dc9110c60c54343806bb3fabf01c74cd948cb089a4f5841b43f85335ccfea5c6bac71b282f1fda62f6c49d11fc7da20ff4f08", - "credential_finalization": "e85722888bbf3939cee3510febedb204e6768dcdfb99d258754e5a9bbd7f8ea1a0d65a6dd28af223e94f334c5801a06c", - "client_registration_state": "b448ff1079b9bb899acb01f271303e43a1db682c515780cff8ede88795ab7aae65af947df67425dacce97080a82d63ee03840be924a75bf138c7d6ae38a34cee612df596e2e375482cdec3416bcee6e18ced4de0fb21325b54695724bcb2f6fb4b", - "client_login_state": "b448ff1079b9bb899acb01f271303e43a1db682c515780cff8ede88795ab7aae65af947df67425dacce97080a82d63ee03840be924a75bf138c7d6ae38a34cee612df596e2e375482cdec3416bcee6e18ced4de0fb21325b54695724bcb2f6fb4b5b11f9c0204aa46756eb81a3929a54e3723294459cb82b37694cf7c1b8c130c03a8ec2f554673ecf8c706759d6f24a3a068594f49e22769c763a3f712e289a2260dac79209e340f068112840c69c681f458d55916af81521e3aac61058aed5425b11f9c0204aa46756eb81a3929a54e3723294459cb82b37694cf7c1b8c130c0", - "server_login_state": "92be6961dc5d248b0724bd3f428e036d968756f0b7e0e551c5f4100294b1c8dffa147894e74b1e0229d8fdca0971a529d85fe7c10eba397a9499c59e8513c72df6687652590a36cf7bf3cc4a06d9ab452431ee154bf2a41542c6ec5c4f5de94db19f799a9ab8cf49cc4ecd52b35f6b7a01d454a8f5bc0f3853e43278463da212a614bb4a32b3c3bbb8ee2e9e284a5749", - "password_file": "036855719f79f2e7431c00616260933a2ead332dddc0d6a431945095f3abc62da8d6f332c5d8508850d33745ef81d4a87c7c684c6546aa31ce1084a279bbdc6d76b7c58c398d438e046e1e2b60ae9c9a8034c5724cb6345b3534de5b1e44f6e4e97f5a98c3f5c7203f84aa370f00dd5432cae335c0d7f1dd6abcce898bc8a7c7fe2ccc1e8b37accacd9f28f8a236f71979e28d47fe3ccaadb292fff9d4cc4c67", - "export_key": "7175fbd9eed61a7cb5b723faafec8c945733622a90c75a72ec262599cff1afeb0ddc1f30eadb69c71def535001ef5e99", - "session_key": "b19f799a9ab8cf49cc4ecd52b35f6b7a01d454a8f5bc0f3853e43278463da212a614bb4a32b3c3bbb8ee2e9e284a5749" -} -"#; - -#[cfg(all(feature = "curve25519", feature = "ristretto255"))] -static TEST_VECTOR_CURVE25519_RISTRETTO255: &str = r#" -{ - "client_s_pk": "6f00b5a7c3400e5b3480e4ff963affa27a2e894bfc246da63404ab5dfcb12861", - "client_s_sk": "402429cb18f30b6e5e6c3c4a9fb95480d31e9490c96ec09038bad2a2bba70378", - "client_e_pk": "e5571e70f949d095f6f8385e0056abdf4182175d61f466a80d9ed8cbeb6da42d", - "client_e_sk": "68d89ca14f80c9cf0cbe905ccc3573999c5eefacde6a2373591f6316828e9c65", - "server_s_pk": "deafeb091131b492b8ad5af1aa10a3e95f503cc27f156daa5d612cf917b7512e", - "server_s_sk": "40e5d55900e9402b0bf311e604fc6574cfc1786a9024132fd617b5e1015b9d7e", - "server_e_pk": "40c97d16c9e95f8f7c7db8c9057afea8b3fccc06890e002ba36834e5271c3352", - "server_e_sk": "480173d0dc1d7cc60382fb0c3fca5814acac964ae0e4984f31d9f3aac2a62850", - "fake_sk": "50e9872b44d1595ab4478ce74d0e3b00666fd713ed5e1e5f172ef0bbf3014a6b", - "credential_identifier": "637265644964656e746966696572", - "id_u": "696455", - "id_s": "696453", - "password": "70617373776f7264", - "blinding_factor": "8a6a055fcb9a6b7d2ba698bbec4099dbbc6a35766b63b16c04731399657faa05", - "oprf_seed": "acd7d6bb5cbc48e3a5002158e14292e10fd0bbe27084b2ff2b917e8ae4cfe6901cbcc8eaffd83229cea4895e3aefb0456f14b887bd2077a5743cce5e86304c5c", - "masking_nonce": "8e287233c7add7f2d3b3faa6aece0bd88274c45431d1f20302bba6f281a75c5db416d615c291a870f6b2350d872543df723d719144fd5282f853711d1430f348", - "envelope_nonce": "32a0ece9a749a9982968975690b8cff5853da742018ddca972f5b2a64b368558", - "client_nonce": "e6763553592f4f197b5411ccc02eae73f45480f2695169b07477d7fa953d384a", - "server_nonce": "dc3e7e45e29129c8ce05ae2bbfde44c41ab01b976724f5e1fddc432d812390d4", - "context": "636f6e74657874", - "registration_request": "184bb0c06beba0eb813d28339db050e46b1d78ef51e0f715e246435b1f387030", - "registration_response": "c23d5b2943f63db89b026e555cd40be4e42679d748d6b773154b9734eb17f65ddeafeb091131b492b8ad5af1aa10a3e95f503cc27f156daa5d612cf917b7512e", - "registration_upload": "e44f23560d80e1ad23fcd321329069f44c7ecadbf5cd382642b9ab8d4660213ba69f7c5367f5e2662a2576b2c1c0284ba19da7de6db380081d6fb00126d69d143054ac49ac14a8a4422f72c205abee5f58917dcfb92932adbb7e1da5fa729278402429cb18f30b6e5e6c3c4a9fb95480d31e9490c96ec09038bad2a2bba7037886ea885ea9a847da454f4c1778e2d3cf693bed5995fcb60ea884675dd9acd5bbc5042fa6df3b87e7ea739fa8a9028097c5801348dba62a33b88b337030303639", - "credential_request": "184bb0c06beba0eb813d28339db050e46b1d78ef51e0f715e246435b1f387030e6763553592f4f197b5411ccc02eae73f45480f2695169b07477d7fa953d384ae5571e70f949d095f6f8385e0056abdf4182175d61f466a80d9ed8cbeb6da42d", - "credential_response": "c23d5b2943f63db89b026e555cd40be4e42679d748d6b773154b9734eb17f65d8e287233c7add7f2d3b3faa6aece0bd88274c45431d1f20302bba6f281a75c5decb46e775794d8612374cc354c24bb650bec4bae29d5ee748314a317a650176f02a606fbbd9565d62d0d82c8b989ed3c6cdca843b2c900591e661b76de3df23652ecea5aed831de1f3e68ee6a71953ada0ee5a0349f7a8469f0ea58113cc82e9a5f293cb03a74d05eb14d57ffe14b5a8dccc5b1fe8b5e31e8eec756ce7418d18480173d0dc1d7cc60382fb0c3fca5814acac964ae0e4984f31d9f3aac2a62850976c2d5a50e59e96708446af04c477438782bd8ab1be69ed331deb0f17a24c1ee2bdc5fedb0ecd1c2a842ace5d81b4ed0e93c89d883e7b8c59a3a3ca5f9c868eadb3d9835e09fd6bbbb45d91543c061cde3e3d94df2cc61f80993946065bc032", - "credential_finalization": "45929de91f8996598dbe7c65db1f445a62510e8a27ddcef0ae1bcb033f4b74d03f4beb4f83f46602a20152adf0aad3afa465d5b2346f31be62bcc9adac4b5aab", - "client_registration_state": "8a6a055fcb9a6b7d2ba698bbec4099dbbc6a35766b63b16c04731399657faa05184bb0c06beba0eb813d28339db050e46b1d78ef51e0f715e246435b1f387030", - "client_login_state": "8a6a055fcb9a6b7d2ba698bbec4099dbbc6a35766b63b16c04731399657faa05184bb0c06beba0eb813d28339db050e46b1d78ef51e0f715e246435b1f387030e6763553592f4f197b5411ccc02eae73f45480f2695169b07477d7fa953d384ae5571e70f949d095f6f8385e0056abdf4182175d61f466a80d9ed8cbeb6da42d68d89ca14f80c9cf0cbe905ccc3573999c5eefacde6a2373591f6316828e9c65e6763553592f4f197b5411ccc02eae73f45480f2695169b07477d7fa953d384a", - "server_login_state": "56f1f25910e0eca4e3d2d604b9cf8d3878138b4d89ef4966ae001cb5847f658f81850a6ee1aad03cf3864fa652ca9a7b04f02669d5a3e46f49641b8f188af27c06540e830a2f68264f3c7cb533f623b3fbef2ba87777f6909c20c42e911f26c92abdf474b4b1c9d591864a59b508a820b53ba819a0b14189e28b94302707cfe4164a6e3ec2dcba09aa66b70ee18c83ebbc9338aa0092d130051ad98a4bb931dd7bbc6ec93018ee8087435ac9f7171bb1b1b9fe022170963e39681129e2fe104b", - "password_file": "e44f23560d80e1ad23fcd321329069f44c7ecadbf5cd382642b9ab8d4660213ba69f7c5367f5e2662a2576b2c1c0284ba19da7de6db380081d6fb00126d69d143054ac49ac14a8a4422f72c205abee5f58917dcfb92932adbb7e1da5fa729278402429cb18f30b6e5e6c3c4a9fb95480d31e9490c96ec09038bad2a2bba7037886ea885ea9a847da454f4c1778e2d3cf693bed5995fcb60ea884675dd9acd5bbc5042fa6df3b87e7ea739fa8a9028097c5801348dba62a33b88b337030303639", - "export_key": "931b2394c380c1ae3a7e9cedaa9fc438fbc19e920fe74965813a7d4ee2c5cec8c13b144c826b259dd67a2507b3cf2e84f95d8e52dc2111050e7a91ee9d72be99", - "session_key": "164a6e3ec2dcba09aa66b70ee18c83ebbc9338aa0092d130051ad98a4bb931dd7bbc6ec93018ee8087435ac9f7171bb1b1b9fe022170963e39681129e2fe104b" -} -"#; fn decode(values: &Value, key: &str) -> Option> { values[key].as_str().and_then(|s| hex::decode(s).ok()) @@ -702,122 +364,182 @@ fn populate_test_vectors(values: &Value) -> TestVectorParameters { fn stringify_test_vectors(p: &TestVectorParameters) -> String { let mut s = String::new(); s.push_str("{\n"); - s.push_str(format!("\"client_s_pk\": \"{}\",\n", hex::encode(&p.client_s_pk)).as_str()); - s.push_str(format!("\"client_s_sk\": \"{}\",\n", hex::encode(&p.client_s_sk)).as_str()); - s.push_str(format!("\"client_e_pk\": \"{}\",\n", hex::encode(&p.client_e_pk)).as_str()); - s.push_str(format!("\"client_e_sk\": \"{}\",\n", hex::encode(&p.client_e_sk)).as_str()); - s.push_str(format!("\"server_s_pk\": \"{}\",\n", hex::encode(&p.server_s_pk)).as_str()); - s.push_str(format!("\"server_s_sk\": \"{}\",\n", hex::encode(&p.server_s_sk)).as_str()); - s.push_str(format!("\"server_e_pk\": \"{}\",\n", hex::encode(&p.server_e_pk)).as_str()); - s.push_str(format!("\"server_e_sk\": \"{}\",\n", hex::encode(&p.server_e_sk)).as_str()); - s.push_str(format!("\"fake_sk\": \"{}\",\n", hex::encode(&p.fake_sk)).as_str()); s.push_str( format!( - "\"credential_identifier\": \"{}\",\n", + " \"client_s_pk\": \"{}\",\n", + hex::encode(&p.client_s_pk) + ) + .as_str(), + ); + s.push_str( + format!( + " \"client_s_sk\": \"{}\",\n", + hex::encode(&p.client_s_sk) + ) + .as_str(), + ); + s.push_str( + format!( + " \"client_e_pk\": \"{}\",\n", + hex::encode(&p.client_e_pk) + ) + .as_str(), + ); + s.push_str( + format!( + " \"client_e_sk\": \"{}\",\n", + hex::encode(&p.client_e_sk) + ) + .as_str(), + ); + s.push_str( + format!( + " \"server_s_pk\": \"{}\",\n", + hex::encode(&p.server_s_pk) + ) + .as_str(), + ); + s.push_str( + format!( + " \"server_s_sk\": \"{}\",\n", + hex::encode(&p.server_s_sk) + ) + .as_str(), + ); + s.push_str( + format!( + " \"server_e_pk\": \"{}\",\n", + hex::encode(&p.server_e_pk) + ) + .as_str(), + ); + s.push_str( + format!( + " \"server_e_sk\": \"{}\",\n", + hex::encode(&p.server_e_sk) + ) + .as_str(), + ); + s.push_str(format!(" \"fake_sk\": \"{}\",\n", hex::encode(&p.fake_sk)).as_str()); + s.push_str( + format!( + " \"credential_identifier\": \"{}\",\n", hex::encode(&p.credential_identifier) ) .as_str(), ); - s.push_str(format!("\"id_u\": \"{}\",\n", hex::encode(&p.id_u)).as_str()); - s.push_str(format!("\"id_s\": \"{}\",\n", hex::encode(&p.id_s)).as_str()); - s.push_str(format!("\"password\": \"{}\",\n", hex::encode(&p.password)).as_str()); + s.push_str(format!(" \"id_u\": \"{}\",\n", hex::encode(&p.id_u)).as_str()); + s.push_str(format!(" \"id_s\": \"{}\",\n", hex::encode(&p.id_s)).as_str()); + s.push_str(format!(" \"password\": \"{}\",\n", hex::encode(&p.password)).as_str()); s.push_str( format!( - "\"blinding_factor\": \"{}\",\n", + " \"blinding_factor\": \"{}\",\n", hex::encode(&p.blinding_factor) ) .as_str(), ); - s.push_str(format!("\"oprf_seed\": \"{}\",\n", hex::encode(&p.oprf_seed)).as_str()); + s.push_str(format!(" \"oprf_seed\": \"{}\",\n", hex::encode(&p.oprf_seed)).as_str()); s.push_str( format!( - "\"masking_nonce\": \"{}\",\n", + " \"masking_nonce\": \"{}\",\n", hex::encode(&p.masking_nonce) ) .as_str(), ); s.push_str( format!( - "\"envelope_nonce\": \"{}\",\n", + " \"envelope_nonce\": \"{}\",\n", hex::encode(&p.envelope_nonce) ) .as_str(), ); - s.push_str(format!("\"client_nonce\": \"{}\",\n", hex::encode(&p.client_nonce)).as_str()); - s.push_str(format!("\"server_nonce\": \"{}\",\n", hex::encode(&p.server_nonce)).as_str()); - s.push_str(format!("\"context\": \"{}\",\n", hex::encode(&p.context)).as_str()); s.push_str( format!( - "\"registration_request\": \"{}\",\n", + " \"client_nonce\": \"{}\",\n", + hex::encode(&p.client_nonce) + ) + .as_str(), + ); + s.push_str( + format!( + " \"server_nonce\": \"{}\",\n", + hex::encode(&p.server_nonce) + ) + .as_str(), + ); + s.push_str(format!(" \"context\": \"{}\",\n", hex::encode(&p.context)).as_str()); + s.push_str( + format!( + " \"registration_request\": \"{}\",\n", hex::encode(&p.registration_request) ) .as_str(), ); s.push_str( format!( - "\"registration_response\": \"{}\",\n", + " \"registration_response\": \"{}\",\n", hex::encode(&p.registration_response) ) .as_str(), ); s.push_str( format!( - "\"registration_upload\": \"{}\",\n", + " \"registration_upload\": \"{}\",\n", hex::encode(&p.registration_upload) ) .as_str(), ); s.push_str( format!( - "\"credential_request\": \"{}\",\n", + " \"credential_request\": \"{}\",\n", hex::encode(&p.credential_request) ) .as_str(), ); s.push_str( format!( - "\"credential_response\": \"{}\",\n", + " \"credential_response\": \"{}\",\n", hex::encode(&p.credential_response) ) .as_str(), ); s.push_str( format!( - "\"credential_finalization\": \"{}\",\n", + " \"credential_finalization\": \"{}\",\n", hex::encode(&p.credential_finalization) ) .as_str(), ); s.push_str( format!( - "\"client_registration_state\": \"{}\",\n", + " \"client_registration_state\": \"{}\",\n", hex::encode(&p.client_registration_state) ) .as_str(), ); s.push_str( format!( - "\"client_login_state\": \"{}\",\n", + " \"client_login_state\": \"{}\",\n", hex::encode(&p.client_login_state) ) .as_str(), ); s.push_str( format!( - "\"server_login_state\": \"{}\",\n", + " \"server_login_state\": \"{}\",\n", hex::encode(&p.server_login_state) ) .as_str(), ); s.push_str( format!( - "\"password_file\": \"{}\",\n", + " \"password_file\": \"{}\",\n", hex::encode(&p.password_file) ) .as_str(), ); - s.push_str(format!("\"export_key\": \"{}\",\n", hex::encode(&p.export_key)).as_str()); - s.push_str(format!("\"session_key\": \"{}\"\n", hex::encode(&p.session_key)).as_str()); + s.push_str(format!(" \"export_key\": \"{}\",\n", hex::encode(&p.export_key)).as_str()); + s.push_str(format!(" \"session_key\": \"{}\"\n", hex::encode(&p.session_key)).as_str()); s.push_str("}\n"); s } @@ -1056,70 +778,168 @@ where #[test] fn generate_test_vectors() -> Result<(), ProtocolError> { + let mut output = String::new(); + + #[rustfmt::skip] + output.push_str( + "// To regenerate these test vectors, run:\n\ + // FULL_TEST_VECTORS_FILE=src/tests/full_test_vectors.rs cargo test --features ristretto255,curve25519 -- generate_test_vectors\n\ + \n", + ); + #[cfg(feature = "ristretto255")] { let parameters = generate_parameters::()?; - println!("Ristretto255: {}", stringify_test_vectors(¶meters)); + output.push_str("#[cfg(feature = \"ristretto255\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_RISTRETTO255: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); let parameters = generate_parameters::()?; - println!( - "Ristretto255 P-256: {}", + output.push_str("#[cfg(feature = \"ristretto255\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_RISTRETTO255_P256: &str = r#\"\n{}\"#;\n", stringify_test_vectors(¶meters) - ); + )); let parameters = generate_parameters::()?; - println!( - "Ristretto255 P-384: {}", + output.push_str("#[cfg(feature = \"ristretto255\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_RISTRETTO255_P384: &str = r#\"\n{}\"#;\n", stringify_test_vectors(¶meters) - ); + )); + + let parameters = generate_parameters::()?; + output.push_str("#[cfg(feature = \"ristretto255\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_RISTRETTO255_P521: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); } let parameters = generate_parameters::()?; - println!("P-256: {}", stringify_test_vectors(¶meters)); + output.push_str(&format!( + "pub static TEST_VECTOR_P256: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); let parameters = generate_parameters::()?; - println!("P-256 P-384: {}", stringify_test_vectors(¶meters)); + output.push_str(&format!( + "pub static TEST_VECTOR_P256_P384: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + + let parameters = generate_parameters::()?; + output.push_str(&format!( + "pub static TEST_VECTOR_P256_P521: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); #[cfg(feature = "ristretto255")] { let parameters = generate_parameters::()?; - println!( - "P-256 Ristretto255: {}", + output.push_str("#[cfg(feature = \"ristretto255\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_P256_RISTRETTO255: &str = r#\"\n{}\"#;\n", stringify_test_vectors(¶meters) - ); + )); } let parameters = generate_parameters::()?; - println!("P-384: {}", stringify_test_vectors(¶meters)); + output.push_str(&format!( + "pub static TEST_VECTOR_P384: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); let parameters = generate_parameters::()?; - println!("P-384 P-256: {}", stringify_test_vectors(¶meters)); + output.push_str(&format!( + "pub static TEST_VECTOR_P384_P256: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + + let parameters = generate_parameters::()?; + output.push_str(&format!( + "pub static TEST_VECTOR_P384_P521: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); #[cfg(feature = "ristretto255")] { let parameters = generate_parameters::()?; - println!( - "P-384 Ristretto255: {}", + output.push_str("#[cfg(feature = \"ristretto255\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_P384_RISTRETTO255: &str = r#\"\n{}\"#;\n", stringify_test_vectors(¶meters) - ); + )); + } + + let parameters = generate_parameters::()?; + output.push_str(&format!( + "pub static TEST_VECTOR_P521: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + + let parameters = generate_parameters::()?; + output.push_str(&format!( + "pub static TEST_VECTOR_P521_P256: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + + let parameters = generate_parameters::()?; + output.push_str(&format!( + "pub static TEST_VECTOR_P521_P384: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + + #[cfg(feature = "ristretto255")] + { + let parameters = generate_parameters::()?; + output.push_str("#[cfg(feature = \"ristretto255\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_P521_RISTRETTO255: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); } #[cfg(feature = "curve25519")] { let parameters = generate_parameters::()?; - println!("Curve25519 P-256: {}", stringify_test_vectors(¶meters)); + output.push_str("#[cfg(feature = \"curve25519\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_CURVE25519_P256: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); let parameters = generate_parameters::()?; - println!("Curve25519 P-384: {}", stringify_test_vectors(¶meters)); + output.push_str("#[cfg(feature = \"curve25519\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_CURVE25519_P384: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + + let parameters = generate_parameters::()?; + output.push_str("#[cfg(feature = \"curve25519\")]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_CURVE25519_P521: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + + #[cfg(feature = "ristretto255")] + { + let parameters = generate_parameters::()?; + output.push_str("#[cfg(all(feature = \"curve25519\", feature = \"ristretto255\"))]\n"); + output.push_str(&format!( + "pub static TEST_VECTOR_CURVE25519_RISTRETTO255: &str = r#\"\n{}\"#;\n", + stringify_test_vectors(¶meters) + )); + } } - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - { - let parameters = generate_parameters::()?; - println!( - "Curve25519 Ristretto255: {}", - stringify_test_vectors(¶meters) - ); + if let Ok(path) = std::env::var("FULL_TEST_VECTORS_FILE") { + std::fs::write(path, output).unwrap(); + } else { + println!("{output}"); } Ok(()) @@ -1154,26 +974,7 @@ fn test_registration_request() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1212,26 +1013,7 @@ fn test_serialization() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1275,26 +1057,7 @@ fn test_registration_response() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1351,26 +1114,7 @@ fn test_registration_upload() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1408,26 +1152,7 @@ fn test_password_file() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1473,26 +1198,7 @@ fn test_credential_request() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1565,26 +1271,7 @@ fn test_credential_response() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1641,26 +1328,7 @@ fn test_credential_finalization() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } @@ -1691,31 +1359,13 @@ fn test_server_login_finish() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_RISTRETTO255_P384)?; - inner::(TEST_VECTOR_P256)?; - inner::(TEST_VECTOR_P256_P384)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P256_RISTRETTO255)?; - inner::(TEST_VECTOR_P384)?; - inner::(TEST_VECTOR_P384_P256)?; - #[cfg(feature = "ristretto255")] - inner::(TEST_VECTOR_P384_RISTRETTO255)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P256)?; - #[cfg(feature = "curve25519")] - inner::(TEST_VECTOR_CURVE25519_P384)?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::(TEST_VECTOR_CURVE25519_RISTRETTO255)?; + run_all!(inner); Ok(()) } fn test_complete_flow( + _test_vector: &str, registration_password: &[u8], login_password: &[u8], ) -> Result<(), ProtocolError> @@ -1791,53 +1441,13 @@ where #[test] fn test_complete_flow_success() -> Result<(), ProtocolError> { - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"good password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"good password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"good password")?; - test_complete_flow::(b"good password", b"good password")?; - test_complete_flow::(b"good password", b"good password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"good password")?; - test_complete_flow::(b"good password", b"good password")?; - test_complete_flow::(b"good password", b"good password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"good password")?; - #[cfg(feature = "curve25519")] - test_complete_flow::(b"good password", b"good password")?; - #[cfg(feature = "curve25519")] - test_complete_flow::(b"good password", b"good password")?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - test_complete_flow::(b"good password", b"good password")?; - + run_all!(test_complete_flow, b"good password", b"good password"); Ok(()) } #[test] fn test_complete_flow_fail() -> Result<(), ProtocolError> { - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"bad password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"bad password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"bad password")?; - test_complete_flow::(b"good password", b"bad password")?; - test_complete_flow::(b"good password", b"bad password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"bad password")?; - test_complete_flow::(b"good password", b"bad password")?; - test_complete_flow::(b"good password", b"bad password")?; - #[cfg(feature = "ristretto255")] - test_complete_flow::(b"good password", b"bad password")?; - #[cfg(feature = "curve25519")] - test_complete_flow::(b"good password", b"bad password")?; - #[cfg(feature = "curve25519")] - test_complete_flow::(b"good password", b"bad password")?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - test_complete_flow::(b"good password", b"bad password")?; - + run_all!(test_complete_flow, b"good password", b"bad password"); Ok(()) } @@ -1845,7 +1455,7 @@ fn test_complete_flow_fail() -> Result<(), ProtocolError> { #[test] fn test_zeroize_client_registration_start() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -1867,33 +1477,14 @@ fn test_zeroize_client_registration_start() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_zeroize_client_registration_finish() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -1928,33 +1519,14 @@ fn test_zeroize_client_registration_finish() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_zeroize_server_registration_finish() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -1998,33 +1570,16 @@ fn test_zeroize_server_registration_finish() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_zeroize_client_login_start() -> Result<(), ProtocolError> { - fn inner>() -> Result<(), ProtocolError> + fn inner>( + _test_vector: &str, + ) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -2067,33 +1622,14 @@ fn test_zeroize_client_login_start() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_zeroize_server_login_start() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -2144,33 +1680,16 @@ fn test_zeroize_server_login_start() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_zeroize_client_login_finish() -> Result<(), ProtocolError> { - fn inner>() -> Result<(), ProtocolError> + fn inner>( + _test_vector: &str, + ) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -2247,33 +1766,14 @@ fn test_zeroize_client_login_finish() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_zeroize_server_login_finish() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -2332,33 +1832,14 @@ fn test_zeroize_server_login_finish() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_scalar_always_nonzero() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -2398,33 +1879,14 @@ fn test_scalar_always_nonzero() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_reflected_value_error_registration() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -2469,33 +1931,14 @@ fn test_reflected_value_error_registration() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } #[test] fn test_reflected_value_error_login() -> Result<(), ProtocolError> { - fn inner() -> Result<(), ProtocolError> + fn inner(_test_vector: &str) -> Result<(), ProtocolError> where as OutputSizeUser>::OutputSize: IsLess + IsLessOrEqual< as BlockSizeUser>::BlockSize>, @@ -2559,26 +2002,7 @@ fn test_reflected_value_error_login() -> Result<(), ProtocolError> { Ok(()) } - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - inner::()?; - inner::()?; - #[cfg(feature = "ristretto255")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(feature = "curve25519")] - inner::()?; - #[cfg(all(feature = "curve25519", feature = "ristretto255"))] - inner::()?; + run_all!(inner); Ok(()) } diff --git a/src/tests/full_test_vectors.rs b/src/tests/full_test_vectors.rs new file mode 100644 index 0000000..2b2a62b --- /dev/null +++ b/src/tests/full_test_vectors.rs @@ -0,0 +1,734 @@ +// To regenerate these test vectors, run: +// FULL_TEST_VECTORS_FILE=src/tests/full_test_vectors.rs cargo test --features ristretto255,curve25519 -- generate_test_vectors + +#[cfg(feature = "ristretto255")] +pub static TEST_VECTOR_RISTRETTO255: &str = r#" +{ + "client_s_pk": "a4f46d0492cd9bb560dc1ed0aab283297a42e1149afb16ace54bf83b6ffa513d", + "client_s_sk": "e25737081469c66d01be87323b9d21361b864ae81bd7af227375b5f35bb20c0a", + "client_e_pk": "ec326b266b8dd31e7dc5d6df3acea0a50a25c143ef75496a9bb32127cfb66e0d", + "client_e_sk": "cb7beda7e4196a5a66b1b4e47f1c990941d66e4f2d73ba28c15fd882b39d1906", + "server_s_pk": "b81f0a4d8d6edcc91696a2654032705b1652581ce85b0ec06e87ee8b1064b021", + "server_s_sk": "34ca98125841374f64e28a6920c7d1412ba1f91eefe7f8601e121ebc11433d00", + "server_e_pk": "8885e33bb897a0f6e5431b12eba47e8f732be7378d0c4b486e8ae1bee291940f", + "server_e_sk": "54e1e8c41080915241cff89254591ed7a7c94b338674f7eee304499b8dfd8c05", + "fake_sk": "8b05e06c63e38308f78016597b698b5e13a2164b2bad8f9d4b57c416d5237e07", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "ccd0eb9d6dedf8bea06b3bca19467a196b6be0fd0a430a70835f076603975c0c", + "oprf_seed": "252bbf35ab945abf8a5c76832ac50e91acf4b6a93b98c8e8b69b615cde711f5fb465c3ae3ee3112c066c8810412b05feee3ab580276c37b12fe57cf8c8e8bb43", + "masking_nonce": "101923b7ca7f1023026a1e9e341900761c694a2e471cb03d15db2d0790af93dc9167c6aae8d3ac42f724c97e7938c3beca612f9b12966e437a4eccdb79484880", + "envelope_nonce": "e4785339296562659e223a0a0e6c26c36cec604a003c0e52f8b0d4247be1faa2", + "client_nonce": "22d6a27c27e97a071b319461d2482a4ff98fc1c84ee6567e4592bc9cd04e709a", + "server_nonce": "9bfade6c50dd83f74ddaa4a8a75891edb77758f8652ae6d0eabd9e429fc8997f", + "context": "636f6e74657874", + "registration_request": "deddf80beb3cdfb1b0c518cc7f019d5708a985e5fa0f342441c6341056c3533f", + "registration_response": "00e972637ecb85b266dada406f3750029effc1e570840eb229af2f6f9c257525b81f0a4d8d6edcc91696a2654032705b1652581ce85b0ec06e87ee8b1064b021", + "registration_upload": "d05e97b0645ba2472821f3a6c1ed4152722a44253564fe1ac6273c29f0ad1d1f29eddcf9e0668f6a257f5b4bb48657181be5d7718492772255e961ad8005ea8a33cf7904bcefd93fa9688ac109a12961287e6eb2575ef96a12c0e13547b84374e25737081469c66d01be87323b9d21361b864ae81bd7af227375b5f35bb20c0a86e92f93426b410982fcb6a1ce814198126e56aa4f4bd21f54283865df877ff97967f54b8f95fc1d479ae428d6f652e78af46e8994ce14c3fb640c8fbd83efc4", + "credential_request": "deddf80beb3cdfb1b0c518cc7f019d5708a985e5fa0f342441c6341056c3533f22d6a27c27e97a071b319461d2482a4ff98fc1c84ee6567e4592bc9cd04e709abe2e12a34d266eafd9d85dc205705dd5b963a2da74ce2533da83ab0aca276b33", + "credential_response": "00e972637ecb85b266dada406f3750029effc1e570840eb229af2f6f9c257525101923b7ca7f1023026a1e9e341900761c694a2e471cb03d15db2d0790af93dce774cdb4410c77076066986d80c3308436d73cea140746650b3da6e1b1ee8a0f000353a4f763ca116387c29716791236635eaf6573207623b67e02e1ae51206ef6628e94ee4d8719f8c519a5f9df2924488376b6c789596f36930792597ab6da0cfd525e8d79bc735e3848196a5024fde8d68f3aadc0dded4e9a2733fdd4f3d654e1e8c41080915241cff89254591ed7a7c94b338674f7eee304499b8dfd8c053e6f1272cf1ba4ff749f21735477bba8d6206e1770fd90fdbbcd959e20d86e620edebcb2fd3b0d57da43d1f31b0a6e806c3f14c22ede0bfcc4b8b37100de21f9db4a3f4c34e88f8d16a15121ea54aabb3c72fcb571777520d228ff9d54072561", + "credential_finalization": "35a0d1147da8db4273d3594cfe98d0c29333d87e700a1ecf61a8bc5915e1d198f6718a3d945ad648899dee4e5e224f884906a61f65266bbe358628bef90fd147", + "client_registration_state": "ccd0eb9d6dedf8bea06b3bca19467a196b6be0fd0a430a70835f076603975c0cdeddf80beb3cdfb1b0c518cc7f019d5708a985e5fa0f342441c6341056c3533f", + "client_login_state": "ccd0eb9d6dedf8bea06b3bca19467a196b6be0fd0a430a70835f076603975c0cdeddf80beb3cdfb1b0c518cc7f019d5708a985e5fa0f342441c6341056c3533f22d6a27c27e97a071b319461d2482a4ff98fc1c84ee6567e4592bc9cd04e709abe2e12a34d266eafd9d85dc205705dd5b963a2da74ce2533da83ab0aca276b33d0cfb4e360b306a131ed3389402e255b787224941a303c73e823036d4f1b510522d6a27c27e97a071b319461d2482a4ff98fc1c84ee6567e4592bc9cd04e709a", + "server_login_state": "c37d116ca5e6dc20015d8dff3047b70f653b83b6c658561331a8055c89ff04a9226e1975bd3ddd2ec89cc8ef97ccca736b6d13844f32669abcb4d9340fecc2abec004d6da3e9889141c0989ca06c113511376a0c621d2db9edb857569e8f176d226027359fb77c0848bd42d7436ffb31eb8fa540c045eecc03c83b5cd48bdd037b4faa59d697382c770883caf8c799cd9fdf033e8bb42e2b5ee4a6ac4748b810a33078e8ccf8cea4cf641dcbd3e355a1a608c84be1e6038017c57131c2579547", + "password_file": "d05e97b0645ba2472821f3a6c1ed4152722a44253564fe1ac6273c29f0ad1d1f29eddcf9e0668f6a257f5b4bb48657181be5d7718492772255e961ad8005ea8a33cf7904bcefd93fa9688ac109a12961287e6eb2575ef96a12c0e13547b84374e25737081469c66d01be87323b9d21361b864ae81bd7af227375b5f35bb20c0a86e92f93426b410982fcb6a1ce814198126e56aa4f4bd21f54283865df877ff97967f54b8f95fc1d479ae428d6f652e78af46e8994ce14c3fb640c8fbd83efc4", + "export_key": "d7eef5c3a58edcf9c0ffed63e47f81e2648c5a030826eee24ad4f29a0bae3b5b3b6f6ddefd2b5f41e6334bb601cae152c79190efedd2d36a70c80eff2c3164a1", + "session_key": "7b4faa59d697382c770883caf8c799cd9fdf033e8bb42e2b5ee4a6ac4748b810a33078e8ccf8cea4cf641dcbd3e355a1a608c84be1e6038017c57131c2579547" +} +"#; +#[cfg(feature = "ristretto255")] +pub static TEST_VECTOR_RISTRETTO255_P256: &str = r#" +{ + "client_s_pk": "3a39f5ac678f6fb2a0e297e56b9de2d7174bc30d383d8078e14c9210b13eda10", + "client_s_sk": "4cdf64f6913b87a4c460f49134b7be5ce497daf64e4d6207e600ae14917ab50c", + "client_e_pk": "5cd22b34ec7cb915d2c8d98498190d74923ae4fb55aca990a570681a9c02a83e", + "client_e_sk": "6a79fb1d732788d281f50cbb5ebacbbd46feeb900d30b4da68d8e3c6e999880d", + "server_s_pk": "fe4d436430951b421f4c56a81f2a46f06d5cbe99983ef2f3690eebd784753234", + "server_s_sk": "01b1939c5efb3b6348d7bbcd1aebbf91b0d1e88a5952c1c18ff2890a672a3502", + "server_e_pk": "26b632c4e50858ed2f523ab187b823341791a048c929ec2c3f55623e9e1d4211", + "server_e_sk": "71f5e0b54eb82af2a494e86230e0d320188574613ff7e52a862c17c1a41a5704", + "fake_sk": "f93c0d87756a655e2ac3a879bc4926444618204842db653f60baf63cbbf9a90c", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "d25d79623fdd286733190faeb1d90277a5560c37968aaad10b765656075b388f", + "oprf_seed": "10a9378ac082ffd8211b2ed109af17f2c426462d7d8f57e01fa5392a95a141fa", + "masking_nonce": "8478fbc93cedbeefd7a346c76929f6ad2ae7b0954bdecfab46f1c32072a1be8c1353a53b0daf4fd7a0b2f89b33650570f1ccf8ceaef41ca61f21ebf1f4c7a6af", + "envelope_nonce": "017099f5aa10f817bf748d076c0f6aa0c894edcbd1acecf2ac05b3b20f49533a", + "client_nonce": "814cc652127fa17206ad67a7b5504b58b83fe9f09b96a56c557e7512664cacfd", + "server_nonce": "e44bc9ca49955b98e7c573844504bdd71137899fab6544db3a9306d2f1c5a779", + "context": "636f6e74657874", + "registration_request": "03ce82ce9c644934d01cac7a7598d546097cd7f714fd73cf5a2629f5f7c42975bf", + "registration_response": "02f39f30a1d8b9b32709b74a02f87e3eed6b5c2e8d67177d934ff146b195cc263cfe4d436430951b421f4c56a81f2a46f06d5cbe99983ef2f3690eebd784753234", + "registration_upload": "12384646b3534ac24c3f8c065495ec9e9ba6c5f9c0a196861ac8003303d5cc01a8115161c2ac9c920d280b94926d11a042f1813365c3ea2d0e32159dccf7636f4cdf64f6913b87a4c460f49134b7be5ce497daf64e4d6207e600ae14917ab50c944a598f8b839fe64cade113f405abe2a4ae600f90266497fa3a750f02ce757a", + "credential_request": "03ce82ce9c644934d01cac7a7598d546097cd7f714fd73cf5a2629f5f7c42975bf814cc652127fa17206ad67a7b5504b58b83fe9f09b96a56c557e7512664cacfd824582ccba13903708aae9566da2175c143eadae41802f1dbd8b28e5c3277139", + "credential_response": "02f39f30a1d8b9b32709b74a02f87e3eed6b5c2e8d67177d934ff146b195cc263c8478fbc93cedbeefd7a346c76929f6ad2ae7b0954bdecfab46f1c32072a1be8c9ccf1410f78138badf9ece3d2d2d36d3f76d12a6404cd8eaab5ec59e31327d51b422dfb8f0d7ba68286fab179b5ae78671e5e9fdf5160e32c9f6a4126dda23e6527c4fb139ad95c05380667085c3a0b092990930d6a8acc0dac25efaf9f4880f71f5e0b54eb82af2a494e86230e0d320188574613ff7e52a862c17c1a41a57043a899cb76e70db334c51bcaacef0a5a51d7494cabb293ca9e2b4da4cd7e3a4134d2372c1649f606ec8bb606081b125fe46b54e59f683f5fa7a2eed076d171e87", + "credential_finalization": "1c5568b2ed4e0e511a899faaaced5f67f1efbf6464ba2fd08ad618f393234443", + "client_registration_state": "d25d79623fdd286733190faeb1d90277a5560c37968aaad10b765656075b388f03ce82ce9c644934d01cac7a7598d546097cd7f714fd73cf5a2629f5f7c42975bf", + "client_login_state": "d25d79623fdd286733190faeb1d90277a5560c37968aaad10b765656075b388f03ce82ce9c644934d01cac7a7598d546097cd7f714fd73cf5a2629f5f7c42975bf814cc652127fa17206ad67a7b5504b58b83fe9f09b96a56c557e7512664cacfd824582ccba13903708aae9566da2175c143eadae41802f1dbd8b28e5c3277139a8efb780e03263e574a6d0446a0cbe245a0e2e4100b1d26e17611d7f127cad0b814cc652127fa17206ad67a7b5504b58b83fe9f09b96a56c557e7512664cacfd", + "server_login_state": "c1b633fbe70f417acbfd797a7350e3341d8992a6623a51e49f6bcdb8a0c73bf528f48f4823d1eb4b780b5132ea7887a8cf68cc247ee28740cf913dd664d8ba39e8726d82c544368aebff847bba72996c4fefad84d85cf13941b33a4c2131233a", + "password_file": "12384646b3534ac24c3f8c065495ec9e9ba6c5f9c0a196861ac8003303d5cc01a8115161c2ac9c920d280b94926d11a042f1813365c3ea2d0e32159dccf7636f4cdf64f6913b87a4c460f49134b7be5ce497daf64e4d6207e600ae14917ab50c944a598f8b839fe64cade113f405abe2a4ae600f90266497fa3a750f02ce757a", + "export_key": "dc0e3c9ce789b1ec1be74c24437f06c7ae0823d1762726fac014a33dc9724656", + "session_key": "e8726d82c544368aebff847bba72996c4fefad84d85cf13941b33a4c2131233a" +} +"#; +#[cfg(feature = "ristretto255")] +pub static TEST_VECTOR_RISTRETTO255_P384: &str = r#" +{ + "client_s_pk": "fe4a6f0b4d1dee848188911a7170fe79b9faa85c97a94e261627add1687bab23", + "client_s_sk": "857a48884ac88c1b6b4dba14139ff95b4fa43f4de98b6320b4b56d1bde8df509", + "client_e_pk": "927e785e5b2811008aa67c433480d927167d2e121018baf6623f703bd0aaef53", + "client_e_sk": "ffee323d075f813c2d358e8fe2524a8739a6ae6b31d043ba28733fbc4e254006", + "server_s_pk": "fa315d547b224d77c2489cc2635b12e41f0ad0a3aa3ec716398d6328470f010e", + "server_s_sk": "1d2efefa45a0c55da5d60a40dcfe98f85d2fc270487370eb8a0f712cf5a9fd01", + "server_e_pk": "38405aa652ff07cf79676dce8dbd16cdb47bd3cc9fbc8a78bfb5f95427936e48", + "server_e_sk": "8acf593b88e3a069bf6c5f995d5d7ae8c14898a619ad21b74b13b90b878bf70a", + "fake_sk": "51b363e812929f0fab809b8db082c914110512a6a259ca75c37f36d0f622c80b", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "21d57a341936c549e2ce59087e0ec95f1451b52fc571116bfbbcef38ad21682f25478f6f6287dd5ead35ac1b571f3f56", + "oprf_seed": "090e66fc749b73453d7a7ab3541086f64bf1589a5aa11592c0a7add60618725f44efb67c41727fce4379732ea374bc00", + "masking_nonce": "e9c30f88a5cdd6d8206bdcac453da0ba1c4dfd950e7b9ba69233c7a28dc3a205e2eebc5f0c15f5c029254f0a1a7e11911ac3c82c1a05b3e6d1d51638c76d8c21", + "envelope_nonce": "e619f4ddbef8488b74c2ba8cb1cc4e42f9619fd3f8af70384114451655e3edda", + "client_nonce": "ffc31798a9f36dcfbbc5833b9ef672ccd995c5abd565b4ca4f8745289b0b057c", + "server_nonce": "065f358cecff375be5cea65a0e2e31458ba21ed024d1e554fac4c08b6c465fb8", + "context": "636f6e74657874", + "registration_request": "02a189f5f17c2acd8d1ae9162d0a9823b1ad4b9f772723766b6c16b59a6814c2e493d9b8b9be72b741887c2e9780811624", + "registration_response": "029d1ed105528b554d592f695fb517e544b656b8b92b2f1bb49d43c97be36791172dd781251b9b31abd2230057f35a5e0ffa315d547b224d77c2489cc2635b12e41f0ad0a3aa3ec716398d6328470f010e", + "registration_upload": "1c87c61fdf100236f219bb247e498a6329f20cb39a3a681f99af909c1468f733c686f4b30a63b73d929de893495eadaa2977acd42949d161e4c72dc3b8175592c6117c62aab8a96e4b452169557d1355857a48884ac88c1b6b4dba14139ff95b4fa43f4de98b6320b4b56d1bde8df509745b4a372349b57fc4bb9022cddb052e374897b2ea7e93850447b23a53a0dab5796de99295e2964451f220fbe805fcb9", + "credential_request": "02a189f5f17c2acd8d1ae9162d0a9823b1ad4b9f772723766b6c16b59a6814c2e493d9b8b9be72b741887c2e9780811624ffc31798a9f36dcfbbc5833b9ef672ccd995c5abd565b4ca4f8745289b0b057c185288fbef06b9662f61f821f12fa0cee49ca33db6b429c8c88fee1c7fb2c039", + "credential_response": "029d1ed105528b554d592f695fb517e544b656b8b92b2f1bb49d43c97be36791172dd781251b9b31abd2230057f35a5e0fe9c30f88a5cdd6d8206bdcac453da0ba1c4dfd950e7b9ba69233c7a28dc3a205e635e64df4d1ca25a23a0a6fffffe96867bd7f77085c8779db9a4bb3859b3b1704fdaac68ca2d98293ee5baec67ad1a9f210db236286e4f57cfe587f24927de7ff6832c8ef2e9ff691700d03214f8fb10efecee1b8b197f3a1d135bc3c9f76f04005bf5358e822f8ff9027b644a8bb638acf593b88e3a069bf6c5f995d5d7ae8c14898a619ad21b74b13b90b878bf70ade3ef6a1a89f29c90763f2144b482838f75380f0c90d4a054f21e0223efd4c1363f7f6aec489173f7a5a610509347ea48085699fbd11088b81185ce3fbe04183e337131ccefacf0ea711c00322a03937", + "credential_finalization": "e76fbeff98b50a0228981bd3eada2d12cd30df59547ca3e68703e1380bc4b8d7f4bbebb2081ac09cab44c2bd98b98a22", + "client_registration_state": "21d57a341936c549e2ce59087e0ec95f1451b52fc571116bfbbcef38ad21682f25478f6f6287dd5ead35ac1b571f3f5602a189f5f17c2acd8d1ae9162d0a9823b1ad4b9f772723766b6c16b59a6814c2e493d9b8b9be72b741887c2e9780811624", + "client_login_state": "21d57a341936c549e2ce59087e0ec95f1451b52fc571116bfbbcef38ad21682f25478f6f6287dd5ead35ac1b571f3f5602a189f5f17c2acd8d1ae9162d0a9823b1ad4b9f772723766b6c16b59a6814c2e493d9b8b9be72b741887c2e9780811624ffc31798a9f36dcfbbc5833b9ef672ccd995c5abd565b4ca4f8745289b0b057c185288fbef06b9662f61f821f12fa0cee49ca33db6b429c8c88fee1c7fb2c03911bc1158804548e737c47fa7d310c3de0f3326551243fe07cba5fe8c71a2d706ffc31798a9f36dcfbbc5833b9ef672ccd995c5abd565b4ca4f8745289b0b057c", + "server_login_state": "c67f556ff2cd8699994f43ecb1e5a70fb3dee6e564a3ae7396f50cc7be0f845d7c21b5f551fb96f00d48eced1ea340afc2e59f9f27a2e5f826fcf5ce2a5a465e74c76f723adf0ddfaa04ef8925c8424e1b0430e69f87c33eef9d846f73249c18b9d10588abaa9a8e401480eb25436d6c68468b73f5852ccbe8445094e7e9a3a759515232f7c3f65a359d13a26ba72e9b", + "password_file": "1c87c61fdf100236f219bb247e498a6329f20cb39a3a681f99af909c1468f733c686f4b30a63b73d929de893495eadaa2977acd42949d161e4c72dc3b8175592c6117c62aab8a96e4b452169557d1355857a48884ac88c1b6b4dba14139ff95b4fa43f4de98b6320b4b56d1bde8df509745b4a372349b57fc4bb9022cddb052e374897b2ea7e93850447b23a53a0dab5796de99295e2964451f220fbe805fcb9", + "export_key": "58777e82bcb2c32560e803a500f791cd422b27330661bc34fd8a32256bde996a36baed5bff6cc5749a66ed8a7d05d8bd", + "session_key": "b9d10588abaa9a8e401480eb25436d6c68468b73f5852ccbe8445094e7e9a3a759515232f7c3f65a359d13a26ba72e9b" +} +"#; +#[cfg(feature = "ristretto255")] +pub static TEST_VECTOR_RISTRETTO255_P521: &str = r#" +{ + "client_s_pk": "a0a9990532bf4236fce92f58fee089a8664c4d08d1db54e16bd2386cb6c4f817", + "client_s_sk": "314c706d7d5d97616b7e804be1b91942ad60a5e4b1dae86aa4a8d4d37c4aea05", + "client_e_pk": "f4e7623a4009826a521cc8ac75ff09e42098b464fa16eca373f5d25e76524977", + "client_e_sk": "b5432a067693d61a743cf9e5a12ac68c4b76724be6faa13e57d87bd70c982e05", + "server_s_pk": "2cac69c26cc7d70cdfc1e94cce0d15b30dea2bcd9504e1a6c5d923e3ee339442", + "server_s_sk": "6415ef9955cff40c9263d47c0afc0e6b46db117978dbe405b190f565af29f70b", + "server_e_pk": "ee64e7732c9d9affc9a4831148659ea127001418baa6a107589ed53143e5a228", + "server_e_sk": "d5ba6ed6a034bdd6b2afc3d289f1e08ec4a2cd7e8807148ea929c1f7de08b30d", + "fake_sk": "4c89e6c50801f663bcb2d84eafe6f67de922a4726394d0c6ce117c82b416ed0a", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "01184f9924388ec154d21a3ddc94812817a6607954aa4825e2f94259637bba8252fa4dc276a18d9310f5db0ed26b9191082759b5ae82d1151e8326b5b466912d5917", + "oprf_seed": "36e6dd98ebb5a101d8749300480615558af985a5fddbe909778aaf59a079e94883e2fe9529f57f457111deb25e6322748d49eac60f9766b0273c639723afa224", + "masking_nonce": "409de1d0fa795bece57474ee6d32b5c7a6e117663a5e962214e767e939bd2d45deff89193cbbea57723c4f9c6e4e058ed08209213bf0f6ba77d23749ebc58308", + "envelope_nonce": "33263e12fb5da6517cbfdcd7c356c0292305cf6eeeaf11b8df53f07bdcb1d0ea", + "client_nonce": "67606dfe4e3e6890de5e3c2caa69f9a1bb0adedb24795bebde15174dd979d9b1", + "server_nonce": "f25d0457ca78f7f4cf419a6cc5345771f56b8f9f7934203db76f870b565d7837", + "context": "636f6e74657874", + "registration_request": "0300ef3cdda6625ba20771ab480148fc939555b57ea5f793ff1d4a22c631284552687066e68d17dbd12d7b0ed31659cf93f389d877b9b6999adf5c3f590c933956a9d9", + "registration_response": "02008d72e2d1aa3124ef8fcae1128a60bf2710fc7ad60e50bbbdfc1238ece72fe6a56c0a108afae478be4f4bcc57da3fac708bef060f2b53aa60900c7968276d7f7fd22cac69c26cc7d70cdfc1e94cce0d15b30dea2bcd9504e1a6c5d923e3ee339442", + "registration_upload": "7284a0118a04728179b344cb56ebfcca5109b2b3dc961fd881ef017b0ec36f21fe55ad7f7721c2f397d0773bf5c67041598d19200906849884b7824a61d6ba5267cb15a79c777e65e77607aa76902ad07cb011255938f99a57de446bdd9ae9fb314c706d7d5d97616b7e804be1b91942ad60a5e4b1dae86aa4a8d4d37c4aea054c6a65d9949e0bb2ce132c2914199f7bc0736499a07100ebe9cc4f7b74b60cd3dd6a1a85f29a3ca0bc9a599396d5aa0a47d1761854da5f148d22f580ecc82fe0", + "credential_request": "0300ef3cdda6625ba20771ab480148fc939555b57ea5f793ff1d4a22c631284552687066e68d17dbd12d7b0ed31659cf93f389d877b9b6999adf5c3f590c933956a9d967606dfe4e3e6890de5e3c2caa69f9a1bb0adedb24795bebde15174dd979d9b152829ca7ce2420d2b8a07efe9cb9a93a227bd64a6a96a0e98ecdaa723de58d6c", + "credential_response": "02008d72e2d1aa3124ef8fcae1128a60bf2710fc7ad60e50bbbdfc1238ece72fe6a56c0a108afae478be4f4bcc57da3fac708bef060f2b53aa60900c7968276d7f7fd2409de1d0fa795bece57474ee6d32b5c7a6e117663a5e962214e767e939bd2d457de3eaea9787de9017d50eecec661849a9428939ba480b7ebf13b224e135f96e5743100c1cb29cba11edaccda27df0456061d3a5b80f577ee7dadf7f3e9746207251a16820cf2c2643283d1d96560a29a2b98c2aef7502650ab4c6930a2f96d6cccde8ae45791194982b1ab888e06dcd9d203901867f7352f81867114886f0f7d5ba6ed6a034bdd6b2afc3d289f1e08ec4a2cd7e8807148ea929c1f7de08b30d0acf6b954c583d4d691599ad0667c87c05dd393e178bfcbbd41e328f4ca8103ec9c2985be4fab5d7fb1d8d21ebdc28bfcb7863cca93f29ddd765bb41093b31d55a14398bdb801232cb2d48ccbf14d91778699883bca2870589328fc5049a313a", + "credential_finalization": "96566909ca38bac45d1639697c40fef88da04f8fc4ae2253850abbcd44fcf4fe407b39d576c10b50dd61b55d6edfa01d5007d25ea0c9b294119f9cd56ef914de", + "client_registration_state": "01184f9924388ec154d21a3ddc94812817a6607954aa4825e2f94259637bba8252fa4dc276a18d9310f5db0ed26b9191082759b5ae82d1151e8326b5b466912d59170300ef3cdda6625ba20771ab480148fc939555b57ea5f793ff1d4a22c631284552687066e68d17dbd12d7b0ed31659cf93f389d877b9b6999adf5c3f590c933956a9d9", + "client_login_state": "01184f9924388ec154d21a3ddc94812817a6607954aa4825e2f94259637bba8252fa4dc276a18d9310f5db0ed26b9191082759b5ae82d1151e8326b5b466912d59170300ef3cdda6625ba20771ab480148fc939555b57ea5f793ff1d4a22c631284552687066e68d17dbd12d7b0ed31659cf93f389d877b9b6999adf5c3f590c933956a9d967606dfe4e3e6890de5e3c2caa69f9a1bb0adedb24795bebde15174dd979d9b152829ca7ce2420d2b8a07efe9cb9a93a227bd64a6a96a0e98ecdaa723de58d6c0287515f44bf6fbc331e735ad2997df4d9ccfc91697500213aa7548005f1400967606dfe4e3e6890de5e3c2caa69f9a1bb0adedb24795bebde15174dd979d9b1", + "server_login_state": "4cc842db5d616779675d1e96147b17a13fcba1608068ee3fd433f98e0a7d9720a5741161229f9c320c59b7d75406512a2bab2c229ae95c3898bcaaf93b903145495e71c2a93d65187a50f55b21ed650d7142cbf1b48717dcd524ece6ea1c117ebcff4be2213d8df0dc5706fb5a0d0aa6fc19e7ac6ffcc6c09546d5934bbaede449bc80c87c9c4ced79db1a690cdc808ccc9f5f99267c21b3907447dbb9b00f5aa21209ee72e30a98d97e8e3ae04404867d3dd24d9dae64c3557882ca0237b5f2", + "password_file": "7284a0118a04728179b344cb56ebfcca5109b2b3dc961fd881ef017b0ec36f21fe55ad7f7721c2f397d0773bf5c67041598d19200906849884b7824a61d6ba5267cb15a79c777e65e77607aa76902ad07cb011255938f99a57de446bdd9ae9fb314c706d7d5d97616b7e804be1b91942ad60a5e4b1dae86aa4a8d4d37c4aea054c6a65d9949e0bb2ce132c2914199f7bc0736499a07100ebe9cc4f7b74b60cd3dd6a1a85f29a3ca0bc9a599396d5aa0a47d1761854da5f148d22f580ecc82fe0", + "export_key": "fdc5eb7b60dd0a73c5acd1c2e7511f0403e3be9f8078ad7c814f8fd368fb1793228700f4e4bfa1b92cb3a42aeaa5e687972336b15d031a7fa1e3ad5e2f2496b7", + "session_key": "49bc80c87c9c4ced79db1a690cdc808ccc9f5f99267c21b3907447dbb9b00f5aa21209ee72e30a98d97e8e3ae04404867d3dd24d9dae64c3557882ca0237b5f2" +} +"#; +pub static TEST_VECTOR_P256: &str = r#" +{ + "client_s_pk": "036683e5bd9a2c8ba201c89d3132ea032a0a8af6614fb9e7d8f78c51949abc8ba8", + "client_s_sk": "948eac91499b0e527779f159739582e84b3c802005d9fcc144ae39acb9039436", + "client_e_pk": "03344ddf040383810d3475909a46e878923823ede67e5048f59227fd32bf6e3b9a", + "client_e_sk": "3d8e878ef40b8972aae0863aa4c8c8dd9d10158a0afa459a2baadc8949c79b53", + "server_s_pk": "02b05107f4e9c5e2ab3b295e8bec2cf2f151db6b2c3d0adb86fb588b024f1439b5", + "server_s_sk": "8c902cf958f63cdc1b2a57f890f2c708ac405dabbee7e83578a623c285c5ad5f", + "server_e_pk": "03a26ae388612383f5a437a1f2e3fb4ad1bb68380a624d506b41ae46b6c81dbfe9", + "server_e_sk": "7feb796700569c270372a58c2d0c611e7edb4828409497d805640bcabbc4eadc", + "fake_sk": "0352299f5487baf7c00487b9c976b17e2ba476bdf863ca889f603cc10bb441f3", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "ca3cfb8d8405cb744e43263f433d26670ede9fe723254802062bbc035344e476", + "oprf_seed": "2aaf10707ad93745681b33ea6cdae3f74160b4c346c620a00e015e0dfebafeef", + "masking_nonce": "8156786f1bc7d30bd8e475a72fe08243e5e03132b0f491308f8cda884b13764d9fd5d24a330628793863a01f636e01e4b7e48dd81f37c8ac43e86571471b0068", + "envelope_nonce": "339d986a567f27d8b52931aa22fb1d3fe6d74d5945609e3ddca6b66c06875502", + "client_nonce": "cc2c3c55daf14dd249bf1970836e4e5d290bcfe15097c5ec5d022c864eecbbfb", + "server_nonce": "c2e8a4decd59693ecc8668089e7b68cddd1607adce3cf0a15184b53324bb1c57", + "context": "636f6e74657874", + "registration_request": "03edbead6d065a971f8b4b5369a40ed17505542cfaaae23c48ee7db3735737bb75", + "registration_response": "03dea2fbec5ccfa0fb3058cbe91871bf7cc6f88bddf65bc3eadd993a1111a0ea5002b05107f4e9c5e2ab3b295e8bec2cf2f151db6b2c3d0adb86fb588b024f1439b5", + "registration_upload": "034710ad9098d47b6710af608e03373e7a7b62b4225fb8648d30f67edf9ec725e2debfc1a1ef946d1ea69e26a4d81db0449d158f53c7bffb6e98e5abea85518790948eac91499b0e527779f159739582e84b3c802005d9fcc144ae39acb9039436f59a3720087b1b54654318bef08648624e2089367050d290ac324b8e78881c31", + "credential_request": "03edbead6d065a971f8b4b5369a40ed17505542cfaaae23c48ee7db3735737bb75cc2c3c55daf14dd249bf1970836e4e5d290bcfe15097c5ec5d022c864eecbbfb03238a0615838f8fafd316877497deda316ddb47867bfdaa8008b63506d257a35b", + "credential_response": "03dea2fbec5ccfa0fb3058cbe91871bf7cc6f88bddf65bc3eadd993a1111a0ea508156786f1bc7d30bd8e475a72fe08243e5e03132b0f491308f8cda884b13764dfd30013fc524e7e6e8899cf1c7b2e34601200558c2362bd98c6f128f045ff530b9ab5ded08adfbb24f08009f7ff98ea19f43661cab4513eeb859e180ae69852d86fb2fe83430ec96538b5b0157834f111709e600fd2d699260a96926c3f832bbf07feb796700569c270372a58c2d0c611e7edb4828409497d805640bcabbc4eadc0336d927387a9ff657f2f19b01e455fcba672b499a430d3de199bfc74500b0f30497cc2d7fb967e80ffebdbba2cd51ea685797ec0a5b48d36d0c43d28881f8354c", + "credential_finalization": "3bb291618479b41a652bb7db4e4b680c9537898ec9815a0b5c4ecc5f82d217ed", + "client_registration_state": "ca3cfb8d8405cb744e43263f433d26670ede9fe723254802062bbc035344e47603edbead6d065a971f8b4b5369a40ed17505542cfaaae23c48ee7db3735737bb75", + "client_login_state": "ca3cfb8d8405cb744e43263f433d26670ede9fe723254802062bbc035344e47603edbead6d065a971f8b4b5369a40ed17505542cfaaae23c48ee7db3735737bb75cc2c3c55daf14dd249bf1970836e4e5d290bcfe15097c5ec5d022c864eecbbfb03238a0615838f8fafd316877497deda316ddb47867bfdaa8008b63506d257a35bd975709cf775d0abaaa4e1d6bee3fb6ebb437234988d85b5c4e5b3a32d60750fcc2c3c55daf14dd249bf1970836e4e5d290bcfe15097c5ec5d022c864eecbbfb", + "server_login_state": "05d87dbedaeb6b2a80db6086302e1d94f8b62fe5c571c7a284d7c025b4933d76bfda49b8909314ea6855561f1fdccaad4ce9a2ab87fe34d75e984da5fa1219fc04388a7549da97cbef3558e88d92485cb87de8208580504f10c5573f8311661f", + "password_file": "034710ad9098d47b6710af608e03373e7a7b62b4225fb8648d30f67edf9ec725e2debfc1a1ef946d1ea69e26a4d81db0449d158f53c7bffb6e98e5abea85518790948eac91499b0e527779f159739582e84b3c802005d9fcc144ae39acb9039436f59a3720087b1b54654318bef08648624e2089367050d290ac324b8e78881c31", + "export_key": "e0410a04de893226b82b621453c6703eeeeea7a3c8a82a469372cce6ae15a24f", + "session_key": "04388a7549da97cbef3558e88d92485cb87de8208580504f10c5573f8311661f" +} +"#; +pub static TEST_VECTOR_P256_P384: &str = r#" +{ + "client_s_pk": "02999509524cbd37c46ac41d7f17b0a9e010625aba82252e3cf6a1a6fab31c86f6", + "client_s_sk": "96569efe7ed1267814271476529a067cd45db66b6f59b3c3d9fb1c42bdd61237", + "client_e_pk": "0313fe899fcb9eafa9d25da8bcd2c3239f41231a91773285424f5ecae928d64d43", + "client_e_sk": "10bbc937a4e156a8528208ee6534f9f6a337a368c4b9e54c00ade8cdf01ea47c", + "server_s_pk": "0367cff3866d1489f53eb09e860cca2c46d0819ae2fb9bea7b169da1b1b4129579", + "server_s_sk": "936714db066a49a058431d6f13306bd080484347693ce4f79221c161a226e3a9", + "server_e_pk": "031a1474f669f63ce942f4fcfb9feae5ee1ed678e65f0c09f23e59acfc19719d54", + "server_e_sk": "24c104d8a8cd55b067e0ef94a58c896ef90b75547c516d7c634b9b91ef5108ce", + "fake_sk": "b0dd2ea5b9b29eb0b9d246845d7547f1397e324c7662e0f802e5f46672912316", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "53222c113a51e1657196f48ef018b325584e90e14d86e77b086b9cdde54062297c1c965855599d54259e726b68d04503", + "oprf_seed": "6f8137f09a529632e04a005501979c308fa658f52f80a5c6d048f824d6ff7d63e3cfea5dad2735f841e667980b0f9c12", + "masking_nonce": "067b4e2a79f0d8d070536b9d5ce54d0fb7ae4c980875e7c6f981067cc5b104e965cc44aae25ac18932d953e0b3ff175a58ff730c4c06e6826b7eee85c03a4f73", + "envelope_nonce": "b9a029566a232f8640df22f0196579abf40385eb915fe1b9a783d5b25327ae7b", + "client_nonce": "e80fdd08641cd950f6fa9a64e2d394c17467778b91d464fa43b279b9c78a443b", + "server_nonce": "684a538d679ef62a891947b63767b99a83e0b0c38cbcd870f08092d9f60ea059", + "context": "636f6e74657874", + "registration_request": "024ac3e82cceb7b0517daa15b0865eb8958c4e429353204149565dccf04169d27760c4b62f9d2cc6eb920529bd7268f00b", + "registration_response": "02fa03afd6abe5e0edb75b1ea6547d555431a8e3e80a09098fd210bb8b3daef7e2a6b44e09f8909f9986596a90fa2477650367cff3866d1489f53eb09e860cca2c46d0819ae2fb9bea7b169da1b1b4129579", + "registration_upload": "02c55a6c2683fcb71190635503ace4fb908c42293b7412d7d383ba32ac750f614063fc089dced9383d48a226951d9f71644733d4d022e868591d10a1325fa67864719b88283b85c6e59a3b6b36d6b628c896569efe7ed1267814271476529a067cd45db66b6f59b3c3d9fb1c42bdd6123707d1081e53fd2939cf70aead998fed9a3fd8c6a8d65e0f1612a2b073f57dfbce4addb81669d8251e8873852b8664967f", + "credential_request": "024ac3e82cceb7b0517daa15b0865eb8958c4e429353204149565dccf04169d27760c4b62f9d2cc6eb920529bd7268f00be80fdd08641cd950f6fa9a64e2d394c17467778b91d464fa43b279b9c78a443b03115418ae50db5cc76ce92c741190999398145d3a2830d65d038feb6a553c338e", + "credential_response": "02fa03afd6abe5e0edb75b1ea6547d555431a8e3e80a09098fd210bb8b3daef7e2a6b44e09f8909f9986596a90fa247765067b4e2a79f0d8d070536b9d5ce54d0fb7ae4c980875e7c6f981067cc5b104e97da303dafb802330daea61716bf3c84e843a243a27830d89276070390ee47001a32cb7db0c0a06fcda2f4275c924d1c0acdd30894a9993cb5d02919c450e5f648c58f6639ca5b70544864966390fd7b369cbfb149c80b0905d0ff2d702825b32109b5450bf99f994d06e86243a03437f6324c104d8a8cd55b067e0ef94a58c896ef90b75547c516d7c634b9b91ef5108ce032f2e09827e1085ec8c935fd5dab53c8a492e3d00bba78b2cfee66386941d64fc1688438eb8035cf0646abcb6b7db67f92329c40c8835059437b20881444f5a7b4c42068840d54806f3602d17804e6479", + "credential_finalization": "2e42267739193d5252908ab3ff4c92f1c4e898290348bb54910664a03fb3feec21b4080e36b9f9c5e33680c9013b27c5", + "client_registration_state": "53222c113a51e1657196f48ef018b325584e90e14d86e77b086b9cdde54062297c1c965855599d54259e726b68d04503024ac3e82cceb7b0517daa15b0865eb8958c4e429353204149565dccf04169d27760c4b62f9d2cc6eb920529bd7268f00b", + "client_login_state": "53222c113a51e1657196f48ef018b325584e90e14d86e77b086b9cdde54062297c1c965855599d54259e726b68d04503024ac3e82cceb7b0517daa15b0865eb8958c4e429353204149565dccf04169d27760c4b62f9d2cc6eb920529bd7268f00be80fdd08641cd950f6fa9a64e2d394c17467778b91d464fa43b279b9c78a443b03115418ae50db5cc76ce92c741190999398145d3a2830d65d038feb6a553c338efec21c53386a72f03d8664876c00ee496d2a0822746ecca299c71232d44959e9e80fdd08641cd950f6fa9a64e2d394c17467778b91d464fa43b279b9c78a443b", + "server_login_state": "bcc67ef04ae6678d4dc148349c13daf549a6315fb98b6c1d75fd15942f6d27539aa565eedb7458c60d513ccada3b47486cd7632c072576e76c396e796058238b7ca7648e82956f0bdc641c5d61e26fd97e28b4a52f185889a098376a95f359baf5a5ead19897e95a65145e050c30760ba713c299bd523f8b9cbcbc123e116cdd3e4e79c3295892e4fd8060922c40b9ff", + "password_file": "02c55a6c2683fcb71190635503ace4fb908c42293b7412d7d383ba32ac750f614063fc089dced9383d48a226951d9f71644733d4d022e868591d10a1325fa67864719b88283b85c6e59a3b6b36d6b628c896569efe7ed1267814271476529a067cd45db66b6f59b3c3d9fb1c42bdd6123707d1081e53fd2939cf70aead998fed9a3fd8c6a8d65e0f1612a2b073f57dfbce4addb81669d8251e8873852b8664967f", + "export_key": "817ba3c4f92c69cbce5c141a59a2c84f401e2741d64bc9b005a274f01da6dec13611c2ae6a1d8944a05108053fb84b36", + "session_key": "f5a5ead19897e95a65145e050c30760ba713c299bd523f8b9cbcbc123e116cdd3e4e79c3295892e4fd8060922c40b9ff" +} +"#; +pub static TEST_VECTOR_P256_P521: &str = r#" +{ + "client_s_pk": "02f70e4cdca32d7fbb4d674cff8458f1fcea19142b0afbe0d03a18f54eb5efa0c0", + "client_s_sk": "7d2c68cb648a5b76a3afc3940569438f7479f5449ef78b4b8b614cd49ff7cd18", + "client_e_pk": "03c1c682de8c49a9129ca29a6a0da2a8db3b58882f68190fcbea2afc23943bb448", + "client_e_sk": "01489f36c15d5b9b3f8d975a3d22204e0de583fdccc970cf094227576203f2a0", + "server_s_pk": "03fa123f893d67fdb2f07530048c7a6deb0a7616f2e2d23b25aace9c924def38b9", + "server_s_sk": "21dc4135523155401fb3a26427a965ec115e7755270fe0e90e8a2545dcfcd4ff", + "server_e_pk": "0248079637e6bbba3653f6627533cbf679abefbaccd76d2776ae67a28c5a2588e6", + "server_e_sk": "15cc10e72b187c2e70c57b4ceff967fca637460977d329ad3e2fa075230de760", + "fake_sk": "ad489fb0404de8046f8d4ecf180960d34309802f91987a45a8ed48aada7aa758", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "001fd75399d6cf9d76d3f7b1d78febb85806163f9b92a6902113fcf603c9131804ce190a487b25f5baac0943c3f10adf853f86b34cfdc9c3d5c7d44e0bc76f140140", + "oprf_seed": "ce130d4e83a9a13799cf5381cb945d8b9511469a36c78921422826e4d125b535d2eb4ccc2e2454d5c87b0c16360fc25b86456d1bc84c62151971b00ece4df50b", + "masking_nonce": "d79c63532a8165cf7c311357cdef19107127e796ce8c79c0a1d95f3291684b44f30d73fe98d4257dd28e57abb1b4d092433fe9d6bf8759d4a4a05290791bfd6e", + "envelope_nonce": "66a7d2429309a09574cb331a9efda563999f58c5667f1bcea3217942f5a65a12", + "client_nonce": "a1af12b68b7d3f85e4f5e1fe26cfa194f75ea1e635043ac7dd017f52fed354ed", + "server_nonce": "e8e378984534278506ce4566fea59d5a86be2673310d7c26b859a40a00a5b3f3", + "context": "636f6e74657874", + "registration_request": "0200e6d291ec0b5b61cad7e1a581030db9ec67be7fb82c63a8e2b424ea4e0d5994a9e19295a1e53f64235fdbabce375416a585f7018aab64bfc16a2e5dda17b6010aac", + "registration_response": "03006c313745a8b32788cd0da645bc868fcd0b78fdd07b8885d4c11b4353ff8cf1d099e46e510bcddd4aab1ae997e97a96abb09106a45b0676d36c5d9f5b6ea072258d03fa123f893d67fdb2f07530048c7a6deb0a7616f2e2d23b25aace9c924def38b9", + "registration_upload": "02fbeeb2f2f175d11ed7f0cf2e7928d4681b1f3cad1b50c94275f9a2479480b02477fdf442670a0efc497368941277f3991b3589e9ac2a2a5212aead5bf10b33ca73b3a6c0494935bb2a13fbad1b9f5ed614ed96b6e81b0ca5755b6122543970b77d2c68cb648a5b76a3afc3940569438f7479f5449ef78b4b8b614cd49ff7cd188be9e5fc28c5072daf2a2ba9f465e7b147d4901fb4a8bd18197ebf24afc3f43167f98e051f9f8e829cedcf9ac7f5ce4eee247ed4cadaf8ecf11e1fe6ccb2db3f", + "credential_request": "0200e6d291ec0b5b61cad7e1a581030db9ec67be7fb82c63a8e2b424ea4e0d5994a9e19295a1e53f64235fdbabce375416a585f7018aab64bfc16a2e5dda17b6010aaca1af12b68b7d3f85e4f5e1fe26cfa194f75ea1e635043ac7dd017f52fed354ed03de82e386b668ee06c886ef9b2bee34a9aa95c0f3ebb50aed8db192b35133ace5", + "credential_response": "03006c313745a8b32788cd0da645bc868fcd0b78fdd07b8885d4c11b4353ff8cf1d099e46e510bcddd4aab1ae997e97a96abb09106a45b0676d36c5d9f5b6ea072258dd79c63532a8165cf7c311357cdef19107127e796ce8c79c0a1d95f3291684b4433a74ddbeb2aa9fb3cd498f35d4b21f6d3c63a1d9b2d7c5623d9fb5b5787a4a38df931d518e32e133f1d59335930da9250672f3afc8d44bff66f89dbb874200359aa7b53ea46720819e01b3f234edf7fdbd05799a4339bd39e9172a106438d4e39c0c86c49eb444b3d4a06933f9f4846c0271534554fbfae5993336bfed5490d3615cc10e72b187c2e70c57b4ceff967fca637460977d329ad3e2fa075230de7600381018ee7032755ca143dabc4fd45cbb7346c8f3e1fb4af2bce47f83e80e76eac27565f4cd2eba8ee2ef5e8d21c6429f9a2c43987d7062558f3df8cd3f08bf5d15ee0fbb49e9b0f03485c8ad0385e6fae24a1b2c48e19821059d95743e0a7e4b8", + "credential_finalization": "d7caabb0c5629bf3e50de72743f5f0790fb40a49f6135ab17edd22453a69128c0df3b8039e4fd145ee4e705a6d53ba30dbf82d3fcad762e36a8e21db4b74b944", + "client_registration_state": "001fd75399d6cf9d76d3f7b1d78febb85806163f9b92a6902113fcf603c9131804ce190a487b25f5baac0943c3f10adf853f86b34cfdc9c3d5c7d44e0bc76f1401400200e6d291ec0b5b61cad7e1a581030db9ec67be7fb82c63a8e2b424ea4e0d5994a9e19295a1e53f64235fdbabce375416a585f7018aab64bfc16a2e5dda17b6010aac", + "client_login_state": "001fd75399d6cf9d76d3f7b1d78febb85806163f9b92a6902113fcf603c9131804ce190a487b25f5baac0943c3f10adf853f86b34cfdc9c3d5c7d44e0bc76f1401400200e6d291ec0b5b61cad7e1a581030db9ec67be7fb82c63a8e2b424ea4e0d5994a9e19295a1e53f64235fdbabce375416a585f7018aab64bfc16a2e5dda17b6010aaca1af12b68b7d3f85e4f5e1fe26cfa194f75ea1e635043ac7dd017f52fed354ed03de82e386b668ee06c886ef9b2bee34a9aa95c0f3ebb50aed8db192b35133ace54064f8f667acec10bfc0cf998e19af7c2a6f396ca0dd2a2a1393a599ddaee71ca1af12b68b7d3f85e4f5e1fe26cfa194f75ea1e635043ac7dd017f52fed354ed", + "server_login_state": "80af07484f690be5e8f46fa823f00968ffad226f14874329f42b68c3af3de79aa53c3310cd0b05ed11b36f057f810d229c67a236e4edb074dd90bec457a97da0345b070ce3d457cd1a113bc9c3c2a0ef78a46c8c4e6463ddd36ee469c0b55cb5e4c6ab3cb300f915bfcdc0d64299b4ba876803e91f5c8f080c047c61c54a82bc86ef27a7fda81a7ae78e38f87fd79a66295767630ff4e9ee91161e6d620f6c7004685cdabc832e62822ef5e005427ba456e19806a211b32a93bf6c0dd2a95a70", + "password_file": "02fbeeb2f2f175d11ed7f0cf2e7928d4681b1f3cad1b50c94275f9a2479480b02477fdf442670a0efc497368941277f3991b3589e9ac2a2a5212aead5bf10b33ca73b3a6c0494935bb2a13fbad1b9f5ed614ed96b6e81b0ca5755b6122543970b77d2c68cb648a5b76a3afc3940569438f7479f5449ef78b4b8b614cd49ff7cd188be9e5fc28c5072daf2a2ba9f465e7b147d4901fb4a8bd18197ebf24afc3f43167f98e051f9f8e829cedcf9ac7f5ce4eee247ed4cadaf8ecf11e1fe6ccb2db3f", + "export_key": "513c752aea9248885b947cfe67b7fdf2a50056cf5f930ad868fd4b22d746a7cd8b47264891b33f419648274b717e177f3653751c4ee74192a846bcb621e52901", + "session_key": "86ef27a7fda81a7ae78e38f87fd79a66295767630ff4e9ee91161e6d620f6c7004685cdabc832e62822ef5e005427ba456e19806a211b32a93bf6c0dd2a95a70" +} +"#; +#[cfg(feature = "ristretto255")] +pub static TEST_VECTOR_P256_RISTRETTO255: &str = r#" +{ + "client_s_pk": "0242e71d6f4008b8250e6eb6bc438cc89d27673f7f2145f306ae845343033d4ec0", + "client_s_sk": "43912402ecedbc22bb23e2cbc87cdd7683bdab3ec75c10fca7040eceb511cdf8", + "client_e_pk": "02dfeb24a841b3968720d3ae9a3b80a9352d23fc6877cd7fa687848a9aef4be8a7", + "client_e_sk": "c79057c12155116090cfe47c05d6ae0de8bcd945ee8cfa5c06f90f0e996b6b91", + "server_s_pk": "026e9438a92b1a83789f7509b58a4e1a5097997a4730e9cd7624c1ad54a9254374", + "server_s_sk": "d1049509e624f68cb24b02e72c74ecc4c89ce77841fe175a5c17a1ca07a16c2a", + "server_e_pk": "03ceaccfbbdd427839fb6be2e7f717e648cab82a9fbf00cb9d5eea7b310bf86216", + "server_e_sk": "8aca49d5b5d20cae19085df7cc32dc5616085c92d1c817ab688efab093dd7a96", + "fake_sk": "02c5bcd183d623df1a1aa6c10c6a601cda6c25e25ebbce9a0dda4f6131a2a443", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "fb5d456a74830e104da71d2b4cb78a159e80c25bd23c97d9a46c3e60d573e804", + "oprf_seed": "c4c7280c84aa15d43f3af3c496f2ec52cbb667e24861285ad21c9aadbb6b36f9ea3b4b01afed7335c70ce066e1ce5d76fe8714763d0ac825a527d1090dd907dc", + "masking_nonce": "f690b5c90ef6510d632c98135ada6020137b8323fdca5cc52f703e17777d4aed174e255e3e3c9976eb0e5c7323495edf747ae175e786b653951bf6a7a7e93c6f", + "envelope_nonce": "aefdd79167abac0f13c0d19d0ff5dc6af080b26e1e6e5e3b163b4fe0a0625326", + "client_nonce": "f49804e9b7704b41bd0072e3509dcf426dcf3cb7ee2e806bd2e8daeb2deec9a3", + "server_nonce": "4f93dfeeca464d466ab153cbdf7a635fe0093a14807431b8ac706953a33560ea", + "context": "636f6e74657874", + "registration_request": "ac2466e62014bd03eac0e1558f28a4b3aa70cf9be402df883716f8dfb90dca62", + "registration_response": "e2d8c4dfb4bf2b4b54b1a01312dd30d8c64be439da8d4339002426ece59e182a026e9438a92b1a83789f7509b58a4e1a5097997a4730e9cd7624c1ad54a9254374", + "registration_upload": "032ef9e5f0fdd48576ce824b8cfd6080b2496a92b5131c9bc103ece8dc454ff35c8d360f27e36bc7ad4e7ed465a28dd6be9c3505c0dd8681a5aff19ac300b3613afbe1f151c0897b9a73f68d5f7432cf5f8f4b88ed23d4c78d726f13c0e3c6846643912402ecedbc22bb23e2cbc87cdd7683bdab3ec75c10fca7040eceb511cdf83b9ad73fd49f75fd73f632ff3158c23ec3c404fe8d67760aec7c9745ba7b8402e93809e925f90ffd234f2b2722bbf87549af5b55d903c912a1d0826e4a1fd081", + "credential_request": "ac2466e62014bd03eac0e1558f28a4b3aa70cf9be402df883716f8dfb90dca62f49804e9b7704b41bd0072e3509dcf426dcf3cb7ee2e806bd2e8daeb2deec9a30275feb5f44359cd7cd42336aafe63c378750961271a987883846159c13e4ce4f6", + "credential_response": "e2d8c4dfb4bf2b4b54b1a01312dd30d8c64be439da8d4339002426ece59e182af690b5c90ef6510d632c98135ada6020137b8323fdca5cc52f703e17777d4aed11038d07be52cda633dc8253f4881143e4523b796f573b85f6476d3f016336c164ebb46fb1e9ac86ce257b2d57bafcdd6355773bf167146ccc0ece25b69d34d76ec1bdc63c4518d5192736cb1cbf081831e49b00c335296163ed4203bce4ab615af6ce7412939e929563dd6d8668cc09cc73c3a6c8765412a4f1b61121ddd6f5bd8aca49d5b5d20cae19085df7cc32dc5616085c92d1c817ab688efab093dd7a9602e5202666659c4ca56676468edf2b45747f5ce6e3838ddda765aab8432407331395b8cc1145d0f7db60e358a280c3ede24ed6ce45c842cb1a881690fb0fb2c6088e8bc6152612bcbd1ceff8ca2d0dd684acf8bc1a2e162d49fe1da770f533f43b", + "credential_finalization": "b910614ecbb488a358cef52bfedb9d20cf035557f4ef5d67150252f2e250b09a11d4cd6ef938097ac4bbb7055c46e1e855b9705228fd5cd6fbf199d46cc86d3e", + "client_registration_state": "fb5d456a74830e104da71d2b4cb78a159e80c25bd23c97d9a46c3e60d573e804ac2466e62014bd03eac0e1558f28a4b3aa70cf9be402df883716f8dfb90dca62", + "client_login_state": "fb5d456a74830e104da71d2b4cb78a159e80c25bd23c97d9a46c3e60d573e804ac2466e62014bd03eac0e1558f28a4b3aa70cf9be402df883716f8dfb90dca62f49804e9b7704b41bd0072e3509dcf426dcf3cb7ee2e806bd2e8daeb2deec9a30275feb5f44359cd7cd42336aafe63c378750961271a987883846159c13e4ce4f6c81c3136e325d87c04f6063f36b8752f04371fd2b798bfef4897f6b061b9545ef49804e9b7704b41bd0072e3509dcf426dcf3cb7ee2e806bd2e8daeb2deec9a3", + "server_login_state": "3917283f7bd9ef42ab1ce4f4116a156038d74489b5081887eb1f8849357adbf36cd99dc6add3bc792b196775babef1ca9d9d3a10dedb747b1364271f68abbf89c57466d08600732a2419a3577edd43ece61c20cb5a7670ba9c4b4319223281cf5d3dd304200d841ecb6d4bf5f139cb01a76a699af67d835feb1d4d643ee5260f18a012234de5a9b863c4e37d552a48a424ee51359f8d794f1a3c4d872927cb6252fc4783a4189c3589903888fae5167c36c324f7765ac01f09119ef5be2b7303", + "password_file": "032ef9e5f0fdd48576ce824b8cfd6080b2496a92b5131c9bc103ece8dc454ff35c8d360f27e36bc7ad4e7ed465a28dd6be9c3505c0dd8681a5aff19ac300b3613afbe1f151c0897b9a73f68d5f7432cf5f8f4b88ed23d4c78d726f13c0e3c6846643912402ecedbc22bb23e2cbc87cdd7683bdab3ec75c10fca7040eceb511cdf83b9ad73fd49f75fd73f632ff3158c23ec3c404fe8d67760aec7c9745ba7b8402e93809e925f90ffd234f2b2722bbf87549af5b55d903c912a1d0826e4a1fd081", + "export_key": "a240f22a22098f22aa7e06f013c7cac584372feabe69cfd5aa038095ef3cf3cb56c8ff7a85f7e3aea1ff0ac6d612fefe0bbf4ee9a5377f46e39ef521683ca9e0", + "session_key": "18a012234de5a9b863c4e37d552a48a424ee51359f8d794f1a3c4d872927cb6252fc4783a4189c3589903888fae5167c36c324f7765ac01f09119ef5be2b7303" +} +"#; +pub static TEST_VECTOR_P384: &str = r#" +{ + "client_s_pk": "02fa6ed24fa6fcadb3771a0f54c7ac65179ad017948d99e7e164723b5e964effbf8824127cbd2698a8fe8a4c2afb05fcc0", + "client_s_sk": "c2abb7cd78af44820b0a15e4f71fb319641ec9c974ef41119cc5a7cd363edf7fc7d894267e5a5c719668b7efa7636734", + "client_e_pk": "026d4a0c385b451514f7c28365a8291653a9d2f2a83b66c5c6ad6bc91266e4dcda707b21ab2386c6cf6083efe6d8022b81", + "client_e_sk": "79cd80f006822d5a00ffa23f4cf9b458433026781f5a60b2e2fa1196cd27dc6271a243f907f4c6f5416ccc50ba0b2634", + "server_s_pk": "03768842501d964fe1e4e5a7e0a682cdac9befb2ec917e805fc77db34e83e4429e6f37f6f938fe4e841a7922ecb904c982", + "server_s_sk": "2c10786474740bf5c795afd16f45ffb509e1c8eb1c26f542a3978756ee650d787102d8ca1f019588cca8519725cb7886", + "server_e_pk": "02cb1befdb706a11a570803987943b71a0396ebffe51e322586d83076c26e107d3b1f6a80a3f6df7c160855b613fbf9690", + "server_e_sk": "5b4e17f6ef383deaac66ba5e274e896cb420c56e2803b47a9c77e1d62b515282f435691e69bae1a7bdeaecb5d8f30b9d", + "fake_sk": "165e79fc62545dab5376fadeae1799e3354f61e7ab3ef7550537aad9f1a6bb1a3a375bacdba45c985673b032274f7bc6", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "a947a1745e9f3229fa6ea23210782709c078a8c6736090e38460b3fcdd228b25030e3c7d1455fd64f6b9f8d69e906a89", + "oprf_seed": "95b5c500a5e78d35be52514a06b09ec5f7c6be1436115e7e48b1cb010d4534650bb5efbc926a288c1582ca13e486066c", + "masking_nonce": "354ab1fa56207a15b97c083e1c82f34a6db2eb74d565a2f7b6e23d4468c8e3f051a2c06602dac84fe21538f062beb43dd113d52490aadabcb7facb60252b3504", + "envelope_nonce": "cac73dc72ee87a6a473616f3070a097db1ea8037705bc0ca31c62d4bbe121958", + "client_nonce": "123e9333eccf3901eeeabf10ab0964c5f95b96f6186b84794fb411aed6322eaf", + "server_nonce": "35b7d95eff703a96db3c28b3187290a9c36edff5a6c249fd062619038d70573c", + "context": "636f6e74657874", + "registration_request": "03bcdae0c74053cd38a0608843145d50e29a2a67f91a4aa65561b8482c22950415308c65186739f75b6d1e91c63b0b450b", + "registration_response": "0361e23da60e729ab9613cce5be91a9e5e3a336f9048a0e43e84f9cbd876aeb4dba34661475e040810fa3af56107a182bd03768842501d964fe1e4e5a7e0a682cdac9befb2ec917e805fc77db34e83e4429e6f37f6f938fe4e841a7922ecb904c982", + "registration_upload": "0366b3ecb9b98991032f42924837b4c001750841b8124b02d9626cbae04f25f8bd6039ef4d4fd4ce665583464b6d532b430c64dbb13528053db8f1159f91c3f2cc863c6984e064ae62718fdc09abf15c4319fe4d58a7b35dc70d0d96f334dab120c2abb7cd78af44820b0a15e4f71fb319641ec9c974ef41119cc5a7cd363edf7fcb20e5033ae2203b5ff19fdb8b5962f1c01cde927bbc6e9444918010debbb0d50cc757eee6a21909f3ff4cade0136366", + "credential_request": "03bcdae0c74053cd38a0608843145d50e29a2a67f91a4aa65561b8482c22950415308c65186739f75b6d1e91c63b0b450b123e9333eccf3901eeeabf10ab0964c5f95b96f6186b84794fb411aed6322eaf0229a63f3ea3631b9155b2fdbdeab70d602e5c6d5d1e18b205821f65c4b87b673c1818d5b7a4de69aec29da6da608d7713", + "credential_response": "0361e23da60e729ab9613cce5be91a9e5e3a336f9048a0e43e84f9cbd876aeb4dba34661475e040810fa3af56107a182bd354ab1fa56207a15b97c083e1c82f34a6db2eb74d565a2f7b6e23d4468c8e3f0be0eb4444f93abe213c19b05b7aeefc9123913dd29cce792a51416b7efd7a261d04c003e626bf99158ed1967ec819825936c4b28ba8affc641461673e139c7d3ae8c4c55333be4e5771e3e84b4ac66adc3d7d9170e201acf9ad2efb31482940f0704722c886b97cbd056bc168e6396138fba86ffdcab6a03eaa402881aacb2e421b420c56e2803b47a9c77e1d62b515282f435691e69bae1a7bdeaecb5d8f30b9d0334737564996492f6f5070bb46d277f71fb9aa75afb3418001fd81c543ff12269aa3675c1310a4ae95bffad9130cea6e7c92c39ba22bfad290254f0d7385bfd77941f7003c7af856865da2c7c8ff728a29ccf9e1bb129eb6b9ae03df1ca3edcc6", + "credential_finalization": "2875908e63b4a276adc6fd5161e2352dba2401dfd46852a2d5914669913e56cb523d0c27daa030089402bb5ac4478ba7", + "client_registration_state": "a947a1745e9f3229fa6ea23210782709c078a8c6736090e38460b3fcdd228b25030e3c7d1455fd64f6b9f8d69e906a8903bcdae0c74053cd38a0608843145d50e29a2a67f91a4aa65561b8482c22950415308c65186739f75b6d1e91c63b0b450b", + "client_login_state": "a947a1745e9f3229fa6ea23210782709c078a8c6736090e38460b3fcdd228b25030e3c7d1455fd64f6b9f8d69e906a8903bcdae0c74053cd38a0608843145d50e29a2a67f91a4aa65561b8482c22950415308c65186739f75b6d1e91c63b0b450b123e9333eccf3901eeeabf10ab0964c5f95b96f6186b84794fb411aed6322eaf0229a63f3ea3631b9155b2fdbdeab70d602e5c6d5d1e18b205821f65c4b87b673c1818d5b7a4de69aec29da6da608d7713561c5dfd4e2782a883360d68db11e03d4ea695bdeca9eeb0f999410a399201bd3bfe5a4b9a951d72303627ea21da64a4123e9333eccf3901eeeabf10ab0964c5f95b96f6186b84794fb411aed6322eaf", + "server_login_state": "bfe2761cf09d57c22373d3eba7627be288d862770f5d7d3e89ff539351c743889436e150c879bf030f546a5b781cc9ba7b23cf54fa8df7d9a1478403324be3e88e0fd7e7fbfc53a6fa7772fc23d9c7a1ae0013d39720b111882256f4ccbf627362379189dbda93a685e16e41e8903194348914fe74a8fe6da1b03bdc7553cf65c3911f57cbbb410f428ef22a148faf7a", + "password_file": "0366b3ecb9b98991032f42924837b4c001750841b8124b02d9626cbae04f25f8bd6039ef4d4fd4ce665583464b6d532b430c64dbb13528053db8f1159f91c3f2cc863c6984e064ae62718fdc09abf15c4319fe4d58a7b35dc70d0d96f334dab120c2abb7cd78af44820b0a15e4f71fb319641ec9c974ef41119cc5a7cd363edf7fcb20e5033ae2203b5ff19fdb8b5962f1c01cde927bbc6e9444918010debbb0d50cc757eee6a21909f3ff4cade0136366", + "export_key": "61efbf5943a46589742b64132ac35a7349da04738a1fb63dd56f50d7db85ad99cd250be65f73655c9875579ddd999054", + "session_key": "62379189dbda93a685e16e41e8903194348914fe74a8fe6da1b03bdc7553cf65c3911f57cbbb410f428ef22a148faf7a" +} +"#; +pub static TEST_VECTOR_P384_P256: &str = r#" +{ + "client_s_pk": "03705df936b70570aeb23bc684360d6ff388ab9ba806d5534dda9edb5f81a129093cfcaa2a81cdc3c36c9bb35350cf34e3", + "client_s_sk": "64b331b1ccb0aff7890651fdd5ddbc7bd60f2f9e22733006d892758f440da433c7142c57474b48737276b4c183fe1412", + "client_e_pk": "032f1bcf57a41ba2d3a80b214f104c53808763736e45c7ee5e1b396727632fa10657ef143375266360893050186fccc6e3", + "client_e_sk": "b35ce757a04ea8ec1bf5f3b3e7964f3633a95115b7cffbd827a9fad63e393a647b6b28748aa978467be14a8f7f4cb6f4", + "server_s_pk": "03d7f7f216b76b3bbfef49e3a8642e2fc137f122b451841c281b22d865772379bc76fccfd6239f359cc2a411945a31aca9", + "server_s_sk": "8f7bc0f5a437d5fdbfc489b549c26a137da431ced4a7fb1352c95b7d212a9160ecea11cb2f559b071a195560c375024d", + "server_e_pk": "02808842f803a8b402a4cfc4090b0e16da3b468f398d988b88ef6202eed43bb619febf3cbf29616e5ed69529cec787da84", + "server_e_sk": "ee84829468202149439a5317a3aacd25aae5f2e3cbd7260ff8b1aac359299137655376967b6e90d90785ee079e7343ce", + "fake_sk": "30d72844d5e6b542adfa33493cf62bede862b7f8cd04738b06d337a958248e10c4b258ef57db6eae29180b599b5a989d", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "8503f8bc99555c4bb0a948257717ec94f1b86a33a943765cac84c591e7be172e", + "oprf_seed": "ffe220f9925d90f7e1f4cb8019d77412cb4d16371fd7efd01810a8619e665f3c", + "masking_nonce": "ca60700fd92f8ac5bc4a80df35a95d5885d48cf1bd1a7a1000e7ca30fecf70d4d8f9fbe64b7797f5c60b4e2d6fb29b50f03df78abe2011bfaaf8231f158a5272", + "envelope_nonce": "f9ef57d5561b42cd78b6714fced62c27f6c005077de41b8ec1961a29097ef51f", + "client_nonce": "2503e298d22ec0af2dd9b9ca010a3518f228981182d4386f316be3625d77a061", + "server_nonce": "b9bc7b227d43f24d7ffe42399a35734f31fcae204e3fbaebc526727d99765788", + "context": "636f6e74657874", + "registration_request": "0251d3388220d3c82eeaf0dc62bea04bd3255ba5b56e8ad3ae6b14802491373f0d", + "registration_response": "023a520225a108208363997d73584b25385503a583ffbdf012eb85e3576474760a03d7f7f216b76b3bbfef49e3a8642e2fc137f122b451841c281b22d865772379bc76fccfd6239f359cc2a411945a31aca9", + "registration_upload": "039e9e4adfe991522318ea17712758e0716715c1ed1f3cbd7d043968e252f157e165bc557dd0f35aea76476acd91197524c4dabb61fbd62ab2278a24cebdb454872e7191eb0927b22625ecb93c6653645364b331b1ccb0aff7890651fdd5ddbc7bd60f2f9e22733006d892758f440da433815d84aee443831ec0f0dd61c8ed491930532243d0d3f6235ba8067076fa5e28", + "credential_request": "0251d3388220d3c82eeaf0dc62bea04bd3255ba5b56e8ad3ae6b14802491373f0d2503e298d22ec0af2dd9b9ca010a3518f228981182d4386f316be3625d77a0610335cf779b358a211cae03ffd2ebbdd5dca57df77e1ffc8a966ae3f567c48aa00f0cd827bab80e8940d9931a4b205a55ce", + "credential_response": "023a520225a108208363997d73584b25385503a583ffbdf012eb85e3576474760aca60700fd92f8ac5bc4a80df35a95d5885d48cf1bd1a7a1000e7ca30fecf70d466fb718f41f183c845f2af48c53861e578422d0ed185eb11982ae735043899e51f04c163b9ef25a08926e15c47e0e540f4a07172aa4ef78a5fd8c830275bb96431fad0fb6f9361303c17e9cf7b02459c8549a72692986caee16f0e890f56ca44b905f30fae213d784a378badfb6e9acd0daae5f2e3cbd7260ff8b1aac359299137655376967b6e90d90785ee079e7343ce03f5bd35f8bd90fdd3b380f1af89faa2bbc44d06e0d08b0a5311728095e532fd9cbccc1ca31b92e8b2735d27b7da2a013ec8ac0470f98f215269942e8e5ebd818f7682729a6ad5d446c518e6037c586bb1", + "credential_finalization": "632ab982abc7dfca078ad200d7778c6970ffc46aa9cd408ea76033928eabe5d6", + "client_registration_state": "8503f8bc99555c4bb0a948257717ec94f1b86a33a943765cac84c591e7be172e0251d3388220d3c82eeaf0dc62bea04bd3255ba5b56e8ad3ae6b14802491373f0d", + "client_login_state": "8503f8bc99555c4bb0a948257717ec94f1b86a33a943765cac84c591e7be172e0251d3388220d3c82eeaf0dc62bea04bd3255ba5b56e8ad3ae6b14802491373f0d2503e298d22ec0af2dd9b9ca010a3518f228981182d4386f316be3625d77a0610335cf779b358a211cae03ffd2ebbdd5dca57df77e1ffc8a966ae3f567c48aa00f0cd827bab80e8940d9931a4b205a55cec12c505a05f55310b6b28b6247f730edffddfe02aa4e34d0b5338f6a7bc93f75ceecdc3e227c5a7425a209c82120bb222503e298d22ec0af2dd9b9ca010a3518f228981182d4386f316be3625d77a061", + "server_login_state": "94167f2ce58cb91b5fffc12e9d3de1135fb70a0a9590029485a64c5d85194cf4211be47925c217eb86b89efc770094ecdda7791a9cc2259bfb4b80de454cdd2574b6fbaa888b6c58a7724167f80779ff3e43ee161b412c8e44110e6641f16866", + "password_file": "039e9e4adfe991522318ea17712758e0716715c1ed1f3cbd7d043968e252f157e165bc557dd0f35aea76476acd91197524c4dabb61fbd62ab2278a24cebdb454872e7191eb0927b22625ecb93c6653645364b331b1ccb0aff7890651fdd5ddbc7bd60f2f9e22733006d892758f440da433815d84aee443831ec0f0dd61c8ed491930532243d0d3f6235ba8067076fa5e28", + "export_key": "0c56c3df558d737ba05046b747735d21261d14f774bf68cc06dab4799b35529c", + "session_key": "74b6fbaa888b6c58a7724167f80779ff3e43ee161b412c8e44110e6641f16866" +} +"#; +pub static TEST_VECTOR_P384_P521: &str = r#" +{ + "client_s_pk": "03f9bc8a09d1672ec08bdfba037c1a5bfe606c41d3ac764039059598e18446de9df3215766e0f637256831ab795c624915", + "client_s_sk": "9976856d2ffadcc4d8b5bcfe4ef3a4403049fa7bac8e538aef8fcaefab09bd4299df3ee9d77089a1c57725d1c3aa0a22", + "client_e_pk": "03ec4fda7b91157d4901613b2a4e03a5fe21675f10a59aa2d0a061b5287200ff840c1db3ffe32e16349a6b807c688a23c7", + "client_e_sk": "61bde756eb60e067fe1e5605f903b72a8db1526039156ca71e5d2ee4fb28e79785d280a8d9658f5123a3d4434787a696", + "server_s_pk": "02d8c4656ce5feba45aacbec2963a47a9ac2bedc80ce664abe4328a027998af4d6c5c5d42b81a2ff27695de8f2cc27d73c", + "server_s_sk": "4de2874d6e54da940be13de6e0d7895bb9ef2d433ec4e013fd4dbce44b82671a895660faa23f343bf3c8cb68a9ccf236", + "server_e_pk": "020e852bb698816cb01319030c0fcb4f9110abd65ecfed246af60db508a9b76a17ba8d48a696eade06749381da343a879b", + "server_e_sk": "cff4e274a72ead44e15f69029f38c233b01d9d44848c39b4efc450a4650105e11e23f0b58b35b2c4c29a1b3eac8bac2e", + "fake_sk": "3b3f63b54496fd2a36e56fe51e371c27c80b6483ad7cc95e65f7a21e881e5885f8feec1fead60c85d51296328dc69045", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "0060a5b87aeadc0f7e298558783677821bd7bb9fddf904e639639787ca134cb4edf7ea065d452de00472c3f0557e1200502204d24590e2ed5e33032b824e65421cd0", + "oprf_seed": "f3d5dc34e77d2b07784aeff89edb5088032da59d983512349b4b78bcd9345ed379073330ea89141dfb54fe9e06f28cf9010c66e626876b8fdb936e31bfaab5be", + "masking_nonce": "197833429382a06ea3ad9a021ab6094332f8315cb73b3216e7770120ad2ce655fa3061c65dc03ce0d667b17d00717242fe9e0781ca4e3dbc277a4ac3ca9bde8b", + "envelope_nonce": "ca3efd3eaed0c949fbd40b1ee25ea87657fdce42344fdee1bd7da2463ff47a5d", + "client_nonce": "49415cedddf1ed397fc1842d6185f7f67d6a7ade8def4eb5349b90bbd85bd2b3", + "server_nonce": "f5c97b9988bc93dd1f84cb3b75b788fda45c64a86cd8b1a500f5976083b8067f", + "context": "636f6e74657874", + "registration_request": "0200991cb8ebc1c40214f3eef02f97513ca5dd9d9ede7c46a774347dbee01df8b3ff17b34bae2e871a0622bc86100af07976e1db6bf43b7b5b782ba0b54f7687b0694b", + "registration_response": "03003d7b022157445bdc58f21923b04cf6a84b0018f8ae00509a855b675d4129a5c6027b41e789e2bbfed442e43e4b23bdf09841c359f82dff83e40df3995cc32835f002d8c4656ce5feba45aacbec2963a47a9ac2bedc80ce664abe4328a027998af4d6c5c5d42b81a2ff27695de8f2cc27d73c", + "registration_upload": "0387a579c42db48307bef5ed9b55d8db2e69791f377a3bc07498d64886234f53999552a3cc4008f10bfd64cff43a54414f1186462bbf825093366a78a92396a1ebb1e3dedf9def2414b45c67d7f4d8bce5b7ed0b65adb2dfc6d6a1b91fc63239f0f06f94fc0d8d84e4e35781b130a45afa9976856d2ffadcc4d8b5bcfe4ef3a4403049fa7bac8e538aef8fcaefab09bd4240b8b1adf1c555d22fdb8ac9f962ad9c0f4f96e712e68313e3d79f81de3db77c58136539586929456072981e11730add9911f40ea186e1680e6950bac57fd970", + "credential_request": "0200991cb8ebc1c40214f3eef02f97513ca5dd9d9ede7c46a774347dbee01df8b3ff17b34bae2e871a0622bc86100af07976e1db6bf43b7b5b782ba0b54f7687b0694b49415cedddf1ed397fc1842d6185f7f67d6a7ade8def4eb5349b90bbd85bd2b303a45b5e239567d83d854bc6432f6b20e19eab2633d60ca47c208896d1020eb269a7bd1d9db54a08d54639e2e9cf68c6f6", + "credential_response": "03003d7b022157445bdc58f21923b04cf6a84b0018f8ae00509a855b675d4129a5c6027b41e789e2bbfed442e43e4b23bdf09841c359f82dff83e40df3995cc32835f0197833429382a06ea3ad9a021ab6094332f8315cb73b3216e7770120ad2ce655cf28f569e33e8ae43401b30b66ffcc84d644d80cc96d94b12a5ee8ba0d88abb20ff31833d4171ac66411de1e22b92c66b213edc8b37c6a1e4f3e8ccb661d1cb0c47438724d311dd57455a7a3e7a1a917d022d0fa83a7885f682d059f066fa72aba67efa352e8b984cd2174007d3ee357fb4ea4f92222d449886dfb404f91d87b3f5db56085790fee3da26a47182b3c298ab01d9d44848c39b4efc450a4650105e11e23f0b58b35b2c4c29a1b3eac8bac2e03622e850622f4db39d315abd5bfd42b0f5304121368cdebc28edec69420e10a14af603bc4ef0b9ab4fa887eae71f679d607c94f4052a4324223132a0c358a4897e40b69ee6355880631a9e22d292b5e901ef5e9d40c3ad98e1d0f9abfba74582470b8df302aa5ea1e56a3ef3b6d1a2947", + "credential_finalization": "b729f0c85b332912e8e2c69954518632ac8912c14369172a63bca1adf6600ab14da0bb3c629a53f41de5d5569d7d26b71c476a2bd384e2d563d8892f1b8d13a7", + "client_registration_state": "0060a5b87aeadc0f7e298558783677821bd7bb9fddf904e639639787ca134cb4edf7ea065d452de00472c3f0557e1200502204d24590e2ed5e33032b824e65421cd00200991cb8ebc1c40214f3eef02f97513ca5dd9d9ede7c46a774347dbee01df8b3ff17b34bae2e871a0622bc86100af07976e1db6bf43b7b5b782ba0b54f7687b0694b", + "client_login_state": "0060a5b87aeadc0f7e298558783677821bd7bb9fddf904e639639787ca134cb4edf7ea065d452de00472c3f0557e1200502204d24590e2ed5e33032b824e65421cd00200991cb8ebc1c40214f3eef02f97513ca5dd9d9ede7c46a774347dbee01df8b3ff17b34bae2e871a0622bc86100af07976e1db6bf43b7b5b782ba0b54f7687b0694b49415cedddf1ed397fc1842d6185f7f67d6a7ade8def4eb5349b90bbd85bd2b303a45b5e239567d83d854bc6432f6b20e19eab2633d60ca47c208896d1020eb269a7bd1d9db54a08d54639e2e9cf68c6f63e84e89ccc7a9b701c63785877e851ce0fae1c9bdf4fd890461049cb1d3f0686c4381187e8e0525c8985e34ac9aaad7049415cedddf1ed397fc1842d6185f7f67d6a7ade8def4eb5349b90bbd85bd2b3", + "server_login_state": "84ca46a379f4f1da02639c63e25cbc11b493f90aa71c78703d443173f196185420ee5f8139461c95cf1c1f08b3adf50e4a13e0dde3d88b826341ac4333054c5db149c31be323122c888318ef8280d7d1030b62d7d02eb21b49fb832d24cacb566fa6bc954fce7937716084c51f2937f4b6dd2dd45e228f1e199f6e16c9b9e7d13d5913b98e6c7a9a67baff21902cf227c7913ac0022bfcba41a86ce4682ed4501676b2d6d5de847427d4172ad4cc93dedc1e813de3b900386c70922eddcbad9b", + "password_file": "0387a579c42db48307bef5ed9b55d8db2e69791f377a3bc07498d64886234f53999552a3cc4008f10bfd64cff43a54414f1186462bbf825093366a78a92396a1ebb1e3dedf9def2414b45c67d7f4d8bce5b7ed0b65adb2dfc6d6a1b91fc63239f0f06f94fc0d8d84e4e35781b130a45afa9976856d2ffadcc4d8b5bcfe4ef3a4403049fa7bac8e538aef8fcaefab09bd4240b8b1adf1c555d22fdb8ac9f962ad9c0f4f96e712e68313e3d79f81de3db77c58136539586929456072981e11730add9911f40ea186e1680e6950bac57fd970", + "export_key": "c439d325d810b0df0cc8e1b7d574ef4b1a0a2c93c48e00a3296d78f2f9fc6731339909c375cb77a616a50a30ab1b7573c830ecb3e788a46285e560a298895b7f", + "session_key": "3d5913b98e6c7a9a67baff21902cf227c7913ac0022bfcba41a86ce4682ed4501676b2d6d5de847427d4172ad4cc93dedc1e813de3b900386c70922eddcbad9b" +} +"#; +#[cfg(feature = "ristretto255")] +pub static TEST_VECTOR_P384_RISTRETTO255: &str = r#" +{ + "client_s_pk": "030ca039903e185917b6814faafa366e5fbdf183297f13407485e4fbdfb377858022e95704082a65e2493f9b4988673e67", + "client_s_sk": "9bbf7549419fefbff80595e366e36cf781384441e6db5a0431356cae8dcbf3a64532620ba556688a818bb85e01a2d501", + "client_e_pk": "020419c940d5d1a50a3cb3afe9d08089c6c254e7836d53ab356c1dba1339c20f1cadefcb6df5e98bd63105e91ef8b8c408", + "client_e_sk": "22bd87a74509c40b46fbd3b826cf3c1da772020e0bd5bd4337799b7cd3678c040069801196b601e092f76cb8167455c5", + "server_s_pk": "022afe4a6f7dc644ead7ab935246cef7728109ecfa8f9cda6a1f7ffad746568b6a2979b26185e5cad41dd75b5e42aa0ae8", + "server_s_sk": "2a786021b42281bc77507d9dad8a97833d6d827aaebf6570f87734dc62750a52b81d1c6d04460e87b0e3ceb741d856d5", + "server_e_pk": "03ed891b5cc17b67ebe36f54fac5e066601cd77dc5c200e55377cdfe24b036a7fdf98c99eefd7217df0d75600266aa397d", + "server_e_sk": "3b08f81a8f6fd483f57d0d5c1a766af04e5e9fe90575a7bab45e7e6d47f549070025dd27f60d10267f9e8be8a673c806", + "fake_sk": "b69dd8b4d45d6085078e1a48e4474ca27afc920280cd1c01235eca7e8e5c3f0eaa77fc84cf6318025eac945a52cc4892", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "3096bb4b10e6df5cb2829a329e3e8e7a1bab8c9027518d4dd55ae14c313e9505", + "oprf_seed": "975efab123398b384032c8d1852fe2a38dfd637d491ac735fd2f0e42ba0b481b78e82e3d04a164896adaaef864f3e0cfc0d23cc01ea4c2ab4398987cea36c55f", + "masking_nonce": "cd903fed791d96842ab1358edddf9dd7aacc9153a5908712210c0c500e129dbe0d4a281caa562aa6d50659b29bffb5b6030e226499d25805faa01dd565fcf833", + "envelope_nonce": "87649965dc9a8839bfa12b91efc6303b1378b0d1617835dba7974ce618ddcd75", + "client_nonce": "4cda0a6848a7b4eaa3794f84afc1ada348ad38079b2f6a7d1839910e0fd37748", + "server_nonce": "0d7fd1f0510d64c80b262db40912f2b6289b9557ce255eca1583b0551b8f6b4e", + "context": "636f6e74657874", + "registration_request": "44372a80c2b33b044995a12353c086688d829393153b064147ef357d5c56c96a", + "registration_response": "acadcf3493247767235852b30692296582d9fe96f81140a4990139fe92938b56022afe4a6f7dc644ead7ab935246cef7728109ecfa8f9cda6a1f7ffad746568b6a2979b26185e5cad41dd75b5e42aa0ae8", + "registration_upload": "02b1fc9714070b4eecb3ecbe5feed67c94ca5124db2464bfb1ba9fd86c5d55df3a1af2f45b681296727d4a3f56dca62bdf03e3e093300311f937a3c0d7bad085296bd94f8ef5e97ba66087326e6d21be79c11593dba5bfe5d81d24428c30cbac96f99afce079de4940ec195ddf2308f5ab9bbf7549419fefbff80595e366e36cf781384441e6db5a0431356cae8dcbf3a67dc25c731b736e3da36aa41ffb3e71d307dd2a627b136e8a567d14582582a5f88bbc59efdbdab611ba967206f696487050e42d5870212be3a7ff850185e94b97", + "credential_request": "44372a80c2b33b044995a12353c086688d829393153b064147ef357d5c56c96a4cda0a6848a7b4eaa3794f84afc1ada348ad38079b2f6a7d1839910e0fd3774802c2bd860fd40900f550cf1a52056a38c994d0e9ad9ad67360d154508bb9c4f7dac8157641983bb8d454777763584a0a25", + "credential_response": "acadcf3493247767235852b30692296582d9fe96f81140a4990139fe92938b56cd903fed791d96842ab1358edddf9dd7aacc9153a5908712210c0c500e129dbed4d746329d1280cec1b6decdbe310a67b2972d6cd9a21fa1d34b97888b6ce1c2b1437d0872043dc93b94307402e5eb2a9e961058dce40d45e59cd72c006acd4c473cfbc70b8d26268be81221472cc5022a1b17106e45350ffe12ed12e1d673e7bd0d50313e787f20263acbb75b5a54401e91651da6d762589126368ca11ca02cf688290067f0066d7c1f004646608c5b7c4e5e9fe90575a7bab45e7e6d47f549070025dd27f60d10267f9e8be8a673c806025a5736dfc00f71c76a94d227b680e62395af00ca20cdd434742bf96e6fbc9afe14a4f6eb3dac1f8793b30db50a77af0cbfe43fe68e5c905b6e88b2c7e212bb43d722a5de3b56f0cdfb80a54b072c9eba03b1614289c59d3ab132ee29f2e4cc5c319ff452f76a2e4a2f4b40a14619d3f0", + "credential_finalization": "3b7f449356d302db0e6541d4f4d26f31d07d24b2766c40188d2fccd84bcf9808559f2cec3769cccb4dc27ea39f4b2c8a2f0a6245106d74a4360795bf91f404c0", + "client_registration_state": "3096bb4b10e6df5cb2829a329e3e8e7a1bab8c9027518d4dd55ae14c313e950544372a80c2b33b044995a12353c086688d829393153b064147ef357d5c56c96a", + "client_login_state": "3096bb4b10e6df5cb2829a329e3e8e7a1bab8c9027518d4dd55ae14c313e950544372a80c2b33b044995a12353c086688d829393153b064147ef357d5c56c96a4cda0a6848a7b4eaa3794f84afc1ada348ad38079b2f6a7d1839910e0fd3774802c2bd860fd40900f550cf1a52056a38c994d0e9ad9ad67360d154508bb9c4f7dac8157641983bb8d454777763584a0a257fedce6702a69a32de321a767241d85344c7844414cfb162a85f8342930466f1042d8b12bbd2fc9afa0fe04385d62d994cda0a6848a7b4eaa3794f84afc1ada348ad38079b2f6a7d1839910e0fd37748", + "server_login_state": "ec272f34c3791571cff89866e42295a8a109dc4ca43401cfcfd5d252c9f4b20caa7b9caa193daac555be0be55fc4c94463ee57db132b9e8143747e50c451bca2164619dbfcc7fe2c7590aa1f7598d302fa345af413676c041bcfc6ad79d22f2a3864c6d4789777e47256e6a78b87571a0788da0c497d6be2468131e14ec3518443b9d4d3c43105a4cd2849eb706a9f14dcbc8d2c3c820ced23e1d44b6590253681d817abaeaf7b87598c311119265161c90237f3a908e81f5a7bfc3f65860fbb", + "password_file": "02b1fc9714070b4eecb3ecbe5feed67c94ca5124db2464bfb1ba9fd86c5d55df3a1af2f45b681296727d4a3f56dca62bdf03e3e093300311f937a3c0d7bad085296bd94f8ef5e97ba66087326e6d21be79c11593dba5bfe5d81d24428c30cbac96f99afce079de4940ec195ddf2308f5ab9bbf7549419fefbff80595e366e36cf781384441e6db5a0431356cae8dcbf3a67dc25c731b736e3da36aa41ffb3e71d307dd2a627b136e8a567d14582582a5f88bbc59efdbdab611ba967206f696487050e42d5870212be3a7ff850185e94b97", + "export_key": "146b0c9edec1da5ffe42f42649223a25b91b59bb4da818dd5ade79d31a94741de32282f20fe08f91cde6bf7d94476c048291b2fb4983cd0288422f94aced0a20", + "session_key": "43b9d4d3c43105a4cd2849eb706a9f14dcbc8d2c3c820ced23e1d44b6590253681d817abaeaf7b87598c311119265161c90237f3a908e81f5a7bfc3f65860fbb" +} +"#; +pub static TEST_VECTOR_P521: &str = r#" +{ + "client_s_pk": "0201a8855d74c9c52aa7aac2a8f8ad1ecc5a69f1f63b8837bf3499e25aad7ec814ac7fbad6cf512408897f4b367b80b3390c37628b8cfe7547808646bdc720a1f6d189", + "client_s_sk": "01394df281358616e075090c6eb45909c9a89d61722b64041a431b48dc4d3fb3682fb8a6bbc791f93b7551a9f50ef960652fd2678ecafe5c5990a1fb30d50f75c6de", + "client_e_pk": "0300d575e844e322accb7ebc8cd854cfa0873afa7a54389c9b7d4af50ea45c20cce9e78f8003d75ffb416d311aafbe647ae9e300c06a2c44495af224a234085fff9077", + "client_e_sk": "0020b35e8ad1f01b44ec423bf9119db84fe1dc0439990ecd8a4c19c56ecd64c66e9068b0e295506ed46600db40484d2611c05fcba8029ff0b720634e797cf8c767b1", + "server_s_pk": "030149f8c941439dab65c32ce9a9117b842efd1eef80645e4a16f4627bec1a12900c875ca41ea3ba6edd5780d6415417a54d98dddb480e6794c7ada14dad5be359ee65", + "server_s_sk": "01d3e6344bdc26338e1ba68613153460f57fe876128bf45c2ec4a5587db59fd2d772b3dcf255abe550aa848b39c26a4afa4fc82c054e8a3da0baa83c729a510b6c2e", + "server_e_pk": "0200e75f07a44f80cdd58ea0b6da3c5243922ab44964674cac6568e8e2ea397025c0a263ee4fb5c8454e9105e6ac288dca894613dd6ca64054d515e5aefcbf0b5afdf0", + "server_e_sk": "00b2df72311cbc162621dcd9fc88d463e967365099a78d2c39ae3744efe43a4f878a81f476c8413473564c85d079eeaa3e72796fad2cd82468434512283fec3a0174", + "fake_sk": "005c22ca983c2596c3555d1608edd4f270bbd3fd295eb000c9dfc58099a85efeee864809ad2292026271ba5cb91f2c2d112eaeea785f620b8e177bfeb18f31206a3b", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "00fbb22bf98bf39c7976b22794ac0b52e5647cc7c6974e0127de9ad1b87af9939e318a56e3234da3f4013e39772dc05f03209192186b40057f19dd6c2335343444db", + "oprf_seed": "415708c6e264878ae004e664ab0248c35eeea1087f1c0025354a0ac7038a9de5cbcc9fbfe4746168eac6f941f6b111cbe9c8518b9cd8ed70ffaf1b215d53e5b7", + "masking_nonce": "f00adf08b6a16efe16e79f7dd67be68120cac55c4bca3aa9f52028fee31a22fa19575f44e795fe377f3fe682cd1b545e09cb31d710aa2137b1a47235ac4c2746", + "envelope_nonce": "0428640699962a61df1069c5117a30d2fd88af2f739e0b121d1a45d372a2b43c", + "client_nonce": "e2161d273d1dfef417ef1f61fc52870261ff747c984664c674f8d04d27273a3d", + "server_nonce": "5fd0f302cc1aff28b8ab25d6691e2d12e6ea49c6898e571c34889224f9a077b8", + "context": "636f6e74657874", + "registration_request": "0200cb8f57dbc03f4d19f2e084f09a3c25c13ff5fd0cc287200b73a4a5db2032adc8ade46c67b41c3165a286ee620a1bfe7129ad30f10f64fa101265dbd90ea508527b", + "registration_response": "0201993e1ed2a09b321f70fe0b7650ca9d64420f3ff96ea61ac7eee7027ec8386b80ed6ba62f650f7eb799cc7c23dec5cf8d0707682c89b3c1d03724e575d1caeaa926030149f8c941439dab65c32ce9a9117b842efd1eef80645e4a16f4627bec1a12900c875ca41ea3ba6edd5780d6415417a54d98dddb480e6794c7ada14dad5be359ee65", + "registration_upload": "0300695698d710d80d522663a8f6042863183fb7bca9b4eba48c00588d0c1f2cb8e27816f359024266aa2e0f211a2a9bd2a554551b3407a3be96a025088e79bcef0d6d47128fa4397aa804a8d087998834403d7f9979c6e4decce37142bdf9a208d60e543934033c296eff5180b3f7f9a35b575cb4792a397f8941d726e2e530b7f5df01394df281358616e075090c6eb45909c9a89d61722b64041a431b48dc4d3fb36f25b45a2881ef3da01bf401006496fc09352344d05dc95b9f5ec3d2193be61b578df8903047b33792e80f271e9d5d3b7115e2bb5d5893fe3470978cb3ce972f", + "credential_request": "0200cb8f57dbc03f4d19f2e084f09a3c25c13ff5fd0cc287200b73a4a5db2032adc8ade46c67b41c3165a286ee620a1bfe7129ad30f10f64fa101265dbd90ea508527be2161d273d1dfef417ef1f61fc52870261ff747c984664c674f8d04d27273a3d03008c4cc94cb5792479f2b472431cf9d31e52e5e0eecce3985a2e3b5e02d75750f335665e3dc93719f65b326700287440ec8f11da6503454c21c47161bd216751bfcf", + "credential_response": "0201993e1ed2a09b321f70fe0b7650ca9d64420f3ff96ea61ac7eee7027ec8386b80ed6ba62f650f7eb799cc7c23dec5cf8d0707682c89b3c1d03724e575d1caeaa926f00adf08b6a16efe16e79f7dd67be68120cac55c4bca3aa9f52028fee31a22fad35e4c2441c80e1f1e47fc997ecc8cee138ae4e11aeeb2d1b1f3b59dd968d6978054dfeef60aa318a2a25dec3c463857130f5f888123339d8c3a6b6126162bb9fc507b332ab7f01f3d764395466b0096e99dc83f83f58435b5eea57636843ba64d5ec2a007d2bd5aae31fac3349d364e938033f9d604663b140dd62786b4f77f884675a8e2ba41ca5ae57cad25ddd56e4fc97d494d08a0cce38832a1666a194f26cef881f476c8413473564c85d079eeaa3e72796fad2cd82468434512283fec3a017403006e1112c639f3df9bb6a5b96518bffec67871a38f30e774f8d2c621781ba946325d173ddb730edd4f57d6c605a67dab92f2b84acbe972b0f4081998c1c40296150236e711bfd0fae44702758e3ff9957cad637f61a30e9a99b1c9f6796473be98b2e13fd87fc09e94ad07b934045eec0a94260384b8ed8e1453a4f1facb9d9542c3", + "credential_finalization": "2853706a32aca435e8bdaa480cd3ae3d52eb3dc3f6bf113a63cb45ef50fedd608b89e7cd6fa2a90c61e914e6d9b954f874247f67dd570dc3dd1857661a18e0a0", + "client_registration_state": "00fbb22bf98bf39c7976b22794ac0b52e5647cc7c6974e0127de9ad1b87af9939e318a56e3234da3f4013e39772dc05f03209192186b40057f19dd6c2335343444db0200cb8f57dbc03f4d19f2e084f09a3c25c13ff5fd0cc287200b73a4a5db2032adc8ade46c67b41c3165a286ee620a1bfe7129ad30f10f64fa101265dbd90ea508527b", + "client_login_state": "00fbb22bf98bf39c7976b22794ac0b52e5647cc7c6974e0127de9ad1b87af9939e318a56e3234da3f4013e39772dc05f03209192186b40057f19dd6c2335343444db0200cb8f57dbc03f4d19f2e084f09a3c25c13ff5fd0cc287200b73a4a5db2032adc8ade46c67b41c3165a286ee620a1bfe7129ad30f10f64fa101265dbd90ea508527be2161d273d1dfef417ef1f61fc52870261ff747c984664c674f8d04d27273a3d03008c4cc94cb5792479f2b472431cf9d31e52e5e0eecce3985a2e3b5e02d75750f335665e3dc93719f65b326700287440ec8f11da6503454c21c47161bd216751bfcf00d1a048cc35d263b95d32bdfb37dfecfb19537130de3772353e8474ecfabcac171c63749ec8bcdc04634fa8ef6c99db96c928c95791f43ca14abd55840f25ec0f18e2161d273d1dfef417ef1f61fc52870261ff747c984664c674f8d04d27273a3d", + "server_login_state": "74bc7a879b556fdb05b23112f764e8931efbc6e191d1fe41a3658853e4db9ae6eaa9a83ff88167598bbc339c8652a3f7504c89a92044f9744c64b4fc75960ca045344e8bbc23ba8cc368977ef39780a8703b18eb868f4ae927739326665714eceff222fd98f6fdf34bb61aa512574be5f244fe6fefae814e0e950b3344871236ea40170bf164db29b581e1beaba38648e0aea4fc4f21e0666f87571e18660c1f4fb97e18ed3fce974ce930a60e0dcd135756430c3d50457e8386da614c7e8849", + "password_file": "0300695698d710d80d522663a8f6042863183fb7bca9b4eba48c00588d0c1f2cb8e27816f359024266aa2e0f211a2a9bd2a554551b3407a3be96a025088e79bcef0d6d47128fa4397aa804a8d087998834403d7f9979c6e4decce37142bdf9a208d60e543934033c296eff5180b3f7f9a35b575cb4792a397f8941d726e2e530b7f5df01394df281358616e075090c6eb45909c9a89d61722b64041a431b48dc4d3fb36f25b45a2881ef3da01bf401006496fc09352344d05dc95b9f5ec3d2193be61b578df8903047b33792e80f271e9d5d3b7115e2bb5d5893fe3470978cb3ce972f", + "export_key": "66b3c8da85b49bea1f4b09c31d7f7d10f365c5364822a62c63198a2992e7337119112ebf74fb350fa411effc022d61cb8c3166107dd38163efef3603fb7c7001", + "session_key": "ea40170bf164db29b581e1beaba38648e0aea4fc4f21e0666f87571e18660c1f4fb97e18ed3fce974ce930a60e0dcd135756430c3d50457e8386da614c7e8849" +} +"#; +pub static TEST_VECTOR_P521_P256: &str = r#" +{ + "client_s_pk": "03008bda36e2b22820bcd785b559b5c7deb936591a03b914cdd687f4324e53964ddd2d22c113645925d8669091362654e0ed84db56a2a726a58cdb157509b11818716e", + "client_s_sk": "01595049bdc9c7d1f91b4bac384f0c37a845dd0a80f6981364b6c0b24cece28a6a8285e7f9823ad3d8eaabe4ccf69546c60ef89dbed19ab893496868c05412000580", + "client_e_pk": "0300a678d5b1e85e64de9cb46e7324ae43d6893eed9b83a086b07830162c8a9b35e4bc879ce6c97ff6c2eed389b5bfe97ab9b4bf3863c13e58efcce65341382862e7bb", + "client_e_sk": "011f790a4ec256b7265d7fdcae96301292ec2fd94cde549572bfa75b07a415539a316c9cf350b8903714def8f17fa22a2f3bfd943dbf83463e1e905c6b9db867f8bf", + "server_s_pk": "02015781b09643c1e7fe4bc1ee7afeb2adef5c3931ebe19aa58392c75aeacefd17386163cf269eab508b8d7dde928f336170bdb0c608f6fc86f4573f106e7a0c5079db", + "server_s_sk": "0109e66439a6169506cea098f551b49e5e96e78afb2e4ff1e777e30a3784769bfa02b5eb68468c36053f97a1508261c3ee4d360d1b518f52891ce9255ba0afe8aa47", + "server_e_pk": "0301c1874ee8ef53e5077fe00b57ab4b35d00fb1c3ef303277cdc81c075ba0bff978d4951cbd7e062efcc9f815625d2f8c693f79e0613a9554f4b0b241bd4c407a5af6", + "server_e_sk": "0009db24f25705eaefb68faa34c6a74d49f2a7908682f064578ed2429a58aa15cac4b9fce2007ea743c9ae4ec16cec5f13721bb327f2842686ee884336187a288613", + "fake_sk": "01dd5b11ac6b5b3d776eb4362c2b7dce6a0ae509dc4076f8ecfeff6c7b02aced76df8a837ea6850d4733c9256ea54b6c8821b6f5a19defce6028047adcc661a34bb2", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "144a612134e8f2e093d2e2a6889a252d12a3b29322d2247e497c7b407ec60578", + "oprf_seed": "585a3f337d4158fcfd019f283460144c748ed2d18703dfb94b36e38e24a025da", + "masking_nonce": "3827e3c4bb1510b0dbb851fe82e83e3070309d8715174b246074f3c5417952ac5b76c426f57d7007c4ce126fbace35a492b23e406e73d3907bd684cac45edc89", + "envelope_nonce": "0342101c673cdd080b324c161a519dd1eac2e356917d35e6b5df75f584b806d0", + "client_nonce": "c651b71863e0c5fdb170ccdf39b4e81644f47da263594a6fee50371c7fea43e3", + "server_nonce": "81eb2b4baf8ebd01751a6db6dd9febed7cee621418652e8156f73b8556cf485c", + "context": "636f6e74657874", + "registration_request": "03281ec736a6742338ff964bfd6f9cc4f8d252463e1e3ec739413f92438f618c1d", + "registration_response": "039e0c521ace3ccb4ffa0bcacf18b907ae2188344cf3e6d2a4082108823464d55002015781b09643c1e7fe4bc1ee7afeb2adef5c3931ebe19aa58392c75aeacefd17386163cf269eab508b8d7dde928f336170bdb0c608f6fc86f4573f106e7a0c5079db", + "registration_upload": "02004200deaf80382caab94591b722a3ee74b07ec01c26edbc14e8514ca052b627fb88788f8b219aaf92964e22a2884195fb1b6406f66f2fe4cdd4a2ccc243fb9416a7b9d34916e020109e56b016a7fee171a1af41e126813a884ebbb435890065ad6a01595049bdc9c7d1f91b4bac384f0c37a845dd0a80f6981364b6c0b24cece28a005dfc0f37e6832915b24059f8b37740a04ece22eb80824114c8a5fc34954c1e", + "credential_request": "03281ec736a6742338ff964bfd6f9cc4f8d252463e1e3ec739413f92438f618c1dc651b71863e0c5fdb170ccdf39b4e81644f47da263594a6fee50371c7fea43e30300edb0edf54c57b117396e37891f7c067e2064e5a9180b0f9a2d5727d72000eb843bc2cb3a96fb3a2bb9a82f740507bfc62a7832c850ac40e46a4b5d378386a9f65d", + "credential_response": "039e0c521ace3ccb4ffa0bcacf18b907ae2188344cf3e6d2a4082108823464d5503827e3c4bb1510b0dbb851fe82e83e3070309d8715174b246074f3c5417952ac92083d2cb998e9068ff82f83b33e58f3186270229e9d9bd1368dff750220b42a0c13d53c8626690bac97e3e775fd164cb29173436a9530559bea42d173b1ac798de55611b0221345d6894819b273cd48ad02547473e237e9cf9bb1b302f326cabd1ae63e5daa047828ff92934a760a6046b4752356e529700ba5e4bb29d0010100f5d0b9fce2007ea743c9ae4ec16cec5f13721bb327f2842686ee884336187a28861302004d60b663d0e8139183c8ac8be40ff857ebbe007dba92dd181754479d3371c77fe108033fd3f4fafac9b4be5c7b004157035e600be275bb61335f27f3d5c16cc017153bd527e3f110b591a045a02341745e00d4bea6dbc63084e689cfec3532d497", + "credential_finalization": "6e65ba6af45d8aa4a543f33bac55039d6c16e48727622f63a9d49de7d1bc48e7", + "client_registration_state": "144a612134e8f2e093d2e2a6889a252d12a3b29322d2247e497c7b407ec6057803281ec736a6742338ff964bfd6f9cc4f8d252463e1e3ec739413f92438f618c1d", + "client_login_state": "144a612134e8f2e093d2e2a6889a252d12a3b29322d2247e497c7b407ec6057803281ec736a6742338ff964bfd6f9cc4f8d252463e1e3ec739413f92438f618c1dc651b71863e0c5fdb170ccdf39b4e81644f47da263594a6fee50371c7fea43e30300edb0edf54c57b117396e37891f7c067e2064e5a9180b0f9a2d5727d72000eb843bc2cb3a96fb3a2bb9a82f740507bfc62a7832c850ac40e46a4b5d378386a9f65d012bd0e7182edf626a508bd6debbe5e9ef4565fb08a8546250f1c534d59b3c53cbd3982e4a8a640c5d880ce580286f3582f6f1a90b5e09612465deb4b3e00f349975c651b71863e0c5fdb170ccdf39b4e81644f47da263594a6fee50371c7fea43e3", + "server_login_state": "63e77cccd9b4cbf69db7fbda112bd3405a9d842cc81693c163ad302d8f0a5a1a3a3cd7cdf0389c5c1544bca5b94c8342dbe882b7d82c3b86971626d64165a4af830efa779fdc6f5825b735aa2bf89b69659e2b5d29c5bb99ea840e1e6c228d14", + "password_file": "02004200deaf80382caab94591b722a3ee74b07ec01c26edbc14e8514ca052b627fb88788f8b219aaf92964e22a2884195fb1b6406f66f2fe4cdd4a2ccc243fb9416a7b9d34916e020109e56b016a7fee171a1af41e126813a884ebbb435890065ad6a01595049bdc9c7d1f91b4bac384f0c37a845dd0a80f6981364b6c0b24cece28a005dfc0f37e6832915b24059f8b37740a04ece22eb80824114c8a5fc34954c1e", + "export_key": "e0627f61afbc6db79d46dbd1c8950b0f18ca7196d206751b473b8b72724af0f5", + "session_key": "830efa779fdc6f5825b735aa2bf89b69659e2b5d29c5bb99ea840e1e6c228d14" +} +"#; +pub static TEST_VECTOR_P521_P384: &str = r#" +{ + "client_s_pk": "0201a4a5c65e0572d96026aefbfc2a30b778f3f8b474f638f973703cdc294b4216804ebef4633ca198e308c9d04f9908110c429662e14d5079d89d69189c9e2f66952d", + "client_s_sk": "001453f4d08d084e0b9b51aec45354544b11d3fc9183922b0385dbc3378cdae07d5df02ee7ddf04bee6cf5c3464a2ba067d8f284391a8adf03f7261309a1295a4de1", + "client_e_pk": "0300eccb1c7d92a3d31855a09d983cf3d31c4b6c3e750de067ec6edd3fef3f6491ed59d25fda8376e12f0b44741a5e05623ae14df2e00ac21e311d884ca72815f74c12", + "client_e_sk": "00bc03ab2f53ff4a178a3a32f1c39f321b0ef31e7fd5d8d7c06e25faf2457cd40fed5449a9c14a3d659ed0c8e33311507c35b67207c52cf09a5643f667eecce10848", + "server_s_pk": "0300ad5c8544dd644908447269b93f11a8c9126f00952cb9331fd4de5958b01cacdf65264dee15ea54ae22e33ddffd8c88d403ccaf935b8c7c7889f316281c3c41395a", + "server_s_sk": "01ebcddc54c975d047337a8dba5eada806722cc022db684d108e37bd274cb8e1587656eacf490869f5d6c5faaac2036a1b54118a2712fe199d00c3e9689a101ee458", + "server_e_pk": "030019acf7c8e57e95b4c7f98e960e5f0a83f0c49bc264e8d61b867e7558ae0b30393f49859b53a163ef6112f120b7a2c5a200e0dac42dd90f105252e917545274f87d", + "server_e_sk": "0162b1283d0b7549fb849779222dccdb4cff924dfb8fbd870727c09c9409d820fd62d56b97d0ef039712c37a5b8ac3268d2290d0ed8935da3d532a296a4c8af3554a", + "fake_sk": "015fd25efb29c7f8ab03689a2b19ae7a19aa2b7d9b7340097c0b2e866870005a9b5ecad9ff14917cea33c816d8a2b8dfd9078cbed5846697668f20473e826a7ee727", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "942294032be4511f9a266720b20fd9fccfee1a33788545bf64436447165d1758d0d397d8e397aa7569459a67077e42d7", + "oprf_seed": "99c194da41150637b9dfef87bc91baf253bcfb2daa290e4adb18eed4aadf4759966169400609cc08c208b015c7777c43", + "masking_nonce": "c38296b5854b9f04bef3e8e6e6c0560a7f3f015ee142b2efbfbd2ec48d042c754101d64e778cae6ca232c9424056a27721844b207eddc2088fea95c84a90a891", + "envelope_nonce": "867331248c2ab8999a6e7850653a0537f215ddcd96cbedadaf8e73faf5c6e6cf", + "client_nonce": "120d27e0b315dc261f7275be5a111aaedc40c55fa8886826a29b410000ea6b9d", + "server_nonce": "a5e65a59fc5cc3444efcbe347c39ef4f58d13f35340943629ee5c377da4a5d84", + "context": "636f6e74657874", + "registration_request": "02bdd371211802fea29b71013ff008693ad109adc9d6f09c76c18ebb557020bc0a346c654f8e1b2b05f49c9a663980f053", + "registration_response": "0214783f4e405b8a9e292a6105ed4e2aefb9f9814919df71755ac2dd33639021927e6143fb4903de787780e9817b65947f0300ad5c8544dd644908447269b93f11a8c9126f00952cb9331fd4de5958b01cacdf65264dee15ea54ae22e33ddffd8c88d403ccaf935b8c7c7889f316281c3c41395a", + "registration_upload": "03012248384607cee25d56351542e52988420cfa30d9ce965df9b6698a62f4a0c49530a103382963ab0eb3947a2d5ba261415d9a874084e99cd8f85a455173c90220fa1b85d02de063fa8a03f3744216f06826cf26ccd24b849ad040e7d91dc8ce3ab32953b4542c5242b174014f4c34d74ab3001453f4d08d084e0b9b51aec45354544b11d3fc9183922b0385dbc3378cdae02e955041ebcf7564b0a5f1d615103cef9d416650ab062df61150b643f8469de0942bdd6fd0229a8569547dae22eed85a", + "credential_request": "02bdd371211802fea29b71013ff008693ad109adc9d6f09c76c18ebb557020bc0a346c654f8e1b2b05f49c9a663980f053120d27e0b315dc261f7275be5a111aaedc40c55fa8886826a29b410000ea6b9d03015c7eadc7a0dcf6af31862d0408f599151e3efdd8f9c83223da930b85730b22a63390cb3e6d4d63323451609eea0f846cd0f9d4ae52445c8af1c1020159ad8d180d", + "credential_response": "0214783f4e405b8a9e292a6105ed4e2aefb9f9814919df71755ac2dd33639021927e6143fb4903de787780e9817b65947fc38296b5854b9f04bef3e8e6e6c0560a7f3f015ee142b2efbfbd2ec48d042c75a3592358c5361011591d4b96d11ba57cc8a35898898813a823117fa0c6cb7d4eee2ab96dc3aa734db51b1114d7fc0296d71381da8c5fad27915151208913eb63fefc0892f4e7aced500a939f61080665a924b66701d5b773f3f6c4e766d31092fa28d2601e3f2b1c3549ce4814545ad3b9f3cd33e54866c49a35bd7940faf2b515135a7c481ebe0249ceed7576c808c6e1a9c8d56b97d0ef039712c37a5b8ac3268d2290d0ed8935da3d532a296a4c8af3554a02014c6d9662d1a93357fa700ce68bcfa99f761f0a2cdecf75c8bbff379b95d5c5336396b491871a04e78a32543a9effef8ce94e94072d8141bcd4ed5e07bfaab3ea0b632265a366afa42a23e926d2ad2d47ccce03f94f43a3790a150d76424b4a3ddf6b64a53ce201a07622b4b5abdafaa8f5", + "credential_finalization": "671b0760e1d8c28e160f0557c9de463d9e12ce99609a8442549c774334cd48eea173f92cdbabff59d81850982a4e23a2", + "client_registration_state": "942294032be4511f9a266720b20fd9fccfee1a33788545bf64436447165d1758d0d397d8e397aa7569459a67077e42d702bdd371211802fea29b71013ff008693ad109adc9d6f09c76c18ebb557020bc0a346c654f8e1b2b05f49c9a663980f053", + "client_login_state": "942294032be4511f9a266720b20fd9fccfee1a33788545bf64436447165d1758d0d397d8e397aa7569459a67077e42d702bdd371211802fea29b71013ff008693ad109adc9d6f09c76c18ebb557020bc0a346c654f8e1b2b05f49c9a663980f053120d27e0b315dc261f7275be5a111aaedc40c55fa8886826a29b410000ea6b9d03015c7eadc7a0dcf6af31862d0408f599151e3efdd8f9c83223da930b85730b22a63390cb3e6d4d63323451609eea0f846cd0f9d4ae52445c8af1c1020159ad8d180d0051b3e6f0282d67f801ed92d0abfa5fff0606c53a110692cb40e0a9c0ccd4b62b73c918662e04648a4e1df0c2354dc77a9e03e33617b3b0d4972b27f95076f54a2a120d27e0b315dc261f7275be5a111aaedc40c55fa8886826a29b410000ea6b9d", + "server_login_state": "c8e7c5bee2bc5c4c5a7a68201e659fca74366a8f268bb902deeae9c56f4a27aa3f6073bbd627349621721dc0ecdf6f17cb04258c54b5faa36b63eaa41f3a6afc5378a9b5cada7b411c27961ebfdaeb1f914eda69714a9e6d16e4b5bbe23e446a386e064bf5b06bd8a0b1bd0491903ff356c84219bd415f665ca68fcf20cc604d1a11fcddbb1da59f5ace2a38c821cc40", + "password_file": "03012248384607cee25d56351542e52988420cfa30d9ce965df9b6698a62f4a0c49530a103382963ab0eb3947a2d5ba261415d9a874084e99cd8f85a455173c90220fa1b85d02de063fa8a03f3744216f06826cf26ccd24b849ad040e7d91dc8ce3ab32953b4542c5242b174014f4c34d74ab3001453f4d08d084e0b9b51aec45354544b11d3fc9183922b0385dbc3378cdae02e955041ebcf7564b0a5f1d615103cef9d416650ab062df61150b643f8469de0942bdd6fd0229a8569547dae22eed85a", + "export_key": "5e4f9d845f936401eea60ff2f2559fb86c612224f56f05d9424f20f6d4aefa7aef443e4a8730d2a79ffc06d2a983351f", + "session_key": "386e064bf5b06bd8a0b1bd0491903ff356c84219bd415f665ca68fcf20cc604d1a11fcddbb1da59f5ace2a38c821cc40" +} +"#; +#[cfg(feature = "ristretto255")] +pub static TEST_VECTOR_P521_RISTRETTO255: &str = r#" +{ + "client_s_pk": "0201bf7df8cc6f5237f951331b9cdcd3b2e5d705a20df8691077520724f6e2e112aa11231e5ab733354713049b9d28f6192f12afd0a407ba9aabef8dcf00ca6846f6a7", + "client_s_sk": "016537eef864c9908fb1e58b24fe4e446b962819221550586fb992f4afafac8f5d6816ff40e033d842c6d6686a158466a41b931994bb4c36ca8fa9ff4977484b2459", + "client_e_pk": "02007545c872585aa13702fc3dc044aa1722c6d6827c6a854f5e67be395def537d4b1282fefd2d720168b31501f5a773aac8840d6fd6cdf67f32ea4316378fcd28c33b", + "client_e_sk": "01c306d09bb78370acb48c3a982262235f122e1c22caba6311bd1504a9d723f4f8cc5d144249c1133a894213decd385ecb5a322e463c6c969da84da61bc73392ca49", + "server_s_pk": "03019d6e3e3ef1a2946a2418bad6229f0d8cf1890418c7b505439f135f73ba0e4940295ce816c274a882979400a48d7d3ef124f524ecc3baf466b874115ef6ead8e122", + "server_s_sk": "0116115e325c8a91d428ad2a72d11f0efcd8e55d522a47166e16202f4c130b5ae4dd8c3f721fa7e2522f556592c34f7afe3103886ad636e48a6ece991348d9b082d6", + "server_e_pk": "03018339eb19b72e06e9b71009ae14f637ba93c6ecb8719bafe163556b655af049d597778f87b8d7c20b418d0c82c276e9e9a58bd5f94a05209f0744e5e3f055b13792", + "server_e_sk": "018f8447b7ace3f4ae385e1b869516969b4ba3e98303181025dabf477fe5e0a356a517197d794d6b02417c4375eb5178f4bdf5d3e6b69d6df15098cdfbba2b7ce9e4", + "fake_sk": "001fd218c16048b12596b34531143c858963b59e7e3dceb9058b1d3f187611420ebe118c8e7fc26a3768801c08a7108cce55472fc574a4f1a49acea23f41a8455492", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "d474268d8a365e0c0b4542f9949d4f37bb9e7ccc2763bae6c77787d2e8d33904", + "oprf_seed": "b9707d573860cfac830c1293afb45ba7c350a6cdb0c8c3c6e0a7afbfda5b63d61bad365e51ffc0c6e5212caa97d5c5ead6591f76e934077183d89cfdd341d81d", + "masking_nonce": "d235afbaa435351d3578177eaa3c16d12af56d181a14ac07ecee1d31e07d610070009ee374a66090c97ff83d8392e563914161e3c80a5c60b5a98f7227ba3f50", + "envelope_nonce": "61a7e6ce957506e8b878cdea24c92c10988b2c568885d1c9efe037d78f388082", + "client_nonce": "034b0316a091f215c2e61735c328716230d82c8f5ee02c9ec3ad73138ee74308", + "server_nonce": "e8d04fc4602047fce29e158e91c65d4e0e5ab5933db2988124ad369f8243683d", + "context": "636f6e74657874", + "registration_request": "9487abff7c4947ad7829646f92cf2ea21ec3b66961e912e8f3f26a87b52fe733", + "registration_response": "8e0847a065cf7866925d0b60021e5090f7557f2014fb333ee44aa0ca4ef7922803019d6e3e3ef1a2946a2418bad6229f0d8cf1890418c7b505439f135f73ba0e4940295ce816c274a882979400a48d7d3ef124f524ecc3baf466b874115ef6ead8e122", + "registration_upload": "0201010ab80969d68259ee44a26b5e109076e17979c463b3698d68f9307fc616ab074be30345c41c2a26a09f9817fef02d3cf3711ede7025a509470df160106e7d5c1f546f68df4e0a1455ef777f4d59cd74074916894f69229f8c829477422d50dfd4e13fb07555d7e40e2e6c09c513fcdeb967d0fd816b5170ad6d065b491f20ae6e016537eef864c9908fb1e58b24fe4e446b962819221550586fb992f4afafac8f99ff93323b2260976c8528782c53b254c8b04ae5c294bfafcc2123efd42c58fe849206340d59e05eeaf5668024ee1483b787cde8ea92cea0ae1768cd70f8c67c", + "credential_request": "9487abff7c4947ad7829646f92cf2ea21ec3b66961e912e8f3f26a87b52fe733034b0316a091f215c2e61735c328716230d82c8f5ee02c9ec3ad73138ee7430802018789d3fe9d9f9fe0ec205e610b534b5af9902e1b2795ccbace31519b2a6c9664e411b259dc039d2f88591ce4f05eda7b5facf26a83bdfb2a3ad8ac071bf8df7fdb", + "credential_response": "8e0847a065cf7866925d0b60021e5090f7557f2014fb333ee44aa0ca4ef79228d235afbaa435351d3578177eaa3c16d12af56d181a14ac07ecee1d31e07d6100844a5473db92b0e544c6a6c84a0e59a37f4370fa527c0960beaa4647eb477362beb55568ec966149e4d0de54cbc65467a1089ce49366c2f4d39ffb47d4dadd823c72d1c60af7e3338ec7a936561eef563a97612c966d145f1cce22898b66d274be7f4a75a7540f3ef20c50c5ef51fc8c32aa32d29d982930d40388b829ebccbae506b14cf1b146d9a2fcb696ab384ebd0181631fa12373e58ff90c1cb195f8c2b63b1c17197d794d6b02417c4375eb5178f4bdf5d3e6b69d6df15098cdfbba2b7ce9e40201d9e7c9d98e807857b0341559c6ab3b263ccf0a65adf2dbf2ea282ac0e88367dc75eda52fb60ebc2e4f1f3689d93ceeba3de5366d3c3f3ffec609a3f4791c00d1ce61c06c8f55ad831cf423a1d0c87a6b3b4a4b21b63576514c317623ba4296f3c9e7c85f3ff82943f8c9de3c16739e20a946a0c1d9b7156e6b4bb397bbce37f0c6", + "credential_finalization": "7fcc190c006f5f814e46e0b15b2de205545438e400ac54583ad0127f6bea1230d3dac917712d389751c28c843a0386a91fc70c4aacded0099f8b4f8262a7e955", + "client_registration_state": "d474268d8a365e0c0b4542f9949d4f37bb9e7ccc2763bae6c77787d2e8d339049487abff7c4947ad7829646f92cf2ea21ec3b66961e912e8f3f26a87b52fe733", + "client_login_state": "d474268d8a365e0c0b4542f9949d4f37bb9e7ccc2763bae6c77787d2e8d339049487abff7c4947ad7829646f92cf2ea21ec3b66961e912e8f3f26a87b52fe733034b0316a091f215c2e61735c328716230d82c8f5ee02c9ec3ad73138ee7430802018789d3fe9d9f9fe0ec205e610b534b5af9902e1b2795ccbace31519b2a6c9664e411b259dc039d2f88591ce4f05eda7b5facf26a83bdfb2a3ad8ac071bf8df7fdb00fba83a34470a8641a433da5ff9cd0b2e7ebd6d6e298418b1d1bbe5ff734fd66553396efb82fe6d572183b4ef07b3fa1c54f961e01d1c747fb82c5cc45a4aeaa68d034b0316a091f215c2e61735c328716230d82c8f5ee02c9ec3ad73138ee74308", + "server_login_state": "9f5f96f3bf23442fb5bfd1947d7af2aa0b0193a4f3da110c4ca105e8c7a247c822247559f6eb3a570d8069b9ba17ffd2e2c943d23aadda7e59f063575e88160da46a64f820203dd98cc49e80016390458f6fa083bfd410f0624b672f116230657e11f2948b2f7e81a4e4b2657ae53eb9e410d7268c04ab247a1f0f74e1cd8152c4a5d01e1d2a3803845b56a459c7fa807f92638f5f80e6ccca343fc7ad100f53c1dd047a94196b05bacef1b7060941557fc21ba66eaf45f38f868f3f03da8d45", + "password_file": "0201010ab80969d68259ee44a26b5e109076e17979c463b3698d68f9307fc616ab074be30345c41c2a26a09f9817fef02d3cf3711ede7025a509470df160106e7d5c1f546f68df4e0a1455ef777f4d59cd74074916894f69229f8c829477422d50dfd4e13fb07555d7e40e2e6c09c513fcdeb967d0fd816b5170ad6d065b491f20ae6e016537eef864c9908fb1e58b24fe4e446b962819221550586fb992f4afafac8f99ff93323b2260976c8528782c53b254c8b04ae5c294bfafcc2123efd42c58fe849206340d59e05eeaf5668024ee1483b787cde8ea92cea0ae1768cd70f8c67c", + "export_key": "c3c80aa99c235edb3adaff9232f7678f53336a85beb78aa81eb189567ee497fa2ea9fe4cdc667aaecb14a8a3eec6bff9895e6e66a16ed1813d0921d8a4494aad", + "session_key": "c4a5d01e1d2a3803845b56a459c7fa807f92638f5f80e6ccca343fc7ad100f53c1dd047a94196b05bacef1b7060941557fc21ba66eaf45f38f868f3f03da8d45" +} +"#; +#[cfg(feature = "curve25519")] +pub static TEST_VECTOR_CURVE25519_P256: &str = r#" +{ + "client_s_pk": "48a98d630ddb4b899816c51febbe8a5fce3ac8d5fbd42ebd0ec6537406c52113", + "client_s_sk": "e8a4870c0fc40cf2b3fbbf87417df5974b0e5ea6023fc32dc325dfc256b7f64a", + "client_e_pk": "010fc15af69a814521ca8e9439913c117717deed9f0d16e17439239d918bd318", + "client_e_sk": "98f79ad74581639da7c076051d979a00ec0de10c5924d2ef38a22241c451b556", + "server_s_pk": "0692f783471abf1b87421fa7de84cfa2ce4f21c1e6803dc79c4e4ff319b8be0d", + "server_s_sk": "984057514d98a073ced335a117b6f118f1a3866fbb981497a6a315a6f4f1246d", + "server_e_pk": "b6673f24d9752dde2b128c3b7cf96e541b707e2c135b53fe061325ed0c762a1b", + "server_e_sk": "20a96825d610c3de217114de30c0cca272292f00d511afb4faf485d574122c62", + "fake_sk": "7853122fe6f37b55b23c5c9dcd182294ce95f5b8624b65172e317aaa2b3b5560", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "c3df196d44525f6ef8c3ac8dd79f33f5e50539546121731cc857391bc4ca6d06", + "oprf_seed": "54dd047aefb4045fa9d9cbf4ad88a33732aa172a927e8d40c774175def27abfc", + "masking_nonce": "b01dd3029e0d7689573c0e1f1f88bab2a7a2d0936a9fab3208b7c931d5ffaef1f8991d80b5fb727858c9f6d8372d7d3024ebb371041cdbaf2ecfa57312a98718", + "envelope_nonce": "6a24ccdde07e81092aee5b58fb89d0b782a53b543042cc21ed81feee85e2665b", + "client_nonce": "b298a907c4c1b4d5d0d95649713f7b70f726ad0ba1954ce21f820fbb65d8103a", + "server_nonce": "7d95abb029fb1cde3867677b3810ae27a6087c6bffbc4312dff51ee91adb84ed", + "context": "636f6e74657874", + "registration_request": "02b4e61e21cc13ed49e00bc0b7ddb44c8bae1eb782da405843cd3be6a540348825", + "registration_response": "0292b4b235d136db1dc62c337113c87677446dfe6be36fcf1abbe6e168117ae0eb0692f783471abf1b87421fa7de84cfa2ce4f21c1e6803dc79c4e4ff319b8be0d", + "registration_upload": "111a098b43097d3c8ae029e08af7f02f7660be29a4f8a77e6384e50a5b72fa4bcb6f86a338b5a0f6f3fa81669af61518ab0a3fd5fa15e259bfde12b8835dbfc5e8a4870c0fc40cf2b3fbbf87417df5974b0e5ea6023fc32dc325dfc256b7f64abeee62572b05f70ad822e4e156c9d059bdf622a5aca5998c1bc95e7259f5ec13", + "credential_request": "02b4e61e21cc13ed49e00bc0b7ddb44c8bae1eb782da405843cd3be6a540348825b298a907c4c1b4d5d0d95649713f7b70f726ad0ba1954ce21f820fbb65d8103a010fc15af69a814521ca8e9439913c117717deed9f0d16e17439239d918bd318", + "credential_response": "0292b4b235d136db1dc62c337113c87677446dfe6be36fcf1abbe6e168117ae0ebb01dd3029e0d7689573c0e1f1f88bab2a7a2d0936a9fab3208b7c931d5ffaef1c8374542111356ad0b071ade035219eb1b2cb3e5545ec02786418a903e93c6a04d18aebd4377e42a8d7965c2ad446ee3142fc5c383800a339b564c907940f4c504a1891430b2f8eb057fd47dc132d2bdfae8fba2b7445ceec3ec924696ddfa8720a96825d610c3de217114de30c0cca272292f00d511afb4faf485d574122c62b2282e0dbbc223d0f8ffc6726e23ddf9e797857358cf1b4e16899e1965c0aa169b844cfda3acf5bcb04e81b592aa65461745da11bd2b081cbc2f8580fb0e15f1", + "credential_finalization": "f6c20700da42d21691f47240950abb9a6cbd77c6e6be4676fa81f9fe5d08a33a", + "client_registration_state": "c3df196d44525f6ef8c3ac8dd79f33f5e50539546121731cc857391bc4ca6d0602b4e61e21cc13ed49e00bc0b7ddb44c8bae1eb782da405843cd3be6a540348825", + "client_login_state": "c3df196d44525f6ef8c3ac8dd79f33f5e50539546121731cc857391bc4ca6d0602b4e61e21cc13ed49e00bc0b7ddb44c8bae1eb782da405843cd3be6a540348825b298a907c4c1b4d5d0d95649713f7b70f726ad0ba1954ce21f820fbb65d8103a010fc15af69a814521ca8e9439913c117717deed9f0d16e17439239d918bd31898f79ad74581639da7c076051d979a00ec0de10c5924d2ef38a22241c451b556b298a907c4c1b4d5d0d95649713f7b70f726ad0ba1954ce21f820fbb65d8103a", + "server_login_state": "b4c339ba9416e8e8a92f44ec1ecf4a5869e9bd5980f51c94873191392a8bb7995a8b5e2d4454449345d5e9bd3fd4bb36a582251cb38d6be35ba2c562d9801c823b85b3ba99392690c6224781c5cc1c7464ace4fe2d041001555d856416d4f0ce", + "password_file": "111a098b43097d3c8ae029e08af7f02f7660be29a4f8a77e6384e50a5b72fa4bcb6f86a338b5a0f6f3fa81669af61518ab0a3fd5fa15e259bfde12b8835dbfc5e8a4870c0fc40cf2b3fbbf87417df5974b0e5ea6023fc32dc325dfc256b7f64abeee62572b05f70ad822e4e156c9d059bdf622a5aca5998c1bc95e7259f5ec13", + "export_key": "4aae649ce0fbfdad1c1fe783a2c5e5c3588e7f57f1622d31239abc10820b73e9", + "session_key": "3b85b3ba99392690c6224781c5cc1c7464ace4fe2d041001555d856416d4f0ce" +} +"#; +#[cfg(feature = "curve25519")] +pub static TEST_VECTOR_CURVE25519_P384: &str = r#" +{ + "client_s_pk": "64bb7b8107c705a5dd12fec72c73361b8a609b42848fd6459691e11bafe37a47", + "client_s_sk": "e0e38e5700f1266873fd6eb65969ab67ec5667981911566148e53cd38accfd51", + "client_e_pk": "cababcc7f7d42489d782557b91b1dca630d5c935d03953745a8027a49d29b630", + "client_e_sk": "48ef7e55bc3c3a0773a50fdf44f5255314d27e86ecaa80a35f23812151bafc6b", + "server_s_pk": "1f63fe7203d07e88d8e015161d95ca071abea49cc8f60e9bdd0e9ceb77afca66", + "server_s_sk": "80b69c1f1614fafc35e7776bd2fc4d7fa475f818ad1e9fae624379c923c9cc7b", + "server_e_pk": "5e9e8960ab0cbc89dbab82b88de806569be3b8ac6a585a05fe3070561a6bb32b", + "server_e_sk": "c0801c9703d602db78136e0b1c44574fe0f6770debd118ef957f8c7f7cf50040", + "fake_sk": "d0881d7214764ac988fd657b1b929e6d427eec74f8a41f28b37279b4ee249a49", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "fc7622028f08b219ea68b68e5833754034ec7f740f52d03ec60448e7fc521438717e430e0682216a87f417ca57ae97aa", + "oprf_seed": "dee600cf456bb0e428b7fab98369ce1c14ab5caec07c5826726f7d9848b7578a2395f349f51019d9a2ca3328c9bbc81b", + "masking_nonce": "b47dfeaedc3c791b7235ba35545cf88b03234795c3a80d65e96a2897c5bb2f3fda98b1578467d1dee766289098df8779dec04df108ef8f980b29a07fbe12eb15", + "envelope_nonce": "7759e723ae2df3377563d4ae1780d1137f11b35375ff6aacfaecec1b66764422", + "client_nonce": "e61c4d9300a361349748663414c6121ec81599592c3537bd4fa4e5f373298b15", + "server_nonce": "577cc7849aed5bbe1602891474b3b021dba4f25b34374048cc81da045004b1da", + "context": "636f6e74657874", + "registration_request": "02af630ceb91c1e77331fe0cda01c4a9aa07927ca620aafdfae80abbc9b4cab04f9817b8b6f0b53e6db39803a1371c100b", + "registration_response": "020ea2dafe86752937296ea5c2670f78a0e669b493bbb3082df15dce4ddd445112ec4f755793ffb685a23138904de80fb71f63fe7203d07e88d8e015161d95ca071abea49cc8f60e9bdd0e9ceb77afca66", + "registration_upload": "a172352918c9f2f54247c2624d315719382a794aa3d75dc0a2a321babcd5a149e583ccca975112a0ed4c10307d3be73420925d708a5a43e2bc809e5f7acb824094ca13dede1554ccb73245c7938ddcd0e0e38e5700f1266873fd6eb65969ab67ec5667981911566148e53cd38accfd513ae63692c3abe25d9f27ab90a64f86c9c09c9ecb3db17bfe624e4699418820c3a6607d13ed00703067d4993fa67b1ac5", + "credential_request": "02af630ceb91c1e77331fe0cda01c4a9aa07927ca620aafdfae80abbc9b4cab04f9817b8b6f0b53e6db39803a1371c100be61c4d9300a361349748663414c6121ec81599592c3537bd4fa4e5f373298b15cababcc7f7d42489d782557b91b1dca630d5c935d03953745a8027a49d29b630", + "credential_response": "020ea2dafe86752937296ea5c2670f78a0e669b493bbb3082df15dce4ddd445112ec4f755793ffb685a23138904de80fb7b47dfeaedc3c791b7235ba35545cf88b03234795c3a80d65e96a2897c5bb2f3f1efeacc9cc4f2192476cb4f776ef1d11722daa305e97876071826f8d4f0d659b3ac2ca9efa0e7eb74a29240cae4ed4a3f60efa566d9f0eb4d9a17611897ee978fc0274f408bce5332bf50adedf79b91b4574cab91130a0144679b65e45ca4ce1d78502beafea627d7f1c2bb61fa2590cc0801c9703d602db78136e0b1c44574fe0f6770debd118ef957f8c7f7cf50040c3ff33e6219617f3659efe8c4f89cbc6a43c7674b09bb38cfc808c58eaba845f9253cb45d4c06b0e9d977e84d257776e0e3f370f67dd30495a0f46a0e2a4b5538bb56cb89e6df0ff89880920b1043a04", + "credential_finalization": "c1edf20d94a1c0c486c20aa096506b4c344c9402b3f004660cfbd8a700da36766cdefdbab675b397d25c7102ae9e2ad7", + "client_registration_state": "fc7622028f08b219ea68b68e5833754034ec7f740f52d03ec60448e7fc521438717e430e0682216a87f417ca57ae97aa02af630ceb91c1e77331fe0cda01c4a9aa07927ca620aafdfae80abbc9b4cab04f9817b8b6f0b53e6db39803a1371c100b", + "client_login_state": "fc7622028f08b219ea68b68e5833754034ec7f740f52d03ec60448e7fc521438717e430e0682216a87f417ca57ae97aa02af630ceb91c1e77331fe0cda01c4a9aa07927ca620aafdfae80abbc9b4cab04f9817b8b6f0b53e6db39803a1371c100be61c4d9300a361349748663414c6121ec81599592c3537bd4fa4e5f373298b15cababcc7f7d42489d782557b91b1dca630d5c935d03953745a8027a49d29b63048ef7e55bc3c3a0773a50fdf44f5255314d27e86ecaa80a35f23812151bafc6be61c4d9300a361349748663414c6121ec81599592c3537bd4fa4e5f373298b15", + "server_login_state": "84032020bacec9769c2616844ae74e6b55c3326f8c3b472246aae356055671f26d7b79a75d6cbda73b06b62f01f5a83ec4685add58a45dc9c7cf34143a13754939b45d92315b4297ff54c774d490193ad78a91083453a71107d588b9aa7bca97b8313812d9763aaf43eeb0ac9601d208bde4ddf9879ac12e7cb83ce6fa28540deb51d110ce353af9adeb0b7453368e3f", + "password_file": "a172352918c9f2f54247c2624d315719382a794aa3d75dc0a2a321babcd5a149e583ccca975112a0ed4c10307d3be73420925d708a5a43e2bc809e5f7acb824094ca13dede1554ccb73245c7938ddcd0e0e38e5700f1266873fd6eb65969ab67ec5667981911566148e53cd38accfd513ae63692c3abe25d9f27ab90a64f86c9c09c9ecb3db17bfe624e4699418820c3a6607d13ed00703067d4993fa67b1ac5", + "export_key": "f9fda931ca81371ed40dcca8517e7c9d83ef28a60aa6eb93dc622c428b898d2e30876f2ee6f9ac999d2a6596e4b4a90f", + "session_key": "b8313812d9763aaf43eeb0ac9601d208bde4ddf9879ac12e7cb83ce6fa28540deb51d110ce353af9adeb0b7453368e3f" +} +"#; +#[cfg(feature = "curve25519")] +pub static TEST_VECTOR_CURVE25519_P521: &str = r#" +{ + "client_s_pk": "7e4942f8b4903fb87aaaa091ee5506a99297a4e1891cd1ba20d33e771354d52d", + "client_s_sk": "7852fe9d58a9bfcf13321ada487bb839124efc49e5fc3eb0a6d8fc799d3dfa7b", + "client_e_pk": "a19d6134b9bc29836ee5f2a39dd44fd8f4742616ad9ed50730dde6c734fbd53e", + "client_e_sk": "00f8b9acc526df8716794fb296bfd0c610b6d42d8af1a03507b02437870ae062", + "server_s_pk": "076f02d9c3fb78eafdcf7d61eaf9986fe49ff912cd3500d35ebb4feb1dd3524b", + "server_s_sk": "c0edf6891340e46c0ad2073b5e473ce058e7c3e1a735ea14fac808eda3bd8e40", + "server_e_pk": "95d0afbe94da72bb38cdbc24906ffd34c470db8fb5a9cbd2d6516ebbb384da00", + "server_e_sk": "00d7b58d63f74f7f8647a94f7176fd7f4109417b8fd2179ea96c0323fb9b456a", + "fake_sk": "78fb6c1875674028b18b57513901211d90179b1b8d0ae11a0e80c21dfcd6d54a", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "0087dbb2920dab6045339976dffd52f0236522ae595c2f6ed156224ede3649de71f9b7a742baf6c3350d13f05a412f04e3cdfe6d8961257478fe88f8ae059cd1d33b", + "oprf_seed": "64580e54adff2e88f6f43cf7ab4da06241a23648b5b994f558c8df81e99de0aea476695a1f48aada84761a21491eef9df867be96515f5bde6a5d5c22b8fc559b", + "masking_nonce": "fd7f424d24d10896954cb2ba8f67da66a4a1544ec84e87155065a5191dd7d4f5c0d90d6bb9eb9fee3b53f02c96b5c13e3070b6b1cf089ffba92bfc93d46833de", + "envelope_nonce": "66f4c941a2487a73cc67e331d85dcb712969abcdb98474e4c33a4fd4ef42da9c", + "client_nonce": "80e4be9298be7da527bcecb122fa9c12ca44fb231f0cf90a8fe2bbb1b3a2c081", + "server_nonce": "fd2635f2a1b649d904f1074f08e7a5c57d948efedeb71d5005c8150f29f34ce5", + "context": "636f6e74657874", + "registration_request": "0300a33e93e18c502c2f8ed6243b5654fa5580bb485cc53fa3a2138d56486c2490deeddca6bb509875f980015608f35185381e5e1c0bdb54909d4adb294b44ebe4724e", + "registration_response": "03002dbd5bad0f067cf20f0e8e4241f09dd0b04e8152d99bccf72594ce0b6567de6ef8459b83fd872c75d4bf372d42329825a361ffc5f569364e86349710c528a10561076f02d9c3fb78eafdcf7d61eaf9986fe49ff912cd3500d35ebb4feb1dd3524b", + "registration_upload": "eb42ef48b0a3b6ab3abf9d21097c96c0d52c02e4eaef0062015ef6f00d5bd604c98dbd8f7dc4a8f8a26755a52679aeec1f85a624f99fa874c2ae71c7497b1950988ff816b1153c61a9b84e597cef02c0b12ea73642efbd1f9e0ce1174ad2fbc77852fe9d58a9bfcf13321ada487bb839124efc49e5fc3eb0a6d8fc799d3dfa7bb261330abd9903f900573d5015bd8d56542196bd47f3a698c71013cb8bc727b38942cdcc76538202b988cee422f67c74ca5274972bd6762e29e559f4b68c7950", + "credential_request": "0300a33e93e18c502c2f8ed6243b5654fa5580bb485cc53fa3a2138d56486c2490deeddca6bb509875f980015608f35185381e5e1c0bdb54909d4adb294b44ebe4724e80e4be9298be7da527bcecb122fa9c12ca44fb231f0cf90a8fe2bbb1b3a2c081a19d6134b9bc29836ee5f2a39dd44fd8f4742616ad9ed50730dde6c734fbd53e", + "credential_response": "03002dbd5bad0f067cf20f0e8e4241f09dd0b04e8152d99bccf72594ce0b6567de6ef8459b83fd872c75d4bf372d42329825a361ffc5f569364e86349710c528a10561fd7f424d24d10896954cb2ba8f67da66a4a1544ec84e87155065a5191dd7d4f5b9d3f65c2b5a693521b190e85aeb69aaf41bc053233314721a7dcb5e95fa5da1744b74d96cfb5c436c3289c225052fb4caa4a7841e12716477e27022d892abf6950ce53344bdd0d62f95af2322d726b35afad099bdfd4f031a7ba64282dd834a5098f908e333d26096c874ce30f754d6d95cd04d3f8243e6f1fc5a82da64b7dd00d7b58d63f74f7f8647a94f7176fd7f4109417b8fd2179ea96c0323fb9b456a008a2e6f7eca9bcd12f8d5af88abc10189af2a9e2a7a9837d5834c93b8e2325c46f88439a5b777188938f518a97bfaa8c3ba2785dc89a6de3aeda97d553d53edc4ed076b6c00f221e8702f0ec40f9c78293de08e8bee89bc935fd3be71d54e92", + "credential_finalization": "d9305a202f99432a4eb5ce59e5038027b17cba2f1bc99ca9fe1788912aa022e76eb480bd809d8b479395e8c222c14d83b928d1c1160b51458349718b0bbeb63c", + "client_registration_state": "0087dbb2920dab6045339976dffd52f0236522ae595c2f6ed156224ede3649de71f9b7a742baf6c3350d13f05a412f04e3cdfe6d8961257478fe88f8ae059cd1d33b0300a33e93e18c502c2f8ed6243b5654fa5580bb485cc53fa3a2138d56486c2490deeddca6bb509875f980015608f35185381e5e1c0bdb54909d4adb294b44ebe4724e", + "client_login_state": "0087dbb2920dab6045339976dffd52f0236522ae595c2f6ed156224ede3649de71f9b7a742baf6c3350d13f05a412f04e3cdfe6d8961257478fe88f8ae059cd1d33b0300a33e93e18c502c2f8ed6243b5654fa5580bb485cc53fa3a2138d56486c2490deeddca6bb509875f980015608f35185381e5e1c0bdb54909d4adb294b44ebe4724e80e4be9298be7da527bcecb122fa9c12ca44fb231f0cf90a8fe2bbb1b3a2c081a19d6134b9bc29836ee5f2a39dd44fd8f4742616ad9ed50730dde6c734fbd53e00f8b9acc526df8716794fb296bfd0c610b6d42d8af1a03507b02437870ae06280e4be9298be7da527bcecb122fa9c12ca44fb231f0cf90a8fe2bbb1b3a2c081", + "server_login_state": "1d7bf3d48c64445d5b6bd43d552bb644099f7b68b76618ff282a45fd50f0917be24a2bc63b9447f182e50187fddb9d42bf6ac11233792d6f0b6ac93c7d5d36f847c40519c4784c172c7f687e89b9366634b25a0f577f1f964ab3a5779ce26994c6cb58639a2eacea0c0f9b83b528a27e6425e5f94ac83fd46cb5c3ccf02d8ebc06a8db3f863c187671b523b8931de44c45f6087b32a14fac01992b3ea973f82ee3c1aef37f9ddff319d7f5e00766f38c26152807e50b7ac78d954a767b7e008e", + "password_file": "eb42ef48b0a3b6ab3abf9d21097c96c0d52c02e4eaef0062015ef6f00d5bd604c98dbd8f7dc4a8f8a26755a52679aeec1f85a624f99fa874c2ae71c7497b1950988ff816b1153c61a9b84e597cef02c0b12ea73642efbd1f9e0ce1174ad2fbc77852fe9d58a9bfcf13321ada487bb839124efc49e5fc3eb0a6d8fc799d3dfa7bb261330abd9903f900573d5015bd8d56542196bd47f3a698c71013cb8bc727b38942cdcc76538202b988cee422f67c74ca5274972bd6762e29e559f4b68c7950", + "export_key": "162a04a37744e883b50b3ee6342a0e7d83fe29e5d7e992e1fc2d52ee2ecf609948196a372efa501abd143d63779ed5850192a6e024c359767f89fad7f366f134", + "session_key": "06a8db3f863c187671b523b8931de44c45f6087b32a14fac01992b3ea973f82ee3c1aef37f9ddff319d7f5e00766f38c26152807e50b7ac78d954a767b7e008e" +} +"#; +#[cfg(all(feature = "curve25519", feature = "ristretto255"))] +pub static TEST_VECTOR_CURVE25519_RISTRETTO255: &str = r#" +{ + "client_s_pk": "9b7d23975f181281a02b340ed74e2cc42409aa31587adddf8b29a0a15762751b", + "client_s_sk": "2879d39cbd051e2ab358bf67eadfe0383d0ece0318fcd831221660f41b48de43", + "client_e_pk": "41ce6155390ee4074f144670e820817c62ab9163686f6095bdcd63da4ad7ae35", + "client_e_sk": "988ada3600b2becafb13ffb08ed4a3016580617bb88be7139e1e1302be330453", + "server_s_pk": "2f2f87be335162236823a8edae9a5f1af38ef4a469c355622bcdbdb301d07f7a", + "server_s_sk": "2805af2d4e050fce46267c017485d00085ac408aed7378399a40e84e14d4a457", + "server_e_pk": "680cc567f502601b7f72bb1124fc9fedb2beaccab539d5ed4709f5ad26a62343", + "server_e_sk": "d88d93b58cad105fb0fdba10f8d653f65e19a57adfcdfb5353dc92624f64347a", + "fake_sk": "d8791e0450f5412dc1dc90c53924e6bffc882b71e1318a0ee66a79700456c959", + "credential_identifier": "637265644964656e746966696572", + "id_u": "696455", + "id_s": "696453", + "password": "70617373776f7264", + "blinding_factor": "7cf085e03de44dafd339929fab5637d63a6f1ec3367b41a53b1ee5100611af01", + "oprf_seed": "8a48b85ba5f81ca09b9d281484822fdff8d0681aa1683fbbbca13c03fdefe61cdaf4a418f2bbe191076a82ee2ceeaa8acfa89e85bf1359cede1d52c61a0c1c45", + "masking_nonce": "a9fb3390db5164a63953aed3fed89791780b2c712bb3dd9d16d635619962da90eaa0adf5270183246345ad2fba43e1aa390cd2ad642ac7e2e733d7b1a1572e47", + "envelope_nonce": "35abc0da46823c169f7fb1fc9c9d134e874f08a86f4df994bb2fbb3717305a8b", + "client_nonce": "4da0c457d9bccd7f446172bb6a8b8b233ae64d2f0f513d3f09ba06bcec4255b4", + "server_nonce": "6edc215308a411dfa9a0f9a935324eb9c38fb17031d50cea2c104aa6cbaa82bf", + "context": "636f6e74657874", + "registration_request": "9c695f33ef050350a7cf44036e5fb47a182028beabe3780c877cb2f3c3178a73", + "registration_response": "e8467b3a2f4b8ebbcd6740453d7f32925d9a44aa454f85b01d85a2822a3bb9672f2f87be335162236823a8edae9a5f1af38ef4a469c355622bcdbdb301d07f7a", + "registration_upload": "6f5d13cc49e0c481a3bc18699d2331458aa64e953ea2bb29dc69100e8963416ab2a3cf81acc4e726e2fe2ec49a96d9c904235ef1ca950c1666012ff5d0b08533635ff85e42129144a379ae2f2c8082ab188e4b589e2137bcf943a066b34ce40f2879d39cbd051e2ab358bf67eadfe0383d0ece0318fcd831221660f41b48de43af57dc0586bddeca89eaccd2246f229570248329518c86886e8bb1af075209bbb550a0016e8349cecef9e184473278ab02601e06c9aabfc53b4d074a7c6c4a30", + "credential_request": "9c695f33ef050350a7cf44036e5fb47a182028beabe3780c877cb2f3c3178a734da0c457d9bccd7f446172bb6a8b8b233ae64d2f0f513d3f09ba06bcec4255b441ce6155390ee4074f144670e820817c62ab9163686f6095bdcd63da4ad7ae35", + "credential_response": "e8467b3a2f4b8ebbcd6740453d7f32925d9a44aa454f85b01d85a2822a3bb967a9fb3390db5164a63953aed3fed89791780b2c712bb3dd9d16d635619962da90d357ade806a25f93847019cc62f55a29c6c2e71b7406424d7e20bf34ae4c7dc1ef5f91231f61e1118f3677d565a34ea3433606d29a0d119ef60418c291a3a3b4a9dd77427e487301320652bd130efa8bf7b659523b21138b342a8b43b74af9600c2018955f244abf48876e471ecebed37dde7d2009fa6776d9c353f5f23e362bd88d93b58cad105fb0fdba10f8d653f65e19a57adfcdfb5353dc92624f64347a94c69f51de883b5dd64aa8286b6f28777c3d4c786a283696f4d887febb82607e9db0dc6badb3116887032a787324af9544be812c04bc3619cd977891373fc42a2c799074ef381413abe7c658dc35b02c4a44955c682a01782d987129a4b0c8a8", + "credential_finalization": "d41c680cec2e82867e12e020976a4c212ca57889c3e57cf0ccefd4a8935e625cf6f46a57e3a68dcfe0870006b37b5964884d05ae18e122889acd54e89a1381d1", + "client_registration_state": "7cf085e03de44dafd339929fab5637d63a6f1ec3367b41a53b1ee5100611af019c695f33ef050350a7cf44036e5fb47a182028beabe3780c877cb2f3c3178a73", + "client_login_state": "7cf085e03de44dafd339929fab5637d63a6f1ec3367b41a53b1ee5100611af019c695f33ef050350a7cf44036e5fb47a182028beabe3780c877cb2f3c3178a734da0c457d9bccd7f446172bb6a8b8b233ae64d2f0f513d3f09ba06bcec4255b441ce6155390ee4074f144670e820817c62ab9163686f6095bdcd63da4ad7ae35988ada3600b2becafb13ffb08ed4a3016580617bb88be7139e1e1302be3304534da0c457d9bccd7f446172bb6a8b8b233ae64d2f0f513d3f09ba06bcec4255b4", + "server_login_state": "17dd4b683f4837538f91e87a33e68d1de7e2f9b8a4e192220bea4daa99bb40ee3fae320594d4a6422f0819d424345c4b6ee23fdb22ef6dde79f5a718e8a1c5e2fcc4487edd0cae1077ef2adec642fbe08424570a7993b09b24e615e0da39eddb719e0406bfb232a53303214d687609ee7d076fcacb5b542c5eec78086ee6340902da6d7e0dc3429f2fe78c556e7cbcefa5e729c85ce84b4d30b5db9177ce963ffe07dcce794f45abd7a02df4f3476a7101370590db0f43a79e42ea32711536c4", + "password_file": "6f5d13cc49e0c481a3bc18699d2331458aa64e953ea2bb29dc69100e8963416ab2a3cf81acc4e726e2fe2ec49a96d9c904235ef1ca950c1666012ff5d0b08533635ff85e42129144a379ae2f2c8082ab188e4b589e2137bcf943a066b34ce40f2879d39cbd051e2ab358bf67eadfe0383d0ece0318fcd831221660f41b48de43af57dc0586bddeca89eaccd2246f229570248329518c86886e8bb1af075209bbb550a0016e8349cecef9e184473278ab02601e06c9aabfc53b4d074a7c6c4a30", + "export_key": "b4584e38ac477620f89b86d200cb3e8aedb89e7228c2a7409000b39828a7a911cc03c5b89212f200f472d4d9cba197639d63d3f23fbcbbfd051477381b2afcfb", + "session_key": "02da6d7e0dc3429f2fe78c556e7cbcefa5e729c85ce84b4d30b5db9177ce963ffe07dcce794f45abd7a02df4f3476a7101370590db0f43a79e42ea32711536c4" +} +"#; diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 0a87984..45c96b6 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -7,6 +7,8 @@ // licenses. mod full_test; +#[rustfmt::skip] +mod full_test_vectors; pub mod mock_rng; mod opaque_vectors; mod parser;