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 ecmult;
30mod error;
31pub mod extend;
32mod scalar;
33
34pub use crate::error::Error;
35
36pub mod curve {
38 pub use crate::{
39 field::{Field, FieldStorage},
40 group::{Affine, AffineStorage, Jacobian, AFFINE_G, CURVE_B},
41 scalar::Scalar,
42 };
43
44 pub use crate::ecmult::{ECMultContext, ECMultGenContext};
45}
46
47pub mod util {
49 pub const TAG_PUBKEY_EVEN: u8 = 0x02;
50 pub const TAG_PUBKEY_ODD: u8 = 0x03;
51 pub const TAG_PUBKEY_FULL: u8 = 0x04;
52 pub const TAG_PUBKEY_HYBRID_EVEN: u8 = 0x06;
53 pub const TAG_PUBKEY_HYBRID_ODD: u8 = 0x07;
54
55 pub const MESSAGE_SIZE: usize = 32;
56 pub const SECRET_KEY_SIZE: usize = 32;
57 pub const RAW_PUBLIC_KEY_SIZE: usize = 64;
58 pub const FULL_PUBLIC_KEY_SIZE: usize = 65;
59 pub const COMPRESSED_PUBLIC_KEY_SIZE: usize = 33;
60 pub const SIGNATURE_SIZE: usize = 64;
61 pub const DER_MAX_SIGNATURE_SIZE: usize = 72;
62
63 pub use crate::{
64 ecmult::{
65 odd_multiples_table, ECMULT_TABLE_SIZE_A, ECMULT_TABLE_SIZE_G, WINDOW_A, WINDOW_G,
66 },
67 group::{globalz_set_table_gej, set_table_gej_var, AFFINE_INFINITY, JACOBIAN_INFINITY},
68 };
69}