Updating to version 08 (#271)

This commit is contained in:
Kevin Lewi
2022-04-17 16:23:31 -07:00
committed by GitHub
parent 384207acbb
commit 3fe6bbb80f
13 changed files with 609 additions and 543 deletions
+4 -2
View File
@@ -46,7 +46,9 @@ serde_ = { version = "1", package = "serde", default-features = false, features
"derive",
], optional = true }
subtle = { version = "2.3", default-features = false }
voprf = { version = "0.3", default-features = false, features = ["danger"] }
voprf = { version = "0.4.0-pre.2", default-features = false, features = [
"danger",
] }
zeroize = { version = "1.5", features = ["zeroize_derive"] }
[target.'cfg(target_arch = "wasm32")'.dependencies]
@@ -77,4 +79,4 @@ features = ["argon2", "std", "x25519-u64"]
targets = []
[patch.crates-io]
voprf = { git = "https://github.com/khonsulabs/voprf", branch = "v08" }
voprf = { git = "https://github.com/novifinancial/voprf", branch = "main" }
+1 -1
View File
@@ -40,7 +40,7 @@ Resources
---------
- [OPAQUE academic publication](https://eprint.iacr.org/2018/163.pdf), including formal definitions and a proof of security
- [draft-irtf-cfrg-opaque-07](https://www.ietf.org/archive/id/draft-irtf-cfrg-opaque-07.html), containing a detailed (byte-level) specification for OPAQUE
- [draft-irtf-cfrg-opaque-08](https://datatracker.ietf.org/doc/draft-irtf-cfrg-opaque/08/), containing a detailed (byte-level) specification for OPAQUE
- ["Let's talk about PAKE"](https://blog.cryptographyengineering.com/2018/10/19/lets-talk-about-pake/), an introductory blog post written by Matthew Green that covers OPAQUE
- [opaque-wasm](https://github.com/marucjmar/opaque-wasm), a WebAssembly package for this library
+4 -4
View File
@@ -345,8 +345,8 @@ where
.expand(&nonce.concat(STR_PRIVATE_KEY.into()), &mut keypair_seed)
.map_err(|_| InternalError::HkdfError)?;
let client_static_keypair = KeyPair::<CS::KeGroup>::from_private_key_slice(
&CS::KeGroup::serialize_sk(CS::KeGroup::hash_to_scalar::<OprfHash<CS>>(
&[keypair_seed.as_slice()],
&CS::KeGroup::serialize_sk(CS::KeGroup::derive_auth_keypair::<CS::OprfCs>(
keypair_seed.as_slice(),
&GenericArray::from(STR_OPAQUE_DERIVE_AUTH_KEY_PAIR),
)?),
)?;
@@ -371,8 +371,8 @@ where
.expand(&nonce.concat(STR_PRIVATE_KEY.into()), &mut keypair_seed)
.map_err(|_| InternalError::HkdfError)?;
let client_static_keypair = KeyPair::<CS::KeGroup>::from_private_key_slice(
&CS::KeGroup::serialize_sk(CS::KeGroup::hash_to_scalar::<OprfHash<CS>>(
&[keypair_seed.as_slice()],
&CS::KeGroup::serialize_sk(CS::KeGroup::derive_auth_keypair::<CS::OprfCs>(
keypair_seed.as_slice(),
&GenericArray::from(STR_OPAQUE_DERIVE_AUTH_KEY_PAIR),
)?),
)?;
+6 -1
View File
@@ -50,7 +50,8 @@ where
*SecretKey::<Self>::random(rng).to_nonzero_scalar()
}
// Implements the `HashToScalar()` function
// Implements the `HashToScalar()` function from
// <https://www.ietf.org/archive/id/draft-irtf-cfrg-voprf-09.html#section-4.1>
fn hash_to_scalar<H>(input: &[&[u8]], dst: &[u8]) -> Result<Self::Sk, InternalError>
where
H: Digest + BlockSizeUser,
@@ -71,6 +72,10 @@ where
ProjectivePoint::<Self>::generator() * sk
}
fn is_zero_scalar(scalar: Self::Sk) -> subtle::Choice {
scalar.is_zero()
}
fn diffie_hellman(pk: Self::Pk, sk: Self::Sk) -> GenericArray<u8, Self::PkLen> {
Self::serialize_pk(pk * sk)
}
+68 -2
View File
@@ -14,8 +14,9 @@ pub mod ristretto255;
pub mod x25519;
use digest::core_api::BlockSizeUser;
use digest::Digest;
use generic_array::typenum::{IsLess, IsLessOrEqual, U256};
use digest::{Digest, OutputSizeUser};
use generic_array::sequence::Concat;
use generic_array::typenum::{IsLess, IsLessOrEqual, U11, U256};
use generic_array::{ArrayLength, GenericArray};
use rand::{CryptoRng, RngCore};
use zeroize::Zeroize;
@@ -52,6 +53,47 @@ pub trait KeGroup {
H: Digest + BlockSizeUser,
H::OutputSize: IsLess<U256> + IsLessOrEqual<H::BlockSize>;
/// Corresponds to the DeriveAuthKeyPair() function defined in
/// <https://www.ietf.org/archive/id/draft-irtf-cfrg-opaque-08.html#section-6.4.2>
///
/// Note that we cannot call the voprf crate directly since we need to
/// ensure that the KeGroup is used for the hash_to_scalar operation (as
/// opposed to the OprfGroup).
fn derive_auth_keypair<CS: voprf::CipherSuite>(
seed: &[u8],
info: &[u8],
) -> Result<Self::Sk, InternalError>
where
<CS::Hash as OutputSizeUser>::OutputSize:
IsLess<U256> + IsLessOrEqual<<CS::Hash as BlockSizeUser>::BlockSize>,
{
let context_string = create_context_string::<CS>(voprf::Mode::Oprf);
let dst = GenericArray::from(STR_DERIVE_KEYPAIR).concat(context_string);
let info_len = i2osp_2(info.len())
.map_err(|_| InternalError::OprfError(voprf::Error::DeriveKeyPair))?;
for counter in 0_u8..=u8::MAX {
// deriveInput = seed || I2OSP(len(info), 2) || info
// skS = G.HashToScalar(deriveInput || I2OSP(counter, 1), DST = "DeriveKeyPair"
// || contextString)
let sk_s = Self::hash_to_scalar::<CS::Hash>(
&[seed, &info_len, info, &counter.to_be_bytes()],
&dst,
)
.map_err(|_| InternalError::OprfError(voprf::Error::DeriveKeyPair))?;
if !bool::from(Self::is_zero_scalar(sk_s)) {
return Ok(sk_s);
}
}
Err(InternalError::OprfError(voprf::Error::DeriveKeyPair))
}
/// Returns `true` if the scalar is zero.
fn is_zero_scalar(scalar: Self::Sk) -> subtle::Choice;
/// Return a public key from its secret key
fn public_key(sk: Self::Sk) -> Self::Pk;
@@ -64,3 +106,27 @@ pub trait KeGroup {
/// Return a public key from its fixed-length bytes representation
fn deserialize_sk(bytes: &[u8]) -> Result<Self::Sk, InternalError>;
}
// Helper functions used to compute DeriveAuthKeyPair() (taken from the voprf
// crate)
const STR_VOPRF: [u8; 8] = *b"VOPRF09-";
const STR_DERIVE_KEYPAIR: [u8; 13] = *b"DeriveKeyPair";
/// Generates the contextString parameter as defined in
/// <https://datatracker.ietf.org/doc/draft-irtf-cfrg-voprf/>
fn create_context_string<CS: voprf::CipherSuite>(mode: voprf::Mode) -> GenericArray<u8, U11>
where
<CS::Hash as OutputSizeUser>::OutputSize:
IsLess<U256> + IsLessOrEqual<<CS::Hash as BlockSizeUser>::BlockSize>,
{
GenericArray::from(STR_VOPRF)
.concat([mode.to_u8()].into())
.concat(CS::ID.to_be_bytes().into())
}
fn i2osp_2(input: usize) -> Result<[u8; 2], InternalError> {
u16::try_from(input)
.map(|input| input.to_be_bytes())
.map_err(|_| InternalError::OprfInternalError(voprf::InternalError::I2osp))
}
+17 -23
View File
@@ -12,11 +12,11 @@ use curve25519_dalek::ristretto::{CompressedRistretto, RistrettoPoint};
use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::Identity;
use digest::core_api::BlockSizeUser;
use digest::{Digest, OutputSizeUser};
use elliptic_curve::hash2curve::{ExpandMsg, ExpandMsgXmd, Expander};
use generic_array::typenum::{IsLess, IsLessOrEqual, U256, U32, U64};
use digest::Digest;
use generic_array::typenum::{IsLess, IsLessOrEqual, U256, U32};
use generic_array::GenericArray;
use rand::{CryptoRng, RngCore};
use subtle::ConstantTimeEq;
use voprf::Group;
use super::KeGroup;
@@ -73,24 +73,18 @@ impl KeGroup for Ristretto255 {
}
// Implements the `HashToScalar()` function from
// https://www.ietf.org/archive/id/draft-irtf-cfrg-voprf-08.html#section-4.1
// <https://www.ietf.org/archive/id/draft-irtf-cfrg-voprf-09.html#section-4.1>
fn hash_to_scalar<'a, H>(input: &[&[u8]], dst: &[u8]) -> Result<Self::Sk, InternalError>
where
H: Digest + BlockSizeUser,
H::OutputSize: IsLess<U256> + IsLessOrEqual<H::BlockSize>,
{
let mut uniform_bytes = GenericArray::<_, U64>::default();
ExpandMsgXmd::<H>::expand_message(input, dst, 64)
.map_err(|_| InternalError::HashToScalar)?
.fill_bytes(&mut uniform_bytes);
<voprf::Ristretto255 as Group>::hash_to_scalar::<H>(input, dst)
.map_err(InternalError::OprfInternalError)
}
let scalar = Scalar::from_bytes_mod_order_wide(&uniform_bytes.into());
if scalar == Scalar::zero() {
Err(InternalError::HashToScalar)
} else {
Ok(scalar)
}
fn is_zero_scalar(scalar: Self::Sk) -> subtle::Choice {
scalar.ct_eq(&Scalar::zero())
}
fn public_key(sk: Self::Sk) -> Self::Pk {
@@ -133,26 +127,26 @@ impl Group for Ristretto255 {
type ScalarLen = <voprf::Ristretto255 as Group>::ScalarLen;
fn hash_to_curve<CS: voprf::CipherSuite>(
fn hash_to_curve<H>(
input: &[&[u8]],
dst: &[u8],
) -> voprf::Result<Self::Elem, voprf::InternalError>
where
<CS::Hash as OutputSizeUser>::OutputSize:
IsLess<U256> + IsLessOrEqual<<CS::Hash as BlockSizeUser>::BlockSize>,
H: Digest + BlockSizeUser,
H::OutputSize: IsLess<U256> + IsLessOrEqual<H::BlockSize>,
{
<voprf::Ristretto255 as Group>::hash_to_curve::<CS>(input, dst)
<voprf::Ristretto255 as Group>::hash_to_curve::<H>(input, dst)
}
fn hash_to_scalar<CS: voprf::CipherSuite>(
fn hash_to_scalar<H>(
input: &[&[u8]],
dst: &[u8],
) -> voprf::Result<Self::Scalar, voprf::InternalError>
where
<CS::Hash as OutputSizeUser>::OutputSize:
IsLess<U256> + IsLessOrEqual<<CS::Hash as BlockSizeUser>::BlockSize>,
H: Digest + BlockSizeUser,
H::OutputSize: IsLess<U256> + IsLessOrEqual<H::BlockSize>,
{
<voprf::Ristretto255 as Group>::hash_to_scalar::<CS>(input, dst)
<voprf::Ristretto255 as Group>::hash_to_scalar::<H>(input, dst)
}
fn base_elem() -> Self::Elem {
+6 -1
View File
@@ -17,6 +17,7 @@ use elliptic_curve::hash2curve::{ExpandMsg, ExpandMsgXmd, Expander};
use generic_array::typenum::{IsLess, IsLessOrEqual, U256, U32, U64};
use generic_array::GenericArray;
use rand::{CryptoRng, RngCore};
use subtle::ConstantTimeEq;
use super::KeGroup;
use crate::errors::InternalError;
@@ -55,7 +56,7 @@ impl KeGroup for X25519 {
}
// Implements the `HashToScalar()` function from
// https://www.ietf.org/archive/id/draft-irtf-cfrg-voprf-08.html#section-4.1
// <https://www.ietf.org/archive/id/draft-irtf-cfrg-voprf-09.html#section-4.1>
fn hash_to_scalar<'a, H>(input: &[&[u8]], dst: &[u8]) -> Result<Self::Sk, InternalError>
where
H: Digest + BlockSizeUser,
@@ -75,6 +76,10 @@ impl KeGroup for X25519 {
}
}
fn is_zero_scalar(scalar: Self::Sk) -> subtle::Choice {
scalar.ct_eq(&Scalar::zero())
}
fn public_key(sk: Self::Sk) -> Self::Pk {
(&ED25519_BASEPOINT_TABLE * &sk).to_montgomery()
}
+1 -1
View File
@@ -8,7 +8,7 @@
//! An implementation of the OPAQUE asymmetric password authentication key
//! exchange protocol
//!
//! Note: This implementation is in sync with [draft-irtf-cfrg-opaque-07](https://www.ietf.org/archive/id/draft-irtf-cfrg-opaque-07.html),
//! Note: This implementation is in sync with [draft-irtf-cfrg-opaque-08](https://datatracker.ietf.org/doc/draft-irtf-cfrg-opaque/08/),
//! but this specification is subject to change, until the final version
//! published by the IETF.
//!
+21 -23
View File
@@ -93,7 +93,7 @@ pub struct ServerSetup<
#[derive_where(Clone, ZeroizeOnDrop)]
#[derive_where(
Debug, Eq, Hash, PartialEq;
voprf::NonVerifiableClient<CS::OprfCs>,
voprf::OprfClient<CS::OprfCs>,
voprf::BlindedElement<CS::OprfCs>,
)]
pub struct ClientRegistration<CS: CipherSuite>
@@ -105,7 +105,7 @@ where
<<OprfHash<CS> as CoreProxy>::Core as BlockSizeUser>::BlockSize: IsLess<U256>,
Le<<<OprfHash<CS> as CoreProxy>::Core as BlockSizeUser>::BlockSize, U256>: NonZero,
{
pub(crate) oprf_client: voprf::NonVerifiableClient<CS::OprfCs>,
pub(crate) oprf_client: voprf::OprfClient<CS::OprfCs>,
pub(crate) blinded_element: voprf::BlindedElement<CS::OprfCs>,
}
@@ -146,7 +146,7 @@ where
#[derive_where(Clone, ZeroizeOnDrop)]
#[derive_where(
Debug, Eq, Hash, PartialEq;
voprf::NonVerifiableClient<CS::OprfCs>,
voprf::OprfClient<CS::OprfCs>,
<CS::KeyExchange as KeyExchange<OprfHash<CS>, CS::KeGroup>>::KE1State,
CredentialRequest<CS>,
)]
@@ -159,7 +159,7 @@ where
<<OprfHash<CS> as CoreProxy>::Core as BlockSizeUser>::BlockSize: IsLess<U256>,
Le<<<OprfHash<CS> as CoreProxy>::Core as BlockSizeUser>::BlockSize, U256>: NonZero,
{
pub(crate) oprf_client: voprf::NonVerifiableClient<CS::OprfCs>,
pub(crate) oprf_client: voprf::OprfClient<CS::OprfCs>,
pub(crate) ke1_state: <CS::KeyExchange as KeyExchange<OprfHash<CS>, CS::KeGroup>>::KE1State,
pub(crate) credential_request: CredentialRequest<CS>,
}
@@ -317,7 +317,7 @@ where
check_slice_size(input, client_len + element_len, "client_registration")?;
Ok(Self {
oprf_client: voprf::NonVerifiableClient::deserialize(&checked_slice[..client_len])?,
oprf_client: voprf::OprfClient::deserialize(&checked_slice[..client_len])?,
blinded_element: voprf::BlindedElement::deserialize(&checked_slice[client_len..])?,
})
}
@@ -452,8 +452,8 @@ where
let oprf_key =
oprf_key_from_seed::<CS::OprfCs>(&server_setup.oprf_seed, credential_identifier)?;
let server = voprf::NonVerifiableServer::new_with_key(&oprf_key)?;
let evaluation_element = server.evaluate(&message.blinded_element, None)?;
let server = voprf::OprfServer::new_with_key(&oprf_key)?;
let evaluation_element = server.evaluate(&message.blinded_element);
Ok(ServerRegistrationStartResult {
message: RegistrationResponse {
@@ -526,7 +526,7 @@ where
&checked_slice[client_len + request_len..],
)?;
Ok(Self {
oprf_client: voprf::NonVerifiableClient::deserialize(&checked_slice[..client_len])?,
oprf_client: voprf::OprfClient::deserialize(&checked_slice[..client_len])?,
credential_request: CredentialRequest::deserialize(
&checked_slice[client_len..client_len + request_len],
)?,
@@ -758,11 +758,9 @@ where
let oprf_key =
oprf_key_from_seed::<CS::OprfCs>(&server_setup.oprf_seed, credential_identifier)
.map_err(ProtocolError::into_custom)?;
let server = voprf::NonVerifiableServer::new_with_key(&oprf_key)
.map_err(|e| ProtocolError::into_custom(e.into()))?;
let evaluation_element = server
.evaluate(&credential_request.blinded_element, None)
let server = voprf::OprfServer::new_with_key(&oprf_key)
.map_err(|e| ProtocolError::into_custom(e.into()))?;
let evaluation_element = server.evaluate(&credential_request.blinded_element);
let beta = OprfGroup::<CS>::serialize_elem(evaluation_element.value());
let credential_response_component =
@@ -1094,7 +1092,7 @@ where
#[allow(clippy::type_complexity)]
fn get_password_derived_key<CS: CipherSuite>(
input: &[u8],
oprf_client: voprf::NonVerifiableClient<CS::OprfCs>,
oprf_client: voprf::OprfClient<CS::OprfCs>,
evaluation_element: voprf::EvaluationElement<CS::OprfCs>,
ksf: Option<&CS::Ksf>,
) -> Result<(Output<OprfHash<CS>>, Hkdf<OprfHash<CS>>), ProtocolError>
@@ -1106,7 +1104,7 @@ where
<<OprfHash<CS> as CoreProxy>::Core as BlockSizeUser>::BlockSize: IsLess<U256>,
Le<<<OprfHash<CS> as CoreProxy>::Core as BlockSizeUser>::BlockSize, U256>: NonZero,
{
let oprf_output = oprf_client.finalize(input, &evaluation_element, None)?;
let oprf_output = oprf_client.finalize(input, &evaluation_element)?;
let hardened_output = if let Some(ksf) = ksf {
ksf.hash(oprf_output.clone())
@@ -1141,12 +1139,12 @@ where
.ok()
})
.ok_or(InternalError::HkdfError)?;
Ok(CS::Group::serialize_scalar(
CS::Group::hash_to_scalar::<CS>(
&[ikm.as_slice()],
&GenericArray::from(*STR_OPAQUE_DERIVE_KEY_PAIR),
)?,
))
Ok(CS::Group::serialize_scalar(voprf::derive_key::<CS>(
ikm.as_slice(),
&GenericArray::from(*STR_OPAQUE_DERIVE_KEY_PAIR),
voprf::Mode::Oprf,
)?))
}
#[cfg_attr(
@@ -1310,7 +1308,7 @@ pub(crate) fn bytestrings_from_identifiers<KG: KeGroup>(
fn blind<CS: CipherSuite, R: RngCore + CryptoRng>(
rng: &mut R,
password: &[u8],
) -> Result<voprf::NonVerifiableClientBlindResult<CS::OprfCs>, voprf::Error>
) -> Result<voprf::OprfClientBlindResult<CS::OprfCs>, voprf::Error>
where
<OprfHash<CS> as OutputSizeUser>::OutputSize:
IsLess<U256> + IsLessOrEqual<<OprfHash<CS> as BlockSizeUser>::BlockSize>,
@@ -1320,7 +1318,7 @@ where
Le<<<OprfHash<CS> as CoreProxy>::Core as BlockSizeUser>::BlockSize, U256>: NonZero,
{
#[cfg(not(test))]
let result = voprf::NonVerifiableClient::blind(password, rng)?;
let result = voprf::OprfClient::blind(password, rng)?;
#[cfg(test)]
let result = {
@@ -1331,7 +1329,7 @@ where
break scalar;
}
};
voprf::NonVerifiableClient::deterministic_blind_unchecked(password, blind)?
voprf::OprfClient::deterministic_blind_unchecked(password, blind)?
};
Ok(result)
+2 -2
View File
@@ -85,7 +85,7 @@ fn client_registration_roundtrip() -> Result<(), ProtocolError> {
let pw = b"hunter2";
let mut rng = OsRng;
let blind_result = &voprf::NonVerifiableClient::<CS::OprfCs>::blind(pw, &mut rng)?;
let blind_result = &voprf::OprfClient::<CS::OprfCs>::blind(pw, &mut rng)?;
let bytes: Vec<u8> = blind_result
.state
@@ -523,7 +523,7 @@ fn client_login_roundtrip() -> Result<(), ProtocolError> {
]
.concat();
let blind_result = voprf::NonVerifiableClient::<CS::OprfCs>::blind(pw, &mut rng)?;
let blind_result = voprf::OprfClient::<CS::OprfCs>::blind(pw, &mut rng)?;
let credential_request = CredentialRequest::<CS> {
blinded_element: blind_result.message,
+108 -108
View File
@@ -125,151 +125,151 @@ static STR_CREDENTIAL_IDENTIFIER: &str = "credential_identifier";
#[cfg(feature = "ristretto255")]
static TEST_VECTOR_RISTRETTO255: &str = r#"
{
"client_s_pk": "8cc7c9eb1d0f5803fd02f13ffc91175bd2a4ea0395913c7d6414431a05dda94c",
"client_s_sk": "b30044efeb2c90127e35389c2d025dccbe90c03c102ea38388e362320c6e570f",
"client_e_pk": "5ac74ef87ac50c960c56fdcd46daf12ef7d88739c8654937e7a4d8996d60ed22",
"client_e_sk": "1d78d5ffe9b3ad5bb467da13232805cbbdff0473ed47da7738f7a05d2f35c603",
"server_s_pk": "34dacc7158463c3d29aa780baab28624b1c71df0468e134bde085cdc8f4e941b",
"server_s_sk": "966ee3f6f3ece48d37ca5394f113dad2fc3afe2923fc20f769a185de1bea9905",
"server_e_pk": "387e1dff8d671ac91665bb0268478ec518d2db28d0cf71041696e65c14c04562",
"server_e_sk": "5f7bed95ef1efd306e3144f30381593a85adb98e632552b0e87644d46cbcc002",
"fake_sk": "a85ac8f4eee6bb688c3ae7d7b6d995da2038645ba34ceadf8467e56d175bc008",
"client_s_pk": "462bcbb0f1f303eaa919ab66e5c19a94052b84e2cbc40645cde46df2a68b0c7a",
"client_s_sk": "d2b04e26c274b67ec381dad0a4ddaa72801cc41ff53e94262a8bc817c9491304",
"client_e_pk": "febdfdb6a812769e8c63f013ddda42e0ca0d5a388136241d9bd8059bc7933051",
"client_e_sk": "fb61820e78aa5512f0da07d231c6644a8111fd4c72561b7329e72e6e5c848005",
"server_s_pk": "58f645872da0f3f487584dea46be982c1557b9d392422c4795e48ce05d5b374d",
"server_s_sk": "7df714f8df702dad7d38a714e58fb18820d2da1c41e3252e961a70566fac2f0e",
"server_e_pk": "089dd523fa969d424e7d5e2af4f9c712cb02f47173a8381db4c7fc69ad10b362",
"server_e_sk": "b3a1709e4c291d9d727822e148346aa192d29575c33362d33d457bdc0e13cb06",
"fake_sk": "844666460d91813f25f07ee484ff9ec7cd9eacbd55f462a93b0da868f39ea70d",
"credential_identifier": "637265644964656e746966696572",
"id_u": "696455",
"id_s": "696453",
"password": "70617373776f7264",
"blinding_factor": "ae7bd2be7bcbeafcf4c26f92e4ab37b174c93126cdb0b6321a511c92f3cecb0f",
"oprf_seed": "4f31cd5f5ddbc39da5d354b0d5bdae1c0f57aa549aaca4eba8138156c387473ed050329b97631d9fca895c60afb1855e30f2426043cd2dd242707bf664082c87",
"masking_nonce": "97a321a4a2946fcacbae9d80d78ac1c06d9f7e39e426b367be57398957938bbc5a18264ee75b6976b2abc8fccc702010196cb1c90fbfcab60363acc3d503c968",
"envelope_nonce": "4745c52d41faa7c697d3fb3374c087966b8e44da7519e0f7c561a0ee0f3a6180",
"client_nonce": "781fbdffc567af01253fb0d53839842a7255fd36371dde1b05979691c0bca067",
"server_nonce": "1f5fc6d4f55c092245bdb150c2db4189ad8fca9c8df5218a0876cb11c8114a39",
"blinding_factor": "2189fa0524efc945e096e591acaf741c6af03ea514e3c9aea44ad7a56847be03",
"oprf_seed": "5e162cd641cfb826427569ec676b43bf038e1274b0d9bdd4cb76ac56f8472fd538e7ac4e34702325a3daaf3609f3a7246f6673bc5caaeca02c067aa8ede3f8dd",
"masking_nonce": "b98330c71a2d82674dea6e0aa7cb18087de3883295fcd0ff6c45cd80a4681eba8f5562ac122850ec933455c3c6c25f42138bb425d591cb38bd765f53b7a01b96",
"envelope_nonce": "423b6c1c4666ed8f8640d59bc165783709b36c9b4ae1b42a547ae351b5d57d05",
"client_nonce": "1189d05e799fa6c56d9d72a7a8c93b891ed35736010f71eb64cf1220ce27c338",
"server_nonce": "a218c4e22ea27ba74f8cf3f09fd428d6587897d76f6f5b4a63d3e0cb6e299ae3",
"context": "636f6e74657874",
"registration_request": "083b7dfada0e53c78f9d32ddcb88ec50144cf361fd202d73581eeeb944113715",
"registration_response": "760fdf28216493a9a9b9f268c33d7a22f059f16ab6f3b9559f3165874453414834dacc7158463c3d29aa780baab28624b1c71df0468e134bde085cdc8f4e941b",
"registration_upload": "5c60129a5003992493977306a309188b373fb806a9f0668279ca21806081cc7d21a180fba338aa1477038a9b41623dc5feb69445f9f48e342a63eb7a45b6522fa4f1555d1729fcb15fb2d1e761c7583c0b5ce704c032e3804aa3c2ca16e6bd26b30044efeb2c90127e35389c2d025dccbe90c03c102ea38388e362320c6e570f4992b64df766073034f49e77eddf22f6a6418408cc29a11357871e9c41663ee71958443f36fa81c3ff2d487dcfcdd28695e2f0dfbb84201e968a8f9111a68a28",
"credential_request": "083b7dfada0e53c78f9d32ddcb88ec50144cf361fd202d73581eeeb944113715781fbdffc567af01253fb0d53839842a7255fd36371dde1b05979691c0bca0675ac74ef87ac50c960c56fdcd46daf12ef7d88739c8654937e7a4d8996d60ed22",
"credential_response": "760fdf28216493a9a9b9f268c33d7a22f059f16ab6f3b9559f3165874453414897a321a4a2946fcacbae9d80d78ac1c06d9f7e39e426b367be57398957938bbcb095ee31bf57672fab06716b53c69cbfefc2907064a8fbf284cd02adda3add3c43706e059634ea372ecb2718103ca2fc83a7b060194a804dc2b4339ee5d5d228d38d21e16c61424bbc3ff8fd599e5f1e928935983ee3b0226a1beeb182777a0c0053859554b5bde0f9f52f5a8c82831e866891cfa1907f2906b55d0432f0c30b5f7bed95ef1efd306e3144f30381593a85adb98e632552b0e87644d46cbcc002d023f69a86ba2b2ec3d6e75350f2ac1f780a899e6eb658a41dd773c440dc2b4a4f4281f8a049d3ed483db43274d30e89220e693e4027259ab1b037ff543935d973772ca255fc128d114c338100c49a86906c8deed99fd49a9c481beeb689154d",
"credential_finalization": "90861a832ee7aa11c865d37c011443fb0bc66852484d41f7ee712ceb4a61a580b368c08b7a3d1b133f63a54db5368b47e28e59740697336d9855da3b72d26e83",
"client_registration_state": "ae7bd2be7bcbeafcf4c26f92e4ab37b174c93126cdb0b6321a511c92f3cecb0f083b7dfada0e53c78f9d32ddcb88ec50144cf361fd202d73581eeeb944113715",
"client_login_state": "ae7bd2be7bcbeafcf4c26f92e4ab37b174c93126cdb0b6321a511c92f3cecb0f083b7dfada0e53c78f9d32ddcb88ec50144cf361fd202d73581eeeb944113715781fbdffc567af01253fb0d53839842a7255fd36371dde1b05979691c0bca0675ac74ef87ac50c960c56fdcd46daf12ef7d88739c8654937e7a4d8996d60ed221d78d5ffe9b3ad5bb467da13232805cbbdff0473ed47da7738f7a05d2f35c603781fbdffc567af01253fb0d53839842a7255fd36371dde1b05979691c0bca067",
"server_login_state": "877f235cde56f884c971e137dbfec8dc6fbb00656cbf6e20d032f6fba598ed0ad6ff7fc2d52b76e57eb72037c6976491ee045472b35204513b909cafc3ac5e3bac4fab5f4dce3c8de85481d899ee644fd8af2c30b8756746ef97bdfb82d9a081bad64d83fa726404f7af042b49ba79049e6ed825e40180ac08407ff18d44f11d828933d78f17e6360881ec80e8696507892dd1072958b8e1566ea2a68b0ed227593a19f2c5266d5c456338d7142126543bfb38bfe7209e84778eda944774832b",
"password_file": "5c60129a5003992493977306a309188b373fb806a9f0668279ca21806081cc7d21a180fba338aa1477038a9b41623dc5feb69445f9f48e342a63eb7a45b6522fa4f1555d1729fcb15fb2d1e761c7583c0b5ce704c032e3804aa3c2ca16e6bd26b30044efeb2c90127e35389c2d025dccbe90c03c102ea38388e362320c6e570f4992b64df766073034f49e77eddf22f6a6418408cc29a11357871e9c41663ee71958443f36fa81c3ff2d487dcfcdd28695e2f0dfbb84201e968a8f9111a68a28",
"export_key": "c37b2ce98f5822c578236405dba3b17d42e3ae452ec2bb667442bbfc39774827bfeff20ec0c98c4b2d131880425455f0e12cd09b5112dc6e8609eb3be07bb396",
"session_key": "828933d78f17e6360881ec80e8696507892dd1072958b8e1566ea2a68b0ed227593a19f2c5266d5c456338d7142126543bfb38bfe7209e84778eda944774832b"
"registration_request": "ec3f63d15a8959e86f5664d4c409b71a4993e1d49fcd6ee51ad9f983220e3237",
"registration_response": "3ee77a8a4d491f9fd746ddc536f5e5bbc2898067263a3b34e1e591b783462c4a58f645872da0f3f487584dea46be982c1557b9d392422c4795e48ce05d5b374d",
"registration_upload": "40c78fe33dd3a50c99bcbaf260c790c63b192f8fdab6777ade1c4b16d8c5381840c62980f9a3931f4d0c68ddece8b87d3bf4d4a56ccb4a0b88af37cbd457dd5ab2b8c633b898e7a8e18b024090894615363e039055fe735da12ba9cc68d4f982d2b04e26c274b67ec381dad0a4ddaa72801cc41ff53e94262a8bc817c9491304d9eafd0bacdc61e6da750116fd9388a65e2a574934f65d2e957d8d05e1d4d4ee9c23a87d8d60e93936da683363469b5c0bf234891204cd93f84ec8531fc32acc",
"credential_request": "ec3f63d15a8959e86f5664d4c409b71a4993e1d49fcd6ee51ad9f983220e32371189d05e799fa6c56d9d72a7a8c93b891ed35736010f71eb64cf1220ce27c338febdfdb6a812769e8c63f013ddda42e0ca0d5a388136241d9bd8059bc7933051",
"credential_response": "3ee77a8a4d491f9fd746ddc536f5e5bbc2898067263a3b34e1e591b783462c4ab98330c71a2d82674dea6e0aa7cb18087de3883295fcd0ff6c45cd80a4681eba6942d2635f21656760a29dd64fc0d7eb2202eacd698993203e2b93ed69a904ea555e62c861ed0b05c61f5f9dbc80cf4a68f7788e5ab423fd707a25eb985e0f206a66d41514f40dd3afed0c0f5d33cc86072df0a6c0bb95a1f7acb2a195451795133fef323da255177d94dd9f338f4727e2ec464c895edd1891f4ca28e005fa86b3a1709e4c291d9d727822e148346aa192d29575c33362d33d457bdc0e13cb06da2bd185020cd964cf518873336f2f00a0440a975e8ff1e29912770d415d0c1747e79bae72037aabe86af57181b4f9d3964061da83e60b6a216becb025cbd805c52ecf6ed69b44a7309bd643ceb37a926459b8b2dd9dded7fc2daf58a72b789e",
"credential_finalization": "8240d4d8bde9bd911581b7c3d48d760368add71d789f7917b7f3b97f12ba88fb1dd8a99e301ef5716e1baf76b0f374c41c4bce2b9a015d49fa0c6e305196e3bd",
"client_registration_state": "2189fa0524efc945e096e591acaf741c6af03ea514e3c9aea44ad7a56847be03ec3f63d15a8959e86f5664d4c409b71a4993e1d49fcd6ee51ad9f983220e3237",
"client_login_state": "2189fa0524efc945e096e591acaf741c6af03ea514e3c9aea44ad7a56847be03ec3f63d15a8959e86f5664d4c409b71a4993e1d49fcd6ee51ad9f983220e32371189d05e799fa6c56d9d72a7a8c93b891ed35736010f71eb64cf1220ce27c338febdfdb6a812769e8c63f013ddda42e0ca0d5a388136241d9bd8059bc7933051fb61820e78aa5512f0da07d231c6644a8111fd4c72561b7329e72e6e5c8480051189d05e799fa6c56d9d72a7a8c93b891ed35736010f71eb64cf1220ce27c338",
"server_login_state": "4d72816b73b51d687b129808e5eb2bba359da1ed16c4422f66ea240fa64019a494c119e432a05e6c73f6e5b09e460cf46d321547003c1f1d1d31f58b77b366b4a3f58ad498a297b3d1e00d90e9c0dad467219542bd1e9c79418669ea759b981968b475818fdfa415faea89e01be55f7a7dc63d8bc2a0f146da08410c8f2e2ae6866d64ba0fcd85ab9377f367428a16813f43e042d7da9f499847a6cdc5718f5e39cb0cd74bc6ed73e709f21d567e9506acc1dbec8881cc7bf4995306df3ac7d9",
"password_file": "40c78fe33dd3a50c99bcbaf260c790c63b192f8fdab6777ade1c4b16d8c5381840c62980f9a3931f4d0c68ddece8b87d3bf4d4a56ccb4a0b88af37cbd457dd5ab2b8c633b898e7a8e18b024090894615363e039055fe735da12ba9cc68d4f982d2b04e26c274b67ec381dad0a4ddaa72801cc41ff53e94262a8bc817c9491304d9eafd0bacdc61e6da750116fd9388a65e2a574934f65d2e957d8d05e1d4d4ee9c23a87d8d60e93936da683363469b5c0bf234891204cd93f84ec8531fc32acc",
"export_key": "4072224aa93c097b12d3bfe4df74ddb337d2424c8e63881a0feaadb1dc1e856e32420893c1d136c7abc6faf55d464bb1669dad232c038c145c6edeb1b723a557",
"session_key": "866d64ba0fcd85ab9377f367428a16813f43e042d7da9f499847a6cdc5718f5e39cb0cd74bc6ed73e709f21d567e9506acc1dbec8881cc7bf4995306df3ac7d9"
}
"#;
static TEST_VECTOR_P256: &str = r#"
{
"client_s_pk": "02ec5dd688a3aa66022860d4bfed2dcb01a5da07a0b4ff0c84d9f8749bd478c293",
"client_s_sk": "4982f91037e2e498ea3b7fe8f72c35d00a9b952c8ce4fb0563a49071d599390c",
"client_e_pk": "027f8c859ded40011655cd5314f5dc3b42ed95c11da3ad181a70d911fadb818415",
"client_e_sk": "efeb2242f4068b651e29917611a295033e8369ee14c1091678f0327383997289",
"server_s_pk": "0231a120b62158db8b182afba15361f32870c17d09675fb2b751fab99a55b7f29b",
"server_s_sk": "04a0d9eae979c3e0a7be44d723fdabafd4a2c2bd0d2bef4d1134a61358e1d3d6",
"server_e_pk": "022ef1078479c8d69e08d94d682aca2c63a293193ef8d45d0508cc13d64d5dc3b4",
"server_e_sk": "304ada96918e021ec1595981ac41711853bd7a271bf3aa6c01e57ebdd18b50ed",
"fake_sk": "668017c4eb69093ca24e877fb258df8de386a136af9a08fb5c3c52c52267a03c",
"client_s_pk": "023260fcb7915e53cdd3a1164c3fbb02105669f6652fc7f04afbee9c41fc70e6ce",
"client_s_sk": "dfa3fccf6ef36714a1dcf5085c38a3f007842579bc3bede124e0dfd994f173c0",
"client_e_pk": "02af274d7a94c8e33e8c374e39991ab7fe078c87cdaa1a0334ad33b8308cae1298",
"client_e_sk": "62b5b89b4daac1e2db00d12a993c18af4f69083526c51f4428ec9072264e5184",
"server_s_pk": "03baaee6e122a55c05860cae3795e6662a879e8308983fe55905dbe363883a0e4a",
"server_s_sk": "df3a9c42ef25ac2319c5fa32e4ed124ef8f829c890ac1eb4abb3c2cd3b0fa071",
"server_e_pk": "022361f1cce383b29175f58673b2f9f941234b63709b621bcc7097c0b62e20f758",
"server_e_sk": "3f822df5e690807c585bc42e1ca604770c2f9bbd017d366561d8de90e06628dd",
"fake_sk": "f7c75629f0fc954d321b186c2a8a1e8230735ec90a86c96435d740533f9de641",
"credential_identifier": "637265644964656e746966696572",
"id_u": "696455",
"id_s": "696453",
"password": "70617373776f7264",
"blinding_factor": "7c4a996eaac89d9cea984623277a142b52b63c6546ef426227922dec19d00a87",
"oprf_seed": "cdeef0e45c5c592bcc00d9ac8f094d43463165f886c4102f5a293ef8aa319de8",
"masking_nonce": "1d8e692fc6911170cfa00dbe665fa0d5db76a672245d111432b2fe35733d04f86b3d1ba79b08430b7fcad140a0d3067bcb2dd90fb3c3376cfc50660477454ae4",
"envelope_nonce": "18774499e68269ff9cc98e6b74438d00378b11886e93b34dfe61fb0912be6faa",
"client_nonce": "4a66273ed0c375274d59eb5d29f2f579c282dce9853401c9c7bdefe4018ed016",
"server_nonce": "e11586209869eb4ac351ebc8c1e348a7f7bdd4cccf747b8ccd6b7028a57a1692",
"blinding_factor": "c4eb21db1dbcac484e768fed47395a8274efdf7a6bb0b51650158a4f20fa9962",
"oprf_seed": "9cbb7e45eca257600aee9f80a73999f6a043464ef8373ff05692a2c2a78ad7e9",
"masking_nonce": "75980b06670edc94d3bec1cd50a234b5ae5a80ab0d35751d088db4bc716f7749f116e9de81908f5c552b89311aeb14f39e83edfc72c675898aebb33f670c47c5",
"envelope_nonce": "f7c268c385a2357f9bdc375e2ed01b14ed8a4d5da7f73a7637a1e1d1b870d5aa",
"client_nonce": "5e91a3321f75b640d8fc8fb8087d7207e5c45b2b63d1fb9a111797ace5973509",
"server_nonce": "59320205db3abe90453078cd87defdca26ed9106c87e86b23b3d973ce493e74c",
"context": "636f6e74657874",
"registration_request": "0240132c056e840d76432376499866bc24cbcc421352f97876e3db730eaf93c9a3",
"registration_response": "02aaf5d179cbd839043f1a5bb0b9d548240f83ba04fdf20bde2c4eb6c8cbd9af190231a120b62158db8b182afba15361f32870c17d09675fb2b751fab99a55b7f29b",
"registration_upload": "02d4231d770ef9ae965843a1675ad74199326c45903ba01740fb78802b3c513a94dadfe6d48822c9afb0180a8c153d05ec8165f12a65c5a4cdc4dd3319d1771d014982f91037e2e498ea3b7fe8f72c35d00a9b952c8ce4fb0563a49071d599390c13dd1bc302ed8244f467ae4efeffed774664d64a23e3be0526ca1a97bd0e184d",
"credential_request": "0240132c056e840d76432376499866bc24cbcc421352f97876e3db730eaf93c9a34a66273ed0c375274d59eb5d29f2f579c282dce9853401c9c7bdefe4018ed016027f8c859ded40011655cd5314f5dc3b42ed95c11da3ad181a70d911fadb818415",
"credential_response": "02aaf5d179cbd839043f1a5bb0b9d548240f83ba04fdf20bde2c4eb6c8cbd9af191d8e692fc6911170cfa00dbe665fa0d5db76a672245d111432b2fe35733d04f82b04c06b790ba4255130b98aff3a2f1fd6a0527cd9c8013b21eaf416292ce31f7f0cc1265563c461b5b201321c9aff0e33ebcbb3c378d44abe339070ee98d9c4273424602fe6defccedf46622f024f9d43569cb168ffde5f83ce2627e4b3033502304ada96918e021ec1595981ac41711853bd7a271bf3aa6c01e57ebdd18b50ed03a2fc14b586b9875732238ef1c8964ca168781c3002a0dd1b301aa692525cb86023db579c0d130a7272e9e43f0ae71cc585146f0c547f4d903b0e85fb5c855dc0",
"credential_finalization": "d721a8860a39f2f0b454a1721c3edef13bd9d2d1dc850624b4375e9824ab04ce",
"client_registration_state": "7c4a996eaac89d9cea984623277a142b52b63c6546ef426227922dec19d00a870240132c056e840d76432376499866bc24cbcc421352f97876e3db730eaf93c9a3",
"client_login_state": "7c4a996eaac89d9cea984623277a142b52b63c6546ef426227922dec19d00a870240132c056e840d76432376499866bc24cbcc421352f97876e3db730eaf93c9a34a66273ed0c375274d59eb5d29f2f579c282dce9853401c9c7bdefe4018ed016027f8c859ded40011655cd5314f5dc3b42ed95c11da3ad181a70d911fadb818415efeb2242f4068b651e29917611a295033e8369ee14c1091678f03273839972894a66273ed0c375274d59eb5d29f2f579c282dce9853401c9c7bdefe4018ed016",
"server_login_state": "b652d371e96e1b4afc79137d6f6fbdb7c98a254f2547f3fab2423ea2213a188c2884cb33441cb38a5d0d63e3d914de117781df0573022dd326766effb07e3cce5b812234056fefc56980a25a8d0a2614cd638594fae2b25cd17b456f2046c724",
"password_file": "02d4231d770ef9ae965843a1675ad74199326c45903ba01740fb78802b3c513a94dadfe6d48822c9afb0180a8c153d05ec8165f12a65c5a4cdc4dd3319d1771d014982f91037e2e498ea3b7fe8f72c35d00a9b952c8ce4fb0563a49071d599390c13dd1bc302ed8244f467ae4efeffed774664d64a23e3be0526ca1a97bd0e184d",
"export_key": "bcb1ed54d1baebf8c0ee5542623b1867cd3f9257a67fac4a456af55a9fd9e02a",
"session_key": "5b812234056fefc56980a25a8d0a2614cd638594fae2b25cd17b456f2046c724"
"registration_request": "03efeab933855855df6309184b1f38e72253a30da135e8a5247f487e84da0e2038",
"registration_response": "038208b3367f5f2037ebe633a3a496ca91253b51ddf3da27ce160aa32cadd894f003baaee6e122a55c05860cae3795e6662a879e8308983fe55905dbe363883a0e4a",
"registration_upload": "02bdac72f70ee3dec77c6f827a74262c35d166f0f219dc34990563a791cfa6d52e6fe49ac269f3f0ff9ff149827df28a706651d47d83587642ec1d26cb94eb8921dfa3fccf6ef36714a1dcf5085c38a3f007842579bc3bede124e0dfd994f173c04982a39a7878cac19db2bfcfc20e7e523ff07d29a77c12def7eece9ed0489d01",
"credential_request": "03efeab933855855df6309184b1f38e72253a30da135e8a5247f487e84da0e20385e91a3321f75b640d8fc8fb8087d7207e5c45b2b63d1fb9a111797ace597350902af274d7a94c8e33e8c374e39991ab7fe078c87cdaa1a0334ad33b8308cae1298",
"credential_response": "038208b3367f5f2037ebe633a3a496ca91253b51ddf3da27ce160aa32cadd894f075980b06670edc94d3bec1cd50a234b5ae5a80ab0d35751d088db4bc716f774974578203a277492803925adc16a48d007b69fc31f4c48efefd43b81280bfb3cab9abf5fa0156d12191811f948ac311e0279f47279ceba64c46bfa12f4cc0fb99364395e6d57307c00ba4b1330d98b85db8a8e09729ef79376e40a8adc1428da58e3f822df5e690807c585bc42e1ca604770c2f9bbd017d366561d8de90e06628dd0226810c8030327817b74d2d3a05be5ff4966b16912a372e8d2722c24c14121ec21024966125998398c81fdfc25b8018a8ee641f485663996ef336c4521b85f6e7",
"credential_finalization": "b32b0472968a844fb681f4a1ac61e33763d74d39b711db71b8f5d27e90e271f8",
"client_registration_state": "c4eb21db1dbcac484e768fed47395a8274efdf7a6bb0b51650158a4f20fa996203efeab933855855df6309184b1f38e72253a30da135e8a5247f487e84da0e2038",
"client_login_state": "c4eb21db1dbcac484e768fed47395a8274efdf7a6bb0b51650158a4f20fa996203efeab933855855df6309184b1f38e72253a30da135e8a5247f487e84da0e20385e91a3321f75b640d8fc8fb8087d7207e5c45b2b63d1fb9a111797ace597350902af274d7a94c8e33e8c374e39991ab7fe078c87cdaa1a0334ad33b8308cae129862b5b89b4daac1e2db00d12a993c18af4f69083526c51f4428ec9072264e51845e91a3321f75b640d8fc8fb8087d7207e5c45b2b63d1fb9a111797ace5973509",
"server_login_state": "b6ac93a918062c080a4b1de8fd268294c6bd94bf4a7858c73307816abaaa6ac1316f2c7fa3580a84d4e8d0f7f5985ba2b4b655c0a190d3810f5c5ffe3db178cab8e1bf50c444bae5ed713df3460eaa2987fb378a4a7eda0a2b426636ce34a797",
"password_file": "02bdac72f70ee3dec77c6f827a74262c35d166f0f219dc34990563a791cfa6d52e6fe49ac269f3f0ff9ff149827df28a706651d47d83587642ec1d26cb94eb8921dfa3fccf6ef36714a1dcf5085c38a3f007842579bc3bede124e0dfd994f173c04982a39a7878cac19db2bfcfc20e7e523ff07d29a77c12def7eece9ed0489d01",
"export_key": "0a3f9daef4c6ce2d7853b140bca06b89288f45c90a68697ad4f5f65181838ac7",
"session_key": "b8e1bf50c444bae5ed713df3460eaa2987fb378a4a7eda0a2b426636ce34a797"
}
"#;
#[cfg(all(feature = "x25519", feature = "ristretto255"))]
static TEST_VECTOR_X25519_RISTRETTO255: &str = r#"
{
"client_s_pk": "f0f51a83591f6749ddfd56c78d9aaa672908713c5fcc8670b3e7341c84218c78",
"client_s_sk": "b4a46dc06b981100c15529e4675babe4ed05444de2fd4fc7dba6d3aaf9fca40a",
"client_e_pk": "cba41b4605abd945351ebbd18aa99d24b1053e70c8c010df7c454fe874b37f74",
"client_e_sk": "7afd7b93bdfff65d1162d44d550afc0b3fb7bf3a3d09ccd170d5d63c97d70c02",
"server_s_pk": "f261e911ebecac75b1a192acaf393a3541ca13572ad81d3d2729ba48718d0c77",
"server_s_sk": "3d8c12aa8f615c4133688da832f177853b7051d2ab87e8ba0c48bfeeb87f7003",
"server_e_pk": "f1ef201d97dfdc7d21a0386d20d62d2a10212586e749b06928a8d48550b04d44",
"server_e_sk": "652d258cc211026e6b1ca51a5b2b5946459bd0926d896c4c46712176d5db7507",
"fake_sk": "c93b7c3f24d51230df51bd96623fb4a142b1eccb75e0d9a9939eb0acf2e37d0b",
"client_s_pk": "fd9421aabf489c202c0c73692d191e8f90dd9c3d33d8f9d7098b68037a0d7018",
"client_s_sk": "743049eab865ebf6bd680586629c99bb27350c391a8badd2cd3072046ccf7909",
"client_e_pk": "3d6ea92c272d085a4343ef0057938f0049a01716d263539a2ce11b00d8776767",
"client_e_sk": "2320c9b2022c31960dee0081793d7e2192d88d62b91279ecb23090381017770a",
"server_s_pk": "86fc83e93faefe37539af2c66f283de69589496b9c24c1afeade5293548beb51",
"server_s_sk": "7a707d042be8b8572e22553d37c5956b0ab1bfa4ee11e35b54b70915638aa60a",
"server_e_pk": "83e5937afa666054f398733915dad7e0fed785e97eb1a6d4a869368a7225e32e",
"server_e_sk": "f0dbcb5c09a2083ee0b4d829a60c9b08a802ccb963a7b4903bc16d7152641f02",
"fake_sk": "9c76aea51fcc052fb3f34f27f70a3a8fbf63788d156e4e0c0a7d625865f34b05",
"credential_identifier": "637265644964656e746966696572",
"id_u": "696455",
"id_s": "696453",
"password": "70617373776f7264",
"blinding_factor": "18492200ec40f425a8593c6b3f57d966785abef2e7ec77cc16dbc0112c10eb00",
"oprf_seed": "55d8b3b5c222b1b7bac76574bf13450459cbb7e8b270a58c3b584f39f0bc694df55774ff7d083c69a92f0345622bd49fefa6fe6d99456ea5f9f60c28d07ef870",
"masking_nonce": "c1b2ae7f568e055153527c75972a111525cbb50328eb90f0ed2f2a4cb770c3939b2bf94f689009928ee26af2376269515aaed6aff72c79d07a5f84aec159cb17",
"envelope_nonce": "45e9ab506171882d56a0a3017ccbe24049cd22c2ebb3519a4d1110a4f853e63d",
"client_nonce": "30f07d7239e894136324f33bbfd00f63bcd33bb255bdb072f57591d44c7a1f32",
"server_nonce": "58231100ea33e00550de7ba3b1865dceaaba3835c2ca1ef22365af068590636b",
"blinding_factor": "c54a7234fcc8eda29e08c80a0c3062cfa42725a7befc0038be5c9447082c300d",
"oprf_seed": "39ee741b2d1286785db8f020da65495dd49676c74fd6060e9bad6365a006294399a91cf7d89e52133fec92243794667fef7a41c50fd41b269d2c7bb7c2caf118",
"masking_nonce": "4b1c8057992d51b72890e653ae56ca2f5a2c2fb983c61a25084bcb0c42ef50a310e290e0e25f4026e29ce78ba72d4e617acefd30d439c120209c1e9f3394fe51",
"envelope_nonce": "f686b0b38da88128bab866bb8a271491fe4d31f7f6c468b2410b3f7d13f81c21",
"client_nonce": "66681cf8abba1f60f4b45c4df681f053af152c85afd070a87ea0963c82208fba",
"server_nonce": "2b7b31d669643feaaa398f9107b3cc31ccf8059c260364d02f81af5609c253da",
"context": "636f6e74657874",
"registration_request": "68eefa968ee3ad0c69319a8f52f056df368826669cce82ad64462bc24da0787f",
"registration_response": "863ca6ef30989bec1e7411a940d589fa3e8fa3d76c8281ebb2714a6b9b3d4072f261e911ebecac75b1a192acaf393a3541ca13572ad81d3d2729ba48718d0c77",
"registration_upload": "1f658d31ac18d2d1ec1507bfd2b33c9dc5a5ec3840a87c35445be002156da95162c91ab0e7daae9e6e569e2c4ac115f770920043425e2fc941804049da6837c9537a455f91f45fd8c972a0087ec03ba8482773a0ba7dc0cb0690e94c3dabb5f7b4a46dc06b981100c15529e4675babe4ed05444de2fd4fc7dba6d3aaf9fca40a3d5d7de871613d47281ca2c105eba79f925d46b52dfd3448f9ec6acbb71e7280f8cab44110cd1ca7e0a58b25245840e6f9c8856e43c6a23aa073d23c9fcae22f",
"credential_request": "68eefa968ee3ad0c69319a8f52f056df368826669cce82ad64462bc24da0787f18492200ec40f425a8593c6b3f57d966785abef2e7ec77cc16dbc0112c10eb00a84b03fbedd2fcb1ba2b36a851028d6c3c8ad1c1a46e770efe50564ed619b216",
"credential_response": "863ca6ef30989bec1e7411a940d589fa3e8fa3d76c8281ebb2714a6b9b3d4072c1b2ae7f568e055153527c75972a111525cbb50328eb90f0ed2f2a4cb770c3931ccd09a010a76585634ae8baf2e45e1ca487e2dd695c3daac811c750da634d99307533885e23206c2ca5ad643833dad6a37312f453c84d79001b46331f14d73607da4693d6b613c9b8bb51cad8d771cbad5fcbd54742ad81df4249d2367e708027e5a52043afb985128b4050653a7028babc04234f50941ca75dbbfe9ba2556b58231100ea33e00550de7ba3b1865dceaaba3835c2ca1ef22365af068590636bed31200d916f6fa10eb164338687773d1cea70b3676973fad7c9829c3384a54bb810bd56074fa055b2f5888c9a82f4fb0771acca2e6d6934cdb5d68c480529cb110bd0c0c446680a6b0ddf3760ee9a7953931c999386f42f6df55b9c9bcd8060",
"credential_finalization": "5ba9411a863d372c2cca0e8ba1301aaa20e0ee1a68632773ca8546077409c20e10b2381aad9eae1064e1e4f40a56149da7c4e1c951245988315063b883ec659b",
"client_registration_state": "18492200ec40f425a8593c6b3f57d966785abef2e7ec77cc16dbc0112c10eb0068eefa968ee3ad0c69319a8f52f056df368826669cce82ad64462bc24da0787f",
"client_login_state": "18492200ec40f425a8593c6b3f57d966785abef2e7ec77cc16dbc0112c10eb0068eefa968ee3ad0c69319a8f52f056df368826669cce82ad64462bc24da0787f18492200ec40f425a8593c6b3f57d966785abef2e7ec77cc16dbc0112c10eb00a84b03fbedd2fcb1ba2b36a851028d6c3c8ad1c1a46e770efe50564ed619b2164a217cb91a5ecc09d5a2441dfa664c800fcb4fb5eb939ee374ddea2d1bbff10f18492200ec40f425a8593c6b3f57d966785abef2e7ec77cc16dbc0112c10eb00",
"server_login_state": "5a0ee75063406f272b70ca918fc7a3be5446007a697b77c1a1759ec0fe06879bbcb744aa60a641bead6d41877c9f4726f265a8341091f0accf54452759008e70ccf25aa19221560a3d3c4f929d6d30f2c037c9134996e1352e695152172d147c72753c5884f981f66d991c9361082950eb8d71e2ca05b1218abf9623a63a91874f1112b861943faacbedd26dcbd6b589a7db3bcc1a8f2ad9fea08e929d65f08220ec74edb26b1e8d79844cb6b452b3f163608d700061ff5d42bc7fc04eb0b954",
"password_file": "1f658d31ac18d2d1ec1507bfd2b33c9dc5a5ec3840a87c35445be002156da95162c91ab0e7daae9e6e569e2c4ac115f770920043425e2fc941804049da6837c9537a455f91f45fd8c972a0087ec03ba8482773a0ba7dc0cb0690e94c3dabb5f7b4a46dc06b981100c15529e4675babe4ed05444de2fd4fc7dba6d3aaf9fca40a3d5d7de871613d47281ca2c105eba79f925d46b52dfd3448f9ec6acbb71e7280f8cab44110cd1ca7e0a58b25245840e6f9c8856e43c6a23aa073d23c9fcae22f",
"export_key": "4b66b395cc1f92fbf6ba7b6f2b4005d8a922cf712eda153d6c71e475dbbef5dd82558f229c64d214329df488a28926cd9d2908c96c932c1d2857888bbcf5cc62",
"session_key": "4f1112b861943faacbedd26dcbd6b589a7db3bcc1a8f2ad9fea08e929d65f08220ec74edb26b1e8d79844cb6b452b3f163608d700061ff5d42bc7fc04eb0b954"
"registration_request": "947c08180d7ee11962a475408e34db1cf36153ad565efbaaa2003c8ddb873742",
"registration_response": "22db969f065d6270719d52678b3b5a8505df865347befe4a2ca23c305698375886fc83e93faefe37539af2c66f283de69589496b9c24c1afeade5293548beb51",
"registration_upload": "811c9b5fff64f79dd1c58230f6afd5686b64aa2bf2645e53efcbce5258c5e501dae567fe81428ed227caf290d4286806733fe4b28373cdf98f75cbee2a26a285d51289636e0277b8b547a12c4444d6c138ad1f312e290d8cb268392cdc532557743049eab865ebf6bd680586629c99bb27350c391a8badd2cd3072046ccf7909099d944a610d38ef9a48314cc6cf4bc7eb336a12eac42e4cf21db2b05bd09bf2e82f1c63396804455281cc67d85cb95301024104b911362c14a3d3c03bdcc897",
"credential_request": "947c08180d7ee11962a475408e34db1cf36153ad565efbaaa2003c8ddb873742c54a7234fcc8eda29e08c80a0c3062cfa42725a7befc0038be5c9447082c300d62de25755c11a72834d1aba572e3efcce0ba30924ad487ff996e287e78196916",
"credential_response": "22db969f065d6270719d52678b3b5a8505df865347befe4a2ca23c30569837584b1c8057992d51b72890e653ae56ca2f5a2c2fb983c61a25084bcb0c42ef50a3c3db1e1b9843739d36c04702c4701316815f52f3df2bf7fab1aab7adbaf8491e8b5b7dafb6e4db3f9a5c76c3eea24ecd81ed430f47f0b67cb78048462f9816b376feb3d77a907c2839f05ae7cd770524e77672294d9d91e648137ae9f87c8a923a2181e19fb231ffc11a2c530536193675a977b9d8e3ca2f20272194ec79cb8a2b7b31d669643feaaa398f9107b3cc31ccf8059c260364d02f81af5609c253da5df4034fc05556580243652e4ca2beaf23d710299ddfb55545930e3a474bae44edd162d8c4de17bd7a345dc5976f3a48e15865963785b013e91d0def39058a1f4525d88367fad2a74e3b9e7651966b7b16decaa585b67086bab580d6924b3933",
"credential_finalization": "d6a968e5ef62448d4fab1ee40e4e719e56e2977c5f43ecfe6cabdbbf7c66df0cb9e2e5ecba7d69b2cd78ca6707a23bc243f38385ef08b03ac29299b2c810011c",
"client_registration_state": "c54a7234fcc8eda29e08c80a0c3062cfa42725a7befc0038be5c9447082c300d947c08180d7ee11962a475408e34db1cf36153ad565efbaaa2003c8ddb873742",
"client_login_state": "c54a7234fcc8eda29e08c80a0c3062cfa42725a7befc0038be5c9447082c300d947c08180d7ee11962a475408e34db1cf36153ad565efbaaa2003c8ddb873742c54a7234fcc8eda29e08c80a0c3062cfa42725a7befc0038be5c9447082c300d62de25755c11a72834d1aba572e3efcce0ba30924ad487ff996e287e7819691621328157ed777d9ed99dc915e9c05aef779537e93ec33b859592c3167d317509c54a7234fcc8eda29e08c80a0c3062cfa42725a7befc0038be5c9447082c300d",
"server_login_state": "225c04cdf34d68b6a5e328da6d0820f831c0a6747359ba04f5c363a590c2881125c94cfcbb52dedb23e63c67a29889925dd8d14570a060570b7d1f599730ad9d6693aea75639e20b161f0b814cfacefbb0ccfb294c04c7fef55f7515fa75f11ae56d6649219048c3d307cf026e4b9d88afa0db5779243437d05202b01b46b4a5fcb72639f47ce5017784bb1cf5a95ea2aa10f4071fc83eca962424086d0dd4df2fd315e39ac6f95795dd47fb8b6df8749e049fcc6065346b615c7732ac917d89",
"password_file": "811c9b5fff64f79dd1c58230f6afd5686b64aa2bf2645e53efcbce5258c5e501dae567fe81428ed227caf290d4286806733fe4b28373cdf98f75cbee2a26a285d51289636e0277b8b547a12c4444d6c138ad1f312e290d8cb268392cdc532557743049eab865ebf6bd680586629c99bb27350c391a8badd2cd3072046ccf7909099d944a610d38ef9a48314cc6cf4bc7eb336a12eac42e4cf21db2b05bd09bf2e82f1c63396804455281cc67d85cb95301024104b911362c14a3d3c03bdcc897",
"export_key": "cd38ef9ca81fb3bdb6ae0c9ace0a3574755030a89a6a104d55f2066d81d5fe64089a7d73e06c3c00adabbc1ed755426fd4d04aee09023b111e1224487738cbac",
"session_key": "fcb72639f47ce5017784bb1cf5a95ea2aa10f4071fc83eca962424086d0dd4df2fd315e39ac6f95795dd47fb8b6df8749e049fcc6065346b615c7732ac917d89"
}
"#;
#[cfg(feature = "x25519")]
static TEST_VECTOR_X25519_P256: &str = r#"
{
"client_s_pk": "17e8c950fde734deb4468ecb619023a005cba3a85cbbd4a8f43f37101add7279",
"client_s_sk": "393df095fff0eb7249abe3d15416b8c362598be68e28f89456f783d37f54fe02",
"client_e_pk": "99e2464eb85ce67f2e0711036f7ca99022cb73d787c0dc3861d1990dda716649",
"client_e_sk": "f91411fceac1ffc2f86508018c4a3769381b5f778d4c281fe702a24465ff5e0b",
"server_s_pk": "e375d12756de75aaea657cf51cc2db0ebbb4cc63c1bde12def0e37b1f13fa363",
"server_s_sk": "8471298bfe02864e59eecf68a5f1269617e94fe9127f34c1fd69f45b4577cc01",
"server_e_pk": "9bfae7621089efc01944b79a6d112ead2cf4129f1ae34edfe7fe14885f25131b",
"server_e_sk": "ce684f66a099edc3b83ebbe67f8d745e6332f2c5953fa7b2d359a02fcd5e030e",
"fake_sk": "9d3aa4990006276d206c94e0882e28579e65f027f355f9aa6eccbf037e036a00",
"client_s_pk": "753ed6bb950b75a9070b13ef93b4dcc99919addb4b6bcceb1f843e902b078a74",
"client_s_sk": "e49b6199b4fee342db063928a80d1a2f129d7402f70a00615e349a5bc7402109",
"client_e_pk": "27c883a8e09ed4f8854e8a4d788c79f947e7ef7d9508294a3c93394f39daff4b",
"client_e_sk": "ea9695fedac154e8432b3b7d3da908b2e594e5eccbf53b29e94492312aaa630f",
"server_s_pk": "66369d74ab45914fb8fc53520b6915561ce2c3a14c93adb2bf5cdf714feace76",
"server_s_sk": "093c818970ed2f9056a6a29cc4683c4c5f8bda343cdd891c99ecb63ba11f2001",
"server_e_pk": "6576ff437de71bdcc39dd78fceec0bc7afb0ad1f10e1b0f991795c996daead78",
"server_e_sk": "2da54527ace3bfa2a79dd6dfe8e24d814e9f4c3d888ee1b1eae80435eb03ad03",
"fake_sk": "fbc4817729c76924c0f2a254856d56ef58616e8366a512d51145e5d6bab65609",
"credential_identifier": "637265644964656e746966696572",
"id_u": "696455",
"id_s": "696453",
"password": "70617373776f7264",
"blinding_factor": "5110d33a36d039bb8ca1329b39993a2366024dec83671bf195a2997f054b5505",
"oprf_seed": "fc9afbdfca56e6b467001ac8263340e1cac82f7f2ccea776d22ba179df0f8538",
"masking_nonce": "cbb2380130d6f4a80f8d1e3f9bde4e431c6e3105aac77a0076dfe6e8e887287074c00fe8180a70d09ccac389331b4b4a0a2702f3239a452ba85b5a1b98c05ac2",
"envelope_nonce": "33d328f8f869e6898c7c1036b29dc94fa14647742e4a10678c2f84836d040a44",
"client_nonce": "18ee6d17f22eb48701ce46967e0b55864ae88b124a43403dfb1d71e4681f5b30",
"server_nonce": "7e868983e4a2f9cc909287d255e3cc94b467c4701d938de643a795fec393e12c",
"blinding_factor": "18a4203efc82b58ba0931b86966fb32c2ba9fefb8b20f53d2cf2e8eb3cbef538",
"oprf_seed": "9a17b1000c68e3b3befe6f2461c327435fdfaefcbce3945e3898002591cc200f",
"masking_nonce": "a55af67cbd406f7e8629bb563890fd0e031efa9ea179b423cd05d475444485053f682c99350fb7b96b564d7e8ef27c3ae2c282f5a60008f18caf3274ca69aab7",
"envelope_nonce": "3ee31dcd5be16563a1be31c1916d813fbb2df6e7a8174de9fbe970268a38f1ff",
"client_nonce": "2d8c52a01ddb0afe916fa6320ac924fdafd3a086dd15d7d8b8b849e1a6b5598c",
"server_nonce": "c2c4292207fdb5c70a083ffa3265665b47320f49e5830213fc0a7be465e250ac",
"context": "636f6e74657874",
"registration_request": "028d69a2c03f2edf8f389563c1cc78a3b95a67a20c894bce4359412b210ea52d0f",
"registration_response": "03fc2889add67eeaec390775befef78d8cee5d93bc9ac1186260f809dfe0b639e9e375d12756de75aaea657cf51cc2db0ebbb4cc63c1bde12def0e37b1f13fa363",
"registration_upload": "cef21bd371ce71c76aafd21821509b59ec5faa9b53a8e21bfaa58186d020a812a894afae522fc4e6e251e6a72b832dfdea2284d1e38e1d4356a7ec47449c0a6d393df095fff0eb7249abe3d15416b8c362598be68e28f89456f783d37f54fe02bc8aca098df28e6548308a5cf921fe5a71a5f2b6f85976dd2f1e37fcf5d69126",
"credential_request": "028d69a2c03f2edf8f389563c1cc78a3b95a67a20c894bce4359412b210ea52d0f5110d33a36d039bb8ca1329b39993a2366024dec83671bf195a2997f054b550560761872baf7ae0caa9da19604217d845623437af461d10b78202f1545c3d34b",
"credential_response": "03fc2889add67eeaec390775befef78d8cee5d93bc9ac1186260f809dfe0b639e9cbb2380130d6f4a80f8d1e3f9bde4e431c6e3105aac77a0076dfe6e8e887287099a0886cd4da8ec29e54cde0d14b25d4532e28692acd7a45b751314c08ddc8b14b1d80772fd4a81c35185f8e9a0b89f81ca97cfc0d295caf71cb91f4930c2edb9fe42b1a69fa4f007735ddcb47061a766de2c7321fca1a3fcd6b7f5b3d36b8807e868983e4a2f9cc909287d255e3cc94b467c4701d938de643a795fec393e12c161d7a9bb4eb6a3d914c3dfe7bfcce7c483c54555cb344a8c97694a2eea7fa4019abb329e92ed77475d70d2c016e0cf9fe6f68974d175a0461848c4994d73c43",
"credential_finalization": "273ea776d1e67645fd9e21179032a02fc340087bc2621920be0a960f7a3ef25b",
"client_registration_state": "5110d33a36d039bb8ca1329b39993a2366024dec83671bf195a2997f054b5505028d69a2c03f2edf8f389563c1cc78a3b95a67a20c894bce4359412b210ea52d0f",
"client_login_state": "5110d33a36d039bb8ca1329b39993a2366024dec83671bf195a2997f054b5505028d69a2c03f2edf8f389563c1cc78a3b95a67a20c894bce4359412b210ea52d0f5110d33a36d039bb8ca1329b39993a2366024dec83671bf195a2997f054b550560761872baf7ae0caa9da19604217d845623437af461d10b78202f1545c3d34be546de1f4ded2ab52dc0abf00f500b927ee1033aafc0f3a3e5d2634cd52112005110d33a36d039bb8ca1329b39993a2366024dec83671bf195a2997f054b5505",
"server_login_state": "05a413df0fa949e0308ad3bfffacb7d45bb9edd74314a5015e7b743a22192744504abe829295e3ae661d6ed30dc49d2f44f6ca934412fe6ee773d6514f8247f2082fdd36d18d86c40d32141d4b2e4db654d9c3ce718df531a8c5431e4ba9d292",
"password_file": "cef21bd371ce71c76aafd21821509b59ec5faa9b53a8e21bfaa58186d020a812a894afae522fc4e6e251e6a72b832dfdea2284d1e38e1d4356a7ec47449c0a6d393df095fff0eb7249abe3d15416b8c362598be68e28f89456f783d37f54fe02bc8aca098df28e6548308a5cf921fe5a71a5f2b6f85976dd2f1e37fcf5d69126",
"export_key": "1150751e9cfcf72bcbce59a472957fd06ed79f60ae9db04354bb2d10d3707c26",
"session_key": "082fdd36d18d86c40d32141d4b2e4db654d9c3ce718df531a8c5431e4ba9d292"
"registration_request": "029ea801c63cfef8082b9d90bec2bc73223ffbb58a4efafc92a558758cc6499007",
"registration_response": "02cb947d77ba412d051844f71c0e3f3ea76f37675986c224b8c3cc98d3c15901e966369d74ab45914fb8fc53520b6915561ce2c3a14c93adb2bf5cdf714feace76",
"registration_upload": "c87c3864bf4d08de1dcb54e391861e6c9a3952ce32138437b97ca8ba7ecce17da4199e5b514468f8ca0df74939ab0882b29494e6719e5f82aca17b1b473d4cbae49b6199b4fee342db063928a80d1a2f129d7402f70a00615e349a5bc7402109ae22d994c188e1f074d36667f86328a2846d36b02d439cece7ffe513d943b008",
"credential_request": "029ea801c63cfef8082b9d90bec2bc73223ffbb58a4efafc92a558758cc649900718a4203efc82b58ba0931b86966fb32c2ba9fefb8b20f53d2cf2e8eb3cbef538a7b8272a9235017ef28a8b2dc55e75eb509b4687834a84d8502d5223e0213a0e",
"credential_response": "02cb947d77ba412d051844f71c0e3f3ea76f37675986c224b8c3cc98d3c15901e9a55af67cbd406f7e8629bb563890fd0e031efa9ea179b423cd05d475444485053dc3294947f945d405b034c8381df98395567633d32c373b3ef38382e8edc453b2adf3be2ca9c6397e2ad4a835493395d9c04a5b2185ae18bfd9e11301c3cbf2b613048a9cbe81fcc0e1bc558f8975e26769ae243b0c279e744b8891020b4fa2c2c4292207fdb5c70a083ffa3265665b47320f49e5830213fc0a7be465e250ac0fd0d98ac8aa06c6bf1e30acf462fcb2f5fdc12b39a8606609a9ca49f751413b7bee901e53032e54ac992da96a1d181ccf5af5c99ba3097454c5f0ef3c390414",
"credential_finalization": "149fc8cea95f8691c4a5a5c23c5fa7dfc374359ff387a1f0818a9781e03d5572",
"client_registration_state": "18a4203efc82b58ba0931b86966fb32c2ba9fefb8b20f53d2cf2e8eb3cbef538029ea801c63cfef8082b9d90bec2bc73223ffbb58a4efafc92a558758cc6499007",
"client_login_state": "18a4203efc82b58ba0931b86966fb32c2ba9fefb8b20f53d2cf2e8eb3cbef538029ea801c63cfef8082b9d90bec2bc73223ffbb58a4efafc92a558758cc649900718a4203efc82b58ba0931b86966fb32c2ba9fefb8b20f53d2cf2e8eb3cbef538a7b8272a9235017ef28a8b2dc55e75eb509b4687834a84d8502d5223e0213a0ebcb52188b5c59f7a62b5a3cbaa4d91df52f62dd508802d3813192fb933dcbe0218a4203efc82b58ba0931b86966fb32c2ba9fefb8b20f53d2cf2e8eb3cbef538",
"server_login_state": "62719f8b13444f9cb407ba8588221a4ccadab4e23bd9b53562982b70c10dd76549f8e5e06f9c67dda3b2cbbc04e611251114d0ec75814448ec31735e256de8375661696067914036a03e84148db7dc7cb80a119b76b1a4b1cacfae8a51261cde",
"password_file": "c87c3864bf4d08de1dcb54e391861e6c9a3952ce32138437b97ca8ba7ecce17da4199e5b514468f8ca0df74939ab0882b29494e6719e5f82aca17b1b473d4cbae49b6199b4fee342db063928a80d1a2f129d7402f70a00615e349a5bc7402109ae22d994c188e1f074d36667f86328a2846d36b02d439cece7ffe513d943b008",
"export_key": "d01fdced2b0342d693da9290e6a8d3fe4aa5ff5bacbdced310fb137ba95e7349",
"session_key": "5661696067914036a03e84148db7dc7cb80a119b76b1a4b1cacfae8a51261cde"
}
"#;
+370 -369
View File
@@ -5,7 +5,8 @@
// License, Version 2.0 found in the LICENSE-APACHE file in the root directory
// of this source tree.
//! The OPAQUE test vectors taken from: https://github.com/cfrg/draft-irtf-cfrg-opaque/blob/master/draft-irtf-cfrg-opaque.md
//! The OPAQUE test vectors taken from https://github.com/cfrg/draft-irtf-cfrg-opaque/blob/master/draft-irtf-cfrg-opaque.md,
//! which are presented in https://www.ietf.org/archive/id/draft-irtf-cfrg-opaque-08.txt
pub(crate) static VECTORS: &str = r#"
## Real Test Vectors {#real-vectors}
@@ -17,7 +18,7 @@ pub(crate) static VECTORS: &str = r#"
~~~
OPRF: 0001
Hash: SHA512
MHF: Identity
KSF: Identity
KDF: HKDF-SHA512
MAC: HMAC-SHA512
Group: ristretto255
@@ -33,98 +34,98 @@ Nok: 32
#### Input Values
~~~
oprf_seed: 5c4f99877d253be5817b4b03f37b6da680b0d5671d1ec5351fa61c5d82
eab28b9de4c4e170f27e433ba377c71c49aa62ad26391ee1cac17011d8a7e9406657c
8
oprf_seed: 2ed630416cb2e532804133133e7ee6836c8515752e24bb44d323fef4ea
d34cde967798f2e9784f69d233b1a6da7add58b2c95a57bc213aca920c14553ed2d83
3
credential_identifier: 31323334
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 71b8f14b7a1059cdadc414c409064a22cf9e970b0ffc6f1fc6fdd
539c4676775
masking_nonce: 54f9341ca183700f6b6acf28dbfe4a86afad788805de49f2d680ab
86ff39ed7f
server_private_key: 16eb9dc74a3df2033cd738bf2cfb7a3670c569d7749f284b2
b241cb237e7d10f
server_public_key: 18d5035fd0a9c1d6412226df037125901a43f4dff660c0549d
402f672bcc0933
server_nonce: f9c5ec75a8cd571370add249e99cb8a8c43f6ef05610ac6e354642b
f4fedbf69
client_nonce: 804133133e7ee6836c8515752e24bb44d323fef4ead34cde967798f
2e9784f69
server_keyshare: 6e77d4749eb304c4d74be9457c597546bc22aed699225499910f
c913b3e90712
client_keyshare: f67926bd036c5dc4971816b9376e9f64737f361ef8269c18f69f
1ab555e96d4a
server_private_keyshare: f8e3e31543dd6fc86833296726773d51158291ab9afd
666bb55dce83474c1101
client_private_keyshare: 4230d62ea740b13e178185fc517cf2c313e6908c4cd9
fb42154870ff3490c608
blind_registration: c62937d17dc9aa213c9038f84fe8c5bf3d953356db01c4d48
acb7cae48e6a504
blind_login: b5f458822ea11c900ad776e38e29d7be361f75b4d79b55ad74923299
bf8d6503
envelope_nonce: 36168448f9c5ec75a8cd571370add249e99cb8a8c43f6ef05610a
c6e354642bf
masking_nonce: 13573601f2e727c90ecc19d448cf3145a662e0065f157ba524df0d
3e56ad6236
server_private_key: 51da1f6c3ea07fa00c7cbfdc1fdc70659f1a1092402da749d
938c1a6a570f103
server_public_key: 583f7bccccbc1907ae1506bac950d08266eb3b33ba452b8df7
061a390ffd736e
server_nonce: a88904fe660061c4fac7e452066b8b0f90da7d8d4a19f1cc41fb6fa
5479b467d
client_nonce: 400ceac0fbfb16005928335518be6f930a113c6c0814521262e17ec
c3cdc9f91
server_keyshare: 5cc9fd06a5917ab66a6ef5537a65525a428f768840d81a00d82a
23fc5491b53c
client_keyshare: da25553da9ac142b36332dbd487713ae6712432fb317a6e00b2b
17525bbe6912
server_private_keyshare: eb7216a0ad73af2e84aeeeeb39a9e3549f0817e1732b
5faffc5e0f5abf269e08
client_private_keyshare: a2582d86bf4476a413caa6ee0d3daf7fb6908909036e
1423170d0072aad0d00f
blind_registration: f349de058878adaf864afedb28cf6a6b0f7083a11c34f9543
9c5cb44edb7fd09
blind_login: 146538c20e42b5182766e71c26d4e3a4d1b9c493f7c94bea0bb4f9d6
31181c08
~~~
#### Intermediate Values
~~~
client_public_key: 60c9b59f46e93a2dc8c5dd0dd101fad1838f4c4c026691e9d1
8d3de8f2b3940d
auth_key: 72c837a116b444f86229d432ea48221327339704fd2451704766bb3d42d
10796a2be4083998a78f31f52f3d2fff6ace6b9c2fa9dae1ce64ee36cc867f6cc9e48
randomized_pwd: 024d0bc2c5e95421951227ee87d8c5488e6dc537b2bf014452edb
714bb98f0ef9590b1cca3345f2a1d0afff79967875306e07326b311662d5975b24e82
07594e
envelope: 71b8f14b7a1059cdadc414c409064a22cf9e970b0ffc6f1fc6fdd539c46
767750a343dd3f683692f4ed987ff286a4ece0813a4942e23477920608f261e1ab6f8
727f532c9fd0cde8ec492cb76efdc855da76d0b6ccbe8a4dc0ba2709d63c4517
handshake_secret: 01d81a6ba7c31a2c7c7ff4dab19db55d1f0290905645004bc2b
b8d703f00e486a34c15095df96d6524901eeac1d6c46d94a2ee390dcc5625c6b0baba
fe40e504
server_mac_key: 5ee8f006713979257342d86a1541545b59e4e628b8be4b2f01438
83cb9ce2cd9b6caded5733919739bd889b9426a03ad7c23db8b26ad13d2ad179e56dd
cfe76d
client_mac_key: 5b14da362ce9eaf3492ad315997911d9db3264f0e22e2a4cfb501
f6f336c4e5e3d448f4c1b558101563c55a31e992aab92459c67231ca68de19ab12470
4ca0f9
oprf_key: 3f76113135e6ca7e51ac5bb3e8774eb84709ad36b8907ec8f7bc3537828
71906
client_public_key: eabdf39b4f22d045f80477d5571bae4c40e13377bcb410c6d8
6d86eab281eb15
auth_key: ca657130e970f04883cb6e1d25414c2e6b790521d2589eedbb28f88c2a0
cd1d47a451af444604838acc7ed0eb06cd15265a8f2008f6c00a01471c30d0dce45e0
randomized_pwd: 46dac5eed750784bf22be60303312d53fd6ec61cc19bec55c136c
3629366b1916e8e6a1b09ad9e079da2aa9ce0cde3aea3f28d835b2f67c8bf6e5139e5
e3cc03
envelope: 36168448f9c5ec75a8cd571370add249e99cb8a8c43f6ef05610ac6e354
642bf72e2cdbb55ab0d0cdfcf1cfb9344d3ccbfbcb1b69f975e2e58f25749214ddb7a
11ec03ed7d3f04f05c0c822bd2a4d6cd61c7911035ce117e34f6bc4d8d27ba95
handshake_secret: 71d30b66205d8f3d35415facfa654c45c778ccb1a1522b0cc38
fe88f0eba0e47e4ffbd13cee0bdf0b4cf4b97fb50417bb799d4cfeb58471abc2302dd
264dbe9d
server_mac_key: 6ce3829a4eb1758bbbb9263da5c989b6060851fcae76d10af1a1a
17a627121cc327ac65add4a93d1f3fb289d4b741481dbcbda570a03d156a0c805e287
487db8
client_mac_key: ce946912e6fa49c11068184bdfb0c1d7cb0bb69d2d4ba15dcdc28
bba18021850d296c5c72fa68848ea4c8927d28065c4807fc8163275f0781bffccca18
72ba31
oprf_key: e4af4ba0d3e3d3340848000b77ab12e736fb1662ffbe529ec92163d37ae
26601
~~~
#### Output Values
~~~
registration_request: ac7a6330f91d1e5c87365630c7be58641885d59ffe4d3f8
a49c094271993331d
registration_response: 5c7d3c70cf7478ead859bb879b37cce78baef3b9d81e04
f4c790ce25f2830e2e18d5035fd0a9c1d6412226df037125901a43f4dff660c0549d4
02f672bcc0933
registration_upload: 60c9b59f46e93a2dc8c5dd0dd101fad1838f4c4c026691e9
d18d3de8f2b3940d7981498360f8f276df1dfb852a93ec4f4a0189dec5a96363296a6
93fc8a51fb052ae8318dac48be7e3c3cd290f7b8c12b807617b7f9399417deed00158
281ac771b8f14b7a1059cdadc414c409064a22cf9e970b0ffc6f1fc6fdd539c467677
50a343dd3f683692f4ed987ff286a4ece0813a4942e23477920608f261e1ab6f8727f
532c9fd0cde8ec492cb76efdc855da76d0b6ccbe8a4dc0ba2709d63c4517
KE1: e4e7ce5bf96ddb2924faf816774b26a0ec7a6dd9d3a5bced1f4a3675c3cfd14c
804133133e7ee6836c8515752e24bb44d323fef4ead34cde967798f2e9784f69f6792
6bd036c5dc4971816b9376e9f64737f361ef8269c18f69f1ab555e96d4a
KE2: 1af11be29a90322dc16462d0861b1eb617611fe2f05e5e9860c164592d4f7f62
54f9341ca183700f6b6acf28dbfe4a86afad788805de49f2d680ab86ff39ed7f76011
9ed2f12f6ec4983f2c598068057af146fd09133c75b229145b7580d53cac4ba581155
2e6786837a3e03d9f7971df0dad4a04fd6a6d4164101c91137a87f4afde7dae72daf2
620082f46413bbb3071767d549833bcc523acc645b571a66318b0b1f8bf4b23de3542
8373aa1d3a45c1e89eff88f03f9446e5dfc23b6f8394f9c5ec75a8cd571370add249e
99cb8a8c43f6ef05610ac6e354642bf4fedbf696e77d4749eb304c4d74be9457c5975
46bc22aed699225499910fc913b3e907120638f222a1a08460f4e40d0686830d3d608
ce89789489161438bf6809dbbce3a6ddb0ce8702576843b58465d6cedd4e965f3f81b
92992ecec0e2137b66eff0b4
KE3: 1c0c743ff88f1a4ff07350eef61e899ae25d7fb23d555926b218bac4c1963071
5038c56cca247630be8a8e66f3ff18b89c1bc97e1e2192fd7f14f2f60ed084a3
export_key: 8408f92d282c7f4b0f5462e5206bd92937a4d53b0dcdef90afffd015c
5dee44dc4dc5ad35d1681c97e2b66de09203ac359a69f1d45f8c97dbc907589177ccc
24
session_key: 05d03f4143e5866844f7ae921d3b48f3d611e930a6c4be0993a98290
085110c5a27a2e5f92aeed861b90de068a51a952aa75bf97589be7c7104a4c30cc357
506
registration_request: ba1a2238a29a33dea928801e0257bd644f34bcc12f3e6ed
eba3a5015b45d6e33
registration_response: 1c5078bb63f7623d65926a6ef82a4ee7d1b62225d5f8a3
59f603475654f4453b583f7bccccbc1907ae1506bac950d08266eb3b33ba452b8df70
61a390ffd736e
registration_upload: eabdf39b4f22d045f80477d5571bae4c40e13377bcb410c6
d86d86eab281eb15ae21afa59b900243876169f04c46a5833b8168cd87ce9e5a5c04b
ea74eb523bdbeab479e62632bb24f6e4a16fa3ae2132fcd2d4ffcb5cafce1cc8394a8
c3eb3436168448f9c5ec75a8cd571370add249e99cb8a8c43f6ef05610ac6e354642b
f72e2cdbb55ab0d0cdfcf1cfb9344d3ccbfbcb1b69f975e2e58f25749214ddb7a11ec
03ed7d3f04f05c0c822bd2a4d6cd61c7911035ce117e34f6bc4d8d27ba95
KE1: c021ab3bca8c7c7949f7090d2af149523c5029d6c5c45b59997f8c306ccbdf75
400ceac0fbfb16005928335518be6f930a113c6c0814521262e17ecc3cdc9f91da255
53da9ac142b36332dbd487713ae6712432fb317a6e00b2b17525bbe6912
KE2: 1aaae8c352e89557d73dd57152f10983ba4871675d5307c71fc8f8d808103707
13573601f2e727c90ecc19d448cf3145a662e0065f157ba524df0d3e56ad62366311e
350706148302b24efbafa041792c5b79e78c43aa24b44c6e81dde926692d9a9095273
212a862729bad5a9e5258e7f1bf656045dc2842d331d183cc7425c1953a5cd8dd3b4e
83638980d0a85a2c2204eb8d3879421a43450d7eed4bd203b99e16526b8933fc46a62
4a1fec3caf6a5eebe2dfe9689b847716b330098638d1a88904fe660061c4fac7e4520
66b8b0f90da7d8d4a19f1cc41fb6fa5479b467d5cc9fd06a5917ab66a6ef5537a6552
5a428f768840d81a00d82a23fc5491b53ca3e00703736229ba774fb92ba77dc2a2236
e408b99cd8b8e2b0fa2a92ac132100f807b3e44ff1c60d3939ac6b6e8719a4ddf2b37
83f4650fce842ea5c63ccc19
KE3: c5cceaabc721066f2332edcc8cb70c49b8930639f31c6f3ebd8b9e232d35462e
a00bb0bcfa0b703d8b20f06d3428ee7089c299829b737f42a32a26519e33e2bb
export_key: 421f6315d5a2dd7d17eb13c596e69a4455b99209264be00181e99dedf
f76d5a5f55e9cc1340a078f8b307c9dcd95d391193b1ebf648c98378871d087620a0b
a2
session_key: fc56461df9021851b65b29169b0666e3af085c217079db4fe4881073
d9796a2a9add0878ec647f841d2e6d8aecb4d3df8fbc13970a1647b743d29fc5cc892
dab
~~~
### OPAQUE-3DH Real Test Vector 2
@@ -134,7 +135,7 @@ session_key: 05d03f4143e5866844f7ae921d3b48f3d611e930a6c4be0993a98290
~~~
OPRF: 0001
Hash: SHA512
MHF: Identity
KSF: Identity
KDF: HKDF-SHA512
MAC: HMAC-SHA512
Group: ristretto255
@@ -152,98 +153,98 @@ Nok: 32
~~~
client_identity: 616c696365
server_identity: 626f62
oprf_seed: db5c1c16e264b8933d5da56439e7cfed23ab7287b474fe3cdcd58df089
a365a426ea849258d9f4bc13573601f2e727c90ecc19d448cf3145a662e0065f157ba
5
oprf_seed: 4f8c9a5c6576fe6cb958f149fec78f4d8a2875bb40615f6f44ecc2fe30
635396b708ddb7fc10fb73c4e3a9258cd9c3f6f761b2c227853b5def228c850fdbf1e
2
credential_identifier: 31323334
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: d0c7b0f0047682bd87a87e0c3553b9bcdce7e1ae3348570df20bf
2747829b2d2
masking_nonce: 30635396b708ddb7fc10fb73c4e3a9258cd9c3f6f761b2c227853b
5def228c85
server_private_key: eeb2fcc794f98501b16139771720a0713a2750b9e528adfd3
662ad56a7e19b04
server_public_key: 8aa90cb321a38759fc253c444f317782962ca18d33101eab2c
8cda04405a181f
server_nonce: 3fa57f7ef652185f89114109f5a61cc8c9216fdd7398246bb7a0c20
e2fbca2d8
client_nonce: a6bcd29b5aecc3507fc1f8f7631af3d2f5105155222e48099e5e608
5d8c1187a
server_keyshare: ae070cdffe5bb4b1c373e71be8e7d8f356ee5de37881533f1039
7bcd84d35445
client_keyshare: 642e7eecf19b804a62817486663d6c6c239396f709b663a4350c
da67d025687a
server_private_keyshare: 0974010a8528b813f5b33ae0d791df88516c8839c152
b030697637878b2d8b0a
client_private_keyshare: 03b52f066898929f4aca48014b2b97365205ce691ee3
444b0a7cecec3c7efb01
blind_registration: a66ffb41ccf1194a8d7dda900f8b6b0652e4c7fac4610066f
e0489a804d3bb05
blind_login: e6f161ac189e6873a19a54efca4baa0719e801e336d929d35ca28b5b
4f60560e
envelope_nonce: 39886c5188df91d7e03ab3f513b828850a017408ffdf4fe072d40
d012f55f6ac
masking_nonce: 983deeb54c9c6337fdd9e120de85343dc7887f00248f1acacc4a83
19d50e29b5
server_private_key: 7f02b3727a18c1d885605e9e09482e22555110f5d2f31a63f
7f8c17f6a985d0b
server_public_key: c0c1fba5133d9b9b5055287de8c8dea9dfbebe10d12ebdf4bd
8ed249886cc67e
server_nonce: c6d04efaee8370c45fa1dfad70201edd140cec8ed6c73b5fcd15c47
7408184fa
client_nonce: e8f5bbbaa7ad3dce15eb299eb2a5b34875ff421b1d63d7a2cfd9096
1b35150da
server_keyshare: 2c3dd46ee4b31250f28ead72fe3d8268ef89d25c9c6318189b9d
04cc729abe51
client_keyshare: 8824e44af3cdc7a29880ff532751b7ccc6a8875ac14e08964942
473de9484f7b
server_private_keyshare: 7f5fbe5a989043f533b588f3c89b21c9dc7991b89ddd
28cde4be79afdb83170f
client_private_keyshare: 9909ef87bfd10d3148a64f98e619251074345b023f19
931b1652c9934a933104
blind_registration: 45075e8ec6743c394e85e3f81ce383ddf78791d163b457fbe
c78c58c0a55050b
blind_login: 6a7637875c6c59544c262523812302dbec1fc73a01abcdbeadfe898e
54dcfe05
~~~
#### Intermediate Values
~~~
client_public_key: 3036af4744effe59eb7ee5db0ebcb653bd4a1c7ad0c56c78af
1288f1e8538d1c
auth_key: 8820ff275662bf91d4ebcca74c9b90913eb3ee8151047926ad754da823e
98800db56a79c68b44d76ad906d26ed8b9e25d8ea862cfc6c2f0da86c623f6a24961a
randomized_pwd: 16decdbba6912903b7ae38de7040a79ebc59c9fbbac04add8a710
0ff8aedbb9530c4e664bd08b2689a607e99923e80563a8379ddfdb37801718ed043fb
7bca07
envelope: d0c7b0f0047682bd87a87e0c3553b9bcdce7e1ae3348570df20bf274782
9b2d24117867ef8aa569ed6fa8ad1b3749b0df472d431ce92da7775e44623d6c36f7e
9396d16ac58060704e9d42b37f09642ed7ee49008b4b81dc65d282ddcec0ab97
handshake_secret: eef528fc4e46c387ef2bd68c06eb135ea18d743bcb632233594
b213eb4eefaa4010b0f00785a204c77456f9007d8f7645fdc0c6795f486150a53fe17
e6608179
server_mac_key: ff6eeffbe0e88a966bdb39fa4fc933a488c0b802f913a7a6950d1
c2eda0fc6acce6fdf7b060aa0be02efddb5a127e4dd893d3666e9b54d6fd6c85f52c9
13138e
client_mac_key: 4babec778469dfed06cd89c6673b8511f337e27ce565a2fd68cb6
2a04df035fabc2097ba33018a4cd858dc399a0563950d7ce8ffe26c223328023e4c70
a16c8e
oprf_key: 531b0c7b0a3f90060c28d3d96ef5fecf56e25b8e4bf71c14bc770804c3f
b4507
client_public_key: ee597ed63b18ccc6e5b77ae703e3bd4cfd574650284b21c64e
c16926da7e2851
auth_key: 0fa176059cf53854c38c9841f8c5d5a756b297528729b4a4b5b7894eec9
7b1d9dacb29c337a48cbc276db45452adaeb77e1b4f4990b8d0ef4c03413d3af4a274
randomized_pwd: 15490043fad1f612a0cd72f7571f720f2e5bff138b6c0f9a3f8c7
feb028761ca6bb602028e4228cbc1bcd9b1a8dc3500a7701d9351864595a765ba6a4c
c1b2f3
envelope: 39886c5188df91d7e03ab3f513b828850a017408ffdf4fe072d40d012f5
5f6acef003030d52697e8bfd717c1db8c5ff7a2c0112d7484f1a567c942612c718b5f
010978c806fdaf6892c7ec16d50f80fa12e33daf798e96a71064c72942478bc6
handshake_secret: 540feab4c07eb9263b828c4c20a6138adb46541de1633da67ce
1393a03c1f5e04167a8b0336b45e8aa2a1c3d8c9452f9aed7b0d54545adfcaaa0aaca
35b0a573
server_mac_key: d8775d094511b77e17f4433d6cbc53f4b34b69db34a16c8feeffe
573f70175fb0e16f61ab8ccfddf3599f46ccaa95898b8cefc24c3e73d8a900ea4f0c6
bdbf86
client_mac_key: b7e1601a00b647a559a25a2f30eec8f1105ff51dbebcaa506d943
ec2032c0d85c07673c3784c1008493b8a794a1cd2ef8d4972e9472a665c3abee685f2
03f629
oprf_key: 671cd2624e173c4df9ff81295c41007bf64fe10dec3cf9fd90365040ba6
e290c
~~~
#### Output Values
~~~
registration_request: d81b76a8a78b8b0758f7ceffaa5c3cb4ac76c0517759ad8
077ed87857e585f79
registration_response: a48835aa277db6d7d501addbd431100a548867e3f1ee6f
d6ae4aacd817a66e4c8aa90cb321a38759fc253c444f317782962ca18d33101eab2c8
cda04405a181f
registration_upload: 3036af4744effe59eb7ee5db0ebcb653bd4a1c7ad0c56c78
af1288f1e8538d1cedbc931daab2331b192808768f149499a04c6dffa4eae66a6e0d3
399547c8b9e9a743a3cd20f08ce07adf84b27c9ca879d730bcc41823cbd60411fbde6
c7faf2d0c7b0f0047682bd87a87e0c3553b9bcdce7e1ae3348570df20bf2747829b2d
24117867ef8aa569ed6fa8ad1b3749b0df472d431ce92da7775e44623d6c36f7e9396
d16ac58060704e9d42b37f09642ed7ee49008b4b81dc65d282ddcec0ab97
KE1: 8a32b2985d824b0e42b7d3c5091774acd64386f8a762678422f0b5cbabeda12b
a6bcd29b5aecc3507fc1f8f7631af3d2f5105155222e48099e5e6085d8c1187a642e7
eecf19b804a62817486663d6c6c239396f709b663a4350cda67d025687a
KE2: da642966461f20090d1e8d6b1f63ea70dc94fc6e0ea0bad46d011e906cc03c03
30635396b708ddb7fc10fb73c4e3a9258cd9c3f6f761b2c227853b5def228c8594543
768891810f779604eb9e07dcd37635def358e2f4531f464a4e0b3726c150d7872785c
9b6a22f00fe3527d9e938d4b503047484723585ee390925ab9d97e30f0860caef1243
0459d8ca24e5ff1a2029c363ed00f2f3cd09ead304f217290d8915183c2667959d420
175bfca3bbec3d603844ca0d5b5892888f0de19dc3b83fa57f7ef652185f89114109f
5a61cc8c9216fdd7398246bb7a0c20e2fbca2d8ae070cdffe5bb4b1c373e71be8e7d8
f356ee5de37881533f10397bcd84d354454f08b6c37449cf70cac0babb85d5302dc59
a0ae16b2e54865642b8bb985f48444d49ad89a6a0707dd46c2d53b8b73dff46ac7176
a6167f39818f605e3c39d22c
KE3: b9487ca4b1308ce593d765739992e19c10d63c47f4f2d3eb4bfd0ffa101b6959
114b4f6051305652e0f48ad219a696f3f12fad685f8d6e371dddc10fda2ec87e
export_key: 258d525e93a07c17dd9e41afc4fbfe316152afad02c54a6d3d201fd77
487903143ca2ef27718a1e48b2ade5dc614b027b8a46fd334b701df5d385aaef2b1bd
16
session_key: 021c0c3f15940f3e898f2925949aa8bc262248fae7b9ed7d33a2900e
866548ed24760c2244a2c14bfc196a00ffd66ebf54839850b101bc5e617c37ccad45a
68a
registration_request: 3e054b6596da6f0da124baa2c095a29c3a6b48571aae699
96f0e079067ac4172
registration_response: c45804cfaa87737d2309164bf7fc0567358c9fef629afd
47a17440d7d43ee71ac0c1fba5133d9b9b5055287de8c8dea9dfbebe10d12ebdf4bd8
ed249886cc67e
registration_upload: ee597ed63b18ccc6e5b77ae703e3bd4cfd574650284b21c6
4ec16926da7e2851dffc6e3207fd7ad90fb974e8f35d17a1f60c0fc9e6cbc49375917
556413a1dac4f9c719e6f63055055276c46d5a308dd4c3f07ca3061176a7ef9200b9c
4a451239886c5188df91d7e03ab3f513b828850a017408ffdf4fe072d40d012f55f6a
cef003030d52697e8bfd717c1db8c5ff7a2c0112d7484f1a567c942612c718b5f0109
78c806fdaf6892c7ec16d50f80fa12e33daf798e96a71064c72942478bc6
KE1: 7002a52fa6c2916c49c1fff952e818e458c7f7799139b243918c97758f463a47
e8f5bbbaa7ad3dce15eb299eb2a5b34875ff421b1d63d7a2cfd90961b35150da8824e
44af3cdc7a29880ff532751b7ccc6a8875ac14e08964942473de9484f7b
KE2: 6e78c98f76160c8cb4df1d0cf3fa038a32b900a1f208901b69b7fb695c28001d
983deeb54c9c6337fdd9e120de85343dc7887f00248f1acacc4a8319d50e29b5f9f61
75f37e8a0718398038dd5159f049f6e7f96be9754907827de30738109889169846cea
a7eee3a6109334a84fd6ec3bb5d462d5b87359f1d909ca5e9b0e7b43000dba44fb4df
9f1629bbe20dd92de2972072ac4ddae968c2dadba8614afa8f0f29cd67ba8e18ced81
49290e67f772f4ff6984a1fd4f163dc2325841eb723bc6d04efaee8370c45fa1dfad7
0201edd140cec8ed6c73b5fcd15c477408184fa2c3dd46ee4b31250f28ead72fe3d82
68ef89d25c9c6318189b9d04cc729abe513ce37681b1db692d3f47e486c31c22e4390
95dc9a4155dca22a5d2e6b8a517f2f7a5d8cb0df01673030683f72a0f62bb0941350c
68d9dc7c449aaa0140bba686
KE3: 4f74844e0c86abbc9189cb03f57e807e2034bdd07f17e67233010a6cacd9ef11
0f153418cafca68e0f8f4f48234d705089f64a7b47bacd0abea3f2a574da5629
export_key: 5c54270bf510936861ea01444d70a7204a6fe1de33ca9613d41e02d30
0d1e6a90b15cabee67a0129629f6b3aac173e1483dfc43457d72fe6df6524a639f89a
1f
session_key: 391db76593cd7f7766b68de34f99b8c0253e86914dbb18177c011d3e
05d611a3a2d0ef7a2b58468c1549444f81a60afbf635d2f6f878fc63061ecc94cfb27
ba8
~~~
### OPAQUE-3DH Real Test Vector 3
@@ -253,7 +254,7 @@ session_key: 021c0c3f15940f3e898f2925949aa8bc262248fae7b9ed7d33a2900e
~~~
OPRF: 0003
Hash: SHA256
MHF: Identity
KSF: Identity
KDF: HKDF-SHA256
MAC: HMAC-SHA256
Group: P256_XMD:SHA-256_SSWU_RO_
@@ -269,86 +270,86 @@ Nok: 32
#### Input Values
~~~
oprf_seed: 77bfc065218c9a5593c952161b93193f025b3474102519e6984fa64831
0dd1bf
oprf_seed: 380d78c283bf98e26334038293e47865922a3b54d3722d8e9ced1c8729
c42f5a
credential_identifier: 31323334
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 2527e48c983deeb54c9c6337fdd9e120de85343dc7887f00248f1
acacc4a8319
masking_nonce: cb792f3657240ce5296dd5633e7333531009c11ee6ab46b6111f15
6d96a160b2
server_private_key: 87ef09986545b295e8f5bbbaa7ad3dce15eb299eb2a5b3487
5ff421b1d63d7a3
server_public_key: 025b95a6add1f2f3d038811b5ad3494bed73b1e2500d8dadec
592d88406e25c2f2
server_nonce: 8018e88ecfc53891529278c47239f8fe6f1be88972721898ef81cc0
a76a0b550
client_nonce: 967fcded96ed46986e60fcbdf985232639f537377ca3fcf07ad4899
56b2e9019
server_keyshare: 0242bc29993976185dacf6be815cbfa923aac80fad8b7f020c9d
4f18e0b6867a17
client_keyshare: 03358b4eae039953116889466bfddeb40168e39ed83809fd5f0d
5f2de9c5234398
server_private_keyshare: b1c0063e442238bdd89cd62b4c3ad31f016b68085d25
f85613f5838cd7c6b16a
client_private_keyshare: 10256ab078bc1edbaf79bee4cd28dd9db89179dcc921
9bc8f388b533f5439099
blind_registration: d50e29b581d716c3c05c4a0d6110b510cb5c9959bee817fde
b1eabd7ccd74fee
blind_login: 503d8495c6d04efaee8370c45fa1dfad70201edd140cec8ed6c73b5f
cd15c478
envelope_nonce: a994c5c01c1855151c467aa331d70f59d9bb63e9afa1e314672a9
c7c6e460d5d
masking_nonce: 848bdf20ed725f0fa3b58e7d8f3eab2a0aace261f61193c7f85709
e9794357fb
server_private_key: 63b448daf85853343c35ec32253326810d0d88f0936c712d3
e901b42cb792f37
server_public_key: 02217c73e50ebf9f8ea0e080a2ecbaf594ca7d5828984e8d5d
455d42ac8531e4f1
server_nonce: 84ff1f2a310fe428d9de5819bf63b3942dbe09f991ca0cf545e33a8
fa17ab9c6
client_nonce: 72721898ef81cc0a76a0b5508f2f7bb817e86f1dd05ca013190a686
02c7af25f
server_keyshare: 0212d788fc5776bd88b7aa01e72ad0d147d8c8a3d9e47d94ca79
10e29f11297b34
client_keyshare: 03a51c7c3d3a69f5217c0f8de4efa242b0cf4ba35cc67c820e57
b69e7a4f53cd69
server_private_keyshare: b3c02a66ef9a72d48cca6c1f9afc1fedea22567b0868
140b482123652ea37c7f
client_private_keyshare: 5d25f85613f5838cd7c6b1697f27bb5e8018e88ecfc5
3891529278c47239f8ff
blind_registration: 7b5d31d5e3ebdb127f92416a3cbcda76e24b2be8d08c79074
a5520292916911b
blind_login: 47401b35db40bdc28cd90b502b3390d3cfea5814c105ca7b460cdf8a
7012c76d
~~~
#### Intermediate Values
~~~
client_public_key: 030f9b896400f6efd57c69a41b05ffedc456f041cb54a2ab56
8f5595c586070708
auth_key: 4e01ca008eb4f84b8cee1b84b3abfaeb4f2c7fb41d2c8ad0f4fe89d74e6
f0fc5
randomized_pwd: c741d0a042e653ee4ccf24648aee4e3b4c500cc28feb3a72eea0f
24f69006693
envelope: 2527e48c983deeb54c9c6337fdd9e120de85343dc7887f00248f1acacc4
a83190f798f947d61d060cb102e5eeb9bd698bec5d1e1b6788860ec7c2d2e590121b0
handshake_secret: 78bedd3ee950e1795ddeca4e0d4f4267a971ace52e6f876d9b2
c8a349ec2be2a
server_mac_key: c8e62b9aee6ae6e2199db70f16631a302e9269f27d5f6ef954572
f8ca05f8d01
client_mac_key: 31e3581fcfbb7d6b10b5cf78399fb844ab7afe42cf94f8b72178a
1618711bb25
oprf_key: d153d662a1e7dd4383837aa7125685d2be6f8041472ecbfd610e46952a6
a24f1
client_public_key: 030068ab6e722bb6593382a86becf60ed8290650402470c21d
c90bd0ea9da0f19b
auth_key: 8813ac116d6d46df161221d53ba5ec3bd68baca857c9ee8e3eecb7fc162
08fe0
randomized_pwd: f19aa5337d0ef8c7f728787df75f9abb6a0d06c854960d0646844
c8d68dcc3f2
envelope: a994c5c01c1855151c467aa331d70f59d9bb63e9afa1e314672a9c7c6e4
60d5d6465561f86591334921a1c4402ecbfab336a9945ce398848eff0990b44f4b6a0
handshake_secret: 019dee3711ac01beb7674207a7ed2814f67658d10c52cd71d71
6b87e4204d9a0
server_mac_key: 922a759956ae32addb64e55343677c08538eeddcba9a8b4e861f2
1e9c3849d5c
client_mac_key: ba64564e701ed14b35c6c0d124f6dc98ee1a138c40b4267079363
7419654cd28
oprf_key: 7ad47c7aa69dc3700c91449472d4bd09b15543683560870c7dd21b78398
0f7bf
~~~
#### Output Values
~~~
registration_request: 037aa042e317344246ebb94c38fe9989e01f7265413ade1
f7ffaa706a81f58cf19
registration_response: 03c0b3e621cadf1a56aa48305e3101efedb6248157708c
7ba70af396fa62d29bf7025b95a6add1f2f3d038811b5ad3494bed73b1e2500d8dade
c592d88406e25c2f2
registration_upload: 030f9b896400f6efd57c69a41b05ffedc456f041cb54a2ab
568f5595c5860707085e76cb3c849637cfd386d9cc762050a476a58da7c24b8a39084
4689d8d6482bd2527e48c983deeb54c9c6337fdd9e120de85343dc7887f00248f1aca
cc4a83190f798f947d61d060cb102e5eeb9bd698bec5d1e1b6788860ec7c2d2e59012
1b0
KE1: 0320fee3e9c08dfd30d00ce524cee6595d9bd7387629efa0cb9eba1ba82ec465
13967fcded96ed46986e60fcbdf985232639f537377ca3fcf07ad489956b2e9019033
58b4eae039953116889466bfddeb40168e39ed83809fd5f0d5f2de9c5234398
KE2: 03f629c1a3a5a3dc83af63c52d3bd58bbd78d5054caee7731381e967a7c381fa
20cb792f3657240ce5296dd5633e7333531009c11ee6ab46b6111f156d96a160b22c1
7f819537c821604229b8c07798c56f14b5104729a1336f153510f58ea921758f8a486
13ec4ee3e5675dc8be14776c0bb6458bf0d3f76dd24af8b43b49c8fbfcb5229c0bbe3
a37c440bdca76ce404b215ceb8842e95e81138416e161ea02c2648018e88ecfc53891
529278c47239f8fe6f1be88972721898ef81cc0a76a0b5500242bc29993976185dacf
6be815cbfa923aac80fad8b7f020c9d4f18e0b6867a1764573de6cf3b1b7737e7e56a
181fe0ec8754940adce33c4712bd35e7e9e08e7c
KE3: d9108b70e4ff4955911162ed1cec6df65c880aad120bbf10fd7f32eea71b1a04
export_key: 086cd26a64f469f2d22ab0b5f0c524b10321c4019018b004d0f8383c0
24059be
session_key: 36d1125dbf5ea45568e586645841efb6c5f53d357cdffb79edf1bb8d
b0b843a9
registration_request: 0347ed9a28ccf8baae3b312837378fbd4f994bf601a2522
0bc404102bd1cd9e4a0
registration_response: 027818306df41ac75916146c9d0f06d842e83f232a61da
40b660ee5d670cf77b8202217c73e50ebf9f8ea0e080a2ecbaf594ca7d5828984e8d5
d455d42ac8531e4f1
registration_upload: 030068ab6e722bb6593382a86becf60ed8290650402470c2
1dc90bd0ea9da0f19b4344705e052a843c4cced8ce7c87478555cff1323fc64063301
9423a19455e53a994c5c01c1855151c467aa331d70f59d9bb63e9afa1e314672a9c7c
6e460d5d6465561f86591334921a1c4402ecbfab336a9945ce398848eff0990b44f4b
6a0
KE1: 0226bc3aeccce9c813eaec852599fe76eafe611467a054e738441d4a3b7922aa
ba72721898ef81cc0a76a0b5508f2f7bb817e86f1dd05ca013190a68602c7af25f03a
51c7c3d3a69f5217c0f8de4efa242b0cf4ba35cc67c820e57b69e7a4f53cd69
KE2: 02745cdd4d8336647d5de1715fff6a639b8799e3c6ad951faae59203f4bd97b7
89848bdf20ed725f0fa3b58e7d8f3eab2a0aace261f61193c7f85709e9794357fbd6b
dad9096bf4fa824a2e78e8f36209c9a7fbac3ccd0d56c2b6ea9a0cca3ec7691594eaa
bafbcb4b8b32b65dd8e9fe7e903d9639d67787a2ef7d88d06d257f791eaa59fb7a8b3
d8ec4186c6707b2942dc6ef990e8b958d79c27587f73d371a7cc884ff1f2a310fe428
d9de5819bf63b3942dbe09f991ca0cf545e33a8fa17ab9c60212d788fc5776bd88b7a
a01e72ad0d147d8c8a3d9e47d94ca7910e29f11297b344439d99f9408b8047da08d4d
6ea017e571a26a9a1d80440ed9e4793684dd463d
KE3: a453c142682a3247cea48735543911b07c7498c1c3a7908b8b60c8e1fb90adf1
export_key: feda4a04aa974c1ef9c9d047eb2909ee175851f1c0f5ba37929673f0e
46235e4
session_key: 3585c6e3365b8ad1daa5fd7c3878de2930e6d844bdc8fb13f09debce
b82fde22
~~~
### OPAQUE-3DH Real Test Vector 4
@@ -358,7 +359,7 @@ b0b843a9
~~~
OPRF: 0003
Hash: SHA256
MHF: Identity
KSF: Identity
KDF: HKDF-SHA256
MAC: HMAC-SHA256
Group: P256_XMD:SHA-256_SSWU_RO_
@@ -376,86 +377,86 @@ Nok: 32
~~~
client_identity: 616c696365
server_identity: 626f62
oprf_seed: 482123652ea37c7e4a0f9f1984ff1f2a310fe428d9de5819bf63b3942d
be09f9
oprf_seed: b19c2b0ccd8ba22218b6c772e19c4174dc8f436b55b69a4fd701d69873
dacfeb
credential_identifier: 31323334
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 75c245690f9669a9af5699e8b23d6d1fa9e697aeb4526267d942b
842e4426e42
masking_nonce: 5947586f69259e0708bdfab794f689eec14c7deb7edde68c816451
56cf278f21
server_private_key: c728ebf47b1c65594d77dab871872dba848bdf20ed725f0fa
3b58e7d8f3eab2b
server_public_key: 029a2c6097fbbcf3457fe3ff7d4ef8e89dab585a67dfed0905
c9f104d909138bae
server_nonce: 581ac468101aee528cc6b69daac7a90de8837d49708e76310767cbe
4af18594d
client_nonce: 46498f95ec7986f0602019b3fbb646db87a2fdbc12176d4f7ab74fa
5fadace60
server_keyshare: 022aa8746ab4329d591296652d44f6dfb04470103311bacd7ad5
1060ef5abac41b
client_keyshare: 02a9f857ad3eabe09047049e8b8cee72feea2acb7fc487777c0b
22d3add6a0e0c0
server_private_keyshare: 48a5baa24274d5acc5e007a44f2147549ac8dd675564
2638f1029631944beed4
client_private_keyshare: 161e3aaa50f50e33344022969d17d9cf4c88b7a9eec4
c36bf64de079abb6dc7b
blind_registration: 9280e203ef27d9ef0d1d189bb3c02a66ef9a72d48cca6c1f9
afc1fedea22567c
blind_login: 4308682dc1bdab92ff91bb1a5fc5bc084223fe4369beddca3f1640a6
645455ad
envelope_nonce: 3f1640a6645455ac63788ee075c245690f9669a9af5699e8b23d6
d1fa9e697ae
masking_nonce: f1029631944beed3594c283c581ac468101aee528cc6b69daac7a9
0de8837d49
server_private_key: 31ae68b478bfc59f5ef534d4e0092e8ef1bfe338aaa4b65c0
563d42fe20626a0
server_public_key: 025cbe5babe2fb2b94ee2527bcdc66fd3a62f4b7e724bdb3ef
4a41cfee527434f3
server_nonce: df174426b40de97e2fabc448b1f4ab66a1a3149df447696d2838463
8319c3819
client_nonce: a2912bab9b6a62cddf7d5e3209a2859e5947586f69259e0708bdfab
794f689ee
server_keyshare: 02ad94bd9a2bb46d8e8ea26ae480a24e2825f58560a20d583a3c
c5078849bdfb8b
client_keyshare: 038744dec9da18441e1ef78ff9b2e5d62c713e56eee7aa326a9b
e577365f919d6c
server_private_keyshare: 711c04899739c0620dc94323d026011ac6def373c257
5400d4018ae26bb2437c
client_private_keyshare: 708e76310767cbe4af18594dfcd436216c2658300d05
18d56d002be476bd06c8
blind_registration: b4526267d942b842e4426e429d05ea84aa6ab34552f0c4a3b
9efdcacbf50daec
blind_login: 12176d4f7ab74fa5fadace604308682dc1bdab92ff91bb1a5fc5bc08
4223fe44
~~~
#### Intermediate Values
~~~
client_public_key: 03ce71710d0d366e44e4a7e92cb111fc41353d4244cac1ce4d
8a622acaab9effc6
auth_key: b894fa35f63413029fcc70e80a0d1b59d1c90c3c255bfb11cf7b58fb136
d2aee
randomized_pwd: 0588794becaf8f5fee7921cb467e4ce8b3c048e7b42d815ed306d
ef278c231d3
envelope: 75c245690f9669a9af5699e8b23d6d1fa9e697aeb4526267d942b842e44
26e42cb65c94629db9811649cd4f3ff92e5d2c67f7486203ea5e471f2655f363f9f19
handshake_secret: 8a2547abef351fc1f94fb19a886c2e5ca16aba3b2bfe0b4a8cc
086dd47b62c08
server_mac_key: fa7c99e15ca1036738b9b48799515be78e471a2d06c3c3920d6a3
703d11c0360
client_mac_key: d480fde6de5e91a08179d9780bf6db0d1b959ae2fa394c09acdc6
07b993410c2
oprf_key: f14e1fc34ba1218bfd3f7373f036889bf4f35a8fbc9e8c9c07ccf2d2388
79d9c
client_public_key: 02bef9b16c148b03218e5f8b01a4b52d5cea4a51ddbc76743a
13ba2fa5d1631b33
auth_key: 6dd41a206a9f6a75e02e80e7bb4e696ee2ba68e01e1f96c65e1afc9556a
e1ec8
randomized_pwd: 95847555e29a90ecd2af4e26343be5c65e1c347f1d921be48ba9d
f4e61fad23d
envelope: 3f1640a6645455ac63788ee075c245690f9669a9af5699e8b23d6d1fa9e
697aebc8f31f964da8a9c11a21b359f7522ae50bc02c85362e7dbf051bdf3bf113d98
handshake_secret: 19b7cd9abb29842a0786aec00a574d29f6080cf128840c4867e
2077ba430b621
server_mac_key: 700c2b8c1797a44829e511aef4c66a49ea43aa5ef2847e4993946
798d8d7cbdf
client_mac_key: dfc3af348aa8baf3e95eb904fdfdb11cf8606b961f14dfd5d6881
7658b4d7178
oprf_key: 0a663cda294cc97edada43ff06235a23ac53bf55c439ecc664c01e44738
74e65
~~~
#### Output Values
~~~
registration_request: 02baa002c856f4b0d49542dcb1391f240f836178702f835
819fd221bcf9b6e9eec
registration_response: 03864f4590c09b4c4155f0cbb731c5aab554ab1bc930c3
28e7a58bd6227933d54f029a2c6097fbbcf3457fe3ff7d4ef8e89dab585a67dfed090
5c9f104d909138bae
registration_upload: 03ce71710d0d366e44e4a7e92cb111fc41353d4244cac1ce
4d8a622acaab9effc66c5d2844e32ed930c56080fa523c15ec6d85f7db1bbd02c4692
14b31e27f6c5775c245690f9669a9af5699e8b23d6d1fa9e697aeb4526267d942b842
e4426e42cb65c94629db9811649cd4f3ff92e5d2c67f7486203ea5e471f2655f363f9
f19
KE1: 038469dadcb23317fa577317079c82bad1e20be41c783cd0ecad6bef3de1b16b
1446498f95ec7986f0602019b3fbb646db87a2fdbc12176d4f7ab74fa5fadace6002a
9f857ad3eabe09047049e8b8cee72feea2acb7fc487777c0b22d3add6a0e0c0
KE2: 036297ebd0b53dabaae6377cb1c3ba1bdd942a67a5ce019b363f26cd11ae3707
ac5947586f69259e0708bdfab794f689eec14c7deb7edde68c81645156cf278f21308
4ce22d007db399a17af864b5ea826f4086f3d477ce236cacf7867de174692940b103b
367ccb8b5aee6ef352079bf95c5961442cf400432de4d904815d1a8a20f64f3e8447b
82c27f4c9b798769db0fb5ab8d29ea0ee54c1e371105388a7ae7c581ac468101aee52
8cc6b69daac7a90de8837d49708e76310767cbe4af18594d022aa8746ab4329d59129
6652d44f6dfb04470103311bacd7ad51060ef5abac41bfa6b8e732462d3de6bdb3ef3
edcf4595b478a6704d578fde4eaf922e1c1e8504
KE3: cd11b70f1ed59d101ec20a73745d3d654c3772236ed2c365a730ef8ee51da6d2
export_key: 8e1eb57bcde2d58d805b16fa045811679c68b0ec2817b9ac61786786a
9032837
session_key: b1f3da97388d6171719c3e2281e88da75b68d6945189f460db841cc6
92f7e164
registration_request: 024cd26832a141c12564716b57b3101d281193c3a2cfaf4
b4d0217b98c69a6e356
registration_response: 034b85dfb783b81cfdcc2255b6ba440479439c17e5f566
690de0dff23ab08bb153025cbe5babe2fb2b94ee2527bcdc66fd3a62f4b7e724bdb3e
f4a41cfee527434f3
registration_upload: 02bef9b16c148b03218e5f8b01a4b52d5cea4a51ddbc7674
3a13ba2fa5d1631b33f8295762da035ff51f6ae4c07fac29e73b900f39a6be5a222d1
43e466282bff13f1640a6645455ac63788ee075c245690f9669a9af5699e8b23d6d1f
a9e697aebc8f31f964da8a9c11a21b359f7522ae50bc02c85362e7dbf051bdf3bf113
d98
KE1: 03ff69ee0b845955eafc817acf721fdecccc94977c4aa0841ec33bf5060375e3
a4a2912bab9b6a62cddf7d5e3209a2859e5947586f69259e0708bdfab794f689ee038
744dec9da18441e1ef78ff9b2e5d62c713e56eee7aa326a9be577365f919d6c
KE2: 026c5dfb5840f9e18b49a2553083bf600b23d73a5352a289223d2a1175d36c9f
b0f1029631944beed3594c283c581ac468101aee528cc6b69daac7a90de8837d49b76
72e17bcd95b17b4d599321921a0ff1d3783624edb14480c018bf39e7a7bab84752a79
7ced451076a5542cf5b0b8433d2b8cd5ceaf9ef7c5f9c1ac13a3e9ff6242362de7710
c5106109ea6a6889388a62a44c932e225c18d649bb44df09b0fffdf174426b40de97e
2fabc448b1f4ab66a1a3149df447696d28384638319c381902ad94bd9a2bb46d8e8ea
26ae480a24e2825f58560a20d583a3cc5078849bdfb8b3d44038b2e740b28519d83f3
8b58cfc221a4421bca2eb74efd05f5c31b34190b
KE3: 6ad96f7b8b167c3482babae788482ddd2ef417eff9ad5617ae49f6c35613b723
export_key: 7284190bd6a6e175cf38846f1374b5f81a481200f774482d89bdb93e0
3674f15
session_key: 4114f3f9ddb7d6f84fc479ab1cbf2e6470540e814b75329661d22fc5
5a8eadff
~~~
## Fake Test Vectors {#fake-vectors}
@@ -467,7 +468,7 @@ session_key: b1f3da97388d6171719c3e2281e88da75b68d6945189f460db841cc6
~~~
OPRF: 0001
Hash: SHA512
MHF: Identity
KSF: Identity
KDF: HKDF-SHA512
MAC: HMAC-SHA512
Group: ristretto255
@@ -485,47 +486,47 @@ Nok: 32
~~~
client_identity: 616c696365
server_identity: 626f62
oprf_seed: 98ee70b2c51d3e89d9c08b00889a1fa8f3947a48dac9ad994e946f408a
2c31250ee34f9d04a7d85661bab11c67048ecfb7a68c657a3df87cff3d09c6af9912a
1
oprf_seed: 28885f5b834484836667b5ffb0ecf900c07c55d70e9894af0231f52c54
dd29cccdae5fae5b60c92fa3cd7e6f042429c7c9e946f5351292fa08f4e99e395c30a
9
credential_identifier: 31323334
masking_nonce: 7cb33db5ba8082e4f4bfb830e8e3f525b0ddcb70469b34224758d7
25ce53ac76
client_private_key: 21c97ffc56be5d93f86441023b7c8a4b629399933b3f845f5
852e8c716a60408
client_public_key: 5cc46fdc0337a684e126f8663deacc67872a7daffc75312a1d
6377783935f932
server_private_key: 030c7634ae24b9c6d4e2c07176719e7a246850b8e019f1c71
a23af6bdb847b0b
server_public_key: 1ac449e9cdd633788069cca1aaea36ea359d7c2d493b254e5f
fe8d64212dcc59
server_nonce: cae1f4fee4ee4ba509fda550ea0421a85762305b1db20e37f4539b2
327d37b80
server_keyshare: 5e5c0ac2904c7d9bf38f99e0050594e484b4d8ded8038ef6e0c1
41a985fa6b35
server_private_keyshare: a4abffe3bef8082b78323ea4507fbb0ce8105ca62b38
1919a35767deaa699709
masking_key: 077adba76f768fd0979f8dc006ca297e7954ebf0e81a893021ee24ac
c35e1a3f4b5e0366c15771133082ec21035ae0ef0d8bcd0e59d26775ae953b9552fdf
bf2
KE1: 88303c5318f93d39bb8afde6df62593869ba4eec265b980e3843c013401e6c5a
8837b6c0709160251cbebe0d55e4423554c45da7a8952367cf336eb623379e80dae2f
1e0cd79b733131d499fb9e77efe0f235d73c1f920bdc5816259ad3a7429
masking_nonce: 59d26775ae953b9552fdfbf2ab6f469f2f153f9a88aacb7ed434ae
d9fd7ac1ab
client_private_key: 11e4c3344def24f8f55f46f9b72584b36ce931e2a11299afc
6093dff0fbf470f
client_public_key: 020693a36a55d62c38bd2d5f1aaeac2a918e90e1df44a12f48
ce800f7f6e5764
server_private_key: f5002870ce2c5117d0ada53bf11fd7144f72510098b8d477f
ba67a07e5d1640b
server_public_key: 463499017daf13c3915d866656576a8920e15aaf860568d68d
4e1edbc5452802
server_nonce: 7954ebf0e81a893021ee24acc35e1a3f4b5e0366c15771133082ec2
1035ae0ef
server_keyshare: 42a889e6b6d90e31ce452e2ecf4d14ec0c5f5205981d828ae380
90fdcae8bc25
server_private_keyshare: 8d39667010ba488071c889447a547931809e3723b66e
33cf672395a8b48b980a
masking_key: 1bad1c8b6ad879e348e15bd698ee70b2c51d3e89d9c08b00889a1fa8
f3947a48dac9ad994e946f408a2c31250ee34f9d04a7d85661bab11c67048ecfb7a68
c65
KE1: 943a149cf304878367fa2dce5cb30eac23cfd1358e5cc0efdbd4361a9e7bd72d
c26fead2a8b3d5910e25fd29402530b5c7e852585f843f3b939993624b8a7c3b58106
2b0e8e90db4798adbb49581f016034e0855b6d6199aceb56a71c9bd4866
~~~
#### Output Values
~~~
KE2: 8a003351892efcf8615128a241e2bf091433fab5a080d7512b156f53e8602a20
7cb33db5ba8082e4f4bfb830e8e3f525b0ddcb70469b34224758d725ce53ac76094c0
aa800d9a0884392e4efbc0479e3cb84a38c9ead879f1ff755ad762c06812b9858f82c
9722acc61b8eb1d156bc994839bf9ed8a760615258d23e0f94fa2cffadc655ed0d6ff
6914066427366019d4e6989b65d13e38e8edc5ae6f82aa1b6a46bfe6ca0256c64d0cf
db50a3eb7676e1d212e155e152e3bbc9d1fae3c679aacae1f4fee4ee4ba509fda550e
a0421a85762305b1db20e37f4539b2327d37b805e5c0ac2904c7d9bf38f99e0050594
e484b4d8ded8038ef6e0c141a985fa6b35ad4627117ba6a8cfe2a7c9d100800a62c84
aacc83ed786d722921ee7037abf71b4af7381cdc3d40c4d9e4fc9f6dc2bb2fc15c8e3
aa9eca8a83332841dda4524f
KE2: d0b9756ee8cdf900c4120b84b2fcb9c1961b4272fa7d393a33ffa273587f547a
59d26775ae953b9552fdfbf2ab6f469f2f153f9a88aacb7ed434aed9fd7ac1abd4709
ea9ca3ff1bd89374fc6132b7c027593dc7f0ce02da216dde6e90c9a75da99aea9e1e6
c8de0cdd29d54df90584fa83be96c22436b80aed30ea658c79c40cee00730b9d866c2
db24145be6911b530631f5e279ee3fb0b801c3d0c0c3c7de54c745f219fde845a5b9c
415facd45b670dea221104a2a73dab32a0cd951d20a67954ebf0e81a893021ee24acc
35e1a3f4b5e0366c15771133082ec21035ae0ef42a889e6b6d90e31ce452e2ecf4d14
ec0c5f5205981d828ae38090fdcae8bc258ce81724ca613428f82a6f9376f03904f34
dd85794caaaafb55abedfddd35e785e5f7543a8b52964b290869bdd9b786d2c412e50
72784ee403eee9acfa8a5b9e
~~~
### OPAQUE-3DH Fake Test Vector 2
@@ -535,7 +536,7 @@ aa9eca8a83332841dda4524f
~~~
OPRF: 0003
Hash: SHA256
MHF: Identity
KSF: Identity
KDF: HKDF-SHA256
MAC: HMAC-SHA256
Group: P256_XMD:SHA-256_SSWU_RO_
@@ -553,42 +554,42 @@ Nok: 32
~~~
client_identity: 616c696365
server_identity: 626f62
oprf_seed: f7664fae89be455ee3350b04a85eab390b2dc63256fbd311d8de944b45
b859e6
oprf_seed: 94384ca183c8e6f639ab29b5d2a81ef4305df9a67cb33db5ba8082e4f4
bfb830
credential_identifier: 31323334
masking_nonce: 21cd364318a92b2afbfccea5d80d337f07defe40d92673a52f3844
058f5d949a
client_private_key: 41ffab7c86e2b0916361fb6a69f9a097e3ef2f83f8fd5f95c
c79432eabf3e020
client_public_key: 0251bc2a7e0cb7c043eec5ee7d1b769b69f85b0fa19d1ae907
5416e93fa01689de
server_private_key: 61764783412278e6ce3c6c66f1995a2a30b5824be6a6d31ca
d35a578ec3d9353
server_public_key: 03727dd31712275905b1a3cca3bbb33bc71034a1d0c3801be0
20541933dd497f18
server_nonce: 2b772c1eb569cc2b57741bf3be630e377c8245b11d0b6ad1fe1d606
490c27208
server_keyshare: 02a59205c836a2ab86e19dbd9a417818052179e9a5c99221e2d1
d8a780dfe4734d
server_private_keyshare: e8c25741b201c2ba00abe390e5a3933a75efdb71b50e
1e0087cc7235f6f9448a
masking_key: 5bb4d884375d7dcbd562a62190cc569ccc809cff9d5aa5e176d48e96
46b558eb
KE1: 0320dd7cff999858fb63be5d11db9c3fafbacbedb775303324d8859bfb31f6dc
dba91c9485d74c9010185f462ce1eec52f588a8e392f36915849b6bfcb6bd5b904037
6a35db8f7e582569dba2e573c4af1462f91c59a9bdee253ed13f60108746252
masking_nonce: 375d7dcbd562a62190cc569ccc809cff9d5aa5e176d48e9646b558
eb41ffab7c
client_private_key: 9ecb5dc678e429e1a01ad6fe5d45301484d12c2a2cf2278fa
c0a0a2cf96eef57
client_public_key: 035951b821e6e1e449933fdba30c7e2e8b6e8f42f4c7a54c80
010a339e72cb2253
server_private_key: 7154525469c4fbae6c9907f4ff26a6386c0a4077f512138e2
203f247d56cbe91
server_public_key: 02acadb2750e036bfcbdb3c5aacad0f55c832631cc8f8e26a6
bc65f7e53525ae79
server_nonce: e0d04374ad9a276620c681abfca7bdb432e63509e5ec96ed2ec5542
f6fc7db23
server_keyshare: 02ffe33c6d938b4d10afeb4ad5ba108ad228317ecab3d6a78a3b
4e2494dc7ec8fb
server_private_keyshare: 034ce43e75362936d67055acf8301fbb910e2afd8769
c4334721fc4ff6bab1d7
masking_key: 1db20e37f4539b2327d37b80c00b98a2cfea9156e5e889b4efa3556e
9f0d24ce
KE1: 0258384d63ae4bbddde6d00d41b0e7174695ff6234563e16fc284aa589c7de93
f9b8bb2700cdd47e339d95404519f2fb3da58c93d84cbb4d51de6757a31919382b026
30e46a94b7f8f66071d24794c37f605055c098afc04d637caf9b1bc714bd15c
~~~
#### Output Values
~~~
KE2: 03cac8c1654bba83a122227e503e5e5d1a094def98d6835be289421cdc08d549
a121cd364318a92b2afbfccea5d80d337f07defe40d92673a52f3844058f5d949a604
39294e7567fc29643e0d5c8799d0dffbbfc8609558b982012fa90aef2ce52b1ffdd8f
96bda49f5306ae346cd745812d3a953ff94712e4ed0acc67c99b432860e337fe3234b
ba88415ac55368b938106cca4049b5c13496fe167d3a092bd990e2b772c1eb569cc2b
57741bf3be630e377c8245b11d0b6ad1fe1d606490c2720802a59205c836a2ab86e19
dbd9a417818052179e9a5c99221e2d1d8a780dfe4734d04a0d4911decc97ece7f24af
58f767090bf16677af9468a4026efbab99877399
KE2: 02d0866ee88ab8dc2eb5e39e859e55fa96dca50dc2d280e66dc747f21a14c015
f9375d7dcbd562a62190cc569ccc809cff9d5aa5e176d48e9646b558eb41ffab7c7d6
5027823b4a13e0a19c738eed6ccf3ee141697d93ffe7192a32d1cf803557cc1627fe1
1ccc933dffb662c2d8bbaa97c375287cb172d942c0f0252be71c74f367bd69bc17a7a
7d1e5e25dd1528e81a65f3b8a266c45f0dbf66486c1c65749ff06e0d04374ad9a2766
20c681abfca7bdb432e63509e5ec96ed2ec5542f6fc7db2302ffe33c6d938b4d10afe
b4ad5ba108ad228317ecab3d6a78a3b4e2494dc7ec8fb120aed0e35ab8f67a2a723fe
bf5e5f590d57c08245419972555a59b058240c46
~~~
"#;
+1 -6
View File
@@ -6,8 +6,8 @@
// of this source tree.
use core::ops::Add;
use std::vec;
use std::vec::Vec;
use std::{println, vec};
use digest::core_api::{BlockSizeUser, CoreProxy};
use digest::OutputSizeUser;
@@ -417,11 +417,6 @@ where
]
.concat();
println!(
"parameters.blind_login: {:?}",
hex::encode(&parameters.blind_login)
);
let mut client_login_start_rng = CycleRng::new(client_login_start);
let client_login_start_result =
ClientLogin::<CS>::start(&mut client_login_start_rng, &parameters.password)?;