pub struct Ake {
pub shared_secret: SharedSecret,
/* private fields */
}
Expand description
Used for mutually authenticated key exchange between two parties.
Example:
let mut rng = rand::thread_rng();
let mut alice = Ake::new();
let mut bob = Ake::new();
let alice_keys = keypair(&mut rng);
let bob_keys = keypair(&mut rng);
let client_init = alice.client_init(&bob_keys.public, &mut rng);
let server_send = bob.server_receive(client_init, &alice_keys.public, &bob_keys.secret, &mut rng)?;
let client_confirm = alice.client_confirm(server_send, &alice_keys.secret);
assert_eq!(alice.shared_secret, bob.shared_secret);
Fields§
The resulting shared secret from a key exchange
Implementations§
source§impl Ake
impl Ake
sourcepub fn client_init<R>(&mut self, pubkey: &PublicKey, rng: &mut R) -> AkeSendInitwhere
R: CryptoRng + RngCore,
pub fn client_init<R>(&mut self, pubkey: &PublicKey, rng: &mut R) -> AkeSendInitwhere R: CryptoRng + RngCore,
Initiates a Mutually Authenticated Key Exchange.
let mut rng = rand::thread_rng();
let mut alice = Ake::new();
let bob_keys = keypair(&mut rng);
let client_init = alice.client_init(&bob_keys.public, &mut rng);
sourcepub fn server_receive<R>(
&mut self,
ake_send_a: AkeSendInit,
pubkey: &PublicKey,
secretkey: &SecretKey,
rng: &mut R
) -> Result<AkeSendResponse, KyberError>where
R: CryptoRng + RngCore,
pub fn server_receive<R>( &mut self, ake_send_a: AkeSendInit, pubkey: &PublicKey, secretkey: &SecretKey, rng: &mut R ) -> Result<AkeSendResponse, KyberError>where R: CryptoRng + RngCore,
Handles and authenticates the output of a client_init()
request
let mut alice = Ake::new();
let mut bob = Ake::new();
let alice_keys = keypair(&mut rng);
let bob_keys = keypair(&mut rng);
let client_init = alice.client_init(&bob_keys.public, &mut rng);
let server_send = bob.server_receive(client_init, &alice_keys.public, &bob_keys.secret, &mut rng)?;
sourcepub fn client_confirm(
&mut self,
send_b: AkeSendResponse,
secretkey: &SecretKey
) -> Result<(), KyberError>
pub fn client_confirm( &mut self, send_b: AkeSendResponse, secretkey: &SecretKey ) -> Result<(), KyberError>
Decapsulates and authenticates the shared secret from the output of
server_receive()
let server_send = bob.server_receive(client_init, &alice_keys.public, &bob_keys.secret, &mut rng)?;
let client_confirm = alice.client_confirm(server_send, &alice_keys.secret);
assert_eq!(alice.shared_secret, bob.shared_secret);