in src/opaque.rs [1127:1153]
fn oprf_key_from_seed<CS: voprf::CipherSuite>(
oprf_seed: &Output<CS::Hash>,
credential_identifier: &[u8],
) -> Result<GenericArray<u8, <CS::Group as Group>::ScalarLen>, ProtocolError>
where
<CS::Hash as OutputSizeUser>::OutputSize:
IsLess<U256> + IsLessOrEqual<<CS::Hash as BlockSizeUser>::BlockSize>,
CS::Hash: Hash,
<CS::Hash as CoreProxy>::Core: ProxyHash,
<<CS::Hash as CoreProxy>::Core as BlockSizeUser>::BlockSize: IsLess<U256>,
Le<<<CS::Hash as CoreProxy>::Core as BlockSizeUser>::BlockSize, U256>: NonZero,
{
let mut ikm = GenericArray::<_, <CS::Group as Group>::ScalarLen>::default();
Hkdf::<CS::Hash>::from_prk(oprf_seed)
.ok()
.and_then(|hkdf| {
hkdf.expand_multi_info(&[credential_identifier, STR_OPRF_KEY], &mut ikm)
.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),
)?,
))
}