Skip to content

Commit

Permalink
Add signing verification to wycheproof
Browse files Browse the repository at this point in the history
Before this patch, only signature verification was being tested
  • Loading branch information
sosthene-nitrokey authored and nickray committed Jul 4, 2023
1 parent a9f1791 commit a13ca3c
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions tests/wycheproof_eddsa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,32 @@ mod wycheproof {
use wycheproof::wycheproof::*;

use core::convert::TryFrom;
use salty::{PublicKey, Signature};
use salty::constants::{PUBLICKEY_SERIALIZED_LENGTH, SIGNATURE_SERIALIZED_LENGTH};
use salty::constants::{
PUBLICKEY_SERIALIZED_LENGTH, SECRETKEY_SERIALIZED_LENGTH, SIGNATURE_SERIALIZED_LENGTH,
};
use salty::{Keypair, PublicKey, SecretKey, Signature};

#[test_wycheproof("tests/eddsa_test.json", "eddsa_verify_schema.json")]
fn eddsa_test_case(test_key: &Key, test_data: &SignatureTestVector) {
let pk = <[u8; PUBLICKEY_SERIALIZED_LENGTH]>::try_from(test_key.pk)
.map(|arr| PublicKey::try_from(&arr));
let sk = <[u8; SECRETKEY_SERIALIZED_LENGTH]>::try_from(test_key.sk)
.map(|arr| SecretKey::from(&arr));
let expected_sig = <[u8; SIGNATURE_SERIALIZED_LENGTH]>::try_from(test_data.sig)
.map(|arr| Signature::from(&arr));

let pk = <[u8; PUBLICKEY_SERIALIZED_LENGTH]>::try_from(test_key.pk);
let sig = <[u8; SIGNATURE_SERIALIZED_LENGTH]>::try_from(test_data.sig);
let valid: bool;

if pk.is_err() || sig.is_err() {
valid = false;
} else {
let pk = PublicKey::try_from(&pk.unwrap());
if pk.is_err() {
valid = false;
} else {
let sig = Signature::from(&sig.unwrap());
let result = pk.unwrap().verify(&test_data.msg, &sig);
valid = result.is_ok();
let valid = match (pk, sk, expected_sig) {
(Ok(Ok(pk)), Ok(sk), Ok(expected_sig)) => {
let result = pk.verify(&test_data.msg, &expected_sig);
let kp = Keypair {
secret: sk,
public: pk,
};
let sig = kp.sign(&test_data.msg);
result.is_ok() && sig.to_bytes() == test_data.sig
}
}
_ => false,
};

match test_data.result {
ExpectedResult::Valid => assert!(valid),
Expand All @@ -38,7 +42,7 @@ mod wycheproof {
} else {
assert!(!valid)
}
},
}
ExpectedResult::Acceptable => assert!(true),
}
}
Expand Down

0 comments on commit a13ca3c

Please sign in to comment.