@noble/curves 1.9.7 → 2.0.0-beta.2
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/README.md +520 -505
- package/abstract/bls.d.ts +58 -120
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/bls.js +108 -152
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.d.ts +18 -54
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +30 -49
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +18 -77
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +68 -144
- package/abstract/edwards.js.map +1 -1
- package/abstract/fft.js +14 -27
- package/abstract/fft.js.map +1 -1
- package/abstract/hash-to-curve.d.ts +35 -47
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +42 -46
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts +5 -17
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +170 -169
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +7 -12
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +22 -29
- package/abstract/montgomery.js.map +1 -1
- package/abstract/oprf.d.ts +282 -0
- package/abstract/oprf.d.ts.map +1 -0
- package/abstract/oprf.js +297 -0
- package/abstract/oprf.js.map +1 -0
- package/abstract/poseidon.d.ts.map +1 -1
- package/abstract/poseidon.js +26 -31
- package/abstract/poseidon.js.map +1 -1
- package/abstract/tower.d.ts.map +1 -1
- package/abstract/tower.js +43 -19
- package/abstract/tower.js.map +1 -1
- package/abstract/weierstrass.d.ts +77 -168
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +184 -389
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts +5 -11
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +161 -181
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +59 -11
- package/bn254.d.ts.map +1 -1
- package/bn254.js +69 -97
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +33 -48
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +147 -161
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +27 -36
- package/ed448.d.ts.map +1 -1
- package/ed448.js +143 -164
- package/ed448.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +20 -4
- package/index.js.map +1 -1
- package/misc.d.ts +10 -14
- package/misc.d.ts.map +1 -1
- package/misc.js +53 -62
- package/misc.js.map +1 -1
- package/nist.d.ts +31 -16
- package/nist.d.ts.map +1 -1
- package/nist.js +75 -64
- package/nist.js.map +1 -1
- package/package.json +20 -234
- package/secp256k1.d.ts +17 -30
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +59 -73
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +207 -354
- package/src/abstract/curve.ts +25 -84
- package/src/abstract/edwards.ts +68 -193
- package/src/abstract/hash-to-curve.ts +71 -85
- package/src/abstract/modular.ts +150 -134
- package/src/abstract/montgomery.ts +28 -35
- package/src/abstract/oprf.ts +600 -0
- package/src/abstract/poseidon.ts +6 -8
- package/src/abstract/tower.ts +0 -3
- package/src/abstract/weierstrass.ts +203 -525
- package/src/bls12-381.ts +133 -139
- package/src/bn254.ts +69 -93
- package/src/ed25519.ts +106 -133
- package/src/ed448.ts +111 -138
- package/src/index.ts +19 -3
- package/src/misc.ts +68 -51
- package/src/nist.ts +77 -70
- package/src/secp256k1.ts +46 -81
- package/src/utils.ts +67 -137
- package/src/webcrypto.ts +403 -0
- package/utils.d.ts +31 -38
- package/utils.d.ts.map +1 -1
- package/utils.js +66 -185
- package/utils.js.map +1 -1
- package/webcrypto.d.ts +99 -0
- package/webcrypto.d.ts.map +1 -0
- package/webcrypto.js +256 -0
- package/webcrypto.js.map +1 -0
- package/_shortw_utils.d.ts +0 -19
- package/_shortw_utils.d.ts.map +0 -1
- package/_shortw_utils.js +0 -20
- package/_shortw_utils.js.map +0 -1
- package/abstract/utils.d.ts +0 -78
- package/abstract/utils.d.ts.map +0 -1
- package/abstract/utils.js +0 -73
- package/abstract/utils.js.map +0 -1
- package/esm/_shortw_utils.d.ts +0 -19
- package/esm/_shortw_utils.d.ts.map +0 -1
- package/esm/_shortw_utils.js +0 -16
- package/esm/_shortw_utils.js.map +0 -1
- package/esm/abstract/bls.d.ts +0 -190
- package/esm/abstract/bls.d.ts.map +0 -1
- package/esm/abstract/bls.js +0 -408
- package/esm/abstract/bls.js.map +0 -1
- package/esm/abstract/curve.d.ts +0 -231
- package/esm/abstract/curve.d.ts.map +0 -1
- package/esm/abstract/curve.js +0 -465
- package/esm/abstract/curve.js.map +0 -1
- package/esm/abstract/edwards.d.ts +0 -243
- package/esm/abstract/edwards.d.ts.map +0 -1
- package/esm/abstract/edwards.js +0 -627
- package/esm/abstract/edwards.js.map +0 -1
- package/esm/abstract/fft.d.ts +0 -122
- package/esm/abstract/fft.d.ts.map +0 -1
- package/esm/abstract/fft.js +0 -425
- package/esm/abstract/fft.js.map +0 -1
- package/esm/abstract/hash-to-curve.d.ts +0 -102
- package/esm/abstract/hash-to-curve.d.ts.map +0 -1
- package/esm/abstract/hash-to-curve.js +0 -203
- package/esm/abstract/hash-to-curve.js.map +0 -1
- package/esm/abstract/modular.d.ts +0 -171
- package/esm/abstract/modular.d.ts.map +0 -1
- package/esm/abstract/modular.js +0 -530
- package/esm/abstract/modular.js.map +0 -1
- package/esm/abstract/montgomery.d.ts +0 -30
- package/esm/abstract/montgomery.d.ts.map +0 -1
- package/esm/abstract/montgomery.js +0 -157
- package/esm/abstract/montgomery.js.map +0 -1
- package/esm/abstract/poseidon.d.ts +0 -68
- package/esm/abstract/poseidon.d.ts.map +0 -1
- package/esm/abstract/poseidon.js +0 -296
- package/esm/abstract/poseidon.js.map +0 -1
- package/esm/abstract/tower.d.ts +0 -95
- package/esm/abstract/tower.d.ts.map +0 -1
- package/esm/abstract/tower.js +0 -714
- package/esm/abstract/tower.js.map +0 -1
- package/esm/abstract/utils.d.ts +0 -78
- package/esm/abstract/utils.d.ts.map +0 -1
- package/esm/abstract/utils.js +0 -70
- package/esm/abstract/utils.js.map +0 -1
- package/esm/abstract/weierstrass.d.ts +0 -416
- package/esm/abstract/weierstrass.d.ts.map +0 -1
- package/esm/abstract/weierstrass.js +0 -1413
- package/esm/abstract/weierstrass.js.map +0 -1
- package/esm/bls12-381.d.ts +0 -16
- package/esm/bls12-381.d.ts.map +0 -1
- package/esm/bls12-381.js +0 -705
- package/esm/bls12-381.js.map +0 -1
- package/esm/bn254.d.ts +0 -18
- package/esm/bn254.d.ts.map +0 -1
- package/esm/bn254.js +0 -214
- package/esm/bn254.js.map +0 -1
- package/esm/ed25519.d.ts +0 -106
- package/esm/ed25519.d.ts.map +0 -1
- package/esm/ed25519.js +0 -467
- package/esm/ed25519.js.map +0 -1
- package/esm/ed448.d.ts +0 -100
- package/esm/ed448.d.ts.map +0 -1
- package/esm/ed448.js +0 -459
- package/esm/ed448.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -17
- package/esm/index.js.map +0 -1
- package/esm/jubjub.d.ts +0 -12
- package/esm/jubjub.d.ts.map +0 -1
- package/esm/jubjub.js +0 -12
- package/esm/jubjub.js.map +0 -1
- package/esm/misc.d.ts +0 -19
- package/esm/misc.d.ts.map +0 -1
- package/esm/misc.js +0 -109
- package/esm/misc.js.map +0 -1
- package/esm/nist.d.ts +0 -21
- package/esm/nist.d.ts.map +0 -1
- package/esm/nist.js +0 -132
- package/esm/nist.js.map +0 -1
- package/esm/p256.d.ts +0 -16
- package/esm/p256.d.ts.map +0 -1
- package/esm/p256.js +0 -16
- package/esm/p256.js.map +0 -1
- package/esm/p384.d.ts +0 -16
- package/esm/p384.d.ts.map +0 -1
- package/esm/p384.js +0 -16
- package/esm/p384.js.map +0 -1
- package/esm/p521.d.ts +0 -16
- package/esm/p521.d.ts.map +0 -1
- package/esm/p521.js +0 -16
- package/esm/p521.js.map +0 -1
- package/esm/package.json +0 -4
- package/esm/pasta.d.ts +0 -10
- package/esm/pasta.d.ts.map +0 -1
- package/esm/pasta.js +0 -10
- package/esm/pasta.js.map +0 -1
- package/esm/secp256k1.d.ts +0 -89
- package/esm/secp256k1.d.ts.map +0 -1
- package/esm/secp256k1.js +0 -294
- package/esm/secp256k1.js.map +0 -1
- package/esm/utils.d.ts +0 -110
- package/esm/utils.d.ts.map +0 -1
- package/esm/utils.js +0 -322
- package/esm/utils.js.map +0 -1
- package/jubjub.d.ts +0 -12
- package/jubjub.d.ts.map +0 -1
- package/jubjub.js +0 -15
- package/jubjub.js.map +0 -1
- package/p256.d.ts +0 -16
- package/p256.d.ts.map +0 -1
- package/p256.js +0 -13
- package/p256.js.map +0 -1
- package/p384.d.ts +0 -16
- package/p384.d.ts.map +0 -1
- package/p384.js +0 -13
- package/p384.js.map +0 -1
- package/p521.d.ts +0 -16
- package/p521.d.ts.map +0 -1
- package/p521.js +0 -13
- package/p521.js.map +0 -1
- package/pasta.d.ts +0 -10
- package/pasta.d.ts.map +0 -1
- package/pasta.js +0 -13
- package/pasta.js.map +0 -1
- package/src/_shortw_utils.ts +0 -21
- package/src/abstract/utils.ts +0 -80
- package/src/jubjub.ts +0 -12
- package/src/p256.ts +0 -15
- package/src/p384.ts +0 -15
- package/src/p521.ts +0 -15
- package/src/package.json +0 -3
- package/src/pasta.ts +0 -9
|
@@ -6,23 +6,23 @@
|
|
|
6
6
|
*/
|
|
7
7
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
8
8
|
import {
|
|
9
|
-
_validateObject,
|
|
10
9
|
abytes,
|
|
11
10
|
aInRange,
|
|
12
11
|
bytesToNumberLE,
|
|
13
|
-
|
|
12
|
+
copyBytes,
|
|
14
13
|
numberToBytesLE,
|
|
15
14
|
randomBytes,
|
|
15
|
+
validateObject,
|
|
16
|
+
type CryptoKeys,
|
|
16
17
|
} from '../utils.ts';
|
|
17
|
-
import type
|
|
18
|
+
import { createKeygen, type CurveLengths } from './curve.ts';
|
|
18
19
|
import { mod } from './modular.ts';
|
|
19
20
|
|
|
20
21
|
const _0n = BigInt(0);
|
|
21
22
|
const _1n = BigInt(1);
|
|
22
23
|
const _2n = BigInt(2);
|
|
23
|
-
type Hex = string | Uint8Array;
|
|
24
24
|
|
|
25
|
-
export type
|
|
25
|
+
export type MontgomeryOpts = {
|
|
26
26
|
P: bigint; // finite field prime
|
|
27
27
|
type: 'x25519' | 'x448';
|
|
28
28
|
adjustScalarBytes: (bytes: Uint8Array) => Uint8Array;
|
|
@@ -31,30 +31,27 @@ export type CurveType = {
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
export type MontgomeryECDH = {
|
|
34
|
-
scalarMult: (scalar:
|
|
35
|
-
scalarMultBase: (scalar:
|
|
36
|
-
getSharedSecret: (secretKeyA:
|
|
37
|
-
getPublicKey: (secretKey:
|
|
34
|
+
scalarMult: (scalar: Uint8Array, u: Uint8Array) => Uint8Array;
|
|
35
|
+
scalarMultBase: (scalar: Uint8Array) => Uint8Array;
|
|
36
|
+
getSharedSecret: (secretKeyA: Uint8Array, publicKeyB: Uint8Array) => Uint8Array;
|
|
37
|
+
getPublicKey: (secretKey: Uint8Array) => Uint8Array;
|
|
38
38
|
utils: {
|
|
39
39
|
randomSecretKey: () => Uint8Array;
|
|
40
|
-
/** @deprecated use `randomSecretKey` */
|
|
41
|
-
randomPrivateKey: () => Uint8Array;
|
|
42
40
|
};
|
|
43
41
|
GuBytes: Uint8Array;
|
|
44
42
|
lengths: CurveLengths;
|
|
45
43
|
keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };
|
|
46
44
|
};
|
|
47
|
-
export type CurveFn = MontgomeryECDH;
|
|
48
45
|
|
|
49
|
-
function validateOpts(curve:
|
|
50
|
-
|
|
46
|
+
function validateOpts(curve: MontgomeryOpts) {
|
|
47
|
+
validateObject(curve, {
|
|
51
48
|
adjustScalarBytes: 'function',
|
|
52
49
|
powPminus2: 'function',
|
|
53
50
|
});
|
|
54
51
|
return Object.freeze({ ...curve } as const);
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
export function montgomery(curveDef:
|
|
54
|
+
export function montgomery(curveDef: MontgomeryOpts): MontgomeryECDH {
|
|
58
55
|
const CURVE = validateOpts(curveDef);
|
|
59
56
|
const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;
|
|
60
57
|
const is25519 = type === 'x25519';
|
|
@@ -82,8 +79,8 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
|
|
|
82
79
|
function encodeU(u: bigint): Uint8Array {
|
|
83
80
|
return numberToBytesLE(modP(u), fieldLen);
|
|
84
81
|
}
|
|
85
|
-
function decodeU(u:
|
|
86
|
-
const _u =
|
|
82
|
+
function decodeU(u: Uint8Array): bigint {
|
|
83
|
+
const _u = copyBytes(abytes(u, fieldLen, 'uCoordinate'));
|
|
87
84
|
// RFC: When receiving such an array, implementations of X25519
|
|
88
85
|
// (but not X448) MUST mask the most significant bit in the final byte.
|
|
89
86
|
if (is25519) _u[31] &= 127; // 0b0111_1111
|
|
@@ -93,10 +90,10 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
|
|
|
93
90
|
// - 1 through 2^448 - 1 for X448.
|
|
94
91
|
return modP(bytesToNumberLE(_u));
|
|
95
92
|
}
|
|
96
|
-
function decodeScalar(scalar:
|
|
97
|
-
return bytesToNumberLE(adjustScalarBytes(
|
|
93
|
+
function decodeScalar(scalar: Uint8Array): bigint {
|
|
94
|
+
return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, 'scalar'))));
|
|
98
95
|
}
|
|
99
|
-
function scalarMult(scalar:
|
|
96
|
+
function scalarMult(scalar: Uint8Array, u: Uint8Array): Uint8Array {
|
|
100
97
|
const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));
|
|
101
98
|
// Some public keys are useless, of low-order. Curve author doesn't think
|
|
102
99
|
// it needs to be validated, but we do it nonetheless.
|
|
@@ -105,9 +102,11 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
|
|
|
105
102
|
return encodeU(pu);
|
|
106
103
|
}
|
|
107
104
|
// Computes public key from private. By doing scalar multiplication of base point.
|
|
108
|
-
function scalarMultBase(scalar:
|
|
105
|
+
function scalarMultBase(scalar: Uint8Array): Uint8Array {
|
|
109
106
|
return scalarMult(scalar, GuBytes);
|
|
110
107
|
}
|
|
108
|
+
const getPublicKey = scalarMultBase;
|
|
109
|
+
const getSharedSecret = scalarMult;
|
|
111
110
|
|
|
112
111
|
// cswap from RFC7748 "example code"
|
|
113
112
|
function cswap(swap: bigint, x_2: bigint, x_3: bigint): { x_2: bigint; x_3: bigint } {
|
|
@@ -170,25 +169,19 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
|
|
|
170
169
|
seed: fieldLen,
|
|
171
170
|
};
|
|
172
171
|
const randomSecretKey = (seed = randomBytes_(fieldLen)) => {
|
|
173
|
-
abytes(seed, lengths.seed);
|
|
172
|
+
abytes(seed, lengths.seed, 'seed');
|
|
174
173
|
return seed;
|
|
175
174
|
};
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
randomPrivateKey: randomSecretKey,
|
|
183
|
-
};
|
|
184
|
-
return {
|
|
185
|
-
keygen,
|
|
186
|
-
getSharedSecret: (secretKey: Hex, publicKey: Hex) => scalarMult(secretKey, publicKey),
|
|
187
|
-
getPublicKey: (secretKey: Hex): Uint8Array => scalarMultBase(secretKey),
|
|
175
|
+
const utils = { randomSecretKey };
|
|
176
|
+
|
|
177
|
+
return Object.freeze({
|
|
178
|
+
keygen: createKeygen(randomSecretKey, getPublicKey),
|
|
179
|
+
getSharedSecret,
|
|
180
|
+
getPublicKey,
|
|
188
181
|
scalarMult,
|
|
189
182
|
scalarMultBase,
|
|
190
183
|
utils,
|
|
191
184
|
GuBytes: GuBytes.slice(),
|
|
192
185
|
lengths,
|
|
193
|
-
};
|
|
186
|
+
}) satisfies CryptoKeys;
|
|
194
187
|
}
|