@@ -7,6 +7,7 @@ use cryptoki_sys::*;
7
7
use std:: fmt:: { Debug , Formatter } ;
8
8
9
9
bitflags ! {
10
+ #[ derive( Debug , Clone , Copy ) ]
10
11
struct MechanismInfoFlags : CK_FLAGS {
11
12
const HW = CKF_HW ;
12
13
const ENCRYPT = CKF_ENCRYPT ;
@@ -25,7 +26,6 @@ bitflags! {
25
26
const EC_F_P = CKF_EC_F_P ;
26
27
const EC_F_2M = CKF_EC_F_2M ;
27
28
const EC_ECPARAMETERS = CKF_EC_ECPARAMETERS ;
28
- const EC_NAMEDCURVE = CKF_EC_NAMEDCURVE ;
29
29
const EC_OID = CKF_EC_OID ;
30
30
const EC_UNCOMPRESS = CKF_EC_UNCOMPRESS ;
31
31
const EC_COMPRESS = CKF_EC_COMPRESS ;
@@ -37,6 +37,12 @@ bitflags! {
37
37
}
38
38
}
39
39
40
+ impl MechanismInfoFlags {
41
+ /// `CKF_EC_NAMEDCURVE` is deprecated with `PKCS#11 3.00`. It is replaced by [`CKF_EC_OID`](MechanismInfoFlags::EC_OID).
42
+ #[ deprecated = "use `EC_OID` instead" ]
43
+ pub const EC_NAMEDCURVE : Self = Self :: from_bits_retain ( CKF_EC_NAMEDCURVE ) ;
44
+ }
45
+
40
46
/// Information about a particular mechanism
41
47
#[ derive( Debug , Clone , Copy ) ]
42
48
pub struct MechanismInfo {
@@ -201,6 +207,7 @@ impl MechanismInfo {
201
207
/// [`ec_from_named_curve`](Self::ec_from_named_curve) must be `true`
202
208
#[ deprecated = "use `ec_from_oid` instead" ]
203
209
pub fn ec_from_named_curve ( & self ) -> bool {
210
+ #[ allow( deprecated) ]
204
211
self . flags . contains ( MechanismInfoFlags :: EC_NAMEDCURVE )
205
212
}
206
213
@@ -302,15 +309,25 @@ impl From<CK_MECHANISM_INFO> for MechanismInfo {
302
309
#[ cfg( test) ]
303
310
mod test {
304
311
use super :: { MechanismInfo , MechanismInfoFlags } ;
312
+ use cryptoki_sys:: CK_FLAGS ;
313
+
314
+ #[ test]
315
+ fn deprecated_flags ( ) {
316
+ let ec_oid_bits: CK_FLAGS = MechanismInfoFlags :: EC_OID . bits ( ) ;
317
+ #[ allow( deprecated) ]
318
+ let ec_namedcurve_bits: CK_FLAGS = MechanismInfoFlags :: EC_NAMEDCURVE . bits ( ) ;
319
+ assert_eq ! ( ec_oid_bits, ec_namedcurve_bits) ;
320
+ }
305
321
306
322
#[ test]
307
323
fn debug_flags_all ( ) {
308
- let expected = "\
309
- HW | ENCRYPT | DECRYPT | DIGEST | SIGN | SIGN_RECOVER | VERIFY | \
310
- VERIFY_RECOVER | GENERATE | GENERATE_KEY_PAIR | WRAP | UNWRAP | DERIVE | \
311
- EXTENSION | EC_F_P | EC_F_2M | EC_ECPARAMETERS | EC_NAMEDCURVE | \
312
- EC_OID | EC_UNCOMPRESS | EC_COMPRESS | MESSAGE_ENCRYPT | MESSAGE_DECRYPT | \
313
- MULTI_MESSAGE | ENCAPSULATE | DECAPSULATE";
324
+ let expected = "MechanismInfoFlags(
325
+ HW | ENCRYPT | DECRYPT | DIGEST | SIGN | SIGN_RECOVER | VERIFY | \
326
+ VERIFY_RECOVER | GENERATE | GENERATE_KEY_PAIR | WRAP | UNWRAP | DERIVE | \
327
+ EXTENSION | EC_F_P | EC_F_2M | EC_ECPARAMETERS | EC_OID | EC_UNCOMPRESS | \
328
+ EC_COMPRESS | MESSAGE_ENCRYPT | MESSAGE_DECRYPT | MULTI_MESSAGE | ENCAPSULATE | \
329
+ DECAPSULATE,
330
+ )" ;
314
331
let all = MechanismInfoFlags :: all ( ) ;
315
332
let observed = format ! ( "{all:#?}" ) ;
316
333
println ! ( "{observed}" ) ;
@@ -327,7 +344,9 @@ MULTI_MESSAGE | ENCAPSULATE | DECAPSULATE";
327
344
let expected = r#"MechanismInfo {
328
345
min_key_size: 16,
329
346
max_key_size: 4096,
330
- flags: (empty),
347
+ flags: MechanismInfoFlags(
348
+ 0x0,
349
+ ),
331
350
}"# ;
332
351
let observed = format ! ( "{info:#?}" ) ;
333
352
assert_eq ! ( observed, expected) ;
0 commit comments