@@ -1213,6 +1213,32 @@ impl KeyType {
1213
1213
/// HKDF key
1214
1214
pub const HKDF : KeyType = KeyType { val : CKK_HKDF } ;
1215
1215
1216
+ /// Create vendor defined key type
1217
+ ///
1218
+ /// # Arguments
1219
+ ///
1220
+ /// * `val` - The value of vendor defined key type
1221
+ ///
1222
+ /// # Errors
1223
+ ///
1224
+ /// If `val` is less then `CKK_VENDOR_DEFINED`, a `Error::InvalidValue` will be returned
1225
+ ///
1226
+ /// # Examples
1227
+ /// ```rust
1228
+ /// use cryptoki::object::KeyType;
1229
+ /// use cryptoki_sys::CKK_VENDOR_DEFINED;
1230
+ ///
1231
+ /// let some_key_type: KeyType =
1232
+ /// KeyType::new_vendor_defined(CKK_VENDOR_DEFINED | 0x14).unwrap();
1233
+ /// ```
1234
+ pub fn new_vendor_defined ( val : CK_KEY_TYPE ) -> Result < KeyType > {
1235
+ if val < CKK_VENDOR_DEFINED {
1236
+ Err ( Error :: InvalidValue )
1237
+ } else {
1238
+ Ok ( KeyType { val } )
1239
+ }
1240
+ }
1241
+
1216
1242
fn stringify ( key_type : CK_KEY_TYPE ) -> String {
1217
1243
match key_type {
1218
1244
CKK_RSA => String :: from ( stringify ! ( CKK_RSA ) ) ,
@@ -1259,6 +1285,7 @@ impl KeyType {
1259
1285
CKK_EC_EDWARDS => String :: from ( stringify ! ( CKK_EC_EDWARDS ) ) ,
1260
1286
CKK_EC_MONTGOMERY => String :: from ( stringify ! ( CKK_EC_MONTGOMERY ) ) ,
1261
1287
CKK_HKDF => String :: from ( stringify ! ( CKK_HKDF ) ) ,
1288
+ CKK_VENDOR_DEFINED ..=MAX_CU_ULONG => String :: from ( stringify ! ( key_type) ) ,
1262
1289
_ => format ! ( "unknown ({key_type:08x})" ) ,
1263
1290
}
1264
1291
}
@@ -1333,6 +1360,7 @@ impl TryFrom<CK_KEY_TYPE> for KeyType {
1333
1360
CKK_EC_EDWARDS => Ok ( KeyType :: EC_EDWARDS ) ,
1334
1361
CKK_EC_MONTGOMERY => Ok ( KeyType :: EC_MONTGOMERY ) ,
1335
1362
CKK_HKDF => Ok ( KeyType :: HKDF ) ,
1363
+ CKK_VENDOR_DEFINED ..=MAX_CU_ULONG => KeyType :: new_vendor_defined ( key_type) ,
1336
1364
_ => {
1337
1365
error ! ( "Key type {} is not supported." , key_type) ;
1338
1366
Err ( Error :: NotSupported )
0 commit comments