Skip to content

Commit 8ec281d

Browse files
larrydeweytylerfanelli
authored andcommitted
Adding additional tests, and fixing minor bugs.
Signed-off-by: Larry Dewey <[email protected]>
1 parent a791402 commit 8ec281d

File tree

11 files changed

+1730
-6
lines changed

11 files changed

+1730
-6
lines changed

src/certs/snp/ecdsa/mod.rs

+154
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,157 @@ impl TryFrom<&Signature> for Vec<u8> {
153153
Ok(ecdsa::EcdsaSig::try_from(value)?.to_der()?)
154154
}
155155
}
156+
#[cfg(test)]
157+
mod tests {
158+
use super::*;
159+
160+
#[test]
161+
fn test_signature_default() {
162+
let sig: Signature = Signature::default();
163+
assert_eq!(sig.r(), &[0u8; 72]);
164+
assert_eq!(sig.s(), &[0u8; 72]);
165+
}
166+
167+
#[test]
168+
fn test_signature_getters() {
169+
let sig: Signature = Signature {
170+
r: [1u8; 72],
171+
s: [2u8; 72],
172+
_reserved: [0u8; 512 - (SIG_PIECE_SIZE * 2)],
173+
};
174+
assert_eq!(sig.r(), &[1u8; 72]);
175+
assert_eq!(sig.s(), &[2u8; 72]);
176+
}
177+
178+
#[test]
179+
fn test_signature_eq() {
180+
let sig1: Signature = Signature::default();
181+
let sig2: Signature = Signature::default();
182+
let sig3: Signature = Signature {
183+
r: [1u8; 72],
184+
s: [0u8; 72],
185+
_reserved: [0u8; 512 - (SIG_PIECE_SIZE * 2)],
186+
};
187+
188+
assert_eq!(sig1, sig2);
189+
assert_ne!(sig1, sig3);
190+
}
191+
192+
#[test]
193+
fn test_signature_ord() {
194+
let sig1: Signature = Signature::default();
195+
let sig2: Signature = Signature {
196+
r: [1u8; 72],
197+
s: [0u8; 72],
198+
_reserved: [0u8; 512 - (SIG_PIECE_SIZE * 2)],
199+
};
200+
201+
assert!(sig1 < sig2);
202+
}
203+
204+
#[test]
205+
fn test_signature_debug() {
206+
let sig: Signature = Signature::default();
207+
let debug_str: String = format!("{:?}", sig);
208+
assert!(debug_str.starts_with("Signature { r: "));
209+
assert!(debug_str.contains(", s: "));
210+
}
211+
212+
#[test]
213+
fn test_signature_display() {
214+
let sig: Signature = Signature::default();
215+
let display_str: String = format!("{}", sig);
216+
assert!(display_str.contains("Signature:"));
217+
assert!(display_str.contains("R:"));
218+
assert!(display_str.contains("S:"));
219+
}
220+
221+
#[cfg(feature = "openssl")]
222+
mod openssl_tests {
223+
use super::*;
224+
use openssl::bn::BigNum;
225+
use std::convert::TryInto;
226+
227+
#[test]
228+
fn test_from_ecdsa_sig() {
229+
let r = BigNum::from_dec_str("123").unwrap();
230+
let s = BigNum::from_dec_str("456").unwrap();
231+
let ecdsa_sig = ecdsa::EcdsaSig::from_private_components(r, s).unwrap();
232+
let sig: Signature = ecdsa_sig.into();
233+
assert_ne!(sig.r(), &[0u8; 72]);
234+
assert_ne!(sig.s(), &[0u8; 72]);
235+
}
236+
237+
#[test]
238+
fn test_try_from_bytes() {
239+
let r = BigNum::from_dec_str("123").unwrap();
240+
let s = BigNum::from_dec_str("456").unwrap();
241+
let ecdsa_sig = ecdsa::EcdsaSig::from_private_components(r, s).unwrap();
242+
let der = ecdsa_sig.to_der().unwrap();
243+
let sig = Signature::try_from(der.as_slice()).unwrap();
244+
assert_ne!(sig.r(), &[0u8; 72]);
245+
assert_ne!(sig.s(), &[0u8; 72]);
246+
}
247+
248+
#[test]
249+
fn test_try_into_ecdsa_sig() {
250+
let sig = Signature::default();
251+
let ecdsa_sig: ecdsa::EcdsaSig = (&sig).try_into().unwrap();
252+
assert_eq!(ecdsa_sig.r().to_vec(), vec![]);
253+
assert_eq!(ecdsa_sig.s().to_vec(), vec![]);
254+
}
255+
256+
#[test]
257+
fn test_try_into_vec() {
258+
let sig = Signature::default();
259+
let der: Vec<u8> = (&sig).try_into().unwrap();
260+
assert!(!der.is_empty());
261+
}
262+
}
263+
264+
#[cfg(feature = "crypto_nossl")]
265+
mod crypto_nossl_tests {
266+
use super::*;
267+
use std::convert::TryInto;
268+
269+
#[test]
270+
#[should_panic]
271+
fn test_try_into_p384_signature_failure() {
272+
let signature: Signature = Signature::default();
273+
274+
let _p384_sig: p384::ecdsa::Signature = (&signature).try_into().unwrap();
275+
}
276+
277+
#[test]
278+
fn test_try_into_p384_signature() {
279+
// Test with non-zero values
280+
let sig = Signature {
281+
r: [1u8; 72],
282+
s: [2u8; 72],
283+
_reserved: [0u8; 512 - (SIG_PIECE_SIZE * 2)],
284+
};
285+
let p384_sig: p384::ecdsa::Signature = (&sig).try_into().unwrap();
286+
assert_eq!(p384_sig.r().to_bytes().as_slice(), &[1u8; 48]);
287+
assert_eq!(p384_sig.s().to_bytes().as_slice(), &[2u8; 48]);
288+
}
289+
}
290+
291+
#[test]
292+
fn test_signature_serde() {
293+
let sig: Signature = Signature::default();
294+
let serialized: Vec<u8> = bincode::serialize(&sig).unwrap();
295+
let deserialized: Signature = bincode::deserialize(&serialized).unwrap();
296+
assert_eq!(sig, deserialized);
297+
}
298+
299+
#[test]
300+
fn test_signature_max_values() {
301+
let sig: Signature = Signature {
302+
r: [0xFF; 72],
303+
s: [0xFF; 72],
304+
_reserved: [0u8; 512 - (SIG_PIECE_SIZE * 2)],
305+
};
306+
assert_eq!(sig.r(), &[0xFF; 72]);
307+
assert_eq!(sig.s(), &[0xFF; 72]);
308+
}
309+
}

0 commit comments

Comments
 (0)