@noble/curves 1.9.4 → 1.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstract/bls.d.ts +2 -2
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/curve.d.ts +47 -46
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +9 -6
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +41 -33
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +166 -170
- package/abstract/edwards.js.map +1 -1
- package/abstract/modular.d.ts +1 -1
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +4 -4
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +2 -6
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +13 -10
- package/abstract/montgomery.js.map +1 -1
- package/abstract/tower.d.ts +9 -7
- package/abstract/tower.d.ts.map +1 -1
- package/abstract/tower.js +569 -357
- package/abstract/tower.js.map +1 -1
- package/abstract/weierstrass.d.ts +162 -92
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +394 -336
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +9 -42
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts.map +1 -1
- package/bn254.js +2 -34
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +15 -15
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +51 -48
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +16 -17
- package/ed448.d.ts.map +1 -1
- package/ed448.js +67 -48
- package/ed448.js.map +1 -1
- package/esm/abstract/bls.d.ts +2 -2
- package/esm/abstract/bls.d.ts.map +1 -1
- package/esm/abstract/curve.d.ts +47 -46
- package/esm/abstract/curve.d.ts.map +1 -1
- package/esm/abstract/curve.js +9 -6
- package/esm/abstract/curve.js.map +1 -1
- package/esm/abstract/edwards.d.ts +41 -33
- package/esm/abstract/edwards.d.ts.map +1 -1
- package/esm/abstract/edwards.js +167 -171
- package/esm/abstract/edwards.js.map +1 -1
- package/esm/abstract/modular.d.ts +1 -1
- package/esm/abstract/modular.d.ts.map +1 -1
- package/esm/abstract/modular.js +4 -4
- package/esm/abstract/modular.js.map +1 -1
- package/esm/abstract/montgomery.d.ts +2 -6
- package/esm/abstract/montgomery.d.ts.map +1 -1
- package/esm/abstract/montgomery.js +14 -11
- package/esm/abstract/montgomery.js.map +1 -1
- package/esm/abstract/tower.d.ts +9 -7
- package/esm/abstract/tower.d.ts.map +1 -1
- package/esm/abstract/tower.js +570 -358
- package/esm/abstract/tower.js.map +1 -1
- package/esm/abstract/weierstrass.d.ts +162 -92
- package/esm/abstract/weierstrass.d.ts.map +1 -1
- package/esm/abstract/weierstrass.js +395 -338
- package/esm/abstract/weierstrass.js.map +1 -1
- package/esm/bls12-381.d.ts.map +1 -1
- package/esm/bls12-381.js +10 -43
- package/esm/bls12-381.js.map +1 -1
- package/esm/bn254.d.ts.map +1 -1
- package/esm/bn254.js +3 -35
- package/esm/bn254.js.map +1 -1
- package/esm/ed25519.d.ts +15 -15
- package/esm/ed25519.d.ts.map +1 -1
- package/esm/ed25519.js +51 -48
- package/esm/ed25519.js.map +1 -1
- package/esm/ed448.d.ts +16 -17
- package/esm/ed448.d.ts.map +1 -1
- package/esm/ed448.js +68 -49
- package/esm/ed448.js.map +1 -1
- package/esm/misc.js +2 -2
- package/esm/misc.js.map +1 -1
- package/esm/nist.d.ts +6 -0
- package/esm/nist.d.ts.map +1 -1
- package/esm/nist.js +6 -0
- package/esm/nist.js.map +1 -1
- package/esm/secp256k1.d.ts +2 -6
- package/esm/secp256k1.d.ts.map +1 -1
- package/esm/secp256k1.js +34 -35
- package/esm/secp256k1.js.map +1 -1
- package/esm/utils.d.ts +14 -0
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +43 -0
- package/esm/utils.js.map +1 -1
- package/misc.js +2 -2
- package/misc.js.map +1 -1
- package/nist.d.ts +6 -0
- package/nist.d.ts.map +1 -1
- package/nist.js +7 -1
- package/nist.js.map +1 -1
- package/package.json +2 -2
- package/secp256k1.d.ts +2 -6
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +33 -34
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +2 -2
- package/src/abstract/curve.ts +131 -68
- package/src/abstract/edwards.ts +210 -219
- package/src/abstract/modular.ts +4 -4
- package/src/abstract/montgomery.ts +16 -16
- package/src/abstract/tower.ts +630 -382
- package/src/abstract/weierstrass.ts +587 -484
- package/src/bls12-381.ts +10 -42
- package/src/bn254.ts +3 -34
- package/src/ed25519.ts +62 -58
- package/src/ed448.ts +74 -77
- package/src/misc.ts +2 -2
- package/src/nist.ts +7 -0
- package/src/secp256k1.ts +35 -36
- package/src/utils.ts +48 -0
- package/utils.d.ts +14 -0
- package/utils.d.ts.map +1 -1
- package/utils.js +47 -0
- package/utils.js.map +1 -1
package/src/abstract/modular.ts
CHANGED
|
@@ -384,7 +384,7 @@ type FieldOpts = Partial<{
|
|
|
384
384
|
sqrt: SqrtFn;
|
|
385
385
|
isLE: boolean;
|
|
386
386
|
BITS: number;
|
|
387
|
-
|
|
387
|
+
modFromBytes: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n
|
|
388
388
|
allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes)
|
|
389
389
|
}>;
|
|
390
390
|
/**
|
|
@@ -415,7 +415,7 @@ export function Field(
|
|
|
415
415
|
if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);
|
|
416
416
|
let _nbitLength: number | undefined = undefined;
|
|
417
417
|
let _sqrt: SqrtFn | undefined = undefined;
|
|
418
|
-
let
|
|
418
|
+
let modFromBytes: boolean = false;
|
|
419
419
|
let allowedLengths: undefined | readonly number[] = undefined;
|
|
420
420
|
if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) {
|
|
421
421
|
if (opts.sqrt || isLE) throw new Error('cannot specify opts in two arguments');
|
|
@@ -423,7 +423,7 @@ export function Field(
|
|
|
423
423
|
if (_opts.BITS) _nbitLength = _opts.BITS;
|
|
424
424
|
if (_opts.sqrt) _sqrt = _opts.sqrt;
|
|
425
425
|
if (typeof _opts.isLE === 'boolean') isLE = _opts.isLE;
|
|
426
|
-
if (typeof _opts.
|
|
426
|
+
if (typeof _opts.modFromBytes === 'boolean') modFromBytes = _opts.modFromBytes;
|
|
427
427
|
allowedLengths = _opts.allowedLengths;
|
|
428
428
|
} else {
|
|
429
429
|
if (typeof bitLenOrOpts === 'number') _nbitLength = bitLenOrOpts;
|
|
@@ -490,7 +490,7 @@ export function Field(
|
|
|
490
490
|
if (bytes.length !== BYTES)
|
|
491
491
|
throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);
|
|
492
492
|
let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);
|
|
493
|
-
if (
|
|
493
|
+
if (modFromBytes) scalar = mod(scalar, ORDER);
|
|
494
494
|
if (!skipValidation)
|
|
495
495
|
if (!f.isValid(scalar)) throw new Error('invalid field element: outside of range 0..ORDER');
|
|
496
496
|
// NOTE: we don't validate scalar here, please use isValid. This done such way because some
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
8
8
|
import {
|
|
9
9
|
_validateObject,
|
|
10
|
+
abytes,
|
|
10
11
|
aInRange,
|
|
11
12
|
bytesToNumberLE,
|
|
12
13
|
ensureBytes,
|
|
13
14
|
numberToBytesLE,
|
|
14
15
|
randomBytes,
|
|
15
16
|
} from '../utils.ts';
|
|
16
|
-
import type {
|
|
17
|
+
import type { CurveLengths } from './curve.ts';
|
|
17
18
|
import { mod } from './modular.ts';
|
|
18
19
|
|
|
19
20
|
const _0n = BigInt(0);
|
|
@@ -40,11 +41,7 @@ export type MontgomeryECDH = {
|
|
|
40
41
|
randomPrivateKey: () => Uint8Array;
|
|
41
42
|
};
|
|
42
43
|
GuBytes: Uint8Array;
|
|
43
|
-
|
|
44
|
-
type: 'montgomery';
|
|
45
|
-
lengths: Omit<CurveInfo['lengths'], 'signature'>;
|
|
46
|
-
publicKeyHasPrefix?: boolean;
|
|
47
|
-
};
|
|
44
|
+
lengths: CurveLengths;
|
|
48
45
|
keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };
|
|
49
46
|
};
|
|
50
47
|
export type CurveFn = MontgomeryECDH;
|
|
@@ -167,19 +164,22 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
|
|
|
167
164
|
const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent
|
|
168
165
|
return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))
|
|
169
166
|
}
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
167
|
+
const lengths = {
|
|
168
|
+
secretKey: fieldLen,
|
|
169
|
+
publicKey: fieldLen,
|
|
170
|
+
seed: fieldLen,
|
|
171
|
+
};
|
|
172
|
+
const randomSecretKey = (seed = randomBytes_(fieldLen)) => {
|
|
173
|
+
abytes(seed, lengths.seed);
|
|
174
|
+
return seed;
|
|
174
175
|
};
|
|
175
176
|
function keygen(seed?: Uint8Array) {
|
|
176
|
-
const secretKey =
|
|
177
|
+
const secretKey = randomSecretKey(seed);
|
|
177
178
|
return { secretKey, publicKey: scalarMultBase(secretKey) };
|
|
178
179
|
}
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
seed: fieldLen,
|
|
180
|
+
const utils = {
|
|
181
|
+
randomSecretKey,
|
|
182
|
+
randomPrivateKey: randomSecretKey,
|
|
183
183
|
};
|
|
184
184
|
return {
|
|
185
185
|
keygen,
|
|
@@ -189,6 +189,6 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
|
|
|
189
189
|
scalarMultBase,
|
|
190
190
|
utils,
|
|
191
191
|
GuBytes: GuBytes.slice(),
|
|
192
|
-
|
|
192
|
+
lengths,
|
|
193
193
|
};
|
|
194
194
|
}
|