@@ -341,6 +341,14 @@ impl MechanismType {
341
341
val : CKM_SP800_108_DOUBLE_PIPELINE_KDF ,
342
342
} ;
343
343
344
+ // ML-KEM
345
+ /// ML-KEM key pair generation mechanism
346
+ pub const ML_KEM_KEY_PAIR_GEN : MechanismType = MechanismType {
347
+ val : CKM_ML_KEM_KEY_PAIR_GEN ,
348
+ } ;
349
+ /// ML-KEM encapsulation and decapsulation mechanism
350
+ pub const ML_KEM : MechanismType = MechanismType { val : CKM_ML_KEM } ;
351
+
344
352
/// Create vendor defined mechanism
345
353
///
346
354
/// # Arguments
@@ -735,6 +743,8 @@ impl MechanismType {
735
743
CKM_SP800_108_DOUBLE_PIPELINE_KDF => {
736
744
String :: from ( stringify ! ( CKM_SP800_108_DOUBLE_PIPELINE_KDF ) )
737
745
}
746
+ CKM_ML_KEM_KEY_PAIR_GEN => String :: from ( stringify ! ( CKM_ML_KEM_KEY_PAIR_GEN ) ) ,
747
+ CKM_ML_KEM => String :: from ( stringify ! ( CKM_ML_KEM ) ) ,
738
748
_ => format ! ( "unknown {mech:08x}" ) ,
739
749
}
740
750
}
@@ -822,6 +832,8 @@ impl TryFrom<CK_MECHANISM_TYPE> for MechanismType {
822
832
CKM_SP800_108_COUNTER_KDF => Ok ( MechanismType :: SP800_108_COUNTER_KDF ) ,
823
833
CKM_SP800_108_FEEDBACK_KDF => Ok ( MechanismType :: SP800_108_FEEDBACK_KDF ) ,
824
834
CKM_SP800_108_DOUBLE_PIPELINE_KDF => Ok ( MechanismType :: SP800_108_DOUBLE_PIPELINE_KDF ) ,
835
+ CKM_ML_KEM_KEY_PAIR_GEN => Ok ( MechanismType :: ML_KEM_KEY_PAIR_GEN ) ,
836
+ CKM_ML_KEM => Ok ( MechanismType :: ML_KEM ) ,
825
837
other => {
826
838
error ! ( "Mechanism type {} is not supported." , other) ;
827
839
Err ( Error :: NotSupported )
@@ -1052,6 +1064,12 @@ pub enum Mechanism<'a> {
1052
1064
/// NIST SP 800-108 KDF (aka KBKDF) mechanism in double pipeline-mode
1053
1065
KbkdfDoublePipeline ( kbkdf:: KbkdfParams < ' a > ) ,
1054
1066
1067
+ // ML-KEM
1068
+ /// ML-KEM key pair generation mechanism
1069
+ MlKemKeyPairGen ,
1070
+ /// ML-KEM key encacpsulation/decapsulation mechanism
1071
+ MlKem ,
1072
+
1055
1073
/// Vendor defined mechanism
1056
1074
VendorDefined ( VendorDefinedMechanism < ' a > ) ,
1057
1075
}
@@ -1137,6 +1155,9 @@ impl Mechanism<'_> {
1137
1155
Mechanism :: KbkdfFeedback ( _) => MechanismType :: SP800_108_FEEDBACK_KDF ,
1138
1156
Mechanism :: KbkdfDoublePipeline ( _) => MechanismType :: SP800_108_DOUBLE_PIPELINE_KDF ,
1139
1157
1158
+ Mechanism :: MlKemKeyPairGen => MechanismType :: ML_KEM_KEY_PAIR_GEN ,
1159
+ Mechanism :: MlKem => MechanismType :: ML_KEM ,
1160
+
1140
1161
Mechanism :: VendorDefined ( vm) => MechanismType {
1141
1162
val : vm. inner . mechanism ,
1142
1163
} ,
@@ -1237,7 +1258,9 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
1237
1258
| Mechanism :: Sha384KeyGen
1238
1259
| Mechanism :: Sha512KeyGen
1239
1260
| Mechanism :: GenericSecretKeyGen
1240
- | Mechanism :: HkdfKeyGen => CK_MECHANISM {
1261
+ | Mechanism :: HkdfKeyGen
1262
+ | Mechanism :: MlKemKeyPairGen
1263
+ | Mechanism :: MlKem => CK_MECHANISM {
1241
1264
mechanism,
1242
1265
pParameter : null_mut ( ) ,
1243
1266
ulParameterLen : 0 ,
0 commit comments