tiny_ec_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 ecmult;
30mod error;
31pub mod extend;
32mod scalar;
33
34pub use crate::error::Error;
35
36/// Curve related structs.
37pub 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
47/// Utilities to manipulate the secp256k1 curve parameters.
48pub 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}