@@ -25,7 +25,9 @@ use std::ptr::null_mut;
2525use vendor_defined:: VendorDefinedMechanism ;
2626
2727use crate :: error:: Error ;
28+ use crate :: mechanism:: misc:: { ExtractParams , KeyDerivationStringData } ;
2829use crate :: mechanism:: rsa:: PkcsOaepParams ;
30+ use crate :: object:: ObjectHandle ;
2931pub use mechanism_info:: MechanismInfo ;
3032
3133#[ derive( Copy , Debug , Clone , PartialEq , Eq ) ]
@@ -343,6 +345,28 @@ impl MechanismType {
343345 val : CKM_SP800_108_DOUBLE_PIPELINE_KDF ,
344346 } ;
345347
348+ // Other simple key derivation mechanisms
349+ /// Concatenation of a base key and another key
350+ pub const CONCATENATE_BASE_AND_KEY : MechanismType = MechanismType {
351+ val : CKM_CONCATENATE_BASE_AND_KEY ,
352+ } ;
353+ /// Concatenation of a base key and data (i.e. data appended)
354+ pub const CONCATENATE_BASE_AND_DATA : MechanismType = MechanismType {
355+ val : CKM_CONCATENATE_BASE_AND_DATA ,
356+ } ;
357+ /// Concatenation of data and a base key (i.e. data prepended)
358+ pub const CONCATENATE_DATA_AND_BASE : MechanismType = MechanismType {
359+ val : CKM_CONCATENATE_DATA_AND_BASE ,
360+ } ;
361+ /// XOR-ing of a base key and data
362+ pub const XOR_BASE_AND_DATA : MechanismType = MechanismType {
363+ val : CKM_XOR_BASE_AND_DATA ,
364+ } ;
365+ /// Extraction of a key from bits of another key
366+ pub const EXTRACT_KEY_FROM_KEY : MechanismType = MechanismType {
367+ val : CKM_EXTRACT_KEY_FROM_KEY ,
368+ } ;
369+
346370 // ML-KEM
347371 /// ML-KEM key pair generation mechanism
348372 pub const ML_KEM_KEY_PAIR_GEN : MechanismType = MechanismType {
@@ -964,6 +988,11 @@ impl TryFrom<CK_MECHANISM_TYPE> for MechanismType {
964988 CKM_SP800_108_COUNTER_KDF => Ok ( MechanismType :: SP800_108_COUNTER_KDF ) ,
965989 CKM_SP800_108_FEEDBACK_KDF => Ok ( MechanismType :: SP800_108_FEEDBACK_KDF ) ,
966990 CKM_SP800_108_DOUBLE_PIPELINE_KDF => Ok ( MechanismType :: SP800_108_DOUBLE_PIPELINE_KDF ) ,
991+ CKM_CONCATENATE_BASE_AND_KEY => Ok ( MechanismType :: CONCATENATE_BASE_AND_KEY ) ,
992+ CKM_CONCATENATE_BASE_AND_DATA => Ok ( MechanismType :: CONCATENATE_BASE_AND_DATA ) ,
993+ CKM_CONCATENATE_DATA_AND_BASE => Ok ( MechanismType :: CONCATENATE_DATA_AND_BASE ) ,
994+ CKM_XOR_BASE_AND_DATA => Ok ( MechanismType :: XOR_BASE_AND_DATA ) ,
995+ CKM_EXTRACT_KEY_FROM_KEY => Ok ( MechanismType :: EXTRACT_KEY_FROM_KEY ) ,
967996 CKM_ML_KEM_KEY_PAIR_GEN => Ok ( MechanismType :: ML_KEM_KEY_PAIR_GEN ) ,
968997 CKM_ML_KEM => Ok ( MechanismType :: ML_KEM ) ,
969998 CKM_ML_DSA_KEY_PAIR_GEN => Ok ( MechanismType :: ML_DSA_KEY_PAIR_GEN ) ,
@@ -1220,6 +1249,18 @@ pub enum Mechanism<'a> {
12201249 /// NIST SP 800-108 KDF (aka KBKDF) mechanism in double pipeline-mode
12211250 KbkdfDoublePipeline ( kbkdf:: KbkdfParams < ' a > ) ,
12221251
1252+ // Other simple key derivation mechanisms
1253+ /// Concatenation of a base key and another key
1254+ ConcatenateBaseAndKey ( ObjectHandle ) ,
1255+ /// Concatenation of a base key and data (i.e. data appended)
1256+ ConcatenateBaseAndData ( KeyDerivationStringData < ' a > ) ,
1257+ /// Concatenation of data and a base key (i.e. data prepended)
1258+ ConcatenateDataAndBase ( KeyDerivationStringData < ' a > ) ,
1259+ /// XOR-ing of a base key and data
1260+ XorBaseAndData ( KeyDerivationStringData < ' a > ) ,
1261+ /// Extraction of a key from bits of another key
1262+ ExtractKeyFromKey ( ExtractParams ) ,
1263+
12231264 // ML-KEM
12241265 /// ML-KEM key pair generation mechanism
12251266 MlKemKeyPairGen ,
@@ -1367,6 +1408,12 @@ impl Mechanism<'_> {
13671408 Mechanism :: KbkdfFeedback ( _) => MechanismType :: SP800_108_FEEDBACK_KDF ,
13681409 Mechanism :: KbkdfDoublePipeline ( _) => MechanismType :: SP800_108_DOUBLE_PIPELINE_KDF ,
13691410
1411+ Mechanism :: ConcatenateBaseAndKey ( _) => MechanismType :: CONCATENATE_BASE_AND_KEY ,
1412+ Mechanism :: ConcatenateBaseAndData ( _) => MechanismType :: CONCATENATE_BASE_AND_DATA ,
1413+ Mechanism :: ConcatenateDataAndBase ( _) => MechanismType :: CONCATENATE_DATA_AND_BASE ,
1414+ Mechanism :: XorBaseAndData ( _) => MechanismType :: XOR_BASE_AND_DATA ,
1415+ Mechanism :: ExtractKeyFromKey ( _) => MechanismType :: EXTRACT_KEY_FROM_KEY ,
1416+
13701417 Mechanism :: MlKemKeyPairGen => MechanismType :: ML_KEM_KEY_PAIR_GEN ,
13711418 Mechanism :: MlKem => MechanismType :: ML_KEM ,
13721419
@@ -1454,6 +1501,11 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
14541501 make_mechanism ( mechanism, params. inner ( ) )
14551502 }
14561503 Mechanism :: KbkdfFeedback ( params) => make_mechanism ( mechanism, params. inner ( ) ) ,
1504+ Mechanism :: ConcatenateBaseAndKey ( params) => make_mechanism ( mechanism, params) ,
1505+ Mechanism :: ConcatenateBaseAndData ( params)
1506+ | Mechanism :: ConcatenateDataAndBase ( params)
1507+ | Mechanism :: XorBaseAndData ( params) => make_mechanism ( mechanism, params) ,
1508+ Mechanism :: ExtractKeyFromKey ( params) => make_mechanism ( mechanism, params) ,
14571509 Mechanism :: HashMlDsa ( params) => make_mechanism ( mechanism, params) ,
14581510 Mechanism :: MlDsa ( params)
14591511 | Mechanism :: HashMlDsaSha224 ( params)
0 commit comments