1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
use super::types::BigNum; use core::fmt; #[derive(Clone, Copy)] pub enum ValueError { UnequalSizeVectors(usize, usize), IncorrectSize(usize), NonPowerOf2(usize), OutOfRange(usize), NegativeValue(BigNum), } impl fmt::Debug for ValueError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { ValueError::UnequalSizeVectors(a, b) => ValueError::UnequalSizeVectors(*a, *b).fmt(f), ValueError::IncorrectSize(a) => ValueError::IncorrectSize(*a).fmt(f), ValueError::NonPowerOf2(a) => ValueError::NonPowerOf2(*a).fmt(f), ValueError::OutOfRange(a) => ValueError::OutOfRange(*a).fmt(f), ValueError::NegativeValue(a) => { write!(f, "ValueError::NegativeValue({})", a.tostring()) } } } } #[derive(Debug, Clone, Copy)] pub enum SerzDeserzError { FieldElementBytesIncorrectSize(usize, usize), G1BytesIncorrectSize(usize), G2BytesIncorrectSize(usize), GTBytesIncorrectSize(usize, usize), RequiredHexChar, CannotParseFP, CannotParseFP2, CannotParseFP4, CannotParseG1, CannotParseG2, CannotParseGT, } impl fmt::Display for SerzDeserzError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { SerzDeserzError::FieldElementBytesIncorrectSize(a, b) => write!( f, "Incorrect bytes size for field element. Given {} but expected {}", a, b ), SerzDeserzError::G1BytesIncorrectSize(a) => write!( f, "Incorrect bytes size for G1 group element. Given {} bytes", a ), SerzDeserzError::G2BytesIncorrectSize(a) => write!( f, "Incorrect bytes size for G2 group element. Given {} bytes", a ), SerzDeserzError::GTBytesIncorrectSize(a, b) => write!( f, "Incorrect bytes size for GT group element. Given {} but expected {}", a, b ), SerzDeserzError::RequiredHexChar => write!(f, "Required hex character"), SerzDeserzError::CannotParseFP => write!(f, "Error while parsing FP"), SerzDeserzError::CannotParseFP2 => write!(f, "Error while parsing FP2"), SerzDeserzError::CannotParseFP4 => write!(f, "Error while parsing FP4"), SerzDeserzError::CannotParseG1 => write!(f, "Error while parsing G1"), SerzDeserzError::CannotParseG2 => write!(f, "Error while parsing G2"), SerzDeserzError::CannotParseGT => write!(f, "Error while parsing GT"), } } } #[macro_export] macro_rules! check_vector_size_for_equality { ( $a:expr, $b:expr ) => {{ if $a.len() != $b.len() { Err(ValueError::UnequalSizeVectors($a.len(), $b.len())) } else { Ok(()) } }}; } #[cfg(test)] mod test { use super::*; #[test] fn test_vector_size_equality() { let a1 = vec![1, 4, 6, 8]; let a2 = vec![4, 5, 2, 1]; assert!(check_vector_size_for_equality!(a1, a2).is_ok()); let a3 = vec![1, 4, 6]; assert!(check_vector_size_for_equality!(a3, a2).is_err()); } }