Skip to content

Commit f468753

Browse files
committed
Add ML-KEM mechanisms, keys, attributes
Signed-off-by: Jakub Jelen <jjelen@redhat.com>
1 parent d8633a1 commit f468753

File tree

2 files changed

+149
-1
lines changed

2 files changed

+149
-1
lines changed

cryptoki/src/mechanism/mod.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,14 @@ impl MechanismType {
326326
/// HKDF-DATA mechanism
327327
pub const HKDF_DATA: MechanismType = MechanismType { val: CKM_HKDF_DATA };
328328

329+
// ML-KEM
330+
/// ML-KEM key pair generation mechanism
331+
pub const ML_KEM_KEY_PAIR_GEN: MechanismType = MechanismType {
332+
val: CKM_ML_KEM_KEY_PAIR_GEN,
333+
};
334+
/// ML-KEM encapsulation and decapsulation mechanism
335+
pub const ML_KEM: MechanismType = MechanismType { val: CKM_ML_KEM };
336+
329337
/// Create vendor defined mechanism
330338
///
331339
/// # Arguments
@@ -715,6 +723,8 @@ impl MechanismType {
715723
CKM_HKDF_KEY_GEN => String::from(stringify!(CKM_HKDF_KEY_GEN)),
716724
CKM_HKDF_DERIVE => String::from(stringify!(CKM_HKDF_DERIVE)),
717725
CKM_HKDF_DATA => String::from(stringify!(CKM_HKDF_DATA)),
726+
CKM_ML_KEM_KEY_PAIR_GEN => String::from(stringify!(CKM_ML_KEM_KEY_PAIR_GEN)),
727+
CKM_ML_KEM => String::from(stringify!(CKM_ML_KEM)),
718728
_ => format!("unknown {mech:08x}"),
719729
}
720730
}
@@ -799,6 +809,8 @@ impl TryFrom<CK_MECHANISM_TYPE> for MechanismType {
799809
CKM_HKDF_KEY_GEN => Ok(MechanismType::HKDF_KEY_GEN),
800810
CKM_HKDF_DERIVE => Ok(MechanismType::HKDF_DERIVE),
801811
CKM_HKDF_DATA => Ok(MechanismType::HKDF_DATA),
812+
CKM_ML_KEM_KEY_PAIR_GEN => Ok(MechanismType::ML_KEM_KEY_PAIR_GEN),
813+
CKM_ML_KEM => Ok(MechanismType::ML_KEM),
802814
other => {
803815
error!("Mechanism type {} is not supported.", other);
804816
Err(Error::NotSupported)
@@ -1021,6 +1033,12 @@ pub enum Mechanism<'a> {
10211033
/// HKDF-DATA mechanism
10221034
HkdfData(hkdf::HkdfParams<'a>),
10231035

1036+
// ML-KEM
1037+
/// ML-KEM key pair generation mechanism
1038+
MlKemKeyPairGen,
1039+
/// ML-KEM key encacpsulation/decapsulation mechanism
1040+
MlKem,
1041+
10241042
/// Vendor defined mechanism
10251043
VendorDefined(VendorDefinedMechanism<'a>),
10261044
}
@@ -1102,6 +1120,9 @@ impl Mechanism<'_> {
11021120
Mechanism::HkdfDerive(_) => MechanismType::HKDF_DERIVE,
11031121
Mechanism::HkdfData(_) => MechanismType::HKDF_DATA,
11041122

1123+
Mechanism::MlKemKeyPairGen => MechanismType::ML_KEM_KEY_PAIR_GEN,
1124+
Mechanism::MlKem => MechanismType::ML_KEM,
1125+
11051126
Mechanism::VendorDefined(vm) => MechanismType {
11061127
val: vm.inner.mechanism,
11071128
},
@@ -1198,7 +1219,9 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
11981219
| Mechanism::Sha384KeyGen
11991220
| Mechanism::Sha512KeyGen
12001221
| Mechanism::GenericSecretKeyGen
1201-
| Mechanism::HkdfKeyGen => CK_MECHANISM {
1222+
| Mechanism::HkdfKeyGen
1223+
| Mechanism::MlKemKeyPairGen
1224+
| Mechanism::MlKem => CK_MECHANISM {
12021225
mechanism,
12031226
pParameter: null_mut(),
12041227
ulParameterLen: 0,

0 commit comments

Comments
 (0)