Skip to content

Commit

Permalink
crypto/pcurves: compute constants for inversion at comptime (#11780)
Browse files Browse the repository at this point in the history
  • Loading branch information
jedisct1 authored Jun 13, 2022
1 parent 13f02c3 commit 7c660d1
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions lib/std/crypto/pcurves/common.zig
Original file line number Diff line number Diff line change
Expand Up @@ -203,19 +203,17 @@ pub fn Field(comptime params: FieldParams) type {
const XLimbs = [a.limbs.len + 1]Word;

var d: Word = 1;
var f: XLimbs = undefined;
fiat.msat(&f);

var f = comptime blk: {
var f: XLimbs = undefined;
fiat.msat(&f);
break :blk f;
};
var g: XLimbs = undefined;
fiat.fromMontgomery(g[0..a.limbs.len], a.limbs);
g[g.len - 1] = 0;

var r: Limbs = undefined;
fiat.setOne(&r);
var v = mem.zeroes(Limbs);

var precomp: Limbs = undefined;
fiat.divstepPrecomp(&precomp);
var r = Fe.one.limbs;
var v = Fe.zero.limbs;

var out1: Word = undefined;
var out2: XLimbs = undefined;
Expand All @@ -236,6 +234,12 @@ pub fn Field(comptime params: FieldParams) type {
var v_opp: Limbs = undefined;
fiat.opp(&v_opp, v);
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;
fiat.mul(&fe.limbs, v, precomp);
return fe;
Expand Down

0 comments on commit 7c660d1

Please sign in to comment.