@@ -9,6 +9,7 @@ pub mod elliptic_curve;
9
9
pub mod hkdf;
10
10
pub mod kbkdf;
11
11
mod mechanism_info;
12
+ pub mod mldsa;
12
13
pub mod rsa;
13
14
pub mod vendor_defined;
14
15
@@ -349,6 +350,58 @@ impl MechanismType {
349
350
/// ML-KEM encapsulation and decapsulation mechanism
350
351
pub const ML_KEM : MechanismType = MechanismType { val : CKM_ML_KEM } ;
351
352
353
+ // ML-DSA
354
+ /// ML-DSA key pair generation mechanism
355
+ pub const ML_DSA_KEY_PAIR_GEN : MechanismType = MechanismType {
356
+ val : CKM_ML_DSA_KEY_PAIR_GEN ,
357
+ } ;
358
+ /// ML-DSA signature mechanism
359
+ pub const ML_DSA : MechanismType = MechanismType { val : CKM_ML_DSA } ;
360
+ /// HashML-DSA signature mechanism
361
+ pub const HASH_ML_DSA : MechanismType = MechanismType {
362
+ val : CKM_HASH_ML_DSA ,
363
+ } ;
364
+ /// HashML-DSA signature mechanism with SHA224
365
+ pub const HASH_ML_DSA_SHA224 : MechanismType = MechanismType {
366
+ val : CKM_HASH_ML_DSA_SHA224 ,
367
+ } ;
368
+ /// HashML-DSA signature mechanism with SHA256
369
+ pub const HASH_ML_DSA_SHA256 : MechanismType = MechanismType {
370
+ val : CKM_HASH_ML_DSA_SHA256 ,
371
+ } ;
372
+ /// HashML-DSA signature mechanism with SHA384
373
+ pub const HASH_ML_DSA_SHA384 : MechanismType = MechanismType {
374
+ val : CKM_HASH_ML_DSA_SHA384 ,
375
+ } ;
376
+ /// HashML-DSA signature mechanism with SHA512
377
+ pub const HASH_ML_DSA_SHA512 : MechanismType = MechanismType {
378
+ val : CKM_HASH_ML_DSA_SHA512 ,
379
+ } ;
380
+ /// HashML-DSA signature mechanism with SHA3-224
381
+ pub const HASH_ML_DSA_SHA3_224 : MechanismType = MechanismType {
382
+ val : CKM_HASH_ML_DSA_SHA3_224 ,
383
+ } ;
384
+ /// HashML-DSA signature mechanism with SHA3-256
385
+ pub const HASH_ML_DSA_SHA3_256 : MechanismType = MechanismType {
386
+ val : CKM_HASH_ML_DSA_SHA3_256 ,
387
+ } ;
388
+ /// HashML-DSA signature mechanism with SHA3-384
389
+ pub const HASH_ML_DSA_SHA3_384 : MechanismType = MechanismType {
390
+ val : CKM_HASH_ML_DSA_SHA3_384 ,
391
+ } ;
392
+ /// HashML-DSA signature mechanism with SHA3-512
393
+ pub const HASH_ML_DSA_SHA3_512 : MechanismType = MechanismType {
394
+ val : CKM_HASH_ML_DSA_SHA3_512 ,
395
+ } ;
396
+ /// HashML-DSA signature mechanism with SHAKE128
397
+ pub const HASH_ML_DSA_SHAKE128 : MechanismType = MechanismType {
398
+ val : CKM_HASH_ML_DSA_SHAKE128 ,
399
+ } ;
400
+ /// HashML-DSA signature mechanism with SHAKE256
401
+ pub const HASH_ML_DSA_SHAKE256 : MechanismType = MechanismType {
402
+ val : CKM_HASH_ML_DSA_SHAKE256 ,
403
+ } ;
404
+
352
405
/// Create vendor defined mechanism
353
406
///
354
407
/// # Arguments
@@ -745,6 +798,19 @@ impl MechanismType {
745
798
}
746
799
CKM_ML_KEM_KEY_PAIR_GEN => String :: from ( stringify ! ( CKM_ML_KEM_KEY_PAIR_GEN ) ) ,
747
800
CKM_ML_KEM => String :: from ( stringify ! ( CKM_ML_KEM ) ) ,
801
+ CKM_ML_DSA_KEY_PAIR_GEN => String :: from ( stringify ! ( CKM_ML_DSA_KEY_PAIR_GEN ) ) ,
802
+ CKM_ML_DSA => String :: from ( stringify ! ( CKM_ML_DSA ) ) ,
803
+ CKM_HASH_ML_DSA => String :: from ( stringify ! ( CKM_HASH_ML_DSA ) ) ,
804
+ CKM_HASH_ML_DSA_SHA224 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA224 ) ) ,
805
+ CKM_HASH_ML_DSA_SHA256 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA256 ) ) ,
806
+ CKM_HASH_ML_DSA_SHA384 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA384 ) ) ,
807
+ CKM_HASH_ML_DSA_SHA512 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA512 ) ) ,
808
+ CKM_HASH_ML_DSA_SHA3_224 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA3_224 ) ) ,
809
+ CKM_HASH_ML_DSA_SHA3_256 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA3_256 ) ) ,
810
+ CKM_HASH_ML_DSA_SHA3_384 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA3_384 ) ) ,
811
+ CKM_HASH_ML_DSA_SHA3_512 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA3_512 ) ) ,
812
+ CKM_HASH_ML_DSA_SHAKE128 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHAKE128 ) ) ,
813
+ CKM_HASH_ML_DSA_SHAKE256 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHAKE256 ) ) ,
748
814
_ => format ! ( "unknown {mech:08x}" ) ,
749
815
}
750
816
}
@@ -834,6 +900,18 @@ impl TryFrom<CK_MECHANISM_TYPE> for MechanismType {
834
900
CKM_SP800_108_DOUBLE_PIPELINE_KDF => Ok ( MechanismType :: SP800_108_DOUBLE_PIPELINE_KDF ) ,
835
901
CKM_ML_KEM_KEY_PAIR_GEN => Ok ( MechanismType :: ML_KEM_KEY_PAIR_GEN ) ,
836
902
CKM_ML_KEM => Ok ( MechanismType :: ML_KEM ) ,
903
+ CKM_ML_DSA_KEY_PAIR_GEN => Ok ( MechanismType :: ML_DSA_KEY_PAIR_GEN ) ,
904
+ CKM_ML_DSA => Ok ( MechanismType :: ML_DSA ) ,
905
+ CKM_HASH_ML_DSA => Ok ( MechanismType :: HASH_ML_DSA ) ,
906
+ CKM_HASH_ML_DSA_SHA224 => Ok ( MechanismType :: HASH_ML_DSA_SHA224 ) ,
907
+ CKM_HASH_ML_DSA_SHA256 => Ok ( MechanismType :: HASH_ML_DSA_SHA256 ) ,
908
+ CKM_HASH_ML_DSA_SHA384 => Ok ( MechanismType :: HASH_ML_DSA_SHA384 ) ,
909
+ CKM_HASH_ML_DSA_SHA512 => Ok ( MechanismType :: HASH_ML_DSA_SHA512 ) ,
910
+ CKM_HASH_ML_DSA_SHA3_224 => Ok ( MechanismType :: HASH_ML_DSA_SHA3_224 ) ,
911
+ CKM_HASH_ML_DSA_SHA3_256 => Ok ( MechanismType :: HASH_ML_DSA_SHA3_256 ) ,
912
+ CKM_HASH_ML_DSA_SHA3_384 => Ok ( MechanismType :: HASH_ML_DSA_SHA3_384 ) ,
913
+ CKM_HASH_ML_DSA_SHA3_512 => Ok ( MechanismType :: HASH_ML_DSA_SHA3_512 ) ,
914
+ CKM_HASH_ML_DSA_SHAKE128 => Ok ( MechanismType :: HASH_ML_DSA_SHAKE128 ) ,
837
915
other => {
838
916
error ! ( "Mechanism type {} is not supported." , other) ;
839
917
Err ( Error :: NotSupported )
@@ -1070,6 +1148,34 @@ pub enum Mechanism<'a> {
1070
1148
/// ML-KEM key encacpsulation/decapsulation mechanism
1071
1149
MlKem ,
1072
1150
1151
+ // ML-DSA
1152
+ /// ML-DSA key pair generation mechanism
1153
+ MlDsaKeyPairGen ,
1154
+ /// ML-DSA signature mechanism
1155
+ MlDsa ( mldsa:: SignAdditionalContext < ' a > ) ,
1156
+ /// HashML-DSA signature mechanism
1157
+ HashMlDsa ( mldsa:: HashSignAdditionalContext < ' a > ) ,
1158
+ /// HashML-DSA signature mechanism with SHA224
1159
+ HashMlDsaSha224 ( mldsa:: SignAdditionalContext < ' a > ) ,
1160
+ /// HashML-DSA signature mechanism with SHA256
1161
+ HashMlDsaSha256 ( mldsa:: SignAdditionalContext < ' a > ) ,
1162
+ /// HashML-DSA signature mechanism with SHA384
1163
+ HashMlDsaSha384 ( mldsa:: SignAdditionalContext < ' a > ) ,
1164
+ /// HashML-DSA signature mechanism with SHA512
1165
+ HashMlDsaSha512 ( mldsa:: SignAdditionalContext < ' a > ) ,
1166
+ /// HashML-DSA signature mechanism with SHA3-224
1167
+ HashMlDsaSha3_224 ( mldsa:: SignAdditionalContext < ' a > ) ,
1168
+ /// HashML-DSA signature mechanism with SHA3-256
1169
+ HashMlDsaSha3_256 ( mldsa:: SignAdditionalContext < ' a > ) ,
1170
+ /// HashML-DSA signature mechanism with SHA3-384
1171
+ HashMlDsaSha3_384 ( mldsa:: SignAdditionalContext < ' a > ) ,
1172
+ /// HashML-DSA signature mechanism with SHA3-512
1173
+ HashMlDsaSha3_512 ( mldsa:: SignAdditionalContext < ' a > ) ,
1174
+ /// HashML-DSA signature mechanism with SHAKE128
1175
+ HashMlDsaShake128 ( mldsa:: SignAdditionalContext < ' a > ) ,
1176
+ /// HashML-DSA signature mechanism with SHAKE256
1177
+ HashMlDsaShake256 ( mldsa:: SignAdditionalContext < ' a > ) ,
1178
+
1073
1179
/// Vendor defined mechanism
1074
1180
VendorDefined ( VendorDefinedMechanism < ' a > ) ,
1075
1181
}
@@ -1158,6 +1264,20 @@ impl Mechanism<'_> {
1158
1264
Mechanism :: MlKemKeyPairGen => MechanismType :: ML_KEM_KEY_PAIR_GEN ,
1159
1265
Mechanism :: MlKem => MechanismType :: ML_KEM ,
1160
1266
1267
+ Mechanism :: MlDsaKeyPairGen => MechanismType :: ML_DSA_KEY_PAIR_GEN ,
1268
+ Mechanism :: MlDsa ( _) => MechanismType :: ML_DSA ,
1269
+ Mechanism :: HashMlDsa ( _) => MechanismType :: HASH_ML_DSA ,
1270
+ Mechanism :: HashMlDsaSha224 ( _) => MechanismType :: HASH_ML_DSA_SHA224 ,
1271
+ Mechanism :: HashMlDsaSha256 ( _) => MechanismType :: HASH_ML_DSA_SHA256 ,
1272
+ Mechanism :: HashMlDsaSha384 ( _) => MechanismType :: HASH_ML_DSA_SHA384 ,
1273
+ Mechanism :: HashMlDsaSha512 ( _) => MechanismType :: HASH_ML_DSA_SHA512 ,
1274
+ Mechanism :: HashMlDsaSha3_224 ( _) => MechanismType :: HASH_ML_DSA_SHA3_224 ,
1275
+ Mechanism :: HashMlDsaSha3_256 ( _) => MechanismType :: HASH_ML_DSA_SHA3_256 ,
1276
+ Mechanism :: HashMlDsaSha3_384 ( _) => MechanismType :: HASH_ML_DSA_SHA3_384 ,
1277
+ Mechanism :: HashMlDsaSha3_512 ( _) => MechanismType :: HASH_ML_DSA_SHA3_512 ,
1278
+ Mechanism :: HashMlDsaShake128 ( _) => MechanismType :: HASH_ML_DSA_SHAKE128 ,
1279
+ Mechanism :: HashMlDsaShake256 ( _) => MechanismType :: HASH_ML_DSA_SHAKE256 ,
1280
+
1161
1281
Mechanism :: VendorDefined ( vm) => MechanismType {
1162
1282
val : vm. inner . mechanism ,
1163
1283
} ,
@@ -1214,6 +1334,25 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
1214
1334
make_mechanism ( mechanism, params. inner ( ) )
1215
1335
}
1216
1336
Mechanism :: KbkdfFeedback ( params) => make_mechanism ( mechanism, params. inner ( ) ) ,
1337
+ Mechanism :: HashMlDsa ( params) => make_mechanism ( mechanism, params) ,
1338
+ Mechanism :: MlDsa ( params)
1339
+ | Mechanism :: HashMlDsaSha224 ( params)
1340
+ | Mechanism :: HashMlDsaSha256 ( params)
1341
+ | Mechanism :: HashMlDsaSha384 ( params)
1342
+ | Mechanism :: HashMlDsaSha512 ( params)
1343
+ | Mechanism :: HashMlDsaSha3_224 ( params)
1344
+ | Mechanism :: HashMlDsaSha3_256 ( params)
1345
+ | Mechanism :: HashMlDsaSha3_384 ( params)
1346
+ | Mechanism :: HashMlDsaSha3_512 ( params)
1347
+ | Mechanism :: HashMlDsaShake128 ( params)
1348
+ | Mechanism :: HashMlDsaShake256 ( params) => match params. inner ( ) {
1349
+ None => CK_MECHANISM {
1350
+ mechanism,
1351
+ pParameter : null_mut ( ) ,
1352
+ ulParameterLen : 0 ,
1353
+ } ,
1354
+ Some ( params) => make_mechanism ( mechanism, params) ,
1355
+ } ,
1217
1356
// Mechanisms without parameters
1218
1357
Mechanism :: AesKeyGen
1219
1358
| Mechanism :: AesEcb
@@ -1260,7 +1399,8 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
1260
1399
| Mechanism :: GenericSecretKeyGen
1261
1400
| Mechanism :: HkdfKeyGen
1262
1401
| Mechanism :: MlKemKeyPairGen
1263
- | Mechanism :: MlKem => CK_MECHANISM {
1402
+ | Mechanism :: MlKem
1403
+ | Mechanism :: MlDsaKeyPairGen => CK_MECHANISM {
1264
1404
mechanism,
1265
1405
pParameter : null_mut ( ) ,
1266
1406
ulParameterLen : 0 ,
0 commit comments