libsecp256k1_core/
lib.rs

1//! Core libraries for libsecp256k1.
2
3#![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
38/// Curve related structs.
39pub 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
49/// Utilities to manipulate the secp256k1 curve parameters.
50pub 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}