mirror of
https://github.com/saymrwulf/betrusted-curve25519-dalek-source.git
synced 2026-09-05 20:30:54 +00:00
Generate AFFINE_ODD_MULTIPLES_OF_BASEPOINT at compile time
This commit is contained in:
parent
e7387650f6
commit
399a9db478
4 changed files with 16 additions and 104 deletions
16
build.rs
16
build.rs
|
|
@ -1,5 +1,6 @@
|
|||
#![cfg_attr(feature = "nightly", feature(i128_type))]
|
||||
#![allow(unused_variables)]
|
||||
#![allow(non_snake_case)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
extern crate core;
|
||||
|
|
@ -87,5 +88,18 @@ use edwards::EdwardsBasepointTable;
|
|||
/// The table is defined so `constants::base[i][j-1] = j*(16^2i)*B`,
|
||||
/// for `0 ≤ i < 32`, `1 ≤ j < 9`.
|
||||
pub const ED25519_BASEPOINT_TABLE: EdwardsBasepointTable = {:?};
|
||||
\n\n", &table).as_bytes()).unwrap();
|
||||
\n\n", &table).as_bytes()).unwrap();
|
||||
|
||||
// Now generate AFFINE_ODD_MULTIPLES_OF_BASEPOINT
|
||||
let B = &constants::ED25519_BASEPOINT_POINT;
|
||||
let B2 = B.double();
|
||||
let mut odd_multiples = [B.to_affine_niels(); 8];
|
||||
for i in 0..7 {
|
||||
odd_multiples[i+1] = (&B2 + &odd_multiples[i]).to_extended().to_affine_niels();
|
||||
}
|
||||
|
||||
f.write_all(format!("\n
|
||||
/// Odd multiples of the basepoint `[B, 3B, 5B, 7B, 9B, 11B, 13B, 15B]`.
|
||||
pub(crate) const AFFINE_ODD_MULTIPLES_OF_BASEPOINT: [AffineNielsPoint; 8] = {:?};
|
||||
\n\n", &odd_multiples).as_bytes()).unwrap();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,12 +12,9 @@
|
|||
//! and useful field elements like `sqrt(-1)`), as well as
|
||||
//! lookup tables of pre-computed points.
|
||||
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
use field_32bit::FieldElement32;
|
||||
use scalar_32bit::Scalar32;
|
||||
use edwards::ExtendedPoint;
|
||||
use edwards::AffineNielsPoint;
|
||||
|
||||
/// Edwards `d` value, equal to `-121665/121666 mod p`.
|
||||
pub(crate) const EDWARDS_D: FieldElement32 = FieldElement32([
|
||||
|
|
@ -148,48 +145,3 @@ pub const EIGHT_TORSION: [ExtendedPoint; 8] = [
|
|||
T: FieldElement32([25262188, 11972680, -11716002, 5869612, 18193162, -16297739, -20670665, 8559098, -3541543, 5011181])
|
||||
},
|
||||
];
|
||||
|
||||
/// Odd multiples of the basepoint `[B, 3B, 5B, 7B, 9B, 11B, 13B, 15B]`.
|
||||
pub(crate) const AFFINE_ODD_MULTIPLES_OF_BASEPOINT: [AffineNielsPoint; 8] = [
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605]),
|
||||
y_minus_x: FieldElement32([-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378]),
|
||||
xy2d: FieldElement32([-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546]),
|
||||
},
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024]),
|
||||
y_minus_x: FieldElement32([16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574]),
|
||||
xy2d: FieldElement32([30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357]),
|
||||
},
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380]),
|
||||
y_minus_x: FieldElement32([4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306]),
|
||||
xy2d: FieldElement32([19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942]),
|
||||
},
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766]),
|
||||
y_minus_x: FieldElement32([-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701]),
|
||||
xy2d: FieldElement32([28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300]),
|
||||
},
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877]),
|
||||
y_minus_x: FieldElement32([-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951]),
|
||||
xy2d: FieldElement32([4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784]),
|
||||
},
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436]),
|
||||
y_minus_x: FieldElement32([25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918]),
|
||||
xy2d: FieldElement32([23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877]),
|
||||
},
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800]),
|
||||
y_minus_x: FieldElement32([-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305]),
|
||||
xy2d: FieldElement32([-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300]),
|
||||
},
|
||||
AffineNielsPoint{
|
||||
y_plus_x: FieldElement32([-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876]),
|
||||
y_minus_x: FieldElement32([-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619]),
|
||||
xy2d: FieldElement32([-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683]),
|
||||
},
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -12,12 +12,9 @@
|
|||
//! and useful field elements like `sqrt(-1)`), as well as
|
||||
//! lookup tables of pre-computed points.
|
||||
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
use field_64bit::FieldElement64;
|
||||
use scalar_64bit::Scalar64;
|
||||
use edwards::ExtendedPoint;
|
||||
use edwards::AffineNielsPoint;
|
||||
|
||||
/// Edwards `d` value, equal to `-121665/121666 mod p`.
|
||||
pub(crate) const EDWARDS_D: FieldElement64 = FieldElement64([929955233495203, 466365720129213, 1662059464998953, 2033849074728123, 1442794654840575]);
|
||||
|
|
@ -133,55 +130,3 @@ pub const EIGHT_TORSION: [ExtendedPoint; 8] = [
|
|||
T: FieldElement64([803472979097708, 393902981724766, 1158077081819914, 574391322974006, 336294660666841]),
|
||||
}
|
||||
];
|
||||
|
||||
/// Odd multiples of the basepoint `[B, 3B, 5B, 7B, 9B, 11B, 13B, 15B]`.
|
||||
pub(crate) const AFFINE_ODD_MULTIPLES_OF_BASEPOINT: [AffineNielsPoint; 8] = [
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([1288382639258501, 245678601348599, 269427782077623, 1462984067271730, 137412439391563]),
|
||||
y_minus_x: FieldElement64([62697248952638, 204681361388450, 631292143396476, 338455783676468, 1213667448819585]),
|
||||
xy2d: FieldElement64([301289933810280, 1259582250014073, 1422107436869536, 796239922652654, 1953934009299142]),
|
||||
}
|
||||
,
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([1601611775252272, 1720807796594148, 1132070835939856, 1260455018889551, 2147779492816911]),
|
||||
y_minus_x: FieldElement64([316559037616741, 2177824224946892, 1459442586438991, 1461528397712656, 751590696113597]),
|
||||
xy2d: FieldElement64([1850748884277385, 1200145853858453, 1068094770532492, 672251375690438, 1586055907191707]),
|
||||
}
|
||||
,
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([769950342298419, 132954430919746, 844085933195555, 974092374476333, 726076285546016]),
|
||||
y_minus_x: FieldElement64([425251763115706, 608463272472562, 442562545713235, 837766094556764, 374555092627893]),
|
||||
xy2d: FieldElement64([1086255230780037, 274979815921559, 1960002765731872, 929474102396301, 1190409889297339]),
|
||||
}
|
||||
,
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([665000864555967, 2065379846933859, 370231110385876, 350988370788628, 1233371373142985]),
|
||||
y_minus_x: FieldElement64([2019367628972465, 676711900706637, 110710997811333, 1108646842542025, 517791959672113]),
|
||||
xy2d: FieldElement64([965130719900578, 247011430587952, 526356006571389, 91986625355052, 2157223321444601]),
|
||||
}
|
||||
,
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([1802695059465007, 1664899123557221, 593559490740857, 2160434469266659, 927570450755031]),
|
||||
y_minus_x: FieldElement64([1725674970513508, 1933645953859181, 1542344539275782, 1767788773573747, 1297447965928905]),
|
||||
xy2d: FieldElement64([1381809363726107, 1430341051343062, 2061843536018959, 1551778050872521, 2036394857967624]),
|
||||
}
|
||||
,
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([1970894096313054, 528066325833207, 1619374932191227, 2207306624415883, 1169170329061080]),
|
||||
y_minus_x: FieldElement64([2070390218572616, 1458919061857835, 624171843017421, 1055332792707765, 433987520732508]),
|
||||
xy2d: FieldElement64([893653801273833, 1168026499324677, 1242553501121234, 1306366254304474, 1086752658510815]),
|
||||
}
|
||||
,
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([213454002618221, 939771523987438, 1159882208056014, 317388369627517, 621213314200687]),
|
||||
y_minus_x: FieldElement64([1971678598905747, 338026507889165, 762398079972271, 655096486107477, 42299032696322]),
|
||||
xy2d: FieldElement64([177130678690680, 1754759263300204, 1864311296286618, 1180675631479880, 1292726903152791]),
|
||||
}
|
||||
,
|
||||
AffineNielsPoint {
|
||||
y_plus_x: FieldElement64([1913163449625248, 460779200291993, 2193883288642314, 1008900146920800, 1721983679009502]),
|
||||
y_minus_x: FieldElement64([1070401523076875, 1272492007800961, 1910153608563310, 2075579521696771, 1191169788841221]),
|
||||
xy2d: FieldElement64([692896803108118, 500174642072499, 2068223309439677, 1162190621851337, 1426986007309901]),
|
||||
}
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -1228,6 +1228,7 @@ pub mod vartime {
|
|||
/// Given a point `A` and scalars `a` and `b`, compute the point
|
||||
/// `aA+bB`, where `B` is the Ed25519 basepoint (i.e., `B = (x,4/5)`
|
||||
/// with x positive).
|
||||
#[cfg(feature="precomputed_tables")]
|
||||
pub fn double_scalar_mult_basepoint(a: &Scalar,
|
||||
A: &ExtendedPoint,
|
||||
b: &Scalar) -> ExtendedPoint {
|
||||
|
|
|
|||
Loading…
Reference in a new issue