54 lines
1.6 KiB
Rust
54 lines
1.6 KiB
Rust
#![no_std]
|
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
|
#![doc(
|
|
html_logo_url = "https://raw.githubusercontent.com/RustCrypto/meta/master/logo.svg",
|
|
html_favicon_url = "https://raw.githubusercontent.com/RustCrypto/meta/master/logo.svg"
|
|
)]
|
|
#![forbid(unsafe_code)]
|
|
#![warn(missing_docs, rust_2018_idioms, unused_qualifications)]
|
|
#![doc = include_str!("../README.md")]
|
|
|
|
#[cfg(feature = "alloc")]
|
|
#[macro_use]
|
|
extern crate alloc;
|
|
|
|
pub mod point_arithmetic;
|
|
|
|
mod affine;
|
|
#[cfg(feature = "dev")]
|
|
mod dev;
|
|
mod field;
|
|
mod projective;
|
|
|
|
pub use crate::{affine::AffinePoint, projective::ProjectivePoint};
|
|
pub use elliptic_curve::{
|
|
self, generic_array, point::Double, Field, FieldBytes, PrimeCurve, PrimeField,
|
|
};
|
|
|
|
use elliptic_curve::CurveArithmetic;
|
|
|
|
/// Parameters for elliptic curves of prime order which can be described by the
|
|
/// short Weierstrass equation.
|
|
pub trait PrimeCurveParams:
|
|
PrimeCurve
|
|
+ CurveArithmetic
|
|
+ CurveArithmetic<AffinePoint = AffinePoint<Self>>
|
|
+ CurveArithmetic<ProjectivePoint = ProjectivePoint<Self>>
|
|
{
|
|
/// Base field element type.
|
|
// TODO(tarcieri): add `Invert` bound
|
|
type FieldElement: PrimeField<Repr = FieldBytes<Self>>;
|
|
|
|
/// [Point arithmetic](point_arithmetic) implementation, might be optimized for this specific curve
|
|
type PointArithmetic: point_arithmetic::PointArithmetic<Self>;
|
|
|
|
/// Coefficient `a` in the curve equation.
|
|
const EQUATION_A: Self::FieldElement;
|
|
|
|
/// Coefficient `b` in the curve equation.
|
|
const EQUATION_B: Self::FieldElement;
|
|
|
|
/// Generator point's affine coordinates: (x, y).
|
|
const GENERATOR: (Self::FieldElement, Self::FieldElement);
|
|
}
|