Skip to content

Commit 0d50989

Browse files
committed
Ed25519ctx is not FIPS approved
And OpenSSL completely removed it from the fips module. So fail early. Signed-off-by: Simo Sorce <simo@redhat.com>
1 parent 2762a36 commit 0d50989

File tree

2 files changed

+55
-30
lines changed

2 files changed

+55
-30
lines changed

src/ossl/eddsa.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ fn parse_params(
5252
if params.phFlag == CK_TRUE {
5353
return Ok((SigAlg::Ed25519ph, ctx));
5454
} else {
55-
return Ok((SigAlg::Ed25519ctx, ctx));
55+
if cfg!(feature = "fips") {
56+
return Err(CKR_MECHANISM_PARAM_INVALID)?;
57+
} else {
58+
return Ok((SigAlg::Ed25519ctx, ctx));
59+
}
5660
}
5761
}
5862
if outlen == OUTLEN_ED448 {

src/tests/eddsa.rs

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ fn test_create_eddsa_objects() {
5858
));
5959

6060
let ctx = hex::decode("666f6f").expect("Failed to decode context");
61+
let data = hex::decode("f726936d19c800494e3fdaff20b276a8")
62+
.expect("Failed to decode data");
63+
let sign: [u8; 64] = [0; 64];
64+
let mut sign_len: CK_ULONG = 64;
6165

6266
let params: CK_EDDSA_PARAMS = CK_EDDSA_PARAMS {
6367
phFlag: CK_FALSE,
@@ -69,40 +73,45 @@ fn test_create_eddsa_objects() {
6973
pParameter: void_ptr!(&params),
7074
ulParameterLen: sizeof!(CK_EDDSA_PARAMS),
7175
};
76+
7277
let ret = fn_sign_init(session, &mut mechanism, private_handle);
73-
assert_eq!(ret, CKR_OK);
78+
if cfg!(feature = "fips") {
79+
assert_eq!(ret, CKR_MECHANISM_PARAM_INVALID);
80+
} else {
81+
assert_eq!(ret, CKR_OK);
7482

75-
let data = hex::decode("f726936d19c800494e3fdaff20b276a8")
76-
.expect("Failed to decode data");
77-
let sign: [u8; 64] = [0; 64];
78-
let mut sign_len: CK_ULONG = 64;
79-
let ret = fn_sign(
80-
session,
81-
data.as_ptr() as *mut u8,
82-
data.len() as CK_ULONG,
83-
sign.as_ptr() as *mut _,
84-
&mut sign_len,
85-
);
86-
assert_eq!(ret, CKR_OK);
87-
assert_eq!(sign_len, 64);
88-
let signature = hex::decode(
89-
"55a4cc2f70a54e04288c5f4cd1e45a7bb520b36292911876cada7323198dd87a\
90-
8b36950b95130022907a7fb7c4e9b2d5f6cca685a587b4b21f4b888e4e7edb0d",
91-
)
92-
.expect("failed to decode expected signature");
93-
assert_eq!(signature, sign);
83+
let ret = fn_sign(
84+
session,
85+
data.as_ptr() as *mut u8,
86+
data.len() as CK_ULONG,
87+
sign.as_ptr() as *mut _,
88+
&mut sign_len,
89+
);
90+
assert_eq!(ret, CKR_OK);
91+
assert_eq!(sign_len, 64);
92+
let signature = hex::decode(
93+
"55a4cc2f70a54e04288c5f4cd1e45a7bb520b36292911876cada7323198dd87a\
94+
8b36950b95130022907a7fb7c4e9b2d5f6cca685a587b4b21f4b888e4e7edb0d",
95+
)
96+
.expect("failed to decode expected signature");
97+
assert_eq!(signature, sign);
98+
}
9499

95100
let ret = fn_verify_init(session, &mut mechanism, public_handle);
96-
assert_eq!(ret, CKR_OK);
101+
if cfg!(feature = "fips") {
102+
assert_eq!(ret, CKR_MECHANISM_PARAM_INVALID);
103+
} else {
104+
assert_eq!(ret, CKR_OK);
97105

98-
let ret = fn_verify(
99-
session,
100-
data.as_ptr() as *mut u8,
101-
data.len() as CK_ULONG,
102-
sign.as_ptr() as *mut u8,
103-
sign_len,
104-
);
105-
assert_eq!(ret, CKR_OK);
106+
let ret = fn_verify(
107+
session,
108+
data.as_ptr() as *mut u8,
109+
data.len() as CK_ULONG,
110+
sign.as_ptr() as *mut u8,
111+
sign_len,
112+
);
113+
assert_eq!(ret, CKR_OK);
114+
}
106115

107116
testtokn.finalize();
108117
}
@@ -530,6 +539,18 @@ fn test_eddsa_units(session: CK_SESSION_HANDLE, test_data: Vec<EddsaTestUnit>) {
530539
}
531540

532541
let ret = fn_sign_init(session, &mut mechanism, priv_handle);
542+
if cfg!(feature = "fips") {
543+
if unit.algo.as_str() == "Ed25519ctx" {
544+
/* expect failure for this in FIPS builds */
545+
if ret != CKR_MECHANISM_PARAM_INVALID {
546+
panic!(
547+
"Expected {} but got {} for unit test at line {}",
548+
CKR_MECHANISM_PARAM_INVALID, ret, unit.line
549+
);
550+
}
551+
continue;
552+
}
553+
}
533554
if ret != CKR_OK {
534555
panic!("Failed ({}) unit test at line {}", ret, unit.line);
535556
}

0 commit comments

Comments
 (0)