Add code to run the DSA tests ... which still need fixin'.
This commit is contained in:
@@ -116,4 +116,64 @@ macro_rules! privkey_impls {
|
|||||||
privkey_impls!(L1024N160, U1024, U192, U384, U448, U896);
|
privkey_impls!(L1024N160, U1024, U192, U384, U448, U896);
|
||||||
privkey_impls!(L2048N224, U2048, U256, U512, U576, U1152);
|
privkey_impls!(L2048N224, U2048, U256, U512, U576, U1152);
|
||||||
privkey_impls!(L2048N256, U2048, U256, U512, U576, U1152);
|
privkey_impls!(L2048N256, U2048, U256, U512, U576, U1152);
|
||||||
privkey_impls!(L3072N256, U3072, U256, U512, U576, U1152);
|
privkey_impls!(L3072N256, U3072, U256, U512, U576, U1152);
|
||||||
|
|
||||||
|
macro_rules! generate_tests {
|
||||||
|
( $( ($mod: ident, $params: ident, $lt: ident, $nt: ident) ),* ) => {
|
||||||
|
$(
|
||||||
|
#[cfg(test)]
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
mod $mod {
|
||||||
|
use cryptonum::unsigned::Decoder;
|
||||||
|
use super::*;
|
||||||
|
use testing::run_test;
|
||||||
|
use sha2::{Sha224,Sha256,Sha384,Sha512};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn verify() {
|
||||||
|
let fname = format!("testdata/dsa/sign{}.test", stringify!($params));
|
||||||
|
run_test(fname.to_string(), 9, |case| {
|
||||||
|
let (neg0, pbytes) = case.get("p").unwrap();
|
||||||
|
let (neg1, qbytes) = case.get("q").unwrap();
|
||||||
|
let (neg2, gbytes) = case.get("g").unwrap();
|
||||||
|
let (neg3, _bytes) = case.get("y").unwrap();
|
||||||
|
let (neg4, xbytes) = case.get("x").unwrap();
|
||||||
|
let (neg5, mbytes) = case.get("m").unwrap();
|
||||||
|
let (neg6, hbytes) = case.get("h").unwrap();
|
||||||
|
let (neg7, rbytes) = case.get("r").unwrap();
|
||||||
|
let (neg8, sbytes) = case.get("s").unwrap();
|
||||||
|
|
||||||
|
assert!(!neg0 && !neg1 && !neg2 && !neg3 && !neg4 &&
|
||||||
|
!neg5 && !neg6 && !neg7 && !neg8);
|
||||||
|
let p = $lt::from_bytes(pbytes);
|
||||||
|
let q = $nt::from_bytes(qbytes);
|
||||||
|
let g = $lt::from_bytes(gbytes);
|
||||||
|
let x = $nt::from_bytes(xbytes);
|
||||||
|
//let y = $lt::from_bytes(ybytes);
|
||||||
|
let h = usize::from($nt::from_bytes(hbytes));
|
||||||
|
let r = $nt::from_bytes(rbytes);
|
||||||
|
let s = $nt::from_bytes(sbytes);
|
||||||
|
|
||||||
|
let params = $params::new(p,g,q);
|
||||||
|
let private = DSAPrivKey::<$params,$nt>::new(params, x);
|
||||||
|
let sig = match h {
|
||||||
|
224 => private.sign::<Sha224>(mbytes),
|
||||||
|
256 => private.sign::<Sha256>(mbytes),
|
||||||
|
384 => private.sign::<Sha384>(mbytes),
|
||||||
|
512 => private.sign::<Sha512>(mbytes),
|
||||||
|
_ => panic!("Unexpected hash {}", h)
|
||||||
|
};
|
||||||
|
assert_eq!(r, sig.r);
|
||||||
|
assert_eq!(s, sig.s);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_tests!( (DSA1024N160, L1024N160, U1024, U192),
|
||||||
|
(DSA2048N224, L2048N224, U2048, U256),
|
||||||
|
(DSA2048N256, L2048N256, U2048, U256),
|
||||||
|
(DSA3072N256, L3072N256, U3072, U256)
|
||||||
|
);
|
||||||
@@ -97,4 +97,63 @@ macro_rules! pubkey_impls {
|
|||||||
pubkey_impls!(L1024N160, U1024, U192, U384, U2048);
|
pubkey_impls!(L1024N160, U1024, U192, U384, U2048);
|
||||||
pubkey_impls!(L2048N224, U2048, U256, U512, U4096);
|
pubkey_impls!(L2048N224, U2048, U256, U512, U4096);
|
||||||
pubkey_impls!(L2048N256, U2048, U256, U512, U4096);
|
pubkey_impls!(L2048N256, U2048, U256, U512, U4096);
|
||||||
pubkey_impls!(L3072N256, U3072, U256, U512, U6144);
|
pubkey_impls!(L3072N256, U3072, U256, U512, U6144);
|
||||||
|
|
||||||
|
macro_rules! generate_tests {
|
||||||
|
( $( ($mod: ident, $params: ident, $lt: ident, $nt: ident) ),* ) => {
|
||||||
|
$(
|
||||||
|
#[cfg(test)]
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
mod $mod {
|
||||||
|
use cryptonum::unsigned::Decoder;
|
||||||
|
use super::*;
|
||||||
|
use testing::run_test;
|
||||||
|
use sha2::{Sha224,Sha256,Sha384,Sha512};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn verify() {
|
||||||
|
let fname = format!("testdata/dsa/sign{}.test", stringify!($params));
|
||||||
|
run_test(fname.to_string(), 9, |case| {
|
||||||
|
let (neg0, pbytes) = case.get("p").unwrap();
|
||||||
|
let (neg1, qbytes) = case.get("q").unwrap();
|
||||||
|
let (neg2, gbytes) = case.get("g").unwrap();
|
||||||
|
let (neg3, ybytes) = case.get("y").unwrap();
|
||||||
|
let (neg4, _bytes) = case.get("x").unwrap();
|
||||||
|
let (neg5, mbytes) = case.get("m").unwrap();
|
||||||
|
let (neg6, hbytes) = case.get("h").unwrap();
|
||||||
|
let (neg7, rbytes) = case.get("r").unwrap();
|
||||||
|
let (neg8, sbytes) = case.get("s").unwrap();
|
||||||
|
|
||||||
|
assert!(!neg0 && !neg1 && !neg2 && !neg3 && !neg4 &&
|
||||||
|
!neg5 && !neg6 && !neg7 && !neg8);
|
||||||
|
let p = $lt::from_bytes(pbytes);
|
||||||
|
let q = $nt::from_bytes(qbytes);
|
||||||
|
let g = $lt::from_bytes(gbytes);
|
||||||
|
//let x = $lt::from_bytes(xbytes);
|
||||||
|
let y = $lt::from_bytes(ybytes);
|
||||||
|
let h = usize::from($nt::from_bytes(hbytes));
|
||||||
|
let r = $nt::from_bytes(rbytes);
|
||||||
|
let s = $nt::from_bytes(sbytes);
|
||||||
|
|
||||||
|
let params = $params::new(p,g,q);
|
||||||
|
let public = DSAPubKey::<$params,$lt>::new(params, y);
|
||||||
|
let sig = DSASignature::<$nt>::new(r, s);
|
||||||
|
match h {
|
||||||
|
224 => assert!(public.verify::<Sha224>(mbytes, &sig)),
|
||||||
|
256 => assert!(public.verify::<Sha256>(mbytes, &sig)),
|
||||||
|
384 => assert!(public.verify::<Sha384>(mbytes, &sig)),
|
||||||
|
512 => assert!(public.verify::<Sha512>(mbytes, &sig)),
|
||||||
|
_ => panic!("Unexpected hash {}", h)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_tests!( (DSA1024N160, L1024N160, U1024, U192),
|
||||||
|
(DSA2048N224, L2048N224, U2048, U256),
|
||||||
|
(DSA2048N256, L2048N256, U2048, U256),
|
||||||
|
(DSA3072N256, L3072N256, U3072, U256)
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user