1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use crate::hasher::HashChain;
use crate::hss::aux::MutableExpandedAuxData;
use crate::hss::parameter::HssParameter;
use crate::hss::reference_impl_private_key::SeedAndLmsTreeIdentifier;
use crate::lms::definitions::LmsPrivateKey;
use crate::lms::definitions::LmsPublicKey;
pub mod definitions;
mod helper;
pub mod keygen;
pub mod parameters;
pub mod signing;
pub mod verify;
pub struct LmsKeyPair<H: HashChain> {
pub private_key: LmsPrivateKey<H>,
pub public_key: LmsPublicKey<H>,
}
pub fn generate_key_pair<H: HashChain>(
seed: &SeedAndLmsTreeIdentifier,
parameter: &HssParameter<H>,
used_leafs_index: &u32,
aux_data: &mut Option<MutableExpandedAuxData>,
) -> LmsKeyPair<H> {
let lmots_parameter = parameter.get_lmots_parameter();
let lms_parameter = parameter.get_lms_parameter();
let private_key = keygen::generate_private_key(
seed.seed,
seed.lms_tree_identifier,
*used_leafs_index,
*lmots_parameter,
*lms_parameter,
);
let public_key = keygen::generate_public_key(&private_key, aux_data);
LmsKeyPair {
private_key,
public_key,
}
}