@@ -8,6 +8,7 @@ pub mod elliptic_curve;
8
8
pub mod hkdf;
9
9
mod mechanism_info;
10
10
pub mod rsa;
11
+ pub mod vendor_defined;
11
12
12
13
use crate :: error:: Error ;
13
14
use cryptoki_sys:: * ;
@@ -18,6 +19,7 @@ use std::fmt::Formatter;
18
19
use std:: mem:: size_of;
19
20
use std:: ops:: Deref ;
20
21
use std:: ptr:: null_mut;
22
+ use vendor_defined:: VendorDefinedMechanism ;
21
23
22
24
use crate :: mechanism:: rsa:: PkcsOaepParams ;
23
25
pub use mechanism_info:: MechanismInfo ;
@@ -298,6 +300,28 @@ impl MechanismType {
298
300
/// HKDF-DATA mechanism
299
301
pub const HKDF_DATA : MechanismType = MechanismType { val : CKM_HKDF_DATA } ;
300
302
303
+ /// Create vendor defined mechanism
304
+ ///
305
+ /// # Arguments
306
+ ///
307
+ /// * `adding` - The adding based on `CKM_VENDOR_DEFINED`
308
+ ///
309
+ /// Usually vendors defines custom mechanism like this:
310
+ /// ```c
311
+ /// #define CKM_SOME_CUSTOM_MECH (CKM_VENDOR_DEFINED | 0x00000001UL)
312
+ /// ```
313
+ ///
314
+ /// It maps to
315
+ /// ```rust
316
+ /// pub const CKM_SOME_CUSTOM_MECH: MechanismType =
317
+ /// MechanismType::new_vendor_defined(0x00000001);
318
+ /// ```
319
+ pub const fn new_vendor_defined ( adding : u64 ) -> MechanismType {
320
+ MechanismType {
321
+ val : CKM_VENDOR_DEFINED | adding,
322
+ }
323
+ }
324
+
301
325
pub ( crate ) fn stringify ( mech : CK_MECHANISM_TYPE ) -> String {
302
326
match mech {
303
327
CKM_RSA_PKCS_KEY_PAIR_GEN => String :: from ( stringify ! ( CKM_RSA_PKCS_KEY_PAIR_GEN ) ) ,
@@ -937,6 +961,9 @@ pub enum Mechanism<'a> {
937
961
HkdfDerive ( hkdf:: HkdfParams < ' a > ) ,
938
962
/// HKDF-DATA mechanism
939
963
HkdfData ( hkdf:: HkdfParams < ' a > ) ,
964
+
965
+ /// Vendor defined mechanism
966
+ VendorDefined ( VendorDefinedMechanism < ' a > ) ,
940
967
}
941
968
942
969
impl Mechanism < ' _ > {
@@ -1008,6 +1035,10 @@ impl Mechanism<'_> {
1008
1035
Mechanism :: HkdfKeyGen => MechanismType :: HKDF_KEY_GEN ,
1009
1036
Mechanism :: HkdfDerive ( _) => MechanismType :: HKDF_DERIVE ,
1010
1037
Mechanism :: HkdfData ( _) => MechanismType :: HKDF_DATA ,
1038
+
1039
+ Mechanism :: VendorDefined ( vm) => MechanismType {
1040
+ val : vm. inner . mechanism ,
1041
+ } ,
1011
1042
}
1012
1043
}
1013
1044
}
@@ -1087,6 +1118,8 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
1087
1118
pParameter : null_mut ( ) ,
1088
1119
ulParameterLen : 0 ,
1089
1120
} ,
1121
+ // Vendor defined mechanisms
1122
+ Mechanism :: VendorDefined ( vm) => vm. inner ,
1090
1123
}
1091
1124
}
1092
1125
}
0 commit comments