|
3 | 3 | //! Data types for mechanisms
|
4 | 4 |
|
5 | 5 | pub mod aead;
|
| 6 | +pub mod dsa; |
6 | 7 | pub mod eddsa;
|
7 | 8 | pub mod ekdf;
|
8 | 9 | pub mod elliptic_curve;
|
9 | 10 | pub mod hkdf;
|
10 | 11 | pub mod kbkdf;
|
11 | 12 | mod mechanism_info;
|
12 |
| -pub mod mldsa; |
13 | 13 | pub mod rsa;
|
14 | 14 | pub mod vendor_defined;
|
15 | 15 |
|
@@ -402,6 +402,58 @@ impl MechanismType {
|
402 | 402 | val: CKM_HASH_ML_DSA_SHAKE256,
|
403 | 403 | };
|
404 | 404 |
|
| 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 | + |
405 | 457 | /// Create vendor defined mechanism
|
406 | 458 | ///
|
407 | 459 | /// # Arguments
|
@@ -811,6 +863,19 @@ impl MechanismType {
|
811 | 863 | CKM_HASH_ML_DSA_SHA3_512 => String::from(stringify!(CKM_HASH_ML_DSA_SHA3_512)),
|
812 | 864 | CKM_HASH_ML_DSA_SHAKE128 => String::from(stringify!(CKM_HASH_ML_DSA_SHAKE128)),
|
813 | 865 | 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)), |
814 | 879 | _ => format!("unknown {mech:08x}"),
|
815 | 880 | }
|
816 | 881 | }
|
@@ -912,6 +977,18 @@ impl TryFrom<CK_MECHANISM_TYPE> for MechanismType {
|
912 | 977 | CKM_HASH_ML_DSA_SHA3_384 => Ok(MechanismType::HASH_ML_DSA_SHA3_384),
|
913 | 978 | CKM_HASH_ML_DSA_SHA3_512 => Ok(MechanismType::HASH_ML_DSA_SHA3_512),
|
914 | 979 | 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), |
915 | 992 | other => {
|
916 | 993 | error!("Mechanism type {} is not supported.", other);
|
917 | 994 | Err(Error::NotSupported)
|
@@ -1152,29 +1229,57 @@ pub enum Mechanism<'a> {
|
1152 | 1229 | /// ML-DSA key pair generation mechanism
|
1153 | 1230 | MlDsaKeyPairGen,
|
1154 | 1231 | /// ML-DSA signature mechanism
|
1155 |
| - MlDsa(mldsa::SignAdditionalContext<'a>), |
| 1232 | + MlDsa(dsa::SignAdditionalContext<'a>), |
1156 | 1233 | /// HashML-DSA signature mechanism
|
1157 |
| - HashMlDsa(mldsa::HashSignAdditionalContext<'a>), |
| 1234 | + HashMlDsa(dsa::HashSignAdditionalContext<'a>), |
1158 | 1235 | /// HashML-DSA signature mechanism with SHA224
|
1159 |
| - HashMlDsaSha224(mldsa::SignAdditionalContext<'a>), |
| 1236 | + HashMlDsaSha224(dsa::SignAdditionalContext<'a>), |
1160 | 1237 | /// HashML-DSA signature mechanism with SHA256
|
1161 |
| - HashMlDsaSha256(mldsa::SignAdditionalContext<'a>), |
| 1238 | + HashMlDsaSha256(dsa::SignAdditionalContext<'a>), |
1162 | 1239 | /// HashML-DSA signature mechanism with SHA384
|
1163 |
| - HashMlDsaSha384(mldsa::SignAdditionalContext<'a>), |
| 1240 | + HashMlDsaSha384(dsa::SignAdditionalContext<'a>), |
1164 | 1241 | /// HashML-DSA signature mechanism with SHA512
|
1165 |
| - HashMlDsaSha512(mldsa::SignAdditionalContext<'a>), |
| 1242 | + HashMlDsaSha512(dsa::SignAdditionalContext<'a>), |
1166 | 1243 | /// HashML-DSA signature mechanism with SHA3-224
|
1167 |
| - HashMlDsaSha3_224(mldsa::SignAdditionalContext<'a>), |
| 1244 | + HashMlDsaSha3_224(dsa::SignAdditionalContext<'a>), |
1168 | 1245 | /// HashML-DSA signature mechanism with SHA3-256
|
1169 |
| - HashMlDsaSha3_256(mldsa::SignAdditionalContext<'a>), |
| 1246 | + HashMlDsaSha3_256(dsa::SignAdditionalContext<'a>), |
1170 | 1247 | /// HashML-DSA signature mechanism with SHA3-384
|
1171 |
| - HashMlDsaSha3_384(mldsa::SignAdditionalContext<'a>), |
| 1248 | + HashMlDsaSha3_384(dsa::SignAdditionalContext<'a>), |
1172 | 1249 | /// HashML-DSA signature mechanism with SHA3-512
|
1173 |
| - HashMlDsaSha3_512(mldsa::SignAdditionalContext<'a>), |
| 1250 | + HashMlDsaSha3_512(dsa::SignAdditionalContext<'a>), |
1174 | 1251 | /// HashML-DSA signature mechanism with SHAKE128
|
1175 |
| - HashMlDsaShake128(mldsa::SignAdditionalContext<'a>), |
| 1252 | + HashMlDsaShake128(dsa::SignAdditionalContext<'a>), |
1176 | 1253 | /// HashML-DSA signature mechanism with SHAKE256
|
1177 |
| - HashMlDsaShake256(mldsa::SignAdditionalContext<'a>), |
| 1254 | + HashMlDsaShake256(dsa::SignAdditionalContext<'a>), |
| 1255 | + |
| 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>), |
1178 | 1283 |
|
1179 | 1284 | /// Vendor defined mechanism
|
1180 | 1285 | VendorDefined(VendorDefinedMechanism<'a>),
|
@@ -1278,6 +1383,20 @@ impl Mechanism<'_> {
|
1278 | 1383 | Mechanism::HashMlDsaShake128(_) => MechanismType::HASH_ML_DSA_SHAKE128,
|
1279 | 1384 | Mechanism::HashMlDsaShake256(_) => MechanismType::HASH_ML_DSA_SHAKE256,
|
1280 | 1385 |
|
| 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 | + |
1281 | 1400 | Mechanism::VendorDefined(vm) => MechanismType {
|
1282 | 1401 | val: vm.inner.mechanism,
|
1283 | 1402 | },
|
@@ -1353,6 +1472,25 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
|
1353 | 1472 | },
|
1354 | 1473 | Some(params) => make_mechanism(mechanism, params),
|
1355 | 1474 | },
|
| 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 | + }, |
1356 | 1494 | // Mechanisms without parameters
|
1357 | 1495 | Mechanism::AesKeyGen
|
1358 | 1496 | | Mechanism::AesEcb
|
@@ -1400,7 +1538,8 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
|
1400 | 1538 | | Mechanism::HkdfKeyGen
|
1401 | 1539 | | Mechanism::MlKemKeyPairGen
|
1402 | 1540 | | Mechanism::MlKem
|
1403 |
| - | Mechanism::MlDsaKeyPairGen => CK_MECHANISM { |
| 1541 | + | Mechanism::MlDsaKeyPairGen |
| 1542 | + | Mechanism::SlhDsaKeyPairGen => CK_MECHANISM { |
1404 | 1543 | mechanism,
|
1405 | 1544 | pParameter: null_mut(),
|
1406 | 1545 | ulParameterLen: 0,
|
|
0 commit comments