pub trait KeyExchangewhere
<Self::Hash as CoreProxy>::Core: ProxyHash,
<<Self::Hash as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256>,
Le<<<Self::Hash as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize, U256>: NonZero,
<<Self::Hash as CoreProxy>::Core as OutputSizeUser>::OutputSize: ArrayLength,{
type Group: Group;
type Hash: Hash;
type KE1State: ZeroizeOnDrop + Clone;
type KE2State<CS: CipherSuite>: ZeroizeOnDrop + Clone;
type KE1Message: ZeroizeOnDrop + Clone;
type KE2Builder<'a, CS: CipherSuite<KeyExchange = Self>>: ZeroizeOnDrop + Clone;
type KE2BuilderData<'a, CS: 'static + CipherSuite>;
type KE2BuilderInput<CS: CipherSuite>;
type KE2Message: ZeroizeOnDrop + Clone;
type KE3Message: ZeroizeOnDrop + Clone;
// Required methods
fn generate_ke1<R: Rng + CryptoRng>(
rng: &mut R,
) -> Result<GenerateKe1Result<Self>, ProtocolError>;
fn ke2_builder<'a, CS: CipherSuite<KeyExchange = Self>, R: Rng + CryptoRng>(
rng: &mut R,
credential_request: SerializedCredentialRequest<CS>,
ke1_message: Self::KE1Message,
credential_response: SerializedCredentialResponse<CS>,
client_s_pk: PublicKey<Self::Group>,
identifiers: SerializedIdentifiers<'a, Self::Group>,
context: SerializedContext<'a>,
) -> Result<Self::KE2Builder<'a, CS>, ProtocolError>;
fn ke2_builder_data<'a, CS: CipherSuite<KeyExchange = Self>>(
builder: &'a Self::KE2Builder<'_, CS>,
) -> Self::KE2BuilderData<'a, CS>;
fn generate_ke2_input<CS: CipherSuite<KeyExchange = Self>, R: CryptoRng + Rng>(
builder: &Self::KE2Builder<'_, CS>,
rng: &mut R,
server_s_sk: &PrivateKey<Self::Group>,
) -> Self::KE2BuilderInput<CS>;
fn build_ke2<CS: CipherSuite<KeyExchange = Self>>(
builder: Self::KE2Builder<'_, CS>,
input: Self::KE2BuilderInput<CS>,
) -> Result<GenerateKe2Result<CS>, ProtocolError>;
fn generate_ke3<CS: CipherSuite<KeyExchange = Self>, R: CryptoRng + Rng>(
rng: &mut R,
credential_request: SerializedCredentialRequest<CS>,
ke1_message: Self::KE1Message,
credential_response: SerializedCredentialResponse<CS>,
ke1_state: &Self::KE1State,
ke2_message: Self::KE2Message,
server_s_pk: PublicKey<Self::Group>,
client_s_sk: PrivateKey<Self::Group>,
identifiers: SerializedIdentifiers<'_, Self::Group>,
context: SerializedContext<'_>,
) -> Result<GenerateKe3Result<Self>, ProtocolError>;
fn finish_ke<CS: CipherSuite<KeyExchange = Self>>(
ke2_state: &Self::KE2State<CS>,
ke3_message: Self::KE3Message,
identifiers: Identifiers<'_>,
context: SerializedContext<'_>,
) -> Result<Output<Self::Hash>, ProtocolError>;
}Expand description
The key exchange trait.
Required Associated Types§
Sourcetype KE1State: ZeroizeOnDrop + Clone
type KE1State: ZeroizeOnDrop + Clone
Client state.
Sourcetype KE2State<CS: CipherSuite>: ZeroizeOnDrop + Clone
type KE2State<CS: CipherSuite>: ZeroizeOnDrop + Clone
Server state.
Sourcetype KE1Message: ZeroizeOnDrop + Clone
type KE1Message: ZeroizeOnDrop + Clone
First message sent by the client.
Sourcetype KE2Builder<'a, CS: CipherSuite<KeyExchange = Self>>: ZeroizeOnDrop + Clone
type KE2Builder<'a, CS: CipherSuite<KeyExchange = Self>>: ZeroizeOnDrop + Clone
Server state builder.
Sourcetype KE2BuilderData<'a, CS: 'static + CipherSuite>
type KE2BuilderData<'a, CS: 'static + CipherSuite>
Server data for the remote key interaction.
Sourcetype KE2BuilderInput<CS: CipherSuite>
type KE2BuilderInput<CS: CipherSuite>
Server remote key input.
Sourcetype KE2Message: ZeroizeOnDrop + Clone
type KE2Message: ZeroizeOnDrop + Clone
Message sent by the server.
Sourcetype KE3Message: ZeroizeOnDrop + Clone
type KE3Message: ZeroizeOnDrop + Clone
Second message sent by the client.
Required Methods§
Sourcefn generate_ke1<R: Rng + CryptoRng>(
rng: &mut R,
) -> Result<GenerateKe1Result<Self>, ProtocolError>
fn generate_ke1<R: Rng + CryptoRng>( rng: &mut R, ) -> Result<GenerateKe1Result<Self>, ProtocolError>
Client generates KE1Message and
KE1State.
Sourcefn ke2_builder<'a, CS: CipherSuite<KeyExchange = Self>, R: Rng + CryptoRng>(
rng: &mut R,
credential_request: SerializedCredentialRequest<CS>,
ke1_message: Self::KE1Message,
credential_response: SerializedCredentialResponse<CS>,
client_s_pk: PublicKey<Self::Group>,
identifiers: SerializedIdentifiers<'a, Self::Group>,
context: SerializedContext<'a>,
) -> Result<Self::KE2Builder<'a, CS>, ProtocolError>
fn ke2_builder<'a, CS: CipherSuite<KeyExchange = Self>, R: Rng + CryptoRng>( rng: &mut R, credential_request: SerializedCredentialRequest<CS>, ke1_message: Self::KE1Message, credential_response: SerializedCredentialResponse<CS>, client_s_pk: PublicKey<Self::Group>, identifiers: SerializedIdentifiers<'a, Self::Group>, context: SerializedContext<'a>, ) -> Result<Self::KE2Builder<'a, CS>, ProtocolError>
Server generates KE2Builder.
Sourcefn ke2_builder_data<'a, CS: CipherSuite<KeyExchange = Self>>(
builder: &'a Self::KE2Builder<'_, CS>,
) -> Self::KE2BuilderData<'a, CS>
fn ke2_builder_data<'a, CS: CipherSuite<KeyExchange = Self>>( builder: &'a Self::KE2Builder<'_, CS>, ) -> Self::KE2BuilderData<'a, CS>
Server returns the data for the remote key interaction.
Sourcefn generate_ke2_input<CS: CipherSuite<KeyExchange = Self>, R: CryptoRng + Rng>(
builder: &Self::KE2Builder<'_, CS>,
rng: &mut R,
server_s_sk: &PrivateKey<Self::Group>,
) -> Self::KE2BuilderInput<CS>
fn generate_ke2_input<CS: CipherSuite<KeyExchange = Self>, R: CryptoRng + Rng>( builder: &Self::KE2Builder<'_, CS>, rng: &mut R, server_s_sk: &PrivateKey<Self::Group>, ) -> Self::KE2BuilderInput<CS>
Server generates the input without a remote key.
Sourcefn build_ke2<CS: CipherSuite<KeyExchange = Self>>(
builder: Self::KE2Builder<'_, CS>,
input: Self::KE2BuilderInput<CS>,
) -> Result<GenerateKe2Result<CS>, ProtocolError>
fn build_ke2<CS: CipherSuite<KeyExchange = Self>>( builder: Self::KE2Builder<'_, CS>, input: Self::KE2BuilderInput<CS>, ) -> Result<GenerateKe2Result<CS>, ProtocolError>
Server generates KE2Message and
KE2State.
Sourcefn generate_ke3<CS: CipherSuite<KeyExchange = Self>, R: CryptoRng + Rng>(
rng: &mut R,
credential_request: SerializedCredentialRequest<CS>,
ke1_message: Self::KE1Message,
credential_response: SerializedCredentialResponse<CS>,
ke1_state: &Self::KE1State,
ke2_message: Self::KE2Message,
server_s_pk: PublicKey<Self::Group>,
client_s_sk: PrivateKey<Self::Group>,
identifiers: SerializedIdentifiers<'_, Self::Group>,
context: SerializedContext<'_>,
) -> Result<GenerateKe3Result<Self>, ProtocolError>
fn generate_ke3<CS: CipherSuite<KeyExchange = Self>, R: CryptoRng + Rng>( rng: &mut R, credential_request: SerializedCredentialRequest<CS>, ke1_message: Self::KE1Message, credential_response: SerializedCredentialResponse<CS>, ke1_state: &Self::KE1State, ke2_message: Self::KE2Message, server_s_pk: PublicKey<Self::Group>, client_s_sk: PrivateKey<Self::Group>, identifiers: SerializedIdentifiers<'_, Self::Group>, context: SerializedContext<'_>, ) -> Result<GenerateKe3Result<Self>, ProtocolError>
Client generates KE3Message and the session key.
Sourcefn finish_ke<CS: CipherSuite<KeyExchange = Self>>(
ke2_state: &Self::KE2State<CS>,
ke3_message: Self::KE3Message,
identifiers: Identifiers<'_>,
context: SerializedContext<'_>,
) -> Result<Output<Self::Hash>, ProtocolError>
fn finish_ke<CS: CipherSuite<KeyExchange = Self>>( ke2_state: &Self::KE2State<CS>, ke3_message: Self::KE3Message, identifiers: Identifiers<'_>, context: SerializedContext<'_>, ) -> Result<Output<Self::Hash>, ProtocolError>
Server generates the session key.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
Source§impl<G, H, K> KeyExchange for TripleDhKem<G, H, K>where
G: Group + 'static,
G::Sk: DiffieHellman<G>,
H: Hash,
H::Core: ProxyHash,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256> + Cmp<U256>,
Le<<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize, U256>: NonZero,
<<H as CoreProxy>::Core as OutputSizeUser>::OutputSize: ArrayLength,
K: KemCoreWrapper,
U32: Add<K::EncapsulationKeyLen>,
Sum<U32, K::EncapsulationKeyLen>: ArrayLength,
Available on crate feature kem only.
impl<G, H, K> KeyExchange for TripleDhKem<G, H, K>where
G: Group + 'static,
G::Sk: DiffieHellman<G>,
H: Hash,
H::Core: ProxyHash,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256> + Cmp<U256>,
Le<<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize, U256>: NonZero,
<<H as CoreProxy>::Core as OutputSizeUser>::OutputSize: ArrayLength,
K: KemCoreWrapper,
U32: Add<K::EncapsulationKeyLen>,
Sum<U32, K::EncapsulationKeyLen>: ArrayLength,
Available on crate feature
kem only.