airbender_crypto/secp256r1/
mod.rs1#[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}