add try_new test

This commit is contained in:
Sergio Chouhy 2025-08-13 01:49:17 -03:00
parent 2c0c417c22
commit 4bdd2c6d9f
4 changed files with 51 additions and 22 deletions

View File

@ -22,7 +22,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"0000000000000000000000000000000000000000000000000000000000000003",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(
@ -43,7 +43,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(
@ -64,7 +64,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"C90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B14E5C9",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(
@ -85,7 +85,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"0B432B2677937381AEF05BB02A66ECD012773062CF3FA2549E44F58ED2401710",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"25D1DFF95105F5253C4022F628A996AD3A0D95FBF21D468A1B33F8C160D8F517",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(
@ -104,7 +104,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"D69C3509BB99E412E68B0FE8544E72837DFA30746D8BE2AA65975F29D22DC7B9",
)).unwrap(),
aux_rand: None,
@ -138,7 +138,7 @@ pub fn test_vectors() -> Vec<TestVector> {
// },
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -155,7 +155,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -172,7 +172,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -189,7 +189,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -206,7 +206,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -223,7 +223,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -240,7 +240,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -257,7 +257,7 @@ pub fn test_vectors() -> Vec<TestVector> {
},
TestVector {
seckey: None,
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659",
)).unwrap(),
aux_rand: None,
@ -293,7 +293,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"0340034003400340034003400340034003400340034003400340034003400340",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"778CAA53B4393AC467774D09497A87224BF9FAB6F6E68B23086497324D6FD117",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(
@ -311,7 +311,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"0340034003400340034003400340034003400340034003400340034003400340",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"778CAA53B4393AC467774D09497A87224BF9FAB6F6E68B23086497324D6FD117",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(
@ -329,7 +329,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"0340034003400340034003400340034003400340034003400340034003400340",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"778CAA53B4393AC467774D09497A87224BF9FAB6F6E68B23086497324D6FD117",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(
@ -347,7 +347,7 @@ pub fn test_vectors() -> Vec<TestVector> {
seckey: Some(PrivateKey::try_new(hex_to_bytes(
"0340034003400340034003400340034003400340034003400340034003400340",
)).unwrap()),
pubkey: PublicKey::new(hex_to_bytes(
pubkey: PublicKey::try_new(hex_to_bytes(
"778CAA53B4393AC467774D09497A87224BF9FAB6F6E68B23086497324D6FD117",
)).unwrap(),
aux_rand: Some(hex_to_bytes::<32>(

View File

@ -6,7 +6,7 @@ impl PublicKey {
pub(crate) fn from_cursor(cursor: &mut Cursor<&[u8]>) -> Result<Self, NssaError> {
let mut value = [0u8; 32];
cursor.read_exact(&mut value)?;
Ok(Self::new(value)?)
Ok(Self::try_new(value)?)
}
pub(crate) fn to_bytes(&self) -> &[u8] {

View File

@ -2,7 +2,6 @@ use serde::{Deserialize, Serialize};
use crate::error::NssaError;
// TODO: Dummy impl. Replace by actual private key.
// TODO: Remove Debug, Clone, Serialize, Deserialize, PartialEq and Eq for security reasons
// TODO: Implement Zeroize
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]

View File

@ -1,6 +1,5 @@
use crate::{PrivateKey, error::NssaError};
// TODO: Dummy impl. Replace by actual public key.
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PublicKey([u8; 32]);
@ -16,7 +15,7 @@ impl PublicKey {
Self(value)
}
pub fn new(value: [u8; 32]) -> Result<Self, NssaError> {
pub fn try_new(value: [u8; 32]) -> Result<Self, NssaError> {
// Check point is valid
let _ = secp256k1::XOnlyPublicKey::from_byte_array(value)
.map_err(|_| NssaError::InvalidPublicKey)?;
@ -30,7 +29,38 @@ impl PublicKey {
#[cfg(test)]
mod test {
use crate::{PublicKey, signature::bip340_test_vectors};
use crate::{PublicKey, error::NssaError, signature::bip340_test_vectors};
#[test]
fn test_try_new_invalid_public_key_from_bip340_test_vectors_5() {
let value_invalid_key = [
238, 253, 234, 76, 219, 103, 119, 80, 164, 32, 254, 232, 7, 234, 207, 33, 235, 152,
152, 174, 121, 185, 118, 135, 102, 228, 250, 160, 74, 45, 74, 52,
];
let result = PublicKey::try_new(value_invalid_key);
assert!(matches!(result, Err(NssaError::InvalidPublicKey)));
}
fn test_try_new_invalid_public_key_from_bip340_test_vector_14() {
let value_invalid_key = [
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 252, 48,
];
let result = PublicKey::try_new(value_invalid_key);
assert!(matches!(result, Err(NssaError::InvalidPublicKey)));
}
fn test_try_new_valid_public_keys() {
for (i, test_vector) in bip340_test_vectors::test_vectors().into_iter().enumerate() {
let expected_public_key = test_vector.pubkey;
let public_key = PublicKey::try_new(*expected_public_key.value()).unwrap();
assert_eq!(public_key, expected_public_key);
}
}
#[test]
fn test_public_key_generation_from_bip340_test_vectors() {