forked from tornado-packages/noble-curves
modular: Add comment. Add benchmark
This commit is contained in:
parent
53ff287bf7
commit
11f1626ecc
10
benchmark/modular.js
Normal file
10
benchmark/modular.js
Normal file
@ -0,0 +1,10 @@
|
||||
import { run, mark } from 'micro-bmark';
|
||||
import { secp256k1 } from '../secp256k1.js';
|
||||
|
||||
run(async () => {
|
||||
console.log(`\x1b[36mmodular, secp256k1 field\x1b[0m`);
|
||||
const { Fp } = secp256k1.CURVE;
|
||||
await mark('invert a', 30000, () => Fp.inv(2n ** 232n - 5910n));
|
||||
await mark('invert b', 30000, () => Fp.inv(2n ** 231n - 5910n));
|
||||
await mark('sqrt', 15000, () => Fp.sqrt(2n ** 231n - 5910n));
|
||||
});
|
@ -56,6 +56,7 @@ export function invert(number: bigint, modulo: bigint): bigint {
|
||||
throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
|
||||
}
|
||||
// Eucledian GCD https://brilliant.org/wiki/extended-euclidean-algorithm/
|
||||
// Fermat's little theorem "CT-like" version inv(n) = n^(m-2) mod m is 30x slower.
|
||||
let a = mod(number, modulo);
|
||||
let b = modulo;
|
||||
// prettier-ignore
|
||||
|
Loading…
Reference in New Issue
Block a user