@@ -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,31 @@ 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
+ /// * `val` - The value of vendor defined mechanism
308
+ ///
309
+ /// # Errors
310
+ ///
311
+ /// If `val` is less then `CKM_VENDOR_DEFINED`, a `Error::InvalidValue` will be returned
312
+ ///
313
+ /// # Examples
314
+ /// ```rust
315
+ /// use cryptoki::mechanism::{vendor_defined::CKM_VENDOR_DEFINED, MechanismType};
316
+ ///
317
+ /// let some_custom_mech: MechanismType =
318
+ /// MechanismType::new_vendor_defined(CKM_VENDOR_DEFINED | 0x00000001).unwrap();
319
+ /// ```
320
+ pub fn new_vendor_defined ( val : CK_MECHANISM_TYPE ) -> crate :: error:: Result < MechanismType > {
321
+ if val < CKM_VENDOR_DEFINED {
322
+ Err ( Error :: InvalidValue )
323
+ } else {
324
+ Ok ( MechanismType { val } )
325
+ }
326
+ }
327
+
301
328
pub ( crate ) fn stringify ( mech : CK_MECHANISM_TYPE ) -> String {
302
329
match mech {
303
330
CKM_RSA_PKCS_KEY_PAIR_GEN => String :: from ( stringify ! ( CKM_RSA_PKCS_KEY_PAIR_GEN ) ) ,
@@ -937,6 +964,9 @@ pub enum Mechanism<'a> {
937
964
HkdfDerive ( hkdf:: HkdfParams < ' a > ) ,
938
965
/// HKDF-DATA mechanism
939
966
HkdfData ( hkdf:: HkdfParams < ' a > ) ,
967
+
968
+ /// Vendor defined mechanism
969
+ VendorDefined ( VendorDefinedMechanism < ' a > ) ,
940
970
}
941
971
942
972
impl Mechanism < ' _ > {
@@ -1008,6 +1038,10 @@ impl Mechanism<'_> {
1008
1038
Mechanism :: HkdfKeyGen => MechanismType :: HKDF_KEY_GEN ,
1009
1039
Mechanism :: HkdfDerive ( _) => MechanismType :: HKDF_DERIVE ,
1010
1040
Mechanism :: HkdfData ( _) => MechanismType :: HKDF_DATA ,
1041
+
1042
+ Mechanism :: VendorDefined ( vm) => MechanismType {
1043
+ val : vm. inner . mechanism ,
1044
+ } ,
1011
1045
}
1012
1046
}
1013
1047
}
@@ -1087,6 +1121,8 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
1087
1121
pParameter : null_mut ( ) ,
1088
1122
ulParameterLen : 0 ,
1089
1123
} ,
1124
+ // Vendor defined mechanisms
1125
+ Mechanism :: VendorDefined ( vm) => vm. inner ,
1090
1126
}
1091
1127
}
1092
1128
}
0 commit comments