Files
opaque-vx/src/ciphersuite.rs
T

41 lines
1.8 KiB
Rust
Raw Normal View History

// Copyright (c) Facebook, Inc. and its affiliates.
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
//! Defines the CipherSuite trait to specify the underlying primitives for OPAQUE
use crate::{
2021-01-25 13:20:36 -08:00
hash::Hash, key_exchange::traits::KeyExchange, keypair::KeyPair,
2020-09-22 08:50:39 -04:00
map_to_curve::GroupWithMapToCurve, slow_hash::SlowHash,
};
use rand_core::{CryptoRng, RngCore};
/// Configures the underlying primitives used in OPAQUE
2020-07-13 15:23:29 -07:00
/// * `Group`: a finite cyclic group along with a point representation, along
/// with an extension trait PasswordToCurve that allows some customization on
/// how to hash a password to a curve point. See `group::Group` and
/// `map_to_curve::GroupWithMapToCurve`.
/// * `KeyExchange`: The key exchange protocol to use in the login step
2020-07-27 15:25:04 -07:00
/// * `Hash`: The main hashing function to use
/// * `SlowHash`: A slow hashing function, typically used for password hashing
pub trait CipherSuite {
/// A finite cyclic group along with a point representation along with
/// an extension trait PasswordToCurve that allows some customization on
/// how to hash a password to a curve point. See `group::Group` and
/// `map_to_curve::GroupWithMapToCurve`.
type Group: GroupWithMapToCurve;
2020-07-13 15:23:29 -07:00
/// A key exchange protocol
2021-01-25 13:20:36 -08:00
type KeyExchange: KeyExchange<Self::Hash, Self::Group>;
2020-07-27 15:25:04 -07:00
/// The main hash function use (for HKDF computations and hashing transcripts)
type Hash: Hash;
/// A slow hashing function, typically used for password hashing
2020-07-27 15:25:04 -07:00
type SlowHash: SlowHash<Self::Hash>;
2021-01-25 13:20:36 -08:00
/// Generating a random key pair given a cryptographic rng
2021-01-25 13:20:36 -08:00
fn generate_random_keypair<R: RngCore + CryptoRng>(rng: &mut R) -> KeyPair<Self::Group> {
KeyPair::<Self::Group>::generate_random(rng)
}
}