mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
crypto/pcurves: compute constants for inversion at comptime (#11780)
This commit is contained in:
parent
13f02c30e6
commit
7c660d17cd
@ -203,19 +203,17 @@ pub fn Field(comptime params: FieldParams) type {
|
|||||||
const XLimbs = [a.limbs.len + 1]Word;
|
const XLimbs = [a.limbs.len + 1]Word;
|
||||||
|
|
||||||
var d: Word = 1;
|
var d: Word = 1;
|
||||||
var f: XLimbs = undefined;
|
var f = comptime blk: {
|
||||||
fiat.msat(&f);
|
var f: XLimbs = undefined;
|
||||||
|
fiat.msat(&f);
|
||||||
|
break :blk f;
|
||||||
|
};
|
||||||
var g: XLimbs = undefined;
|
var g: XLimbs = undefined;
|
||||||
fiat.fromMontgomery(g[0..a.limbs.len], a.limbs);
|
fiat.fromMontgomery(g[0..a.limbs.len], a.limbs);
|
||||||
g[g.len - 1] = 0;
|
g[g.len - 1] = 0;
|
||||||
|
|
||||||
var r: Limbs = undefined;
|
var r = Fe.one.limbs;
|
||||||
fiat.setOne(&r);
|
var v = Fe.zero.limbs;
|
||||||
var v = mem.zeroes(Limbs);
|
|
||||||
|
|
||||||
var precomp: Limbs = undefined;
|
|
||||||
fiat.divstepPrecomp(&precomp);
|
|
||||||
|
|
||||||
var out1: Word = undefined;
|
var out1: Word = undefined;
|
||||||
var out2: XLimbs = undefined;
|
var out2: XLimbs = undefined;
|
||||||
@ -236,6 +234,12 @@ pub fn Field(comptime params: FieldParams) type {
|
|||||||
var v_opp: Limbs = undefined;
|
var v_opp: Limbs = undefined;
|
||||||
fiat.opp(&v_opp, v);
|
fiat.opp(&v_opp, v);
|
||||||
fiat.selectznz(&v, @truncate(u1, f[f.len - 1] >> (@bitSizeOf(Word) - 1)), v, v_opp);
|
fiat.selectznz(&v, @truncate(u1, f[f.len - 1] >> (@bitSizeOf(Word) - 1)), v, v_opp);
|
||||||
|
|
||||||
|
const precomp = blk: {
|
||||||
|
var precomp: Limbs = undefined;
|
||||||
|
fiat.divstepPrecomp(&precomp);
|
||||||
|
break :blk precomp;
|
||||||
|
};
|
||||||
var fe: Fe = undefined;
|
var fe: Fe = undefined;
|
||||||
fiat.mul(&fe.limbs, v, precomp);
|
fiat.mul(&fe.limbs, v, precomp);
|
||||||
return fe;
|
return fe;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user