quantcrypt/kem/api/
key_generator.rs1use crate::asn1::private_key::PrivateKey;
2use crate::asn1::public_key::PublicKey;
3use crate::errors;
4use crate::kem::common::config::oids::Oid;
5use crate::kem::{api::algorithm::KemAlgorithm, common::kem_trait::Kem, kem_manager::KemManager};
6
7type Result<T> = std::result::Result<T, errors::QuantCryptError>;
9
10pub struct KemKeyGenerator {
21 algorithm: KemAlgorithm,
23}
24
25impl KemKeyGenerator {
26 pub fn new(algorithm: KemAlgorithm) -> KemKeyGenerator {
36 KemKeyGenerator { algorithm }
37 }
38
39 pub fn generate(&mut self) -> Result<(PublicKey, PrivateKey)> {
45 let kem_type = self.algorithm.get_kem_type();
46 let mut dsa_manager = KemManager::new(kem_type.clone())?;
47 let (pk, sk) = dsa_manager
48 .key_gen()
49 .map_err(|_| errors::QuantCryptError::KeyPairGenerationFailed)?;
50 let oid = kem_type.get_oid();
51 let pk = PublicKey::new(&oid, &pk)
52 .map_err(|_| errors::QuantCryptError::KeyPairGenerationFailed)?;
53 let sk = PrivateKey::new(&oid, &sk, Some(pk.clone()))
54 .map_err(|_| errors::QuantCryptError::KeyPairGenerationFailed)?;
55 Ok((pk, sk))
56 }
57}