pq_kem/
lib.rs

1#![forbid(unsafe_code)]
2#![no_std]
3
4use rac::{
5    LineValid,
6    generic_array::{ArrayLength, GenericArray},
7};
8
9pub trait Kem {
10    type PublicKey: LineValid;
11    type SecretKey: LineValid;
12    type CipherText: LineValid;
13    type PairSeedLength: ArrayLength<u8>;
14    type PublicKeyHashLength: ArrayLength<u8>;
15    type EncapsulationSeedLength: ArrayLength<u8>;
16    type SharedSecretLength: ArrayLength<u8>;
17
18    fn generate_pair(
19        seed: &GenericArray<u8, Self::PairSeedLength>,
20    ) -> (Self::PublicKey, Self::SecretKey);
21    fn encapsulate(
22        seed: &GenericArray<u8, Self::EncapsulationSeedLength>,
23        public_key: &Self::PublicKey,
24        public_key_hash: &GenericArray<u8, Self::PublicKeyHashLength>,
25    ) -> (Self::CipherText, GenericArray<u8, Self::SharedSecretLength>);
26    fn decapsulate(
27        secret_key: &Self::SecretKey,
28        public_key: &Self::PublicKey,
29        public_key_hash: &GenericArray<u8, Self::PublicKeyHashLength>,
30        cipher_text: &Self::CipherText,
31    ) -> GenericArray<u8, Self::SharedSecretLength>;
32}