authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2022-06-13 08:13:52+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-06-13 08:13:52+02:00
log7c660d17cde9af6b4c7229a300ff0ccd31317bf3
tree8c120b6f12c44ab5202847de2d729ea034e700a3
parent13f02c30e62564b85c2fbaa98e632d44f854cf53
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

crypto/pcurves: compute constants for inversion at comptime (#11780)


1 files changed, 13 insertions(+), 9 deletions(-)

lib/std/crypto/pcurves/common.zig+13-9
......@@ -203,19 +203,17 @@ pub fn Field(comptime params: FieldParams) type {
203203 const XLimbs = [a.limbs.len + 1]Word;
204204
205205 var d: Word = 1;
206 var f: XLimbs = undefined;
207 fiat.msat(&f);
208
206 var f = comptime blk: {
207 var f: XLimbs = undefined;
208 fiat.msat(&f);
209 break :blk f;
210 };
209211 var g: XLimbs = undefined;
210212 fiat.fromMontgomery(g[0..a.limbs.len], a.limbs);
211213 g[g.len - 1] = 0;
212214
213 var r: Limbs = undefined;
214 fiat.setOne(&r);
215 var v = mem.zeroes(Limbs);
216
217 var precomp: Limbs = undefined;
218 fiat.divstepPrecomp(&precomp);
215 var r = Fe.one.limbs;
216 var v = Fe.zero.limbs;
219217
220218 var out1: Word = undefined;
221219 var out2: XLimbs = undefined;
......@@ -236,6 +234,12 @@ pub fn Field(comptime params: FieldParams) type {
236234 var v_opp: Limbs = undefined;
237235 fiat.opp(&v_opp, v);
238236 fiat.selectznz(&v, @truncate(u1, f[f.len - 1] >> (@bitSizeOf(Word) - 1)), v, v_opp);
237
238 const precomp = blk: {
239 var precomp: Limbs = undefined;
240 fiat.divstepPrecomp(&precomp);
241 break :blk precomp;
242 };
239243 var fe: Fe = undefined;
240244 fiat.mul(&fe.limbs, v, precomp);
241245 return fe;