mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
Originally this was for hygiene, so that we could erase points from heap-allocated memory in multiscalar_mult, but it ends up providing a cleaner API for scalar multiplication. It's kept inside curve_models for now, but it could go somewhere else if that's a better place.
53 lines
1.7 KiB
Rust
53 lines
1.7 KiB
Rust
// -*- mode: rust; -*-
|
|
//
|
|
// This file is part of curve25519-dalek.
|
|
// Copyright (c) 2016-2017 Isis Lovecruft, Henry de Valence
|
|
// See LICENSE for licensing information.
|
|
//
|
|
// Authors:
|
|
// - Isis Agora Lovecruft <isis@patternsinthevoid.net>
|
|
// - Henry de Valence <hdevalence@hdevalence.ca>
|
|
|
|
//! Module for common traits.
|
|
|
|
use subtle;
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Public Traits
|
|
// ------------------------------------------------------------------------
|
|
|
|
/// Trait for getting the identity element of a point type.
|
|
pub trait Identity {
|
|
/// Returns the identity element of the curve.
|
|
/// Can be used as a constructor.
|
|
fn identity() -> Self;
|
|
}
|
|
|
|
/// Trait for testing if a curve point is equivalent to the identity point.
|
|
pub trait IsIdentity {
|
|
/// Return true if this element is the identity element of the curve.
|
|
fn is_identity(&self) -> bool;
|
|
}
|
|
|
|
/// Implement generic identity equality testing for a point representations
|
|
/// which have constant-time equality testing and a defined identity
|
|
/// constructor.
|
|
impl<T> IsIdentity for T where T: subtle::Equal + Identity {
|
|
fn is_identity(&self) -> bool {
|
|
self.ct_eq(&T::identity()) == 1u8
|
|
}
|
|
}
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Private Traits
|
|
// ------------------------------------------------------------------------
|
|
|
|
/// Trait for checking whether a point is on the curve.
|
|
///
|
|
/// This trait is only for debugging/testing, since it should be
|
|
/// impossible for a `curve25519-dalek` user to construct an invalid
|
|
/// point.
|
|
pub(crate) trait ValidityCheck {
|
|
/// Checks whether the point is on the curve. Not CT.
|
|
fn is_valid(&self) -> bool;
|
|
}
|