disallow Messages that are not valid secret keys to prevent mistakes related to 0
This commit is contained in:
parent
4b88cfc2fc
commit
f93b959b4a
24
src/lib.rs
24
src/lib.rs
|
@ -504,6 +504,10 @@ impl Message {
|
||||||
/// Converts a `MESSAGE_SIZE`-byte slice to a message object
|
/// Converts a `MESSAGE_SIZE`-byte slice to a message object
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_slice(data: &[u8]) -> Result<Message, Error> {
|
pub fn from_slice(data: &[u8]) -> Result<Message, Error> {
|
||||||
|
if data == &[0; constants::MESSAGE_SIZE] {
|
||||||
|
return Err(Error::InvalidMessage);
|
||||||
|
}
|
||||||
|
|
||||||
match data.len() {
|
match data.len() {
|
||||||
constants::MESSAGE_SIZE => {
|
constants::MESSAGE_SIZE => {
|
||||||
let mut ret = [0; constants::MESSAGE_SIZE];
|
let mut ret = [0; constants::MESSAGE_SIZE];
|
||||||
|
@ -515,13 +519,6 @@ impl Message {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a message from a `MESSAGE_SIZE` byte array
|
|
||||||
impl From<[u8; constants::MESSAGE_SIZE]> for Message {
|
|
||||||
fn from(buf: [u8; constants::MESSAGE_SIZE]) -> Message {
|
|
||||||
Message(buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// An ECDSA error
|
/// An ECDSA error
|
||||||
#[derive(Copy, PartialEq, Eq, Clone, Debug)]
|
#[derive(Copy, PartialEq, Eq, Clone, Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
|
@ -990,17 +987,16 @@ mod tests {
|
||||||
s.randomize(&mut thread_rng());
|
s.randomize(&mut thread_rng());
|
||||||
|
|
||||||
// Wild keys: 1, CURVE_ORDER - 1
|
// Wild keys: 1, CURVE_ORDER - 1
|
||||||
// Wild msgs: 0, 1, CURVE_ORDER - 1, CURVE_ORDER
|
// Wild msgs: 1, CURVE_ORDER - 1
|
||||||
let mut wild_keys = [[0; 32]; 2];
|
let mut wild_keys = [[0; 32]; 2];
|
||||||
let mut wild_msgs = [[0; 32]; 4];
|
let mut wild_msgs = [[0; 32]; 2];
|
||||||
|
|
||||||
wild_keys[0][0] = 1;
|
wild_keys[0][0] = 1;
|
||||||
wild_msgs[1][0] = 1;
|
wild_msgs[0][0] = 1;
|
||||||
|
|
||||||
use constants;
|
use constants;
|
||||||
wild_keys[1][..].copy_from_slice(&constants::CURVE_ORDER[..]);
|
wild_keys[1][..].copy_from_slice(&constants::CURVE_ORDER[..]);
|
||||||
wild_msgs[1][..].copy_from_slice(&constants::CURVE_ORDER[..]);
|
wild_msgs[1][..].copy_from_slice(&constants::CURVE_ORDER[..]);
|
||||||
wild_msgs[2][..].copy_from_slice(&constants::CURVE_ORDER[..]);
|
|
||||||
|
|
||||||
wild_keys[1][0] -= 1;
|
wild_keys[1][0] -= 1;
|
||||||
wild_msgs[1][0] -= 1;
|
wild_msgs[1][0] -= 1;
|
||||||
|
@ -1079,7 +1075,11 @@ mod tests {
|
||||||
Err(InvalidMessage));
|
Err(InvalidMessage));
|
||||||
assert_eq!(Message::from_slice(&[0; constants::MESSAGE_SIZE + 1]),
|
assert_eq!(Message::from_slice(&[0; constants::MESSAGE_SIZE + 1]),
|
||||||
Err(InvalidMessage));
|
Err(InvalidMessage));
|
||||||
assert!(Message::from_slice(&[0; constants::MESSAGE_SIZE]).is_ok());
|
assert_eq!(
|
||||||
|
Message::from_slice(&[0; constants::MESSAGE_SIZE]),
|
||||||
|
Err(InvalidMessage)
|
||||||
|
);
|
||||||
|
assert!(Message::from_slice(&[1; constants::MESSAGE_SIZE]).is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in New Issue