Skip to content

Commit

Permalink
Add tests for ecdsa::Signature::from_compact
Browse files Browse the repository at this point in the history
  • Loading branch information
shinghim committed Sep 29, 2024
1 parent 736adc9 commit 7ebe8e8
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions src/ecdsa/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -429,3 +429,58 @@ pub(crate) fn der_length_check(sig: &ffi::Signature, max_len: usize) -> bool {
}
len <= max_len
}

#[cfg(test)]
mod tests {
use crate::ecdsa::Signature;
use crate::Scalar;

#[test]
fn test_from_compact_min_r_and_min_s() {
// From libsecp256k1: "The signature must consist of a 32-byte big endian R value, followed
// by a 32-byte big endian S value. If R or S fall outside of [0..order-1], the encoding is
// invalid. R and S with value 0 are allowed in the encoding."
let r = Scalar::ZERO;
let s = Scalar::ZERO;
let mut bytes: [u8; 64] = [0; 64];
bytes[..32].copy_from_slice(&r.to_be_bytes());
bytes[32..].copy_from_slice(&s.to_be_bytes());

assert!(Signature::from_compact(&bytes).is_ok())
}

#[test]
fn test_from_compact_max_r_and_max_s() {
let r = Scalar::MAX;
let s = Scalar::MAX;
let mut bytes: [u8; 64] = [0; 64];
bytes[..32].copy_from_slice(&r.to_be_bytes());
bytes[32..].copy_from_slice(&s.to_be_bytes());

assert!(Signature::from_compact(&bytes).is_ok())
}

#[test]
fn test_from_compact_invalid_r() {
let r = Scalar::MAX;
let s = Scalar::MAX;
let mut bytes: [u8; 64] = [0; 64];
bytes[..32].copy_from_slice(&r.to_be_bytes());
bytes[32..].copy_from_slice(&s.to_be_bytes());
bytes[31] = bytes[31] + 1;

assert!(Signature::from_compact(&bytes).is_err())
}

#[test]
fn test_from_compact_invalid_s() {
let r = Scalar::MAX;
let s = Scalar::MAX;
let mut bytes: [u8; 64] = [0; 64];
bytes[..32].copy_from_slice(&r.to_be_bytes());
bytes[32..].copy_from_slice(&s.to_be_bytes());
bytes[63] = bytes[63] + 1;

assert!(Signature::from_compact(&bytes).is_err())
}
}

0 comments on commit 7ebe8e8

Please sign in to comment.