Added `MAX_LEN` constant to `serialized_signature`
This also asserts that libsecp256k1 set the correct length to help the compiler elide bound checks.
This commit is contained in:
parent
e642a52e7d
commit
5d51b9d94b
|
@ -167,6 +167,7 @@ impl Signature {
|
||||||
self.as_c_ptr(),
|
self.as_c_ptr(),
|
||||||
);
|
);
|
||||||
debug_assert!(err == 1);
|
debug_assert!(err == 1);
|
||||||
|
assert!(len <= serialized_signature::MAX_LEN, "libsecp256k1 set length to {} but the maximum is {}", len, serialized_signature::MAX_LEN);
|
||||||
ret.set_len(len);
|
ret.set_len(len);
|
||||||
}
|
}
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -11,10 +11,12 @@ use core::{fmt, ops};
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
use super::Signature;
|
use super::Signature;
|
||||||
|
|
||||||
|
pub(crate) const MAX_LEN: usize = 72;
|
||||||
|
|
||||||
/// A DER serialized Signature
|
/// A DER serialized Signature
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct SerializedSignature {
|
pub struct SerializedSignature {
|
||||||
data: [u8; 72],
|
data: [u8; MAX_LEN],
|
||||||
len: usize,
|
len: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +39,7 @@ impl Default for SerializedSignature {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn default() -> SerializedSignature {
|
fn default() -> SerializedSignature {
|
||||||
SerializedSignature {
|
SerializedSignature {
|
||||||
data: [0u8; 72],
|
data: [0u8; MAX_LEN],
|
||||||
len: 0,
|
len: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -224,18 +226,18 @@ mod into_iter {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::SerializedSignature;
|
use super::{SerializedSignature, MAX_LEN};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn iterator_ops_are_homomorphic() {
|
fn iterator_ops_are_homomorphic() {
|
||||||
let mut fake_signature_data = [0; 72];
|
let mut fake_signature_data = [0; MAX_LEN];
|
||||||
// fill it with numbers 0 - 71
|
// fill it with numbers 0 - 71
|
||||||
for (i, byte) in fake_signature_data.iter_mut().enumerate() {
|
for (i, byte) in fake_signature_data.iter_mut().enumerate() {
|
||||||
// up to 72
|
// up to MAX_LEN
|
||||||
*byte = i as u8;
|
*byte = i as u8;
|
||||||
}
|
}
|
||||||
|
|
||||||
let fake_signature = SerializedSignature { data: fake_signature_data, len: 72 };
|
let fake_signature = SerializedSignature { data: fake_signature_data, len: MAX_LEN };
|
||||||
|
|
||||||
let mut iter1 = fake_signature.into_iter();
|
let mut iter1 = fake_signature.into_iter();
|
||||||
let mut iter2 = fake_signature.iter();
|
let mut iter2 = fake_signature.iter();
|
||||||
|
|
Loading…
Reference in New Issue