Skip to main content

KeyExchange

Trait KeyExchange 

Source
pub trait KeyExchange{
    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§

Source

type Group: Group

The group used for the key exchange.

Source

type Hash: Hash

The hash used for the key exchange.

Source

type KE1State: ZeroizeOnDrop + Clone

Client state.

Source

type KE2State<CS: CipherSuite>: ZeroizeOnDrop + Clone

Server state.

Source

type KE1Message: ZeroizeOnDrop + Clone

First message sent by the client.

Source

type KE2Builder<'a, CS: CipherSuite<KeyExchange = Self>>: ZeroizeOnDrop + Clone

Server state builder.

Source

type KE2BuilderData<'a, CS: 'static + CipherSuite>

Server data for the remote key interaction.

Source

type KE2BuilderInput<CS: CipherSuite>

Server remote key input.

Source

type KE2Message: ZeroizeOnDrop + Clone

Message sent by the server.

Source

type KE3Message: ZeroizeOnDrop + Clone

Second message sent by the client.

Required Methods§

Source

fn generate_ke1<R: Rng + CryptoRng>( rng: &mut R, ) -> Result<GenerateKe1Result<Self>, ProtocolError>

Client generates KE1Message and KE1State.

Source

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.

Source

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.

Source

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.

Source

fn build_ke2<CS: CipherSuite<KeyExchange = Self>>( builder: Self::KE2Builder<'_, CS>, input: Self::KE2BuilderInput<CS>, ) -> Result<GenerateKe2Result<CS>, ProtocolError>

Server generates KE2Message and KE2State.

Source

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.

Source

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>

Available on crate feature kem only.
Source§

impl<G: Group + 'static, H: Hash> KeyExchange for TripleDh<G, H>

Source§

impl<SIG: SignatureProtocol, KE: 'static + Group, KEH: Hash + BlockSizeUser> KeyExchange for SigmaI<SIG, KE, KEH>

Source§

type Group = <SIG as SignatureProtocol>::Group

Source§

type Hash = KEH

Source§

type KE1State = Ke1State<KE>

Source§

type KE2State<CS: CipherSuite> = Ke2State<CS, SIG, KE>

Source§

type KE1Message = Ke1Message<KE>

Source§

type KE2Builder<'a, CS: CipherSuite<KeyExchange = Self>> = Ke2Builder<'a, CS, KE>

Source§

type KE2BuilderData<'a, CS: 'static + CipherSuite> = &'a Message<'a, CS, KE>

Source§

type KE2BuilderInput<CS: CipherSuite> = (<SIG as SignatureProtocol>::Signature, <SIG as SignatureProtocol>::VerifyState<CS, KE>)

Source§

type KE2Message = Ke2Message<SIG, KE, KEH>

Source§

type KE3Message = Ke3Message<SIG, KEH>