Skip to main content

airbender_crypto/secp256r1/
mod.rs

1#[allow(long_running_const_eval)]
2mod context;
3mod field;
4mod points;
5mod scalar;
6mod u64_arithmetic;
7mod verify;
8mod wnaf;
9
10#[cfg(test)]
11mod test_vectors;
12
13use core::fmt::Debug;
14use core::fmt::Display;
15
16pub(crate) const WINDOW_A: usize = 5;
17
18pub(crate) const WINDOW_G: usize = 10;
19
20pub(crate) const ECMULT_TABLE_SIZE_A: usize = 1 << (WINDOW_A - 2);
21pub(crate) const ECMULT_TABLE_SIZE_G: usize = 1 << (WINDOW_G - 2);
22pub(crate) const WNAF_BITS: usize = 256;
23
24pub use verify::verify;
25
26#[derive(Debug)]
27pub enum Secp256r1Err {
28    InvalidSignature,
29    InvalidCoordinates,
30    InvalidFieldBytes,
31    RecoveredInfinity,
32}
33
34impl Display for Secp256r1Err {
35    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
36        match self {
37            Secp256r1Err::InvalidSignature => {
38                write!(f, "secp256r1: Could not recover signature from bytes")
39            }
40            Secp256r1Err::InvalidCoordinates => write!(
41                f,
42                "secp256r1: Could not recover curve point from coordinates"
43            ),
44            Secp256r1Err::RecoveredInfinity => {
45                write!(f, "secp256r1: Received coordinates of point at infinity")
46            }
47            Secp256r1Err::InvalidFieldBytes => write!(f, "secp256r1: Field bytes out of range"),
48        }
49    }
50}