mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
Implement conversions between basepoint table sizes.
This is useful for programs/protocol which can do some heuristics or learning-based approach towards optimising the table size based on the number of uses of e.g. a public key, the second basepoint in a Pedersen commitment, etc., i.e. the first time a public key is used to verify a signature, the usual variable-time basepoint multiscalar multiplication is used, however after 1000 verifications, the table size is upgraded, and again after 10000 verifications, etc.
This commit is contained in:
parent
8a9e09ba34
commit
cfbcb6ca61
1 changed files with 23 additions and 0 deletions
|
|
@ -911,6 +911,29 @@ impl_basepoint_table! {Name = EdwardsBasepointTableRadix256, LookupTable = Looku
|
|||
// it.
|
||||
pub type EdwardsBasepointTableRadix16 = EdwardsBasepointTable;
|
||||
|
||||
macro_rules! impl_basepoint_table_conversions {
|
||||
(LHS = $lhs:ty, RHS = $rhs:ty) => {
|
||||
impl<'a> From<&'a $lhs> for $rhs {
|
||||
fn from(table: &'a $lhs) -> $rhs {
|
||||
<$rhs>::create(&table.basepoint())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a $rhs> for $lhs {
|
||||
fn from(table: &'a $rhs) -> $lhs {
|
||||
<$lhs>::create(&table.basepoint())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl_basepoint_table_conversions!{LHS = EdwardsBasepointTableRadix16, RHS = EdwardsBasepointTableRadix64}
|
||||
impl_basepoint_table_conversions!{LHS = EdwardsBasepointTableRadix16, RHS = EdwardsBasepointTableRadix128}
|
||||
impl_basepoint_table_conversions!{LHS = EdwardsBasepointTableRadix16, RHS = EdwardsBasepointTableRadix256}
|
||||
impl_basepoint_table_conversions!{LHS = EdwardsBasepointTableRadix64, RHS = EdwardsBasepointTableRadix128}
|
||||
impl_basepoint_table_conversions!{LHS = EdwardsBasepointTableRadix64, RHS = EdwardsBasepointTableRadix256}
|
||||
impl_basepoint_table_conversions!{LHS = EdwardsBasepointTableRadix128, RHS = EdwardsBasepointTableRadix256}
|
||||
|
||||
impl EdwardsPoint {
|
||||
/// Multiply by the cofactor: return \\([8]P\\).
|
||||
pub fn mul_by_cofactor(&self) -> EdwardsPoint {
|
||||
|
|
|
|||
Loading…
Reference in a new issue