1#![allow(
4 clippy::cast_ptr_alignment,
5 clippy::identity_op,
6 clippy::many_single_char_names,
7 clippy::needless_range_loop,
8 clippy::suspicious_op_assign_impl,
9 clippy::too_many_arguments,
10 clippy::type_complexity
11)]
12#![deny(
13 unused_import_braces,
14 unused_imports,
15 unused_comparisons,
16 unused_must_use,
17 unused_variables,
18 non_shorthand_field_patterns,
19 unreachable_code,
20 unused_parens
21)]
22#![cfg_attr(not(feature = "std"), no_std)]
23extern crate alloc;
24
25#[macro_use]
26mod field;
27#[macro_use]
28mod group;
29mod der;
30mod ecdh;
31mod ecdsa;
32mod ecmult;
33mod error;
34mod scalar;
35
36pub use crate::error::Error;
37
38pub mod curve {
40 pub use crate::{
41 field::{Field, FieldStorage},
42 group::{Affine, AffineStorage, Jacobian, AFFINE_G, CURVE_B},
43 scalar::Scalar,
44 };
45
46 pub use crate::ecmult::{ECMultContext, ECMultGenContext};
47}
48
49pub mod util {
51 pub const TAG_PUBKEY_EVEN: u8 = 0x02;
52 pub const TAG_PUBKEY_ODD: u8 = 0x03;
53 pub const TAG_PUBKEY_FULL: u8 = 0x04;
54 pub const TAG_PUBKEY_HYBRID_EVEN: u8 = 0x06;
55 pub const TAG_PUBKEY_HYBRID_ODD: u8 = 0x07;
56
57 pub const MESSAGE_SIZE: usize = 32;
58 pub const SECRET_KEY_SIZE: usize = 32;
59 pub const RAW_PUBLIC_KEY_SIZE: usize = 64;
60 pub const FULL_PUBLIC_KEY_SIZE: usize = 65;
61 pub const COMPRESSED_PUBLIC_KEY_SIZE: usize = 33;
62 pub const SIGNATURE_SIZE: usize = 64;
63 pub const DER_MAX_SIGNATURE_SIZE: usize = 72;
64
65 pub use crate::{
66 ecmult::{
67 odd_multiples_table, ECMULT_TABLE_SIZE_A, ECMULT_TABLE_SIZE_G, WINDOW_A, WINDOW_G,
68 },
69 group::{globalz_set_table_gej, set_table_gej_var, AFFINE_INFINITY, JACOBIAN_INFINITY},
70 };
71
72 pub use crate::der::{Decoder, SignatureArray};
73}