@@ -402,6 +402,58 @@ impl MechanismType {
402402 val : CKM_HASH_ML_DSA_SHAKE256 ,
403403 } ;
404404
405+ // SLH-DSA
406+ /// SLH-DSA key pair generation mechanism
407+ pub const SLH_DSA_KEY_PAIR_GEN : MechanismType = MechanismType {
408+ val : CKM_SLH_DSA_KEY_PAIR_GEN ,
409+ } ;
410+ /// SLH-DSA signature mechanism
411+ pub const SLH_DSA : MechanismType = MechanismType { val : CKM_SLH_DSA } ;
412+ /// HashSLH-DSA signature mechanism
413+ pub const HASH_SLH_DSA : MechanismType = MechanismType {
414+ val : CKM_HASH_SLH_DSA ,
415+ } ;
416+ /// HashSLH-DSA signature mechanism with SHA224
417+ pub const HASH_SLH_DSA_SHA224 : MechanismType = MechanismType {
418+ val : CKM_HASH_SLH_DSA_SHA224 ,
419+ } ;
420+ /// HashSLH-DSA signature mechanism with SHA256
421+ pub const HASH_SLH_DSA_SHA256 : MechanismType = MechanismType {
422+ val : CKM_HASH_SLH_DSA_SHA256 ,
423+ } ;
424+ /// HashSLH-DSA signature mechanism with SHA384
425+ pub const HASH_SLH_DSA_SHA384 : MechanismType = MechanismType {
426+ val : CKM_HASH_SLH_DSA_SHA384 ,
427+ } ;
428+ /// HashSLH-DSA signature mechanism with SHA512
429+ pub const HASH_SLH_DSA_SHA512 : MechanismType = MechanismType {
430+ val : CKM_HASH_SLH_DSA_SHA512 ,
431+ } ;
432+ /// HashSLH-DSA signature mechanism with SHA3-224
433+ pub const HASH_SLH_DSA_SHA3_224 : MechanismType = MechanismType {
434+ val : CKM_HASH_SLH_DSA_SHA3_224 ,
435+ } ;
436+ /// HashML-DSA signature mechanism with SHA3-256
437+ pub const HASH_SLH_DSA_SHA3_256 : MechanismType = MechanismType {
438+ val : CKM_HASH_SLH_DSA_SHA3_256 ,
439+ } ;
440+ /// HashML-DSA signature mechanism with SHA3-384
441+ pub const HASH_SLH_DSA_SHA3_384 : MechanismType = MechanismType {
442+ val : CKM_HASH_SLH_DSA_SHA3_384 ,
443+ } ;
444+ /// HashML-DSA signature mechanism with SHA3-512
445+ pub const HASH_SLH_DSA_SHA3_512 : MechanismType = MechanismType {
446+ val : CKM_HASH_SLH_DSA_SHA3_512 ,
447+ } ;
448+ /// HashSLH-DSA signature mechanism with SHAKE128
449+ pub const HASH_SLH_DSA_SHAKE128 : MechanismType = MechanismType {
450+ val : CKM_HASH_SLH_DSA_SHAKE128 ,
451+ } ;
452+ /// HashML-DSA signature mechanism with SHAKE256
453+ pub const HASH_SLH_DSA_SHAKE256 : MechanismType = MechanismType {
454+ val : CKM_HASH_SLH_DSA_SHAKE256 ,
455+ } ;
456+
405457 /// Create vendor defined mechanism
406458 ///
407459 /// # Arguments
@@ -811,6 +863,19 @@ impl MechanismType {
811863 CKM_HASH_ML_DSA_SHA3_512 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHA3_512 ) ) ,
812864 CKM_HASH_ML_DSA_SHAKE128 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHAKE128 ) ) ,
813865 CKM_HASH_ML_DSA_SHAKE256 => String :: from ( stringify ! ( CKM_HASH_ML_DSA_SHAKE256 ) ) ,
866+ CKM_SLH_DSA_KEY_PAIR_GEN => String :: from ( stringify ! ( CKM_SLH_DSA_KEY_PAIR_GEN ) ) ,
867+ CKM_SLH_DSA => String :: from ( stringify ! ( CKM_SLH_DSA ) ) ,
868+ CKM_HASH_SLH_DSA => String :: from ( stringify ! ( CKM_HASH_SLH_DSA ) ) ,
869+ CKM_HASH_SLH_DSA_SHA224 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA224 ) ) ,
870+ CKM_HASH_SLH_DSA_SHA256 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA256 ) ) ,
871+ CKM_HASH_SLH_DSA_SHA384 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA384 ) ) ,
872+ CKM_HASH_SLH_DSA_SHA512 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA512 ) ) ,
873+ CKM_HASH_SLH_DSA_SHA3_224 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA3_224 ) ) ,
874+ CKM_HASH_SLH_DSA_SHA3_256 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA3_256 ) ) ,
875+ CKM_HASH_SLH_DSA_SHA3_384 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA3_384 ) ) ,
876+ CKM_HASH_SLH_DSA_SHA3_512 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHA3_512 ) ) ,
877+ CKM_HASH_SLH_DSA_SHAKE128 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHAKE128 ) ) ,
878+ CKM_HASH_SLH_DSA_SHAKE256 => String :: from ( stringify ! ( CKM_HASH_SLH_DSA_SHAKE256 ) ) ,
814879 _ => format ! ( "unknown {mech:08x}" ) ,
815880 }
816881 }
@@ -912,6 +977,18 @@ impl TryFrom<CK_MECHANISM_TYPE> for MechanismType {
912977 CKM_HASH_ML_DSA_SHA3_384 => Ok ( MechanismType :: HASH_ML_DSA_SHA3_384 ) ,
913978 CKM_HASH_ML_DSA_SHA3_512 => Ok ( MechanismType :: HASH_ML_DSA_SHA3_512 ) ,
914979 CKM_HASH_ML_DSA_SHAKE128 => Ok ( MechanismType :: HASH_ML_DSA_SHAKE128 ) ,
980+ CKM_SLH_DSA_KEY_PAIR_GEN => Ok ( MechanismType :: SLH_DSA_KEY_PAIR_GEN ) ,
981+ CKM_SLH_DSA => Ok ( MechanismType :: SLH_DSA ) ,
982+ CKM_HASH_SLH_DSA => Ok ( MechanismType :: HASH_SLH_DSA ) ,
983+ CKM_HASH_SLH_DSA_SHA224 => Ok ( MechanismType :: HASH_SLH_DSA_SHA224 ) ,
984+ CKM_HASH_SLH_DSA_SHA256 => Ok ( MechanismType :: HASH_SLH_DSA_SHA256 ) ,
985+ CKM_HASH_SLH_DSA_SHA384 => Ok ( MechanismType :: HASH_SLH_DSA_SHA384 ) ,
986+ CKM_HASH_SLH_DSA_SHA512 => Ok ( MechanismType :: HASH_SLH_DSA_SHA512 ) ,
987+ CKM_HASH_SLH_DSA_SHA3_224 => Ok ( MechanismType :: HASH_SLH_DSA_SHA3_224 ) ,
988+ CKM_HASH_SLH_DSA_SHA3_256 => Ok ( MechanismType :: HASH_SLH_DSA_SHA3_256 ) ,
989+ CKM_HASH_SLH_DSA_SHA3_384 => Ok ( MechanismType :: HASH_SLH_DSA_SHA3_384 ) ,
990+ CKM_HASH_SLH_DSA_SHA3_512 => Ok ( MechanismType :: HASH_SLH_DSA_SHA3_512 ) ,
991+ CKM_HASH_SLH_DSA_SHAKE128 => Ok ( MechanismType :: HASH_SLH_DSA_SHAKE128 ) ,
915992 other => {
916993 error ! ( "Mechanism type {} is not supported." , other) ;
917994 Err ( Error :: NotSupported )
@@ -1176,6 +1253,34 @@ pub enum Mechanism<'a> {
11761253 /// HashML-DSA signature mechanism with SHAKE256
11771254 HashMlDsaShake256 ( dsa:: SignAdditionalContext < ' a > ) ,
11781255
1256+ // SLH-DSA
1257+ /// SLH-DSA key pair generation mechanism
1258+ SlhDsaKeyPairGen ,
1259+ /// SLH-DSA signature mechanism
1260+ SlhDsa ( dsa:: SignAdditionalContext < ' a > ) ,
1261+ /// HashSLH-DSA signature mechanism
1262+ HashSlhDsa ( dsa:: HashSignAdditionalContext < ' a > ) ,
1263+ /// HashSLH-DSA signature mechanism with SHA224
1264+ HashSlhDsaSha224 ( dsa:: SignAdditionalContext < ' a > ) ,
1265+ /// HashSLH-DSA signature mechanism with SHA256
1266+ HashSlhDsaSha256 ( dsa:: SignAdditionalContext < ' a > ) ,
1267+ /// HashSLH-DSA signature mechanism with SHA384
1268+ HashSlhDsaSha384 ( dsa:: SignAdditionalContext < ' a > ) ,
1269+ /// HashSLH-DSA signature mechanism with SHA512
1270+ HashSlhDsaSha512 ( dsa:: SignAdditionalContext < ' a > ) ,
1271+ /// HashSLH-DSA signature mechanism with SHA3-224
1272+ HashSlhDsaSha3_224 ( dsa:: SignAdditionalContext < ' a > ) ,
1273+ /// HashSLH-DSA signature mechanism with SHA3-256
1274+ HashSlhDsaSha3_256 ( dsa:: SignAdditionalContext < ' a > ) ,
1275+ /// HashSLH-DSA signature mechanism with SHA3-384
1276+ HashSlhDsaSha3_384 ( dsa:: SignAdditionalContext < ' a > ) ,
1277+ /// HashSLH-DSA signature mechanism with SHA3-512
1278+ HashSlhDsaSha3_512 ( dsa:: SignAdditionalContext < ' a > ) ,
1279+ /// HashSLH-DSA signature mechanism with SHAKE128
1280+ HashSlhDsaShake128 ( dsa:: SignAdditionalContext < ' a > ) ,
1281+ /// HashSLH-DSA signature mechanism with SHAKE256
1282+ HashSlhDsaShake256 ( dsa:: SignAdditionalContext < ' a > ) ,
1283+
11791284 /// Vendor defined mechanism
11801285 VendorDefined ( VendorDefinedMechanism < ' a > ) ,
11811286}
@@ -1278,6 +1383,20 @@ impl Mechanism<'_> {
12781383 Mechanism :: HashMlDsaShake128 ( _) => MechanismType :: HASH_ML_DSA_SHAKE128 ,
12791384 Mechanism :: HashMlDsaShake256 ( _) => MechanismType :: HASH_ML_DSA_SHAKE256 ,
12801385
1386+ Mechanism :: SlhDsaKeyPairGen => MechanismType :: SLH_DSA_KEY_PAIR_GEN ,
1387+ Mechanism :: SlhDsa ( _) => MechanismType :: SLH_DSA ,
1388+ Mechanism :: HashSlhDsa ( _) => MechanismType :: HASH_SLH_DSA ,
1389+ Mechanism :: HashSlhDsaSha224 ( _) => MechanismType :: HASH_SLH_DSA_SHA224 ,
1390+ Mechanism :: HashSlhDsaSha256 ( _) => MechanismType :: HASH_SLH_DSA_SHA256 ,
1391+ Mechanism :: HashSlhDsaSha384 ( _) => MechanismType :: HASH_SLH_DSA_SHA384 ,
1392+ Mechanism :: HashSlhDsaSha512 ( _) => MechanismType :: HASH_SLH_DSA_SHA512 ,
1393+ Mechanism :: HashSlhDsaSha3_224 ( _) => MechanismType :: HASH_SLH_DSA_SHA3_224 ,
1394+ Mechanism :: HashSlhDsaSha3_256 ( _) => MechanismType :: HASH_SLH_DSA_SHA3_256 ,
1395+ Mechanism :: HashSlhDsaSha3_384 ( _) => MechanismType :: HASH_SLH_DSA_SHA3_384 ,
1396+ Mechanism :: HashSlhDsaSha3_512 ( _) => MechanismType :: HASH_SLH_DSA_SHA3_512 ,
1397+ Mechanism :: HashSlhDsaShake128 ( _) => MechanismType :: HASH_SLH_DSA_SHAKE128 ,
1398+ Mechanism :: HashSlhDsaShake256 ( _) => MechanismType :: HASH_SLH_DSA_SHAKE256 ,
1399+
12811400 Mechanism :: VendorDefined ( vm) => MechanismType {
12821401 val : vm. inner . mechanism ,
12831402 } ,
@@ -1353,6 +1472,25 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
13531472 } ,
13541473 Some ( params) => make_mechanism ( mechanism, params) ,
13551474 } ,
1475+ Mechanism :: HashSlhDsa ( params) => make_mechanism ( mechanism, params) ,
1476+ Mechanism :: SlhDsa ( params)
1477+ | Mechanism :: HashSlhDsaSha224 ( params)
1478+ | Mechanism :: HashSlhDsaSha256 ( params)
1479+ | Mechanism :: HashSlhDsaSha384 ( params)
1480+ | Mechanism :: HashSlhDsaSha512 ( params)
1481+ | Mechanism :: HashSlhDsaSha3_224 ( params)
1482+ | Mechanism :: HashSlhDsaSha3_256 ( params)
1483+ | Mechanism :: HashSlhDsaSha3_384 ( params)
1484+ | Mechanism :: HashSlhDsaSha3_512 ( params)
1485+ | Mechanism :: HashSlhDsaShake128 ( params)
1486+ | Mechanism :: HashSlhDsaShake256 ( params) => match params. inner ( ) {
1487+ None => CK_MECHANISM {
1488+ mechanism,
1489+ pParameter : null_mut ( ) ,
1490+ ulParameterLen : 0 ,
1491+ } ,
1492+ Some ( params) => make_mechanism ( mechanism, params) ,
1493+ } ,
13561494 // Mechanisms without parameters
13571495 Mechanism :: AesKeyGen
13581496 | Mechanism :: AesEcb
@@ -1400,7 +1538,8 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
14001538 | Mechanism :: HkdfKeyGen
14011539 | Mechanism :: MlKemKeyPairGen
14021540 | Mechanism :: MlKem
1403- | Mechanism :: MlDsaKeyPairGen => CK_MECHANISM {
1541+ | Mechanism :: MlDsaKeyPairGen
1542+ | Mechanism :: SlhDsaKeyPairGen => CK_MECHANISM {
14041543 mechanism,
14051544 pParameter : null_mut ( ) ,
14061545 ulParameterLen : 0 ,
0 commit comments