Skip to content

Commit d8d2aa9

Browse files
authored
crypto.pcurves.common: generalize invert() (#23039)
The Bernstein-Yang inversion code was meant to be used only with the fields we currently use for the NIST curves. But people copied that code and were confused that it didn't work as expected with other field sizes. It doesn't cost anything to make it work with other field sizes, that may support in the future. So let's do it. This also reduces the diff with the example zig code in fiat crypto. Suggested by @Rexicon226 -- Thank you!
1 parent a6525c1 commit d8d2aa9

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

lib/std/crypto/pcurves/common.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ pub fn Field(comptime params: FieldParams) type {
197197
/// Return the inverse of a field element, or 0 if a=0.
198198
// Field inversion from https://eprint.iacr.org/2021/549.pdf
199199
pub fn invert(a: Fe) Fe {
200-
const iterations = (49 * field_bits + 57) / 17;
200+
const iterations = (49 * field_bits + if (field_bits < 46) 80 else 57) / 17;
201201
const Limbs = @TypeOf(a.limbs);
202202
const Word = @TypeOf(a.limbs[0]);
203203
const XLimbs = [a.limbs.len + 1]Word;

0 commit comments

Comments
 (0)