@noble/curves
Advanced tools
| /** | ||
| * RFC 9497: Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups. | ||
| * https://www.rfc-editor.org/rfc/rfc9497 | ||
| * | ||
| OPRF allows to interactively create an `Output = PRF(Input, serverSecretKey)`: | ||
| - Server cannot calculate Output by itself: it doesn't know Input | ||
| - Client cannot calculate Output by itself: it doesn't know server secretKey | ||
| - An attacker interception the communication can't restore Input/Output/serverSecretKey and can't | ||
| link Input to some value. | ||
| ## Issues | ||
| - Low-entropy inputs (e.g. password '123') enable brute-forced dictionary attacks by the server | ||
| (solveable by domain separation in POPRF) | ||
| - High-level protocol needs to be constructed on top, because OPRF is low-level | ||
| ## Use cases | ||
| 1. **Password-Authenticated Key Exchange (PAKE):** Enables secure password login (e.g., OPAQUE) | ||
| without revealing the password to the server. | ||
| 2. **Private Set Intersection (PSI):** Allows two parties to compute the intersection of their | ||
| private sets without revealing non-intersecting elements. | ||
| 3. **Anonymous Credential Systems:** Supports issuance of anonymous, unlinkable credentials | ||
| (e.g., Privacy Pass) using blind OPRF evaluation. | ||
| 4. **Private Information Retrieval (PIR):** Helps users query databases without revealing which | ||
| item they accessed. | ||
| 5. **Encrypted Search / Secure Indexing:** Enables keyword search over encrypted data while keeping | ||
| queries private. | ||
| 6. **Spam Prevention and Rate-Limiting:** Issues anonymous tokens to prevent abuse | ||
| (e.g., CAPTCHA bypass) without compromising user privacy. | ||
| ## Modes | ||
| - OPRF: simple mode, client doesn't need to know server public key | ||
| - VOPRF: verifable mode, allows client to verify that server used secret key corresponding to known public key | ||
| - POPRF: partially oblivious mode, VOPRF + domain separation | ||
| There is also non-interactive mode (Evaluate) that supports creating Output in non-interactive mode with knowledge of secret key. | ||
| Flow: | ||
| - (once) Server generates secret and public keys, distributes public keys to clients | ||
| - deterministically: `deriveKeyPair` or just random: `generateKeyPair` | ||
| - Client blinds input: `blind(secretInput)` | ||
| - Server evaluates blinded input: `blindEvaluate` generated by client, sends result to client | ||
| - Client creates output using result of evaluation via 'finalize' | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { randomBytes } from '../utils.ts'; | ||
| import { type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { type H2CMethod, type htfBasicOpts } from './hash-to-curve.js'; | ||
| export type PointBytes = Uint8Array; | ||
| export type ScalarBytes = Uint8Array; | ||
| export type Bytes = Uint8Array; | ||
| export type RNG = typeof randomBytes; | ||
| export type OPRFOpts<P extends CurvePoint<any, P>> = { | ||
| name: string; | ||
| Point: CurvePointCons<P>; | ||
| hash: (msg: Bytes) => Bytes; | ||
| hashToScalar: (msg: Uint8Array, options: htfBasicOpts) => bigint; | ||
| hashToGroup: ((msg: Uint8Array, options: htfBasicOpts) => P) | H2CMethod<P>; | ||
| }; | ||
| export type OPRFKeys = { | ||
| secretKey: ScalarBytes; | ||
| publicKey: PointBytes; | ||
| }; | ||
| export type OPRFBlind = { | ||
| blind: Uint8Array; | ||
| blinded: Uint8Array; | ||
| }; | ||
| export type OPRFBlindEval = { | ||
| evaluated: PointBytes; | ||
| proof: Bytes; | ||
| }; | ||
| export type OPRFBlindEvalBatch = { | ||
| evaluated: PointBytes[]; | ||
| proof: Bytes; | ||
| }; | ||
| export type OPRFFinalizeItem = { | ||
| input: Bytes; | ||
| blind: ScalarBytes; | ||
| evaluated: PointBytes; | ||
| blinded: PointBytes; | ||
| }; | ||
| /** | ||
| * Represents a full OPRF ciphersuite implementation according to RFC 9497. | ||
| * This object bundles the three protocol variants (OPRF, VOPRF, POPRF) for a specific | ||
| * prime-order group and hash function combination. | ||
| * | ||
| * @see https://www.rfc-editor.org/rfc/rfc9497.html | ||
| */ | ||
| export type OPRF = { | ||
| /** | ||
| * The unique identifier for the ciphersuite, e.g., "ristretto255-SHA512". | ||
| * This name is used for domain separation to prevent cross-protocol attacks. | ||
| */ | ||
| readonly name: string; | ||
| /** | ||
| * The base Oblivious Pseudorandom Function (OPRF) mode (mode 0x00). | ||
| * This is a two-party protocol between a client and a server to compute F(k, x) | ||
| * where 'k' is the server's key and 'x' is the client's input. | ||
| * | ||
| * The client learns the output F(k, x) but nothing about 'k'. | ||
| * The server learns nothing about 'x' or F(k, x). | ||
| * This mode is NOT verifiable; the client cannot prove the server used a specific key. | ||
| */ | ||
| readonly oprf: { | ||
| /** | ||
| * (Server-side) Generates a new random private/public key pair for the server. | ||
| * @returns A new key pair. | ||
| */ | ||
| generateKeyPair(): OPRFKeys; | ||
| /** | ||
| * (Server-side) Deterministically derives a private/public key pair from a seed. | ||
| * @param seed A 32-byte cryptographically secure random seed. | ||
| * @param keyInfo An optional byte string for domain separation. | ||
| * @returns The derived key pair. | ||
| */ | ||
| deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys; | ||
| /** | ||
| * (Client-side) The first step of the protocol. The client blinds its private input. | ||
| * @param input The client's private input bytes. | ||
| * @param rng An optional cryptographically secure random number generator. | ||
| * @returns An object containing the `blind` scalar (which the client MUST keep secret) | ||
| * and the `blinded` element (which the client sends to the server). | ||
| */ | ||
| blind(input: Bytes, rng?: RNG): OPRFBlind; | ||
| /** | ||
| * (Server-side) The second step. The server evaluates the client's blinded element | ||
| * using its secret key. | ||
| * @param secretKey The server's private key. | ||
| * @param blinded The blinded group element received from the client. | ||
| * @returns The evaluated group element, to be sent back to the client. | ||
| */ | ||
| blindEvaluate(secretKey: ScalarBytes, blinded: PointBytes): PointBytes; | ||
| /** | ||
| * (Client-side) The final step. The client unblinds the server's response to | ||
| * compute the final OPRF output. | ||
| * @param input The original private input from the `blind` step. | ||
| * @param blind The secret scalar from the `blind` step. | ||
| * @param evaluated The evaluated group element received from the server. | ||
| * @returns The final OPRF output, `Hash(len(input)||input||len(unblinded)||unblinded||"Finalize")`. | ||
| */ | ||
| finalize(input: Bytes, blind: ScalarBytes, evaluated: PointBytes): Bytes; | ||
| }; | ||
| /** | ||
| * The Verifiable Oblivious Pseudorandom Function (VOPRF) mode (mode 0x01). | ||
| * This mode extends the base OPRF by providing a proof that the server used the | ||
| * secret key corresponding to its known public key. | ||
| */ | ||
| readonly voprf: { | ||
| /** (Server-side) Generates a key pair for the VOPRF mode. */ | ||
| generateKeyPair(): OPRFKeys; | ||
| /** (Server-side) Deterministically derives a key pair for the VOPRF mode. */ | ||
| deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys; | ||
| /** (Client-side) Blinds the client's private input for the VOPRF protocol. */ | ||
| blind(input: Bytes, rng?: RNG): OPRFBlind; | ||
| /** | ||
| * (Server-side) Evaluates the client's blinded element and generates a DLEQ proof | ||
| * of correctness. | ||
| * @param secretKey The server's private key. | ||
| * @param publicKey The server's public key, used in proof generation. | ||
| * @param blinded The blinded group element received from the client. | ||
| * @param rng An optional cryptographically secure random number generator for the proof. | ||
| * @returns The evaluated element and a proof of correct computation. | ||
| */ | ||
| blindEvaluate(secretKey: ScalarBytes, publicKey: PointBytes, blinded: PointBytes, rng?: RNG): OPRFBlindEval; | ||
| /** | ||
| * (Server-side) An optimized batch version of `blindEvaluate`. It evaluates multiple | ||
| * blinded elements and produces a single, constant-size proof for the entire batch, | ||
| * amortizing the cost of proof generation. | ||
| * @param secretKey The server's private key. | ||
| * @param publicKey The server's public key. | ||
| * @param blinded An array of blinded group elements from one or more clients. | ||
| * @param rng An optional cryptographically secure random number generator for the proof. | ||
| * @returns An array of evaluated elements and a single proof for the batch. | ||
| */ | ||
| blindEvaluateBatch(secretKey: ScalarBytes, publicKey: PointBytes, blinded: PointBytes[], rng?: RNG): OPRFBlindEvalBatch; | ||
| /** | ||
| * (Client-side) The final step. The client verifies the server's proof, and if valid, | ||
| * unblinds the result to compute the final VOPRF output. | ||
| * @param input The original private input. | ||
| * @param blind The secret scalar from the `blind` step. | ||
| * @param evaluated The evaluated element from the server. | ||
| * @param blinded The blinded element sent to the server (needed for proof verification). | ||
| * @param publicKey The server's public key against which the proof is verified. | ||
| * @param proof The DLEQ proof from the server. | ||
| * @returns The final VOPRF output. | ||
| * @throws If the proof verification fails. | ||
| */ | ||
| finalize(input: Bytes, blind: ScalarBytes, evaluated: PointBytes, blinded: PointBytes, publicKey: PointBytes, proof: Bytes): Bytes; | ||
| /** | ||
| * (Client-side) The batch-aware version of `finalize`. It verifies a single batch proof | ||
| * against a list of corresponding inputs and outputs. | ||
| * @param items An array of objects, each containing the parameters for a single finalization. | ||
| * @param publicKey The server's public key. | ||
| * @param proof The single DLEQ proof for the entire batch. | ||
| * @returns An array of final VOPRF outputs, one for each item in the input. | ||
| * @throws If the proof verification fails. | ||
| */ | ||
| finalizeBatch(items: OPRFFinalizeItem[], publicKey: PointBytes, proof: Bytes): Bytes[]; | ||
| }; | ||
| /** | ||
| * A factory for the Partially Oblivious Pseudorandom Function (POPRF) mode (mode 0x02). | ||
| * This mode extends VOPRF to include a public `info` parameter, known to both client and | ||
| * server, which is cryptographically bound to the final output. | ||
| * This is useful for domain separation at the application level. | ||
| * @param info A public byte string to be mixed into the computation. | ||
| * @returns An object with the POPRF protocol functions. | ||
| */ | ||
| readonly poprf: (info: Bytes) => { | ||
| /** (Server-side) Generates a key pair for the POPRF mode. */ | ||
| generateKeyPair(): OPRFKeys; | ||
| /** (Server-side) Deterministically derives a key pair for the POPRF mode. */ | ||
| deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys; | ||
| /** | ||
| * (Client-side) Blinds the client's private input and computes the "tweaked key". | ||
| * The tweaked key is a public value derived from the server's public key and the public `info`. | ||
| * @param input The client's private input. | ||
| * @param publicKey The server's public key. | ||
| * @param rng An optional cryptographically secure random number generator. | ||
| * @returns The `blind`, `blinded` element, and the `tweakedKey` which the client uses for verification. | ||
| */ | ||
| blind(input: Bytes, publicKey: PointBytes, rng?: RNG): OPRFBlind & { | ||
| tweakedKey: PointBytes; | ||
| }; | ||
| /** | ||
| * (Server-side) Evaluates the blinded element using a key derived from its secret key and the public `info`. | ||
| * It generates a DLEQ proof against the tweaked key. | ||
| * @param secretKey The server's private key. | ||
| * @param blinded The blinded element from the client. | ||
| * @param rng An optional RNG for the proof. | ||
| * @returns The evaluated element and a proof of correct computation. | ||
| */ | ||
| blindEvaluate(secretKey: ScalarBytes, blinded: PointBytes, rng?: RNG): OPRFBlindEval; | ||
| /** | ||
| * (Server-side) A batch-aware version of `blindEvaluate` for the POPRF mode. | ||
| * @param secretKey The server's private key. | ||
| * @param blinded An array of blinded elements. | ||
| * @param rng An optional RNG for the proof. | ||
| * @returns An array of evaluated elements and a single proof for the batch. | ||
| */ | ||
| blindEvaluateBatch(secretKey: ScalarBytes, blinded: PointBytes[], rng: RNG): OPRFBlindEvalBatch; | ||
| /** | ||
| * (Client-side) A batch-aware version of `finalize` for the POPRF mode. | ||
| * It verifies the proof against the tweaked key. | ||
| * @param items An array containing the parameters for each finalization. | ||
| * @param proof The single DLEQ proof for the batch. | ||
| * @param tweakedKey The tweaked key corresponding to the proof (all items must share the same `info` and `publicKey`). | ||
| * @returns An array of final POPRF outputs. | ||
| * @throws If proof verification fails. | ||
| */ | ||
| finalizeBatch(items: OPRFFinalizeItem[], proof: Bytes, tweakedKey: PointBytes): Bytes[]; | ||
| /** | ||
| * (Client-side) Finalizes the POPRF protocol. It verifies the server's proof against the | ||
| * `tweakedKey` computed in the `blind` step. The final output is bound to the public `info`. | ||
| * @param input The original private input. | ||
| * @param blind The secret scalar. | ||
| * @param evaluated The evaluated element from the server. | ||
| * @param blinded The blinded element sent to the server. | ||
| * @param proof The DLEQ proof from the server. | ||
| * @param tweakedKey The public tweaked key computed by the client during the `blind` step. | ||
| * @returns The final POPRF output. | ||
| * @throws If proof verification fails. | ||
| */ | ||
| finalize(input: Bytes, blind: ScalarBytes, evaluated: PointBytes, blinded: PointBytes, proof: Bytes, tweakedKey: PointBytes): Bytes; | ||
| /** | ||
| * A non-interactive evaluation function for an entity that knows all inputs. | ||
| * Computes the final POPRF output directly. Useful for testing or specific applications | ||
| * where the server needs to compute the output for a known input. | ||
| * @param secretKey The server's private key. | ||
| * @param input The client's private input. | ||
| * @returns The final POPRF output. | ||
| */ | ||
| evaluate(secretKey: ScalarBytes, input: Bytes): Bytes; | ||
| }; | ||
| }; | ||
| export declare function createORPF<P extends CurvePoint<any, P>>(opts: OPRFOpts<P>): OPRF; | ||
| //# sourceMappingURL=oprf.d.ts.map |
| {"version":3,"file":"oprf.d.ts","sourceRoot":"","sources":["../src/abstract/oprf.ts"],"names":[],"mappings":"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"} |
+297
| /** | ||
| * RFC 9497: Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups. | ||
| * https://www.rfc-editor.org/rfc/rfc9497 | ||
| * | ||
| OPRF allows to interactively create an `Output = PRF(Input, serverSecretKey)`: | ||
| - Server cannot calculate Output by itself: it doesn't know Input | ||
| - Client cannot calculate Output by itself: it doesn't know server secretKey | ||
| - An attacker interception the communication can't restore Input/Output/serverSecretKey and can't | ||
| link Input to some value. | ||
| ## Issues | ||
| - Low-entropy inputs (e.g. password '123') enable brute-forced dictionary attacks by the server | ||
| (solveable by domain separation in POPRF) | ||
| - High-level protocol needs to be constructed on top, because OPRF is low-level | ||
| ## Use cases | ||
| 1. **Password-Authenticated Key Exchange (PAKE):** Enables secure password login (e.g., OPAQUE) | ||
| without revealing the password to the server. | ||
| 2. **Private Set Intersection (PSI):** Allows two parties to compute the intersection of their | ||
| private sets without revealing non-intersecting elements. | ||
| 3. **Anonymous Credential Systems:** Supports issuance of anonymous, unlinkable credentials | ||
| (e.g., Privacy Pass) using blind OPRF evaluation. | ||
| 4. **Private Information Retrieval (PIR):** Helps users query databases without revealing which | ||
| item they accessed. | ||
| 5. **Encrypted Search / Secure Indexing:** Enables keyword search over encrypted data while keeping | ||
| queries private. | ||
| 6. **Spam Prevention and Rate-Limiting:** Issues anonymous tokens to prevent abuse | ||
| (e.g., CAPTCHA bypass) without compromising user privacy. | ||
| ## Modes | ||
| - OPRF: simple mode, client doesn't need to know server public key | ||
| - VOPRF: verifable mode, allows client to verify that server used secret key corresponding to known public key | ||
| - POPRF: partially oblivious mode, VOPRF + domain separation | ||
| There is also non-interactive mode (Evaluate) that supports creating Output in non-interactive mode with knowledge of secret key. | ||
| Flow: | ||
| - (once) Server generates secret and public keys, distributes public keys to clients | ||
| - deterministically: `deriveKeyPair` or just random: `generateKeyPair` | ||
| - Client blinds input: `blind(secretInput)` | ||
| - Server evaluates blinded input: `blindEvaluate` generated by client, sends result to client | ||
| - Client creates output using result of evaluation via 'finalize' | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { abytes, asciiToBytes, bytesToNumberBE, bytesToNumberLE, concatBytes, numberToBytesBE, randomBytes, validateObject, } from "../utils.js"; | ||
| import { pippenger } from "./curve.js"; | ||
| import { _DST_scalar } from './hash-to-curve.js'; | ||
| import { getMinHashLength, mapHashToField } from './modular.js'; | ||
| // welcome to generic hell | ||
| export function createORPF(opts) { | ||
| validateObject(opts, { | ||
| name: 'string', | ||
| hash: 'function', | ||
| hashToScalar: 'function', | ||
| hashToGroup: 'function', | ||
| }); | ||
| // TODO | ||
| // Point: 'point', | ||
| const { name, Point, hash } = opts; | ||
| const { Fn } = Point; | ||
| const hashToGroup = (msg, ctx) => opts.hashToGroup(msg, { | ||
| DST: concatBytes(asciiToBytes('HashToGroup-'), ctx), | ||
| }); | ||
| const hashToScalarPrefixed = (msg, ctx) => opts.hashToScalar(msg, { DST: concatBytes(_DST_scalar, ctx) }); | ||
| const randomScalar = (rng = randomBytes) => { | ||
| const t = mapHashToField(rng(getMinHashLength(Fn.ORDER)), Fn.ORDER, Fn.isLE); | ||
| // We cannot use Fn.fromBytes here, because field | ||
| // can have different number of bytes (like ed448) | ||
| return Fn.isLE ? bytesToNumberLE(t) : bytesToNumberBE(t); | ||
| }; | ||
| const msm = (points, scalars) => pippenger(Point, points, scalars); | ||
| const getCtx = (mode) => concatBytes(asciiToBytes('OPRFV1-'), new Uint8Array([mode]), asciiToBytes('-' + name)); | ||
| const ctxOPRF = getCtx(0x00); | ||
| const ctxVOPRF = getCtx(0x01); | ||
| const ctxPOPRF = getCtx(0x02); | ||
| function encode(...args) { | ||
| const res = []; | ||
| for (const a of args) { | ||
| if (typeof a === 'number') | ||
| res.push(numberToBytesBE(a, 2)); | ||
| else if (typeof a === 'string') | ||
| res.push(asciiToBytes(a)); | ||
| else { | ||
| abytes(a); | ||
| res.push(numberToBytesBE(a.length, 2), a); | ||
| } | ||
| } | ||
| // No wipe here, since will modify actual bytes | ||
| return concatBytes(...res); | ||
| } | ||
| const hashInput = (...bytes) => hash(encode(...bytes, 'Finalize')); | ||
| function getTranscripts(B, C, D, ctx) { | ||
| const Bm = B.toBytes(); | ||
| const seed = hash(encode(Bm, concatBytes(asciiToBytes('Seed-'), ctx))); | ||
| const res = []; | ||
| for (let i = 0; i < C.length; i++) { | ||
| const Ci = C[i].toBytes(); | ||
| const Di = D[i].toBytes(); | ||
| const di = hashToScalarPrefixed(encode(seed, i, Ci, Di, 'Composite'), ctx); | ||
| res.push(di); | ||
| } | ||
| return res; | ||
| } | ||
| function computeComposites(B, C, D, ctx) { | ||
| const T = getTranscripts(B, C, D, ctx); | ||
| const M = msm(C, T); | ||
| const Z = msm(D, T); | ||
| return { M, Z }; | ||
| } | ||
| function computeCompositesFast(k, B, C, D, ctx) { | ||
| const T = getTranscripts(B, C, D, ctx); | ||
| const M = msm(C, T); | ||
| const Z = M.multiply(k); | ||
| return { M, Z }; | ||
| } | ||
| function challengeTranscript(B, M, Z, t2, t3, ctx) { | ||
| const [Bm, a0, a1, a2, a3] = [B, M, Z, t2, t3].map((i) => i.toBytes()); | ||
| return hashToScalarPrefixed(encode(Bm, a0, a1, a2, a3, 'Challenge'), ctx); | ||
| } | ||
| function generateProof(ctx, k, B, C, D, rng) { | ||
| const { M, Z } = computeCompositesFast(k, B, C, D, ctx); | ||
| const r = randomScalar(rng); | ||
| const t2 = Point.BASE.multiply(r); | ||
| const t3 = M.multiply(r); | ||
| const c = challengeTranscript(B, M, Z, t2, t3, ctx); | ||
| const s = Fn.sub(r, Fn.mul(c, k)); // r - c*k | ||
| return concatBytes(...[c, s].map((i) => Fn.toBytes(i))); | ||
| } | ||
| function verifyProof(ctx, B, C, D, proof) { | ||
| abytes(proof, 2 * Fn.BYTES); | ||
| const { M, Z } = computeComposites(B, C, D, ctx); | ||
| const [c, s] = [proof.subarray(0, Fn.BYTES), proof.subarray(Fn.BYTES)].map((f) => Fn.fromBytes(f)); | ||
| const t2 = Point.BASE.multiply(s).add(B.multiply(c)); // s*G + c*B | ||
| const t3 = M.multiply(s).add(Z.multiply(c)); // s*M + c*Z | ||
| const expectedC = challengeTranscript(B, M, Z, t2, t3, ctx); | ||
| if (!Fn.eql(c, expectedC)) | ||
| throw new Error('proof verification failed'); | ||
| } | ||
| function generateKeyPair() { | ||
| const skS = randomScalar(); | ||
| const pkS = Point.BASE.multiply(skS); | ||
| return { secretKey: Fn.toBytes(skS), publicKey: pkS.toBytes() }; | ||
| } | ||
| function deriveKeyPair(ctx, seed, info) { | ||
| const dst = concatBytes(asciiToBytes('DeriveKeyPair'), ctx); | ||
| const msg = concatBytes(seed, encode(info), new Uint8Array([0])); | ||
| for (let counter = 0; counter <= 255; counter++) { | ||
| msg[msg.length - 1] = counter; | ||
| const skS = opts.hashToScalar(msg, { DST: dst }); | ||
| if (Fn.is0(skS)) | ||
| continue; // should not happen | ||
| return { secretKey: Fn.toBytes(skS), publicKey: Point.BASE.multiply(skS).toBytes() }; | ||
| } | ||
| throw new Error('Cannot derive key'); | ||
| } | ||
| function blind(ctx, input, rng = randomBytes) { | ||
| const blind = randomScalar(rng); | ||
| const inputPoint = hashToGroup(input, ctx); | ||
| if (inputPoint.equals(Point.ZERO)) | ||
| throw new Error('Input point at infinity'); | ||
| const blinded = inputPoint.multiply(blind); | ||
| return { blind: Fn.toBytes(blind), blinded: blinded.toBytes() }; | ||
| } | ||
| function evaluate(ctx, secretKey, input) { | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const inputPoint = hashToGroup(input, ctx); | ||
| if (inputPoint.equals(Point.ZERO)) | ||
| throw new Error('Input point at infinity'); | ||
| const unblinded = inputPoint.multiply(skS).toBytes(); | ||
| return hashInput(input, unblinded); | ||
| } | ||
| const oprf = { | ||
| generateKeyPair, | ||
| deriveKeyPair: (seed, keyInfo) => deriveKeyPair(ctxOPRF, seed, keyInfo), | ||
| blind: (input, rng = randomBytes) => blind(ctxOPRF, input, rng), | ||
| blindEvaluate(secretKey, blindedPoint) { | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const elm = Point.fromBytes(blindedPoint); | ||
| return elm.multiply(skS).toBytes(); | ||
| }, | ||
| finalize(input, blindBytes, evaluatedBytes) { | ||
| const blind = Fn.fromBytes(blindBytes); | ||
| const evalPoint = Point.fromBytes(evaluatedBytes); | ||
| const unblinded = evalPoint.multiply(Fn.inv(blind)).toBytes(); | ||
| return hashInput(input, unblinded); | ||
| }, | ||
| evaluate: (secretKey, input) => evaluate(ctxOPRF, secretKey, input), | ||
| }; | ||
| const voprf = { | ||
| generateKeyPair, | ||
| deriveKeyPair: (seed, keyInfo) => deriveKeyPair(ctxVOPRF, seed, keyInfo), | ||
| blind: (input, rng = randomBytes) => blind(ctxVOPRF, input, rng), | ||
| blindEvaluateBatch(secretKey, publicKey, blinded, rng = randomBytes) { | ||
| if (!Array.isArray(blinded)) | ||
| throw new Error('expected array'); | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const pkS = Point.fromBytes(publicKey); | ||
| const blindedPoints = blinded.map(Point.fromBytes); | ||
| const evaluated = blindedPoints.map((i) => i.multiply(skS)); | ||
| const proof = generateProof(ctxVOPRF, skS, pkS, blindedPoints, evaluated, rng); | ||
| return { evaluated: evaluated.map((i) => i.toBytes()), proof }; | ||
| }, | ||
| blindEvaluate(secretKey, publicKey, blinded, rng = randomBytes) { | ||
| const res = this.blindEvaluateBatch(secretKey, publicKey, [blinded], rng); | ||
| return { evaluated: res.evaluated[0], proof: res.proof }; | ||
| }, | ||
| finalizeBatch(items, publicKey, proof) { | ||
| if (!Array.isArray(items)) | ||
| throw new Error('expected array'); | ||
| const pkS = Point.fromBytes(publicKey); | ||
| const blindedPoints = items.map((i) => i.blinded).map(Point.fromBytes); | ||
| const evalPoints = items.map((i) => i.evaluated).map(Point.fromBytes); | ||
| verifyProof(ctxVOPRF, pkS, blindedPoints, evalPoints, proof); | ||
| return items.map((i) => oprf.finalize(i.input, i.blind, i.evaluated)); | ||
| }, | ||
| finalize(input, blind, evaluated, blinded, publicKey, proof) { | ||
| return this.finalizeBatch([{ input, blind, evaluated, blinded }], publicKey, proof)[0]; | ||
| }, | ||
| evaluate: (secretKey, input) => evaluate(ctxVOPRF, secretKey, input), | ||
| }; | ||
| // NOTE: info is domain separation | ||
| const poprf = (info) => { | ||
| const m = hashToScalarPrefixed(encode('Info', info), ctxPOPRF); | ||
| const T = Point.BASE.multiply(m); | ||
| return { | ||
| generateKeyPair, | ||
| deriveKeyPair: (seed, keyInfo) => deriveKeyPair(ctxPOPRF, seed, keyInfo), | ||
| blind(input, publicKey, rng = randomBytes) { | ||
| const pkS = Point.fromBytes(publicKey); | ||
| const tweakedKey = T.add(pkS); | ||
| if (tweakedKey.equals(Point.ZERO)) | ||
| throw new Error('tweakedKey point at infinity'); | ||
| const blind = randomScalar(rng); | ||
| const inputPoint = hashToGroup(input, ctxPOPRF); | ||
| if (inputPoint.equals(Point.ZERO)) | ||
| throw new Error('Input point at infinity'); | ||
| const blindedPoint = inputPoint.multiply(blind); | ||
| return { | ||
| blind: Fn.toBytes(blind), | ||
| blinded: blindedPoint.toBytes(), | ||
| tweakedKey: tweakedKey.toBytes(), | ||
| }; | ||
| }, | ||
| blindEvaluateBatch(secretKey, blinded, rng = randomBytes) { | ||
| if (!Array.isArray(blinded)) | ||
| throw new Error('expected array'); | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const t = Fn.add(skS, m); | ||
| // "Hence, this error can be a signal for the server to replace its private key". We throw inside, | ||
| // should be impossible. | ||
| const invT = Fn.inv(t); | ||
| const blindedPoints = blinded.map(Point.fromBytes); | ||
| const evalPoints = blindedPoints.map((i) => i.multiply(invT)); | ||
| const tweakedKey = Point.BASE.multiply(t); | ||
| const proof = generateProof(ctxPOPRF, t, tweakedKey, evalPoints, blindedPoints, rng); | ||
| return { evaluated: evalPoints.map((i) => i.toBytes()), proof }; | ||
| }, | ||
| blindEvaluate(secretKey, blinded, rng = randomBytes) { | ||
| const res = this.blindEvaluateBatch(secretKey, [blinded], rng); | ||
| return { evaluated: res.evaluated[0], proof: res.proof }; | ||
| }, | ||
| finalizeBatch(items, proof, tweakedKey) { | ||
| if (!Array.isArray(items)) | ||
| throw new Error('expected array'); | ||
| const evalPoints = items.map((i) => i.evaluated).map(Point.fromBytes); | ||
| verifyProof(ctxPOPRF, Point.fromBytes(tweakedKey), evalPoints, items.map((i) => i.blinded).map(Point.fromBytes), proof); | ||
| return items.map((i, j) => { | ||
| const blind = Fn.fromBytes(i.blind); | ||
| const point = evalPoints[j].multiply(Fn.inv(blind)).toBytes(); | ||
| return hashInput(i.input, info, point); | ||
| }); | ||
| }, | ||
| finalize(input, blind, evaluated, blinded, proof, tweakedKey) { | ||
| return this.finalizeBatch([{ input, blind, evaluated, blinded }], proof, tweakedKey)[0]; | ||
| }, | ||
| evaluate(secretKey, input) { | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const inputPoint = hashToGroup(input, ctxPOPRF); | ||
| if (inputPoint.equals(Point.ZERO)) | ||
| throw new Error('Input point at infinity'); | ||
| const t = Fn.add(skS, m); | ||
| const invT = Fn.inv(t); | ||
| const unblinded = inputPoint.multiply(invT).toBytes(); | ||
| return hashInput(input, info, unblinded); | ||
| }, | ||
| }; | ||
| }; | ||
| return Object.freeze({ name, oprf, voprf, poprf, __tests: { Fn } }); | ||
| } | ||
| //# sourceMappingURL=oprf.js.map |
| {"version":3,"file":"oprf.js","sourceRoot":"","sources":["../src/abstract/oprf.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * RFC 9497: Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups. | ||
| * https://www.rfc-editor.org/rfc/rfc9497 | ||
| * | ||
| OPRF allows to interactively create an `Output = PRF(Input, serverSecretKey)`: | ||
| - Server cannot calculate Output by itself: it doesn't know Input | ||
| - Client cannot calculate Output by itself: it doesn't know server secretKey | ||
| - An attacker interception the communication can't restore Input/Output/serverSecretKey and can't | ||
| link Input to some value. | ||
| ## Issues | ||
| - Low-entropy inputs (e.g. password '123') enable brute-forced dictionary attacks by the server | ||
| (solveable by domain separation in POPRF) | ||
| - High-level protocol needs to be constructed on top, because OPRF is low-level | ||
| ## Use cases | ||
| 1. **Password-Authenticated Key Exchange (PAKE):** Enables secure password login (e.g., OPAQUE) | ||
| without revealing the password to the server. | ||
| 2. **Private Set Intersection (PSI):** Allows two parties to compute the intersection of their | ||
| private sets without revealing non-intersecting elements. | ||
| 3. **Anonymous Credential Systems:** Supports issuance of anonymous, unlinkable credentials | ||
| (e.g., Privacy Pass) using blind OPRF evaluation. | ||
| 4. **Private Information Retrieval (PIR):** Helps users query databases without revealing which | ||
| item they accessed. | ||
| 5. **Encrypted Search / Secure Indexing:** Enables keyword search over encrypted data while keeping | ||
| queries private. | ||
| 6. **Spam Prevention and Rate-Limiting:** Issues anonymous tokens to prevent abuse | ||
| (e.g., CAPTCHA bypass) without compromising user privacy. | ||
| ## Modes | ||
| - OPRF: simple mode, client doesn't need to know server public key | ||
| - VOPRF: verifable mode, allows client to verify that server used secret key corresponding to known public key | ||
| - POPRF: partially oblivious mode, VOPRF + domain separation | ||
| There is also non-interactive mode (Evaluate) that supports creating Output in non-interactive mode with knowledge of secret key. | ||
| Flow: | ||
| - (once) Server generates secret and public keys, distributes public keys to clients | ||
| - deterministically: `deriveKeyPair` or just random: `generateKeyPair` | ||
| - Client blinds input: `blind(secretInput)` | ||
| - Server evaluates blinded input: `blindEvaluate` generated by client, sends result to client | ||
| - Client creates output using result of evaluation via 'finalize' | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { | ||
| abytes, | ||
| asciiToBytes, | ||
| bytesToNumberBE, | ||
| bytesToNumberLE, | ||
| concatBytes, | ||
| numberToBytesBE, | ||
| randomBytes, | ||
| validateObject, | ||
| } from '../utils.ts'; | ||
| import { pippenger, type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { _DST_scalar, type H2CMethod, type htfBasicOpts } from './hash-to-curve.js'; | ||
| import { getMinHashLength, mapHashToField } from './modular.js'; | ||
| // OPRF is designed to be used across network, so we default to serialized values. | ||
| export type PointBytes = Uint8Array; | ||
| export type ScalarBytes = Uint8Array; | ||
| export type Bytes = Uint8Array; | ||
| export type RNG = typeof randomBytes; | ||
| export type OPRFOpts<P extends CurvePoint<any, P>> = { | ||
| name: string; | ||
| Point: CurvePointCons<P>; // we don't return Point, so we need generic interface only | ||
| // Fn: IField<bigint>; | ||
| hash: (msg: Bytes) => Bytes; | ||
| hashToScalar: (msg: Uint8Array, options: htfBasicOpts) => bigint; | ||
| hashToGroup: ((msg: Uint8Array, options: htfBasicOpts) => P) | H2CMethod<P>; | ||
| }; | ||
| export type OPRFKeys = { secretKey: ScalarBytes; publicKey: PointBytes }; | ||
| export type OPRFBlind = { blind: Uint8Array; blinded: Uint8Array }; | ||
| export type OPRFBlindEval = { evaluated: PointBytes; proof: Bytes }; | ||
| export type OPRFBlindEvalBatch = { evaluated: PointBytes[]; proof: Bytes }; | ||
| export type OPRFFinalizeItem = { | ||
| input: Bytes; | ||
| blind: ScalarBytes; | ||
| evaluated: PointBytes; | ||
| blinded: PointBytes; | ||
| }; | ||
| /** | ||
| * Represents a full OPRF ciphersuite implementation according to RFC 9497. | ||
| * This object bundles the three protocol variants (OPRF, VOPRF, POPRF) for a specific | ||
| * prime-order group and hash function combination. | ||
| * | ||
| * @see https://www.rfc-editor.org/rfc/rfc9497.html | ||
| */ | ||
| export type OPRF = { | ||
| /** | ||
| * The unique identifier for the ciphersuite, e.g., "ristretto255-SHA512". | ||
| * This name is used for domain separation to prevent cross-protocol attacks. | ||
| */ | ||
| readonly name: string; | ||
| /** | ||
| * The base Oblivious Pseudorandom Function (OPRF) mode (mode 0x00). | ||
| * This is a two-party protocol between a client and a server to compute F(k, x) | ||
| * where 'k' is the server's key and 'x' is the client's input. | ||
| * | ||
| * The client learns the output F(k, x) but nothing about 'k'. | ||
| * The server learns nothing about 'x' or F(k, x). | ||
| * This mode is NOT verifiable; the client cannot prove the server used a specific key. | ||
| */ | ||
| readonly oprf: { | ||
| /** | ||
| * (Server-side) Generates a new random private/public key pair for the server. | ||
| * @returns A new key pair. | ||
| */ | ||
| generateKeyPair(): OPRFKeys; | ||
| /** | ||
| * (Server-side) Deterministically derives a private/public key pair from a seed. | ||
| * @param seed A 32-byte cryptographically secure random seed. | ||
| * @param keyInfo An optional byte string for domain separation. | ||
| * @returns The derived key pair. | ||
| */ | ||
| deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys; | ||
| /** | ||
| * (Client-side) The first step of the protocol. The client blinds its private input. | ||
| * @param input The client's private input bytes. | ||
| * @param rng An optional cryptographically secure random number generator. | ||
| * @returns An object containing the `blind` scalar (which the client MUST keep secret) | ||
| * and the `blinded` element (which the client sends to the server). | ||
| */ | ||
| blind(input: Bytes, rng?: RNG): OPRFBlind; | ||
| /** | ||
| * (Server-side) The second step. The server evaluates the client's blinded element | ||
| * using its secret key. | ||
| * @param secretKey The server's private key. | ||
| * @param blinded The blinded group element received from the client. | ||
| * @returns The evaluated group element, to be sent back to the client. | ||
| */ | ||
| blindEvaluate(secretKey: ScalarBytes, blinded: PointBytes): PointBytes; | ||
| /** | ||
| * (Client-side) The final step. The client unblinds the server's response to | ||
| * compute the final OPRF output. | ||
| * @param input The original private input from the `blind` step. | ||
| * @param blind The secret scalar from the `blind` step. | ||
| * @param evaluated The evaluated group element received from the server. | ||
| * @returns The final OPRF output, `Hash(len(input)||input||len(unblinded)||unblinded||"Finalize")`. | ||
| */ | ||
| finalize(input: Bytes, blind: ScalarBytes, evaluated: PointBytes): Bytes; | ||
| }; | ||
| /** | ||
| * The Verifiable Oblivious Pseudorandom Function (VOPRF) mode (mode 0x01). | ||
| * This mode extends the base OPRF by providing a proof that the server used the | ||
| * secret key corresponding to its known public key. | ||
| */ | ||
| readonly voprf: { | ||
| /** (Server-side) Generates a key pair for the VOPRF mode. */ | ||
| generateKeyPair(): OPRFKeys; | ||
| /** (Server-side) Deterministically derives a key pair for the VOPRF mode. */ | ||
| deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys; | ||
| /** (Client-side) Blinds the client's private input for the VOPRF protocol. */ | ||
| blind(input: Bytes, rng?: RNG): OPRFBlind; | ||
| /** | ||
| * (Server-side) Evaluates the client's blinded element and generates a DLEQ proof | ||
| * of correctness. | ||
| * @param secretKey The server's private key. | ||
| * @param publicKey The server's public key, used in proof generation. | ||
| * @param blinded The blinded group element received from the client. | ||
| * @param rng An optional cryptographically secure random number generator for the proof. | ||
| * @returns The evaluated element and a proof of correct computation. | ||
| */ | ||
| blindEvaluate( | ||
| secretKey: ScalarBytes, | ||
| publicKey: PointBytes, | ||
| blinded: PointBytes, | ||
| rng?: RNG | ||
| ): OPRFBlindEval; | ||
| /** | ||
| * (Server-side) An optimized batch version of `blindEvaluate`. It evaluates multiple | ||
| * blinded elements and produces a single, constant-size proof for the entire batch, | ||
| * amortizing the cost of proof generation. | ||
| * @param secretKey The server's private key. | ||
| * @param publicKey The server's public key. | ||
| * @param blinded An array of blinded group elements from one or more clients. | ||
| * @param rng An optional cryptographically secure random number generator for the proof. | ||
| * @returns An array of evaluated elements and a single proof for the batch. | ||
| */ | ||
| blindEvaluateBatch( | ||
| secretKey: ScalarBytes, | ||
| publicKey: PointBytes, | ||
| blinded: PointBytes[], | ||
| rng?: RNG | ||
| ): OPRFBlindEvalBatch; | ||
| /** | ||
| * (Client-side) The final step. The client verifies the server's proof, and if valid, | ||
| * unblinds the result to compute the final VOPRF output. | ||
| * @param input The original private input. | ||
| * @param blind The secret scalar from the `blind` step. | ||
| * @param evaluated The evaluated element from the server. | ||
| * @param blinded The blinded element sent to the server (needed for proof verification). | ||
| * @param publicKey The server's public key against which the proof is verified. | ||
| * @param proof The DLEQ proof from the server. | ||
| * @returns The final VOPRF output. | ||
| * @throws If the proof verification fails. | ||
| */ | ||
| finalize( | ||
| input: Bytes, | ||
| blind: ScalarBytes, | ||
| evaluated: PointBytes, | ||
| blinded: PointBytes, | ||
| publicKey: PointBytes, | ||
| proof: Bytes | ||
| ): Bytes; | ||
| /** | ||
| * (Client-side) The batch-aware version of `finalize`. It verifies a single batch proof | ||
| * against a list of corresponding inputs and outputs. | ||
| * @param items An array of objects, each containing the parameters for a single finalization. | ||
| * @param publicKey The server's public key. | ||
| * @param proof The single DLEQ proof for the entire batch. | ||
| * @returns An array of final VOPRF outputs, one for each item in the input. | ||
| * @throws If the proof verification fails. | ||
| */ | ||
| finalizeBatch(items: OPRFFinalizeItem[], publicKey: PointBytes, proof: Bytes): Bytes[]; | ||
| }; | ||
| /** | ||
| * A factory for the Partially Oblivious Pseudorandom Function (POPRF) mode (mode 0x02). | ||
| * This mode extends VOPRF to include a public `info` parameter, known to both client and | ||
| * server, which is cryptographically bound to the final output. | ||
| * This is useful for domain separation at the application level. | ||
| * @param info A public byte string to be mixed into the computation. | ||
| * @returns An object with the POPRF protocol functions. | ||
| */ | ||
| readonly poprf: (info: Bytes) => { | ||
| /** (Server-side) Generates a key pair for the POPRF mode. */ | ||
| generateKeyPair(): OPRFKeys; | ||
| /** (Server-side) Deterministically derives a key pair for the POPRF mode. */ | ||
| deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys; | ||
| /** | ||
| * (Client-side) Blinds the client's private input and computes the "tweaked key". | ||
| * The tweaked key is a public value derived from the server's public key and the public `info`. | ||
| * @param input The client's private input. | ||
| * @param publicKey The server's public key. | ||
| * @param rng An optional cryptographically secure random number generator. | ||
| * @returns The `blind`, `blinded` element, and the `tweakedKey` which the client uses for verification. | ||
| */ | ||
| blind(input: Bytes, publicKey: PointBytes, rng?: RNG): OPRFBlind & { tweakedKey: PointBytes }; | ||
| /** | ||
| * (Server-side) Evaluates the blinded element using a key derived from its secret key and the public `info`. | ||
| * It generates a DLEQ proof against the tweaked key. | ||
| * @param secretKey The server's private key. | ||
| * @param blinded The blinded element from the client. | ||
| * @param rng An optional RNG for the proof. | ||
| * @returns The evaluated element and a proof of correct computation. | ||
| */ | ||
| blindEvaluate(secretKey: ScalarBytes, blinded: PointBytes, rng?: RNG): OPRFBlindEval; | ||
| /** | ||
| * (Server-side) A batch-aware version of `blindEvaluate` for the POPRF mode. | ||
| * @param secretKey The server's private key. | ||
| * @param blinded An array of blinded elements. | ||
| * @param rng An optional RNG for the proof. | ||
| * @returns An array of evaluated elements and a single proof for the batch. | ||
| */ | ||
| blindEvaluateBatch(secretKey: ScalarBytes, blinded: PointBytes[], rng: RNG): OPRFBlindEvalBatch; | ||
| /** | ||
| * (Client-side) A batch-aware version of `finalize` for the POPRF mode. | ||
| * It verifies the proof against the tweaked key. | ||
| * @param items An array containing the parameters for each finalization. | ||
| * @param proof The single DLEQ proof for the batch. | ||
| * @param tweakedKey The tweaked key corresponding to the proof (all items must share the same `info` and `publicKey`). | ||
| * @returns An array of final POPRF outputs. | ||
| * @throws If proof verification fails. | ||
| */ | ||
| finalizeBatch(items: OPRFFinalizeItem[], proof: Bytes, tweakedKey: PointBytes): Bytes[]; | ||
| /** | ||
| * (Client-side) Finalizes the POPRF protocol. It verifies the server's proof against the | ||
| * `tweakedKey` computed in the `blind` step. The final output is bound to the public `info`. | ||
| * @param input The original private input. | ||
| * @param blind The secret scalar. | ||
| * @param evaluated The evaluated element from the server. | ||
| * @param blinded The blinded element sent to the server. | ||
| * @param proof The DLEQ proof from the server. | ||
| * @param tweakedKey The public tweaked key computed by the client during the `blind` step. | ||
| * @returns The final POPRF output. | ||
| * @throws If proof verification fails. | ||
| */ | ||
| finalize( | ||
| input: Bytes, | ||
| blind: ScalarBytes, | ||
| evaluated: PointBytes, | ||
| blinded: PointBytes, | ||
| proof: Bytes, | ||
| tweakedKey: PointBytes | ||
| ): Bytes; | ||
| /** | ||
| * A non-interactive evaluation function for an entity that knows all inputs. | ||
| * Computes the final POPRF output directly. Useful for testing or specific applications | ||
| * where the server needs to compute the output for a known input. | ||
| * @param secretKey The server's private key. | ||
| * @param input The client's private input. | ||
| * @returns The final POPRF output. | ||
| */ | ||
| evaluate(secretKey: ScalarBytes, input: Bytes): Bytes; | ||
| }; | ||
| }; | ||
| // welcome to generic hell | ||
| export function createORPF<P extends CurvePoint<any, P>>(opts: OPRFOpts<P>): OPRF { | ||
| validateObject(opts, { | ||
| name: 'string', | ||
| hash: 'function', | ||
| hashToScalar: 'function', | ||
| hashToGroup: 'function', | ||
| }); | ||
| // TODO | ||
| // Point: 'point', | ||
| const { name, Point, hash } = opts; | ||
| const { Fn } = Point; | ||
| const hashToGroup = (msg: Uint8Array, ctx: Uint8Array) => | ||
| opts.hashToGroup(msg, { | ||
| DST: concatBytes(asciiToBytes('HashToGroup-'), ctx), | ||
| }) as P; | ||
| const hashToScalarPrefixed = (msg: Uint8Array, ctx: Uint8Array) => | ||
| opts.hashToScalar(msg, { DST: concatBytes(_DST_scalar, ctx) }); | ||
| const randomScalar = (rng: RNG = randomBytes) => { | ||
| const t = mapHashToField(rng(getMinHashLength(Fn.ORDER)), Fn.ORDER, Fn.isLE); | ||
| // We cannot use Fn.fromBytes here, because field | ||
| // can have different number of bytes (like ed448) | ||
| return Fn.isLE ? bytesToNumberLE(t) : bytesToNumberBE(t); | ||
| }; | ||
| const msm = (points: P[], scalars: bigint[]) => pippenger(Point, points, scalars); | ||
| const getCtx = (mode: number) => | ||
| concatBytes(asciiToBytes('OPRFV1-'), new Uint8Array([mode]), asciiToBytes('-' + name)); | ||
| const ctxOPRF = getCtx(0x00); | ||
| const ctxVOPRF = getCtx(0x01); | ||
| const ctxPOPRF = getCtx(0x02); | ||
| function encode(...args: (Uint8Array | number | string)[]) { | ||
| const res = []; | ||
| for (const a of args) { | ||
| if (typeof a === 'number') res.push(numberToBytesBE(a, 2)); | ||
| else if (typeof a === 'string') res.push(asciiToBytes(a)); | ||
| else { | ||
| abytes(a); | ||
| res.push(numberToBytesBE(a.length, 2), a); | ||
| } | ||
| } | ||
| // No wipe here, since will modify actual bytes | ||
| return concatBytes(...res); | ||
| } | ||
| const hashInput = (...bytes: Uint8Array[]) => hash(encode(...bytes, 'Finalize')); | ||
| function getTranscripts(B: P, C: P[], D: P[], ctx: Bytes) { | ||
| const Bm = B.toBytes(); | ||
| const seed = hash(encode(Bm, concatBytes(asciiToBytes('Seed-'), ctx))); | ||
| const res: bigint[] = []; | ||
| for (let i = 0; i < C.length; i++) { | ||
| const Ci = C[i].toBytes(); | ||
| const Di = D[i].toBytes(); | ||
| const di = hashToScalarPrefixed(encode(seed, i, Ci, Di, 'Composite'), ctx); | ||
| res.push(di); | ||
| } | ||
| return res; | ||
| } | ||
| function computeComposites(B: P, C: P[], D: P[], ctx: Bytes) { | ||
| const T = getTranscripts(B, C, D, ctx); | ||
| const M = msm(C, T); | ||
| const Z = msm(D, T); | ||
| return { M, Z }; | ||
| } | ||
| function computeCompositesFast(k: bigint, B: P, C: P[], D: P[], ctx: Bytes): { M: P; Z: P } { | ||
| const T = getTranscripts(B, C, D, ctx); | ||
| const M = msm(C, T); | ||
| const Z = M.multiply(k); | ||
| return { M, Z }; | ||
| } | ||
| function challengeTranscript(B: P, M: P, Z: P, t2: P, t3: P, ctx: Bytes) { | ||
| const [Bm, a0, a1, a2, a3] = [B, M, Z, t2, t3].map((i) => i.toBytes()); | ||
| return hashToScalarPrefixed(encode(Bm, a0, a1, a2, a3, 'Challenge'), ctx); | ||
| } | ||
| function generateProof(ctx: Bytes, k: bigint, B: P, C: P[], D: P[], rng: RNG) { | ||
| const { M, Z } = computeCompositesFast(k, B, C, D, ctx); | ||
| const r = randomScalar(rng); | ||
| const t2 = Point.BASE.multiply(r); | ||
| const t3 = M.multiply(r); | ||
| const c = challengeTranscript(B, M, Z, t2, t3, ctx); | ||
| const s = Fn.sub(r, Fn.mul(c, k)); // r - c*k | ||
| return concatBytes(...[c, s].map((i) => Fn.toBytes(i))); | ||
| } | ||
| function verifyProof(ctx: Bytes, B: P, C: P[], D: P[], proof: Bytes) { | ||
| abytes(proof, 2 * Fn.BYTES); | ||
| const { M, Z } = computeComposites(B, C, D, ctx); | ||
| const [c, s] = [proof.subarray(0, Fn.BYTES), proof.subarray(Fn.BYTES)].map((f) => | ||
| Fn.fromBytes(f) | ||
| ); | ||
| const t2 = Point.BASE.multiply(s).add(B.multiply(c)); // s*G + c*B | ||
| const t3 = M.multiply(s).add(Z.multiply(c)); // s*M + c*Z | ||
| const expectedC = challengeTranscript(B, M, Z, t2, t3, ctx); | ||
| if (!Fn.eql(c, expectedC)) throw new Error('proof verification failed'); | ||
| } | ||
| function generateKeyPair() { | ||
| const skS = randomScalar(); | ||
| const pkS = Point.BASE.multiply(skS); | ||
| return { secretKey: Fn.toBytes(skS), publicKey: pkS.toBytes() }; | ||
| } | ||
| function deriveKeyPair(ctx: Bytes, seed: Bytes, info: Bytes) { | ||
| const dst = concatBytes(asciiToBytes('DeriveKeyPair'), ctx); | ||
| const msg = concatBytes(seed, encode(info), new Uint8Array([0])); | ||
| for (let counter = 0; counter <= 255; counter++) { | ||
| msg[msg.length - 1] = counter; | ||
| const skS = opts.hashToScalar(msg, { DST: dst }); | ||
| if (Fn.is0(skS)) continue; // should not happen | ||
| return { secretKey: Fn.toBytes(skS), publicKey: Point.BASE.multiply(skS).toBytes() }; | ||
| } | ||
| throw new Error('Cannot derive key'); | ||
| } | ||
| function blind(ctx: Bytes, input: Uint8Array, rng: RNG = randomBytes) { | ||
| const blind = randomScalar(rng); | ||
| const inputPoint = hashToGroup(input, ctx); | ||
| if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity'); | ||
| const blinded = inputPoint.multiply(blind); | ||
| return { blind: Fn.toBytes(blind), blinded: blinded.toBytes() }; | ||
| } | ||
| function evaluate(ctx: Bytes, secretKey: ScalarBytes, input: Bytes) { | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const inputPoint = hashToGroup(input, ctx); | ||
| if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity'); | ||
| const unblinded = inputPoint.multiply(skS).toBytes(); | ||
| return hashInput(input, unblinded); | ||
| } | ||
| const oprf = { | ||
| generateKeyPair, | ||
| deriveKeyPair: (seed: Bytes, keyInfo: Bytes) => deriveKeyPair(ctxOPRF, seed, keyInfo), | ||
| blind: (input: Bytes, rng: RNG = randomBytes) => blind(ctxOPRF, input, rng), | ||
| blindEvaluate(secretKey: ScalarBytes, blindedPoint: PointBytes) { | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const elm = Point.fromBytes(blindedPoint); | ||
| return elm.multiply(skS).toBytes(); | ||
| }, | ||
| finalize(input: Bytes, blindBytes: ScalarBytes, evaluatedBytes: PointBytes) { | ||
| const blind = Fn.fromBytes(blindBytes); | ||
| const evalPoint = Point.fromBytes(evaluatedBytes); | ||
| const unblinded = evalPoint.multiply(Fn.inv(blind)).toBytes(); | ||
| return hashInput(input, unblinded); | ||
| }, | ||
| evaluate: (secretKey: ScalarBytes, input: Bytes) => evaluate(ctxOPRF, secretKey, input), | ||
| }; | ||
| const voprf = { | ||
| generateKeyPair, | ||
| deriveKeyPair: (seed: Bytes, keyInfo: Bytes) => deriveKeyPair(ctxVOPRF, seed, keyInfo), | ||
| blind: (input: Bytes, rng: RNG = randomBytes) => blind(ctxVOPRF, input, rng), | ||
| blindEvaluateBatch( | ||
| secretKey: ScalarBytes, | ||
| publicKey: PointBytes, | ||
| blinded: PointBytes[], | ||
| rng: RNG = randomBytes | ||
| ) { | ||
| if (!Array.isArray(blinded)) throw new Error('expected array'); | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const pkS = Point.fromBytes(publicKey); | ||
| const blindedPoints = blinded.map(Point.fromBytes); | ||
| const evaluated = blindedPoints.map((i) => i.multiply(skS)); | ||
| const proof = generateProof(ctxVOPRF, skS, pkS, blindedPoints, evaluated, rng); | ||
| return { evaluated: evaluated.map((i) => i.toBytes()), proof }; | ||
| }, | ||
| blindEvaluate( | ||
| secretKey: ScalarBytes, | ||
| publicKey: PointBytes, | ||
| blinded: PointBytes, | ||
| rng: RNG = randomBytes | ||
| ) { | ||
| const res = this.blindEvaluateBatch(secretKey, publicKey, [blinded], rng); | ||
| return { evaluated: res.evaluated[0], proof: res.proof }; | ||
| }, | ||
| finalizeBatch(items: OPRFFinalizeItem[], publicKey: PointBytes, proof: Bytes) { | ||
| if (!Array.isArray(items)) throw new Error('expected array'); | ||
| const pkS = Point.fromBytes(publicKey); | ||
| const blindedPoints = items.map((i) => i.blinded).map(Point.fromBytes); | ||
| const evalPoints = items.map((i) => i.evaluated).map(Point.fromBytes); | ||
| verifyProof(ctxVOPRF, pkS, blindedPoints, evalPoints, proof); | ||
| return items.map((i) => oprf.finalize(i.input, i.blind, i.evaluated)); | ||
| }, | ||
| finalize( | ||
| input: Bytes, | ||
| blind: ScalarBytes, | ||
| evaluated: PointBytes, | ||
| blinded: PointBytes, | ||
| publicKey: PointBytes, | ||
| proof: Bytes | ||
| ) { | ||
| return this.finalizeBatch([{ input, blind, evaluated, blinded }], publicKey, proof)[0]; | ||
| }, | ||
| evaluate: (secretKey: ScalarBytes, input: Bytes) => evaluate(ctxVOPRF, secretKey, input), | ||
| }; | ||
| // NOTE: info is domain separation | ||
| const poprf = (info: Bytes) => { | ||
| const m = hashToScalarPrefixed(encode('Info', info), ctxPOPRF); | ||
| const T = Point.BASE.multiply(m); | ||
| return { | ||
| generateKeyPair, | ||
| deriveKeyPair: (seed: Bytes, keyInfo: Bytes) => deriveKeyPair(ctxPOPRF, seed, keyInfo), | ||
| blind(input: Bytes, publicKey: PointBytes, rng: RNG = randomBytes) { | ||
| const pkS = Point.fromBytes(publicKey); | ||
| const tweakedKey = T.add(pkS); | ||
| if (tweakedKey.equals(Point.ZERO)) throw new Error('tweakedKey point at infinity'); | ||
| const blind = randomScalar(rng); | ||
| const inputPoint = hashToGroup(input, ctxPOPRF); | ||
| if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity'); | ||
| const blindedPoint = inputPoint.multiply(blind); | ||
| return { | ||
| blind: Fn.toBytes(blind), | ||
| blinded: blindedPoint.toBytes(), | ||
| tweakedKey: tweakedKey.toBytes(), | ||
| }; | ||
| }, | ||
| blindEvaluateBatch(secretKey: ScalarBytes, blinded: PointBytes[], rng: RNG = randomBytes) { | ||
| if (!Array.isArray(blinded)) throw new Error('expected array'); | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const t = Fn.add(skS, m); | ||
| // "Hence, this error can be a signal for the server to replace its private key". We throw inside, | ||
| // should be impossible. | ||
| const invT = Fn.inv(t); | ||
| const blindedPoints = blinded.map(Point.fromBytes); | ||
| const evalPoints = blindedPoints.map((i) => i.multiply(invT)); | ||
| const tweakedKey = Point.BASE.multiply(t); | ||
| const proof = generateProof(ctxPOPRF, t, tweakedKey, evalPoints, blindedPoints, rng); | ||
| return { evaluated: evalPoints.map((i) => i.toBytes()), proof }; | ||
| }, | ||
| blindEvaluate(secretKey: ScalarBytes, blinded: PointBytes, rng: RNG = randomBytes) { | ||
| const res = this.blindEvaluateBatch(secretKey, [blinded], rng); | ||
| return { evaluated: res.evaluated[0], proof: res.proof }; | ||
| }, | ||
| finalizeBatch(items: OPRFFinalizeItem[], proof: Bytes, tweakedKey: PointBytes) { | ||
| if (!Array.isArray(items)) throw new Error('expected array'); | ||
| const evalPoints = items.map((i) => i.evaluated).map(Point.fromBytes); | ||
| verifyProof( | ||
| ctxPOPRF, | ||
| Point.fromBytes(tweakedKey), | ||
| evalPoints, | ||
| items.map((i) => i.blinded).map(Point.fromBytes), | ||
| proof | ||
| ); | ||
| return items.map((i, j) => { | ||
| const blind = Fn.fromBytes(i.blind); | ||
| const point = evalPoints[j].multiply(Fn.inv(blind)).toBytes(); | ||
| return hashInput(i.input, info, point); | ||
| }); | ||
| }, | ||
| finalize( | ||
| input: Bytes, | ||
| blind: ScalarBytes, | ||
| evaluated: PointBytes, | ||
| blinded: PointBytes, | ||
| proof: Bytes, | ||
| tweakedKey: PointBytes | ||
| ) { | ||
| return this.finalizeBatch([{ input, blind, evaluated, blinded }], proof, tweakedKey)[0]; | ||
| }, | ||
| evaluate(secretKey: ScalarBytes, input: Bytes) { | ||
| const skS = Fn.fromBytes(secretKey); | ||
| const inputPoint = hashToGroup(input, ctxPOPRF); | ||
| if (inputPoint.equals(Point.ZERO)) throw new Error('Input point at infinity'); | ||
| const t = Fn.add(skS, m); | ||
| const invT = Fn.inv(t); | ||
| const unblinded = inputPoint.multiply(invT).toBytes(); | ||
| return hashInput(input, info, unblinded); | ||
| }, | ||
| }; | ||
| }; | ||
| return Object.freeze({ name, oprf, voprf, poprf, __tests: { Fn } }); | ||
| } |
+362
| /** | ||
| * Friendly wrapper over elliptic curves from built-in WebCrypto. Experimental: API may change. | ||
| # WebCrypto issues | ||
| ## No way to get public keys | ||
| - Export of raw secret key is prohibited by spec: | ||
| - https://w3c.github.io/webcrypto/#ecdsa-operations-export-key | ||
| -> "If format is "raw":" -> "If the [[type]] internal slot of key is not "public", | ||
| then throw an InvalidAccessError." | ||
| - Import of raw secret keys is prohibited by spec: | ||
| - https://w3c.github.io/webcrypto/#ecdsa-operations-import-key | ||
| -> "If format is "raw":" -> "If usages contains a value which is not "verify" | ||
| then throw a SyntaxError." | ||
| - SPKI (Simple public-key infrastructure) is public-key-only | ||
| - PCKS8 is secret-key-only | ||
| - No way to get public key from secret key, but we convert to jwk and then create it manually, since jwk secret key is priv+pub. | ||
| - Noble supports generating keys for both sign, verify & getSharedSecret, | ||
| but JWK key includes usage, which forces us to patch it (non-JWK is ok) | ||
| - We have import/export for 'raw', but it doesn't work in Firefox / Safari | ||
| ## Point encoding | ||
| - Raw export of public points returns uncompressed points, | ||
| but this is implementation specific and not much we can do there. | ||
| - `getSharedSecret` differs for p256, p384, p521: | ||
| Noble returns 33-byte output (y-parity + x coordinate), | ||
| while in WebCrypto returns 32-byte output (x coordinate) | ||
| - `getSharedSecret` identical for X25519, X448 | ||
| ## Availability | ||
| Node.js additionally supports ed448. | ||
| There seems no reasonable way to check for availability, other than actually calling methods. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { concatBytes, hexToBytes } from './utils.ts'; | ||
| function getWebcryptoSubtle(): any { | ||
| const subtle: any = globalThis?.crypto?.subtle; | ||
| if (typeof subtle === 'object' && subtle != null) return subtle; | ||
| throw new Error('crypto.subtle must be defined'); | ||
| } | ||
| // Trying to do generics here creates hell on conversion and usage | ||
| type JsonWebKey = { | ||
| crv?: string; | ||
| d?: string; | ||
| kty?: string; | ||
| x?: string; | ||
| y?: string; | ||
| [key: string]: unknown; | ||
| }; | ||
| type Format = 'raw' | 'jwk' | 'spki' | 'pkcs8'; | ||
| type Key = JsonWebKey | Uint8Array; | ||
| type CryptoKey = Awaited<ReturnType<typeof crypto.subtle.importKey>>; | ||
| type KeyUsage = 'deriveBits' | 'deriveKey' | 'sign' | 'verify'; | ||
| type Algo = string | { name: string; namedCurve: string }; | ||
| type SigAlgo = string | { name: string; hash?: { name: string } }; | ||
| type KeyUtils = { | ||
| import(key: Key, format?: Format): Promise<CryptoKey>; | ||
| export(key: CryptoKey, format?: Format): Promise<Key>; | ||
| convert(key: Key, inFormat?: Format, outFormat?: Format): Promise<Key>; | ||
| }; | ||
| export type WebCryptoGetPubOpts = { | ||
| secFormat?: Format; | ||
| pubFormat?: Format; | ||
| }; | ||
| const _format = 'raw'; | ||
| function assertType(type: 'private' | 'public', key: any) { | ||
| if (key.type !== type) throw new Error(`invalid key type, expected ${type}`); | ||
| } | ||
| function createKeyUtils(algo: Algo, derive: boolean, keyLen: number, pcks8header: string) { | ||
| const secUsage: KeyUsage[] = derive ? ['deriveBits'] : ['sign']; | ||
| const pubUsage: KeyUsage[] = derive ? [] : ['verify']; | ||
| // Return Uint8Array instead of ArrayBuffer | ||
| const arrBufToU8 = (res: Key, format: Format) => | ||
| format === 'jwk' ? res : new Uint8Array(res as ArrayBuffer); | ||
| const pub: KeyUtils = { | ||
| async import(key: Key, format: Format = _format): Promise<CryptoKey> { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const keyi: CryptoKey = await crypto.importKey(format, key, algo, true, pubUsage); | ||
| assertType('public', keyi); | ||
| return keyi; | ||
| }, | ||
| async export(key: CryptoKey, format: Format = _format): Promise<Key> { | ||
| assertType('public', key); | ||
| const crypto = getWebcryptoSubtle(); | ||
| const keyi = await crypto.exportKey(format, key); | ||
| return arrBufToU8(keyi, format); | ||
| }, | ||
| async convert(key: Key, inFormat: Format = _format, outFormat: Format = _format): Promise<Key> { | ||
| return pub.export(await pub.import(key, inFormat), outFormat); | ||
| }, | ||
| }; | ||
| const priv: KeyUtils = { | ||
| async import(key: Key, format: Format = _format): Promise<CryptoKey> { | ||
| const crypto = getWebcryptoSubtle(); | ||
| let keyi: CryptoKey; | ||
| if (format === 'raw') { | ||
| // Chrome, node, bun, deno: works | ||
| // Safari, Firefox: Data provided to an operation does not meet requirements | ||
| // This is the best one can do. JWK can't be used: it contains public key component inside. | ||
| keyi = await crypto.importKey( | ||
| 'pkcs8', | ||
| concatBytes(hexToBytes(pcks8header), key as Uint8Array), | ||
| algo, | ||
| true, | ||
| secUsage | ||
| ); | ||
| } else { | ||
| // Fix import of ECDSA keys into ECDH, other formats are ok | ||
| if (derive && format === 'jwk') key = { ...key, key_ops: secUsage }; | ||
| keyi = await crypto.importKey(format, key, algo, true, secUsage); | ||
| } | ||
| assertType('private', keyi); | ||
| return keyi; | ||
| }, | ||
| async export(key: CryptoKey, format: Format = _format): Promise<Key> { | ||
| const crypto = getWebcryptoSubtle(); | ||
| assertType('private', key); | ||
| if (format === 'raw') { | ||
| // scure-base base64urlnopad could have been used, but we can't add more deps. | ||
| // pcks8 would be even more fragile | ||
| const jwk = await crypto.exportKey('jwk', key); | ||
| const base64 = jwk.d.replace(/-/g, '+').replace(/_/g, '/'); // base64url | ||
| const pad = base64.length % 4 ? '='.repeat(4 - (base64.length % 4)) : ''; // add padding | ||
| const binary = atob(base64 + pad); | ||
| // This is not ASCII, and not text: this is only semi-safe with atob output | ||
| const raw = Uint8Array.from(binary, (c) => c.charCodeAt(0)); | ||
| // Pad key to key len because Bun strips leading zero for P-521 only | ||
| const res = new Uint8Array(keyLen); | ||
| res.set(raw, keyLen - raw.length); | ||
| return res as Key; | ||
| } | ||
| const keyi = await crypto.exportKey(format, key); | ||
| return arrBufToU8(keyi, format); | ||
| }, | ||
| async convert(key: Key, inFormat: Format = _format, outFormat: Format = _format): Promise<Key> { | ||
| return priv.export(await priv.import(key, inFormat), outFormat); | ||
| }, | ||
| }; | ||
| // Key generation could be slow, so we cache result once. | ||
| let available: boolean | undefined; | ||
| return { | ||
| pub: pub as KeyUtils, | ||
| priv: priv as KeyUtils, | ||
| async isAvailable(): Promise<boolean> { | ||
| if (available !== undefined) return available; | ||
| try { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const key = await crypto.generateKey(algo, true, secUsage); | ||
| // Deno is broken and generates key for unsupported curves, but then fails on export | ||
| await priv.export(key.privateKey, 'jwk'); | ||
| // Bun fails on derive for x25519, but not x448 | ||
| if (derive) { | ||
| await crypto.deriveBits( | ||
| { name: typeof algo === 'string' ? algo : algo.name, public: key.publicKey }, | ||
| key.privateKey, | ||
| 8 | ||
| ); | ||
| } | ||
| return (available = true); | ||
| } catch (e) { | ||
| return (available = false); | ||
| } | ||
| }, | ||
| // We support different input / output formats since there is no 'spki' secret key | ||
| async getPublicKey(secretKey: Key, opts: WebCryptoGetPubOpts = {}): Promise<Key> { | ||
| const fpriv = opts.secFormat ?? _format; | ||
| const fpub = opts.pubFormat ?? fpriv; | ||
| // Export to jwk, remove private scalar and then convert to format | ||
| const jwk = ( | ||
| fpriv === 'jwk' ? { ...secretKey } : await priv.convert(secretKey, fpriv, 'jwk') | ||
| ) as JsonWebKey; | ||
| delete jwk.d; | ||
| jwk.key_ops = pubUsage; | ||
| if (fpub === 'jwk') return jwk; | ||
| return pub.convert(jwk, 'jwk', fpub); | ||
| }, | ||
| utils: { | ||
| async randomSecretKey(format: Format = _format): Promise<Key> { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const keyPair = await crypto.generateKey(algo, true, secUsage); | ||
| return priv.export(keyPair.privateKey, format); | ||
| }, | ||
| convertPublicKey: pub.convert as KeyUtils['convert'], | ||
| convertSecretKey: priv.convert as KeyUtils['convert'], | ||
| }, | ||
| }; | ||
| } | ||
| type WebCryptoOpts = { format?: Format }; | ||
| function createSigner(keys: ReturnType<typeof createKeyUtils>, algo: SigAlgo) { | ||
| return { | ||
| async sign(msgHash: Uint8Array, secretKey: Key, opts: WebCryptoOpts = {}): Promise<Uint8Array> { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const key = await keys.priv.import(secretKey, opts.format || _format); | ||
| const sig = await crypto.sign(algo, key, msgHash); | ||
| return new Uint8Array(sig); | ||
| }, | ||
| async verify( | ||
| signature: Uint8Array, | ||
| msgHash: Uint8Array, | ||
| publicKey: Key, | ||
| opts: WebCryptoOpts = {} | ||
| ): Promise<boolean> { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const key = await keys.pub.import(publicKey, opts.format || _format); | ||
| return await crypto.verify(algo, key, signature, msgHash); | ||
| }, | ||
| }; | ||
| } | ||
| function createECDH(keys: ReturnType<typeof createKeyUtils>, algo: Algo, keyLen: number) { | ||
| return { | ||
| async getSharedSecret( | ||
| secretKeyA: Uint8Array, | ||
| publicKeyB: Uint8Array, | ||
| opts: WebCryptoOpts = {} | ||
| ): Promise<Uint8Array> { | ||
| // if (_isCompressed !== true) throw new Error('WebCrypto only supports compressed keys'); | ||
| const crypto = getWebcryptoSubtle(); | ||
| const secKey = await keys.priv.import(secretKeyA, opts.format || _format); | ||
| const pubKey = await keys.pub.import(publicKeyB, opts.format || _format); | ||
| const shared = await crypto.deriveBits( | ||
| { name: typeof algo === 'string' ? algo : algo.name, public: pubKey }, | ||
| secKey, | ||
| 8 * keyLen | ||
| ); | ||
| return new Uint8Array(shared); | ||
| }, | ||
| }; | ||
| } | ||
| type WebCryptoBaseCurve = { | ||
| name: string; | ||
| isAvailable(): Promise<boolean>; | ||
| getPublicKey(secretKey: Key, opts?: WebCryptoGetPubOpts): Promise<Key>; | ||
| utils: { | ||
| randomSecretKey: (format?: Format) => Promise<Key>; | ||
| convertSecretKey: (key: Key, inFormat?: Format, outFormat?: Format) => Promise<Key>; | ||
| convertPublicKey: (key: Key, inFormat?: Format, outFormat?: Format) => Promise<Key>; | ||
| }; | ||
| }; | ||
| // Specific per-curve methods - no reason to export them; we can't "add" a new curve | ||
| // export type WebCryptoSigner = ReturnType<typeof createSigner>; | ||
| export type WebCryptoSigner = { | ||
| sign(msgHash: Uint8Array, privateKey: Key, opts?: WebCryptoOpts): Promise<Uint8Array>; | ||
| verify( | ||
| signature: Uint8Array, | ||
| msgHash: Uint8Array, | ||
| publicKey: Key, | ||
| opts?: WebCryptoOpts | ||
| ): Promise<boolean>; | ||
| }; | ||
| export type WebCryptoECDH = { | ||
| getSharedSecret(priv: Uint8Array, pub: Uint8Array, opts?: WebCryptoOpts): Promise<Uint8Array>; | ||
| }; | ||
| export type WebCryptoNIST = WebCryptoBaseCurve & WebCryptoSigner & WebCryptoECDH; | ||
| export type WebCryptoEdDSA = WebCryptoBaseCurve & WebCryptoSigner; | ||
| export type WebCryptoMontgomery = WebCryptoBaseCurve & WebCryptoECDH; | ||
| function wrapNIST( | ||
| curve: 'P-256' | 'P-384' | 'P-521', | ||
| hash: string, | ||
| keyLen: number, | ||
| pcks8header: string | ||
| ): WebCryptoNIST { | ||
| const ECDH_ALGO = { name: 'ECDH', namedCurve: curve }; | ||
| const keys = createKeyUtils({ name: 'ECDSA', namedCurve: curve }, false, keyLen, pcks8header); | ||
| const keysEcdh = createKeyUtils(ECDH_ALGO, true, keyLen, pcks8header); | ||
| return Object.freeze({ | ||
| name: curve, | ||
| isAvailable: keys.isAvailable, | ||
| getPublicKey: keys.getPublicKey, | ||
| ...createSigner(keys, { name: 'ECDSA', hash: { name: hash } }), | ||
| ...createECDH(keysEcdh, ECDH_ALGO, keyLen), | ||
| utils: keys.utils, | ||
| }); | ||
| } | ||
| function wrapEdDSA( | ||
| curve: 'Ed25519' | 'Ed448', | ||
| keyLen: number, | ||
| pcks8header: string | ||
| ): WebCryptoEdDSA { | ||
| const keys = createKeyUtils(curve, false, keyLen, pcks8header); | ||
| return Object.freeze({ | ||
| name: curve, | ||
| isAvailable: keys.isAvailable, | ||
| getPublicKey: keys.getPublicKey, | ||
| ...createSigner(keys, { name: curve }), | ||
| utils: keys.utils, | ||
| }); | ||
| } | ||
| function wrapMontgomery( | ||
| curve: 'X25519' | 'X448', | ||
| keyLen: number, | ||
| pcks8header: string | ||
| ): WebCryptoMontgomery { | ||
| const keys = createKeyUtils(curve, true, keyLen, pcks8header); | ||
| return Object.freeze({ | ||
| name: curve, | ||
| isAvailable: keys.isAvailable, | ||
| getPublicKey: keys.getPublicKey, | ||
| ...createECDH(keys, curve, keyLen), | ||
| utils: keys.utils, | ||
| }); | ||
| } | ||
| export const p256: WebCryptoNIST = /* @__PURE__ */ wrapNIST( | ||
| 'P-256', | ||
| 'SHA-256', | ||
| 32, | ||
| '3041020100301306072a8648ce3d020106082a8648ce3d030107042730250201010420' | ||
| ); | ||
| export const p384: WebCryptoNIST = /* @__PURE__ */ wrapNIST( | ||
| 'P-384', | ||
| 'SHA-384', | ||
| 48, | ||
| '304e020100301006072a8648ce3d020106052b81040022043730350201010430' | ||
| ); | ||
| export const p521: WebCryptoNIST = /* @__PURE__ */ wrapNIST( | ||
| 'P-521', | ||
| 'SHA-512', | ||
| 66, | ||
| '3060020100301006072a8648ce3d020106052b81040023044930470201010442' | ||
| ); | ||
| export const ed25519: WebCryptoEdDSA = /* @__PURE__ */ wrapEdDSA( | ||
| 'Ed25519', | ||
| 32, | ||
| '302e020100300506032b657004220420' | ||
| ); | ||
| export const ed448: WebCryptoEdDSA = /* @__PURE__ */ wrapEdDSA( | ||
| 'Ed448', | ||
| 57, | ||
| '3047020100300506032b6571043b0439' | ||
| ); | ||
| export const x25519: WebCryptoMontgomery = /* @__PURE__ */ wrapMontgomery( | ||
| 'X25519', | ||
| 32, | ||
| '302e020100300506032b656e04220420' | ||
| ); | ||
| export const x448: WebCryptoMontgomery = /* @__PURE__ */ wrapMontgomery( | ||
| 'X448', | ||
| 56, | ||
| '3046020100300506032b656f043a0438' | ||
| ); | ||
| export const supportsWc = (a: WebCryptoBaseCurve): Promise<boolean> => a.isAvailable(); |
| type JsonWebKey = { | ||
| crv?: string; | ||
| d?: string; | ||
| kty?: string; | ||
| x?: string; | ||
| y?: string; | ||
| [key: string]: unknown; | ||
| }; | ||
| type Format = 'raw' | 'jwk' | 'spki' | 'pkcs8'; | ||
| type Key = JsonWebKey | Uint8Array; | ||
| export type WebCryptoGetPubOpts = { | ||
| secFormat?: Format; | ||
| pubFormat?: Format; | ||
| }; | ||
| type WebCryptoOpts = { | ||
| format?: Format; | ||
| }; | ||
| type WebCryptoBaseCurve = { | ||
| name: string; | ||
| isAvailable(): Promise<boolean>; | ||
| getPublicKey(secretKey: Key, opts?: WebCryptoGetPubOpts): Promise<Key>; | ||
| utils: { | ||
| randomSecretKey: (format?: Format) => Promise<Key>; | ||
| convertSecretKey: (key: Key, inFormat?: Format, outFormat?: Format) => Promise<Key>; | ||
| convertPublicKey: (key: Key, inFormat?: Format, outFormat?: Format) => Promise<Key>; | ||
| }; | ||
| }; | ||
| export type WebCryptoSigner = { | ||
| sign(msgHash: Uint8Array, privateKey: Key, opts?: WebCryptoOpts): Promise<Uint8Array>; | ||
| verify(signature: Uint8Array, msgHash: Uint8Array, publicKey: Key, opts?: WebCryptoOpts): Promise<boolean>; | ||
| }; | ||
| export type WebCryptoECDH = { | ||
| getSharedSecret(priv: Uint8Array, pub: Uint8Array, opts?: WebCryptoOpts): Promise<Uint8Array>; | ||
| }; | ||
| export type WebCryptoNIST = WebCryptoBaseCurve & WebCryptoSigner & WebCryptoECDH; | ||
| export type WebCryptoEdDSA = WebCryptoBaseCurve & WebCryptoSigner; | ||
| export type WebCryptoMontgomery = WebCryptoBaseCurve & WebCryptoECDH; | ||
| export declare const p256: WebCryptoNIST; | ||
| export declare const p384: WebCryptoNIST; | ||
| export declare const p521: WebCryptoNIST; | ||
| export declare const ed25519: WebCryptoEdDSA; | ||
| export declare const ed448: WebCryptoEdDSA; | ||
| export declare const x25519: WebCryptoMontgomery; | ||
| export declare const x448: WebCryptoMontgomery; | ||
| export declare const supportsWc: (a: WebCryptoBaseCurve) => Promise<boolean>; | ||
| export {}; | ||
| //# sourceMappingURL=webcrypto.d.ts.map |
| {"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"AAgDA,KAAK,UAAU,GAAG;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AACF,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAC/C,KAAK,GAAG,GAAG,UAAU,GAAG,UAAU,CAAC;AAWnC,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA+HF,KAAK,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4CzC,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACvE,KAAK,EAAE;QACL,eAAe,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QACnD,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QACpF,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KACrF,CAAC;CACH,CAAC;AAIF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtF,MAAM,CACJ,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,GAAG,EACd,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC/F,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,eAAe,GAAG,aAAa,CAAC;AACjF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAmDrE,eAAO,MAAM,IAAI,EAAE,aAKlB,CAAC;AACF,eAAO,MAAM,IAAI,EAAE,aAKlB,CAAC;AACF,eAAO,MAAM,IAAI,EAAE,aAKlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cAIrB,CAAC;AACF,eAAO,MAAM,KAAK,EAAE,cAInB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,mBAIpB,CAAC;AACF,eAAO,MAAM,IAAI,EAAE,mBAIlB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,GAAG,kBAAkB,KAAG,OAAO,CAAC,OAAO,CAAoB,CAAC"} |
+231
| /** | ||
| * Friendly wrapper over elliptic curves from built-in WebCrypto. Experimental: API may change. | ||
| # WebCrypto issues | ||
| ## No way to get public keys | ||
| - Export of raw secret key is prohibited by spec: | ||
| - https://w3c.github.io/webcrypto/#ecdsa-operations-export-key | ||
| -> "If format is "raw":" -> "If the [[type]] internal slot of key is not "public", | ||
| then throw an InvalidAccessError." | ||
| - Import of raw secret keys is prohibited by spec: | ||
| - https://w3c.github.io/webcrypto/#ecdsa-operations-import-key | ||
| -> "If format is "raw":" -> "If usages contains a value which is not "verify" | ||
| then throw a SyntaxError." | ||
| - SPKI (Simple public-key infrastructure) is public-key-only | ||
| - PCKS8 is secret-key-only | ||
| - No way to get public key from secret key, but we convert to jwk and then create it manually, since jwk secret key is priv+pub. | ||
| - Noble supports generating keys for both sign, verify & getSharedSecret, | ||
| but JWK key includes usage, which forces us to patch it (non-JWK is ok) | ||
| - We have import/export for 'raw', but it doesn't work in Firefox / Safari | ||
| ## Point encoding | ||
| - Raw export of public points returns uncompressed points, | ||
| but this is implementation specific and not much we can do there. | ||
| - `getSharedSecret` differs for p256, p384, p521: | ||
| Noble returns 33-byte output (y-parity + x coordinate), | ||
| while in WebCrypto returns 32-byte output (x coordinate) | ||
| - `getSharedSecret` identical for X25519, X448 | ||
| ## Availability | ||
| Node.js additionally supports ed448. | ||
| There seems no reasonable way to check for availability, other than actually calling methods. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { concatBytes, hexToBytes } from "./utils.js"; | ||
| function getWebcryptoSubtle() { | ||
| const subtle = globalThis?.crypto?.subtle; | ||
| if (typeof subtle === 'object' && subtle != null) | ||
| return subtle; | ||
| throw new Error('crypto.subtle must be defined'); | ||
| } | ||
| const _format = 'raw'; | ||
| function assertType(type, key) { | ||
| if (key.type !== type) | ||
| throw new Error(`invalid key type, expected ${type}`); | ||
| } | ||
| function createKeyUtils(algo, derive, keyLen, pcks8header) { | ||
| const secUsage = derive ? ['deriveBits'] : ['sign']; | ||
| const pubUsage = derive ? [] : ['verify']; | ||
| // Return Uint8Array instead of ArrayBuffer | ||
| const arrBufToU8 = (res, format) => format === 'jwk' ? res : new Uint8Array(res); | ||
| const pub = { | ||
| async import(key, format = _format) { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const keyi = await crypto.importKey(format, key, algo, true, pubUsage); | ||
| assertType('public', keyi); | ||
| return keyi; | ||
| }, | ||
| async export(key, format = _format) { | ||
| assertType('public', key); | ||
| const crypto = getWebcryptoSubtle(); | ||
| const keyi = await crypto.exportKey(format, key); | ||
| return arrBufToU8(keyi, format); | ||
| }, | ||
| async convert(key, inFormat = _format, outFormat = _format) { | ||
| return pub.export(await pub.import(key, inFormat), outFormat); | ||
| }, | ||
| }; | ||
| const priv = { | ||
| async import(key, format = _format) { | ||
| const crypto = getWebcryptoSubtle(); | ||
| let keyi; | ||
| if (format === 'raw') { | ||
| // Chrome, node, bun, deno: works | ||
| // Safari, Firefox: Data provided to an operation does not meet requirements | ||
| // This is the best one can do. JWK can't be used: it contains public key component inside. | ||
| keyi = await crypto.importKey('pkcs8', concatBytes(hexToBytes(pcks8header), key), algo, true, secUsage); | ||
| } | ||
| else { | ||
| // Fix import of ECDSA keys into ECDH, other formats are ok | ||
| if (derive && format === 'jwk') | ||
| key = { ...key, key_ops: secUsage }; | ||
| keyi = await crypto.importKey(format, key, algo, true, secUsage); | ||
| } | ||
| assertType('private', keyi); | ||
| return keyi; | ||
| }, | ||
| async export(key, format = _format) { | ||
| const crypto = getWebcryptoSubtle(); | ||
| assertType('private', key); | ||
| if (format === 'raw') { | ||
| // scure-base base64urlnopad could have been used, but we can't add more deps. | ||
| // pcks8 would be even more fragile | ||
| const jwk = await crypto.exportKey('jwk', key); | ||
| const base64 = jwk.d.replace(/-/g, '+').replace(/_/g, '/'); // base64url | ||
| const pad = base64.length % 4 ? '='.repeat(4 - (base64.length % 4)) : ''; // add padding | ||
| const binary = atob(base64 + pad); | ||
| // This is not ASCII, and not text: this is only semi-safe with atob output | ||
| const raw = Uint8Array.from(binary, (c) => c.charCodeAt(0)); | ||
| // Pad key to key len because Bun strips leading zero for P-521 only | ||
| const res = new Uint8Array(keyLen); | ||
| res.set(raw, keyLen - raw.length); | ||
| return res; | ||
| } | ||
| const keyi = await crypto.exportKey(format, key); | ||
| return arrBufToU8(keyi, format); | ||
| }, | ||
| async convert(key, inFormat = _format, outFormat = _format) { | ||
| return priv.export(await priv.import(key, inFormat), outFormat); | ||
| }, | ||
| }; | ||
| // Key generation could be slow, so we cache result once. | ||
| let available; | ||
| return { | ||
| pub: pub, | ||
| priv: priv, | ||
| async isAvailable() { | ||
| if (available !== undefined) | ||
| return available; | ||
| try { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const key = await crypto.generateKey(algo, true, secUsage); | ||
| // Deno is broken and generates key for unsupported curves, but then fails on export | ||
| await priv.export(key.privateKey, 'jwk'); | ||
| // Bun fails on derive for x25519, but not x448 | ||
| if (derive) { | ||
| await crypto.deriveBits({ name: typeof algo === 'string' ? algo : algo.name, public: key.publicKey }, key.privateKey, 8); | ||
| } | ||
| return (available = true); | ||
| } | ||
| catch (e) { | ||
| return (available = false); | ||
| } | ||
| }, | ||
| // We support different input / output formats since there is no 'spki' secret key | ||
| async getPublicKey(secretKey, opts = {}) { | ||
| const fpriv = opts.secFormat ?? _format; | ||
| const fpub = opts.pubFormat ?? fpriv; | ||
| // Export to jwk, remove private scalar and then convert to format | ||
| const jwk = (fpriv === 'jwk' ? { ...secretKey } : await priv.convert(secretKey, fpriv, 'jwk')); | ||
| delete jwk.d; | ||
| jwk.key_ops = pubUsage; | ||
| if (fpub === 'jwk') | ||
| return jwk; | ||
| return pub.convert(jwk, 'jwk', fpub); | ||
| }, | ||
| utils: { | ||
| async randomSecretKey(format = _format) { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const keyPair = await crypto.generateKey(algo, true, secUsage); | ||
| return priv.export(keyPair.privateKey, format); | ||
| }, | ||
| convertPublicKey: pub.convert, | ||
| convertSecretKey: priv.convert, | ||
| }, | ||
| }; | ||
| } | ||
| function createSigner(keys, algo) { | ||
| return { | ||
| async sign(msgHash, secretKey, opts = {}) { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const key = await keys.priv.import(secretKey, opts.format || _format); | ||
| const sig = await crypto.sign(algo, key, msgHash); | ||
| return new Uint8Array(sig); | ||
| }, | ||
| async verify(signature, msgHash, publicKey, opts = {}) { | ||
| const crypto = getWebcryptoSubtle(); | ||
| const key = await keys.pub.import(publicKey, opts.format || _format); | ||
| return await crypto.verify(algo, key, signature, msgHash); | ||
| }, | ||
| }; | ||
| } | ||
| function createECDH(keys, algo, keyLen) { | ||
| return { | ||
| async getSharedSecret(secretKeyA, publicKeyB, opts = {}) { | ||
| // if (_isCompressed !== true) throw new Error('WebCrypto only supports compressed keys'); | ||
| const crypto = getWebcryptoSubtle(); | ||
| const secKey = await keys.priv.import(secretKeyA, opts.format || _format); | ||
| const pubKey = await keys.pub.import(publicKeyB, opts.format || _format); | ||
| const shared = await crypto.deriveBits({ name: typeof algo === 'string' ? algo : algo.name, public: pubKey }, secKey, 8 * keyLen); | ||
| return new Uint8Array(shared); | ||
| }, | ||
| }; | ||
| } | ||
| function wrapNIST(curve, hash, keyLen, pcks8header) { | ||
| const ECDH_ALGO = { name: 'ECDH', namedCurve: curve }; | ||
| const keys = createKeyUtils({ name: 'ECDSA', namedCurve: curve }, false, keyLen, pcks8header); | ||
| const keysEcdh = createKeyUtils(ECDH_ALGO, true, keyLen, pcks8header); | ||
| return Object.freeze({ | ||
| name: curve, | ||
| isAvailable: keys.isAvailable, | ||
| getPublicKey: keys.getPublicKey, | ||
| ...createSigner(keys, { name: 'ECDSA', hash: { name: hash } }), | ||
| ...createECDH(keysEcdh, ECDH_ALGO, keyLen), | ||
| utils: keys.utils, | ||
| }); | ||
| } | ||
| function wrapEdDSA(curve, keyLen, pcks8header) { | ||
| const keys = createKeyUtils(curve, false, keyLen, pcks8header); | ||
| return Object.freeze({ | ||
| name: curve, | ||
| isAvailable: keys.isAvailable, | ||
| getPublicKey: keys.getPublicKey, | ||
| ...createSigner(keys, { name: curve }), | ||
| utils: keys.utils, | ||
| }); | ||
| } | ||
| function wrapMontgomery(curve, keyLen, pcks8header) { | ||
| const keys = createKeyUtils(curve, true, keyLen, pcks8header); | ||
| return Object.freeze({ | ||
| name: curve, | ||
| isAvailable: keys.isAvailable, | ||
| getPublicKey: keys.getPublicKey, | ||
| ...createECDH(keys, curve, keyLen), | ||
| utils: keys.utils, | ||
| }); | ||
| } | ||
| export const p256 = /* @__PURE__ */ wrapNIST('P-256', 'SHA-256', 32, '3041020100301306072a8648ce3d020106082a8648ce3d030107042730250201010420'); | ||
| export const p384 = /* @__PURE__ */ wrapNIST('P-384', 'SHA-384', 48, '304e020100301006072a8648ce3d020106052b81040022043730350201010430'); | ||
| export const p521 = /* @__PURE__ */ wrapNIST('P-521', 'SHA-512', 66, '3060020100301006072a8648ce3d020106052b81040023044930470201010442'); | ||
| export const ed25519 = /* @__PURE__ */ wrapEdDSA('Ed25519', 32, '302e020100300506032b657004220420'); | ||
| export const ed448 = /* @__PURE__ */ wrapEdDSA('Ed448', 57, '3047020100300506032b6571043b0439'); | ||
| export const x25519 = /* @__PURE__ */ wrapMontgomery('X25519', 32, '302e020100300506032b656e04220420'); | ||
| export const x448 = /* @__PURE__ */ wrapMontgomery('X448', 56, '3046020100300506032b656f043a0438'); | ||
| export const supportsWc = (a) => a.isAvailable(); | ||
| //# sourceMappingURL=webcrypto.js.map |
| {"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAQ,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;IAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,MAAM,CAAC;IAChE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AA2BD,MAAM,OAAO,GAAG,KAAK,CAAC;AAEtB,SAAS,UAAU,CAAC,IAA0B,EAAE,GAAQ;IACtD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,cAAc,CAAC,IAAU,EAAE,MAAe,EAAE,MAAc,EAAE,WAAmB;IACtF,MAAM,QAAQ,GAAe,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAe,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,MAAc,EAAE,EAAE,CAC9C,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,GAAkB,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAa;QACpB,KAAK,CAAC,MAAM,CAAC,GAAQ,EAAE,SAAiB,OAAO;YAC7C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAc,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAClF,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAc,EAAE,SAAiB,OAAO;YACnD,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACjD,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAAQ,EAAE,WAAmB,OAAO,EAAE,YAAoB,OAAO;YAC7E,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;IACF,MAAM,IAAI,GAAa;QACrB,KAAK,CAAC,MAAM,CAAC,GAAQ,EAAE,SAAiB,OAAO;YAC7C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACpC,IAAI,IAAe,CAAC;YACpB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,iCAAiC;gBACjC,4EAA4E;gBAC5E,2FAA2F;gBAC3F,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAC3B,OAAO,EACP,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,GAAiB,CAAC,EACvD,IAAI,EACJ,IAAI,EACJ,QAAQ,CACT,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,2DAA2D;gBAC3D,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK;oBAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACpE,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACnE,CAAC;YACD,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAc,EAAE,SAAiB,OAAO;YACnD,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACpC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,8EAA8E;gBAC9E,mCAAmC;gBACnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY;gBACxE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc;gBACxF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBAClC,2EAA2E;gBAC3E,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D,oEAAoE;gBACpE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClC,OAAO,GAAU,CAAC;YACpB,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACjD,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAAQ,EAAE,WAAmB,OAAO,EAAE,YAAoB,OAAO;YAC7E,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;IACF,yDAAyD;IACzD,IAAI,SAA8B,CAAC;IACnC,OAAO;QACL,GAAG,EAAE,GAAe;QACpB,IAAI,EAAE,IAAgB;QACtB,KAAK,CAAC,WAAW;YACf,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC3D,oFAAoF;gBACpF,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBACzC,+CAA+C;gBAC/C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,MAAM,CAAC,UAAU,CACrB,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,EAC5E,GAAG,CAAC,UAAU,EACd,CAAC,CACF,CAAC;gBACJ,CAAC;gBACD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,kFAAkF;QAClF,KAAK,CAAC,YAAY,CAAC,SAAc,EAAE,OAA4B,EAAE;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;YACrC,kEAAkE;YAClE,MAAM,GAAG,GAAG,CACV,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CACnE,CAAC;YAChB,OAAO,GAAG,CAAC,CAAC,CAAC;YACb,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC;YACvB,IAAI,IAAI,KAAK,KAAK;gBAAE,OAAO,GAAG,CAAC;YAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,EAAE;YACL,KAAK,CAAC,eAAe,CAAC,SAAiB,OAAO;gBAC5C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACjD,CAAC;YACD,gBAAgB,EAAE,GAAG,CAAC,OAA8B;YACpD,gBAAgB,EAAE,IAAI,CAAC,OAA8B;SACtD;KACF,CAAC;AACJ,CAAC;AAID,SAAS,YAAY,CAAC,IAAuC,EAAE,IAAa;IAC1E,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAmB,EAAE,SAAc,EAAE,OAAsB,EAAE;YACtE,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;YACtE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,MAAM,CACV,SAAqB,EACrB,OAAmB,EACnB,SAAc,EACd,OAAsB,EAAE;YAExB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;YACrE,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAuC,EAAE,IAAU,EAAE,MAAc;IACrF,OAAO;QACL,KAAK,CAAC,eAAe,CACnB,UAAsB,EACtB,UAAsB,EACtB,OAAsB,EAAE;YAExB,0FAA0F;YAC1F,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CACpC,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EACrE,MAAM,EACN,CAAC,GAAG,MAAM,CACX,CAAC;YACF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC;AA+BD,SAAS,QAAQ,CACf,KAAkC,EAClC,IAAY,EACZ,MAAc,EACd,WAAmB;IAEnB,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9D,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAChB,KAA0B,EAC1B,MAAc,EACd,WAAmB;IAEnB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACtC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,KAAwB,EACxB,MAAc,EACd,WAAmB;IAEnB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAkB,eAAe,CAAC,QAAQ,CACzD,OAAO,EACP,SAAS,EACT,EAAE,EACF,wEAAwE,CACzE,CAAC;AACF,MAAM,CAAC,MAAM,IAAI,GAAkB,eAAe,CAAC,QAAQ,CACzD,OAAO,EACP,SAAS,EACT,EAAE,EACF,kEAAkE,CACnE,CAAC;AACF,MAAM,CAAC,MAAM,IAAI,GAAkB,eAAe,CAAC,QAAQ,CACzD,OAAO,EACP,SAAS,EACT,EAAE,EACF,kEAAkE,CACnE,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAmB,eAAe,CAAC,SAAS,CAC9D,SAAS,EACT,EAAE,EACF,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,KAAK,GAAmB,eAAe,CAAC,SAAS,CAC5D,OAAO,EACP,EAAE,EACF,kCAAkC,CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAwB,eAAe,CAAC,cAAc,CACvE,QAAQ,EACR,EAAE,EACF,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,IAAI,GAAwB,eAAe,CAAC,cAAc,CACrE,MAAM,EACN,EAAE,EACF,kCAAkC,CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAqB,EAAoB,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC"} |
+49
-111
@@ -1,23 +0,6 @@ | ||
| /** | ||
| * BLS != BLS. | ||
| * The file implements BLS (Boneh-Lynn-Shacham) signatures. | ||
| * Used in both BLS (Barreto-Lynn-Scott) and BN (Barreto-Naehrig) | ||
| * families of pairing-friendly curves. | ||
| * Consists of two curves: G1 and G2: | ||
| * - G1 is a subgroup of (x, y) E(Fq) over y² = x³ + 4. | ||
| * - G2 is a subgroup of ((x₁, x₂+i), (y₁, y₂+i)) E(Fq²) over y² = x³ + 4(1 + i) where i is √-1 | ||
| * - Gt, created by bilinear (ate) pairing e(G1, G2), consists of p-th roots of unity in | ||
| * Fq^k where k is embedding degree. Only degree 12 is currently supported, 24 is not. | ||
| * Pairing is used to aggregate and verify signatures. | ||
| * There are two modes of operation: | ||
| * - Long signatures: X-byte keys + 2X-byte sigs (G1 keys + G2 sigs). | ||
| * - Short signatures: 2X-byte keys + X-byte sigs (G2 keys + G1 sigs). | ||
| * @module | ||
| **/ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type CHash, type Hex, type PrivKey } from '../utils.ts'; | ||
| import { type H2CHasher, type H2CHashOpts, type H2COpts, type htfBasicOpts, type MapToCurve } from './hash-to-curve.ts'; | ||
| import { type CurveLengths } from './curve.ts'; | ||
| import { type H2CHasher, type H2CHashOpts, type H2COpts, type MapToCurve } from './hash-to-curve.ts'; | ||
| import { type IField } from './modular.ts'; | ||
| import type { Fp12, Fp12Bls, Fp2, Fp2Bls, Fp6Bls } from './tower.ts'; | ||
| import { type CurvePointsRes, type CurvePointsType, type WeierstrassPoint, type WeierstrassPointCons } from './weierstrass.ts'; | ||
| import { type WeierstrassPoint, type WeierstrassPointCons } from './weierstrass.ts'; | ||
| type Fp = bigint; | ||
@@ -27,15 +10,11 @@ export type TwistType = 'multiplicative' | 'divisive'; | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>; | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp>; | ||
| fromHex(hex: string): WeierstrassPoint<Fp>; | ||
| toBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| toHex(point: WeierstrassPoint<Fp>): string; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| }; | ||
| export type SignatureCoder<Fp> = { | ||
| export type LongSignatureCoder<Fp> = { | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>; | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp>; | ||
| fromHex(hex: string): WeierstrassPoint<Fp>; | ||
| toBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| toHex(point: WeierstrassPoint<Fp>): string; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| }; | ||
@@ -56,2 +35,4 @@ export type BlsFields = { | ||
| export type BlsPairing = { | ||
| lengths: CurveLengths; | ||
| Fr: IField<bigint>; | ||
| Fp12: Fp12Bls; | ||
@@ -65,2 +46,3 @@ calcPairingPrecomputes: (p: WeierstrassPoint<Fp2>) => Precompute; | ||
| }[], withFinalExponent?: boolean) => Fp12; | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| }; | ||
@@ -71,26 +53,11 @@ export type BlsPairingParams = { | ||
| twistType: TwistType; | ||
| randomBytes?: (len?: number) => Uint8Array; | ||
| postPrecompute?: PostPrecomputeFn; | ||
| }; | ||
| export type CurveType = { | ||
| G1: CurvePointsType<Fp> & { | ||
| ShortSignature: SignatureCoder<Fp>; | ||
| mapToCurve: MapToCurve<Fp>; | ||
| htfDefaults: H2COpts; | ||
| }; | ||
| G2: CurvePointsType<Fp2> & { | ||
| Signature: SignatureCoder<Fp2>; | ||
| mapToCurve: MapToCurve<Fp2>; | ||
| htfDefaults: H2COpts; | ||
| }; | ||
| fields: BlsFields; | ||
| params: { | ||
| ateLoopSize: BlsPairingParams['ateLoopSize']; | ||
| xNegative: BlsPairingParams['xNegative']; | ||
| r: bigint; | ||
| twistType: BlsPairingParams['twistType']; | ||
| }; | ||
| htfDefaults: H2COpts; | ||
| hash: CHash; | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| postPrecompute?: PostPrecomputeFn; | ||
| export type BlsHasherParams = { | ||
| mapToG1?: MapToCurve<Fp>; | ||
| mapToG2?: MapToCurve<Fp2>; | ||
| hasherOpts: H2COpts; | ||
| hasherOptsG1: H2COpts; | ||
| hasherOptsG2: H2COpts; | ||
| }; | ||
@@ -105,4 +72,3 @@ type PrecomputeSingle = [Fp2, Fp2, Fp2][]; | ||
| export interface BLSCurvePair { | ||
| longSignatures: BLSSigs<bigint, Fp2>; | ||
| shortSignatures: BLSSigs<Fp2, bigint>; | ||
| lengths: CurveLengths; | ||
| millerLoopBatch: BlsPairing['millerLoopBatch']; | ||
@@ -112,7 +78,7 @@ pairing: BlsPairing['pairing']; | ||
| G1: { | ||
| Point: WeierstrassPointCons<bigint>; | ||
| } & H2CHasher<Fp>; | ||
| Point: WeierstrassPointCons<Fp>; | ||
| }; | ||
| G2: { | ||
| Point: WeierstrassPointCons<Fp2>; | ||
| } & H2CHasher<Fp2>; | ||
| }; | ||
| fields: { | ||
@@ -126,72 +92,44 @@ Fp: IField<Fp>; | ||
| utils: { | ||
| randomSecretKey: () => Uint8Array; | ||
| /** @deprecated use randomSecretKey */ | ||
| randomPrivateKey: () => Uint8Array; | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| calcPairingPrecomputes: BlsPairing['calcPairingPrecomputes']; | ||
| }; | ||
| } | ||
| export type CurveFn = BLSCurvePair & { | ||
| /** @deprecated use `longSignatures.getPublicKey` */ | ||
| getPublicKey: (secretKey: PrivKey) => Uint8Array; | ||
| /** @deprecated use `shortSignatures.getPublicKey` */ | ||
| getPublicKeyForShortSignatures: (secretKey: PrivKey) => Uint8Array; | ||
| /** @deprecated use `longSignatures.sign` */ | ||
| sign: { | ||
| (message: Hex, secretKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array; | ||
| (message: WeierstrassPoint<Fp2>, secretKey: PrivKey, htfOpts?: htfBasicOpts): WeierstrassPoint<Fp2>; | ||
| }; | ||
| /** @deprecated use `shortSignatures.sign` */ | ||
| signShortSignature: { | ||
| (message: Hex, secretKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array; | ||
| (message: WeierstrassPoint<Fp>, secretKey: PrivKey, htfOpts?: htfBasicOpts): WeierstrassPoint<Fp>; | ||
| }; | ||
| /** @deprecated use `longSignatures.verify` */ | ||
| verify: (signature: Hex | WeierstrassPoint<Fp2>, message: Hex | WeierstrassPoint<Fp2>, publicKey: Hex | WeierstrassPoint<Fp>, htfOpts?: htfBasicOpts) => boolean; | ||
| /** @deprecated use `shortSignatures.verify` */ | ||
| verifyShortSignature: (signature: Hex | WeierstrassPoint<Fp>, message: Hex | WeierstrassPoint<Fp>, publicKey: Hex | WeierstrassPoint<Fp2>, htfOpts?: htfBasicOpts) => boolean; | ||
| verifyBatch: (signature: Hex | WeierstrassPoint<Fp2>, messages: (Hex | WeierstrassPoint<Fp2>)[], publicKeys: (Hex | WeierstrassPoint<Fp>)[], htfOpts?: htfBasicOpts) => boolean; | ||
| /** @deprecated use `longSignatures.aggregatePublicKeys` */ | ||
| aggregatePublicKeys: { | ||
| (publicKeys: Hex[]): Uint8Array; | ||
| (publicKeys: WeierstrassPoint<Fp>[]): WeierstrassPoint<Fp>; | ||
| }; | ||
| /** @deprecated use `longSignatures.aggregateSignatures` */ | ||
| aggregateSignatures: { | ||
| (signatures: Hex[]): Uint8Array; | ||
| (signatures: WeierstrassPoint<Fp2>[]): WeierstrassPoint<Fp2>; | ||
| }; | ||
| /** @deprecated use `shortSignatures.aggregateSignatures` */ | ||
| aggregateShortSignatures: { | ||
| (signatures: Hex[]): Uint8Array; | ||
| (signatures: WeierstrassPoint<Fp>[]): WeierstrassPoint<Fp>; | ||
| }; | ||
| G1: CurvePointsRes<Fp> & H2CHasher<Fp>; | ||
| G2: CurvePointsRes<Fp2> & H2CHasher<Fp2>; | ||
| /** @deprecated use `longSignatures.Signature` */ | ||
| Signature: SignatureCoder<Fp2>; | ||
| /** @deprecated use `shortSignatures.Signature` */ | ||
| ShortSignature: ShortSignatureCoder<Fp>; | ||
| params: { | ||
| ateLoopSize: bigint; | ||
| r: bigint; | ||
| twistType: TwistType; | ||
| /** @deprecated */ | ||
| G1b: bigint; | ||
| /** @deprecated */ | ||
| G2b: Fp2; | ||
| }; | ||
| }; | ||
| type BLSInput = Hex | Uint8Array; | ||
| } | ||
| export interface BlsCurvePairWithHashers extends BLSCurvePair { | ||
| G1: H2CHasher<WeierstrassPointCons<Fp>>; | ||
| G2: H2CHasher<WeierstrassPointCons<Fp2>>; | ||
| } | ||
| export interface BlsCurvePairWithSignatures extends BlsCurvePairWithHashers { | ||
| longSignatures: BLSSigs<bigint, Fp2>; | ||
| shortSignatures: BLSSigs<Fp2, bigint>; | ||
| } | ||
| type BLSInput = Uint8Array; | ||
| export interface BLSSigs<P, S> { | ||
| getPublicKey(secretKey: PrivKey): WeierstrassPoint<P>; | ||
| sign(hashedMessage: WeierstrassPoint<S>, secretKey: PrivKey): WeierstrassPoint<S>; | ||
| lengths: CurveLengths; | ||
| keygen(seed?: Uint8Array): { | ||
| secretKey: Uint8Array; | ||
| publicKey: WeierstrassPoint<P>; | ||
| }; | ||
| getPublicKey(secretKey: Uint8Array): WeierstrassPoint<P>; | ||
| sign(hashedMessage: WeierstrassPoint<S>, secretKey: Uint8Array): WeierstrassPoint<S>; | ||
| verify(signature: WeierstrassPoint<S> | BLSInput, message: WeierstrassPoint<S>, publicKey: WeierstrassPoint<P> | BLSInput): boolean; | ||
| verifyBatch: (signature: WeierstrassPoint<S> | BLSInput, messages: WeierstrassPoint<S>[], publicKeys: (WeierstrassPoint<P> | BLSInput)[]) => boolean; | ||
| verifyBatch: (signature: WeierstrassPoint<S> | BLSInput, items: { | ||
| message: WeierstrassPoint<S>; | ||
| publicKey: WeierstrassPoint<P> | BLSInput; | ||
| }[]) => boolean; | ||
| aggregatePublicKeys(publicKeys: (WeierstrassPoint<P> | BLSInput)[]): WeierstrassPoint<P>; | ||
| aggregateSignatures(signatures: (WeierstrassPoint<S> | BLSInput)[]): WeierstrassPoint<S>; | ||
| hash(message: Uint8Array, DST?: string | Uint8Array, hashOpts?: H2CHashOpts): WeierstrassPoint<S>; | ||
| Signature: SignatureCoder<S>; | ||
| Signature: LongSignatureCoder<S>; | ||
| } | ||
| export declare function bls(CURVE: CurveType): CurveFn; | ||
| type BlsSignatureCoders = Partial<{ | ||
| LongSignature: LongSignatureCoder<Fp2>; | ||
| ShortSignature: ShortSignatureCoder<Fp>; | ||
| }>; | ||
| export declare function blsBasic(fields: BlsFields, G1_Point: WeierstrassPointCons<Fp>, G2_Point: WeierstrassPointCons<Fp2>, params: BlsPairingParams): BLSCurvePair; | ||
| export declare function bls(fields: BlsFields, G1_Point: WeierstrassPointCons<Fp>, G2_Point: WeierstrassPointCons<Fp2>, params: BlsPairingParams, hasherParams: BlsHasherParams, signatureCoders: BlsSignatureCoders): BlsCurvePairWithSignatures; | ||
| export {}; | ||
| //# sourceMappingURL=bls.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bls.d.ts","sourceRoot":"","sources":["../src/abstract/bls.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"bls.d.ts","sourceRoot":"","sources":["../src/abstract/bls.ts"],"names":[],"mappings":"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"} |
+108
-152
@@ -1,4 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.bls = bls; | ||
| /** | ||
@@ -21,7 +18,7 @@ * BLS != BLS. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const curve_ts_1 = require("./curve.js"); | ||
| const hash_to_curve_ts_1 = require("./hash-to-curve.js"); | ||
| const modular_ts_1 = require("./modular.js"); | ||
| const weierstrass_ts_1 = require("./weierstrass.js"); | ||
| import { abytes, memoized, notImplemented, randomBytes } from "../utils.js"; | ||
| import { normalizeZ } from "./curve.js"; | ||
| import { createHasher, } from "./hash-to-curve.js"; | ||
| import { getMinHashLength, mapHashToField } from "./modular.js"; | ||
| import {} from "./weierstrass.js"; | ||
| // prettier-ignore | ||
@@ -51,3 +48,3 @@ const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| function createBlsPairing(fields, G1, G2, params) { | ||
| const { Fp2, Fp12 } = fields; | ||
| const { Fr, Fp2, Fp12 } = fields; | ||
| const { twistType, ateLoopSize, xNegative, postPrecompute } = params; | ||
@@ -104,3 +101,3 @@ // Applies sparse multiplication as line function | ||
| const ATE_NAF = NAfDecomposition(ateLoopSize); | ||
| const calcPairingPrecomputes = (0, utils_ts_1.memoized)((point) => { | ||
| const calcPairingPrecomputes = memoized((point) => { | ||
| const p = point; | ||
@@ -148,4 +145,4 @@ const { x, y } = p.toAffine(); | ||
| // Cache precomputed toAffine for all points | ||
| (0, curve_ts_1.normalizeZ)(G1, pairs.map(({ g1 }) => g1)); | ||
| (0, curve_ts_1.normalizeZ)(G2, pairs.map(({ g2 }) => g2)); | ||
| normalizeZ(G1, pairs.map(({ g1 }) => g1)); | ||
| normalizeZ(G2, pairs.map(({ g2 }) => g2)); | ||
| for (const { g1, g2 } of pairs) { | ||
@@ -166,3 +163,13 @@ if (g1.is0() || g2.is0()) | ||
| } | ||
| const lengths = { | ||
| seed: getMinHashLength(Fr.ORDER), | ||
| }; | ||
| const rand = params.randomBytes || randomBytes; | ||
| const randomSecretKey = (seed = rand(lengths.seed)) => { | ||
| abytes(seed, lengths.seed, 'seed'); | ||
| return mapHashToField(seed, Fr.ORDER); | ||
| }; | ||
| return { | ||
| lengths, | ||
| Fr, | ||
| Fp12, // NOTE: we re-export Fp12 here because pairing results are Fp12! | ||
@@ -173,14 +180,23 @@ millerLoopBatch, | ||
| calcPairingPrecomputes, | ||
| randomSecretKey, | ||
| }; | ||
| } | ||
| function createBlsSig(blsPairing, PubCurve, SigCurve, SignatureCoder, isSigG1) { | ||
| const { Fp12, pairingBatch } = blsPairing; | ||
| function createBlsSig(blsPairing, PubPoint, SigPoint, isSigG1, hashToSigCurve, SignatureCoder) { | ||
| const { Fr, Fp12, pairingBatch, randomSecretKey, lengths } = blsPairing; | ||
| if (!SignatureCoder) { | ||
| SignatureCoder = { | ||
| fromBytes: notImplemented, | ||
| fromHex: notImplemented, | ||
| toBytes: notImplemented, | ||
| toHex: notImplemented, | ||
| }; | ||
| } | ||
| function normPub(point) { | ||
| return point instanceof PubCurve.Point ? point : PubCurve.Point.fromHex(point); | ||
| return point instanceof PubPoint ? point : PubPoint.fromBytes(point); | ||
| } | ||
| function normSig(point) { | ||
| return point instanceof SigCurve.Point ? point : SigCurve.Point.fromHex(point); | ||
| return point instanceof SigPoint ? point : SigPoint.fromBytes(point); | ||
| } | ||
| function amsg(m) { | ||
| if (!(m instanceof SigCurve.Point)) | ||
| if (!(m instanceof SigPoint)) | ||
| throw new Error(`expected valid message hashed to ${!isSigG1 ? 'G2' : 'G1'} curve`); | ||
@@ -193,9 +209,20 @@ return m; | ||
| : (a, b) => ({ g1: b, g2: a }); | ||
| return { | ||
| return Object.freeze({ | ||
| lengths: { ...lengths, secretKey: Fr.BYTES }, | ||
| keygen(seed) { | ||
| const secretKey = randomSecretKey(seed); | ||
| const publicKey = this.getPublicKey(secretKey); | ||
| return { secretKey, publicKey }; | ||
| }, | ||
| // P = pk x G | ||
| getPublicKey(secretKey) { | ||
| // TODO: replace with | ||
| // const sec = PubCurve.Point.Fn.fromBytes(secretKey); | ||
| const sec = (0, weierstrass_ts_1._normFnElement)(PubCurve.Point.Fn, secretKey); | ||
| return PubCurve.Point.BASE.multiply(sec); | ||
| let sec; | ||
| try { | ||
| sec = PubPoint.Fn.fromBytes(secretKey); | ||
| } | ||
| catch (error) { | ||
| // @ts-ignore | ||
| throw new Error('invalid private key: ' + typeof secretKey, { cause: error }); | ||
| } | ||
| return PubPoint.BASE.multiply(sec); | ||
| }, | ||
@@ -206,5 +233,3 @@ // S = pk x H(m) | ||
| throw new Error('sign() expects 2 arguments'); | ||
| // TODO: replace with | ||
| // PubCurve.Point.Fn.fromBytes(secretKey) | ||
| const sec = (0, weierstrass_ts_1._normFnElement)(PubCurve.Point.Fn, secretKey); | ||
| const sec = PubPoint.Fn.fromBytes(secretKey); | ||
| amsg(message).assertValidity(); | ||
@@ -222,3 +247,3 @@ return message.multiply(sec); | ||
| const P = publicKey.negate(); | ||
| const G = PubCurve.Point.BASE; | ||
| const G = PubPoint.BASE; | ||
| const Hm = amsg(message); | ||
@@ -236,9 +261,7 @@ const S = signature; | ||
| // TODO: maybe `{message: G2Hex, publicKey: G1Hex}[]` instead? | ||
| verifyBatch(signature, messages, publicKeys) { | ||
| aNonEmpty(messages); | ||
| if (publicKeys.length !== messages.length) | ||
| throw new Error('amount of public keys and messages should be equal'); | ||
| verifyBatch(signature, items) { | ||
| aNonEmpty(items); | ||
| const sig = normSig(signature); | ||
| const nMessages = messages; | ||
| const nPublicKeys = publicKeys.map(normPub); | ||
| const nMessages = items.map((i) => i.message); | ||
| const nPublicKeys = items.map((i) => normPub(i.publicKey)); | ||
| // NOTE: this works only for exact same object | ||
@@ -257,3 +280,3 @@ const messagePubKeyMap = new Map(); | ||
| const paired = []; | ||
| const G = PubCurve.Point.BASE; | ||
| const G = PubPoint.BASE; | ||
| try { | ||
@@ -276,3 +299,3 @@ for (const [msg, keys] of messagePubKeyMap) { | ||
| publicKeys = publicKeys.map((pub) => normPub(pub)); | ||
| const agg = publicKeys.reduce((sum, p) => sum.add(p), PubCurve.Point.ZERO); | ||
| const agg = publicKeys.reduce((sum, p) => sum.add(p), PubPoint.ZERO); | ||
| agg.assertValidity(); | ||
@@ -286,3 +309,3 @@ return agg; | ||
| signatures = signatures.map((sig) => normSig(sig)); | ||
| const agg = signatures.reduce((sum, s) => sum.add(s), SigCurve.Point.ZERO); | ||
| const agg = signatures.reduce((sum, s) => sum.add(s), SigPoint.ZERO); | ||
| agg.assertValidity(); | ||
@@ -292,134 +315,67 @@ return agg; | ||
| hash(messageBytes, DST) { | ||
| (0, utils_ts_1.abytes)(messageBytes); | ||
| abytes(messageBytes); | ||
| const opts = DST ? { DST } : undefined; | ||
| return SigCurve.hashToCurve(messageBytes, opts); | ||
| return hashToSigCurve(messageBytes, opts); | ||
| }, | ||
| Signature: SignatureCoder, | ||
| }; | ||
| }) /*satisfies Signer */; | ||
| } | ||
| // G1_Point: ProjConstructor<bigint>, G2_Point: ProjConstructor<Fp2>, | ||
| function bls(CURVE) { | ||
| // NOTE: separate function instead of function override, so we don't depend on hasher in bn254. | ||
| export function blsBasic(fields, G1_Point, G2_Point, params) { | ||
| // Fields are specific for curve, so for now we'll need to pass them with opts | ||
| const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields; | ||
| const { Fp, Fr, Fp2, Fp6, Fp12 } = fields; | ||
| // Point on G1 curve: (x, y) | ||
| const G1_ = (0, weierstrass_ts_1.weierstrassPoints)(CURVE.G1); | ||
| const G1 = Object.assign(G1_, (0, hash_to_curve_ts_1.createHasher)(G1_.Point, CURVE.G1.mapToCurve, { | ||
| ...CURVE.htfDefaults, | ||
| ...CURVE.G1.htfDefaults, | ||
| })); | ||
| // const G1_Point = weierstrass(CURVE.G1, { Fn: Fr }); | ||
| const G1 = { Point: G1_Point }; | ||
| // Point on G2 curve (complex numbers): (x₁, x₂+i), (y₁, y₂+i) | ||
| const G2_ = (0, weierstrass_ts_1.weierstrassPoints)(CURVE.G2); | ||
| const G2 = Object.assign(G2_, (0, hash_to_curve_ts_1.createHasher)(G2_.Point, CURVE.G2.mapToCurve, { | ||
| ...CURVE.htfDefaults, | ||
| ...CURVE.G2.htfDefaults, | ||
| })); | ||
| const pairingRes = createBlsPairing(CURVE.fields, G1.Point, G2.Point, { | ||
| ...CURVE.params, | ||
| postPrecompute: CURVE.postPrecompute, | ||
| }); | ||
| const { millerLoopBatch, pairing, pairingBatch, calcPairingPrecomputes } = pairingRes; | ||
| const longSignatures = createBlsSig(pairingRes, G1, G2, CURVE.G2.Signature, false); | ||
| const shortSignatures = createBlsSig(pairingRes, G2, G1, CURVE.G1.ShortSignature, true); | ||
| const rand = CURVE.randomBytes || utils_ts_1.randomBytes; | ||
| const randomSecretKey = () => { | ||
| const length = (0, modular_ts_1.getMinHashLength)(Fr.ORDER); | ||
| return (0, modular_ts_1.mapHashToField)(rand(length), Fr.ORDER); | ||
| }; | ||
| const utils = { | ||
| randomSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| calcPairingPrecomputes, | ||
| }; | ||
| const { ShortSignature } = CURVE.G1; | ||
| const { Signature } = CURVE.G2; | ||
| function normP1Hash(point, htfOpts) { | ||
| return point instanceof G1.Point | ||
| ? point | ||
| : shortSignatures.hash((0, utils_ts_1.ensureBytes)('point', point), htfOpts?.DST); | ||
| } | ||
| function normP2Hash(point, htfOpts) { | ||
| return point instanceof G2.Point | ||
| ? point | ||
| : longSignatures.hash((0, utils_ts_1.ensureBytes)('point', point), htfOpts?.DST); | ||
| } | ||
| function getPublicKey(privateKey) { | ||
| return longSignatures.getPublicKey(privateKey).toBytes(true); | ||
| } | ||
| function getPublicKeyForShortSignatures(privateKey) { | ||
| return shortSignatures.getPublicKey(privateKey).toBytes(true); | ||
| } | ||
| function sign(message, privateKey, htfOpts) { | ||
| const Hm = normP2Hash(message, htfOpts); | ||
| const S = longSignatures.sign(Hm, privateKey); | ||
| return message instanceof G2.Point ? S : Signature.toBytes(S); | ||
| } | ||
| function signShortSignature(message, privateKey, htfOpts) { | ||
| const Hm = normP1Hash(message, htfOpts); | ||
| const S = shortSignatures.sign(Hm, privateKey); | ||
| return message instanceof G1.Point ? S : ShortSignature.toBytes(S); | ||
| } | ||
| function verify(signature, message, publicKey, htfOpts) { | ||
| const Hm = normP2Hash(message, htfOpts); | ||
| return longSignatures.verify(signature, Hm, publicKey); | ||
| } | ||
| function verifyShortSignature(signature, message, publicKey, htfOpts) { | ||
| const Hm = normP1Hash(message, htfOpts); | ||
| return shortSignatures.verify(signature, Hm, publicKey); | ||
| } | ||
| function aggregatePublicKeys(publicKeys) { | ||
| const agg = longSignatures.aggregatePublicKeys(publicKeys); | ||
| return publicKeys[0] instanceof G1.Point ? agg : agg.toBytes(true); | ||
| } | ||
| function aggregateSignatures(signatures) { | ||
| const agg = longSignatures.aggregateSignatures(signatures); | ||
| return signatures[0] instanceof G2.Point ? agg : Signature.toBytes(agg); | ||
| } | ||
| function aggregateShortSignatures(signatures) { | ||
| const agg = shortSignatures.aggregateSignatures(signatures); | ||
| return signatures[0] instanceof G1.Point ? agg : ShortSignature.toBytes(agg); | ||
| } | ||
| function verifyBatch(signature, messages, publicKeys, htfOpts) { | ||
| const Hm = messages.map((m) => normP2Hash(m, htfOpts)); | ||
| return longSignatures.verifyBatch(signature, Hm, publicKeys); | ||
| } | ||
| const G2 = { Point: G2_Point }; | ||
| const pairingRes = createBlsPairing(fields, G1_Point, G2_Point, params); | ||
| const { millerLoopBatch, pairing, pairingBatch, calcPairingPrecomputes, randomSecretKey, lengths, } = pairingRes; | ||
| G1.Point.BASE.precompute(4); | ||
| return { | ||
| longSignatures, | ||
| shortSignatures, | ||
| return Object.freeze({ | ||
| lengths, | ||
| millerLoopBatch, | ||
| pairing, | ||
| pairingBatch, | ||
| verifyBatch, | ||
| fields: { | ||
| Fr, | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| }, | ||
| G1, | ||
| G2, | ||
| fields: { Fr, Fp, Fp2, Fp6, Fp12 }, | ||
| params: { | ||
| ateLoopSize: CURVE.params.ateLoopSize, | ||
| twistType: CURVE.params.twistType, | ||
| // deprecated | ||
| r: CURVE.params.r, | ||
| G1b: CURVE.G1.b, | ||
| G2b: CURVE.G2.b, | ||
| ateLoopSize: params.ateLoopSize, | ||
| twistType: params.twistType, | ||
| }, | ||
| utils, | ||
| // deprecated | ||
| getPublicKey, | ||
| getPublicKeyForShortSignatures, | ||
| sign, | ||
| signShortSignature, | ||
| verify, | ||
| verifyShortSignature, | ||
| aggregatePublicKeys, | ||
| aggregateSignatures, | ||
| aggregateShortSignatures, | ||
| G1, | ||
| G2, | ||
| Signature, | ||
| ShortSignature, | ||
| utils: { | ||
| randomSecretKey, | ||
| calcPairingPrecomputes, | ||
| }, | ||
| }); | ||
| } | ||
| // We can export this too, but seems there is not much reasons for now? If user wants hasher, they can just create hasher. | ||
| function blsHashers(fields, G1_Point, G2_Point, params, hasherParams) { | ||
| const base = blsBasic(fields, G1_Point, G2_Point, params); | ||
| const G1Hasher = createHasher(G1_Point, hasherParams.mapToG1 || notImplemented, { | ||
| ...hasherParams.hasherOpts, | ||
| ...hasherParams.hasherOptsG1, | ||
| }); | ||
| const G2Hasher = createHasher(G2_Point, hasherParams.mapToG2 || notImplemented, { | ||
| ...hasherParams.hasherOpts, | ||
| ...hasherParams.hasherOptsG2, | ||
| }); | ||
| return Object.freeze({ ...base, G1: G1Hasher, G2: G2Hasher }); | ||
| } | ||
| // G1_Point: ProjConstructor<bigint>, G2_Point: ProjConstructor<Fp2>, | ||
| // Rename to blsSignatures? | ||
| export function bls(fields, G1_Point, G2_Point, params, hasherParams, signatureCoders) { | ||
| const base = blsHashers(fields, G1_Point, G2_Point, params, hasherParams); | ||
| const pairingRes = { | ||
| ...base, | ||
| Fr: base.fields.Fr, | ||
| Fp12: base.fields.Fp12, | ||
| calcPairingPrecomputes: base.utils.calcPairingPrecomputes, | ||
| randomSecretKey: base.utils.randomSecretKey, | ||
| }; | ||
| const longSignatures = createBlsSig(pairingRes, G1_Point, G2_Point, false, base.G2.hashToCurve, signatureCoders?.LongSignature); | ||
| const shortSignatures = createBlsSig(pairingRes, G2_Point, G1_Point, true, base.G1.hashToCurve, signatureCoders?.ShortSignature); | ||
| return Object.freeze({ ...base, longSignatures, shortSignatures }); | ||
| } | ||
| //# sourceMappingURL=bls.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bls.js","sourceRoot":"","sources":["../src/abstract/bls.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"bls.js","sourceRoot":"","sources":["../src/abstract/bls.ts"],"names":[],"mappings":"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"} |
+4
-45
@@ -8,13 +8,4 @@ import { type IField } from './modular.ts'; | ||
| }; | ||
| export interface Group<T extends Group<T>> { | ||
| double(): T; | ||
| negate(): T; | ||
| add(other: T): T; | ||
| subtract(other: T): T; | ||
| equals(other: T): boolean; | ||
| multiply(scalar: bigint): T; | ||
| toAffine?(invertedZ?: any): AffinePoint<any>; | ||
| } | ||
| /** Base interface for all elliptic curve Points. */ | ||
| export interface CurvePoint<F, P extends CurvePoint<F, P>> extends Group<P> { | ||
| export interface CurvePoint<F, P extends CurvePoint<F, P>> { | ||
| /** Affine x coordinate. Different from projective / extended X coordinate. */ | ||
@@ -59,3 +50,3 @@ x: F; | ||
| fromBytes(bytes: Uint8Array): P; | ||
| fromHex(hex: Uint8Array | string): P; | ||
| fromHex(hex: string): P; | ||
| } | ||
@@ -77,12 +68,2 @@ /** Returns Fp type from Point (P_F<P> == P.F) */ | ||
| } | ||
| export type GroupConstructor<T> = { | ||
| BASE: T; | ||
| ZERO: T; | ||
| }; | ||
| /** @deprecated */ | ||
| export type ExtendedGroupConstructor<T> = GroupConstructor<T> & { | ||
| Fp: IField<any>; | ||
| Fn: IField<bigint>; | ||
| fromAffine(ap: AffinePoint<any>): T; | ||
| }; | ||
| export type Mapper<T> = (i: T[]) => T[]; | ||
@@ -185,3 +166,3 @@ export declare function negateCt<T extends { | ||
| */ | ||
| export declare function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(c: PC, fieldN: IField<bigint>, points: P[], scalars: bigint[]): P; | ||
| export declare function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(c: PC, points: P[], scalars: bigint[]): P; | ||
| /** | ||
@@ -194,25 +175,3 @@ * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...). | ||
| */ | ||
| export declare function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(c: PC, fieldN: IField<bigint>, points: P[], windowSize: number): (scalars: bigint[]) => P; | ||
| /** | ||
| * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok. | ||
| * Though generator can be different (Fp2 / Fp6 for BLS). | ||
| */ | ||
| export type BasicCurve<T> = { | ||
| Fp: IField<T>; | ||
| n: bigint; | ||
| nBitLength?: number; | ||
| nByteLength?: number; | ||
| h: bigint; | ||
| hEff?: bigint; | ||
| Gx: T; | ||
| Gy: T; | ||
| allowInfinityPoint?: boolean; | ||
| }; | ||
| /** @deprecated */ | ||
| export declare function validateBasic<FP, T>(curve: BasicCurve<FP> & T): Readonly<{ | ||
| readonly nBitLength: number; | ||
| readonly nByteLength: number; | ||
| } & BasicCurve<FP> & T & { | ||
| p: bigint; | ||
| }>; | ||
| export declare function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(c: PC, points: P[], windowSize: number): (scalars: bigint[]) => P; | ||
| export type ValidCurveParams<T> = { | ||
@@ -219,0 +178,0 @@ p: bigint; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"curve.d.ts","sourceRoot":"","sources":["../src/abstract/curve.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"curve.d.ts","sourceRoot":"","sources":["../src/abstract/curve.ts"],"names":[],"mappings":"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"} |
+22
-47
@@ -1,11 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.wNAF = void 0; | ||
| exports.negateCt = negateCt; | ||
| exports.normalizeZ = normalizeZ; | ||
| exports.mulEndoUnsafe = mulEndoUnsafe; | ||
| exports.pippenger = pippenger; | ||
| exports.precomputeMSMUnsafe = precomputeMSMUnsafe; | ||
| exports.validateBasic = validateBasic; | ||
| exports._createCurveFields = _createCurveFields; | ||
| /** | ||
@@ -17,7 +7,7 @@ * Methods for elliptic curve multiplication by scalars. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const modular_ts_1 = require("./modular.js"); | ||
| import { bitLen, bitMask } from "../utils.js"; | ||
| import { Field, FpInvertBatch, validateField } from "./modular.js"; | ||
| const _0n = BigInt(0); | ||
| const _1n = BigInt(1); | ||
| function negateCt(condition, item) { | ||
| export function negateCt(condition, item) { | ||
| const neg = item.negate(); | ||
@@ -32,4 +22,4 @@ return condition ? neg : item; | ||
| */ | ||
| function normalizeZ(c, points) { | ||
| const invertedZs = (0, modular_ts_1.FpInvertBatch)(c.Fp, points.map((p) => p.Z)); | ||
| export function normalizeZ(c, points) { | ||
| const invertedZs = FpInvertBatch(c.Fp, points.map((p) => p.Z)); | ||
| return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i]))); | ||
@@ -46,3 +36,3 @@ } | ||
| const maxNumber = 2 ** W; // W=8 256 | ||
| const mask = (0, utils_ts_1.bitMask)(W); // W=8 255 == mask 0b11111111 | ||
| const mask = bitMask(W); // W=8 255 == mask 0b11111111 | ||
| const shiftBy = BigInt(W); // W=8 8 | ||
@@ -121,3 +111,7 @@ return { windows, windowSize, mask, maxNumber, shiftBy }; | ||
| */ | ||
| class wNAF { | ||
| export class wNAF { | ||
| BASE; | ||
| ZERO; | ||
| Fn; | ||
| bits; | ||
| // Parametrized with a given Point class (not individual point) | ||
@@ -270,3 +264,2 @@ constructor(Point, bits) { | ||
| } | ||
| exports.wNAF = wNAF; | ||
| /** | ||
@@ -276,3 +269,3 @@ * Endomorphism-specific multiplication for Koblitz curves. | ||
| */ | ||
| function mulEndoUnsafe(Point, point, k1, k2) { | ||
| export function mulEndoUnsafe(Point, point, k1, k2) { | ||
| let acc = point; | ||
@@ -302,3 +295,3 @@ let p1 = Point.ZERO; | ||
| */ | ||
| function pippenger(c, fieldN, points, scalars) { | ||
| export function pippenger(c, points, scalars) { | ||
| // If we split scalars by some window (let's say 8 bits), every chunk will only | ||
@@ -310,2 +303,3 @@ // take 256 buckets even if there are 4096 scalars, also re-uses double. | ||
| // 0 is accepted in scalars | ||
| const fieldN = c.Fn; | ||
| validateMSMPoints(points, c); | ||
@@ -319,3 +313,3 @@ validateMSMScalars(scalars, fieldN); | ||
| const zero = c.ZERO; | ||
| const wbits = (0, utils_ts_1.bitLen)(BigInt(plength)); | ||
| const wbits = bitLen(BigInt(plength)); | ||
| let windowSize = 1; // bits | ||
@@ -328,3 +322,3 @@ if (wbits > 12) | ||
| windowSize = 2; | ||
| const MASK = (0, utils_ts_1.bitMask)(windowSize); | ||
| const MASK = bitMask(windowSize); | ||
| const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array | ||
@@ -360,3 +354,3 @@ const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize; | ||
| */ | ||
| function precomputeMSMUnsafe(c, fieldN, points, windowSize) { | ||
| export function precomputeMSMUnsafe(c, points, windowSize) { | ||
| /** | ||
@@ -397,2 +391,3 @@ * Performance Analysis of Window-based Precomputation | ||
| */ | ||
| const fieldN = c.Fn; | ||
| validateW(windowSize, fieldN.BITS); | ||
@@ -403,3 +398,3 @@ validateMSMPoints(points, c); | ||
| const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item | ||
| const MASK = (0, utils_ts_1.bitMask)(windowSize); | ||
| const MASK = bitMask(windowSize); | ||
| const tables = points.map((p) => { | ||
@@ -435,22 +430,2 @@ const res = []; | ||
| } | ||
| // TODO: remove | ||
| /** @deprecated */ | ||
| function validateBasic(curve) { | ||
| (0, modular_ts_1.validateField)(curve.Fp); | ||
| (0, utils_ts_1.validateObject)(curve, { | ||
| n: 'bigint', | ||
| h: 'bigint', | ||
| Gx: 'field', | ||
| Gy: 'field', | ||
| }, { | ||
| nBitLength: 'isSafeInteger', | ||
| nByteLength: 'isSafeInteger', | ||
| }); | ||
| // Set defaults | ||
| return Object.freeze({ | ||
| ...(0, modular_ts_1.nLength)(curve.n, curve.nBitLength), | ||
| ...curve, | ||
| ...{ p: curve.Fp.ORDER }, | ||
| }); | ||
| } | ||
| function createField(order, field, isLE) { | ||
@@ -460,11 +435,11 @@ if (field) { | ||
| throw new Error('Field.ORDER must match order: Fp == p, Fn == n'); | ||
| (0, modular_ts_1.validateField)(field); | ||
| validateField(field); | ||
| return field; | ||
| } | ||
| else { | ||
| return (0, modular_ts_1.Field)(order, { isLE }); | ||
| return Field(order, { isLE }); | ||
| } | ||
| } | ||
| /** Validates CURVE opts and creates fields */ | ||
| function _createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) { | ||
| export function _createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) { | ||
| if (FpFnLE === undefined) | ||
@@ -471,0 +446,0 @@ FpFnLE = type === 'edwards'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"curve.js","sourceRoot":"","sources":["../src/abstract/curve.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"curve.js","sourceRoot":"","sources":["../src/abstract/curve.ts"],"names":[],"mappings":"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"} |
+11
-68
@@ -8,5 +8,5 @@ /** | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type FHash, type Hex } from '../utils.ts'; | ||
| import { type AffinePoint, type BasicCurve, type CurveLengths, type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { type IField, type NLength } from './modular.ts'; | ||
| import { type FHash } from '../utils.ts'; | ||
| import { type AffinePoint, type CurveLengths, type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { type IField } from './modular.ts'; | ||
| export type UVRatio = (u: bigint, v: bigint) => { | ||
@@ -26,14 +26,2 @@ isValid: boolean; | ||
| readonly T: bigint; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(): Uint8Array; | ||
| /** @deprecated use `p.precompute(windowSize)` */ | ||
| _setWindowSize(windowSize: number): void; | ||
| /** @deprecated use .X */ | ||
| readonly ex: bigint; | ||
| /** @deprecated use .Y */ | ||
| readonly ey: bigint; | ||
| /** @deprecated use .Z */ | ||
| readonly ez: bigint; | ||
| /** @deprecated use .T */ | ||
| readonly et: bigint; | ||
| } | ||
@@ -45,10 +33,4 @@ /** Static methods of Extended Point with coordinates in X, Y, Z, T. */ | ||
| fromBytes(bytes: Uint8Array, zip215?: boolean): EdwardsPoint; | ||
| fromHex(hex: Hex, zip215?: boolean): EdwardsPoint; | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| msm(points: EdwardsPoint[], scalars: bigint[]): EdwardsPoint; | ||
| fromHex(hex: string, zip215?: boolean): EdwardsPoint; | ||
| } | ||
| /** @deprecated use EdwardsPoint */ | ||
| export type ExtPointType = EdwardsPoint; | ||
| /** @deprecated use EdwardsPointCons */ | ||
| export type ExtPointConstructor = EdwardsPointCons; | ||
| /** | ||
@@ -117,8 +99,8 @@ * Twisted Edwards curve options. | ||
| }; | ||
| getPublicKey: (secretKey: Hex) => Uint8Array; | ||
| sign: (message: Hex, secretKey: Hex, options?: { | ||
| context?: Hex; | ||
| getPublicKey: (secretKey: Uint8Array) => Uint8Array; | ||
| sign: (message: Uint8Array, secretKey: Uint8Array, options?: { | ||
| context?: Uint8Array; | ||
| }) => Uint8Array; | ||
| verify: (sig: Hex, message: Hex, publicKey: Hex, options?: { | ||
| context?: Hex; | ||
| verify: (sig: Uint8Array, message: Uint8Array, publicKey: Uint8Array, options?: { | ||
| context?: Uint8Array; | ||
| zip215: boolean; | ||
@@ -157,3 +139,3 @@ }) => boolean; | ||
| toMontgomeryPriv: (privateKey: Uint8Array) => Uint8Array; | ||
| getExtendedPublicKey: (key: Hex) => { | ||
| getExtendedPublicKey: (key: Uint8Array) => { | ||
| head: Uint8Array; | ||
@@ -165,6 +147,2 @@ prefix: Uint8Array; | ||
| }; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `point.precompute()` */ | ||
| precompute: (windowSize?: number, point?: EdwardsPoint) => EdwardsPoint; | ||
| }; | ||
@@ -189,3 +167,3 @@ lengths: CurveLengths; | ||
| static fromBytes(_bytes: Uint8Array): any; | ||
| static fromHex(_hex: Hex): any; | ||
| static fromHex(_hex: string): any; | ||
| get x(): bigint; | ||
@@ -210,4 +188,2 @@ get y(): bigint; | ||
| protected abstract init(ep: EdwardsPoint): T; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(): Uint8Array; | ||
| } | ||
@@ -218,35 +194,2 @@ /** | ||
| export declare function eddsa(Point: EdwardsPointCons, cHash: FHash, eddsaOpts?: EdDSAOpts): EdDSA; | ||
| export type CurveType = BasicCurve<bigint> & { | ||
| a: bigint; | ||
| d: bigint; | ||
| /** @deprecated the property will be removed in next release */ | ||
| hash: FHash; | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; | ||
| domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; | ||
| uvRatio?: UVRatio; | ||
| prehash?: FHash; | ||
| mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; | ||
| }; | ||
| export type CurveTypeWithLength = Readonly<CurveType & Partial<NLength>>; | ||
| export type CurveFn = { | ||
| /** @deprecated the property will be removed in next release */ | ||
| CURVE: CurveType; | ||
| keygen: EdDSA['keygen']; | ||
| getPublicKey: EdDSA['getPublicKey']; | ||
| sign: EdDSA['sign']; | ||
| verify: EdDSA['verify']; | ||
| Point: EdwardsPointCons; | ||
| /** @deprecated use `Point` */ | ||
| ExtendedPoint: EdwardsPointCons; | ||
| utils: EdDSA['utils']; | ||
| lengths: CurveLengths; | ||
| }; | ||
| export type EdComposed = { | ||
| CURVE: EdwardsOpts; | ||
| curveOpts: EdwardsExtraOpts; | ||
| hash: FHash; | ||
| eddsaOpts: EdDSAOpts; | ||
| }; | ||
| export declare function twistedEdwards(c: CurveTypeWithLength): CurveFn; | ||
| //# sourceMappingURL=edwards.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"edwards.d.ts","sourceRoot":"","sources":["../src/abstract/edwards.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"edwards.d.ts","sourceRoot":"","sources":["../src/abstract/edwards.ts"],"names":[],"mappings":"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"} |
+62
-134
@@ -1,7 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.PrimeEdwardsPoint = void 0; | ||
| exports.edwards = edwards; | ||
| exports.eddsa = eddsa; | ||
| exports.twistedEdwards = twistedEdwards; | ||
| /** | ||
@@ -14,5 +8,5 @@ * Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y². | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const curve_ts_1 = require("./curve.js"); | ||
| const modular_ts_1 = require("./modular.js"); | ||
| import { _validateObject, abool, abytes, aInRange, bytesToHex, bytesToNumberLE, concatBytes, copyBytes, hexToBytes, isBytes, memoized, notImplemented, randomBytes as wcRandomBytes, } from "../utils.js"; | ||
| import { _createCurveFields, normalizeZ, wNAF, } from "./curve.js"; | ||
| import {} from "./modular.js"; | ||
| // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
@@ -28,8 +22,8 @@ // prettier-ignore | ||
| } | ||
| function edwards(params, extraOpts = {}) { | ||
| const validated = (0, curve_ts_1._createCurveFields)('edwards', params, extraOpts, extraOpts.FpFnLE); | ||
| export function edwards(params, extraOpts = {}) { | ||
| const validated = _createCurveFields('edwards', params, extraOpts, extraOpts.FpFnLE); | ||
| const { Fp, Fn } = validated; | ||
| let CURVE = validated.CURVE; | ||
| const { h: cofactor } = CURVE; | ||
| (0, utils_ts_1._validateObject)(extraOpts, {}, { uvRatio: 'function' }); | ||
| _validateObject(extraOpts, {}, { uvRatio: 'function' }); | ||
| // Important: | ||
@@ -61,3 +55,3 @@ // There are some places where Fp.BYTES is used instead of nByteLength. | ||
| const min = banZero ? _1n : _0n; | ||
| (0, utils_ts_1.aInRange)('coordinate ' + title, n, min, MASK); | ||
| aInRange('coordinate ' + title, n, min, MASK); | ||
| return n; | ||
@@ -71,3 +65,3 @@ } | ||
| // Can accept precomputed Z^-1 - for example, from invertBatch. | ||
| const toAffineMemo = (0, utils_ts_1.memoized)((p, iz) => { | ||
| const toAffineMemo = memoized((p, iz) => { | ||
| const { X, Y, Z } = p; | ||
@@ -86,3 +80,3 @@ const is0 = p.is0(); | ||
| }); | ||
| const assertValidMemo = (0, utils_ts_1.memoized)((p) => { | ||
| const assertValidMemo = memoized((p) => { | ||
| const { a, d } = CURVE; | ||
@@ -113,2 +107,14 @@ if (p.is0()) | ||
| class Point { | ||
| // base / generator point | ||
| static BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy)); | ||
| // zero / infinity / identity point | ||
| static ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0 | ||
| // math field | ||
| static Fp = Fp; | ||
| // scalar field | ||
| static Fn = Fn; | ||
| X; | ||
| Y; | ||
| Z; | ||
| T; | ||
| constructor(X, Y, Z, T) { | ||
@@ -136,8 +142,8 @@ this.X = acoord('x', X); | ||
| const { a, d } = CURVE; | ||
| bytes = (0, utils_ts_1.copyBytes)((0, utils_ts_1._abytes2)(bytes, len, 'point')); | ||
| (0, utils_ts_1._abool2)(zip215, 'zip215'); | ||
| const normed = (0, utils_ts_1.copyBytes)(bytes); // copy again, we'll manipulate it | ||
| bytes = copyBytes(abytes(bytes, len, 'point')); | ||
| abool(zip215, 'zip215'); | ||
| const normed = copyBytes(bytes); // copy again, we'll manipulate it | ||
| const lastByte = bytes[len - 1]; // select last byte | ||
| normed[len - 1] = lastByte & ~0x80; // clear last bit | ||
| const y = (0, utils_ts_1.bytesToNumberLE)(normed); | ||
| const y = bytesToNumberLE(normed); | ||
| // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5. | ||
@@ -148,3 +154,3 @@ // RFC8032 prohibits >= p, but ZIP215 doesn't | ||
| const max = zip215 ? MASK : Fp.ORDER; | ||
| (0, utils_ts_1.aInRange)('point.y', y, _0n, max); | ||
| aInRange('point.y', y, _0n, max); | ||
| // Ed25519: x² = (y²-1)/(dy²+1) mod p. Ed448: x² = (y²-1)/(dy²-1) mod p. Generic case: | ||
@@ -167,4 +173,4 @@ // ax²+y²=1+dx²y² => y²-1=dx²y²-ax² => y²-1=x²(dy²-a) => x²=(y²-1)/(dy²-a) | ||
| } | ||
| static fromHex(bytes, zip215 = false) { | ||
| return Point.fromBytes((0, utils_ts_1.ensureBytes)('point', bytes), zip215); | ||
| static fromHex(hex, zip215 = false) { | ||
| return Point.fromBytes(hexToBytes(hex), zip215); | ||
| } | ||
@@ -256,4 +262,4 @@ get x() { | ||
| throw new Error('invalid scalar: expected 1 <= sc < curve.n'); | ||
| const { p, f } = wnaf.cached(this, scalar, (p) => (0, curve_ts_1.normalizeZ)(Point, p)); | ||
| return (0, curve_ts_1.normalizeZ)(Point, [p, f])[0]; | ||
| const { p, f } = wnaf.cached(this, scalar, (p) => normalizeZ(Point, p)); | ||
| return normalizeZ(Point, [p, f])[0]; | ||
| } | ||
@@ -273,3 +279,3 @@ // Non-constant-time multiplication. Uses double-and-add algorithm. | ||
| return this; | ||
| return wnaf.unsafe(this, scalar, (p) => (0, curve_ts_1.normalizeZ)(Point, p), acc); | ||
| return wnaf.unsafe(this, scalar, (p) => normalizeZ(Point, p), acc); | ||
| } | ||
@@ -308,3 +314,3 @@ // Checks if point is of small order. | ||
| toHex() { | ||
| return (0, utils_ts_1.bytesToHex)(this.toBytes()); | ||
| return bytesToHex(this.toBytes()); | ||
| } | ||
@@ -314,37 +320,4 @@ toString() { | ||
| } | ||
| // TODO: remove | ||
| get ex() { | ||
| return this.X; | ||
| } | ||
| get ey() { | ||
| return this.Y; | ||
| } | ||
| get ez() { | ||
| return this.Z; | ||
| } | ||
| get et() { | ||
| return this.T; | ||
| } | ||
| static normalizeZ(points) { | ||
| return (0, curve_ts_1.normalizeZ)(Point, points); | ||
| } | ||
| static msm(points, scalars) { | ||
| return (0, curve_ts_1.pippenger)(Point, Fn, points, scalars); | ||
| } | ||
| _setWindowSize(windowSize) { | ||
| this.precompute(windowSize); | ||
| } | ||
| toRawBytes() { | ||
| return this.toBytes(); | ||
| } | ||
| } | ||
| // base / generator point | ||
| Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy)); | ||
| // zero / infinity / identity point | ||
| Point.ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0 | ||
| // math field | ||
| Point.Fp = Fp; | ||
| // scalar field | ||
| Point.Fn = Fn; | ||
| const wnaf = new curve_ts_1.wNAF(Point, Fn.BITS); | ||
| const wnaf = new wNAF(Point, Fn.BITS); | ||
| Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms. | ||
@@ -358,3 +331,8 @@ return Point; | ||
| */ | ||
| class PrimeEdwardsPoint { | ||
| export class PrimeEdwardsPoint { | ||
| static BASE; | ||
| static ZERO; | ||
| static Fp; | ||
| static Fn; | ||
| ep; | ||
| constructor(ep) { | ||
@@ -365,6 +343,6 @@ this.ep = ep; | ||
| static fromBytes(_bytes) { | ||
| (0, utils_ts_1.notImplemented)(); | ||
| notImplemented(); | ||
| } | ||
| static fromHex(_hex) { | ||
| (0, utils_ts_1.notImplemented)(); | ||
| notImplemented(); | ||
| } | ||
@@ -389,3 +367,3 @@ get x() { | ||
| toHex() { | ||
| return (0, utils_ts_1.bytesToHex)(this.toBytes()); | ||
| return bytesToHex(this.toBytes()); | ||
| } | ||
@@ -424,15 +402,10 @@ toString() { | ||
| } | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes() { | ||
| return this.toBytes(); | ||
| } | ||
| } | ||
| exports.PrimeEdwardsPoint = PrimeEdwardsPoint; | ||
| /** | ||
| * Initializes EdDSA signatures over given Edwards curve. | ||
| */ | ||
| function eddsa(Point, cHash, eddsaOpts = {}) { | ||
| export function eddsa(Point, cHash, eddsaOpts = {}) { | ||
| if (typeof cHash !== 'function') | ||
| throw new Error('"hash" function param is required'); | ||
| (0, utils_ts_1._validateObject)(eddsaOpts, {}, { | ||
| _validateObject(eddsaOpts, {}, { | ||
| adjustScalarBytes: 'function', | ||
@@ -446,7 +419,7 @@ randomBytes: 'function', | ||
| const { BASE, Fp, Fn } = Point; | ||
| const randomBytes = eddsaOpts.randomBytes || utils_ts_1.randomBytes; | ||
| const randomBytes = eddsaOpts.randomBytes || wcRandomBytes; | ||
| const adjustScalarBytes = eddsaOpts.adjustScalarBytes || ((bytes) => bytes); | ||
| const domain = eddsaOpts.domain || | ||
| ((data, ctx, phflag) => { | ||
| (0, utils_ts_1._abool2)(phflag, 'phflag'); | ||
| abool(phflag, 'phflag'); | ||
| if (ctx.length || phflag) | ||
@@ -458,3 +431,3 @@ throw new Error('Contexts/pre-hash are not supported'); | ||
| function modN_LE(hash) { | ||
| return Fn.create((0, utils_ts_1.bytesToNumberLE)(hash)); // Not Fn.fromBytes: it has length limit | ||
| return Fn.create(bytesToNumberLE(hash)); // Not Fn.fromBytes: it has length limit | ||
| } | ||
@@ -464,6 +437,6 @@ // Get the hashed private scalar per RFC8032 5.1.5 | ||
| const len = lengths.secretKey; | ||
| key = (0, utils_ts_1.ensureBytes)('private key', key, len); | ||
| abytes(key, lengths.secretKey, 'secretKey'); | ||
| // Hash private key with curve's hash function to produce uniformingly random input | ||
| // Check byte lengths: ensure(64, h(ensure(32, key))) | ||
| const hashed = (0, utils_ts_1.ensureBytes)('hashed private key', cHash(key), 2 * len); | ||
| const hashed = abytes(cHash(key), 2 * len, 'hashedSecretKey'); | ||
| const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE | ||
@@ -487,8 +460,8 @@ const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6) | ||
| function hashDomainToScalar(context = Uint8Array.of(), ...msgs) { | ||
| const msg = (0, utils_ts_1.concatBytes)(...msgs); | ||
| return modN_LE(cHash(domain(msg, (0, utils_ts_1.ensureBytes)('context', context), !!prehash))); | ||
| const msg = concatBytes(...msgs); | ||
| return modN_LE(cHash(domain(msg, abytes(context, undefined, 'context'), !!prehash))); | ||
| } | ||
| /** Signs message with privateKey. RFC8032 5.1.6 */ | ||
| function sign(msg, secretKey, options = {}) { | ||
| msg = (0, utils_ts_1.ensureBytes)('message', msg); | ||
| msg = abytes(msg, undefined, 'message'); | ||
| if (prehash) | ||
@@ -503,4 +476,4 @@ msg = prehash(msg); // for ed25519ph etc. | ||
| throw new Error('sign failed: invalid s'); // 0 <= s < L | ||
| const rs = (0, utils_ts_1.concatBytes)(R, Fn.toBytes(s)); | ||
| return (0, utils_ts_1._abytes2)(rs, lengths.signature, 'result'); | ||
| const rs = concatBytes(R, Fn.toBytes(s)); | ||
| return abytes(rs, lengths.signature, 'result'); | ||
| } | ||
@@ -516,7 +489,7 @@ // verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex: | ||
| const len = lengths.signature; | ||
| sig = (0, utils_ts_1.ensureBytes)('signature', sig, len); | ||
| msg = (0, utils_ts_1.ensureBytes)('message', msg); | ||
| publicKey = (0, utils_ts_1.ensureBytes)('publicKey', publicKey, lengths.publicKey); | ||
| sig = abytes(sig, len, 'signature'); | ||
| msg = abytes(msg, undefined, 'message'); | ||
| publicKey = abytes(publicKey, lengths.publicKey, 'publicKey'); | ||
| if (zip215 !== undefined) | ||
| (0, utils_ts_1._abool2)(zip215, 'zip215'); | ||
| abool(zip215, 'zip215'); | ||
| if (prehash) | ||
@@ -526,3 +499,3 @@ msg = prehash(msg); // for ed25519ph, etc | ||
| const r = sig.subarray(0, mid); | ||
| const s = (0, utils_ts_1.bytesToNumberLE)(sig.subarray(mid, len)); | ||
| const s = bytesToNumberLE(sig.subarray(mid, len)); | ||
| let A, R, SB; | ||
@@ -556,3 +529,3 @@ try { | ||
| function randomSecretKey(seed = randomBytes(lengths.seed)) { | ||
| return (0, utils_ts_1._abytes2)(seed, lengths.seed, 'seed'); | ||
| return abytes(seed, lengths.seed, 'seed'); | ||
| } | ||
@@ -564,3 +537,3 @@ function keygen(seed) { | ||
| function isValidSecretKey(key) { | ||
| return (0, utils_ts_1.isBytes)(key) && key.length === Fn.BYTES; | ||
| return isBytes(key) && key.length === Fn.BYTES; | ||
| } | ||
@@ -600,12 +573,6 @@ function isValidPublicKey(key, zip215) { | ||
| const size = lengths.secretKey; | ||
| (0, utils_ts_1._abytes2)(secretKey, size); | ||
| abytes(secretKey, size); | ||
| const hashed = cHash(secretKey.subarray(0, size)); | ||
| return adjustScalarBytes(hashed).subarray(0, size); | ||
| }, | ||
| /** @deprecated */ | ||
| randomPrivateKey: randomSecretKey, | ||
| /** @deprecated */ | ||
| precompute(windowSize = 8, point = Point.BASE) { | ||
| return point.precompute(windowSize, false); | ||
| }, | ||
| }; | ||
@@ -622,41 +589,2 @@ return Object.freeze({ | ||
| } | ||
| function _eddsa_legacy_opts_to_new(c) { | ||
| const CURVE = { | ||
| a: c.a, | ||
| d: c.d, | ||
| p: c.Fp.ORDER, | ||
| n: c.n, | ||
| h: c.h, | ||
| Gx: c.Gx, | ||
| Gy: c.Gy, | ||
| }; | ||
| const Fp = c.Fp; | ||
| const Fn = (0, modular_ts_1.Field)(CURVE.n, c.nBitLength, true); | ||
| const curveOpts = { Fp, Fn, uvRatio: c.uvRatio }; | ||
| const eddsaOpts = { | ||
| randomBytes: c.randomBytes, | ||
| adjustScalarBytes: c.adjustScalarBytes, | ||
| domain: c.domain, | ||
| prehash: c.prehash, | ||
| mapToCurve: c.mapToCurve, | ||
| }; | ||
| return { CURVE, curveOpts, hash: c.hash, eddsaOpts }; | ||
| } | ||
| function _eddsa_new_output_to_legacy(c, eddsa) { | ||
| const Point = eddsa.Point; | ||
| const legacy = Object.assign({}, eddsa, { | ||
| ExtendedPoint: Point, | ||
| CURVE: c, | ||
| nBitLength: Point.Fn.BITS, | ||
| nByteLength: Point.Fn.BYTES, | ||
| }); | ||
| return legacy; | ||
| } | ||
| // TODO: remove. Use eddsa | ||
| function twistedEdwards(c) { | ||
| const { CURVE, curveOpts, hash, eddsaOpts } = _eddsa_legacy_opts_to_new(c); | ||
| const Point = edwards(CURVE, curveOpts); | ||
| const EDDSA = eddsa(Point, hash, eddsaOpts); | ||
| return _eddsa_new_output_to_legacy(c, EDDSA); | ||
| } | ||
| //# sourceMappingURL=edwards.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"edwards.js","sourceRoot":"","sources":["../src/abstract/edwards.ts"],"names":[],"mappings":";;;AA6MA,0BA2UC;AAmHD,sBA6LC;AAoED,wCAKC;AAj5BD;;;;;GAKG;AACH,sEAAsE;AACtE,0CAgBqB;AACrB,yCAUoB;AACpB,6CAAgE;AAEhE,qEAAqE;AACrE,kBAAkB;AAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AA8JzE,SAAS,WAAW,CAAC,EAAkB,EAAE,KAAkB,EAAE,CAAS,EAAE,CAAS;IAC/E,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,OAAO,CAAC,MAAmB,EAAE,YAA8B,EAAE;IAC3E,MAAM,SAAS,GAAG,IAAA,6BAAkB,EAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;IAC7B,IAAI,KAAK,GAAG,SAAS,CAAC,KAAoB,CAAC;IAC3C,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC9B,IAAA,0BAAe,EAAC,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAExD,aAAa;IACb,uEAAuE;IACvE,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IAE/D,YAAY;IACZ,MAAM,OAAO,GACX,SAAS,CAAC,OAAO;QACjB,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACxB,IAAI,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IAEL,sDAAsD;IACtD,iEAAiE;IACjE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEvD;;;OAGG;IACH,SAAS,MAAM,CAAC,KAAa,EAAE,CAAS,EAAE,OAAO,GAAG,KAAK;QACvD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,IAAA,mBAAQ,EAAC,aAAa,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,SAAS,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3E,CAAC;IACD,yDAAyD;IACzD,+DAA+D;IAC/D,MAAM,YAAY,GAAG,IAAA,mBAAQ,EAAC,CAAC,CAAQ,EAAE,EAAW,EAAuB,EAAE;QAC3E,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACpB,IAAI,EAAE,IAAI,IAAI;YAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAY,CAAC,CAAC,2BAA2B;QACnF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,GAAG;YAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACnC,IAAI,EAAE,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,IAAA,mBAAQ,EAAC,CAAC,CAAQ,EAAE,EAAE;QAC5C,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,mCAAmC;QACpF,uDAAuD;QACvD,+EAA+E;QAC/E,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;QAC/D,IAAI,IAAI,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7E,6EAA6E;QAC7E,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,qFAAqF;IACrF,2EAA2E;IAC3E,MAAM,KAAK;QAeT,YAAY,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;YACpD,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,KAAK;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAsB;YACtC,IAAI,CAAC,YAAY,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACtE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACf,OAAO,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,gCAAgC;QAChC,MAAM,CAAC,SAAS,CAAC,KAAiB,EAAE,MAAM,GAAG,KAAK;YAChD,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;YACrB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YACvB,KAAK,GAAG,IAAA,oBAAS,EAAC,IAAA,mBAAM,EAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/C,IAAA,kBAAK,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,IAAA,oBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,kCAAkC;YACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB;YACpD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB;YACrD,MAAM,CAAC,GAAG,IAAA,0BAAe,EAAC,MAAM,CAAC,CAAC;YAElC,uFAAuF;YACvF,6CAA6C;YAC7C,kDAAkD;YAClD,kDAAkD;YAClD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YACrC,IAAA,mBAAQ,EAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAEjC,sFAAsF;YACtF,0EAA0E;YAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC;YAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC5C,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACpD,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,yDAAyD;YAC3F,MAAM,aAAa,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB;YAC/D,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa;gBACvC,2BAA2B;gBAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,IAAI,aAAa,KAAK,MAAM;gBAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;YAC7E,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,KAAiB,EAAE,MAAM,GAAG,KAAK;YAC9C,OAAO,KAAK,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,UAAU,CAAC,aAAqB,CAAC,EAAE,MAAM,GAAG,IAAI;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mFAAmF;QACnF,cAAc;YACZ,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,gCAAgC;QAChC,MAAM,CAAC,KAAY;YACjB,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;QACxC,CAAC;QAED,GAAG;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,MAAM;YACJ,8DAA8D;YAC9D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,yCAAyC;QACzC,sFAAsF;QACtF,oCAAoC;QACpC,MAAM;YACJ,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YACpB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU;YACjC,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB;YAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,0CAA0C;QAC1C,sFAAsF;QACtF,+BAA+B;QAC/B,GAAG,CAAC,KAAY;YACd,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YACvB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YAC5C,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;YACzE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,QAAQ,CAAC,KAAY;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,gCAAgC;QAChC,QAAQ,CAAC,MAAc;YACrB,kBAAkB;YAClB,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC3F,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,mEAAmE;QACnE,iEAAiE;QACjE,gDAAgD;QAChD,8CAA8C;QAC9C,qFAAqF;QACrF,cAAc,CAAC,MAAc,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI;YAC7C,kBAAkB;YAClB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACvF,IAAI,MAAM,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;YACtC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,qCAAqC;QACrC,mEAAmE;QACnE,gCAAgC;QAChC,8DAA8D;QAC9D,YAAY;YACV,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QAED,iEAAiE;QACjE,yCAAyC;QACzC,aAAa;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1C,CAAC;QAED,yDAAyD;QACzD,+DAA+D;QAC/D,QAAQ,CAAC,SAAkB;YACzB,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QAED,aAAa;YACX,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAClC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,OAAO;YACL,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,0DAA0D;YAC1D,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,6CAA6C;YAC7C,qFAAqF;YACrF,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK;YACH,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,QAAQ;YACN,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QACzD,CAAC;QAED,eAAe;QACf,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,MAAe;YAC/B,OAAO,IAAA,qBAAU,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,MAAe,EAAE,OAAiB;YAC3C,OAAO,IAAA,oBAAS,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,cAAc,CAAC,UAAkB;YAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,UAAU;YACR,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;;IAtPD,yBAAyB;IACT,UAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,mCAAmC;IACnB,UAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa;IACnE,aAAa;IACG,QAAE,GAAG,EAAE,CAAC;IACxB,eAAe;IACC,QAAE,GAAG,EAAE,CAAC;IAiP1B,MAAM,IAAI,GAAG,IAAI,eAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,sEAAsE;IAChG,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAsB,iBAAiB;IAUrC,YAAY,EAAgB;QAC1B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAMD,wDAAwD;IACxD,MAAM,CAAC,SAAS,CAAC,MAAkB;QACjC,IAAA,yBAAc,GAAE,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAS;QACtB,IAAA,yBAAc,GAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,aAAa;QACX,+BAA+B;QAC/B,OAAO,IAAW,CAAC;IACrB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,KAAK;QACH,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,CAAC,KAAQ;QACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,UAAmB,EAAE,MAAgB;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAOD,gCAAgC;IAChC,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF;AAvGD,8CAuGC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,KAAuB,EAAE,KAAY,EAAE,YAAuB,EAAE;IACpF,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACtF,IAAA,0BAAe,EACb,SAAS,EACT,EAAE,EACF;QACE,iBAAiB,EAAE,UAAU;QAC7B,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,UAAU;KACvB,CACF,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAE/B,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,sBAAc,CAAC;IAC5D,MAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,IAAI,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACxF,MAAM,MAAM,GACV,SAAS,CAAC,MAAM;QAChB,CAAC,CAAC,IAAgB,EAAE,GAAe,EAAE,MAAe,EAAE,EAAE;YACtD,IAAA,kBAAK,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxB,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,CAAC,OAAO;IAEb,qCAAqC;IACrC,SAAS,OAAO,CAAC,IAAgB;QAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,IAAA,0BAAe,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wCAAwC;IACnF,CAAC;IAED,kDAAkD;IAClD,SAAS,gBAAgB,CAAC,GAAQ;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9B,GAAG,GAAG,IAAA,sBAAW,EAAC,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,mFAAmF;QACnF,qDAAqD;QACrD,MAAM,MAAM,GAAG,IAAA,sBAAW,EAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC;QAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,2CAA2C;QACtF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;QAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,4EAA4E;IAC5E,SAAS,oBAAoB,CAAC,SAAc;QAC1C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,wCAAwC;QAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACrD,CAAC;IAED,+CAA+C;IAC/C,SAAS,YAAY,CAAC,SAAc;QAClC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC;IACpD,CAAC;IAED,8CAA8C;IAC9C,SAAS,kBAAkB,CAAC,UAAe,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,IAAkB;QAC/E,MAAM,GAAG,GAAG,IAAA,sBAAW,EAAC,GAAG,IAAI,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,mDAAmD;IACnD,SAAS,IAAI,CAAC,GAAQ,EAAE,SAAc,EAAE,UAA6B,EAAE;QACrE,GAAG,GAAG,IAAA,sBAAW,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;QACtD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,oCAAoC;QAChG,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;QAC/C,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrF,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,wBAAwB;QAC7D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,aAAa;QAC5E,MAAM,EAAE,GAAG,IAAA,sBAAW,EAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,IAAA,mBAAM,EAAC,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,8EAA8E;IAC9E,MAAM,UAAU,GAAwC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAEzE;;;OAGG;IACH,SAAS,MAAM,CAAC,GAAQ,EAAE,GAAQ,EAAE,SAAc,EAAE,OAAO,GAAG,UAAU;QACtE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9B,GAAG,GAAG,IAAA,sBAAW,EAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzC,GAAG,GAAG,IAAA,sBAAW,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClC,SAAS,GAAG,IAAA,sBAAW,EAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,MAAM,KAAK,SAAS;YAAE,IAAA,kBAAK,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;QAEtD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAA,0BAAe,EAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACb,IAAI,CAAC;YACH,uFAAuF;YACvF,kDAAkD;YAClD,kDAAkD;YAClD,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/B,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE;YAAE,OAAO,KAAK,CAAC,CAAC,2CAA2C;QAE1F,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,0BAA0B;QAC1B,4BAA4B;QAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,+BAA+B;IACvD,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,CAAC,GAAG,KAAK;QACpB,IAAI,EAAE,KAAK;KACZ,CAAC;IACF,SAAS,eAAe,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QACvD,OAAO,IAAA,mBAAM,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS,MAAM,CAAC,IAAiB;QAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3D,CAAC;IACD,SAAS,gBAAgB,CAAC,GAAe;QACvC,OAAO,IAAA,kBAAO,EAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,CAAC;IACjD,CAAC;IACD,SAAS,gBAAgB,CAAC,GAAe,EAAE,MAAgB;QACzD,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,oBAAoB;QACpB,eAAe;QACf,gBAAgB;QAChB,gBAAgB;QAChB;;;;;;;;WAQG;QACH,YAAY,CAAC,SAAqB;YAChC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC/E,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YACxE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,gBAAgB,CAAC,SAAqB;YACpC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;YAC/B,IAAA,mBAAM,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAClD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,kBAAkB;QAClB,gBAAgB,EAAE,eAAe;QACjC,kBAAkB;QAClB,UAAU,CAAC,UAAU,GAAG,CAAC,EAAE,QAAsB,KAAK,CAAC,IAAI;YACzD,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,YAAY;QACZ,IAAI;QACJ,MAAM;QACN,KAAK;QACL,KAAK;QACL,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAmCD,SAAS,yBAAyB,CAAC,CAAsB;IACvD,MAAM,KAAK,GAAgB;QACzB,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;QACb,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,EAAE,EAAE,CAAC,CAAC,EAAE;KACT,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAChB,MAAM,EAAE,GAAG,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAqB,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACnE,MAAM,SAAS,GAAc;QAC3B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AACvD,CAAC;AACD,SAAS,2BAA2B,CAAC,CAAsB,EAAE,KAAY;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;QACtC,aAAa,EAAE,KAAK;QACpB,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI;QACzB,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK;KAC5B,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,0BAA0B;AAC1B,SAAgB,cAAc,CAAC,CAAsB;IACnD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,2BAA2B,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC"} | ||
| {"version":3,"file":"edwards.js","sourceRoot":"","sources":["../src/abstract/edwards.ts"],"names":[],"mappings":"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"} |
+14
-27
@@ -1,13 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.FFTCore = void 0; | ||
| exports.isPowerOfTwo = isPowerOfTwo; | ||
| exports.nextPowerOfTwo = nextPowerOfTwo; | ||
| exports.reverseBits = reverseBits; | ||
| exports.log2 = log2; | ||
| exports.bitReversalInplace = bitReversalInplace; | ||
| exports.bitReversalPermutation = bitReversalPermutation; | ||
| exports.rootsOfUnity = rootsOfUnity; | ||
| exports.FFT = FFT; | ||
| exports.poly = poly; | ||
| function checkU32(n) { | ||
@@ -20,7 +8,7 @@ // 0xff_ff_ff_ff | ||
| /** Checks if integer is in form of `1 << X` */ | ||
| function isPowerOfTwo(x) { | ||
| export function isPowerOfTwo(x) { | ||
| checkU32(x); | ||
| return (x & (x - 1)) === 0 && x !== 0; | ||
| } | ||
| function nextPowerOfTwo(n) { | ||
| export function nextPowerOfTwo(n) { | ||
| checkU32(n); | ||
@@ -31,3 +19,3 @@ if (n <= 1) | ||
| } | ||
| function reverseBits(n, bits) { | ||
| export function reverseBits(n, bits) { | ||
| checkU32(n); | ||
@@ -40,3 +28,3 @@ let reversed = 0; | ||
| /** Similar to `bitLen(x)-1` but much faster for small integers, like indices */ | ||
| function log2(n) { | ||
| export function log2(n) { | ||
| checkU32(n); | ||
@@ -50,3 +38,3 @@ return 31 - Math.clz32(n); | ||
| */ | ||
| function bitReversalInplace(values) { | ||
| export function bitReversalInplace(values) { | ||
| const n = values.length; | ||
@@ -66,3 +54,3 @@ if (n < 2 || !isPowerOfTwo(n)) | ||
| } | ||
| function bitReversalPermutation(values) { | ||
| export function bitReversalPermutation(values) { | ||
| return bitReversalInplace(values.slice()); | ||
@@ -78,3 +66,3 @@ } | ||
| /** We limit roots up to 2**31, which is a lot: 2-billion polynomimal should be rare. */ | ||
| function rootsOfUnity(field, generator) { | ||
| export function rootsOfUnity(field, generator) { | ||
| // Factor field.ORDER-1 as oddFactor * 2^powerOfTwo | ||
@@ -164,3 +152,3 @@ let oddFactor = field.ORDER - _1n; | ||
| */ | ||
| const FFTCore = (F, coreOpts) => { | ||
| export const FFTCore = (F, coreOpts) => { | ||
| const { N, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts; | ||
@@ -215,3 +203,2 @@ const bits = log2(N); | ||
| }; | ||
| exports.FFTCore = FFTCore; | ||
| /** | ||
@@ -221,13 +208,13 @@ * NTT aka FFT over finite field (NOT over complex numbers). | ||
| */ | ||
| function FFT(roots, opts) { | ||
| export function FFT(roots, opts) { | ||
| const getLoop = (N, roots, brpInput = false, brpOutput = false) => { | ||
| if (brpInput && brpOutput) { | ||
| // we cannot optimize this case, but lets support it anyway | ||
| return (values) => (0, exports.FFTCore)(opts, { N, roots, dit: false, brp: false })(bitReversalInplace(values)); | ||
| return (values) => FFTCore(opts, { N, roots, dit: false, brp: false })(bitReversalInplace(values)); | ||
| } | ||
| if (brpInput) | ||
| return (0, exports.FFTCore)(opts, { N, roots, dit: true, brp: false }); | ||
| return FFTCore(opts, { N, roots, dit: true, brp: false }); | ||
| if (brpOutput) | ||
| return (0, exports.FFTCore)(opts, { N, roots, dit: false, brp: false }); | ||
| return (0, exports.FFTCore)(opts, { N, roots, dit: true, brp: true }); // all natural | ||
| return FFTCore(opts, { N, roots, dit: false, brp: false }); | ||
| return FFTCore(opts, { N, roots, dit: true, brp: true }); // all natural | ||
| }; | ||
@@ -257,3 +244,3 @@ return { | ||
| } | ||
| function poly(field, roots, create, fft, length) { | ||
| export function poly(field, roots, create, fft, length) { | ||
| const F = field; | ||
@@ -260,0 +247,0 @@ const _create = create || |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"fft.js","sourceRoot":"","sources":["../src/abstract/fft.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"fft.js","sourceRoot":"","sources":["../src/abstract/fft.ts"],"names":[],"mappings":"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"} |
@@ -9,3 +9,3 @@ /** | ||
| import type { CHash } from '../utils.ts'; | ||
| import type { AffinePoint, Group, GroupConstructor } from './curve.ts'; | ||
| import type { AffinePoint, PC_ANY, PC_F, PC_P } from './curve.ts'; | ||
| import { type IField } from './modular.ts'; | ||
@@ -33,3 +33,2 @@ export type UnicodeOrBytes = string | Uint8Array; | ||
| }; | ||
| export type Opts = H2COpts; | ||
| /** | ||
@@ -63,12 +62,2 @@ * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits. | ||
| export declare function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<T>; | ||
| /** Point interface, which curves must implement to work correctly with the module. */ | ||
| export interface H2CPoint<T> extends Group<H2CPoint<T>> { | ||
| add(rhs: H2CPoint<T>): H2CPoint<T>; | ||
| toAffine(iz?: bigint): AffinePoint<T>; | ||
| clearCofactor(): H2CPoint<T>; | ||
| assertValidity(): void; | ||
| } | ||
| export interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> { | ||
| fromAffine(ap: AffinePoint<T>): H2CPoint<T>; | ||
| } | ||
| export type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>; | ||
@@ -78,8 +67,6 @@ export type htfBasicOpts = { | ||
| }; | ||
| export type H2CMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>; | ||
| export type HTFMethod<T> = H2CMethod<T>; | ||
| export type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>; | ||
| export type H2CHasherBase<T> = { | ||
| hashToCurve: H2CMethod<T>; | ||
| hashToScalar: (msg: Uint8Array, options: htfBasicOpts) => bigint; | ||
| export type H2CMethod<P> = (msg: Uint8Array, options?: htfBasicOpts) => P; | ||
| export type H2CHasherBase<P> = { | ||
| hashToCurve: H2CMethod<P>; | ||
| hashToScalar: (msg: Uint8Array, options?: htfBasicOpts) => bigint; | ||
| }; | ||
@@ -93,5 +80,6 @@ /** | ||
| */ | ||
| export type H2CHasher<T> = H2CHasherBase<T> & { | ||
| encodeToCurve: H2CMethod<T>; | ||
| mapToCurve: MapMethod<T>; | ||
| export type H2CHasher<PC extends PC_ANY> = H2CHasherBase<PC_P<PC>> & { | ||
| Point: PC; | ||
| encodeToCurve: H2CMethod<PC_P<PC>>; | ||
| mapToCurve: MapToCurve<PC_F<PC>>; | ||
| defaults: H2COpts & { | ||
@@ -101,8 +89,7 @@ encodeDST?: UnicodeOrBytes; | ||
| }; | ||
| export type Hasher<T> = H2CHasher<T>; | ||
| export declare const _DST_scalar: Uint8Array; | ||
| /** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */ | ||
| export declare function createHasher<T>(Point: H2CPointConstructor<T>, mapToCurve: MapToCurve<T>, defaults: H2COpts & { | ||
| export declare function createHasher<PC extends PC_ANY>(Point: PC, mapToCurve: MapToCurve<PC_F<PC>>, defaults: H2COpts & { | ||
| encodeDST?: UnicodeOrBytes; | ||
| }): H2CHasher<T>; | ||
| }): H2CHasher<PC>; | ||
| //# sourceMappingURL=hash-to-curve.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"hash-to-curve.d.ts","sourceRoot":"","sources":["../src/abstract/hash-to-curve.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"hash-to-curve.d.ts","sourceRoot":"","sources":["../src/abstract/hash-to-curve.ts"],"names":[],"mappings":"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"} |
@@ -1,13 +0,5 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports._DST_scalar = void 0; | ||
| exports.expand_message_xmd = expand_message_xmd; | ||
| exports.expand_message_xof = expand_message_xof; | ||
| exports.hash_to_field = hash_to_field; | ||
| exports.isogenyMap = isogenyMap; | ||
| exports.createHasher = createHasher; | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const modular_ts_1 = require("./modular.js"); | ||
| import { _validateObject, abytes, asciiToBytes, bytesToNumberBE, concatBytes, isBytes, isHash, } from "../utils.js"; | ||
| import { FpInvertBatch, mod } from "./modular.js"; | ||
| // Octet Stream to Integer. "spec" implementation of os2ip is 2.5x slower vs bytesToNumberBE. | ||
| const os2ip = utils_ts_1.bytesToNumberBE; | ||
| const os2ip = bytesToNumberBE; | ||
| // Integer to Octet Stream (numberToBytesBE) | ||
@@ -37,6 +29,8 @@ function i2osp(value, length) { | ||
| } | ||
| // User can always use utf8 if they want, by passing Uint8Array. | ||
| // If string is passed, we treat it as ASCII: other formats are likely a mistake. | ||
| function normDST(DST) { | ||
| if (!(0, utils_ts_1.isBytes)(DST) && typeof DST !== 'string') | ||
| throw new Error('DST must be Uint8Array or string'); | ||
| return typeof DST === 'string' ? (0, utils_ts_1.utf8ToBytes)(DST) : DST; | ||
| if (!isBytes(DST) && typeof DST !== 'string') | ||
| throw new Error('DST must be Uint8Array or ascii string'); | ||
| return typeof DST === 'string' ? asciiToBytes(DST) : DST; | ||
| } | ||
@@ -47,4 +41,4 @@ /** | ||
| */ | ||
| function expand_message_xmd(msg, DST, lenInBytes, H) { | ||
| (0, utils_ts_1.abytes)(msg); | ||
| export function expand_message_xmd(msg, DST, lenInBytes, H) { | ||
| abytes(msg); | ||
| anum(lenInBytes); | ||
@@ -54,3 +48,3 @@ DST = normDST(DST); | ||
| if (DST.length > 255) | ||
| DST = H((0, utils_ts_1.concatBytes)((0, utils_ts_1.utf8ToBytes)('H2C-OVERSIZE-DST-'), DST)); | ||
| DST = H(concatBytes(asciiToBytes('H2C-OVERSIZE-DST-'), DST)); | ||
| const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H; | ||
@@ -60,13 +54,13 @@ const ell = Math.ceil(lenInBytes / b_in_bytes); | ||
| throw new Error('expand_message_xmd: invalid lenInBytes'); | ||
| const DST_prime = (0, utils_ts_1.concatBytes)(DST, i2osp(DST.length, 1)); | ||
| const DST_prime = concatBytes(DST, i2osp(DST.length, 1)); | ||
| const Z_pad = i2osp(0, r_in_bytes); | ||
| const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str | ||
| const b = new Array(ell); | ||
| const b_0 = H((0, utils_ts_1.concatBytes)(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime)); | ||
| b[0] = H((0, utils_ts_1.concatBytes)(b_0, i2osp(1, 1), DST_prime)); | ||
| const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime)); | ||
| b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime)); | ||
| for (let i = 1; i <= ell; i++) { | ||
| const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime]; | ||
| b[i] = H((0, utils_ts_1.concatBytes)(...args)); | ||
| b[i] = H(concatBytes(...args)); | ||
| } | ||
| const pseudo_random_bytes = (0, utils_ts_1.concatBytes)(...b); | ||
| const pseudo_random_bytes = concatBytes(...b); | ||
| return pseudo_random_bytes.slice(0, lenInBytes); | ||
@@ -81,4 +75,4 @@ } | ||
| */ | ||
| function expand_message_xof(msg, DST, lenInBytes, k, H) { | ||
| (0, utils_ts_1.abytes)(msg); | ||
| export function expand_message_xof(msg, DST, lenInBytes, k, H) { | ||
| abytes(msg); | ||
| anum(lenInBytes); | ||
@@ -90,3 +84,3 @@ DST = normDST(DST); | ||
| const dkLen = Math.ceil((2 * k) / 8); | ||
| DST = H.create({ dkLen }).update((0, utils_ts_1.utf8ToBytes)('H2C-OVERSIZE-DST-')).update(DST).digest(); | ||
| DST = H.create({ dkLen }).update(asciiToBytes('H2C-OVERSIZE-DST-')).update(DST).digest(); | ||
| } | ||
@@ -111,4 +105,4 @@ if (lenInBytes > 65535 || DST.length > 255) | ||
| */ | ||
| function hash_to_field(msg, count, options) { | ||
| (0, utils_ts_1._validateObject)(options, { | ||
| export function hash_to_field(msg, count, options) { | ||
| _validateObject(options, { | ||
| p: 'bigint', | ||
@@ -120,5 +114,5 @@ m: 'number', | ||
| const { p, k, m, hash, expand, DST } = options; | ||
| if (!(0, utils_ts_1.isHash)(options.hash)) | ||
| if (!isHash(options.hash)) | ||
| throw new Error('expected valid hash'); | ||
| (0, utils_ts_1.abytes)(msg); | ||
| abytes(msg); | ||
| anum(count); | ||
@@ -148,3 +142,3 @@ const log2p = p.toString(2).length; | ||
| const tv = prb.subarray(elm_offset, elm_offset + L); | ||
| e[j] = (0, modular_ts_1.mod)(os2ip(tv), p); | ||
| e[j] = mod(os2ip(tv), p); | ||
| } | ||
@@ -155,3 +149,3 @@ u[i] = e; | ||
| } | ||
| function isogenyMap(field, map) { | ||
| export function isogenyMap(field, map) { | ||
| // Make same order as in spec | ||
@@ -165,3 +159,3 @@ const coeff = map.map((i) => Array.from(i).reverse()); | ||
| // the identity point on E. | ||
| const [xd_inv, yd_inv] = (0, modular_ts_1.FpInvertBatch)(field, [xd, yd], true); | ||
| const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true); | ||
| x = field.mul(xn, xd_inv); // xNum / xDen | ||
@@ -172,5 +166,5 @@ y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev) | ||
| } | ||
| exports._DST_scalar = (0, utils_ts_1.utf8ToBytes)('HashToScalar-'); | ||
| export const _DST_scalar = asciiToBytes('HashToScalar-'); | ||
| /** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */ | ||
| function createHasher(Point, mapToCurve, defaults) { | ||
| export function createHasher(Point, mapToCurve, defaults) { | ||
| if (typeof mapToCurve !== 'function') | ||
@@ -190,2 +184,3 @@ throw new Error('mapToCurve() must be defined'); | ||
| defaults, | ||
| Point, | ||
| hashToCurve(msg, options) { | ||
@@ -219,3 +214,3 @@ const opts = Object.assign({}, defaults, options); | ||
| const N = Point.Fn.ORDER; | ||
| const opts = Object.assign({}, defaults, { p: N, m: 1, DST: exports._DST_scalar }, options); | ||
| const opts = Object.assign({}, defaults, { p: N, m: 1, DST: _DST_scalar }, options); | ||
| return hash_to_field(msg, 1, opts)[0][0]; | ||
@@ -222,0 +217,0 @@ }, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"hash-to-curve.js","sourceRoot":"","sources":["../src/abstract/hash-to-curve.ts"],"names":[],"mappings":";;;AAkFA,gDA0BC;AASD,gDA2BC;AAUD,sCAoCC;AAID,gCAgBC;AA6CD,oCAkDC;AAzSD,0CAQqB;AAErB,6CAA+D;AA2B/D,6FAA6F;AAC7F,MAAM,KAAK,GAAG,0BAAe,CAAC;AAE9B,4CAA4C;AAC5C,SAAS,KAAK,CAAC,KAAa,EAAE,MAAc;IAC1C,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAa,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;QACtB,KAAK,MAAM,CAAC,CAAC;IACf,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,MAAM,CAAC,CAAa,EAAE,CAAa;IAC1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CAAC,IAAa;IACzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,OAAO,CAAC,GAAmB;IAClC,IAAI,CAAC,IAAA,kBAAO,EAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClG,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,sBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,GAAe,EACf,GAAmB,EACnB,UAAkB,EAClB,CAAQ;IAER,IAAA,iBAAM,EAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnB,uDAAuD;IACvD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QAAE,GAAG,GAAG,CAAC,CAAC,IAAA,sBAAW,EAAC,IAAA,sBAAW,EAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;IAC/C,IAAI,UAAU,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,IAAA,sBAAW,EAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;IAC3D,MAAM,CAAC,GAAG,IAAI,KAAK,CAAa,GAAG,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAA,sBAAW,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAA,sBAAW,EAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,mBAAmB,GAAG,IAAA,sBAAW,EAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,GAAe,EACf,GAAmB,EACnB,UAAkB,EAClB,CAAS,EACT,CAAQ;IAER,IAAA,iBAAM,EAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnB,uDAAuD;IACvD,oFAAoF;IACpF,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAA,sBAAW,EAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,UAAU,GAAG,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QACxC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,OAAO,CACL,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SAC5B,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7B,2CAA2C;SAC1C,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SAC5B,MAAM,EAAE,CACZ,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,GAAe,EAAE,KAAa,EAAE,OAAgB;IAC5E,IAAA,0BAAe,EAAC,OAAO,EAAE;QACvB,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,QAAQ;QACX,IAAI,EAAE,UAAU;KACjB,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAC/C,IAAI,CAAC,IAAA,iBAAM,EAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAClE,IAAA,iBAAM,EAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uCAAuC;IAC7E,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,CAAC,sBAAsB;IAC/B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACvC,0BAA0B;QAC1B,GAAG,GAAG,GAAG,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,gBAAG,EAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAID,SAAgB,UAAU,CAAyB,KAAQ,EAAE,GAAe;IAC1E,6BAA6B;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE;QACpB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACzC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACxD,CAAC;QACF,QAAQ;QACR,wEAAwE;QACxE,uEAAuE;QACvE,2BAA2B;QAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAA,0BAAa,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc;QACzC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC7D,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AA0CY,QAAA,WAAW,GAAe,IAAA,sBAAW,EAAC,eAAe,CAAC,CAAC;AAEpE,kGAAkG;AAClG,SAAgB,YAAY,CAC1B,KAA6B,EAC7B,UAAyB,EACzB,QAAkD;IAElD,IAAI,OAAO,UAAU,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtF,SAAS,GAAG,CAAC,GAAa;QACxB,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,SAAS,KAAK,CAAC,OAAoB;QACjC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,4BAA4B;QACzE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO;QACL,QAAQ;QAER,WAAW,CAAC,GAAe,EAAE,OAAsB;YACjD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,aAAa,CAAC,GAAe,EAAE,OAAsB;YACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,4BAA4B;QAC5B,UAAU,CAAC,OAAiB;YAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1E,KAAK,MAAM,CAAC,IAAI,OAAO;gBACrB,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,0EAA0E;QAC1E,8CAA8C;QAC9C,YAAY,CAAC,GAAe,EAAE,OAAsB;YAClD,aAAa;YACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,mBAAW,EAAE,EAAE,OAAO,CAAC,CAAC;YACpF,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC;AACJ,CAAC"} | ||
| {"version":3,"file":"hash-to-curve.js","sourceRoot":"","sources":["../src/abstract/hash-to-curve.ts"],"names":[],"mappings":"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"} |
@@ -40,6 +40,5 @@ export declare function mod(a: bigint, b: bigint): bigint; | ||
| ORDER: bigint; | ||
| isLE: boolean; | ||
| BYTES: number; | ||
| BITS: number; | ||
| MASK: bigint; | ||
| isLE: boolean; | ||
| ZERO: T; | ||
@@ -66,3 +65,2 @@ ONE: T; | ||
| isOdd?(num: T): boolean; | ||
| allowedLengths?: number[]; | ||
| invertBatch: (lst: T[]) => T[]; | ||
@@ -105,7 +103,7 @@ toBytes(num: T): Uint8Array; | ||
| type FieldOpts = Partial<{ | ||
| sqrt: SqrtFn; | ||
| isLE: boolean; | ||
| BITS: number; | ||
| sqrt: SqrtFn; | ||
| allowedLengths?: readonly number[]; | ||
| modFromBytes: boolean; | ||
| allowedLengths?: readonly number[]; | ||
| }>; | ||
@@ -131,16 +129,6 @@ /** | ||
| */ | ||
| export declare function Field(ORDER: bigint, bitLenOrOpts?: number | FieldOpts, // TODO: use opts only in v2? | ||
| isLE?: boolean, opts?: { | ||
| sqrt?: SqrtFn; | ||
| }): Readonly<FpField>; | ||
| export declare function Field(ORDER: bigint, opts?: FieldOpts): Readonly<FpField>; | ||
| export declare function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T; | ||
| export declare function FpSqrtEven<T>(Fp: IField<T>, elm: T): T; | ||
| /** | ||
| * "Constant-time" private key generation utility. | ||
| * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field). | ||
| * Which makes it slightly more biased, less secure. | ||
| * @deprecated use `mapKeyToField` instead | ||
| */ | ||
| export declare function hashToPrivateScalar(hash: string | Uint8Array, groupOrder: bigint, isLE?: boolean): bigint; | ||
| /** | ||
| * Returns total number of bytes consumed by the field element. | ||
@@ -169,3 +157,3 @@ * For example, 32 bytes for usual 256-bit weierstrass curve. | ||
| * @param hash hash output from SHA3 or a similar function | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n) | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.Point.Fn.ORDER) | ||
| * @param isLE interpret hash bytes as LE num | ||
@@ -172,0 +160,0 @@ * @returns valid private scalar |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"modular.d.ts","sourceRoot":"","sources":["../src/abstract/modular.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"modular.d.ts","sourceRoot":"","sources":["../src/abstract/modular.ts"],"names":[],"mappings":"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"} |
+166
-167
@@ -1,24 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.isNegativeLE = void 0; | ||
| exports.mod = mod; | ||
| exports.pow = pow; | ||
| exports.pow2 = pow2; | ||
| exports.invert = invert; | ||
| exports.tonelliShanks = tonelliShanks; | ||
| exports.FpSqrt = FpSqrt; | ||
| exports.validateField = validateField; | ||
| exports.FpPow = FpPow; | ||
| exports.FpInvertBatch = FpInvertBatch; | ||
| exports.FpDiv = FpDiv; | ||
| exports.FpLegendre = FpLegendre; | ||
| exports.FpIsSquare = FpIsSquare; | ||
| exports.nLength = nLength; | ||
| exports.Field = Field; | ||
| exports.FpSqrtOdd = FpSqrtOdd; | ||
| exports.FpSqrtEven = FpSqrtEven; | ||
| exports.hashToPrivateScalar = hashToPrivateScalar; | ||
| exports.getFieldBytesLength = getFieldBytesLength; | ||
| exports.getMinHashLength = getMinHashLength; | ||
| exports.mapHashToField = mapHashToField; | ||
| /** | ||
@@ -31,5 +8,5 @@ * Utils for modular division and fields. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_ts_1 = require("../utils.js"); | ||
| import { _validateObject, abytes, anumber, bytesToNumberBE, bytesToNumberLE, numberToBytesBE, numberToBytesLE, } from "../utils.js"; | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3); | ||
| const _0n = BigInt(0), _1n = /* @__PURE__ */ BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3); | ||
| // prettier-ignore | ||
@@ -40,3 +17,3 @@ const _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _7n = /* @__PURE__ */ BigInt(7); | ||
| // Calculates a modulo b | ||
| function mod(a, b) { | ||
| export function mod(a, b) { | ||
| const result = a % b; | ||
@@ -51,7 +28,7 @@ return result >= _0n ? result : b + result; | ||
| */ | ||
| function pow(num, power, modulo) { | ||
| export function pow(num, power, modulo) { | ||
| return FpPow(Field(modulo), num, power); | ||
| } | ||
| /** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */ | ||
| function pow2(x, power, modulo) { | ||
| export function pow2(x, power, modulo) { | ||
| let res = x; | ||
@@ -68,3 +45,3 @@ while (power-- > _0n) { | ||
| */ | ||
| function invert(number, modulo) { | ||
| export function invert(number, modulo) { | ||
| if (number === _0n) | ||
@@ -148,3 +125,3 @@ throw new Error('invert: expected non-zero number'); | ||
| */ | ||
| function tonelliShanks(P) { | ||
| export function tonelliShanks(P) { | ||
| // Initialization (precomputation). | ||
@@ -225,3 +202,3 @@ // Caching initialization could boost perf by 7%. | ||
| */ | ||
| function FpSqrt(P) { | ||
| export function FpSqrt(P) { | ||
| // P ≡ 3 (mod 4) => √n = n^((P+1)/4) | ||
@@ -240,4 +217,3 @@ if (P % _4n === _3n) | ||
| // Little-endian check for first LE bit (last BE bit); | ||
| const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n; | ||
| exports.isNegativeLE = isNegativeLE; | ||
| export const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n; | ||
| // prettier-ignore | ||
@@ -249,6 +225,5 @@ const FIELD_FIELDS = [ | ||
| ]; | ||
| function validateField(field) { | ||
| export function validateField(field) { | ||
| const initial = { | ||
| ORDER: 'bigint', | ||
| MASK: 'bigint', | ||
| BYTES: 'number', | ||
@@ -261,3 +236,3 @@ BITS: 'number', | ||
| }, initial); | ||
| (0, utils_ts_1._validateObject)(field, opts); | ||
| _validateObject(field, opts); | ||
| // const max = 16384; | ||
@@ -273,3 +248,3 @@ // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field'); | ||
| */ | ||
| function FpPow(Fp, num, power) { | ||
| export function FpPow(Fp, num, power) { | ||
| if (power < _0n) | ||
@@ -296,3 +271,3 @@ throw new Error('invalid exponent, negatives unsupported'); | ||
| */ | ||
| function FpInvertBatch(Fp, nums, passZero = false) { | ||
| export function FpInvertBatch(Fp, nums, passZero = false) { | ||
| const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined); | ||
@@ -318,3 +293,3 @@ // Walk from first to last, multiply them by each other MOD p | ||
| // TODO: remove | ||
| function FpDiv(Fp, lhs, rhs) { | ||
| export function FpDiv(Fp, lhs, rhs) { | ||
| return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs)); | ||
@@ -331,3 +306,3 @@ } | ||
| */ | ||
| function FpLegendre(Fp, n) { | ||
| export function FpLegendre(Fp, n) { | ||
| // We can use 3rd argument as optional cache of this value | ||
@@ -345,3 +320,3 @@ // but seems unneeded for now. The operation is very fast. | ||
| // This function returns True whenever the value x is a square in the field F. | ||
| function FpIsSquare(Fp, n) { | ||
| export function FpIsSquare(Fp, n) { | ||
| const l = FpLegendre(Fp, n); | ||
@@ -351,6 +326,6 @@ return l === 1; | ||
| // CURVE.n lengths | ||
| function nLength(n, nBitLength) { | ||
| export function nLength(n, nBitLength) { | ||
| // Bit size, byte size of CURVE.n | ||
| if (nBitLength !== undefined) | ||
| (0, utils_ts_1.anumber)(nBitLength); | ||
| anumber(nBitLength); | ||
| const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length; | ||
@@ -360,2 +335,139 @@ const nByteLength = Math.ceil(_nBitLength / 8); | ||
| } | ||
| class _Field { | ||
| ORDER; | ||
| BITS; | ||
| BYTES; | ||
| isLE; | ||
| ZERO = _0n; | ||
| ONE = _1n; | ||
| _lengths; | ||
| _sqrt; // cached sqrt | ||
| _mod; | ||
| constructor(ORDER, opts = {}) { | ||
| if (ORDER <= _0n) | ||
| throw new Error('invalid field: expected ORDER > 0, got ' + ORDER); | ||
| let _nbitLength = undefined; | ||
| this.isLE = false; | ||
| if (opts != null && typeof opts === 'object') { | ||
| if (typeof opts.BITS === 'number') | ||
| _nbitLength = opts.BITS; | ||
| if (typeof opts.sqrt === 'function') | ||
| this.sqrt = opts.sqrt; | ||
| if (typeof opts.isLE === 'boolean') | ||
| this.isLE = opts.isLE; | ||
| if (opts.allowedLengths) | ||
| this._lengths = opts.allowedLengths?.slice(); | ||
| if (typeof opts.modFromBytes === 'boolean') | ||
| this._mod = opts.modFromBytes; | ||
| } | ||
| const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength); | ||
| if (nByteLength > 2048) | ||
| throw new Error('invalid field: expected ORDER of <= 2048 bytes'); | ||
| this.ORDER = ORDER; | ||
| this.BITS = nBitLength; | ||
| this.BYTES = nByteLength; | ||
| this._sqrt = undefined; | ||
| Object.preventExtensions(this); | ||
| } | ||
| create(num) { | ||
| return mod(num, this.ORDER); | ||
| } | ||
| isValid(num) { | ||
| if (typeof num !== 'bigint') | ||
| throw new Error('invalid field element: expected bigint, got ' + typeof num); | ||
| return _0n <= num && num < this.ORDER; // 0 is valid element, but it's not invertible | ||
| } | ||
| is0(num) { | ||
| return num === _0n; | ||
| } | ||
| // is valid and invertible | ||
| isValidNot0(num) { | ||
| return !this.is0(num) && this.isValid(num); | ||
| } | ||
| isOdd(num) { | ||
| return (num & _1n) === _1n; | ||
| } | ||
| neg(num) { | ||
| return mod(-num, this.ORDER); | ||
| } | ||
| eql(lhs, rhs) { | ||
| return lhs === rhs; | ||
| } | ||
| sqr(num) { | ||
| return mod(num * num, this.ORDER); | ||
| } | ||
| add(lhs, rhs) { | ||
| return mod(lhs + rhs, this.ORDER); | ||
| } | ||
| sub(lhs, rhs) { | ||
| return mod(lhs - rhs, this.ORDER); | ||
| } | ||
| mul(lhs, rhs) { | ||
| return mod(lhs * rhs, this.ORDER); | ||
| } | ||
| pow(num, power) { | ||
| return FpPow(this, num, power); | ||
| } | ||
| div(lhs, rhs) { | ||
| return mod(lhs * invert(rhs, this.ORDER), this.ORDER); | ||
| } | ||
| // Same as above, but doesn't normalize | ||
| sqrN(num) { | ||
| return num * num; | ||
| } | ||
| addN(lhs, rhs) { | ||
| return lhs + rhs; | ||
| } | ||
| subN(lhs, rhs) { | ||
| return lhs - rhs; | ||
| } | ||
| mulN(lhs, rhs) { | ||
| return lhs * rhs; | ||
| } | ||
| inv(num) { | ||
| return invert(num, this.ORDER); | ||
| } | ||
| sqrt(num) { | ||
| // Caching _sqrt speeds up sqrt9mod16 by 5x and tonneli-shanks by 10% | ||
| if (!this._sqrt) | ||
| this._sqrt = FpSqrt(this.ORDER); | ||
| return this._sqrt(this, num); | ||
| } | ||
| toBytes(num) { | ||
| return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE(num, this.BYTES); | ||
| } | ||
| fromBytes(bytes, skipValidation = false) { | ||
| abytes(bytes); | ||
| const { _lengths: allowedLengths, BYTES, isLE, ORDER, _mod: modFromBytes } = this; | ||
| if (allowedLengths) { | ||
| if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) { | ||
| throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length); | ||
| } | ||
| const padded = new Uint8Array(BYTES); | ||
| // isLE add 0 to right, !isLE to the left. | ||
| padded.set(bytes, isLE ? 0 : padded.length - bytes.length); | ||
| bytes = padded; | ||
| } | ||
| if (bytes.length !== BYTES) | ||
| throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length); | ||
| let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes); | ||
| if (modFromBytes) | ||
| scalar = mod(scalar, ORDER); | ||
| if (!skipValidation) | ||
| if (!this.isValid(scalar)) | ||
| throw new Error('invalid field element: outside of range 0..ORDER'); | ||
| // NOTE: we don't validate scalar here, please use isValid. This done such way because some | ||
| // protocol may allow non-reduced scalar that reduced later or changed some other way. | ||
| return scalar; | ||
| } | ||
| // TODO: we don't need it here, move out to separate fn | ||
| invertBatch(lst) { | ||
| return FpInvertBatch(this, lst); | ||
| } | ||
| // We can't move this out because Fp6, Fp12 implement it | ||
| // and it's unclear what to return in there. | ||
| cmov(a, b, condition) { | ||
| return condition ? b : a; | ||
| } | ||
| } | ||
| /** | ||
@@ -380,103 +492,4 @@ * Creates a finite field. Major performance optimizations: | ||
| */ | ||
| function Field(ORDER, bitLenOrOpts, // TODO: use opts only in v2? | ||
| isLE = false, opts = {}) { | ||
| if (ORDER <= _0n) | ||
| throw new Error('invalid field: expected ORDER > 0, got ' + ORDER); | ||
| let _nbitLength = undefined; | ||
| let _sqrt = undefined; | ||
| let modFromBytes = false; | ||
| let allowedLengths = undefined; | ||
| if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) { | ||
| if (opts.sqrt || isLE) | ||
| throw new Error('cannot specify opts in two arguments'); | ||
| const _opts = bitLenOrOpts; | ||
| if (_opts.BITS) | ||
| _nbitLength = _opts.BITS; | ||
| if (_opts.sqrt) | ||
| _sqrt = _opts.sqrt; | ||
| if (typeof _opts.isLE === 'boolean') | ||
| isLE = _opts.isLE; | ||
| if (typeof _opts.modFromBytes === 'boolean') | ||
| modFromBytes = _opts.modFromBytes; | ||
| allowedLengths = _opts.allowedLengths; | ||
| } | ||
| else { | ||
| if (typeof bitLenOrOpts === 'number') | ||
| _nbitLength = bitLenOrOpts; | ||
| if (opts.sqrt) | ||
| _sqrt = opts.sqrt; | ||
| } | ||
| const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength); | ||
| if (BYTES > 2048) | ||
| throw new Error('invalid field: expected ORDER of <= 2048 bytes'); | ||
| let sqrtP; // cached sqrtP | ||
| const f = Object.freeze({ | ||
| ORDER, | ||
| isLE, | ||
| BITS, | ||
| BYTES, | ||
| MASK: (0, utils_ts_1.bitMask)(BITS), | ||
| ZERO: _0n, | ||
| ONE: _1n, | ||
| allowedLengths: allowedLengths, | ||
| create: (num) => mod(num, ORDER), | ||
| isValid: (num) => { | ||
| if (typeof num !== 'bigint') | ||
| throw new Error('invalid field element: expected bigint, got ' + typeof num); | ||
| return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible | ||
| }, | ||
| is0: (num) => num === _0n, | ||
| // is valid and invertible | ||
| isValidNot0: (num) => !f.is0(num) && f.isValid(num), | ||
| isOdd: (num) => (num & _1n) === _1n, | ||
| neg: (num) => mod(-num, ORDER), | ||
| eql: (lhs, rhs) => lhs === rhs, | ||
| sqr: (num) => mod(num * num, ORDER), | ||
| add: (lhs, rhs) => mod(lhs + rhs, ORDER), | ||
| sub: (lhs, rhs) => mod(lhs - rhs, ORDER), | ||
| mul: (lhs, rhs) => mod(lhs * rhs, ORDER), | ||
| pow: (num, power) => FpPow(f, num, power), | ||
| div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER), | ||
| // Same as above, but doesn't normalize | ||
| sqrN: (num) => num * num, | ||
| addN: (lhs, rhs) => lhs + rhs, | ||
| subN: (lhs, rhs) => lhs - rhs, | ||
| mulN: (lhs, rhs) => lhs * rhs, | ||
| inv: (num) => invert(num, ORDER), | ||
| sqrt: _sqrt || | ||
| ((n) => { | ||
| if (!sqrtP) | ||
| sqrtP = FpSqrt(ORDER); | ||
| return sqrtP(f, n); | ||
| }), | ||
| toBytes: (num) => (isLE ? (0, utils_ts_1.numberToBytesLE)(num, BYTES) : (0, utils_ts_1.numberToBytesBE)(num, BYTES)), | ||
| fromBytes: (bytes, skipValidation = true) => { | ||
| if (allowedLengths) { | ||
| if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) { | ||
| throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length); | ||
| } | ||
| const padded = new Uint8Array(BYTES); | ||
| // isLE add 0 to right, !isLE to the left. | ||
| padded.set(bytes, isLE ? 0 : padded.length - bytes.length); | ||
| bytes = padded; | ||
| } | ||
| if (bytes.length !== BYTES) | ||
| throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length); | ||
| let scalar = isLE ? (0, utils_ts_1.bytesToNumberLE)(bytes) : (0, utils_ts_1.bytesToNumberBE)(bytes); | ||
| if (modFromBytes) | ||
| scalar = mod(scalar, ORDER); | ||
| if (!skipValidation) | ||
| if (!f.isValid(scalar)) | ||
| throw new Error('invalid field element: outside of range 0..ORDER'); | ||
| // NOTE: we don't validate scalar here, please use isValid. This done such way because some | ||
| // protocol may allow non-reduced scalar that reduced later or changed some other way. | ||
| return scalar; | ||
| }, | ||
| // TODO: we don't need it here, move out to separate fn | ||
| invertBatch: (lst) => FpInvertBatch(f, lst), | ||
| // We can't move this out because Fp6, Fp12 implement it | ||
| // and it's unclear what to return in there. | ||
| cmov: (a, b, c) => (c ? b : a), | ||
| }); | ||
| return Object.freeze(f); | ||
| export function Field(ORDER, opts = {}) { | ||
| return new _Field(ORDER, opts); | ||
| } | ||
@@ -496,3 +509,3 @@ // Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)? | ||
| // }, | ||
| function FpSqrtOdd(Fp, elm) { | ||
| export function FpSqrtOdd(Fp, elm) { | ||
| if (!Fp.isOdd) | ||
@@ -503,3 +516,3 @@ throw new Error("Field doesn't have isOdd"); | ||
| } | ||
| function FpSqrtEven(Fp, elm) { | ||
| export function FpSqrtEven(Fp, elm) { | ||
| if (!Fp.isOdd) | ||
@@ -511,17 +524,2 @@ throw new Error("Field doesn't have isOdd"); | ||
| /** | ||
| * "Constant-time" private key generation utility. | ||
| * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field). | ||
| * Which makes it slightly more biased, less secure. | ||
| * @deprecated use `mapKeyToField` instead | ||
| */ | ||
| function hashToPrivateScalar(hash, groupOrder, isLE = false) { | ||
| hash = (0, utils_ts_1.ensureBytes)('privateHash', hash); | ||
| const hashLen = hash.length; | ||
| const minLen = nLength(groupOrder).nByteLength + 8; | ||
| if (minLen < 24 || hashLen < minLen || hashLen > 1024) | ||
| throw new Error('hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen); | ||
| const num = isLE ? (0, utils_ts_1.bytesToNumberLE)(hash) : (0, utils_ts_1.bytesToNumberBE)(hash); | ||
| return mod(num, groupOrder - _1n) + _1n; | ||
| } | ||
| /** | ||
| * Returns total number of bytes consumed by the field element. | ||
@@ -532,3 +530,3 @@ * For example, 32 bytes for usual 256-bit weierstrass curve. | ||
| */ | ||
| function getFieldBytesLength(fieldOrder) { | ||
| export function getFieldBytesLength(fieldOrder) { | ||
| if (typeof fieldOrder !== 'bigint') | ||
@@ -546,3 +544,3 @@ throw new Error('field order must be bigint'); | ||
| */ | ||
| function getMinHashLength(fieldOrder) { | ||
| export function getMinHashLength(fieldOrder) { | ||
| const length = getFieldBytesLength(fieldOrder); | ||
@@ -560,7 +558,8 @@ return length + Math.ceil(length / 2); | ||
| * @param hash hash output from SHA3 or a similar function | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n) | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.Point.Fn.ORDER) | ||
| * @param isLE interpret hash bytes as LE num | ||
| * @returns valid private scalar | ||
| */ | ||
| function mapHashToField(key, fieldOrder, isLE = false) { | ||
| export function mapHashToField(key, fieldOrder, isLE = false) { | ||
| abytes(key); | ||
| const len = key.length; | ||
@@ -572,7 +571,7 @@ const fieldLen = getFieldBytesLength(fieldOrder); | ||
| throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len); | ||
| const num = isLE ? (0, utils_ts_1.bytesToNumberLE)(key) : (0, utils_ts_1.bytesToNumberBE)(key); | ||
| const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key); | ||
| // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0 | ||
| const reduced = mod(num, fieldOrder - _1n) + _1n; | ||
| return isLE ? (0, utils_ts_1.numberToBytesLE)(reduced, fieldLen) : (0, utils_ts_1.numberToBytesBE)(reduced, fieldLen); | ||
| return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen); | ||
| } | ||
| //# sourceMappingURL=modular.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"modular.js","sourceRoot":"","sources":["../src/abstract/modular.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"modular.js","sourceRoot":"","sources":["../src/abstract/modular.ts"],"names":[],"mappings":"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"} |
| import type { CurveLengths } from './curve.ts'; | ||
| type Hex = string | Uint8Array; | ||
| export type CurveType = { | ||
@@ -11,10 +10,8 @@ P: bigint; | ||
| export type MontgomeryECDH = { | ||
| scalarMult: (scalar: Hex, u: Hex) => Uint8Array; | ||
| scalarMultBase: (scalar: Hex) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: Hex, publicKeyB: Hex) => Uint8Array; | ||
| getPublicKey: (secretKey: Hex) => Uint8Array; | ||
| scalarMult: (scalar: Uint8Array, u: Uint8Array) => Uint8Array; | ||
| scalarMultBase: (scalar: Uint8Array) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: Uint8Array, publicKeyB: Uint8Array) => Uint8Array; | ||
| getPublicKey: (secretKey: Uint8Array) => Uint8Array; | ||
| utils: { | ||
| randomSecretKey: () => Uint8Array; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: () => Uint8Array; | ||
| }; | ||
@@ -28,5 +25,3 @@ GuBytes: Uint8Array; | ||
| }; | ||
| export type CurveFn = MontgomeryECDH; | ||
| export declare function montgomery(curveDef: CurveType): MontgomeryECDH; | ||
| export {}; | ||
| //# sourceMappingURL=montgomery.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"montgomery.d.ts","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,KAAK,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/B,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC;IAChD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,UAAU,CAAC;IAC5C,eAAe,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC;IAClE,YAAY,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,UAAU,CAAC;IAC7C,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,UAAU,CAAC;QAClC,wCAAwC;QACxC,gBAAgB,EAAE,MAAM,UAAU,CAAC;KACpC,CAAC;IACF,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;CACjF,CAAC;AACF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC;AAUrC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,GAAG,cAAc,CAyI9D"} | ||
| {"version":3,"file":"montgomery.d.ts","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO/C,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;IAC9D,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC;IACnD,eAAe,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,KAAK,UAAU,CAAC;IAChF,YAAY,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC;IACpD,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,UAAU,CAAC;KACnC,CAAC;IACF,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;CACjF,CAAC;AAUF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,GAAG,cAAc,CA2I9D"} |
+15
-18
@@ -1,4 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.montgomery = montgomery; | ||
| /** | ||
@@ -11,4 +8,4 @@ * Montgomery curve methods. It's not really whole montgomery curve, | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const modular_ts_1 = require("./modular.js"); | ||
| import { _validateObject, abytes, aInRange, bytesToNumberLE, copyBytes, numberToBytesLE, randomBytes, } from "../utils.js"; | ||
| import { mod } from "./modular.js"; | ||
| const _0n = BigInt(0); | ||
@@ -18,3 +15,3 @@ const _1n = BigInt(1); | ||
| function validateOpts(curve) { | ||
| (0, utils_ts_1._validateObject)(curve, { | ||
| _validateObject(curve, { | ||
| adjustScalarBytes: 'function', | ||
@@ -25,3 +22,3 @@ powPminus2: 'function', | ||
| } | ||
| function montgomery(curveDef) { | ||
| export function montgomery(curveDef) { | ||
| const CURVE = validateOpts(curveDef); | ||
@@ -32,3 +29,3 @@ const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE; | ||
| throw new Error('invalid type'); | ||
| const randomBytes_ = rand || utils_ts_1.randomBytes; | ||
| const randomBytes_ = rand || randomBytes; | ||
| const montgomeryBits = is25519 ? 255 : 448; | ||
@@ -50,9 +47,9 @@ const fieldLen = is25519 ? 32 : 56; | ||
| const maxScalar = minScalar + maxAdded + _1n; // (inclusive) | ||
| const modP = (n) => (0, modular_ts_1.mod)(n, P); | ||
| const modP = (n) => mod(n, P); | ||
| const GuBytes = encodeU(Gu); | ||
| function encodeU(u) { | ||
| return (0, utils_ts_1.numberToBytesLE)(modP(u), fieldLen); | ||
| return numberToBytesLE(modP(u), fieldLen); | ||
| } | ||
| function decodeU(u) { | ||
| const _u = (0, utils_ts_1.ensureBytes)('u coordinate', u, fieldLen); | ||
| const _u = copyBytes(abytes(u, fieldLen, 'uCoordinate')); | ||
| // RFC: When receiving such an array, implementations of X25519 | ||
@@ -66,6 +63,6 @@ // (but not X448) MUST mask the most significant bit in the final byte. | ||
| // - 1 through 2^448 - 1 for X448. | ||
| return modP((0, utils_ts_1.bytesToNumberLE)(_u)); | ||
| return modP(bytesToNumberLE(_u)); | ||
| } | ||
| function decodeScalar(scalar) { | ||
| return (0, utils_ts_1.bytesToNumberLE)(adjustScalarBytes((0, utils_ts_1.ensureBytes)('scalar', scalar, fieldLen))); | ||
| return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, 'scalar')))); | ||
| } | ||
@@ -102,4 +99,4 @@ function scalarMult(scalar, u) { | ||
| function montgomeryLadder(u, scalar) { | ||
| (0, utils_ts_1.aInRange)('u', u, _0n, P); | ||
| (0, utils_ts_1.aInRange)('scalar', scalar, minScalar, maxScalar); | ||
| aInRange('u', u, _0n, P); | ||
| aInRange('scalar', scalar, minScalar, maxScalar); | ||
| const k = scalar; | ||
@@ -145,3 +142,3 @@ const x_1 = u; | ||
| const randomSecretKey = (seed = randomBytes_(fieldLen)) => { | ||
| (0, utils_ts_1.abytes)(seed, lengths.seed); | ||
| abytes(seed, lengths.seed, 'seed'); | ||
| return seed; | ||
@@ -157,3 +154,3 @@ }; | ||
| }; | ||
| return { | ||
| return Object.freeze({ | ||
| keygen, | ||
@@ -167,4 +164,4 @@ getSharedSecret: (secretKey, publicKey) => scalarMult(secretKey, publicKey), | ||
| lengths, | ||
| }; | ||
| }); | ||
| } | ||
| //# sourceMappingURL=montgomery.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"montgomery.js","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":";;AAwDA,gCAyIC;AAjMD;;;;;GAKG;AACH,sEAAsE;AACtE,0CAQqB;AAErB,6CAAmC;AAEnC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AA2BtB,SAAS,YAAY,CAAC,KAAgB;IACpC,IAAA,0BAAe,EAAC,KAAK,EAAE;QACrB,iBAAiB,EAAE,UAAU;QAC7B,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAW,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,UAAU,CAAC,QAAmB;IAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,KAAK,QAAQ,CAAC;IAClC,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,IAAI,sBAAW,CAAC;IAEzC,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3C,eAAe;IACf,0EAA0E;IAC1E,6CAA6C;IAC7C,yCAAyC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,+DAA+D;IAC/D,2DAA2D;IAC3D,4EAA4E;IAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,OAAO;QACtB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG;QACtC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACzC,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,cAAc;IAC5D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAA,gBAAG,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,SAAS,OAAO,CAAC,CAAS;QACxB,OAAO,IAAA,0BAAe,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS,OAAO,CAAC,CAAM;QACrB,MAAM,EAAE,GAAG,IAAA,sBAAW,EAAC,cAAc,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACpD,+DAA+D;QAC/D,uEAAuE;QACvE,IAAI,OAAO;YAAE,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,cAAc;QAC1C,4EAA4E;QAC5E,sEAAsE;QACtE,uEAAuE;QACvE,kCAAkC;QAClC,OAAO,IAAI,CAAC,IAAA,0BAAe,EAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,SAAS,YAAY,CAAC,MAAW;QAC/B,OAAO,IAAA,0BAAe,EAAC,iBAAiB,CAAC,IAAA,sBAAW,EAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,SAAS,UAAU,CAAC,MAAW,EAAE,CAAM;QACrC,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,yEAAyE;QACzE,sDAAsD;QACtD,sCAAsC;QACtC,IAAI,EAAE,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,kFAAkF;IAClF,SAAS,cAAc,CAAC,MAAW;QACjC,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,oCAAoC;IACpC,SAAS,KAAK,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;QACnD,uCAAuC;QACvC,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QACvC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB;QAC/C,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB;QAC/C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,SAAS,gBAAgB,CAAC,CAAS,EAAE,MAAc;QACjD,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,MAAM,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3B,IAAI,IAAI,GAAG,CAAC;YACZ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACvC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,GAAG,GAAG,CAAC;YAEX,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACxB,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,iDAAiD;QAC7E,OAAO,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B;IACtD,CAAC;IACD,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,QAAQ;KACf,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE;QACxD,IAAA,iBAAM,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,SAAS,MAAM,CAAC,IAAiB;QAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7D,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,eAAe;QACf,gBAAgB,EAAE,eAAe;KAClC,CAAC;IACF,OAAO;QACL,MAAM;QACN,eAAe,EAAE,CAAC,SAAc,EAAE,SAAc,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC;QACrF,YAAY,EAAE,CAAC,SAAc,EAAc,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC;QACvE,UAAU;QACV,cAAc;QACd,KAAK;QACL,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;QACxB,OAAO;KACR,CAAC;AACJ,CAAC"} | ||
| {"version":3,"file":"montgomery.js","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":"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"} |
+20
-24
@@ -1,9 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.PoseidonSponge = void 0; | ||
| exports.grainGenConstants = grainGenConstants; | ||
| exports.validateOpts = validateOpts; | ||
| exports.splitConstants = splitConstants; | ||
| exports.poseidon = poseidon; | ||
| exports.poseidonSponge = poseidonSponge; | ||
| /** | ||
@@ -18,4 +10,4 @@ * Implements [Poseidon](https://www.poseidon-hash.info) ZK-friendly hash. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const modular_ts_1 = require("./modular.js"); | ||
| import { _validateObject, bitGet } from "../utils.js"; | ||
| import { FpInvertBatch, FpPow, validateField } from "./modular.js"; | ||
| // Grain LFSR (Linear-Feedback Shift Register): https://eprint.iacr.org/2009/109.pdf | ||
@@ -48,4 +40,4 @@ function grainLFSR(state) { | ||
| const { Fp, roundsFull } = opts; | ||
| (0, modular_ts_1.validateField)(Fp); | ||
| (0, utils_ts_1._validateObject)(opts, { | ||
| validateField(Fp); | ||
| _validateObject(opts, { | ||
| t: 'number', | ||
@@ -71,3 +63,3 @@ roundsFull: 'number', | ||
| for (let i = bitCount - 1; i >= 0; i--) | ||
| state[pos++] = Number((0, utils_ts_1.bitGet)(value, i)); | ||
| state[pos++] = Number(bitGet(value, i)); | ||
| }; | ||
@@ -104,3 +96,3 @@ const _0n = BigInt(0); | ||
| // (grain LFRS-like structure) | ||
| function grainGenConstants(opts, skipMDS = 0) { | ||
| export function grainGenConstants(opts, skipMDS = 0) { | ||
| const { Fp, t, roundsFull, roundsPartial } = opts; | ||
@@ -127,7 +119,7 @@ const rounds = roundsFull + roundsPartial; | ||
| } | ||
| mds.push((0, modular_ts_1.FpInvertBatch)(Fp, row)); | ||
| mds.push(FpInvertBatch(Fp, row)); | ||
| } | ||
| return { roundConstants, mds }; | ||
| } | ||
| function validateOpts(opts) { | ||
| export function validateOpts(opts) { | ||
| assertValidPosOpts(opts); | ||
@@ -167,3 +159,3 @@ const { Fp, mds, reversePartialPowIdx: rev, roundConstants: rc } = opts; | ||
| const _sboxPower = BigInt(sboxPower); | ||
| let sboxFn = (n) => (0, modular_ts_1.FpPow)(Fp, n, _sboxPower); | ||
| let sboxFn = (n) => FpPow(Fp, n, _sboxPower); | ||
| // Unwrapped sbox power for common cases (195->142μs) | ||
@@ -176,3 +168,3 @@ if (sboxPower === 3) | ||
| } | ||
| function splitConstants(rc, t) { | ||
| export function splitConstants(rc, t) { | ||
| if (typeof t !== 'number') | ||
@@ -194,3 +186,3 @@ throw new Error('poseidonSplitConstants: invalid t'); | ||
| /** Poseidon NTT-friendly hash. */ | ||
| function poseidon(opts) { | ||
| export function poseidon(opts) { | ||
| const _opts = validateOpts(opts); | ||
@@ -236,6 +228,11 @@ const { Fp, mds, roundConstants, rounds: totalRounds, roundsPartial, sboxFn, t } = _opts; | ||
| } | ||
| class PoseidonSponge { | ||
| export class PoseidonSponge { | ||
| Fp; | ||
| rate; | ||
| capacity; | ||
| hash; | ||
| state; // [...capacity, ...rate] | ||
| pos = 0; | ||
| isAbsorbing = true; | ||
| constructor(Fp, rate, capacity, hash) { | ||
| this.pos = 0; | ||
| this.isAbsorbing = true; | ||
| this.Fp = Fp; | ||
@@ -294,3 +291,2 @@ this.hash = hash; | ||
| } | ||
| exports.PoseidonSponge = PoseidonSponge; | ||
| /** | ||
@@ -303,3 +299,3 @@ * The method is not defined in spec, but nevertheless used often. | ||
| */ | ||
| function poseidonSponge(opts) { | ||
| export function poseidonSponge(opts) { | ||
| for (const i of ['rate', 'capacity']) { | ||
@@ -306,0 +302,0 @@ if (typeof opts[i] !== 'number' || !Number.isSafeInteger(opts[i])) |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"poseidon.js","sourceRoot":"","sources":["../src/abstract/poseidon.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"poseidon.js","sourceRoot":"","sources":["../src/abstract/poseidon.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,sEAAsE;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAe,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhF,oFAAoF;AACpF,SAAS,SAAS,CAAC,KAAe;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,GAAY,EAAE;QAC3B,MAAM,CAAC,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACjB,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,GAAG,CAAC;IACf,CAAC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,CAAC;IACvC,OAAO,GAAG,EAAE;QACV,oDAAoD;QACpD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAUD,SAAS,kBAAkB,CAAC,IAAuB;IACjD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,eAAe,CACb,IAAI,EACJ;QACE,CAAC,EAAE,QAAQ;QACX,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,QAAQ;KACxB,EACD;QACE,aAAa,EAAE,SAAS;KACzB,CACF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,eAAe,CAAU,EAAE,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,UAAU,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,IAAuB;IAC5C,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE;QACpD,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;IACjC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;IACvD,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;IAC1C,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;IAC1C,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;IACnD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;IAEtD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,CAAC,KAAa,EAAE,MAAe,EAAY,EAAE;QAClD,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,GAAG,GAAG,GAAG,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,GAAG,KAAK,GAAG,CAAC;oBACZ,IAAI,MAAM,EAAE;wBAAE,GAAG,IAAI,GAAG,CAAC;gBAC3B,CAAC;gBACD,IAAI,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,KAAK;oBAAE,SAAS,CAAC,qBAAqB;gBAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAQD,iFAAiF;AACjF,8BAA8B;AAC9B,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,UAAkB,CAAC;IAC5E,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,cAAc,GAAe,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,qDAAqD;IACrD,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YACxF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;AACjC,CAAC;AAQD,MAAM,UAAU,YAAY,CAAC,IAAkB;IAY7C,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACxE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IAEzD,oBAAoB;IACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,MAAM,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,CAAC,CAAC;YAC9E,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,SAAS;QAC/C,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,GAAG,CAAC,CAAC;IAE/D,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,UAAU,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;IAE1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM;QAC5C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACvF,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACrD,qDAAqD;IACrD,IAAI,SAAS,KAAK,CAAC;QAAE,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9D,IAAI,SAAS,KAAK,CAAC;QAAE,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAY,EAAE,CAAS;IACpD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAChF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC/F,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD,kCAAkC;AAClC,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;IACzF,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,CAAC,MAAgB,EAAE,MAAe,EAAE,GAAW,EAAE,EAAE;QACvE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,MAAM;YAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC7C,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,wBAAwB;QACxB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9F,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,YAAY,CAAC,MAAgB;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,wDAAwD,GAAG,CAAC,CAAC,CAAC;QAChF,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,2BAA2B;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE;YAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,4BAA4B;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE;YAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,2BAA2B;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE;YAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAE3F,IAAI,SAAS,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,4BAA4B;IAC5B,YAAY,CAAC,cAAc,GAAG,cAAc,CAAC;IAC7C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,cAAc;IACjB,EAAE,CAAiB;IAClB,IAAI,CAAS;IACb,QAAQ,CAAS;IACjB,IAAI,CAAa;IAClB,KAAK,CAAW,CAAC,yBAAyB;IAC1C,GAAG,GAAG,CAAC,CAAC;IACR,WAAW,GAAG,IAAI,CAAC;IAE3B,YAAY,EAAkB,EAAE,IAAY,EAAE,QAAgB,EAAE,IAAgB;QAC9E,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IACO,OAAO;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,CAAC,KAAe;QACpB,KAAK,MAAM,CAAC,IAAI,KAAK;YACnB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAI,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAa;QACnB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACf,CAAC;IACD,KAAK;QACH,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjB,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAU,EAAE,CAAC;QAC9C,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpC,kDAAkD;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACpB,OAAO,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"tower.d.ts","sourceRoot":"","sources":["../src/abstract/tower.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"tower.d.ts","sourceRoot":"","sources":["../src/abstract/tower.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAO/E,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3C,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AAGxB,MAAM,MAAM,GAAG,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACzE,MAAM,MAAM,GAAG,GAAG;IAAE,EAAE,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,GAAG,CAAA;CAAE,CAAC;AAChD,MAAM,MAAM,IAAI,GAAG;IAAE,EAAE,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,GAAG,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAC9C,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;CAC/C,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;IACrC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;IAC3C,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC;IACpC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC1B,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK;QAAE,EAAE,EAAE,EAAE,CAAC;QAAC,EAAE,EAAE,EAAE,CAAA;KAAE,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,CAAC;IAC3D,UAAU,EAAE,GAAG,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;IAC3C,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC;IAC7B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC;IAClC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC;IACnD,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C,CAAC;AA2BF,wBAAgB,YAAY,CAC1B,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,GAAG,GACR;IACD,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzF,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1F,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;CACb,CA8BA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,EAAE,CAAC;IAChB,cAAc,EAAE,WAAW,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC5B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7B,qBAAqB,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;CAC5C,CAAC;AAisBF,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG;IAC1C,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf,CAMA"} |
+43
-19
@@ -1,5 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.psiFrobenius = psiFrobenius; | ||
| exports.tower12 = tower12; | ||
| /** | ||
@@ -17,4 +13,4 @@ * Towered extension fields. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const mod = require("./modular.js"); | ||
| import { bitGet, bitLen, concatBytes, notImplemented } from "../utils.js"; | ||
| import * as mod from "./modular.js"; | ||
| // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
@@ -40,3 +36,3 @@ // prettier-ignore | ||
| // This works same at least for bls12-381, bn254 and bls12-377 | ||
| function psiFrobenius(Fp, Fp2, base) { | ||
| export function psiFrobenius(Fp, Fp2, base) { | ||
| // GLV endomorphism Ψ(P) | ||
@@ -78,4 +74,15 @@ const PSI_X = Fp2.pow(base, (Fp.ORDER - _1n) / _3n); // u^((p-1)/3) | ||
| class _Field2 { | ||
| ORDER; | ||
| BITS; | ||
| BYTES; | ||
| isLE; | ||
| ZERO; | ||
| ONE; | ||
| Fp; | ||
| NONRESIDUE; | ||
| mulByB; | ||
| Fp_NONRESIDUE; | ||
| Fp_div2; | ||
| FROBENIUS_COEFFICIENTS; | ||
| constructor(Fp, opts = {}) { | ||
| this.MASK = _1n; | ||
| const ORDER = Fp.ORDER; | ||
@@ -85,4 +92,4 @@ const FP2_ORDER = ORDER * ORDER; | ||
| this.ORDER = FP2_ORDER; | ||
| this.BITS = (0, utils_ts_1.bitLen)(FP2_ORDER); | ||
| this.BYTES = Math.ceil((0, utils_ts_1.bitLen)(FP2_ORDER) / 8); | ||
| this.BITS = bitLen(FP2_ORDER); | ||
| this.BYTES = Math.ceil(bitLen(FP2_ORDER) / 8); | ||
| this.isLE = Fp.isLE; | ||
@@ -248,3 +255,3 @@ this.ZERO = { c0: Fp.ZERO, c1: Fp.ZERO }; | ||
| toBytes({ c0, c1 }) { | ||
| return (0, utils_ts_1.concatBytes)(this.Fp.toBytes(c0), this.Fp.toBytes(c1)); | ||
| return concatBytes(this.Fp.toBytes(c0), this.Fp.toBytes(c1)); | ||
| } | ||
@@ -281,4 +288,12 @@ cmov({ c0, c1 }, { c0: r0, c1: r1 }, c) { | ||
| class _Field6 { | ||
| ORDER; | ||
| BITS; | ||
| BYTES; | ||
| isLE; | ||
| ZERO; | ||
| ONE; | ||
| Fp2; | ||
| FROBENIUS_COEFFICIENTS_1; | ||
| FROBENIUS_COEFFICIENTS_2; | ||
| constructor(Fp2) { | ||
| this.MASK = _1n; | ||
| this.Fp2 = Fp2; | ||
@@ -383,3 +398,3 @@ this.ORDER = Fp2.ORDER; // TODO: unused, but need to verify | ||
| sqrt(_) { | ||
| return (0, utils_ts_1.notImplemented)(); | ||
| return notImplemented(); | ||
| } | ||
@@ -421,3 +436,3 @@ // Do we need division by bigint at all? Should be done via order: | ||
| const { Fp2 } = this; | ||
| return (0, utils_ts_1.concatBytes)(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2)); | ||
| return concatBytes(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2)); | ||
| } | ||
@@ -487,4 +502,13 @@ cmov({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }, c) { | ||
| class _Field12 { | ||
| ORDER; | ||
| BITS; | ||
| BYTES; | ||
| isLE; | ||
| ZERO; | ||
| ONE; | ||
| Fp6; | ||
| FROBENIUS_COEFFICIENTS; | ||
| X_LEN; | ||
| finalExponentiate; | ||
| constructor(Fp6, opts) { | ||
| this.MASK = _1n; | ||
| const { Fp2 } = Fp6; | ||
@@ -526,3 +550,3 @@ const { Fp } = Fp2; | ||
| sqrt(_) { | ||
| (0, utils_ts_1.notImplemented)(); | ||
| notImplemented(); | ||
| } | ||
@@ -608,3 +632,3 @@ inv({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| return (0, utils_ts_1.concatBytes)(Fp6.toBytes(c0), Fp6.toBytes(c1)); | ||
| return concatBytes(Fp6.toBytes(c0), Fp6.toBytes(c1)); | ||
| } | ||
@@ -716,3 +740,3 @@ cmov({ c0, c1 }, { c0: r0, c1: r1 }, c) { | ||
| z = this._cyclotomicSquare(z); | ||
| if ((0, utils_ts_1.bitGet)(n, i)) | ||
| if (bitGet(n, i)) | ||
| z = this.mul(z, num); | ||
@@ -723,3 +747,3 @@ } | ||
| } | ||
| function tower12(opts) { | ||
| export function tower12(opts) { | ||
| const Fp = mod.Field(opts.ORDER); | ||
@@ -726,0 +750,0 @@ const Fp2 = new _Field2(Fp, opts); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"tower.js","sourceRoot":"","sources":["../src/abstract/tower.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"tower.js","sourceRoot":"","sources":["../src/abstract/tower.ts"],"names":[],"mappings":"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"} |
+11
-145
@@ -1,4 +0,4 @@ | ||
| import { type CHash, type Hex, type PrivKey } from '../utils.ts'; | ||
| import { type AffinePoint, type BasicCurve, type CurveLengths, type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { type IField, type NLength } from './modular.ts'; | ||
| import { type CHash } from '../utils.ts'; | ||
| import { type AffinePoint, type CurveLengths, type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { type IField } from './modular.ts'; | ||
| export type { AffinePoint }; | ||
@@ -80,16 +80,2 @@ export type HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array; | ||
| toHex(isCompressed?: boolean): string; | ||
| /** @deprecated use `.X` */ | ||
| readonly px: T; | ||
| /** @deprecated use `.Y` */ | ||
| readonly py: T; | ||
| /** @deprecated use `.Z` */ | ||
| readonly pz: T; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(isCompressed?: boolean): Uint8Array; | ||
| /** @deprecated use `multiplyUnsafe` */ | ||
| multiplyAndAddUnsafe(Q: WeierstrassPoint<T>, a: bigint, b: bigint): WeierstrassPoint<T> | undefined; | ||
| /** @deprecated use `p.y % 2n === 0n` */ | ||
| hasEvenY(): boolean; | ||
| /** @deprecated use `p.precompute(windowSize)` */ | ||
| _setWindowSize(windowSize: number): void; | ||
| } | ||
@@ -101,8 +87,2 @@ /** Static methods for 3D XYZ projective points. */ | ||
| CURVE(): WeierstrassOpts<T>; | ||
| /** @deprecated use `Point.BASE.multiply(Point.Fn.fromBytes(privateKey))` */ | ||
| fromPrivateKey(privateKey: PrivKey): WeierstrassPoint<T>; | ||
| /** @deprecated use `import { normalizeZ } from '@noble/curves/abstract/curve.js';` */ | ||
| normalizeZ(points: WeierstrassPoint<T>[]): WeierstrassPoint<T>[]; | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| msm(points: WeierstrassPoint<T>[], scalars: bigint[]): WeierstrassPoint<T>; | ||
| } | ||
@@ -163,17 +143,9 @@ /** | ||
| }; | ||
| getPublicKey: (secretKey: PrivKey, isCompressed?: boolean) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: PrivKey, publicKeyB: Hex, isCompressed?: boolean) => Uint8Array; | ||
| getPublicKey: (secretKey: Uint8Array, isCompressed?: boolean) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: Uint8Array, publicKeyB: Uint8Array, isCompressed?: boolean) => Uint8Array; | ||
| Point: WeierstrassPointCons<bigint>; | ||
| utils: { | ||
| isValidSecretKey: (secretKey: PrivKey) => boolean; | ||
| isValidSecretKey: (secretKey: Uint8Array) => boolean; | ||
| isValidPublicKey: (publicKey: Uint8Array, isCompressed?: boolean) => boolean; | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `isValidSecretKey` */ | ||
| isValidPrivateKey: (secretKey: PrivKey) => boolean; | ||
| /** @deprecated use `Point.Fn.fromBytes()` */ | ||
| normPrivateKeyToScalar: (key: PrivKey) => bigint; | ||
| /** @deprecated use `point.precompute()` */ | ||
| precompute: (windowSize?: number, point?: WeierstrassPoint<bigint>) => WeierstrassPoint<bigint>; | ||
| }; | ||
@@ -187,3 +159,3 @@ lengths: CurveLengths; | ||
| export interface ECDSA extends ECDH { | ||
| sign: (message: Hex, secretKey: PrivKey, opts?: ECDSASignOpts) => ECDSASigRecovered; | ||
| sign: (message: Uint8Array, secretKey: Uint8Array, opts?: ECDSASignOpts) => Uint8Array; | ||
| verify: (signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array, opts?: ECDSAVerifyOpts) => boolean; | ||
@@ -226,3 +198,2 @@ recoverPublicKey(signature: Uint8Array, message: Uint8Array, opts?: ECDSARecoverOpts): Uint8Array; | ||
| export declare const DER: IDER; | ||
| export declare function _normFnElement(Fn: IField<bigint>, key: PrivKey): bigint; | ||
| /** | ||
@@ -245,3 +216,3 @@ * Creates weierstrass Point constructor, based on specified curve options. | ||
| */ | ||
| export declare function weierstrassN<T>(params: WeierstrassOpts<T>, extraOpts?: WeierstrassExtraOpts<T>): WeierstrassPointCons<T>; | ||
| export declare function weierstrass<T>(params: WeierstrassOpts<T>, extraOpts?: WeierstrassExtraOpts<T>): WeierstrassPointCons<T>; | ||
| /** Methods of ECDSA signature instance. */ | ||
@@ -252,24 +223,9 @@ export interface ECDSASignature { | ||
| readonly recovery?: number; | ||
| addRecoveryBit(recovery: number): ECDSASigRecovered; | ||
| addRecoveryBit(recovery: number): ECDSASignature & { | ||
| readonly recovery: number; | ||
| }; | ||
| hasHighS(): boolean; | ||
| toBytes(format?: string): Uint8Array; | ||
| toHex(format?: string): string; | ||
| /** @deprecated */ | ||
| assertValidity(): void; | ||
| /** @deprecated */ | ||
| normalizeS(): ECDSASignature; | ||
| /** @deprecated use standalone method `curve.recoverPublicKey(sig.toBytes('recovered'), msg)` */ | ||
| recoverPublicKey(msgHash: Hex): WeierstrassPoint<bigint>; | ||
| /** @deprecated use `.toBytes('compact')` */ | ||
| toCompactRawBytes(): Uint8Array; | ||
| /** @deprecated use `.toBytes('compact')` */ | ||
| toCompactHex(): string; | ||
| /** @deprecated use `.toBytes('der')` */ | ||
| toDERRawBytes(): Uint8Array; | ||
| /** @deprecated use `.toBytes('der')` */ | ||
| toDERHex(): string; | ||
| } | ||
| export type ECDSASigRecovered = ECDSASignature & { | ||
| readonly recovery: number; | ||
| }; | ||
| /** Methods of ECDSA signature constructor. */ | ||
@@ -280,6 +236,2 @@ export type ECDSASignatureCons = { | ||
| fromHex(hex: string, format?: ECDSASigFormat): ECDSASignature; | ||
| /** @deprecated use `.fromBytes(bytes, 'compact')` */ | ||
| fromCompact(hex: Hex): ECDSASignature; | ||
| /** @deprecated use `.fromBytes(bytes, 'der')` */ | ||
| fromDER(hex: Hex): ECDSASignature; | ||
| }; | ||
@@ -335,88 +287,2 @@ /** | ||
| export declare function ecdsa(Point: WeierstrassPointCons<bigint>, hash: CHash, ecdsaOpts?: ECDSAOpts): ECDSA; | ||
| /** @deprecated */ | ||
| export type SignatureType = ECDSASignature; | ||
| /** @deprecated */ | ||
| export type RecoveredSignatureType = ECDSASigRecovered; | ||
| /** @deprecated */ | ||
| export type SignatureLike = { | ||
| r: bigint; | ||
| s: bigint; | ||
| }; | ||
| /** @deprecated use `Uint8Array | boolean` */ | ||
| export type Entropy = Hex | boolean; | ||
| export type BasicWCurve<T> = BasicCurve<T> & { | ||
| a: T; | ||
| b: T; | ||
| allowedPrivateKeyLengths?: readonly number[]; | ||
| wrapPrivateKey?: boolean; | ||
| endo?: EndomorphismOpts; | ||
| isTorsionFree?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean; | ||
| clearCofactor?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>; | ||
| }; | ||
| /** @deprecated use ECDSASignOpts */ | ||
| export type SignOpts = ECDSASignOpts; | ||
| /** @deprecated use ECDSASignOpts */ | ||
| export type VerOpts = ECDSAVerifyOpts; | ||
| /** @deprecated use WeierstrassPoint */ | ||
| export type ProjPointType<T> = WeierstrassPoint<T>; | ||
| /** @deprecated use WeierstrassPointCons */ | ||
| export type ProjConstructor<T> = WeierstrassPointCons<T>; | ||
| export type CurvePointsType<T> = BasicWCurve<T> & { | ||
| fromBytes?: (bytes: Uint8Array) => AffinePoint<T>; | ||
| toBytes?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>, isCompressed: boolean) => Uint8Array; | ||
| }; | ||
| export type CurvePointsTypeWithLength<T> = Readonly<CurvePointsType<T> & Partial<NLength>>; | ||
| export type CurvePointsRes<T> = { | ||
| Point: WeierstrassPointCons<T>; | ||
| /** @deprecated use `Point.CURVE()` */ | ||
| CURVE: CurvePointsType<T>; | ||
| /** @deprecated use `Point` */ | ||
| ProjectivePoint: WeierstrassPointCons<T>; | ||
| /** @deprecated use `Point.Fn.fromBytes(privateKey)` */ | ||
| normPrivateKeyToScalar: (key: PrivKey) => bigint; | ||
| /** @deprecated */ | ||
| weierstrassEquation: (x: T) => T; | ||
| /** @deprecated use `Point.Fn.isValidNot0(num)` */ | ||
| isWithinCurveOrder: (num: bigint) => boolean; | ||
| }; | ||
| /** @deprecated use `Uint8Array` */ | ||
| export type PubKey = Hex | WeierstrassPoint<bigint>; | ||
| export type CurveType = BasicWCurve<bigint> & { | ||
| hash: CHash; | ||
| hmac?: HmacFnSync; | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| lowS?: boolean; | ||
| bits2int?: (bytes: Uint8Array) => bigint; | ||
| bits2int_modN?: (bytes: Uint8Array) => bigint; | ||
| }; | ||
| export type CurveFn = { | ||
| /** @deprecated use `Point.CURVE()` */ | ||
| CURVE: CurvePointsType<bigint>; | ||
| keygen: ECDSA['keygen']; | ||
| getPublicKey: ECDSA['getPublicKey']; | ||
| getSharedSecret: ECDSA['getSharedSecret']; | ||
| sign: ECDSA['sign']; | ||
| verify: ECDSA['verify']; | ||
| Point: WeierstrassPointCons<bigint>; | ||
| /** @deprecated use `Point` */ | ||
| ProjectivePoint: WeierstrassPointCons<bigint>; | ||
| Signature: ECDSASignatureCons; | ||
| utils: ECDSA['utils']; | ||
| lengths: ECDSA['lengths']; | ||
| }; | ||
| /** @deprecated use `weierstrass` in newer releases */ | ||
| export declare function weierstrassPoints<T>(c: CurvePointsTypeWithLength<T>): CurvePointsRes<T>; | ||
| export type WsPointComposed<T> = { | ||
| CURVE: WeierstrassOpts<T>; | ||
| curveOpts: WeierstrassExtraOpts<T>; | ||
| }; | ||
| export type WsComposed = { | ||
| /** @deprecated use `Point.CURVE()` */ | ||
| CURVE: WeierstrassOpts<bigint>; | ||
| hash: CHash; | ||
| curveOpts: WeierstrassExtraOpts<bigint>; | ||
| ecdsaOpts: ECDSAOpts; | ||
| }; | ||
| export declare function _legacyHelperEquat<T>(Fp: IField<T>, a: T, b: T): (x: T) => T; | ||
| export declare function weierstrass(c: CurveType): CurveFn; | ||
| //# sourceMappingURL=weierstrass.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"weierstrass.d.ts","sourceRoot":"","sources":["../src/abstract/weierstrass.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"weierstrass.d.ts","sourceRoot":"","sources":["../src/abstract/weierstrass.ts"],"names":[],"mappings":"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"} |
+122
-331
@@ -1,14 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.DER = exports.DERErr = void 0; | ||
| exports._splitEndoScalar = _splitEndoScalar; | ||
| exports._normFnElement = _normFnElement; | ||
| exports.weierstrassN = weierstrassN; | ||
| exports.SWUFpSqrtRatio = SWUFpSqrtRatio; | ||
| exports.mapToCurveSimpleSWU = mapToCurveSimpleSWU; | ||
| exports.ecdh = ecdh; | ||
| exports.ecdsa = ecdsa; | ||
| exports.weierstrassPoints = weierstrassPoints; | ||
| exports._legacyHelperEquat = _legacyHelperEquat; | ||
| exports.weierstrass = weierstrass; | ||
| /** | ||
@@ -41,7 +28,7 @@ * Short Weierstrass curve methods. The formula is: y² = x³ + ax + b. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const hmac_js_1 = require("@noble/hashes/hmac.js"); | ||
| const utils_1 = require("@noble/hashes/utils"); | ||
| const utils_ts_1 = require("../utils.js"); | ||
| const curve_ts_1 = require("./curve.js"); | ||
| const modular_ts_1 = require("./modular.js"); | ||
| import { hmac as nobleHmac } from '@noble/hashes/hmac.js'; | ||
| import { ahash } from '@noble/hashes/utils.js'; | ||
| import { _validateObject, abool, abytes, aInRange, bitLen, bitMask, bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, hexToBytes, isBytes, memoized, numberToHexUnpadded, randomBytes as wcRandomBytes, } from "../utils.js"; | ||
| import { _createCurveFields, mulEndoUnsafe, negateCt, normalizeZ, wNAF, } from "./curve.js"; | ||
| import { FpInvertBatch, getMinHashLength, mapHashToField, validateField, } from "./modular.js"; | ||
| // We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value) | ||
@@ -52,3 +39,3 @@ const divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n) / den; | ||
| */ | ||
| function _splitEndoScalar(k, basis, n) { | ||
| export function _splitEndoScalar(k, basis, n) { | ||
| // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)` | ||
@@ -72,3 +59,3 @@ // Since part can be negative, we need to do this on point. | ||
| // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it. | ||
| const MAX_NUM = (0, utils_ts_1.bitMask)(Math.ceil((0, utils_ts_1.bitLen)(n) / 2)) + _1n; // Half bits of N | ||
| const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N | ||
| if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) { | ||
@@ -90,4 +77,4 @@ throw new Error('splitScalar (endomorphism): failed, k=' + k); | ||
| } | ||
| (0, utils_ts_1._abool2)(optsn.lowS, 'lowS'); | ||
| (0, utils_ts_1._abool2)(optsn.prehash, 'prehash'); | ||
| abool(optsn.lowS, 'lowS'); | ||
| abool(optsn.prehash, 'prehash'); | ||
| if (optsn.format !== undefined) | ||
@@ -97,3 +84,3 @@ validateSigFormat(optsn.format); | ||
| } | ||
| class DERErr extends Error { | ||
| export class DERErr extends Error { | ||
| constructor(m = '') { | ||
@@ -103,3 +90,2 @@ super(m); | ||
| } | ||
| exports.DERErr = DERErr; | ||
| /** | ||
@@ -112,3 +98,3 @@ * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format: | ||
| */ | ||
| exports.DER = { | ||
| export const DER = { | ||
| // asn.1 DER encoding utils | ||
@@ -119,3 +105,3 @@ Err: DERErr, | ||
| encode: (tag, data) => { | ||
| const { Err: E } = exports.DER; | ||
| const { Err: E } = DER; | ||
| if (tag < 0 || tag > 256) | ||
@@ -126,8 +112,8 @@ throw new E('tlv.encode: wrong tag'); | ||
| const dataLen = data.length / 2; | ||
| const len = (0, utils_ts_1.numberToHexUnpadded)(dataLen); | ||
| if ((len.length / 2) & 128) | ||
| const len = numberToHexUnpadded(dataLen); | ||
| if ((len.length / 2) & 0b1000_0000) | ||
| throw new E('tlv.encode: long form length too big'); | ||
| // length of length with long form flag | ||
| const lenLen = dataLen > 127 ? (0, utils_ts_1.numberToHexUnpadded)((len.length / 2) | 128) : ''; | ||
| const t = (0, utils_ts_1.numberToHexUnpadded)(tag); | ||
| const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : ''; | ||
| const t = numberToHexUnpadded(tag); | ||
| return t + lenLen + len + data; | ||
@@ -137,3 +123,3 @@ }, | ||
| decode(tag, data) { | ||
| const { Err: E } = exports.DER; | ||
| const { Err: E } = DER; | ||
| let pos = 0; | ||
@@ -145,3 +131,3 @@ if (tag < 0 || tag > 256) | ||
| const first = data[pos++]; | ||
| const isLong = !!(first & 128); // First bit of first length byte is flag for short/long form | ||
| const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form | ||
| let length = 0; | ||
@@ -152,3 +138,3 @@ if (!isLong) | ||
| // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)] | ||
| const lenLen = first & 127; | ||
| const lenLen = first & 0b0111_1111; | ||
| if (!lenLen) | ||
@@ -181,6 +167,6 @@ throw new E('tlv.decode(long): indefinite length not supported'); | ||
| encode(num) { | ||
| const { Err: E } = exports.DER; | ||
| const { Err: E } = DER; | ||
| if (num < _0n) | ||
| throw new E('integer: negative integers are not allowed'); | ||
| let hex = (0, utils_ts_1.numberToHexUnpadded)(num); | ||
| let hex = numberToHexUnpadded(num); | ||
| // Pad with zero byte if negative flag is present | ||
@@ -194,14 +180,14 @@ if (Number.parseInt(hex[0], 16) & 0b1000) | ||
| decode(data) { | ||
| const { Err: E } = exports.DER; | ||
| if (data[0] & 128) | ||
| const { Err: E } = DER; | ||
| if (data[0] & 0b1000_0000) | ||
| throw new E('invalid signature integer: negative'); | ||
| if (data[0] === 0x00 && !(data[1] & 128)) | ||
| if (data[0] === 0x00 && !(data[1] & 0b1000_0000)) | ||
| throw new E('invalid signature integer: unnecessary leading zero'); | ||
| return (0, utils_ts_1.bytesToNumberBE)(data); | ||
| return bytesToNumberBE(data); | ||
| }, | ||
| }, | ||
| toSig(hex) { | ||
| toSig(bytes) { | ||
| // parse DER signature | ||
| const { Err: E, _int: int, _tlv: tlv } = exports.DER; | ||
| const data = (0, utils_ts_1.ensureBytes)('signature', hex); | ||
| const { Err: E, _int: int, _tlv: tlv } = DER; | ||
| const data = abytes(bytes, undefined, 'signature'); | ||
| const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data); | ||
@@ -217,3 +203,3 @@ if (seqLeftBytes.length) | ||
| hexFromSig(sig) { | ||
| const { _tlv: tlv, _int: int } = exports.DER; | ||
| const { _tlv: tlv, _int: int } = DER; | ||
| const rs = tlv.encode(0x02, int.encode(sig.r)); | ||
@@ -228,21 +214,2 @@ const ss = tlv.encode(0x02, int.encode(sig.s)); | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4); | ||
| function _normFnElement(Fn, key) { | ||
| const { BYTES: expected } = Fn; | ||
| let num; | ||
| if (typeof key === 'bigint') { | ||
| num = key; | ||
| } | ||
| else { | ||
| let bytes = (0, utils_ts_1.ensureBytes)('private key', key); | ||
| try { | ||
| num = Fn.fromBytes(bytes); | ||
| } | ||
| catch (error) { | ||
| throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`); | ||
| } | ||
| } | ||
| if (!Fn.isValidNot0(num)) | ||
| throw new Error('invalid private key: out of range [1..N-1]'); | ||
| return num; | ||
| } | ||
| /** | ||
@@ -265,8 +232,8 @@ * Creates weierstrass Point constructor, based on specified curve options. | ||
| */ | ||
| function weierstrassN(params, extraOpts = {}) { | ||
| const validated = (0, curve_ts_1._createCurveFields)('weierstrass', params, extraOpts); | ||
| export function weierstrass(params, extraOpts = {}) { | ||
| const validated = _createCurveFields('weierstrass', params, extraOpts); | ||
| const { Fp, Fn } = validated; | ||
| let CURVE = validated.CURVE; | ||
| const { h: cofactor, n: CURVE_ORDER } = CURVE; | ||
| (0, utils_ts_1._validateObject)(extraOpts, {}, { | ||
| _validateObject(extraOpts, {}, { | ||
| allowInfinityPoint: 'boolean', | ||
@@ -296,14 +263,14 @@ clearCofactor: 'function', | ||
| const bx = Fp.toBytes(x); | ||
| (0, utils_ts_1._abool2)(isCompressed, 'isCompressed'); | ||
| abool(isCompressed, 'isCompressed'); | ||
| if (isCompressed) { | ||
| assertCompressionIsSupported(); | ||
| const hasEvenY = !Fp.isOdd(y); | ||
| return (0, utils_ts_1.concatBytes)(pprefix(hasEvenY), bx); | ||
| return concatBytes(pprefix(hasEvenY), bx); | ||
| } | ||
| else { | ||
| return (0, utils_ts_1.concatBytes)(Uint8Array.of(0x04), bx, Fp.toBytes(y)); | ||
| return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y)); | ||
| } | ||
| } | ||
| function pointFromBytes(bytes) { | ||
| (0, utils_ts_1._abytes2)(bytes, undefined, 'Point'); | ||
| abytes(bytes, undefined, 'Point'); | ||
| const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65 | ||
@@ -390,3 +357,3 @@ const length = bytes.length; | ||
| // (X, Y, Z) ∋ (x=X/Z, y=Y/Z) | ||
| const toAffineMemo = (0, utils_ts_1.memoized)((p, iz) => { | ||
| const toAffineMemo = memoized((p, iz) => { | ||
| const { X, Y, Z } = p; | ||
@@ -412,3 +379,3 @@ // Fast-path for normalized points | ||
| // Otherwise true will be return | ||
| const assertValidMemo = (0, utils_ts_1.memoized)((p) => { | ||
| const assertValidMemo = memoized((p) => { | ||
| if (p.is0()) { | ||
@@ -434,4 +401,4 @@ // (0, 1, 0) aka ZERO is invalid in most contexts. | ||
| k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z); | ||
| k1p = (0, curve_ts_1.negateCt)(k1neg, k1p); | ||
| k2p = (0, curve_ts_1.negateCt)(k2neg, k2p); | ||
| k1p = negateCt(k1neg, k1p); | ||
| k2p = negateCt(k2neg, k2p); | ||
| return k1p.add(k2p); | ||
@@ -445,2 +412,13 @@ } | ||
| class Point { | ||
| // base / generator point | ||
| static BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE); | ||
| // zero / infinity / identity point | ||
| static ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0 | ||
| // math field | ||
| static Fp = Fp; | ||
| // scalar field | ||
| static Fn = Fn; | ||
| X; | ||
| Y; | ||
| Z; | ||
| /** Does NOT validate if the point is valid. Use `.assertValidity()`. */ | ||
@@ -469,3 +447,3 @@ constructor(X, Y, Z) { | ||
| static fromBytes(bytes) { | ||
| const P = Point.fromAffine(decodePoint((0, utils_ts_1._abytes2)(bytes, undefined, 'point'))); | ||
| const P = Point.fromAffine(decodePoint(abytes(bytes, undefined, 'point'))); | ||
| P.assertValidity(); | ||
@@ -475,3 +453,3 @@ return P; | ||
| static fromHex(hex) { | ||
| return Point.fromBytes((0, utils_ts_1.ensureBytes)('pointHex', hex)); | ||
| return Point.fromBytes(hexToBytes(hex)); | ||
| } | ||
@@ -635,3 +613,3 @@ get x() { | ||
| let point, fake; // Fake point is used to const-time mult | ||
| const mul = (n) => wnaf.cached(this, n, (p) => (0, curve_ts_1.normalizeZ)(Point, p)); | ||
| const mul = (n) => wnaf.cached(this, n, (p) => normalizeZ(Point, p)); | ||
| /** See docs for {@link EndomorphismOpts} */ | ||
@@ -651,3 +629,3 @@ if (endo) { | ||
| // Normalize `z` for both points, but return only real one | ||
| return (0, curve_ts_1.normalizeZ)(Point, [point, fake])[0]; | ||
| return normalizeZ(Point, [point, fake])[0]; | ||
| } | ||
@@ -672,3 +650,3 @@ /** | ||
| const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc); | ||
| const { p1, p2 } = (0, curve_ts_1.mulEndoUnsafe)(Point, p, k1, k2); // 30% faster vs wnaf.unsafe | ||
| const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe | ||
| return finishEndo(endo.beta, p1, p2, k1neg, k2neg); | ||
@@ -716,3 +694,3 @@ } | ||
| toBytes(isCompressed = true) { | ||
| (0, utils_ts_1._abool2)(isCompressed, 'isCompressed'); | ||
| abool(isCompressed, 'isCompressed'); | ||
| this.assertValidity(); | ||
@@ -722,3 +700,3 @@ return encodePoint(Point, this, isCompressed); | ||
| toHex(isCompressed = true) { | ||
| return (0, utils_ts_1.bytesToHex)(this.toBytes(isCompressed)); | ||
| return bytesToHex(this.toBytes(isCompressed)); | ||
| } | ||
@@ -728,38 +706,5 @@ toString() { | ||
| } | ||
| // TODO: remove | ||
| get px() { | ||
| return this.X; | ||
| } | ||
| get py() { | ||
| return this.X; | ||
| } | ||
| get pz() { | ||
| return this.Z; | ||
| } | ||
| toRawBytes(isCompressed = true) { | ||
| return this.toBytes(isCompressed); | ||
| } | ||
| _setWindowSize(windowSize) { | ||
| this.precompute(windowSize); | ||
| } | ||
| static normalizeZ(points) { | ||
| return (0, curve_ts_1.normalizeZ)(Point, points); | ||
| } | ||
| static msm(points, scalars) { | ||
| return (0, curve_ts_1.pippenger)(Point, Fn, points, scalars); | ||
| } | ||
| static fromPrivateKey(privateKey) { | ||
| return Point.BASE.multiply(_normFnElement(Fn, privateKey)); | ||
| } | ||
| } | ||
| // base / generator point | ||
| Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE); | ||
| // zero / infinity / identity point | ||
| Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0 | ||
| // math field | ||
| Point.Fp = Fp; | ||
| // scalar field | ||
| Point.Fn = Fn; | ||
| const bits = Fn.BITS; | ||
| const wnaf = new curve_ts_1.wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits); | ||
| const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits); | ||
| Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms. | ||
@@ -781,3 +726,3 @@ return Point; | ||
| */ | ||
| function SWUFpSqrtRatio(Fp, Z) { | ||
| export function SWUFpSqrtRatio(Fp, Z) { | ||
| // Generic implementation | ||
@@ -855,4 +800,4 @@ const q = Fp.ORDER; | ||
| */ | ||
| function mapToCurveSimpleSWU(Fp, opts) { | ||
| (0, modular_ts_1.validateField)(Fp); | ||
| export function mapToCurveSimpleSWU(Fp, opts) { | ||
| validateField(Fp); | ||
| const { A, B, Z } = opts; | ||
@@ -893,3 +838,3 @@ if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z)) | ||
| y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1) | ||
| const tv4_inv = (0, modular_ts_1.FpInvertBatch)(Fp, [tv4], true)[0]; | ||
| const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0]; | ||
| x = Fp.mul(x, tv4_inv); // 25. x = x / tv4 | ||
@@ -912,9 +857,10 @@ return { x, y }; | ||
| */ | ||
| function ecdh(Point, ecdhOpts = {}) { | ||
| export function ecdh(Point, ecdhOpts = {}) { | ||
| const { Fn } = Point; | ||
| const randomBytes_ = ecdhOpts.randomBytes || utils_ts_1.randomBytes; | ||
| const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: (0, modular_ts_1.getMinHashLength)(Fn.ORDER) }); | ||
| const randomBytes_ = ecdhOpts.randomBytes || wcRandomBytes; | ||
| const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) }); | ||
| function isValidSecretKey(secretKey) { | ||
| try { | ||
| return !!_normFnElement(Fn, secretKey); | ||
| const num = Fn.fromBytes(secretKey); | ||
| return Fn.isValidNot0(num); | ||
| } | ||
@@ -944,3 +890,3 @@ catch (error) { | ||
| function randomSecretKey(seed = randomBytes_(lengths.seed)) { | ||
| return (0, modular_ts_1.mapHashToField)((0, utils_ts_1._abytes2)(seed, lengths.seed, 'seed'), Fn.ORDER); | ||
| return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER); | ||
| } | ||
@@ -953,3 +899,3 @@ /** | ||
| function getPublicKey(secretKey, isCompressed = true) { | ||
| return Point.BASE.multiply(_normFnElement(Fn, secretKey)).toBytes(isCompressed); | ||
| return Point.BASE.multiply(Fn.fromBytes(secretKey)).toBytes(isCompressed); | ||
| } | ||
@@ -964,10 +910,8 @@ function keygen(seed) { | ||
| function isProbPub(item) { | ||
| if (typeof item === 'bigint') | ||
| return false; | ||
| if (item instanceof Point) | ||
| return true; | ||
| const { secretKey, publicKey, publicKeyUncompressed } = lengths; | ||
| if (Fn.allowedLengths || secretKey === publicKey) | ||
| if (!isBytes(item)) | ||
| return undefined; | ||
| const l = (0, utils_ts_1.ensureBytes)('key', item).length; | ||
| if (('_lengths' in Fn && Fn._lengths) || secretKey === publicKey) | ||
| return undefined; | ||
| const l = abytes(item, undefined, 'key').length; | ||
| return l === publicKey || l === publicKeyUncompressed; | ||
@@ -988,4 +932,4 @@ } | ||
| throw new Error('second arg must be public key'); | ||
| const s = _normFnElement(Fn, secretKeyA); | ||
| const b = Point.fromHex(publicKeyB); // checks for being on-curve | ||
| const s = Fn.fromBytes(secretKeyA); | ||
| const b = Point.fromBytes(publicKeyB); // checks for being on-curve | ||
| return b.multiply(s).toBytes(isCompressed); | ||
@@ -997,9 +941,2 @@ } | ||
| randomSecretKey, | ||
| // TODO: remove | ||
| isValidPrivateKey: isValidSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| normPrivateKeyToScalar: (key) => _normFnElement(Fn, key), | ||
| precompute(windowSize = 8, point = Point.BASE) { | ||
| return point.precompute(windowSize, false); | ||
| }, | ||
| }; | ||
@@ -1024,5 +961,5 @@ return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths }); | ||
| */ | ||
| function ecdsa(Point, hash, ecdsaOpts = {}) { | ||
| (0, utils_1.ahash)(hash); | ||
| (0, utils_ts_1._validateObject)(ecdsaOpts, {}, { | ||
| export function ecdsa(Point, hash, ecdsaOpts = {}) { | ||
| ahash(hash); | ||
| _validateObject(ecdsaOpts, {}, { | ||
| hmac: 'function', | ||
@@ -1034,5 +971,6 @@ lowS: 'boolean', | ||
| }); | ||
| const randomBytes = ecdsaOpts.randomBytes || utils_ts_1.randomBytes; | ||
| ecdsaOpts = Object.assign({}, ecdsaOpts); | ||
| const randomBytes = ecdsaOpts.randomBytes || wcRandomBytes; | ||
| const hmac = ecdsaOpts.hmac || | ||
| ((key, ...msgs) => (0, hmac_js_1.hmac)(hash, key, (0, utils_ts_1.concatBytes)(...msgs))); | ||
| ((key, ...msgs) => nobleHmac(hash, key, concatBytes(...msgs))); | ||
| const { Fp, Fn } = Point; | ||
@@ -1042,8 +980,7 @@ const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn; | ||
| const defaultSigOpts = { | ||
| prehash: false, | ||
| lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : false, | ||
| format: undefined, //'compact' as ECDSASigFormat, | ||
| prehash: true, | ||
| lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : true, | ||
| format: 'compact', | ||
| extraEntropy: false, | ||
| }; | ||
| const defaultSigOpts_format = 'compact'; | ||
| function isBiggerThanHalfOrder(number) { | ||
@@ -1062,3 +999,3 @@ const HALF = CURVE_ORDER >> _1n; | ||
| const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined; | ||
| return (0, utils_ts_1._abytes2)(bytes, sizer, `${format} signature`); | ||
| return abytes(bytes, sizer); | ||
| } | ||
@@ -1069,2 +1006,5 @@ /** | ||
| class Signature { | ||
| r; | ||
| s; | ||
| recovery; | ||
| constructor(r, s, recovery) { | ||
@@ -1077,7 +1017,7 @@ this.r = validateRS('r', r); // r in [1..N-1]; | ||
| } | ||
| static fromBytes(bytes, format = defaultSigOpts_format) { | ||
| static fromBytes(bytes, format = defaultSigOpts.format) { | ||
| validateSigLength(bytes, format); | ||
| let recid; | ||
| if (format === 'der') { | ||
| const { r, s } = exports.DER.toSig((0, utils_ts_1._abytes2)(bytes)); | ||
| const { r, s } = DER.toSig(abytes(bytes)); | ||
| return new Signature(r, s); | ||
@@ -1090,3 +1030,3 @@ } | ||
| } | ||
| const L = Fn.BYTES; | ||
| const L = lengths.signature / 2; | ||
| const r = bytes.subarray(0, L); | ||
@@ -1097,3 +1037,3 @@ const s = bytes.subarray(L, L * 2); | ||
| static fromHex(hex, format) { | ||
| return this.fromBytes((0, utils_ts_1.hexToBytes)(hex), format); | ||
| return this.fromBytes(hexToBytes(hex), format); | ||
| } | ||
@@ -1123,5 +1063,5 @@ addRecoveryBit(recovery) { | ||
| const x = Fp.toBytes(radj); | ||
| const R = Point.fromBytes((0, utils_ts_1.concatBytes)(pprefix((rec & 1) === 0), x)); | ||
| const R = Point.fromBytes(concatBytes(pprefix((rec & 1) === 0), x)); | ||
| const ir = Fn.inv(radj); // r^-1 | ||
| const h = bits2int_modN((0, utils_ts_1.ensureBytes)('msgHash', messageHash)); // Truncate hash | ||
| const h = bits2int_modN(abytes(messageHash, undefined, 'msgHash')); // Truncate hash | ||
| const u1 = Fn.create(-h * ir); // -hr^-1 | ||
@@ -1140,6 +1080,6 @@ const u2 = Fn.create(s * ir); // sr^-1 | ||
| } | ||
| toBytes(format = defaultSigOpts_format) { | ||
| toBytes(format = defaultSigOpts.format) { | ||
| validateSigFormat(format); | ||
| if (format === 'der') | ||
| return (0, utils_ts_1.hexToBytes)(exports.DER.hexFromSig(this)); | ||
| return hexToBytes(DER.hexFromSig(this)); | ||
| const r = Fn.toBytes(this.r); | ||
@@ -1150,32 +1090,9 @@ const s = Fn.toBytes(this.s); | ||
| throw new Error('recovery bit must be present'); | ||
| return (0, utils_ts_1.concatBytes)(Uint8Array.of(this.recovery), r, s); | ||
| return concatBytes(Uint8Array.of(this.recovery), r, s); | ||
| } | ||
| return (0, utils_ts_1.concatBytes)(r, s); | ||
| return concatBytes(r, s); | ||
| } | ||
| toHex(format) { | ||
| return (0, utils_ts_1.bytesToHex)(this.toBytes(format)); | ||
| return bytesToHex(this.toBytes(format)); | ||
| } | ||
| // TODO: remove | ||
| assertValidity() { } | ||
| static fromCompact(hex) { | ||
| return Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', hex), 'compact'); | ||
| } | ||
| static fromDER(hex) { | ||
| return Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', hex), 'der'); | ||
| } | ||
| normalizeS() { | ||
| return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this; | ||
| } | ||
| toDERRawBytes() { | ||
| return this.toBytes('der'); | ||
| } | ||
| toDERHex() { | ||
| return (0, utils_ts_1.bytesToHex)(this.toBytes('der')); | ||
| } | ||
| toCompactRawBytes() { | ||
| return this.toBytes('compact'); | ||
| } | ||
| toCompactHex() { | ||
| return (0, utils_ts_1.bytesToHex)(this.toBytes('compact')); | ||
| } | ||
| } | ||
@@ -1193,3 +1110,3 @@ // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets. | ||
| // for some cases, since bytes.length * 8 is not actual bitLength. | ||
| const num = (0, utils_ts_1.bytesToNumberBE)(bytes); // check for == u8 done here | ||
| const num = bytesToNumberBE(bytes); // check for == u8 done here | ||
| const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits | ||
@@ -1203,12 +1120,12 @@ return delta > 0 ? num >> BigInt(delta) : num; | ||
| // Pads output with zero as per spec | ||
| const ORDER_MASK = (0, utils_ts_1.bitMask)(fnBits); | ||
| const ORDER_MASK = bitMask(fnBits); | ||
| /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */ | ||
| function int2octets(num) { | ||
| // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8` | ||
| (0, utils_ts_1.aInRange)('num < 2^' + fnBits, num, _0n, ORDER_MASK); | ||
| aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK); | ||
| return Fn.toBytes(num); | ||
| } | ||
| function validateMsgAndHash(message, prehash) { | ||
| (0, utils_ts_1._abytes2)(message, undefined, 'message'); | ||
| return prehash ? (0, utils_ts_1._abytes2)(hash(message), undefined, 'prehashed message') : message; | ||
| abytes(message, undefined, 'message'); | ||
| return prehash ? abytes(hash(message), undefined, 'prehashed message') : message; | ||
| } | ||
@@ -1224,4 +1141,2 @@ /** | ||
| function prepSig(message, privateKey, opts) { | ||
| if (['recovered', 'canonical'].some((k) => k in opts)) | ||
| throw new Error('sign() legacy options not supported'); | ||
| const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts); | ||
@@ -1233,3 +1148,5 @@ message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m) | ||
| const h1int = bits2int_modN(message); | ||
| const d = _normFnElement(Fn, privateKey); // validate secret key, convert to bigint | ||
| const d = Fn.fromBytes(privateKey); // validate secret key, convert to bigint | ||
| if (!Fn.isValidNot0(d)) | ||
| throw new Error('invalid private key'); | ||
| const seedArgs = [int2octets(d), int2octets(h1int)]; | ||
@@ -1241,6 +1158,6 @@ // extraEntropy. RFC6979 3.6: additional k' (optional). | ||
| const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy; | ||
| seedArgs.push((0, utils_ts_1.ensureBytes)('extraEntropy', e)); // check for being bytes | ||
| seedArgs.push(abytes(e, undefined, 'extraEntropy')); // check for being bytes | ||
| } | ||
| const seed = (0, utils_ts_1.concatBytes)(...seedArgs); // Step D of RFC6979 3.2 | ||
| const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash! | ||
| const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2 | ||
| const m = h1int; // no need to call bits2int second time here, it is inside truncateHash! | ||
| // Converts signature params into point w r/s, checks result for validity. | ||
@@ -1257,3 +1174,3 @@ // To transform k => Signature: | ||
| // Important: all mod() calls here must be done over N | ||
| const k = bits2int(kBytes); // mod n, not mod p | ||
| const k = bits2int(kBytes); // Cannot use fields methods, since it is group element | ||
| if (!Fn.isValidNot0(k)) | ||
@@ -1291,43 +1208,7 @@ return; // Valid scalars (including k) must be in 1..N-1 | ||
| function sign(message, secretKey, opts = {}) { | ||
| message = (0, utils_ts_1.ensureBytes)('message', message); | ||
| const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2. | ||
| const drbg = (0, utils_ts_1.createHmacDrbg)(hash.outputLen, Fn.BYTES, hmac); | ||
| const drbg = createHmacDrbg(hash.outputLen, Fn.BYTES, hmac); | ||
| const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G | ||
| return sig; | ||
| return sig.toBytes(opts.format); | ||
| } | ||
| function tryParsingSig(sg) { | ||
| // Try to deduce format | ||
| let sig = undefined; | ||
| const isHex = typeof sg === 'string' || (0, utils_ts_1.isBytes)(sg); | ||
| const isObj = !isHex && | ||
| sg !== null && | ||
| typeof sg === 'object' && | ||
| typeof sg.r === 'bigint' && | ||
| typeof sg.s === 'bigint'; | ||
| if (!isHex && !isObj) | ||
| throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance'); | ||
| if (isObj) { | ||
| sig = new Signature(sg.r, sg.s); | ||
| } | ||
| else if (isHex) { | ||
| try { | ||
| sig = Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', sg), 'der'); | ||
| } | ||
| catch (derError) { | ||
| if (!(derError instanceof exports.DER.Err)) | ||
| throw derError; | ||
| } | ||
| if (!sig) { | ||
| try { | ||
| sig = Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', sg), 'compact'); | ||
| } | ||
| catch (error) { | ||
| return false; | ||
| } | ||
| } | ||
| } | ||
| if (!sig) | ||
| return false; | ||
| return sig; | ||
| } | ||
| /** | ||
@@ -1348,12 +1229,11 @@ * Verifies a signature against message and public key. | ||
| const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts); | ||
| publicKey = (0, utils_ts_1.ensureBytes)('publicKey', publicKey); | ||
| message = validateMsgAndHash((0, utils_ts_1.ensureBytes)('message', message), prehash); | ||
| if ('strict' in opts) | ||
| throw new Error('options.strict was renamed to lowS'); | ||
| const sig = format === undefined | ||
| ? tryParsingSig(signature) | ||
| : Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', signature), format); | ||
| if (sig === false) | ||
| return false; | ||
| publicKey = abytes(publicKey, undefined, 'publicKey'); | ||
| message = validateMsgAndHash(message, prehash); | ||
| if (!isBytes(signature)) { | ||
| const end = signature instanceof Signature ? ', use sig.toBytes()' : ''; | ||
| throw new Error('verify expects Uint8Array signature' + end); | ||
| } | ||
| validateSigLength(signature, format); // execute this twice because we want loud error | ||
| try { | ||
| const sig = Signature.fromBytes(signature, format); | ||
| const P = Point.fromBytes(publicKey); | ||
@@ -1396,91 +1276,2 @@ if (lowS && sig.hasHighS()) | ||
| } | ||
| /** @deprecated use `weierstrass` in newer releases */ | ||
| function weierstrassPoints(c) { | ||
| const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c); | ||
| const Point = weierstrassN(CURVE, curveOpts); | ||
| return _weierstrass_new_output_to_legacy(c, Point); | ||
| } | ||
| function _weierstrass_legacy_opts_to_new(c) { | ||
| const CURVE = { | ||
| a: c.a, | ||
| b: c.b, | ||
| p: c.Fp.ORDER, | ||
| n: c.n, | ||
| h: c.h, | ||
| Gx: c.Gx, | ||
| Gy: c.Gy, | ||
| }; | ||
| const Fp = c.Fp; | ||
| let allowedLengths = c.allowedPrivateKeyLengths | ||
| ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2)))) | ||
| : undefined; | ||
| const Fn = (0, modular_ts_1.Field)(CURVE.n, { | ||
| BITS: c.nBitLength, | ||
| allowedLengths: allowedLengths, | ||
| modFromBytes: c.wrapPrivateKey, | ||
| }); | ||
| const curveOpts = { | ||
| Fp, | ||
| Fn, | ||
| allowInfinityPoint: c.allowInfinityPoint, | ||
| endo: c.endo, | ||
| isTorsionFree: c.isTorsionFree, | ||
| clearCofactor: c.clearCofactor, | ||
| fromBytes: c.fromBytes, | ||
| toBytes: c.toBytes, | ||
| }; | ||
| return { CURVE, curveOpts }; | ||
| } | ||
| function _ecdsa_legacy_opts_to_new(c) { | ||
| const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c); | ||
| const ecdsaOpts = { | ||
| hmac: c.hmac, | ||
| randomBytes: c.randomBytes, | ||
| lowS: c.lowS, | ||
| bits2int: c.bits2int, | ||
| bits2int_modN: c.bits2int_modN, | ||
| }; | ||
| return { CURVE, curveOpts, hash: c.hash, ecdsaOpts }; | ||
| } | ||
| function _legacyHelperEquat(Fp, a, b) { | ||
| /** | ||
| * y² = x³ + ax + b: Short weierstrass curve formula. Takes x, returns y². | ||
| * @returns y² | ||
| */ | ||
| function weierstrassEquation(x) { | ||
| const x2 = Fp.sqr(x); // x * x | ||
| const x3 = Fp.mul(x2, x); // x² * x | ||
| return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x³ + a * x + b | ||
| } | ||
| return weierstrassEquation; | ||
| } | ||
| function _weierstrass_new_output_to_legacy(c, Point) { | ||
| const { Fp, Fn } = Point; | ||
| function isWithinCurveOrder(num) { | ||
| return (0, utils_ts_1.inRange)(num, _1n, Fn.ORDER); | ||
| } | ||
| const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b); | ||
| return Object.assign({}, { | ||
| CURVE: c, | ||
| Point: Point, | ||
| ProjectivePoint: Point, | ||
| normPrivateKeyToScalar: (key) => _normFnElement(Fn, key), | ||
| weierstrassEquation, | ||
| isWithinCurveOrder, | ||
| }); | ||
| } | ||
| function _ecdsa_new_output_to_legacy(c, _ecdsa) { | ||
| const Point = _ecdsa.Point; | ||
| return Object.assign({}, _ecdsa, { | ||
| ProjectivePoint: Point, | ||
| CURVE: Object.assign({}, c, (0, modular_ts_1.nLength)(Point.Fn.ORDER, Point.Fn.BITS)), | ||
| }); | ||
| } | ||
| // _ecdsa_legacy | ||
| function weierstrass(c) { | ||
| const { CURVE, curveOpts, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c); | ||
| const Point = weierstrassN(CURVE, curveOpts); | ||
| const signs = ecdsa(Point, hash, ecdsaOpts); | ||
| return _ecdsa_new_output_to_legacy(c, signs); | ||
| } | ||
| //# sourceMappingURL=weierstrass.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"weierstrass.js","sourceRoot":"","sources":["../src/abstract/weierstrass.ts"],"names":[],"mappings":"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AC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,yDAAyD;QACzD,gEAAgE;QAChE,iDAAiD;QACjD,uCAAuC;QACvC,GAAG,CAAC,KAAY;YACd,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YACtC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,kBAAkB;YAChE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;YAClC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;YAClC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YACnC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,QAAQ,CAAC,KAAY;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,GAAG;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED;;;;;;;;WAQG;QACH,QAAQ,CAAC,MAAc;YACrB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC,eAAe;YAC7F,IAAI,KAAY,EAAE,IAAW,CAAC,CAAC,wCAAwC;YACvE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7E,4CAA4C;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7B,KAAK,GAAG,CAAC,CAAC;gBACV,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;YACD,0DAA0D;YAC1D,OAAO,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED;;;;WAIG;QACH,cAAc,CAAC,EAAU;YACvB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAa,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC,aAAa;YACnF,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;YAC7C,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAO,CAAC,CAAC,CAAC,YAAY;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAA,wBAAa,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;gBAChF,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,oBAAoB,CAAC,CAAQ,EAAE,CAAS,EAAE,CAAS;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,CAAC;QAED;;;WAGG;QACH,QAAQ,CAAC,SAAa;YACpB,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QAED;;;WAGG;QACH,aAAa;YACX,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAClC,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QAED,aAAa;YACX,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC,CAAC,YAAY;YAC/C,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAU,CAAC;YAC9D,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,YAAY;YACV,mCAAmC;YACnC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,YAAY,GAAG,IAAI;YACzB,IAAA,kBAAK,EAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACpC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,YAAY,GAAG,IAAI;YACvB,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,QAAQ;YACN,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QACzD,CAAC;QAED,eAAe;QACf,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,UAAU,CAAC,YAAY,GAAG,IAAI;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QACD,cAAc,CAAC,UAAkB;YAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,MAAe;YAC/B,OAAO,IAAA,qBAAU,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,MAAe,EAAE,OAAiB;YAC3C,OAAO,IAAA,oBAAS,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,UAAmB;YACvC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,CAAC;;IAhUD,yBAAyB;IACT,UAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7D,mCAAmC;IACnB,UAAI,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;IACtE,aAAa;IACG,QAAE,GAAG,EAAE,CAAC;IACxB,eAAe;IACC,QAAE,GAAG,EAAE,CAAC;IA2T1B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,MAAM,IAAI,GAAG,IAAI,eAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,sEAAsE;IAChG,OAAO,KAAK,CAAC;AACf,CAAC;AA0CD,6DAA6D;AAC7D,SAAS,OAAO,CAAC,QAAiB;IAChC,OAAO,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,cAAc,CAC5B,EAAa,EACb,CAAI;IAEJ,yBAAyB;IACzB,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACnB,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG;QAAE,CAAC,IAAI,GAAG,CAAC;IAC1D,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,2DAA2D;IACzE,yEAAyE;IACzE,2BAA2B;IAC3B,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC;IACtC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,iDAAiD;IACpF,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,uDAAuD;IACpF,MAAM,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,uDAAuD;IACpF,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,2DAA2D;IACpF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,2BAA2B;IACnE,IAAI,SAAS,GAAG,CAAC,CAAI,EAAE,CAAI,EAAkC,EAAE;QAC7D,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,cAAc;QAC5B,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB;QACxC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB;QAC7C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACzC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;QAC7C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB;QAC1C,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB;QACtD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;QAC5C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,iCAAiC;QAChE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,iCAAiC;QAChE,qCAAqC;QACrC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,qBAAqB;YACxC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,qBAAqB;YAC/C,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,uBAAuB;YACpD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;YACxD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YACjD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YACjD,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YAClD,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;YAC/D,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACvC,CAAC,CAAC;IACF,IAAI,EAAE,CAAC,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QAC3B,yBAAyB;QACzB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,+CAA+C;QAClF,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;QAClD,SAAS,GAAG,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE;YACzB,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;YACpC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC3C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;YAC7C,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB;YAC3C,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB;YACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;YAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kCAAkC;YACrE,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB;YAClD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B;YAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,uCAAuC;QAC7E,CAAC,CAAC;IACJ,CAAC;IACD,sBAAsB;IACtB,kDAAkD;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,EAAa,EACb,IAIC;IAED,IAAA,0BAAa,EAAC,EAAE,CAAC,CAAC;IAClB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC/D,6BAA6B;IAC7B,gCAAgC;IAChC,OAAO,CAAC,CAAI,EAAkB,EAAE;QAC9B,kBAAkB;QAClB,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB;QAC/C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oCAAoC;QAC1F,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC5C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,iDAAiD;QACjG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;QACzD,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;QACzC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,wCAAwC;QACtE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC;QACvE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;QACzE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;QAC3D,MAAM,OAAO,GAAG,IAAA,0BAAa,EAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB;QAC5C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAI,EAAa,EAAE,EAAkB;IACvD,OAAO;QACL,SAAS,EAAE,EAAE,CAAC,KAAK;QACnB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;QACvB,qBAAqB,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;QACvC,kBAAkB,EAAE,IAAI;QACxB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;KACxB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAClB,KAAmC,EACnC,WAAmE,EAAE;IAErE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACrB,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,IAAI,sBAAc,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE/F,SAAS,gBAAgB,CAAC,SAAkB;QAC1C,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CAAC,SAAqB,EAAE,YAAsB;QACrE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;YAC3B,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACtD,IAAI,YAAY,KAAK,KAAK,IAAI,CAAC,KAAK,qBAAqB;gBAAE,OAAO,KAAK,CAAC;YACxE,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;QACxD,OAAO,IAAA,2BAAc,EAAC,IAAA,mBAAM,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACH,SAAS,YAAY,CAAC,SAAkB,EAAE,YAAY,GAAG,IAAI;QAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClF,CAAC;IAED,SAAS,MAAM,CAAC,IAAiB;QAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,SAAS,SAAS,CAAC,IAAsB;QACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC3C,IAAI,IAAI,YAAY,KAAK;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAChE,IAAI,EAAE,CAAC,cAAc,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACnE,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;QAC1C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,qBAAqB,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,eAAe,CAAC,UAAmB,EAAE,UAAe,EAAE,YAAY,GAAG,IAAI;QAChF,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrF,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,4BAA4B;QACjE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QAEf,eAAe;QACf,iBAAiB,EAAE,gBAAgB;QACnC,gBAAgB,EAAE,eAAe;QACjC,sBAAsB,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC;QACjE,UAAU,CAAC,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI;YAC3C,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,KAAK,CACnB,KAAmC,EACnC,IAAW,EACX,YAAuB,EAAE;IAEzB,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;IACZ,IAAA,0BAAe,EACb,SAAS,EACT,EAAE,EACF;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,UAAU;QACvB,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,UAAU;KAC1B,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,sBAAc,CAAC;IAC5D,MAAM,IAAI,GACR,SAAS,CAAC,IAAI;QACb,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAA,cAAS,EAAC,IAAI,EAAE,GAAG,EAAE,IAAA,sBAAW,EAAC,GAAG,IAAI,CAAC,CAAC,CAAuB,CAAC;IAExF,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzF,MAAM,cAAc,GAA4B;QAC9C,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QAClE,MAAM,EAAE,SAAgB,EAAE,8BAA8B;QACxD,YAAY,EAAE,KAAK;KACpB,CAAC;IACF,MAAM,qBAAqB,GAAG,SAAS,CAAC;IAExC,SAAS,qBAAqB,CAAC,MAAc;QAC3C,MAAM,IAAI,GAAG,WAAW,IAAI,GAAG,CAAC;QAChC,OAAO,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,SAAS,UAAU,CAAC,KAAa,EAAE,GAAW;QAC5C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,kCAAkC,CAAC,CAAC;QAChF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,SAAS,iBAAiB,CAAC,KAAiB,EAAE,MAAsB;QAClE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAU,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,OAAO,IAAA,mBAAM,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,SAAS;QAIb,YAAY,CAAS,EAAE,CAAS,EAAE,QAAiB;YACjD,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC9C,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC9C,IAAI,QAAQ,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,KAAiB,EAAE,SAAyB,qBAAqB;YAChF,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,KAAyB,CAAC;YAC9B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,WAAG,CAAC,KAAK,CAAC,IAAA,mBAAM,EAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,GAAG,SAAS,CAAC;gBACnB,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACnB,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,MAAuB;YACjD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAA,qBAAU,EAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,cAAc,CAAC,QAAgB;YAC7B,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAuB,CAAC;QACvE,CAAC;QAED,gBAAgB,CAAC,WAAgB;YAC/B,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACrC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAEvF,kDAAkD;YAClD,4DAA4D;YAC5D,uEAAuE;YACvE,gDAAgD;YAChD,0DAA0D;YAC1D,sCAAsC;YACtC,yDAAyD;YACzD,sDAAsD;YACtD,MAAM,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,CAAC;YACpD,IAAI,WAAW,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAEtF,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;YAChC,MAAM,CAAC,GAAG,aAAa,CAAC,IAAA,sBAAW,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC9E,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;YACxC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ;YACtC,qFAAqF;YACrF,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,uDAAuD;QACvD,QAAQ;YACN,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,SAAyB,qBAAqB;YACpD,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,IAAA,qBAAU,EAAC,WAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC3E,OAAO,IAAA,sBAAW,EAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,IAAA,sBAAW,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,MAAuB;YAC3B,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,eAAe;QACf,cAAc,KAAU,CAAC;QACzB,MAAM,CAAC,WAAW,CAAC,GAAQ;YACzB,OAAO,SAAS,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,GAAQ;YACrB,OAAO,SAAS,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,UAAU;YACR,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,CAAC;QACD,aAAa;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ;YACN,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,iBAAiB;YACf,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,YAAY;YACV,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,CAAC;KACF;IAGD,kGAAkG;IAClG,0FAA0F;IAC1F,kFAAkF;IAClF,+FAA+F;IAC/F,MAAM,QAAQ,GACZ,SAAS,CAAC,QAAQ;QAClB,SAAS,YAAY,CAAC,KAAiB;YACrC,8DAA8D;YAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC/D,uFAAuF;YACvF,kEAAkE;YAClE,MAAM,GAAG,GAAG,IAAA,0BAAe,EAAC,KAAK,CAAC,CAAC,CAAC,4BAA4B;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,uCAAuC;YAChF,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC;IACJ,MAAM,aAAa,GACjB,SAAS,CAAC,aAAa;QACvB,SAAS,iBAAiB,CAAC,KAAiB;YAC1C,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iCAAiC;QACtE,CAAC,CAAC;IACJ,oCAAoC;IACpC,MAAM,UAAU,GAAG,IAAA,kBAAO,EAAC,MAAM,CAAC,CAAC;IACnC,oFAAoF;IACpF,SAAS,UAAU,CAAC,GAAW;QAC7B,0EAA0E;QAC1E,IAAA,mBAAQ,EAAC,UAAU,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,kBAAkB,CAAC,OAAmB,EAAE,OAAgB;QAC/D,IAAA,mBAAM,EAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAA,mBAAM,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACnF,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,OAAO,CAAC,OAAmB,EAAE,UAAmB,EAAE,IAAmB;QAC5E,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9E,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,2BAA2B;QAC3E,8EAA8E;QAC9E,gFAAgF;QAChF,gEAAgE;QAChE,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,yCAAyC;QACnF,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,uDAAuD;QACvD,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YACnD,kEAAkE;YAClE,iCAAiC;YACjC,MAAM,CAAC,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAChF,QAAQ,CAAC,IAAI,CAAC,IAAA,sBAAW,EAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;QACzE,CAAC;QACD,MAAM,IAAI,GAAG,IAAA,sBAAW,EAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB;QAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,8EAA8E;QAC/F,0EAA0E;QAC1E,+BAA+B;QAC/B,UAAU;QACV,gBAAgB;QAChB,yBAAyB;QACzB,wEAAwE;QACxE,2FAA2F;QAC3F,0FAA0F;QAC1F,SAAS,KAAK,CAAC,MAAkB;YAC/B,gDAAgD;YAChD,sDAAsD;YACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;YAC/C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,gDAAgD;YAChF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;YACnC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC1C,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO;YACtB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,6CAA6C;YAC7F,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO;YACtB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,sCAAsC;YAC9F,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;gBAC5D,QAAQ,IAAI,CAAC,CAAC,CAAC,6BAA6B;YAC9C,CAAC;YACD,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAuB,CAAC,CAAC,mBAAmB;QACrF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;;;;OAUG;IACH,SAAS,IAAI,CAAC,OAAY,EAAE,SAAkB,EAAE,OAAsB,EAAE;QACtE,OAAO,GAAG,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B;QACxF,MAAM,IAAI,GAAG,IAAA,yBAAc,EAAqB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB;QACxD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,aAAa,CAAC,EAAuB;QAC5C,uBAAuB;QACvB,IAAI,GAAG,GAA0B,SAAS,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,QAAQ,IAAI,IAAA,kBAAO,EAAC,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,GACT,CAAC,KAAK;YACN,EAAE,KAAK,IAAI;YACX,OAAO,EAAE,KAAK,QAAQ;YACtB,OAAO,EAAE,CAAC,CAAC,KAAK,QAAQ;YACxB,OAAO,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;YAClB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,CAAC,QAAQ,YAAY,WAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,QAAQ,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC;oBACH,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC/D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,MAAM,CACb,SAA8B,EAC9B,OAAY,EACZ,SAAc,EACd,OAAwB,EAAE;QAE1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACxE,SAAS,GAAG,IAAA,sBAAW,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,kBAAkB,CAAC,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACvE,IAAI,QAAQ,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC5E,MAAM,GAAG,GACP,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;YAC1B,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,SAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE;gBAAE,OAAO,KAAK,CAAC;YACzC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;YACrB,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;YACrD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;YACnC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB;YACjD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB;YACjD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;YACjF,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CACvB,SAAqB,EACrB,OAAmB,EACnB,OAAyB,EAAE;QAE3B,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1D,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACzF,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,YAAY;QACZ,eAAe;QACf,KAAK;QACL,OAAO;QACP,KAAK;QACL,IAAI;QACJ,MAAM;QACN,gBAAgB;QAChB,SAAS;QACT,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAkGD,sDAAsD;AACtD,SAAgB,iBAAiB,CAAI,CAA+B;IAClE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7C,OAAO,iCAAiC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAYD,SAAS,+BAA+B,CAAI,CAAqB;IAC/D,MAAM,KAAK,GAAuB;QAChC,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;QACb,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,EAAE,EAAE,CAAC,CAAC,EAAE;KACT,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAChB,IAAI,cAAc,GAAG,CAAC,CAAC,wBAAwB;QAC7C,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,EAAE,GAAG,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC,EAAE;QACxB,IAAI,EAAE,CAAC,CAAC,UAAU;QAClB,cAAc,EAAE,cAAc;QAC9B,YAAY,EAAE,CAAC,CAAC,cAAc;KAC/B,CAAC,CAAC;IACH,MAAM,SAAS,GAA4B;QACzC,EAAE;QACF,EAAE;QACF,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;QACxC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AACD,SAAS,yBAAyB,CAAC,CAAY;IAC7C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,aAAa,EAAE,CAAC,CAAC,aAAa;KAC/B,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AACvD,CAAC;AACD,SAAgB,kBAAkB,CAAI,EAAa,EAAE,CAAI,EAAE,CAAI;IAC7D;;;OAGG;IACH,SAAS,mBAAmB,CAAC,CAAI;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACnC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;IAC/D,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AACD,SAAS,iCAAiC,CACxC,CAAqB,EACrB,KAA8B;IAE9B,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACzB,SAAS,kBAAkB,CAAC,GAAW;QACrC,OAAO,IAAA,kBAAO,EAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAClB,EAAE,EACF;QACE,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,KAAK;QACtB,sBAAsB,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC;QACjE,mBAAmB;QACnB,kBAAkB;KACnB,CACF,CAAC;AACJ,CAAC;AACD,SAAS,2BAA2B,CAAC,CAAY,EAAE,MAAa;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;QAC/B,eAAe,EAAE,KAAK;QACtB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAA,oBAAO,EAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;KACpE,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CAAC,CAAY;IACtC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,2BAA2B,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC"} | ||
| {"version":3,"file":"weierstrass.js","sourceRoot":"","sources":["../src/abstract/weierstrass.ts"],"names":[],"mappings":"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EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,yDAAyD;QACzD,gEAAgE;QAChE,iDAAiD;QACjD,uCAAuC;QACvC,GAAG,CAAC,KAAY;YACd,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YACtC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,kBAAkB;YAChE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;YAClC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;YAClC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YACnC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,QAAQ,CAAC,KAAY;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,GAAG;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED;;;;;;;;WAQG;QACH,QAAQ,CAAC,MAAc;YACrB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC,eAAe;YAC7F,IAAI,KAAY,EAAE,IAAW,CAAC,CAAC,wCAAwC;YACvE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7E,4CAA4C;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7B,KAAK,GAAG,CAAC,CAAC;gBACV,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;YACD,0DAA0D;YAC1D,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED;;;;WAIG;QACH,cAAc,CAAC,EAAU;YACvB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAa,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC,aAAa;YACnF,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;YAC7C,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAO,CAAC,CAAC,CAAC,YAAY;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;gBAChF,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,oBAAoB,CAAC,CAAQ,EAAE,CAAS,EAAE,CAAS;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,CAAC;QAED;;;WAGG;QACH,QAAQ,CAAC,SAAa;YACpB,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QAED;;;WAGG;QACH,aAAa;YACX,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAClC,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QAED,aAAa;YACX,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC,CAAC,YAAY;YAC/C,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAU,CAAC;YAC9D,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,YAAY;YACV,mCAAmC;YACnC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,YAAY,GAAG,IAAI;YACzB,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACpC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,YAAY,GAAG,IAAI;YACvB,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,QAAQ;YACN,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QACzD,CAAC;;IAEH,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,sEAAsE;IAChG,OAAO,KAAK,CAAC;AACf,CAAC;AAmBD,6DAA6D;AAC7D,SAAS,OAAO,CAAC,QAAiB;IAChC,OAAO,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAa,EACb,CAAI;IAEJ,yBAAyB;IACzB,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACnB,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG;QAAE,CAAC,IAAI,GAAG,CAAC;IAC1D,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,2DAA2D;IACzE,yEAAyE;IACzE,2BAA2B;IAC3B,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC;IACtC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,iDAAiD;IACpF,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,uDAAuD;IACpF,MAAM,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,uDAAuD;IACpF,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,2DAA2D;IACpF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,2BAA2B;IACnE,IAAI,SAAS,GAAG,CAAC,CAAI,EAAE,CAAI,EAAkC,EAAE;QAC7D,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,cAAc;QAC5B,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB;QACxC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB;QAC7C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACzC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;QAC7C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB;QAC1C,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB;QACtD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;QAC5C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,iCAAiC;QAChE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,iCAAiC;QAChE,qCAAqC;QACrC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,qBAAqB;YACxC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,qBAAqB;YAC/C,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,uBAAuB;YACpD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;YACxD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YACjD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YACjD,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YAClD,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;YAC/D,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACvC,CAAC,CAAC;IACF,IAAI,EAAE,CAAC,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QAC3B,yBAAyB;QACzB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,+CAA+C;QAClF,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;QAClD,SAAS,GAAG,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE;YACzB,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;YACpC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC3C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;YAC7C,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB;YAC3C,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB;YACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;YAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kCAAkC;YACrE,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB;YAClD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B;YAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,uCAAuC;QAC7E,CAAC,CAAC;IACJ,CAAC;IACD,sBAAsB;IACtB,kDAAkD;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAa,EACb,IAIC;IAED,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC/D,6BAA6B;IAC7B,gCAAgC;IAChC,OAAO,CAAC,CAAI,EAAkB,EAAE;QAC9B,kBAAkB;QAClB,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB;QAC/C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oCAAoC;QAC1F,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC5C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,iDAAiD;QACjG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;QACzD,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;QACzC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,wCAAwC;QACtE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC;QACvE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;QACzE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;QAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB;QAC5C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAI,EAAa,EAAE,EAAkB;IACvD,OAAO;QACL,SAAS,EAAE,EAAE,CAAC,KAAK;QACnB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;QACvB,qBAAqB,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;QACvC,kBAAkB,EAAE,IAAI;QACxB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;KACxB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAClB,KAAmC,EACnC,WAAmE,EAAE;IAErE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACrB,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,IAAI,aAAa,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE/F,SAAS,gBAAgB,CAAC,SAAqB;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACpC,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CAAC,SAAqB,EAAE,YAAsB;QACrE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;YAC3B,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACtD,IAAI,YAAY,KAAK,KAAK,IAAI,CAAC,KAAK,qBAAqB;gBAAE,OAAO,KAAK,CAAC;YACxE,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;QACxD,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACH,SAAS,YAAY,CAAC,SAAqB,EAAE,YAAY,GAAG,IAAI;QAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC;IAED,SAAS,MAAM,CAAC,IAAiB;QAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,SAAS,SAAS,CAAC,IAAgB;QACjC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACnF,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC;QAChD,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,qBAAqB,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,eAAe,CACtB,UAAsB,EACtB,UAAsB,EACtB,YAAY,GAAG,IAAI;QAEnB,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrF,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,4BAA4B;QACnE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;KAChB,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,KAAK,CACnB,KAAmC,EACnC,IAAW,EACX,YAAuB,EAAE;IAEzB,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,eAAe,CACb,SAAS,EACT,EAAE,EACF;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,UAAU;QACvB,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,UAAU;KAC1B,CACF,CAAC;IACF,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,aAAa,CAAC;IAC3D,MAAM,IAAI,GACR,SAAS,CAAC,IAAI;QACb,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,CAAuB,CAAC;IAExF,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzF,MAAM,cAAc,GAA4B;QAC9C,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACjE,MAAM,EAAE,SAA2B;QACnC,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,SAAS,qBAAqB,CAAC,MAAc;QAC3C,MAAM,IAAI,GAAG,WAAW,IAAI,GAAG,CAAC;QAChC,OAAO,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,SAAS,UAAU,CAAC,KAAa,EAAE,GAAW;QAC5C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,kCAAkC,CAAC,CAAC;QAChF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,SAAS,iBAAiB,CAAC,KAAiB,EAAE,MAAsB;QAClE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAU,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM,SAAS;QACJ,CAAC,CAAS;QACV,CAAC,CAAS;QACV,QAAQ,CAAU;QAE3B,YAAY,CAAS,EAAE,CAAS,EAAE,QAAiB;YACjD,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC9C,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC9C,IAAI,QAAQ,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,KAAiB,EAAE,SAAyB,cAAc,CAAC,MAAM;YAChF,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,KAAyB,CAAC;YAC9B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,GAAG,SAAS,CAAC;gBACnB,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,GAAG,OAAO,CAAC,SAAU,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,MAAuB;YACjD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,cAAc,CAAC,QAAgB;YAC7B,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAuB,CAAC;QACvE,CAAC;QAED,gBAAgB,CAAC,WAAuB;YACtC,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACrC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAEvF,kDAAkD;YAClD,4DAA4D;YAC5D,uEAAuE;YACvE,gDAAgD;YAChD,0DAA0D;YAC1D,sCAAsC;YACtC,yDAAyD;YACzD,sDAAsD;YACtD,MAAM,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,CAAC;YACpD,IAAI,WAAW,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAEtF,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;YAChC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB;YACpF,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;YACxC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ;YACtC,qFAAqF;YACrF,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,uDAAuD;QACvD,QAAQ;YACN,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,SAAyB,cAAc,CAAC,MAAM;YACpD,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC3E,OAAO,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,MAAuB;YAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;KACF;IAGD,kGAAkG;IAClG,0FAA0F;IAC1F,kFAAkF;IAClF,+FAA+F;IAC/F,MAAM,QAAQ,GACZ,SAAS,CAAC,QAAQ;QAClB,SAAS,YAAY,CAAC,KAAiB;YACrC,8DAA8D;YAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC/D,uFAAuF;YACvF,kEAAkE;YAClE,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,4BAA4B;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,uCAAuC;YAChF,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC;IACJ,MAAM,aAAa,GACjB,SAAS,CAAC,aAAa;QACvB,SAAS,iBAAiB,CAAC,KAAiB;YAC1C,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iCAAiC;QACtE,CAAC,CAAC;IACJ,oCAAoC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,oFAAoF;IACpF,SAAS,UAAU,CAAC,GAAW;QAC7B,0EAA0E;QAC1E,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,kBAAkB,CAAC,OAAmB,EAAE,OAAgB;QAC/D,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACnF,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,OAAO,CAAC,OAAmB,EAAE,UAAsB,EAAE,IAAmB;QAC/E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9E,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,2BAA2B;QAC3E,8EAA8E;QAC9E,gFAAgF;QAChF,gEAAgE;QAChE,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,yCAAyC;QAC7E,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,uDAAuD;QACvD,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YACnD,kEAAkE;YAClE,iCAAiC;YACjC,MAAM,CAAC,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAChF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,wBAAwB;QAC/E,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB;QAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,wEAAwE;QACzF,0EAA0E;QAC1E,+BAA+B;QAC/B,UAAU;QACV,gBAAgB;QAChB,yBAAyB;QACzB,wEAAwE;QACxE,2FAA2F;QAC3F,0FAA0F;QAC1F,SAAS,KAAK,CAAC,MAAkB;YAC/B,gDAAgD;YAChD,sDAAsD;YACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,uDAAuD;YACnF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,gDAAgD;YAChF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;YACnC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC1C,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO;YACtB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,6CAA6C;YAC7F,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO;YACtB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,sCAAsC;YAC9F,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;gBAC5D,QAAQ,IAAI,CAAC,CAAC,CAAC,6BAA6B;YAC9C,CAAC;YACD,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAuB,CAAC,CAAC,mBAAmB;QACrF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;;;;OAUG;IACH,SAAS,IAAI,CAAC,OAAmB,EAAE,SAAqB,EAAE,OAAsB,EAAE;QAChF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B;QACxF,MAAM,IAAI,GAAG,cAAc,CAAqB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB;QACxD,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,MAAM,CACb,SAAqB,EACrB,OAAmB,EACnB,SAAqB,EACrB,OAAwB,EAAE;QAE1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACxE,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,SAAgB,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,SAAS,YAAY,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,gDAAgD;QACtF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE;gBAAE,OAAO,KAAK,CAAC;YACzC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;YACrB,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;YACrD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;YACnC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB;YACjD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB;YACjD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;YACjF,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CACvB,SAAqB,EACrB,OAAmB,EACnB,OAAyB,EAAE;QAE3B,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1D,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACzF,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,YAAY;QACZ,eAAe;QACf,KAAK;QACL,OAAO;QACP,KAAK;QACL,IAAI;QACJ,MAAM;QACN,gBAAgB;QAChB,SAAS;QACT,IAAI;KACL,CAAkB,CAAC;AACtB,CAAC"} |
+2
-2
@@ -1,2 +0,2 @@ | ||
| import { type CurveFn } from './abstract/bls.ts'; | ||
| import { type BlsCurvePairWithSignatures } from './abstract/bls.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
@@ -15,3 +15,3 @@ export declare const bls12_381_Fr: IField<bigint>; | ||
| */ | ||
| export declare const bls12_381: CurveFn; | ||
| export declare const bls12_381: BlsCurvePairWithSignatures; | ||
| //# sourceMappingURL=bls12-381.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bls12-381.d.ts","sourceRoot":"","sources":["src/bls12-381.ts"],"names":[],"mappings":"AAgFA,OAAO,EAAO,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAmE3D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CAGtC,CAAC;AAuTH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,EAAE,OA8HtB,CAAC"} | ||
| {"version":3,"file":"bls12-381.d.ts","sourceRoot":"","sources":["src/bls12-381.ts"],"names":[],"mappings":"AAgFA,OAAO,EAAO,KAAK,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAsE3D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CAEtC,CAAC;AAibH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,EAAE,0BAOvB,CAAC"} |
+171
-180
@@ -1,4 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.bls12_381 = exports.bls12_381_Fr = void 0; | ||
| /** | ||
@@ -83,10 +80,10 @@ * bls12-381 is pairing-friendly Barreto-Lynn-Scott elliptic curve construction allowing to: | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const sha2_js_1 = require("@noble/hashes/sha2.js"); | ||
| const bls_ts_1 = require("./abstract/bls.js"); | ||
| const modular_ts_1 = require("./abstract/modular.js"); | ||
| const utils_ts_1 = require("./utils.js"); | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { bls } from "./abstract/bls.js"; | ||
| import { Field } from "./abstract/modular.js"; | ||
| import { abytes, bitLen, bitMask, bytesToHex, bytesToNumberBE, concatBytes, copyBytes, hexToBytes, numberToBytesBE, randomBytes, } from "./utils.js"; | ||
| // Types | ||
| const hash_to_curve_ts_1 = require("./abstract/hash-to-curve.js"); | ||
| const tower_ts_1 = require("./abstract/tower.js"); | ||
| const weierstrass_ts_1 = require("./abstract/weierstrass.js"); | ||
| import { isogenyMap } from "./abstract/hash-to-curve.js"; | ||
| import { psiFrobenius, tower12 } from "./abstract/tower.js"; | ||
| import { mapToCurveSimpleSWU, weierstrass, } from "./abstract/weierstrass.js"; | ||
| // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
@@ -102,3 +99,3 @@ // prettier-ignore | ||
| // const t = -BLS_X; | ||
| const BLS_X_LEN = (0, utils_ts_1.bitLen)(BLS_X); | ||
| const BLS_X_LEN = bitLen(BLS_X); | ||
| // a=0, b=4 | ||
@@ -126,7 +123,7 @@ // P is characteristic of field Fp, in which curve calculations are done. | ||
| // CURVE FIELDS | ||
| exports.bls12_381_Fr = (0, modular_ts_1.Field)(bls12_381_CURVE_G1.n, { | ||
| // r = z⁴ − z² + 1; CURVE.n from other curves | ||
| export const bls12_381_Fr = Field(bls12_381_CURVE_G1.n, { | ||
| modFromBytes: true, | ||
| isLE: true, | ||
| }); | ||
| const { Fp, Fp2, Fp6, Fp12 } = (0, tower_ts_1.tower12)({ | ||
| const { Fp, Fp2, Fp6, Fp12 } = tower12({ | ||
| ORDER: bls12_381_CURVE_G1.p, | ||
@@ -164,3 +161,3 @@ X_LEN: BLS_X_LEN, | ||
| // GLV endomorphism Ψ(P), for fast cofactor clearing | ||
| const { G2psi, G2psi2 } = (0, tower_ts_1.psiFrobenius)(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE)); // 1/(u+1) | ||
| const { G2psi, G2psi2 } = psiFrobenius(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE)); // 1/(u+1) | ||
| /** | ||
@@ -173,3 +170,3 @@ * Default hash_to_field / hash-to-curve for BLS. | ||
| */ | ||
| const htfDefaults = Object.freeze({ | ||
| const hasher_opts = Object.freeze({ | ||
| DST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_', | ||
@@ -181,3 +178,3 @@ encodeDST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_', | ||
| expand: 'xmd', | ||
| hash: sha2_js_1.sha256, | ||
| hash: sha256, | ||
| }); | ||
@@ -210,20 +207,21 @@ // a=0, b=4 | ||
| function parseMask(bytes) { | ||
| // Copy, so we can remove mask data. It will be removed also later, when Fp.create will call modulo. | ||
| bytes = bytes.slice(); | ||
| const mask = bytes[0] & 224; | ||
| // Copy, so we can remove mask data. | ||
| // It will be removed also later, when Fp.create will call modulo. | ||
| bytes = copyBytes(bytes); | ||
| const mask = bytes[0] & 0b1110_0000; | ||
| const compressed = !!((mask >> 7) & 1); // compression bit (0b1000_0000) | ||
| const infinity = !!((mask >> 6) & 1); // point at infinity bit (0b0100_0000) | ||
| const sort = !!((mask >> 5) & 1); // sort bit (0b0010_0000) | ||
| bytes[0] &= 31; // clear mask (zero first 3 bits) | ||
| bytes[0] &= 0b0001_1111; // clear mask (zero first 3 bits) | ||
| return { compressed, infinity, sort, value: bytes }; | ||
| } | ||
| function setMask(bytes, mask) { | ||
| if (bytes[0] & 224) | ||
| if (bytes[0] & 0b1110_0000) | ||
| throw new Error('setMask: non-empty mask'); | ||
| if (mask.compressed) | ||
| bytes[0] |= 128; | ||
| bytes[0] |= 0b1000_0000; | ||
| if (mask.infinity) | ||
| bytes[0] |= 64; | ||
| bytes[0] |= 0b0100_0000; | ||
| if (mask.sort) | ||
| bytes[0] |= 32; | ||
| bytes[0] |= 0b0010_0000; | ||
| return bytes; | ||
@@ -239,10 +237,10 @@ } | ||
| const sort = Boolean((y * _2n) / P); | ||
| return setMask((0, utils_ts_1.numberToBytesBE)(x, L), { compressed: true, sort }); | ||
| return setMask(numberToBytesBE(x, L), { compressed: true, sort }); | ||
| } | ||
| else { | ||
| if (is0) { | ||
| return (0, utils_ts_1.concatBytes)(Uint8Array.of(0x40), new Uint8Array(2 * L - 1)); | ||
| return concatBytes(Uint8Array.of(0x40), new Uint8Array(2 * L - 1)); | ||
| } | ||
| else { | ||
| return (0, utils_ts_1.concatBytes)((0, utils_ts_1.numberToBytesBE)(x, L), (0, utils_ts_1.numberToBytesBE)(y, L)); | ||
| return concatBytes(numberToBytesBE(x, L), numberToBytesBE(y, L)); | ||
| } | ||
@@ -258,3 +256,3 @@ } | ||
| const sort = Boolean((y * _2n) / P); | ||
| return setMask((0, utils_ts_1.numberToBytesBE)(x, L), { compressed: true, sort }); | ||
| return setMask(numberToBytesBE(x, L), { compressed: true, sort }); | ||
| } | ||
@@ -265,5 +263,5 @@ function pointG1FromBytes(bytes) { | ||
| if (value.length === 48 && compressed) { | ||
| const compressedValue = (0, utils_ts_1.bytesToNumberBE)(value); | ||
| const compressedValue = bytesToNumberBE(value); | ||
| // Zero | ||
| const x = Fp.create(compressedValue & (0, utils_ts_1.bitMask)(Fp.BITS)); | ||
| const x = Fp.create(compressedValue & bitMask(Fp.BITS)); | ||
| if (infinity) { | ||
@@ -284,8 +282,8 @@ if (x !== _0n) | ||
| // Check if the infinity flag is set | ||
| const x = (0, utils_ts_1.bytesToNumberBE)(value.subarray(0, L)); | ||
| const y = (0, utils_ts_1.bytesToNumberBE)(value.subarray(L)); | ||
| const x = bytesToNumberBE(value.subarray(0, L)); | ||
| const y = bytesToNumberBE(value.subarray(L)); | ||
| if (infinity) { | ||
| if (x !== _0n || y !== _0n) | ||
| throw new Error('G1: non-empty point at infinity'); | ||
| return exports.bls12_381.G1.Point.ZERO.toAffine(); | ||
| return bls12_381.G1.Point.ZERO.toAffine(); | ||
| } | ||
@@ -298,11 +296,11 @@ return { x: Fp.create(x), y: Fp.create(y) }; | ||
| } | ||
| function signatureG1FromBytes(hex) { | ||
| const { infinity, sort, value } = parseMask((0, utils_ts_1.ensureBytes)('signatureHex', hex, 48)); | ||
| function signatureG1FromBytes(bytes) { | ||
| const { infinity, sort, value } = parseMask(abytes(bytes, 48, 'signature')); | ||
| const P = Fp.ORDER; | ||
| const Point = exports.bls12_381.G1.Point; | ||
| const compressedValue = (0, utils_ts_1.bytesToNumberBE)(value); | ||
| const Point = bls12_381.G1.Point; | ||
| const compressedValue = bytesToNumberBE(value); | ||
| // Zero | ||
| if (infinity) | ||
| return Point.ZERO; | ||
| const x = Fp.create(compressedValue & (0, utils_ts_1.bitMask)(Fp.BITS)); | ||
| const x = Fp.create(compressedValue & bitMask(Fp.BITS)); | ||
| const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381_CURVE_G1.b)); // y² = x³ + b | ||
@@ -325,12 +323,12 @@ let y = Fp.sqrt(right); | ||
| if (is0) | ||
| return (0, utils_ts_1.concatBytes)(COMPZERO, (0, utils_ts_1.numberToBytesBE)(_0n, L)); | ||
| return concatBytes(COMPZERO, numberToBytesBE(_0n, L)); | ||
| const flag = Boolean(y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P); | ||
| return (0, utils_ts_1.concatBytes)(setMask((0, utils_ts_1.numberToBytesBE)(x.c1, L), { compressed: true, sort: flag }), (0, utils_ts_1.numberToBytesBE)(x.c0, L)); | ||
| return concatBytes(setMask(numberToBytesBE(x.c1, L), { compressed: true, sort: flag }), numberToBytesBE(x.c0, L)); | ||
| } | ||
| else { | ||
| if (is0) | ||
| return (0, utils_ts_1.concatBytes)(Uint8Array.of(0x40), new Uint8Array(4 * L - 1)); | ||
| return concatBytes(Uint8Array.of(0x40), new Uint8Array(4 * L - 1)); | ||
| const { re: x0, im: x1 } = Fp2.reim(x); | ||
| const { re: y0, im: y1 } = Fp2.reim(y); | ||
| return (0, utils_ts_1.concatBytes)((0, utils_ts_1.numberToBytesBE)(x1, L), (0, utils_ts_1.numberToBytesBE)(x0, L), (0, utils_ts_1.numberToBytesBE)(y1, L), (0, utils_ts_1.numberToBytesBE)(y0, L)); | ||
| return concatBytes(numberToBytesBE(x1, L), numberToBytesBE(x0, L), numberToBytesBE(y1, L), numberToBytesBE(y0, L)); | ||
| } | ||
@@ -342,3 +340,3 @@ } | ||
| if (point.is0()) | ||
| return (0, utils_ts_1.concatBytes)(COMPZERO, (0, utils_ts_1.numberToBytesBE)(_0n, L)); | ||
| return concatBytes(COMPZERO, numberToBytesBE(_0n, L)); | ||
| const { x, y } = point.toAffine(); | ||
@@ -350,3 +348,3 @@ const { re: x0, im: x1 } = Fp2.reim(x); | ||
| const z2 = x0; | ||
| return (0, utils_ts_1.concatBytes)(setMask((0, utils_ts_1.numberToBytesBE)(x1, L), { sort, compressed: true }), (0, utils_ts_1.numberToBytesBE)(z2, L)); | ||
| return concatBytes(setMask(numberToBytesBE(x1, L), { sort, compressed: true }), numberToBytesBE(z2, L)); | ||
| } | ||
@@ -360,5 +358,5 @@ function pointG2FromBytes(bytes) { | ||
| ) { | ||
| throw new Error('invalid encoding flag: ' + (bytes[0] & 224)); | ||
| throw new Error('invalid encoding flag: ' + (bytes[0] & 0b1110_0000)); | ||
| } | ||
| const slc = (b, from, to) => (0, utils_ts_1.bytesToNumberBE)(b.slice(from, to)); | ||
| const slc = (b, from, to) => bytesToNumberBE(b.slice(from, to)); | ||
| if (value.length === 96 && compressed) { | ||
@@ -398,16 +396,16 @@ if (infinity) { | ||
| } | ||
| function signatureG2FromBytes(hex) { | ||
| function signatureG2FromBytes(bytes) { | ||
| const { ORDER: P } = Fp; | ||
| // TODO: Optimize, it's very slow because of sqrt. | ||
| const { infinity, sort, value } = parseMask((0, utils_ts_1.ensureBytes)('signatureHex', hex)); | ||
| const Point = exports.bls12_381.G2.Point; | ||
| const { infinity, sort, value } = parseMask(abytes(bytes)); | ||
| const Point = bls12_381.G2.Point; | ||
| const half = value.length / 2; | ||
| if (half !== 48 && half !== 96) | ||
| throw new Error('invalid compressed signature length, expected 96/192 bytes'); | ||
| const z1 = (0, utils_ts_1.bytesToNumberBE)(value.slice(0, half)); | ||
| const z2 = (0, utils_ts_1.bytesToNumberBE)(value.slice(half)); | ||
| const z1 = bytesToNumberBE(value.slice(0, half)); | ||
| const z2 = bytesToNumberBE(value.slice(half)); | ||
| // Indicates the infinity point | ||
| if (infinity) | ||
| return Point.ZERO; | ||
| const x1 = Fp.create(z1 & (0, utils_ts_1.bitMask)(Fp.BITS)); | ||
| const x1 = Fp.create(z1 & bitMask(Fp.BITS)); | ||
| const x2 = Fp.create(z2); | ||
@@ -432,2 +430,117 @@ const x = Fp2.create({ c0: x2, c1: x1 }); | ||
| } | ||
| const signatureCoders = { | ||
| ShortSignature: { | ||
| fromBytes(bytes) { | ||
| return signatureG1FromBytes(abytes(bytes)); | ||
| }, | ||
| fromHex(hex) { | ||
| return signatureG1FromBytes(hexToBytes(hex)); | ||
| }, | ||
| toBytes(point) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toRawBytes(point) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toHex(point) { | ||
| return bytesToHex(signatureG1ToBytes(point)); | ||
| }, | ||
| }, | ||
| LongSignature: { | ||
| fromBytes(bytes) { | ||
| return signatureG2FromBytes(abytes(bytes)); | ||
| }, | ||
| fromHex(hex) { | ||
| return signatureG2FromBytes(hexToBytes(hex)); | ||
| }, | ||
| toBytes(point) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toRawBytes(point) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toHex(point) { | ||
| return bytesToHex(signatureG2ToBytes(point)); | ||
| }, | ||
| }, | ||
| }; | ||
| const fields = { | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| Fr: bls12_381_Fr, | ||
| }; | ||
| const G1_Point = weierstrass(bls12_381_CURVE_G1, { | ||
| allowInfinityPoint: true, | ||
| Fn: bls12_381_Fr, | ||
| fromBytes: pointG1FromBytes, | ||
| toBytes: pointG1ToBytes, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| isTorsionFree: (c, point) => { | ||
| // GLV endomorphism ψ(P) | ||
| const beta = BigInt('0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe'); | ||
| const phi = new c(Fp.mul(point.X, beta), point.Y, point.Z); | ||
| // TODO: unroll | ||
| const xP = point.multiplyUnsafe(BLS_X).negate(); // [x]P | ||
| const u2P = xP.multiplyUnsafe(BLS_X); // [u2]P | ||
| return u2P.equals(phi); | ||
| }, | ||
| // Clear cofactor of G1 | ||
| // https://eprint.iacr.org/2019/403 | ||
| clearCofactor: (_c, point) => { | ||
| // return this.multiplyUnsafe(CURVE.h); | ||
| return point.multiplyUnsafe(BLS_X).add(point); // x*P + P | ||
| }, | ||
| }); | ||
| const G2_Point = weierstrass(bls12_381_CURVE_G2, { | ||
| Fp: Fp2, | ||
| allowInfinityPoint: true, | ||
| Fn: bls12_381_Fr, | ||
| fromBytes: pointG2FromBytes, | ||
| toBytes: pointG2ToBytes, | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| // Older version: https://eprint.iacr.org/2019/814.pdf | ||
| isTorsionFree: (c, P) => { | ||
| return P.multiplyUnsafe(BLS_X).negate().equals(G2psi(c, P)); // ψ(P) == [u](P) | ||
| }, | ||
| // clear_cofactor_bls12381_g2 from RFC 9380. | ||
| // https://eprint.iacr.org/2017/419.pdf | ||
| // prettier-ignore | ||
| clearCofactor: (c, P) => { | ||
| const x = BLS_X; | ||
| let t1 = P.multiplyUnsafe(x).negate(); // [-x]P | ||
| let t2 = G2psi(c, P); // Ψ(P) | ||
| let t3 = P.double(); // 2P | ||
| t3 = G2psi2(c, t3); // Ψ²(2P) | ||
| t3 = t3.subtract(t2); // Ψ²(2P) - Ψ(P) | ||
| t2 = t1.add(t2); // [-x]P + Ψ(P) | ||
| t2 = t2.multiplyUnsafe(x).negate(); // [x²]P - [x]Ψ(P) | ||
| t3 = t3.add(t2); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) | ||
| t3 = t3.subtract(t1); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P | ||
| const Q = t3.subtract(P); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P - 1P | ||
| return Q; // [x²-x-1]P + [x-1]Ψ(P) + Ψ²(2P) | ||
| }, | ||
| }); | ||
| const bls12_hasher_opts = { | ||
| mapToG1: mapToG1, | ||
| mapToG2: mapToG2, | ||
| hasherOpts: hasher_opts, | ||
| hasherOptsG1: { ...hasher_opts, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' }, | ||
| hasherOptsG2: { ...hasher_opts }, | ||
| }; | ||
| const bls12_params = { | ||
| ateLoopSize: BLS_X, // The BLS parameter x for BLS12-381 | ||
| xNegative: true, | ||
| twistType: 'multiplicative', | ||
| randomBytes: randomBytes, | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-clearing-the-cofactor | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-cofactor-clearing-for-bls12 | ||
| // G2hEff: BigInt( | ||
| // '0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551' | ||
| // ), | ||
| }; | ||
| /** | ||
@@ -444,127 +557,5 @@ * bls12-381 pairing-friendly curve. | ||
| */ | ||
| exports.bls12_381 = (0, bls_ts_1.bls)({ | ||
| // Fields | ||
| fields: { | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| Fr: exports.bls12_381_Fr, | ||
| }, | ||
| // G1: y² = x³ + 4 | ||
| G1: { | ||
| ...bls12_381_CURVE_G1, | ||
| Fp, | ||
| htfDefaults: { ...htfDefaults, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| isTorsionFree: (c, point) => { | ||
| // GLV endomorphism ψ(P) | ||
| const beta = BigInt('0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe'); | ||
| const phi = new c(Fp.mul(point.X, beta), point.Y, point.Z); | ||
| // TODO: unroll | ||
| const xP = point.multiplyUnsafe(BLS_X).negate(); // [x]P | ||
| const u2P = xP.multiplyUnsafe(BLS_X); // [u2]P | ||
| return u2P.equals(phi); | ||
| }, | ||
| // Clear cofactor of G1 | ||
| // https://eprint.iacr.org/2019/403 | ||
| clearCofactor: (_c, point) => { | ||
| // return this.multiplyUnsafe(CURVE.h); | ||
| return point.multiplyUnsafe(BLS_X).add(point); // x*P + P | ||
| }, | ||
| mapToCurve: mapToG1, | ||
| fromBytes: pointG1FromBytes, | ||
| toBytes: pointG1ToBytes, | ||
| ShortSignature: { | ||
| fromBytes(bytes) { | ||
| (0, utils_ts_1.abytes)(bytes); | ||
| return signatureG1FromBytes(bytes); | ||
| }, | ||
| fromHex(hex) { | ||
| return signatureG1FromBytes(hex); | ||
| }, | ||
| toBytes(point) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toRawBytes(point) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toHex(point) { | ||
| return (0, utils_ts_1.bytesToHex)(signatureG1ToBytes(point)); | ||
| }, | ||
| }, | ||
| }, | ||
| G2: { | ||
| ...bls12_381_CURVE_G2, | ||
| Fp: Fp2, | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-clearing-the-cofactor | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-cofactor-clearing-for-bls12 | ||
| hEff: BigInt('0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551'), | ||
| htfDefaults: { ...htfDefaults }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| mapToCurve: mapToG2, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| // Older version: https://eprint.iacr.org/2019/814.pdf | ||
| isTorsionFree: (c, P) => { | ||
| return P.multiplyUnsafe(BLS_X).negate().equals(G2psi(c, P)); // ψ(P) == [u](P) | ||
| }, | ||
| // Maps the point into the prime-order subgroup G2. | ||
| // clear_cofactor_bls12381_g2 from RFC 9380. | ||
| // https://eprint.iacr.org/2017/419.pdf | ||
| // prettier-ignore | ||
| clearCofactor: (c, P) => { | ||
| const x = BLS_X; | ||
| let t1 = P.multiplyUnsafe(x).negate(); // [-x]P | ||
| let t2 = G2psi(c, P); // Ψ(P) | ||
| let t3 = P.double(); // 2P | ||
| t3 = G2psi2(c, t3); // Ψ²(2P) | ||
| t3 = t3.subtract(t2); // Ψ²(2P) - Ψ(P) | ||
| t2 = t1.add(t2); // [-x]P + Ψ(P) | ||
| t2 = t2.multiplyUnsafe(x).negate(); // [x²]P - [x]Ψ(P) | ||
| t3 = t3.add(t2); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) | ||
| t3 = t3.subtract(t1); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P | ||
| const Q = t3.subtract(P); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P - 1P | ||
| return Q; // [x²-x-1]P + [x-1]Ψ(P) + Ψ²(2P) | ||
| }, | ||
| fromBytes: pointG2FromBytes, | ||
| toBytes: pointG2ToBytes, | ||
| Signature: { | ||
| fromBytes(bytes) { | ||
| (0, utils_ts_1.abytes)(bytes); | ||
| return signatureG2FromBytes(bytes); | ||
| }, | ||
| fromHex(hex) { | ||
| return signatureG2FromBytes(hex); | ||
| }, | ||
| toBytes(point) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toRawBytes(point) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toHex(point) { | ||
| return (0, utils_ts_1.bytesToHex)(signatureG2ToBytes(point)); | ||
| }, | ||
| }, | ||
| }, | ||
| params: { | ||
| ateLoopSize: BLS_X, // The BLS parameter x for BLS12-381 | ||
| r: bls12_381_CURVE_G1.n, // order; z⁴ − z² + 1; CURVE.n from other curves | ||
| xNegative: true, | ||
| twistType: 'multiplicative', | ||
| }, | ||
| htfDefaults, | ||
| hash: sha2_js_1.sha256, | ||
| }); | ||
| export const bls12_381 = bls(fields, G1_Point, G2_Point, bls12_params, bls12_hasher_opts, signatureCoders); | ||
| // 3-isogeny map from E' to E https://www.rfc-editor.org/rfc/rfc9380#appendix-E.3 | ||
| const isogenyMapG2 = (0, hash_to_curve_ts_1.isogenyMap)(Fp2, [ | ||
| const isogenyMapG2 = isogenyMap(Fp2, [ | ||
| // xNum | ||
@@ -638,3 +629,3 @@ [ | ||
| // 11-isogeny map from E' to E | ||
| const isogenyMapG1 = (0, hash_to_curve_ts_1.isogenyMap)(Fp, [ | ||
| const isogenyMapG1 = isogenyMap(Fp, [ | ||
| // xNum | ||
@@ -709,3 +700,3 @@ [ | ||
| // Optimized SWU Map - Fp to G1 | ||
| const G1_SWU = (0, weierstrass_ts_1.mapToCurveSimpleSWU)(Fp, { | ||
| const G1_SWU = mapToCurveSimpleSWU(Fp, { | ||
| A: Fp.create(BigInt('0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d')), | ||
@@ -716,3 +707,3 @@ B: Fp.create(BigInt('0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0')), | ||
| // SWU Map - Fp2 to G2': y² = x³ + 240i * x + 1012 + 1012i | ||
| const G2_SWU = (0, weierstrass_ts_1.mapToCurveSimpleSWU)(Fp2, { | ||
| const G2_SWU = mapToCurveSimpleSWU(Fp2, { | ||
| A: Fp2.create({ c0: Fp.create(_0n), c1: Fp.create(BigInt(240)) }), // A' = 240 * I | ||
@@ -719,0 +710,0 @@ B: Fp2.create({ c0: Fp.create(BigInt(1012)), c1: Fp.create(BigInt(1012)) }), // B' = 1012 * (1 + I) |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bls12-381.js","sourceRoot":"","sources":["src/bls12-381.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"bls12-381.js","sourceRoot":"","sources":["src/bls12-381.ts"],"names":[],"mappings":"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"} |
+58
-10
@@ -1,4 +0,59 @@ | ||
| import { type CurveFn as BLSCurveFn, type PostPrecomputeFn } from './abstract/bls.ts'; | ||
| /** | ||
| * bn254, previously known as alt_bn_128, when it had 128-bit security. | ||
| Barbulescu-Duquesne 2017 shown it's weaker: just about 100 bits, | ||
| so the naming has been adjusted to its prime bit count: | ||
| https://hal.science/hal-01534101/file/main.pdf. | ||
| Compatible with EIP-196 and EIP-197. | ||
| There are huge compatibility issues in the ecosystem: | ||
| 1. Different libraries call it in different ways: "bn254", "bn256", "alt_bn128", "bn128". | ||
| 2. libff has bn128, but it's a different curve with different G2: | ||
| https://github.com/scipr-lab/libff/blob/a44f482e18b8ac04d034c193bd9d7df7817ad73f/libff/algebra/curves/bn128/bn128_init.cpp#L166-L169 | ||
| 3. halo2curves bn256 is also incompatible and returns different outputs | ||
| We don't implement Point methods toHex / toBytes. | ||
| To work around this limitation, has to initialize points on their own from BigInts. | ||
| Reason it's not implemented is because [there is no standard](https://github.com/privacy-scaling-explorations/halo2curves/issues/109). | ||
| Points of divergence: | ||
| - Endianness: LE vs BE (byte-swapped) | ||
| - Flags as first hex bits (similar to BLS) vs no-flags | ||
| - Imaginary part last in G2 vs first (c0, c1 vs c1, c0) | ||
| The goal of our implementation is to support "Ethereum" variant of the curve, | ||
| because it at least has specs: | ||
| - EIP196 (https://eips.ethereum.org/EIPS/eip-196) describes bn254 ECADD and ECMUL opcodes for EVM | ||
| - EIP197 (https://eips.ethereum.org/EIPS/eip-197) describes bn254 pairings | ||
| - It's hard: EIPs don't have proper tests. EIP-197 returns boolean output instead of Fp12 | ||
| - The existing implementations are bad. Some are deprecated: | ||
| - https://github.com/paritytech/bn (old version) | ||
| - https://github.com/ewasm/ethereum-bn128.rs (uses paritytech/bn) | ||
| - https://github.com/zcash-hackworks/bn | ||
| - https://github.com/arkworks-rs/curves/blob/master/bn254/src/lib.rs | ||
| - Python implementations use different towers and produce different Fp12 outputs: | ||
| - https://github.com/ethereum/py_pairing | ||
| - https://github.com/ethereum/execution-specs/blob/master/src/ethereum/crypto/alt_bn128.py | ||
| - Points are encoded differently in different implementations | ||
| ### Params | ||
| Seed (X): 4965661367192848881 | ||
| Fr: (36x⁴+36x³+18x²+6x+1) | ||
| Fp: (36x⁴+36x³+24x²+6x+1) | ||
| (E / Fp ): Y² = X³+3 | ||
| (Et / Fp²): Y² = X³+3/(u+9) (D-type twist) | ||
| Ate loop size: 6x+2 | ||
| ### Towers | ||
| - Fp²[u] = Fp/u²+1 | ||
| - Fp⁶[v] = Fp²/v³-9-u | ||
| - Fp¹²[w] = Fp⁶/w²-v | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type BLSCurvePair, type PostPrecomputeFn } from './abstract/bls.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
| import { type CurveFn } from './abstract/weierstrass.ts'; | ||
| export declare const bn254_Fr: IField<bigint>; | ||
@@ -10,10 +65,3 @@ export declare const _postPrecompute: PostPrecomputeFn; | ||
| */ | ||
| export declare const bn254: BLSCurveFn; | ||
| /** | ||
| * bn254 weierstrass curve with ECDSA. | ||
| * This is very rare and probably not used anywhere. | ||
| * Instead, you should use G1 / G2, defined above. | ||
| * @deprecated | ||
| */ | ||
| export declare const bn254_weierstrass: CurveFn; | ||
| export declare const bn254: BLSCurvePair; | ||
| //# sourceMappingURL=bn254.d.ts.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bn254.d.ts","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":"AAyDA,OAAO,EAEL,KAAK,OAAO,IAAI,UAAU,EAC1B,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,KAAK,OAAO,EAAqC,MAAM,2BAA2B,CAAC;AAsB5F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,CAA2B,CAAC;AAsDhE,eAAO,MAAM,eAAe,EAAE,gBAY7B,CAAC;AAmBF;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,UAgDlB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAS9B,CAAC"} | ||
| {"version":3,"file":"bn254.d.ts","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,sEAAsE;AACtE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAyB3D,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,CAA2B,CAAC;AAoChE,eAAO,MAAM,eAAe,EAAE,gBAY7B,CAAC;AA8EF;;;GAGG;AAEH,eAAO,MAAM,KAAK,EAAE,YAAiE,CAAC"} |
+69
-97
@@ -1,4 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.bn254_weierstrass = exports.bn254 = exports._postPrecompute = exports.bn254_Fr = void 0; | ||
| /** | ||
@@ -60,8 +57,7 @@ * bn254, previously known as alt_bn_128, when it had 128-bit security. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const sha2_js_1 = require("@noble/hashes/sha2.js"); | ||
| const bls_ts_1 = require("./abstract/bls.js"); | ||
| const modular_ts_1 = require("./abstract/modular.js"); | ||
| const tower_ts_1 = require("./abstract/tower.js"); | ||
| const weierstrass_ts_1 = require("./abstract/weierstrass.js"); | ||
| const utils_ts_1 = require("./utils.js"); | ||
| import { blsBasic, } from "./abstract/bls.js"; | ||
| import { Field } from "./abstract/modular.js"; | ||
| import { psiFrobenius, tower12 } from "./abstract/tower.js"; | ||
| import { weierstrass } from "./abstract/weierstrass.js"; | ||
| import { bitLen } from "./utils.js"; | ||
| // prettier-ignore | ||
@@ -71,3 +67,3 @@ const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| const BN_X = BigInt('4965661367192848881'); | ||
| const BN_X_LEN = (0, utils_ts_1.bitLen)(BN_X); | ||
| const BN_X_LEN = bitLen(BN_X); | ||
| const SIX_X_SQUARED = _6n * BN_X ** _2n; | ||
@@ -85,3 +81,3 @@ const bn254_G1_CURVE = { | ||
| // Finite field over r. It's for convenience and is not used in the code below. | ||
| exports.bn254_Fr = (0, modular_ts_1.Field)(bn254_G1_CURVE.n); | ||
| export const bn254_Fr = Field(bn254_G1_CURVE.n); | ||
| // Fp2.div(Fp2.mul(Fp2.ONE, _3n), Fp2.NONRESIDUE) | ||
@@ -92,3 +88,3 @@ const Fp2B = { | ||
| }; | ||
| const { Fp, Fp2, Fp6, Fp12 } = (0, tower_ts_1.tower12)({ | ||
| const { Fp, Fp2, Fp6, Fp12 } = tower12({ | ||
| ORDER: bn254_G1_CURVE.p, | ||
@@ -112,21 +108,4 @@ X_LEN: BN_X_LEN, | ||
| // END OF CURVE FIELDS | ||
| const { G2psi, psi } = (0, tower_ts_1.psiFrobenius)(Fp, Fp2, Fp2.NONRESIDUE); | ||
| /* | ||
| No hashToCurve for now (and signatures): | ||
| - RFC 9380 doesn't mention bn254 and doesn't provide test vectors | ||
| - Overall seems like nobody is using BLS signatures on top of bn254 | ||
| - Seems like it can utilize SVDW, which is not implemented yet | ||
| */ | ||
| const htfDefaults = Object.freeze({ | ||
| // DST: a domain separation tag defined in section 2.2.5 | ||
| DST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| p: Fp.ORDER, | ||
| m: 2, | ||
| k: 128, | ||
| expand: 'xmd', | ||
| hash: sha2_js_1.sha256, | ||
| }); | ||
| const _postPrecompute = (Rx, Ry, Rz, Qx, Qy, pointAdd) => { | ||
| const { G2psi, psi } = psiFrobenius(Fp, Fp2, Fp2.NONRESIDUE); | ||
| export const _postPrecompute = (Rx, Ry, Rz, Qx, Qy, pointAdd) => { | ||
| const q = psi(Qx, Qy); | ||
@@ -137,3 +116,2 @@ ({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1])); | ||
| }; | ||
| exports._postPrecompute = _postPrecompute; | ||
| // cofactor: (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1 | ||
@@ -155,2 +133,59 @@ const bn254_G2_CURVE = { | ||
| }; | ||
| const fields = { Fp, Fp2, Fp6, Fp12, Fr: bn254_Fr }; | ||
| const bn254_G1 = weierstrass(bn254_G1_CURVE, { | ||
| Fp, | ||
| Fn: bn254_Fr, | ||
| allowInfinityPoint: true, | ||
| }); | ||
| const bn254_G2 = weierstrass(bn254_G2_CURVE, { | ||
| Fp: Fp2, | ||
| Fn: bn254_Fr, | ||
| allowInfinityPoint: true, | ||
| isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P | ||
| }); | ||
| /* | ||
| No hashToCurve for now (and signatures): | ||
| - RFC 9380 doesn't mention bn254 and doesn't provide test vectors | ||
| - Overall seems like nobody is using BLS signatures on top of bn254 | ||
| - Seems like it can utilize SVDW, which is not implemented yet | ||
| */ | ||
| // const htfDefaults = Object.freeze({ | ||
| // // DST: a domain separation tag defined in section 2.2.5 | ||
| // DST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| // encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| // p: Fp.ORDER, | ||
| // m: 2, | ||
| // k: 128, | ||
| // expand: 'xmd', | ||
| // hash: sha256, | ||
| // }); | ||
| // const hasherOpts = { | ||
| // { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' } | ||
| // }; | ||
| const bn254_params = { | ||
| ateLoopSize: BN_X * _6n + _2n, | ||
| r: bn254_Fr.ORDER, | ||
| xNegative: false, | ||
| twistType: 'divisive', | ||
| postPrecompute: _postPrecompute, | ||
| }; | ||
| // const bn254_hasher = { | ||
| // hasherOpts: htfDefaults, | ||
| // hasherOptsG1: { m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' }, | ||
| // hasherOptsG2: htfDefaults | ||
| // }; | ||
| // G2_heff hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'), | ||
| // fromBytes: notImplemented, | ||
| // toBytes: notImplemented, | ||
| // mapToCurve: notImplemented, | ||
| // fromBytes: notImplemented, | ||
| // toBytes: notImplemented, | ||
| // ShortSignature: { | ||
| // fromBytes: notImplemented, | ||
| // fromHex: notImplemented, | ||
| // toBytes: notImplemented, | ||
| // toRawBytes: notImplemented, | ||
| // toHex: notImplemented, | ||
| // }, | ||
| /** | ||
@@ -160,67 +195,4 @@ * bn254 (a.k.a. alt_bn128) pairing-friendly curve. | ||
| */ | ||
| exports.bn254 = (0, bls_ts_1.bls)({ | ||
| // Fields | ||
| fields: { Fp, Fp2, Fp6, Fp12, Fr: exports.bn254_Fr }, | ||
| G1: { | ||
| ...bn254_G1_CURVE, | ||
| Fp, | ||
| htfDefaults: { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| mapToCurve: utils_ts_1.notImplemented, | ||
| fromBytes: utils_ts_1.notImplemented, | ||
| toBytes: utils_ts_1.notImplemented, | ||
| ShortSignature: { | ||
| fromBytes: utils_ts_1.notImplemented, | ||
| fromHex: utils_ts_1.notImplemented, | ||
| toBytes: utils_ts_1.notImplemented, | ||
| toRawBytes: utils_ts_1.notImplemented, | ||
| toHex: utils_ts_1.notImplemented, | ||
| }, | ||
| }, | ||
| G2: { | ||
| ...bn254_G2_CURVE, | ||
| Fp: Fp2, | ||
| hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'), | ||
| htfDefaults: { ...htfDefaults }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P | ||
| mapToCurve: utils_ts_1.notImplemented, | ||
| fromBytes: utils_ts_1.notImplemented, | ||
| toBytes: utils_ts_1.notImplemented, | ||
| Signature: { | ||
| fromBytes: utils_ts_1.notImplemented, | ||
| fromHex: utils_ts_1.notImplemented, | ||
| toBytes: utils_ts_1.notImplemented, | ||
| toRawBytes: utils_ts_1.notImplemented, | ||
| toHex: utils_ts_1.notImplemented, | ||
| }, | ||
| }, | ||
| params: { | ||
| ateLoopSize: BN_X * _6n + _2n, | ||
| r: exports.bn254_Fr.ORDER, | ||
| xNegative: false, | ||
| twistType: 'divisive', | ||
| }, | ||
| htfDefaults, | ||
| hash: sha2_js_1.sha256, | ||
| postPrecompute: exports._postPrecompute, | ||
| }); | ||
| /** | ||
| * bn254 weierstrass curve with ECDSA. | ||
| * This is very rare and probably not used anywhere. | ||
| * Instead, you should use G1 / G2, defined above. | ||
| * @deprecated | ||
| */ | ||
| exports.bn254_weierstrass = (0, weierstrass_ts_1.weierstrass)({ | ||
| a: BigInt(0), | ||
| b: BigInt(3), | ||
| Fp, | ||
| n: BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'), | ||
| Gx: BigInt(1), | ||
| Gy: BigInt(2), | ||
| h: BigInt(1), | ||
| hash: sha2_js_1.sha256, | ||
| }); | ||
| // bn254_hasher | ||
| export const bn254 = blsBasic(fields, bn254_G1, bn254_G2, bn254_params); | ||
| //# sourceMappingURL=bn254.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bn254.js","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"bn254.js","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":"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"} |
+12
-31
| import { type AffinePoint } from './abstract/curve.ts'; | ||
| import { PrimeEdwardsPoint, type CurveFn, type EdwardsPoint } from './abstract/edwards.ts'; | ||
| import { type H2CHasher, type H2CHasherBase, type H2CMethod, type htfBasicOpts } from './abstract/hash-to-curve.ts'; | ||
| import { PrimeEdwardsPoint, type EdDSA, type EdwardsPoint, type EdwardsPointCons } from './abstract/edwards.ts'; | ||
| import { type H2CHasher, type H2CHasherBase } from './abstract/hash-to-curve.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
| import { type MontgomeryECDH as XCurveFn } from './abstract/montgomery.ts'; | ||
| import { type Hex } from './utils.ts'; | ||
| import { type MontgomeryECDH } from './abstract/montgomery.ts'; | ||
| import { type OPRF } from './abstract/oprf.ts'; | ||
| /** | ||
@@ -17,7 +17,7 @@ * ed25519 curve with EdDSA signatures. | ||
| */ | ||
| export declare const ed25519: CurveFn; | ||
| export declare const ed25519: EdDSA; | ||
| /** Context of ed25519. Uses context for domain separation. */ | ||
| export declare const ed25519ctx: CurveFn; | ||
| export declare const ed25519ctx: EdDSA; | ||
| /** Prehashed version of ed25519. Accepts already-hashed messages in sign() and verify(). */ | ||
| export declare const ed25519ph: CurveFn; | ||
| export declare const ed25519ph: EdDSA; | ||
| /** | ||
@@ -33,5 +33,5 @@ * ECDH using curve25519 aka x25519. | ||
| */ | ||
| export declare const x25519: XCurveFn; | ||
| export declare const x25519: MontgomeryECDH; | ||
| /** Hashing to ed25519 points / field. RFC 9380 methods. */ | ||
| export declare const ed25519_hasher: H2CHasher<bigint>; | ||
| export declare const ed25519_hasher: H2CHasher<EdwardsPointCons>; | ||
| type ExtendedPoint = EdwardsPoint; | ||
@@ -56,4 +56,2 @@ /** | ||
| protected init(ep: EdwardsPoint): _RistrettoPoint; | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| static hashToCurve(hex: Hex): _RistrettoPoint; | ||
| static fromBytes(bytes: Uint8Array): _RistrettoPoint; | ||
@@ -65,4 +63,3 @@ /** | ||
| */ | ||
| static fromHex(hex: Hex): _RistrettoPoint; | ||
| static msm(points: _RistrettoPoint[], scalars: bigint[]): _RistrettoPoint; | ||
| static fromHex(hex: string): _RistrettoPoint; | ||
| /** | ||
@@ -84,3 +81,4 @@ * Encodes ristretto point to Uint8Array. | ||
| /** Hashing to ristretto255 points / field. RFC 9380 methods. */ | ||
| export declare const ristretto255_hasher: H2CHasherBase<bigint>; | ||
| export declare const ristretto255_hasher: H2CHasherBase<_RistrettoPoint>; | ||
| export declare const ristretto255_oprf: OPRF; | ||
| /** | ||
@@ -93,20 +91,3 @@ * Weird / bogus points, useful for debugging. | ||
| export declare const ED25519_TORSION_SUBGROUP: string[]; | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export declare function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array; | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export declare const edwardsToMontgomery: typeof edwardsToMontgomeryPub; | ||
| /** @deprecated use `ed25519.utils.toMontgomeryPriv` */ | ||
| export declare function edwardsToMontgomeryPriv(edwardsPriv: Uint8Array): Uint8Array; | ||
| /** @deprecated use `ristretto255.Point` */ | ||
| export declare const RistrettoPoint: typeof _RistrettoPoint; | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| type RistHasher = (msg: Uint8Array, options: htfBasicOpts) => _RistrettoPoint; | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const hashToRistretto255: RistHasher; | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const hash_to_ristretto255: RistHasher; | ||
| export {}; | ||
| //# sourceMappingURL=ed25519.d.ts.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["src/ed25519.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["src/ed25519.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAGL,iBAAiB,EACjB,KAAK,KAAK,EAGV,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAoG3D;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,EAAE,KAA+B,CAAC;AACtD,8DAA8D;AAC9D,eAAO,MAAM,UAAU,EAAE,KAAuD,CAAC;AACjF,4FAA4F;AAC5F,eAAO,MAAM,SAAS,EAAE,KAAwE,CAAC;AAEjG;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,EAAE,cAYjB,CAAC;AA0EL,2DAA2D;AAC3D,eAAO,MAAM,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAajD,CAAC;AA4BP,KAAK,aAAa,GAAG,YAAY,CAAC;AAsClC;;;;;;;;GAQG;AACH,cAAM,eAAgB,SAAQ,iBAAiB,CAAC,eAAe,CAAC;IAI9D,MAAM,CAAC,IAAI,EAAE,eAAe,CACwC;IAEpE,MAAM,CAAC,IAAI,EAAE,eAAe,CACwC;IAEpE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACM;IAE/B,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACM;gBAEnB,EAAE,EAAE,aAAa;IAI7B,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,eAAe;IAI3D,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAIlD,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,eAAe;IAIjD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe;IA4BpD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAI5C;;;OAGG;IACH,OAAO,IAAI,UAAU;IA4BrB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAWvC,GAAG,IAAI,OAAO;CAGf;AAED,eAAO,MAAM,YAAY,EAAE;IACzB,KAAK,EAAE,OAAO,eAAe,CAAC;CACF,CAAC;AAE/B,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,eAAe,CAU9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,IAOzB,CAAC;AAER;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAS5C,CAAC"} |
+95
-137
@@ -1,6 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.hash_to_ristretto255 = exports.hashToRistretto255 = exports.encodeToCurve = exports.hashToCurve = exports.RistrettoPoint = exports.edwardsToMontgomery = exports.ED25519_TORSION_SUBGROUP = exports.ristretto255_hasher = exports.ristretto255 = exports.ed25519_hasher = exports.x25519 = exports.ed25519ph = exports.ed25519ctx = exports.ed25519 = void 0; | ||
| exports.edwardsToMontgomeryPub = edwardsToMontgomeryPub; | ||
| exports.edwardsToMontgomeryPriv = edwardsToMontgomeryPriv; | ||
| /** | ||
@@ -14,10 +9,11 @@ * ed25519 Twisted Edwards curve with following addons: | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const sha2_js_1 = require("@noble/hashes/sha2.js"); | ||
| const utils_js_1 = require("@noble/hashes/utils.js"); | ||
| const curve_ts_1 = require("./abstract/curve.js"); | ||
| const edwards_ts_1 = require("./abstract/edwards.js"); | ||
| const hash_to_curve_ts_1 = require("./abstract/hash-to-curve.js"); | ||
| const modular_ts_1 = require("./abstract/modular.js"); | ||
| const montgomery_ts_1 = require("./abstract/montgomery.js"); | ||
| const utils_ts_1 = require("./utils.js"); | ||
| import { sha512 } from '@noble/hashes/sha2.js'; | ||
| import { abytes, concatBytes, hexToBytes } from '@noble/hashes/utils.js'; | ||
| import {} from "./abstract/curve.js"; | ||
| import { eddsa, edwards, PrimeEdwardsPoint, } from "./abstract/edwards.js"; | ||
| import { _DST_scalar, createHasher, expand_message_xmd, } from "./abstract/hash-to-curve.js"; | ||
| import { FpInvertBatch, FpSqrtEven, isNegativeLE, mod, pow2, } from "./abstract/modular.js"; | ||
| import { montgomery } from "./abstract/montgomery.js"; | ||
| import { createORPF } from "./abstract/oprf.js"; | ||
| import { asciiToBytes, bytesToNumberLE, equalBytes } from "./utils.js"; | ||
| // prettier-ignore | ||
@@ -27,3 +23,3 @@ const _0n = /* @__PURE__ */ BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| const _5n = BigInt(5), _8n = BigInt(8); | ||
| // P = 2n**255n-19n | ||
| // P = 2n**255n - 19n | ||
| const ed25519_CURVE_p = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed'); | ||
@@ -48,12 +44,12 @@ // N = 2n**252n + 27742317777372353535851937790883648493n | ||
| const b2 = (x2 * x) % P; // x^3, 11 | ||
| const b4 = ((0, modular_ts_1.pow2)(b2, _2n, P) * b2) % P; // x^15, 1111 | ||
| const b5 = ((0, modular_ts_1.pow2)(b4, _1n, P) * x) % P; // x^31 | ||
| const b10 = ((0, modular_ts_1.pow2)(b5, _5n, P) * b5) % P; | ||
| const b20 = ((0, modular_ts_1.pow2)(b10, _10n, P) * b10) % P; | ||
| const b40 = ((0, modular_ts_1.pow2)(b20, _20n, P) * b20) % P; | ||
| const b80 = ((0, modular_ts_1.pow2)(b40, _40n, P) * b40) % P; | ||
| const b160 = ((0, modular_ts_1.pow2)(b80, _80n, P) * b80) % P; | ||
| const b240 = ((0, modular_ts_1.pow2)(b160, _80n, P) * b80) % P; | ||
| const b250 = ((0, modular_ts_1.pow2)(b240, _10n, P) * b10) % P; | ||
| const pow_p_5_8 = ((0, modular_ts_1.pow2)(b250, _2n, P) * x) % P; | ||
| const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111 | ||
| const b5 = (pow2(b4, _1n, P) * x) % P; // x^31 | ||
| const b10 = (pow2(b5, _5n, P) * b5) % P; | ||
| const b20 = (pow2(b10, _10n, P) * b10) % P; | ||
| const b40 = (pow2(b20, _20n, P) * b20) % P; | ||
| const b80 = (pow2(b40, _40n, P) * b40) % P; | ||
| const b160 = (pow2(b80, _80n, P) * b80) % P; | ||
| const b240 = (pow2(b160, _80n, P) * b80) % P; | ||
| const b250 = (pow2(b240, _10n, P) * b10) % P; | ||
| const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P; | ||
| // ^ To pow to (p+3)/8, multiply it by x. | ||
@@ -78,13 +74,13 @@ return { pow_p_5_8, b2 }; | ||
| const P = ed25519_CURVE_p; | ||
| const v3 = (0, modular_ts_1.mod)(v * v * v, P); // v³ | ||
| const v7 = (0, modular_ts_1.mod)(v3 * v3 * v, P); // v⁷ | ||
| const v3 = mod(v * v * v, P); // v³ | ||
| const v7 = mod(v3 * v3 * v, P); // v⁷ | ||
| // (p+3)/8 and (p-5)/8 | ||
| const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8; | ||
| let x = (0, modular_ts_1.mod)(u * v3 * pow, P); // (uv³)(uv⁷)^(p-5)/8 | ||
| const vx2 = (0, modular_ts_1.mod)(v * x * x, P); // vx² | ||
| let x = mod(u * v3 * pow, P); // (uv³)(uv⁷)^(p-5)/8 | ||
| const vx2 = mod(v * x * x, P); // vx² | ||
| const root1 = x; // First root candidate | ||
| const root2 = (0, modular_ts_1.mod)(x * ED25519_SQRT_M1, P); // Second root candidate | ||
| const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate | ||
| const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root | ||
| const useRoot2 = vx2 === (0, modular_ts_1.mod)(-u, P); // If vx² = -u, set x <-- x * 2^((p-1)/4) | ||
| const noRoot = vx2 === (0, modular_ts_1.mod)(-u * ED25519_SQRT_M1, P); // There is no valid root, vx² = -u√(-1) | ||
| const useRoot2 = vx2 === mod(-u, P); // If vx² = -u, set x <-- x * 2^((p-1)/4) | ||
| const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx² = -u√(-1) | ||
| if (useRoot1) | ||
@@ -94,18 +90,18 @@ x = root1; | ||
| x = root2; // We return root2 anyway, for const-time | ||
| if ((0, modular_ts_1.isNegativeLE)(x, P)) | ||
| x = (0, modular_ts_1.mod)(-x, P); | ||
| if (isNegativeLE(x, P)) | ||
| x = mod(-x, P); | ||
| return { isValid: useRoot1 || useRoot2, value: x }; | ||
| } | ||
| const Fp = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed25519_CURVE.p, { isLE: true }))(); | ||
| const Fn = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed25519_CURVE.n, { isLE: true }))(); | ||
| const ed25519Defaults = /* @__PURE__ */ (() => ({ | ||
| ...ed25519_CURVE, | ||
| Fp, | ||
| hash: sha2_js_1.sha512, | ||
| adjustScalarBytes, | ||
| // dom2 | ||
| // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3. | ||
| // Constant-time, u/√v | ||
| uvRatio, | ||
| }))(); | ||
| const ed25519_Point = /* @__PURE__ */ edwards(ed25519_CURVE, { uvRatio }); | ||
| const Fp = /* @__PURE__ */ (() => ed25519_Point.Fp)(); | ||
| const Fn = /* @__PURE__ */ (() => ed25519_Point.Fn)(); | ||
| const ed25519_eddsa_opts = { adjustScalarBytes }; | ||
| function ed25519_domain(data, ctx, phflag) { | ||
| if (ctx.length > 255) | ||
| throw new Error('Context is too big'); | ||
| return concatBytes(asciiToBytes('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data); | ||
| } | ||
| function _ed(opts) { | ||
| return eddsa(ed25519_Point, sha512, Object.assign({}, ed25519_eddsa_opts, opts)); | ||
| } | ||
| /** | ||
@@ -121,18 +117,7 @@ * ed25519 curve with EdDSA signatures. | ||
| */ | ||
| exports.ed25519 = (() => (0, edwards_ts_1.twistedEdwards)(ed25519Defaults))(); | ||
| function ed25519_domain(data, ctx, phflag) { | ||
| if (ctx.length > 255) | ||
| throw new Error('Context is too big'); | ||
| return (0, utils_js_1.concatBytes)((0, utils_js_1.utf8ToBytes)('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data); | ||
| } | ||
| export const ed25519 = /* @__PURE__ */ _ed({}); | ||
| /** Context of ed25519. Uses context for domain separation. */ | ||
| exports.ed25519ctx = (() => (0, edwards_ts_1.twistedEdwards)({ | ||
| ...ed25519Defaults, | ||
| domain: ed25519_domain, | ||
| }))(); | ||
| export const ed25519ctx = /* @__PURE__ */ _ed({ domain: ed25519_domain }); | ||
| /** Prehashed version of ed25519. Accepts already-hashed messages in sign() and verify(). */ | ||
| exports.ed25519ph = (() => (0, edwards_ts_1.twistedEdwards)(Object.assign({}, ed25519Defaults, { | ||
| domain: ed25519_domain, | ||
| prehash: sha2_js_1.sha512, | ||
| })))(); | ||
| export const ed25519ph = /* @__PURE__ */ _ed({ domain: ed25519_domain, prehash: sha512 }); | ||
| /** | ||
@@ -148,5 +133,5 @@ * ECDH using curve25519 aka x25519. | ||
| */ | ||
| exports.x25519 = (() => { | ||
| const P = Fp.ORDER; | ||
| return (0, montgomery_ts_1.montgomery)({ | ||
| export const x25519 = /* @__PURE__ */ (() => { | ||
| const P = ed25519_CURVE_p; | ||
| return montgomery({ | ||
| P, | ||
@@ -157,3 +142,3 @@ type: 'x25519', | ||
| const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x); | ||
| return (0, modular_ts_1.mod)((0, modular_ts_1.pow2)(pow_p_5_8, _3n, P) * b2, P); | ||
| return mod(pow2(pow_p_5_8, _3n, P) * b2, P); | ||
| }, | ||
@@ -213,3 +198,3 @@ adjustScalarBytes, | ||
| } | ||
| const ELL2_C1_EDWARDS = /* @__PURE__ */ (() => (0, modular_ts_1.FpSqrtEven)(Fp, Fp.neg(BigInt(486664))))(); // sgn0(c1) MUST equal 0 | ||
| const ELL2_C1_EDWARDS = /* @__PURE__ */ (() => FpSqrtEven(Fp, Fp.neg(BigInt(486664))))(); // sgn0(c1) MUST equal 0 | ||
| function map_to_curve_elligator2_edwards25519(u) { | ||
@@ -229,7 +214,7 @@ const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); // 1. (xMn, xMd, yMn, yMd) = | ||
| yd = Fp.cmov(yd, Fp.ONE, e); // 12. yd = CMOV(yd, 1, e) | ||
| const [xd_inv, yd_inv] = (0, modular_ts_1.FpInvertBatch)(Fp, [xd, yd], true); // batch division | ||
| const [xd_inv, yd_inv] = FpInvertBatch(Fp, [xd, yd], true); // batch division | ||
| return { x: Fp.mul(xn, xd_inv), y: Fp.mul(yn, yd_inv) }; // 13. return (xn, xd, yn, yd) | ||
| } | ||
| /** Hashing to ed25519 points / field. RFC 9380 methods. */ | ||
| exports.ed25519_hasher = (() => (0, hash_to_curve_ts_1.createHasher)(exports.ed25519.Point, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), { | ||
| export const ed25519_hasher = /* @__PURE__ */ (() => createHasher(ed25519_Point, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), { | ||
| DST: 'edwards25519_XMD:SHA-512_ELL2_RO_', | ||
@@ -241,3 +226,3 @@ encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_', | ||
| expand: 'xmd', | ||
| hash: sha2_js_1.sha512, | ||
| hash: sha512, | ||
| }))(); | ||
@@ -257,3 +242,3 @@ // √(-1) aka √(a) aka 2^((p-1)/4) | ||
| const MAX_255B = /* @__PURE__ */ BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); | ||
| const bytes255ToNumberLE = (bytes) => exports.ed25519.Point.Fp.create((0, utils_ts_1.bytesToNumberLE)(bytes) & MAX_255B); | ||
| const bytes255ToNumberLE = (bytes) => Fp.create(bytesToNumberLE(bytes) & MAX_255B); | ||
| /** | ||
@@ -274,3 +259,3 @@ * Computes Elligator map for Ristretto255. | ||
| let s_ = mod(s * r0); // 6 | ||
| if (!(0, modular_ts_1.isNegativeLE)(s_, P)) | ||
| if (!isNegativeLE(s_, P)) | ||
| s_ = mod(-s_); | ||
@@ -287,6 +272,6 @@ if (!Ns_D_is_sq) | ||
| const W3 = mod(_1n + s2); // 13 | ||
| return new exports.ed25519.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| return new ed25519_Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| } | ||
| function ristretto255_map(bytes) { | ||
| (0, utils_js_1.abytes)(bytes, 64); | ||
| abytes(bytes, 64); | ||
| const r1 = bytes255ToNumberLE(bytes.subarray(0, 32)); | ||
@@ -307,3 +292,17 @@ const R1 = calcElligatorRistrettoMap(r1); | ||
| */ | ||
| class _RistrettoPoint extends edwards_ts_1.PrimeEdwardsPoint { | ||
| class _RistrettoPoint extends PrimeEdwardsPoint { | ||
| // Do NOT change syntax: the following gymnastics is done, | ||
| // because typescript strips comments, which makes bundlers disable tree-shaking. | ||
| // prettier-ignore | ||
| static BASE = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519_Point.BASE))(); | ||
| // prettier-ignore | ||
| static ZERO = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519_Point.ZERO))(); | ||
| // prettier-ignore | ||
| static Fp = | ||
| /* @__PURE__ */ (() => Fp)(); | ||
| // prettier-ignore | ||
| static Fn = | ||
| /* @__PURE__ */ (() => Fn)(); | ||
| constructor(ep) { | ||
@@ -313,3 +312,3 @@ super(ep); | ||
| static fromAffine(ap) { | ||
| return new _RistrettoPoint(exports.ed25519.Point.fromAffine(ap)); | ||
| return new _RistrettoPoint(ed25519_Point.fromAffine(ap)); | ||
| } | ||
@@ -323,8 +322,4 @@ assertSame(other) { | ||
| } | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| static hashToCurve(hex) { | ||
| return ristretto255_map((0, utils_ts_1.ensureBytes)('ristrettoHash', hex, 64)); | ||
| } | ||
| static fromBytes(bytes) { | ||
| (0, utils_js_1.abytes)(bytes, 32); | ||
| abytes(bytes, 32); | ||
| const { a, d } = ed25519_CURVE; | ||
@@ -336,3 +331,3 @@ const P = ed25519_CURVE_p; | ||
| // 3. Check that s is non-negative, or else abort | ||
| if (!(0, utils_ts_1.equalBytes)(Fp.toBytes(s), bytes) || (0, modular_ts_1.isNegativeLE)(s, P)) | ||
| if (!equalBytes(Fp.toBytes(s), bytes) || isNegativeLE(s, P)) | ||
| throw new Error('invalid ristretto255 encoding 1'); | ||
@@ -349,9 +344,9 @@ const s2 = mod(s * s); | ||
| let x = mod((s + s) * Dx); // 10 | ||
| if ((0, modular_ts_1.isNegativeLE)(x, P)) | ||
| if (isNegativeLE(x, P)) | ||
| x = mod(-x); // 10 | ||
| const y = mod(u1 * Dy); // 11 | ||
| const t = mod(x * y); // 12 | ||
| if (!isValid || (0, modular_ts_1.isNegativeLE)(t, P) || y === _0n) | ||
| if (!isValid || isNegativeLE(t, P) || y === _0n) | ||
| throw new Error('invalid ristretto255 encoding 2'); | ||
| return new _RistrettoPoint(new exports.ed25519.Point(x, y, _1n, t)); | ||
| return new _RistrettoPoint(new ed25519_Point(x, y, _1n, t)); | ||
| } | ||
@@ -364,7 +359,4 @@ /** | ||
| static fromHex(hex) { | ||
| return _RistrettoPoint.fromBytes((0, utils_ts_1.ensureBytes)('ristrettoHex', hex, 32)); | ||
| return _RistrettoPoint.fromBytes(hexToBytes(hex)); | ||
| } | ||
| static msm(points, scalars) { | ||
| return (0, curve_ts_1.pippenger)(_RistrettoPoint, exports.ed25519.Point.Fn, points, scalars); | ||
| } | ||
| /** | ||
@@ -387,3 +379,3 @@ * Encodes ristretto point to Uint8Array. | ||
| let D; // 7 | ||
| if ((0, modular_ts_1.isNegativeLE)(T * zInv, P)) { | ||
| if (isNegativeLE(T * zInv, P)) { | ||
| let _x = mod(Y * SQRT_M1); | ||
@@ -398,6 +390,6 @@ let _y = mod(X * SQRT_M1); | ||
| } | ||
| if ((0, modular_ts_1.isNegativeLE)(X * zInv, P)) | ||
| if (isNegativeLE(X * zInv, P)) | ||
| Y = mod(-Y); // 9 | ||
| let s = mod((Z - Y) * D); // 10 (check footer's note, no sqrt(-a)) | ||
| if ((0, modular_ts_1.isNegativeLE)(s, P)) | ||
| if (isNegativeLE(s, P)) | ||
| s = mod(-s); | ||
@@ -424,36 +416,22 @@ return Fp.toBytes(s); // 11 | ||
| } | ||
| // Do NOT change syntax: the following gymnastics is done, | ||
| // because typescript strips comments, which makes bundlers disable tree-shaking. | ||
| // prettier-ignore | ||
| _RistrettoPoint.BASE = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(exports.ed25519.Point.BASE))(); | ||
| // prettier-ignore | ||
| _RistrettoPoint.ZERO = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(exports.ed25519.Point.ZERO))(); | ||
| // prettier-ignore | ||
| _RistrettoPoint.Fp = | ||
| /* @__PURE__ */ (() => Fp)(); | ||
| // prettier-ignore | ||
| _RistrettoPoint.Fn = | ||
| /* @__PURE__ */ (() => Fn)(); | ||
| exports.ristretto255 = { Point: _RistrettoPoint }; | ||
| export const ristretto255 = { Point: _RistrettoPoint }; | ||
| /** Hashing to ristretto255 points / field. RFC 9380 methods. */ | ||
| exports.ristretto255_hasher = { | ||
| export const ristretto255_hasher = { | ||
| hashToCurve(msg, options) { | ||
| const DST = options?.DST || 'ristretto255_XMD:SHA-512_R255MAP_RO_'; | ||
| const xmd = (0, hash_to_curve_ts_1.expand_message_xmd)(msg, DST, 64, sha2_js_1.sha512); | ||
| const xmd = expand_message_xmd(msg, DST, 64, sha512); | ||
| return ristretto255_map(xmd); | ||
| }, | ||
| hashToScalar(msg, options = { DST: hash_to_curve_ts_1._DST_scalar }) { | ||
| const xmd = (0, hash_to_curve_ts_1.expand_message_xmd)(msg, options.DST, 64, sha2_js_1.sha512); | ||
| return Fn.create((0, utils_ts_1.bytesToNumberLE)(xmd)); | ||
| hashToScalar(msg, options = { DST: _DST_scalar }) { | ||
| const xmd = expand_message_xmd(msg, options.DST, 64, sha512); | ||
| return Fn.create(bytesToNumberLE(xmd)); | ||
| }, | ||
| }; | ||
| // export const ristretto255_oprf: OPRF = createORPF({ | ||
| // name: 'ristretto255-SHA512', | ||
| // Point: RistrettoPoint, | ||
| // hash: sha512, | ||
| // hashToGroup: ristretto255_hasher.hashToCurve, | ||
| // hashToScalar: ristretto255_hasher.hashToScalar, | ||
| // }); | ||
| export const ristretto255_oprf = /* @__PURE__ */ (() => createORPF({ | ||
| name: 'ristretto255-SHA512', | ||
| Point: _RistrettoPoint, | ||
| hash: sha512, | ||
| hashToGroup: ristretto255_hasher.hashToCurve, | ||
| hashToScalar: ristretto255_hasher.hashToScalar, | ||
| }))(); | ||
| /** | ||
@@ -465,3 +443,3 @@ * Weird / bogus points, useful for debugging. | ||
| */ | ||
| exports.ED25519_TORSION_SUBGROUP = [ | ||
| export const ED25519_TORSION_SUBGROUP = [ | ||
| '0100000000000000000000000000000000000000000000000000000000000000', | ||
@@ -476,22 +454,2 @@ 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a', | ||
| ]; | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| function edwardsToMontgomeryPub(edwardsPub) { | ||
| return exports.ed25519.utils.toMontgomery((0, utils_ts_1.ensureBytes)('pub', edwardsPub)); | ||
| } | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| exports.edwardsToMontgomery = edwardsToMontgomeryPub; | ||
| /** @deprecated use `ed25519.utils.toMontgomeryPriv` */ | ||
| function edwardsToMontgomeryPriv(edwardsPriv) { | ||
| return exports.ed25519.utils.toMontgomeryPriv((0, utils_ts_1.ensureBytes)('pub', edwardsPriv)); | ||
| } | ||
| /** @deprecated use `ristretto255.Point` */ | ||
| exports.RistrettoPoint = _RistrettoPoint; | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| exports.hashToCurve = (() => exports.ed25519_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| exports.encodeToCurve = (() => exports.ed25519_hasher.encodeToCurve)(); | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| exports.hashToRistretto255 = (() => exports.ristretto255_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| exports.hash_to_ristretto255 = (() => exports.ristretto255_hasher.hashToCurve)(); | ||
| //# sourceMappingURL=ed25519.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["src/ed25519.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["src/ed25519.ts"],"names":[],"mappings":"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"} |
+11
-29
| import type { AffinePoint } from './abstract/curve.ts'; | ||
| import { PrimeEdwardsPoint, type CurveFn, type EdwardsPoint, type EdwardsPointCons } from './abstract/edwards.ts'; | ||
| import { type H2CHasher, type H2CHasherBase, type H2CMethod, type htfBasicOpts } from './abstract/hash-to-curve.ts'; | ||
| import { PrimeEdwardsPoint, type EdDSA, type EdwardsPoint, type EdwardsPointCons } from './abstract/edwards.ts'; | ||
| import { type H2CHasher, type H2CHasherBase } from './abstract/hash-to-curve.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
| import { type MontgomeryECDH as XCurveFn } from './abstract/montgomery.ts'; | ||
| import { type Hex } from './utils.ts'; | ||
| import { type MontgomeryECDH } from './abstract/montgomery.ts'; | ||
| import { type OPRF } from './abstract/oprf.ts'; | ||
| /** | ||
@@ -16,5 +16,5 @@ * ed448 EdDSA curve and methods. | ||
| */ | ||
| export declare const ed448: CurveFn; | ||
| export declare const ed448: EdDSA; | ||
| /** Prehashed version of ed448. Accepts already-hashed messages in sign() and verify(). */ | ||
| export declare const ed448ph: CurveFn; | ||
| export declare const ed448ph: EdDSA; | ||
| /** | ||
@@ -31,5 +31,5 @@ * E448 curve, defined by NIST. | ||
| */ | ||
| export declare const x448: XCurveFn; | ||
| export declare const x448: MontgomeryECDH; | ||
| /** Hashing / encoding to ed448 points / field. RFC 9380 methods. */ | ||
| export declare const ed448_hasher: H2CHasher<bigint>; | ||
| export declare const ed448_hasher: H2CHasher<EdwardsPointCons>; | ||
| /** | ||
@@ -51,4 +51,2 @@ * Each ed448/EdwardsPoint has 4 different equivalent points. This can be | ||
| protected init(ep: EdwardsPoint): _DecafPoint; | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| static hashToCurve(hex: Hex): _DecafPoint; | ||
| static fromBytes(bytes: Uint8Array): _DecafPoint; | ||
@@ -60,5 +58,3 @@ /** | ||
| */ | ||
| static fromHex(hex: Hex): _DecafPoint; | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| static msm(points: _DecafPoint[], scalars: bigint[]): _DecafPoint; | ||
| static fromHex(hex: string): _DecafPoint; | ||
| /** | ||
@@ -80,3 +76,4 @@ * Encodes decaf point to Uint8Array. | ||
| /** Hashing to decaf448 points / field. RFC 9380 methods. */ | ||
| export declare const decaf448_hasher: H2CHasherBase<bigint>; | ||
| export declare const decaf448_hasher: H2CHasherBase<_DecafPoint>; | ||
| export declare const decaf448_oprf: OPRF; | ||
| /** | ||
@@ -89,18 +86,3 @@ * Weird / bogus points, useful for debugging. | ||
| export declare const ED448_TORSION_SUBGROUP: string[]; | ||
| type DcfHasher = (msg: Uint8Array, options: htfBasicOpts) => _DecafPoint; | ||
| /** @deprecated use `decaf448.Point` */ | ||
| export declare const DecafPoint: typeof _DecafPoint; | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const hashToDecaf448: DcfHasher; | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const hash_to_decaf448: DcfHasher; | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export declare function edwardsToMontgomeryPub(edwardsPub: string | Uint8Array): Uint8Array; | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export declare const edwardsToMontgomery: typeof edwardsToMontgomeryPub; | ||
| export {}; | ||
| //# sourceMappingURL=ed448.d.ts.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"ed448.d.ts","sourceRoot":"","sources":["src/ed448.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAEL,iBAAiB,EAEjB,KAAK,OAAO,EAEZ,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAiD,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAc,KAAK,cAAc,IAAI,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAA0D,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAyI9F;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,EAAE,OAAmC,CAAC;AAGxD,0FAA0F;AAC1F,eAAO,MAAM,OAAO,EAAE,OAIf,CAAC;AAER;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,gBAAsC,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,QAYf,CAAC;AA+EL,oEAAoE;AACpE,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,MAAM,CASpC,CAAC;AAgER;;;;;;GAMG;AACH,cAAM,WAAY,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IAGtD,MAAM,CAAC,IAAI,EAAE,WAAW,CAC0D;IAElF,MAAM,CAAC,IAAI,EAAE,WAAW,CACsC;IAE9D,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACS;IAElC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACS;gBAEtB,EAAE,EAAE,YAAY;IAI5B,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW;IAIvD,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI9C,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW;IAI7C,kFAAkF;IAClF,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW;IAIzC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW;IA+BhD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW;IAIrC,qFAAqF;IACrF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW;IAIjE;;;OAGG;IACH,OAAO,IAAI,UAAU;IAerB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAQnC,GAAG,IAAI,OAAO;CAGf;AAED,eAAO,MAAM,QAAQ,EAAE;IACrB,KAAK,EAAE,OAAO,WAAW,CAAC;CACF,CAAC;AAE3B,4DAA4D;AAC5D,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,MAAM,CAajD,CAAC;AAUF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAK1C,CAAC;AAEF,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,KAAK,WAAW,CAAC;AAEzE,uCAAuC;AACvC,eAAO,MAAM,UAAU,EAAE,OAAO,WAAyB,CAAC;AAC1D,+EAA+E;AAC/E,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAAsD,CAAC;AACjG,+EAA+E;AAC/E,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,CACb,CAAC;AAChC,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,SACgB,CAAC;AAC9C,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,SACc,CAAC;AAC9C,iDAAiD;AACjD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAElF;AACD,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,EAAE,OAAO,sBAA+C,CAAC"} | ||
| {"version":3,"file":"ed448.d.ts","sourceRoot":"","sources":["src/ed448.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAGL,iBAAiB,EACjB,KAAK,KAAK,EAEV,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAiD,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AA+H3D;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,EAAE,KAA0D,CAAC;AAG/E,0FAA0F;AAC1F,eAAO,MAAM,OAAO,EAAE,KAGpB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,gBAAsC,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,cAYf,CAAC;AA+EL,oEAAoE;AACpE,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,gBAAgB,CAS9C,CAAC;AAgER;;;;;;GAMG;AACH,cAAM,WAAY,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IAGtD,MAAM,CAAC,IAAI,EAAE,WAAW,CAC0D;IAElF,MAAM,CAAC,IAAI,EAAE,WAAW,CACsC;IAE9D,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACS;IAElC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACS;gBAEtB,EAAE,EAAE,YAAY;IAI5B,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW;IAIvD,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI9C,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW;IAI7C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW;IA8BhD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAIxC;;;OAGG;IACH,OAAO,IAAI,UAAU;IAerB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAQnC,GAAG,IAAI,OAAO;CAGf;AAED,eAAO,MAAM,QAAQ,EAAE;IACrB,KAAK,EAAE,OAAO,WAAW,CAAC;CACF,CAAC;AAE3B,4DAA4D;AAC5D,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,WAAW,CAatD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,IAOrB,CAAC;AAER;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAK1C,CAAC"} |
+85
-123
@@ -1,5 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.edwardsToMontgomery = exports.hash_to_decaf448 = exports.hashToDecaf448 = exports.encodeToCurve = exports.hashToCurve = exports.DecafPoint = exports.ED448_TORSION_SUBGROUP = exports.decaf448_hasher = exports.decaf448 = exports.ed448_hasher = exports.x448 = exports.E448 = exports.ed448ph = exports.ed448 = void 0; | ||
| exports.edwardsToMontgomeryPub = edwardsToMontgomeryPub; | ||
| /** | ||
@@ -14,10 +10,10 @@ * Edwards448 (not Ed448-Goldilocks) curve with following addons: | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const sha3_js_1 = require("@noble/hashes/sha3.js"); | ||
| const utils_js_1 = require("@noble/hashes/utils.js"); | ||
| const curve_ts_1 = require("./abstract/curve.js"); | ||
| const edwards_ts_1 = require("./abstract/edwards.js"); | ||
| const hash_to_curve_ts_1 = require("./abstract/hash-to-curve.js"); | ||
| const modular_ts_1 = require("./abstract/modular.js"); | ||
| const montgomery_ts_1 = require("./abstract/montgomery.js"); | ||
| const utils_ts_1 = require("./utils.js"); | ||
| import { shake256 } from '@noble/hashes/sha3.js'; | ||
| import { concatBytes, hexToBytes, createHasher as wrapConstructor } from '@noble/hashes/utils.js'; | ||
| import { eddsa, edwards, PrimeEdwardsPoint, } from "./abstract/edwards.js"; | ||
| import { _DST_scalar, createHasher, expand_message_xof, } from "./abstract/hash-to-curve.js"; | ||
| import { Field, FpInvertBatch, isNegativeLE, mod, pow2 } from "./abstract/modular.js"; | ||
| import { montgomery } from "./abstract/montgomery.js"; | ||
| import { createORPF } from "./abstract/oprf.js"; | ||
| import { abytes, asciiToBytes, bytesToNumberLE, equalBytes } from "./utils.js"; | ||
| // edwards448 curve | ||
@@ -46,4 +42,4 @@ // a = 1n | ||
| }); | ||
| const shake256_114 = /* @__PURE__ */ (0, utils_js_1.createHasher)(() => sha3_js_1.shake256.create({ dkLen: 114 })); | ||
| const shake256_64 = /* @__PURE__ */ (0, utils_js_1.createHasher)(() => sha3_js_1.shake256.create({ dkLen: 64 })); | ||
| const shake256_114 = /* @__PURE__ */ wrapConstructor(() => shake256.create({ dkLen: 114 })); | ||
| const shake256_64 = /* @__PURE__ */ wrapConstructor(() => shake256.create({ dkLen: 64 })); | ||
| // prettier-ignore | ||
@@ -60,13 +56,13 @@ const _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4), _11n = BigInt(11); | ||
| const b3 = (b2 * b2 * x) % P; | ||
| const b6 = ((0, modular_ts_1.pow2)(b3, _3n, P) * b3) % P; | ||
| const b9 = ((0, modular_ts_1.pow2)(b6, _3n, P) * b3) % P; | ||
| const b11 = ((0, modular_ts_1.pow2)(b9, _2n, P) * b2) % P; | ||
| const b22 = ((0, modular_ts_1.pow2)(b11, _11n, P) * b11) % P; | ||
| const b44 = ((0, modular_ts_1.pow2)(b22, _22n, P) * b22) % P; | ||
| const b88 = ((0, modular_ts_1.pow2)(b44, _44n, P) * b44) % P; | ||
| const b176 = ((0, modular_ts_1.pow2)(b88, _88n, P) * b88) % P; | ||
| const b220 = ((0, modular_ts_1.pow2)(b176, _44n, P) * b44) % P; | ||
| const b222 = ((0, modular_ts_1.pow2)(b220, _2n, P) * b2) % P; | ||
| const b223 = ((0, modular_ts_1.pow2)(b222, _1n, P) * x) % P; | ||
| return ((0, modular_ts_1.pow2)(b223, _223n, P) * b222) % P; | ||
| const b6 = (pow2(b3, _3n, P) * b3) % P; | ||
| const b9 = (pow2(b6, _3n, P) * b3) % P; | ||
| const b11 = (pow2(b9, _2n, P) * b2) % P; | ||
| const b22 = (pow2(b11, _11n, P) * b11) % P; | ||
| const b44 = (pow2(b22, _22n, P) * b22) % P; | ||
| const b88 = (pow2(b44, _44n, P) * b44) % P; | ||
| const b176 = (pow2(b88, _88n, P) * b88) % P; | ||
| const b220 = (pow2(b176, _44n, P) * b44) % P; | ||
| const b222 = (pow2(b220, _2n, P) * b2) % P; | ||
| const b223 = (pow2(b222, _1n, P) * x) % P; | ||
| return (pow2(b223, _223n, P) * b222) % P; | ||
| } | ||
@@ -92,12 +88,12 @@ function adjustScalarBytes(bytes) { | ||
| // x = (u/v)^((p+1)/4) = u³v(u⁵v³)^((p-3)/4) (mod p) | ||
| const u2v = (0, modular_ts_1.mod)(u * u * v, P); // u²v | ||
| const u3v = (0, modular_ts_1.mod)(u2v * u, P); // u³v | ||
| const u5v3 = (0, modular_ts_1.mod)(u3v * u2v * v, P); // u⁵v³ | ||
| const u2v = mod(u * u * v, P); // u²v | ||
| const u3v = mod(u2v * u, P); // u³v | ||
| const u5v3 = mod(u3v * u2v * v, P); // u⁵v³ | ||
| const root = ed448_pow_Pminus3div4(u5v3); | ||
| const x = (0, modular_ts_1.mod)(u3v * root, P); | ||
| const x = mod(u3v * root, P); | ||
| // Verify that root is exists | ||
| const x2 = (0, modular_ts_1.mod)(x * x, P); // x² | ||
| const x2 = mod(x * x, P); // x² | ||
| // If vx² = u, the recovered x-coordinate is x. Otherwise, no | ||
| // square root exists, and the decoding fails. | ||
| return { isValid: (0, modular_ts_1.mod)(x2 * v, P) === u, value: x }; | ||
| return { isValid: mod(x2 * v, P) === u, value: x }; | ||
| } | ||
@@ -108,7 +104,7 @@ // Finite field 2n**448n - 2n**224n - 1n | ||
| // - ed448 fits in 448 bits. We can't use last 1 byte: we can only use a bit 224 in the middle. | ||
| const Fp = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed448_CURVE.p, { BITS: 456, isLE: true }))(); | ||
| const Fn = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed448_CURVE.n, { BITS: 456, isLE: true }))(); | ||
| const Fp = /* @__PURE__ */ (() => Field(ed448_CURVE.p, { BITS: 456, isLE: true }))(); | ||
| const Fn = /* @__PURE__ */ (() => Field(ed448_CURVE.n, { BITS: 456, isLE: true }))(); | ||
| // decaf448 uses 448-bit (56-byte) keys | ||
| const Fp448 = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed448_CURVE.p, { BITS: 448, isLE: true }))(); | ||
| const Fn448 = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed448_CURVE.n, { BITS: 448, isLE: true }))(); | ||
| const Fp448 = /* @__PURE__ */ (() => Field(ed448_CURVE.p, { BITS: 448, isLE: true }))(); | ||
| const Fn448 = /* @__PURE__ */ (() => Field(ed448_CURVE.n, { BITS: 448, isLE: true }))(); | ||
| // SHAKE256(dom4(phflag,context)||x, 114) | ||
@@ -118,16 +114,6 @@ function dom4(data, ctx, phflag) { | ||
| throw new Error('context must be smaller than 255, got: ' + ctx.length); | ||
| return (0, utils_js_1.concatBytes)((0, utils_ts_1.asciiToBytes)('SigEd448'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data); | ||
| return concatBytes(asciiToBytes('SigEd448'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data); | ||
| } | ||
| // const ed448_eddsa_opts = { adjustScalarBytes, domain: dom4 }; | ||
| // const ed448_Point = edwards(ed448_CURVE, { Fp, Fn, uvRatio }); | ||
| const ED448_DEF = /* @__PURE__ */ (() => ({ | ||
| ...ed448_CURVE, | ||
| Fp, | ||
| Fn, | ||
| nBitLength: Fn.BITS, | ||
| hash: shake256_114, | ||
| adjustScalarBytes, | ||
| domain: dom4, | ||
| uvRatio, | ||
| }))(); | ||
| const ed448_eddsa_opts = { adjustScalarBytes, domain: dom4 }; | ||
| const ed448_Point = edwards(ed448_CURVE, { Fp, Fn, uvRatio }); | ||
| /** | ||
@@ -142,9 +128,9 @@ * ed448 EdDSA curve and methods. | ||
| */ | ||
| exports.ed448 = (0, edwards_ts_1.twistedEdwards)(ED448_DEF); | ||
| export const ed448 = eddsa(ed448_Point, shake256_114, ed448_eddsa_opts); | ||
| // There is no ed448ctx, since ed448 supports ctx by default | ||
| /** Prehashed version of ed448. Accepts already-hashed messages in sign() and verify(). */ | ||
| exports.ed448ph = (() => (0, edwards_ts_1.twistedEdwards)({ | ||
| ...ED448_DEF, | ||
| export const ed448ph = /* @__PURE__ */ eddsa(ed448_Point, shake256_114, { | ||
| ...ed448_eddsa_opts, | ||
| prehash: shake256_64, | ||
| }))(); | ||
| }); | ||
| /** | ||
@@ -155,3 +141,3 @@ * E448 curve, defined by NIST. | ||
| */ | ||
| exports.E448 = (0, edwards_ts_1.edwards)(E448_CURVE); | ||
| export const E448 = edwards(E448_CURVE); | ||
| /** | ||
@@ -162,5 +148,5 @@ * ECDH using curve448 aka x448. | ||
| */ | ||
| exports.x448 = (() => { | ||
| export const x448 = /* @__PURE__ */ (() => { | ||
| const P = ed448_CURVE.p; | ||
| return (0, montgomery_ts_1.montgomery)({ | ||
| return montgomery({ | ||
| P, | ||
@@ -170,4 +156,4 @@ type: 'x448', | ||
| const Pminus3div4 = ed448_pow_Pminus3div4(x); | ||
| const Pminus3 = (0, modular_ts_1.pow2)(Pminus3div4, _2n, P); | ||
| return (0, modular_ts_1.mod)(Pminus3 * x, P); // Pminus3 * x = Pminus2 | ||
| const Pminus3 = pow2(Pminus3div4, _2n, P); | ||
| return mod(Pminus3 * x, P); // Pminus3 * x = Pminus2 | ||
| }, | ||
@@ -247,7 +233,7 @@ adjustScalarBytes, | ||
| yEd = Fp.cmov(yEd, Fp.ONE, e); // 37. yEd = CMOV(yEd, 1, e) | ||
| const inv = (0, modular_ts_1.FpInvertBatch)(Fp, [xEd, yEd], true); // batch division | ||
| const inv = FpInvertBatch(Fp, [xEd, yEd], true); // batch division | ||
| return { x: Fp.mul(xEn, inv[0]), y: Fp.mul(yEn, inv[1]) }; // 38. return (xEn, xEd, yEn, yEd) | ||
| } | ||
| /** Hashing / encoding to ed448 points / field. RFC 9380 methods. */ | ||
| exports.ed448_hasher = (() => (0, hash_to_curve_ts_1.createHasher)(exports.ed448.Point, (scalars) => map_to_curve_elligator2_edwards448(scalars[0]), { | ||
| export const ed448_hasher = /* @__PURE__ */ (() => createHasher(ed448_Point, (scalars) => map_to_curve_elligator2_edwards448(scalars[0]), { | ||
| DST: 'edwards448_XOF:SHAKE256_ELL2_RO_', | ||
@@ -259,3 +245,3 @@ encodeDST: 'edwards448_XOF:SHAKE256_ELL2_NU_', | ||
| expand: 'xof', | ||
| hash: sha3_js_1.shake256, | ||
| hash: shake256, | ||
| }))(); | ||
@@ -293,3 +279,3 @@ // 1-d | ||
| let s_abs = s; | ||
| if ((0, modular_ts_1.isNegativeLE)(s, P)) | ||
| if (isNegativeLE(s, P)) | ||
| s_abs = mod(-s); | ||
@@ -301,6 +287,6 @@ const s2 = s * s; | ||
| const W3 = mod(v_prime * s * (r - _1n) * ONE_MINUS_TWO_D + sgn); // 11 | ||
| return new exports.ed448.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| return new ed448_Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| } | ||
| function decaf448_map(bytes) { | ||
| (0, utils_js_1.abytes)(bytes, 112); | ||
| abytes(bytes, 112); | ||
| const skipValidation = true; | ||
@@ -323,3 +309,16 @@ // Note: Similar to the field element decoding described in | ||
| */ | ||
| class _DecafPoint extends edwards_ts_1.PrimeEdwardsPoint { | ||
| class _DecafPoint extends PrimeEdwardsPoint { | ||
| // The following gymnastics is done because typescript strips comments otherwise | ||
| // prettier-ignore | ||
| static BASE = | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448_Point.BASE).multiplyUnsafe(_2n))(); | ||
| // prettier-ignore | ||
| static ZERO = | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448_Point.ZERO))(); | ||
| // prettier-ignore | ||
| static Fp = | ||
| /* @__PURE__ */ (() => Fp448)(); | ||
| // prettier-ignore | ||
| static Fn = | ||
| /* @__PURE__ */ (() => Fn448)(); | ||
| constructor(ep) { | ||
@@ -329,3 +328,3 @@ super(ep); | ||
| static fromAffine(ap) { | ||
| return new _DecafPoint(exports.ed448.Point.fromAffine(ap)); | ||
| return new _DecafPoint(ed448_Point.fromAffine(ap)); | ||
| } | ||
@@ -339,8 +338,4 @@ assertSame(other) { | ||
| } | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| static hashToCurve(hex) { | ||
| return decaf448_map((0, utils_ts_1.ensureBytes)('decafHash', hex, 112)); | ||
| } | ||
| static fromBytes(bytes) { | ||
| (0, utils_js_1.abytes)(bytes, 56); | ||
| abytes(bytes, 56); | ||
| const { d } = ed448_CURVE; | ||
@@ -352,3 +347,3 @@ const P = Fp.ORDER; | ||
| // 2. Check that s is non-negative, or else abort | ||
| if (!(0, utils_ts_1.equalBytes)(Fn448.toBytes(s), bytes) || (0, modular_ts_1.isNegativeLE)(s, P)) | ||
| if (!equalBytes(Fn448.toBytes(s), bytes) || isNegativeLE(s, P)) | ||
| throw new Error('invalid decaf448 encoding 1'); | ||
@@ -361,3 +356,3 @@ const s2 = mod(s * s); // 1 | ||
| let u3 = mod((s + s) * invsqrt * u1 * SQRT_MINUS_D); // 5 | ||
| if ((0, modular_ts_1.isNegativeLE)(u3, P)) | ||
| if (isNegativeLE(u3, P)) | ||
| u3 = mod(-u3); | ||
@@ -369,3 +364,3 @@ const x = mod(u3 * invsqrt * u2 * INVSQRT_MINUS_D); // 6 | ||
| throw new Error('invalid decaf448 encoding 2'); | ||
| return new _DecafPoint(new exports.ed448.Point(x, y, _1n, t)); | ||
| return new _DecafPoint(new ed448_Point(x, y, _1n, t)); | ||
| } | ||
@@ -378,8 +373,4 @@ /** | ||
| static fromHex(hex) { | ||
| return _DecafPoint.fromBytes((0, utils_ts_1.ensureBytes)('decafHex', hex, 56)); | ||
| return _DecafPoint.fromBytes(hexToBytes(hex)); | ||
| } | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| static msm(points, scalars) { | ||
| return (0, curve_ts_1.pippenger)(_DecafPoint, Fn, points, scalars); | ||
| } | ||
| /** | ||
@@ -397,7 +388,7 @@ * Encodes decaf point to Uint8Array. | ||
| let ratio = mod(invsqrt * u1 * SQRT_MINUS_D); // 3 | ||
| if ((0, modular_ts_1.isNegativeLE)(ratio, P)) | ||
| if (isNegativeLE(ratio, P)) | ||
| ratio = mod(-ratio); | ||
| const u2 = mod(INVSQRT_MINUS_D * ratio * Z - T); // 4 | ||
| let s = mod(ONE_MINUS_D * invsqrt * X * u2); // 5 | ||
| if ((0, modular_ts_1.isNegativeLE)(s, P)) | ||
| if (isNegativeLE(s, P)) | ||
| s = mod(-s); | ||
@@ -421,21 +412,8 @@ return Fn448.toBytes(s); | ||
| } | ||
| // The following gymnastics is done because typescript strips comments otherwise | ||
| // prettier-ignore | ||
| _DecafPoint.BASE = | ||
| /* @__PURE__ */ (() => new _DecafPoint(exports.ed448.Point.BASE).multiplyUnsafe(_2n))(); | ||
| // prettier-ignore | ||
| _DecafPoint.ZERO = | ||
| /* @__PURE__ */ (() => new _DecafPoint(exports.ed448.Point.ZERO))(); | ||
| // prettier-ignore | ||
| _DecafPoint.Fp = | ||
| /* @__PURE__ */ (() => Fp448)(); | ||
| // prettier-ignore | ||
| _DecafPoint.Fn = | ||
| /* @__PURE__ */ (() => Fn448)(); | ||
| exports.decaf448 = { Point: _DecafPoint }; | ||
| export const decaf448 = { Point: _DecafPoint }; | ||
| /** Hashing to decaf448 points / field. RFC 9380 methods. */ | ||
| exports.decaf448_hasher = { | ||
| export const decaf448_hasher = { | ||
| hashToCurve(msg, options) { | ||
| const DST = options?.DST || 'decaf448_XOF:SHAKE256_D448MAP_RO_'; | ||
| return decaf448_map((0, hash_to_curve_ts_1.expand_message_xof)(msg, DST, 112, 224, sha3_js_1.shake256)); | ||
| return decaf448_map(expand_message_xof(msg, DST, 112, 224, shake256)); | ||
| }, | ||
@@ -445,15 +423,15 @@ // Warning: has big modulo bias of 2^-64. | ||
| // it must use 84-byte xof (56+56/2), not 64. | ||
| hashToScalar(msg, options = { DST: hash_to_curve_ts_1._DST_scalar }) { | ||
| hashToScalar(msg, options = { DST: _DST_scalar }) { | ||
| // Can't use `Fn448.fromBytes()`. 64-byte input => 56-byte field element | ||
| const xof = (0, hash_to_curve_ts_1.expand_message_xof)(msg, options.DST, 64, 256, sha3_js_1.shake256); | ||
| return Fn448.create((0, utils_ts_1.bytesToNumberLE)(xof)); | ||
| const xof = expand_message_xof(msg, options.DST, 64, 256, shake256); | ||
| return Fn448.create(bytesToNumberLE(xof)); | ||
| }, | ||
| }; | ||
| // export const decaf448_oprf: OPRF = createORPF({ | ||
| // name: 'decaf448-SHAKE256', | ||
| // Point: DecafPoint, | ||
| // hash: (msg: Uint8Array) => shake256(msg, { dkLen: 64 }), | ||
| // hashToGroup: decaf448_hasher.hashToCurve, | ||
| // hashToScalar: decaf448_hasher.hashToScalar, | ||
| // }); | ||
| export const decaf448_oprf = /* @__PURE__ */ (() => createORPF({ | ||
| name: 'decaf448-SHAKE256', | ||
| Point: _DecafPoint, | ||
| hash: (msg) => shake256(msg, { dkLen: 64 }), | ||
| hashToGroup: decaf448_hasher.hashToCurve, | ||
| hashToScalar: decaf448_hasher.hashToScalar, | ||
| }))(); | ||
| /** | ||
@@ -465,3 +443,3 @@ * Weird / bogus points, useful for debugging. | ||
| */ | ||
| exports.ED448_TORSION_SUBGROUP = [ | ||
| export const ED448_TORSION_SUBGROUP = [ | ||
| '010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | ||
@@ -472,18 +450,2 @@ 'fefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff00', | ||
| ]; | ||
| /** @deprecated use `decaf448.Point` */ | ||
| exports.DecafPoint = _DecafPoint; | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| exports.hashToCurve = (() => exports.ed448_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| exports.encodeToCurve = (() => exports.ed448_hasher.encodeToCurve)(); | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| exports.hashToDecaf448 = (() => exports.decaf448_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| exports.hash_to_decaf448 = (() => exports.decaf448_hasher.hashToCurve)(); | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| function edwardsToMontgomeryPub(edwardsPub) { | ||
| return exports.ed448.utils.toMontgomery((0, utils_ts_1.ensureBytes)('pub', edwardsPub)); | ||
| } | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| exports.edwardsToMontgomery = edwardsToMontgomeryPub; | ||
| //# sourceMappingURL=ed448.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"ed448.js","sourceRoot":"","sources":["src/ed448.ts"],"names":[],"mappings":";;;AAmiBA,wDAEC;AAriBD;;;;;;;GAOG;AACH,sEAAsE;AACtE,mDAAiD;AACjD,qDAA8F;AAE9F,kDAAgD;AAChD,sDAQ+B;AAC/B,kEAQqC;AACrC,sDAAmG;AACnG,4DAAuF;AACvF,yCAA8F;AAE9F,mBAAmB;AACnB,SAAS;AACT,qBAAqB;AACrB,wCAAwC;AACxC,iBAAiB;AACjB,mFAAmF;AACnF,MAAM,WAAW,GAAgB;IAC/B,CAAC,EAAE,MAAM,CACP,oHAAoH,CACrH;IACD,CAAC,EAAE,MAAM,CACP,oHAAoH,CACrH;IACD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CACP,oHAAoH,CACrH;IACD,EAAE,EAAE,MAAM,CACR,oHAAoH,CACrH;IACD,EAAE,EAAE,MAAM,CACR,oHAAoH,CACrH;CACF,CAAC;AAEF,0DAA0D;AAC1D,kBAAkB;AAClB,WAAW;AACX,MAAM,UAAU,GAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE;IAC7D,CAAC,EAAE,MAAM,CACP,oHAAoH,CACrH;IACD,EAAE,EAAE,MAAM,CACR,oHAAoH,CACrH;IACD,EAAE,EAAE,MAAM,CACR,oHAAoH,CACrH;CACF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,eAAe,CAAC,IAAA,uBAAe,EAAC,GAAG,EAAE,CAAC,kBAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5F,MAAM,WAAW,GAAG,eAAe,CAAC,IAAA,uBAAe,EAAC,GAAG,EAAE,CAAC,kBAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAE1F,kBAAkB;AAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5F,kBAAkB;AAClB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAEnF,8DAA8D;AAC9D,8CAA8C;AAC9C,+DAA+D;AAC/D,SAAS,qBAAqB,CAAC,CAAS;IACtC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB;IAC1C,4FAA4F;IAC5F,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa;IAC9B,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa;IAC/B,mDAAmD;IACnD,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,+CAA+C;IAC9D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,gCAAgC;AAChC,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;IACnC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IACxB,uDAAuD;IACvD,wEAAwE;IACxE,oEAAoE;IACpE,iEAAiE;IACjE,sCAAsC;IACtC,wDAAwD;IACxD,MAAM,GAAG,GAAG,IAAA,gBAAG,EAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;IACrC,MAAM,GAAG,GAAG,IAAA,gBAAG,EAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;IACnC,MAAM,IAAI,GAAG,IAAA,gBAAG,EAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;IAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,IAAA,gBAAG,EAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7B,6BAA6B;IAC7B,MAAM,EAAE,GAAG,IAAA,gBAAG,EAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;IAC/B,8DAA8D;IAC9D,8CAA8C;IAC9C,OAAO,EAAE,OAAO,EAAE,IAAA,gBAAG,EAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,wCAAwC;AACxC,yFAAyF;AACzF,oGAAoG;AACpG,+FAA+F;AAC/F,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,IAAA,kBAAK,EAAC,WAAW,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACrF,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,IAAA,kBAAK,EAAC,WAAW,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACrF,uCAAuC;AACvC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,IAAA,kBAAK,EAAC,WAAW,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACxF,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,IAAA,kBAAK,EAAC,WAAW,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AAExF,yCAAyC;AACzC,SAAS,IAAI,CAAC,IAAgB,EAAE,GAAe,EAAE,MAAe;IAC9D,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9F,OAAO,IAAA,sBAAW,EAChB,IAAA,uBAAY,EAAC,UAAU,CAAC,EACxB,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAC5C,GAAG,EACH,IAAI,CACL,CAAC;AACJ,CAAC;AACD,gEAAgE;AAChE,iEAAiE;AAEjE,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,GAAG,WAAW;IACd,EAAE;IACF,EAAE;IACF,UAAU,EAAE,EAAE,CAAC,IAAI;IACnB,IAAI,EAAE,YAAY;IAClB,iBAAiB;IACjB,MAAM,EAAE,IAAI;IACZ,OAAO;CACR,CAAC,CAAC,EAAE,CAAC;AAEN;;;;;;;;GAQG;AACU,QAAA,KAAK,GAAY,IAAA,2BAAc,EAAC,SAAS,CAAC,CAAC;AAExD,4DAA4D;AAC5D,0FAA0F;AAC7E,QAAA,OAAO,GAA4B,CAAC,GAAG,EAAE,CACpD,IAAA,2BAAc,EAAC;IACb,GAAG,SAAS;IACZ,OAAO,EAAE,WAAW;CACrB,CAAC,CAAC,EAAE,CAAC;AAER;;;;GAIG;AACU,QAAA,IAAI,GAAqB,IAAA,oBAAO,EAAC,UAAU,CAAC,CAAC;AAE1D;;;;GAIG;AACU,QAAA,IAAI,GAA6B,CAAC,GAAG,EAAE;IAClD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IACxB,OAAO,IAAA,0BAAU,EAAC;QAChB,CAAC;QACD,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,CAAC,CAAS,EAAU,EAAE;YAChC,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAA,iBAAI,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1C,OAAO,IAAA,gBAAG,EAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,wBAAwB;QACtD,CAAC;QACD,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC,CAAC,EAAE,CAAC;AAEL,+BAA+B;AAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,mDAAmD;AACjI,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAE9C,SAAS,gCAAgC,CAAC,CAAS;IACjD,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;IACrC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;IACnD,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,8DAA8D;IAC/F,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB;IAClD,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe;IACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C;IACtE,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,6CAA6C;IACpF,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qDAAqD;IAC7E,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,4DAA4D;IACpF,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,oEAAoE;IAC5F,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;IACzC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,0CAA0C;IAClE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,4CAA4C;IACpE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,4DAA4D;IAC3F,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,wEAAwE;IAC9F,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oEAAoE;IACxG,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;IAC3C,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;IAC3D,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACnC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,uBAAuB;IAClD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,6DAA6D;IAC7F,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,6DAA6D;IAC1F,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gDAAgD;IACtE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,mCAAmC;IACzE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,4BAA4B;AACpE,CAAC;AAED,SAAS,kCAAkC,CAAC,CAAS;IACnD,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,4DAA4D;IAC1H,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;IACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAClD,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAC5C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAC5C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB;IAC5C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB;IAChD,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAC5C,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;IAChD,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAC5C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IACpD,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB;IACnD,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,4BAA4B;IAC5D,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,4BAA4B;IAC3D,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,4BAA4B;IAC3D,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,4BAA4B;IAE3D,MAAM,GAAG,GAAG,IAAA,0BAAa,EAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB;IAClE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,kCAAkC;AAC/F,CAAC;AAED,oEAAoE;AACvD,QAAA,YAAY,GAAsC,CAAC,GAAG,EAAE,CACnE,IAAA,+BAAY,EAAC,aAAK,CAAC,KAAK,EAAE,CAAC,OAAiB,EAAE,EAAE,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;IAC/F,GAAG,EAAE,kCAAkC;IACvC,SAAS,EAAE,kCAAkC;IAC7C,CAAC,EAAE,EAAE,CAAC,KAAK;IACX,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,kBAAQ;CACf,CAAC,CAAC,EAAE,CAAC;AAER,MAAM;AACN,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpD,OAAO;AACP,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxD,QAAQ;AACR,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CACzC,wIAAwI,CACzI,CAAC;AACF,YAAY;AACZ,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAC5C,yIAAyI,CAC1I,CAAC;AACF,yBAAyB;AACzB,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAE5D;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,EAAU;IACvC,MAAM,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACnB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;IAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;IACnC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IAE3C,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;IAE7F,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI;IACrB,IAAI,CAAC,UAAU;QAAE,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI;IACnB,IAAI,CAAC,UAAU;QAAE,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAEjC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAA,yBAAY,EAAC,CAAC,EAAE,CAAC,CAAC;QAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI;IACjC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI;IAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;IAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;IACtE,OAAO,IAAI,aAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,IAAA,iBAAM,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnB,MAAM,cAAc,GAAG,IAAI,CAAC;IAC5B,2DAA2D;IAC3D,gEAAgE;IAChE,oDAAoD;IACpD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAChF,MAAM,EAAE,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAClF,MAAM,EAAE,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,WAAY,SAAQ,8BAA8B;IAetD,YAAY,EAAgB;QAC1B,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,EAAuB;QACvC,OAAO,IAAI,WAAW,CAAC,aAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAES,UAAU,CAAC,KAAkB;QACrC,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC9E,CAAC;IAES,IAAI,CAAC,EAAgB;QAC7B,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,kFAAkF;IAClF,MAAM,CAAC,WAAW,CAAC,GAAQ;QACzB,OAAO,YAAY,CAAC,IAAA,sBAAW,EAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAiB;QAChC,IAAA,iBAAM,EAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClB,MAAM,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC;QAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,qFAAqF;QACrF,iDAAiD;QAEjD,IAAI,CAAC,IAAA,qBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAA,yBAAY,EAAC,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAEjD,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;QAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;QAEzC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAEpE,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI;QACzD,IAAI,IAAA,yBAAY,EAAC,EAAE,EAAE,CAAC,CAAC;YAAE,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAEvC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI;QACxD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;QAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAE1B,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7D,OAAO,IAAI,WAAW,CAAC,IAAI,aAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,GAAQ;QACrB,OAAO,WAAW,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,qFAAqF;IACrF,MAAM,CAAC,GAAG,CAAC,MAAqB,EAAE,OAAiB;QACjD,OAAO,IAAA,oBAAS,EAAC,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QACvE,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI;QAClD,IAAI,IAAA,yBAAY,EAAC,KAAK,EAAE,CAAC,CAAC;YAAE,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,GAAG,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACrD,IAAI,CAAC,GAAG,GAAG,CAAC,WAAW,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;QACjD,IAAI,IAAA,yBAAY,EAAC,CAAC,EAAE,CAAC,CAAC;YAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAkB;QACvB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QAClC,uBAAuB;QACvB,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;;AAjHD,gFAAgF;AAChF,kBAAkB;AACX,gBAAI;AACT,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,aAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AAClF,kBAAkB;AACX,gBAAI;AACT,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,aAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAC9D,kBAAkB;AACX,cAAE;AACP,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAClC,kBAAkB;AACX,cAAE;AACP,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAwGvB,QAAA,QAAQ,GAEjB,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAE3B,4DAA4D;AAC/C,QAAA,eAAe,GAA0B;IACpD,WAAW,CAAC,GAAe,EAAE,OAAsB;QACjD,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,mCAAmC,CAAC;QAChE,OAAO,YAAY,CAAC,IAAA,qCAAkB,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,kBAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,yCAAyC;IACzC,oEAAoE;IACpE,6CAA6C;IAC7C,YAAY,CAAC,GAAe,EAAE,UAAwB,EAAE,GAAG,EAAE,8BAAW,EAAE;QACxE,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAA,qCAAkB,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,kBAAQ,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAA,0BAAe,EAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC;AAEF,kDAAkD;AAClD,+BAA+B;AAC/B,uBAAuB;AACvB,6DAA6D;AAC7D,8CAA8C;AAC9C,gDAAgD;AAChD,MAAM;AAEN;;;;;GAKG;AACU,QAAA,sBAAsB,GAAa;IAC9C,oHAAoH;IACpH,oHAAoH;IACpH,oHAAoH;IACpH,oHAAoH;CACrH,CAAC;AAIF,uCAAuC;AAC1B,QAAA,UAAU,GAAuB,WAAW,CAAC;AAC1D,+EAA+E;AAClE,QAAA,WAAW,GAAsC,CAAC,GAAG,EAAE,CAAC,oBAAY,CAAC,WAAW,CAAC,EAAE,CAAC;AACjG,+EAA+E;AAClE,QAAA,aAAa,GAAsC,CAAC,GAAG,EAAE,CACpE,oBAAY,CAAC,aAAa,CAAC,EAAE,CAAC;AAChC,kFAAkF;AACrE,QAAA,cAAc,GAA8B,CAAC,GAAG,EAAE,CAC7D,uBAAe,CAAC,WAAwB,CAAC,EAAE,CAAC;AAC9C,kFAAkF;AACrE,QAAA,gBAAgB,GAA8B,CAAC,GAAG,EAAE,CAC/D,uBAAe,CAAC,WAAwB,CAAC,EAAE,CAAC;AAC9C,iDAAiD;AACjD,SAAgB,sBAAsB,CAAC,UAA+B;IACpE,OAAO,aAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AAClE,CAAC;AACD,iDAAiD;AACpC,QAAA,mBAAmB,GAAkC,sBAAsB,CAAC"} | ||
| {"version":3,"file":"ed448.js","sourceRoot":"","sources":["src/ed448.ts"],"names":[],"mappings":"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"} |
+1
-1
@@ -13,3 +13,3 @@ "use strict"; | ||
| import { bn254 } from '@noble/curves/bn254.js'; | ||
| import { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from '@noble/curves/abstract/utils.js'; | ||
| import { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from '@noble/curves/utils.js'; | ||
| ``` | ||
@@ -16,0 +16,0 @@ */ |
+10
-14
@@ -1,19 +0,15 @@ | ||
| import { type CurveFn, type EdwardsPoint } from './abstract/edwards.ts'; | ||
| import { type CurveFn as WCurveFn } from './abstract/weierstrass.ts'; | ||
| import { type EdDSA, type EdwardsPoint } from './abstract/edwards.ts'; | ||
| import { type ECDSA } from './abstract/weierstrass.ts'; | ||
| /** Curve over scalar field of bls12-381. jubjub Fp = bls n */ | ||
| export declare const jubjub: CurveFn; | ||
| export declare const jubjub: EdDSA; | ||
| /** Curve over scalar field of bn254. babyjubjub Fp = bn254 n */ | ||
| export declare const babyjubjub: CurveFn; | ||
| export declare const babyjubjub: EdDSA; | ||
| export declare function jubjub_groupHash(tag: Uint8Array, personalization: Uint8Array): EdwardsPoint; | ||
| export declare function jubjub_findGroupHash(m: Uint8Array, personalization: Uint8Array): EdwardsPoint; | ||
| export declare const pasta_p: bigint; | ||
| export declare const pasta_q: bigint; | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export declare const pallas: WCurveFn; | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export declare const vesta: WCurveFn; | ||
| /** Brainpool P256r1 with sha256, from RFC 5639. */ | ||
| export declare const brainpoolP256r1: ECDSA; | ||
| /** Brainpool P384r1 with sha384, from RFC 5639. */ | ||
| export declare const brainpoolP384r1: ECDSA; | ||
| /** Brainpool P521r1 with sha512, from RFC 5639. */ | ||
| export declare const brainpoolP512r1: ECDSA; | ||
| //# sourceMappingURL=misc.d.ts.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["src/misc.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAe,KAAK,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAgBlF,8DAA8D;AAC9D,eAAO,MAAM,MAAM,EAAE,OAInB,CAAC;AAWH,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,OAIvB,CAAC;AAOH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAU3F;AAKD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAW7F;AAID,eAAO,MAAM,OAAO,EAAE,MAErB,CAAC;AACF,eAAO,MAAM,OAAO,EAAE,MAErB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,QASnB,CAAC;AACH;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,QASlB,CAAC"} | ||
| {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["src/misc.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,KAAK,EAEV,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAsB,KAAK,KAAK,EAAwB,MAAM,2BAA2B,CAAC;AAiBjG,8DAA8D;AAC9D,eAAO,MAAM,MAAM,EAAE,KAA4D,CAAC;AAWlF,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,KAAkE,CAAC;AAO5F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAU3F;AAKD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAW7F;AAWD,mDAAmD;AACnD,eAAO,MAAM,eAAe,EAAE,KAAyD,CAAC;AAuBxF,mDAAmD;AACnD,eAAO,MAAM,eAAe,EAAE,KAAyD,CAAC;AAuBxF,mDAAmD;AACnD,eAAO,MAAM,eAAe,EAAE,KAAyD,CAAC"} |
+51
-60
@@ -1,6 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.vesta = exports.pallas = exports.pasta_q = exports.pasta_p = exports.babyjubjub = exports.jubjub = void 0; | ||
| exports.jubjub_groupHash = jubjub_groupHash; | ||
| exports.jubjub_findGroupHash = jubjub_findGroupHash; | ||
| /** | ||
@@ -12,11 +7,11 @@ * Miscellaneous, rarely used curves. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const blake1_js_1 = require("@noble/hashes/blake1.js"); | ||
| const blake2_js_1 = require("@noble/hashes/blake2.js"); | ||
| const sha2_js_1 = require("@noble/hashes/sha2.js"); | ||
| const utils_js_1 = require("@noble/hashes/utils.js"); | ||
| const edwards_ts_1 = require("./abstract/edwards.js"); | ||
| const modular_ts_1 = require("./abstract/modular.js"); | ||
| const weierstrass_ts_1 = require("./abstract/weierstrass.js"); | ||
| const bls12_381_ts_1 = require("./bls12-381.js"); | ||
| const bn254_ts_1 = require("./bn254.js"); | ||
| import { blake256 } from '@noble/hashes/blake1.js'; | ||
| import { blake2s } from '@noble/hashes/blake2.js'; | ||
| import { sha256, sha384, sha512 } from '@noble/hashes/sha2.js'; | ||
| import { concatBytes } from '@noble/hashes/utils.js'; | ||
| import { eddsa, edwards, } from "./abstract/edwards.js"; | ||
| import { ecdsa, weierstrass } from "./abstract/weierstrass.js"; | ||
| import { bls12_381_Fr } from "./bls12-381.js"; | ||
| import { bn254_Fr } from "./bn254.js"; | ||
| import { asciiToBytes } from "./utils.js"; | ||
| // Jubjub curves have 𝔽p over scalar fields of other curves. They are friendly to ZK proofs. | ||
@@ -26,3 +21,3 @@ // jubjub Fp = bls n. babyjubjub Fp = bn254 n. | ||
| const jubjub_CURVE = { | ||
| p: bls12_381_ts_1.bls12_381_Fr.ORDER, | ||
| p: bls12_381_Fr.ORDER, | ||
| n: BigInt('0xe7db4ea6533afa906673b0101343b00a6682093ccc81082d0970e5ed6f72cb7'), | ||
@@ -36,9 +31,5 @@ h: BigInt(8), | ||
| /** Curve over scalar field of bls12-381. jubjub Fp = bls n */ | ||
| exports.jubjub = (0, edwards_ts_1.twistedEdwards)({ | ||
| ...jubjub_CURVE, | ||
| Fp: bls12_381_ts_1.bls12_381_Fr, | ||
| hash: sha2_js_1.sha512, | ||
| }); | ||
| export const jubjub = /* @__PURE__ */ eddsa(edwards(jubjub_CURVE), sha512); | ||
| const babyjubjub_CURVE = { | ||
| p: bn254_ts_1.bn254_Fr.ORDER, | ||
| p: bn254_Fr.ORDER, | ||
| n: BigInt('0x30644e72e131a029b85045b68181585d59f76dc1c90770533b94bee1c9093788'), | ||
@@ -52,18 +43,14 @@ h: BigInt(8), | ||
| /** Curve over scalar field of bn254. babyjubjub Fp = bn254 n */ | ||
| exports.babyjubjub = (0, edwards_ts_1.twistedEdwards)({ | ||
| ...babyjubjub_CURVE, | ||
| Fp: bn254_ts_1.bn254_Fr, | ||
| hash: blake1_js_1.blake256, | ||
| }); | ||
| const jubjub_gh_first_block = (0, utils_js_1.utf8ToBytes)('096b36a5804bfacef1691e173c366a47ff5ba84a44f26ddd7e8d9f79d5b42df0'); | ||
| export const babyjubjub = /* @__PURE__ */ eddsa(edwards(babyjubjub_CURVE), blake256); | ||
| const jubjub_gh_first_block = asciiToBytes('096b36a5804bfacef1691e173c366a47ff5ba84a44f26ddd7e8d9f79d5b42df0'); | ||
| // Returns point at JubJub curve which is prime order and not zero | ||
| function jubjub_groupHash(tag, personalization) { | ||
| const h = blake2_js_1.blake2s.create({ personalization, dkLen: 32 }); | ||
| export function jubjub_groupHash(tag, personalization) { | ||
| const h = blake2s.create({ personalization, dkLen: 32 }); | ||
| h.update(jubjub_gh_first_block); | ||
| h.update(tag); | ||
| // NOTE: returns ExtendedPoint, in case it will be multiplied later | ||
| let p = exports.jubjub.Point.fromBytes(h.digest()); | ||
| let p = jubjub.Point.fromBytes(h.digest()); | ||
| // NOTE: cannot replace with isSmallOrder, returns Point*8 | ||
| p = p.multiply(jubjub_CURVE.h); | ||
| if (p.equals(exports.jubjub.Point.ZERO)) | ||
| if (p.equals(jubjub.Point.ZERO)) | ||
| throw new Error('Point has small order'); | ||
@@ -75,4 +62,4 @@ return p; | ||
| // const G_SPEND = jubjub.findGroupHash(Uint8Array.of(), utf8ToBytes('Item_G_')); | ||
| function jubjub_findGroupHash(m, personalization) { | ||
| const tag = (0, utils_js_1.concatBytes)(m, Uint8Array.of(0)); | ||
| export function jubjub_findGroupHash(m, personalization) { | ||
| const tag = concatBytes(m, Uint8Array.of(0)); | ||
| const hashes = []; | ||
@@ -90,31 +77,35 @@ for (let i = 0; i < 256; i++) { | ||
| } | ||
| // Pasta curves. See [Spec](https://o1-labs.github.io/proof-systems/specs/pasta.html). | ||
| exports.pasta_p = BigInt('0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001'); | ||
| exports.pasta_q = BigInt('0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001'); | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| exports.pallas = (0, weierstrass_ts_1.weierstrass)({ | ||
| a: BigInt(0), | ||
| b: BigInt(5), | ||
| Fp: (0, modular_ts_1.Field)(exports.pasta_p), | ||
| n: exports.pasta_q, | ||
| Gx: (0, modular_ts_1.mod)(BigInt(-1), exports.pasta_p), | ||
| Gy: BigInt(2), | ||
| const brainpoolP256r1_CURVE = { | ||
| p: BigInt('0xa9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377'), | ||
| a: BigInt('0x7d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9'), | ||
| b: BigInt('0x26dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b6'), | ||
| n: BigInt('0xa9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7'), | ||
| Gx: BigInt('0x8bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262'), | ||
| Gy: BigInt('0x547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997'), | ||
| h: BigInt(1), | ||
| hash: sha2_js_1.sha256, | ||
| }); | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| exports.vesta = (0, weierstrass_ts_1.weierstrass)({ | ||
| a: BigInt(0), | ||
| b: BigInt(5), | ||
| Fp: (0, modular_ts_1.Field)(exports.pasta_q), | ||
| n: exports.pasta_p, | ||
| Gx: (0, modular_ts_1.mod)(BigInt(-1), exports.pasta_q), | ||
| Gy: BigInt(2), | ||
| }; | ||
| /** Brainpool P256r1 with sha256, from RFC 5639. */ | ||
| export const brainpoolP256r1 = ecdsa(weierstrass(brainpoolP256r1_CURVE), sha256); | ||
| const brainpoolP384r1_CURVE = { | ||
| p: BigInt('0x8cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53'), | ||
| a: BigInt('0x7bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826'), | ||
| b: BigInt('0x04a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c11'), | ||
| n: BigInt('0x8cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565'), | ||
| Gx: BigInt('0x1d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e'), | ||
| Gy: BigInt('0x8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315'), | ||
| h: BigInt(1), | ||
| hash: sha2_js_1.sha256, | ||
| }); | ||
| }; | ||
| /** Brainpool P384r1 with sha384, from RFC 5639. */ | ||
| export const brainpoolP384r1 = ecdsa(weierstrass(brainpoolP384r1_CURVE), sha384); | ||
| const brainpoolP512r1_CURVE = { | ||
| p: BigInt('0xaadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3'), | ||
| a: BigInt('0x7830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca'), | ||
| b: BigInt('0x3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f723'), | ||
| n: BigInt('0xaadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069'), | ||
| Gx: BigInt('0x81aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f822'), | ||
| Gy: BigInt('0x7dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892'), | ||
| h: BigInt(1), | ||
| }; | ||
| /** Brainpool P521r1 with sha512, from RFC 5639. */ | ||
| export const brainpoolP512r1 = ecdsa(weierstrass(brainpoolP512r1_CURVE), sha512); | ||
| //# sourceMappingURL=misc.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"misc.js","sourceRoot":"","sources":["src/misc.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"misc.js","sourceRoot":"","sources":["src/misc.ts"],"names":[],"mappings":"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"} |
+11
-14
@@ -1,21 +0,18 @@ | ||
| import { type CurveFnWithCreate } from './_shortw_utils.ts'; | ||
| import { type H2CHasher } from './abstract/hash-to-curve.ts'; | ||
| /** NIST P256 (aka secp256r1, prime256v1) curve, ECDSA and ECDH methods. */ | ||
| export declare const p256: CurveFnWithCreate; | ||
| import { type OPRF } from './abstract/oprf.ts'; | ||
| import { type ECDSA, type WeierstrassPointCons } from './abstract/weierstrass.ts'; | ||
| export declare const p256: ECDSA; | ||
| /** Hashing / encoding to p256 points / field. RFC 9380 methods. */ | ||
| export declare const p256_hasher: H2CHasher<bigint>; | ||
| export declare const p256_hasher: H2CHasher<WeierstrassPointCons<bigint>>; | ||
| export declare const p256_oprf: OPRF; | ||
| /** NIST P384 (aka secp384r1) curve, ECDSA and ECDH methods. */ | ||
| export declare const p384: CurveFnWithCreate; | ||
| export declare const p384: ECDSA; | ||
| /** Hashing / encoding to p384 points / field. RFC 9380 methods. */ | ||
| export declare const p384_hasher: H2CHasher<bigint>; | ||
| export declare const p384_hasher: H2CHasher<WeierstrassPointCons<bigint>>; | ||
| export declare const p384_oprf: OPRF; | ||
| /** NIST P521 (aka secp521r1) curve, ECDSA and ECDH methods. */ | ||
| export declare const p521: CurveFnWithCreate; | ||
| /** @deprecated use `p256` for consistency with `p256_hasher` */ | ||
| export declare const secp256r1: typeof p256; | ||
| /** @deprecated use `p384` for consistency with `p384_hasher` */ | ||
| export declare const secp384r1: typeof p384; | ||
| /** @deprecated use `p521` for consistency with `p521_hasher` */ | ||
| export declare const secp521r1: typeof p521; | ||
| export declare const p521: ECDSA; | ||
| /** Hashing / encoding to p521 points / field. RFC 9380 methods. */ | ||
| export declare const p521_hasher: H2CHasher<bigint>; | ||
| export declare const p521_hasher: H2CHasher<WeierstrassPointCons<bigint>>; | ||
| export declare const p521_oprf: OPRF; | ||
| //# sourceMappingURL=nist.d.ts.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"nist.d.ts","sourceRoot":"","sources":["src/nist.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AA+E3E,2EAA2E;AAC3E,eAAO,MAAM,IAAI,EAAE,iBAGlB,CAAC;AACF,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAkBtC,CAAC;AAUL,+DAA+D;AAC/D,eAAO,MAAM,IAAI,EAAE,iBAGlB,CAAC;AACF,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAkBtC,CAAC;AAWL,+DAA+D;AAC/D,eAAO,MAAM,IAAI,EAAE,iBAGlB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,SAAS,EAAE,OAAO,IAAW,CAAC;AAC3C,gEAAgE;AAChE,eAAO,MAAM,SAAS,EAAE,OAAO,IAAW,CAAC;AAC3C,gEAAgE;AAChE,eAAO,MAAM,SAAS,EAAE,OAAO,IAAW,CAAC;AAE3C,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAkBtC,CAAC"} | ||
| {"version":3,"file":"nist.d.ts","sourceRoot":"","sources":["src/nist.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAIL,KAAK,KAAK,EAEV,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAyEnC,eAAO,MAAM,IAAI,EAAE,KAAiD,CAAC;AACrE,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAkB5D,CAAC;AAEL,eAAO,MAAM,SAAS,EAAE,IAOjB,CAAC;AAGR,+DAA+D;AAC/D,eAAO,MAAM,IAAI,EAAE,KAAiD,CAAC;AACrE,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAkB5D,CAAC;AAEL,eAAO,MAAM,SAAS,EAAE,IAOjB,CAAC;AAIR,+DAA+D;AAC/D,eAAO,MAAM,IAAI,EAAE,KAAiD,CAAC;AAErE,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAkB5D,CAAC;AAEL,eAAO,MAAM,SAAS,EAAE,IAOjB,CAAC"} |
+46
-55
@@ -1,4 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.p521_hasher = exports.secp521r1 = exports.secp384r1 = exports.secp256r1 = exports.p521 = exports.p384_hasher = exports.p384 = exports.p256_hasher = exports.p256 = void 0; | ||
| /** | ||
@@ -10,7 +7,7 @@ * Internal module for NIST P256, P384, P521 curves. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const sha2_js_1 = require("@noble/hashes/sha2.js"); | ||
| const _shortw_utils_ts_1 = require("./_shortw_utils.js"); | ||
| const hash_to_curve_ts_1 = require("./abstract/hash-to-curve.js"); | ||
| const modular_ts_1 = require("./abstract/modular.js"); | ||
| const weierstrass_ts_1 = require("./abstract/weierstrass.js"); | ||
| import { sha256, sha384, sha512 } from '@noble/hashes/sha2.js'; | ||
| import { createHasher } from "./abstract/hash-to-curve.js"; | ||
| import { Field } from "./abstract/modular.js"; | ||
| import { createORPF } from "./abstract/oprf.js"; | ||
| import { ecdsa, mapToCurveSimpleSWU, weierstrass, } from "./abstract/weierstrass.js"; | ||
| // p = 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n - 1n | ||
@@ -47,17 +44,15 @@ // a = Fp256.create(BigInt('-3')); | ||
| }; | ||
| const Fp256 = (0, modular_ts_1.Field)(p256_CURVE.p); | ||
| const Fp384 = (0, modular_ts_1.Field)(p384_CURVE.p); | ||
| const Fp521 = (0, modular_ts_1.Field)(p521_CURVE.p); | ||
| function createSWU(Point, opts) { | ||
| const map = (0, weierstrass_ts_1.mapToCurveSimpleSWU)(Point.Fp, opts); | ||
| const map = mapToCurveSimpleSWU(Point.Fp, opts); | ||
| return (scalars) => map(scalars[0]); | ||
| } | ||
| /** NIST P256 (aka secp256r1, prime256v1) curve, ECDSA and ECDH methods. */ | ||
| exports.p256 = (0, _shortw_utils_ts_1.createCurve)({ ...p256_CURVE, Fp: Fp256, lowS: false }, sha2_js_1.sha256); | ||
| const p256_Point = /* @__PURE__ */ weierstrass(p256_CURVE); | ||
| export const p256 = /* @__PURE__ */ ecdsa(p256_Point, sha256); | ||
| /** Hashing / encoding to p256 points / field. RFC 9380 methods. */ | ||
| exports.p256_hasher = (() => { | ||
| return (0, hash_to_curve_ts_1.createHasher)(exports.p256.Point, createSWU(exports.p256.Point, { | ||
| export const p256_hasher = /* @__PURE__ */ (() => { | ||
| return createHasher(p256_Point, createSWU(p256_Point, { | ||
| A: p256_CURVE.a, | ||
| B: p256_CURVE.b, | ||
| Z: exports.p256.Point.Fp.create(BigInt('-10')), | ||
| Z: p256_Point.Fp.create(BigInt('-10')), | ||
| }), { | ||
@@ -70,20 +65,21 @@ DST: 'P256_XMD:SHA-256_SSWU_RO_', | ||
| expand: 'xmd', | ||
| hash: sha2_js_1.sha256, | ||
| hash: sha256, | ||
| }); | ||
| })(); | ||
| // export const p256_oprf: OPRF = createORPF({ | ||
| // name: 'P256-SHA256', | ||
| // Point: p256.Point, | ||
| // hash: sha256, | ||
| // hashToGroup: p256_hasher.hashToCurve, | ||
| // hashToScalar: p256_hasher.hashToScalar, | ||
| // }); | ||
| export const p256_oprf = /* @__PURE__ */ (() => createORPF({ | ||
| name: 'P256-SHA256', | ||
| Point: p256_Point, | ||
| hash: sha256, | ||
| hashToGroup: p256_hasher.hashToCurve, | ||
| hashToScalar: p256_hasher.hashToScalar, | ||
| }))(); | ||
| const p384_Point = /* @__PURE__ */ weierstrass(p384_CURVE); | ||
| /** NIST P384 (aka secp384r1) curve, ECDSA and ECDH methods. */ | ||
| exports.p384 = (0, _shortw_utils_ts_1.createCurve)({ ...p384_CURVE, Fp: Fp384, lowS: false }, sha2_js_1.sha384); | ||
| export const p384 = /* @__PURE__ */ ecdsa(p384_Point, sha384); | ||
| /** Hashing / encoding to p384 points / field. RFC 9380 methods. */ | ||
| exports.p384_hasher = (() => { | ||
| return (0, hash_to_curve_ts_1.createHasher)(exports.p384.Point, createSWU(exports.p384.Point, { | ||
| export const p384_hasher = /* @__PURE__ */ (() => { | ||
| return createHasher(p384_Point, createSWU(p384_Point, { | ||
| A: p384_CURVE.a, | ||
| B: p384_CURVE.b, | ||
| Z: exports.p384.Point.Fp.create(BigInt('-12')), | ||
| Z: p384_Point.Fp.create(BigInt('-12')), | ||
| }), { | ||
@@ -96,27 +92,22 @@ DST: 'P384_XMD:SHA-384_SSWU_RO_', | ||
| expand: 'xmd', | ||
| hash: sha2_js_1.sha384, | ||
| hash: sha384, | ||
| }); | ||
| })(); | ||
| // export const p384_oprf: OPRF = createORPF({ | ||
| // name: 'P384-SHA384', | ||
| // Point: p384.Point, | ||
| // hash: sha384, | ||
| // hashToGroup: p384_hasher.hashToCurve, | ||
| // hashToScalar: p384_hasher.hashToScalar, | ||
| // }); | ||
| // const Fn521 = Field(p521_CURVE.n, { allowedScalarLengths: [65, 66] }); | ||
| export const p384_oprf = /* @__PURE__ */ (() => createORPF({ | ||
| name: 'P384-SHA384', | ||
| Point: p384_Point, | ||
| hash: sha384, | ||
| hashToGroup: p384_hasher.hashToCurve, | ||
| hashToScalar: p384_hasher.hashToScalar, | ||
| }))(); | ||
| const Fn521 = /* @__PURE__ */ Field(p521_CURVE.n, { allowedLengths: [65, 66] }); | ||
| const p521_Point = /* @__PURE__ */ weierstrass(p521_CURVE, { Fn: Fn521 }); | ||
| /** NIST P521 (aka secp521r1) curve, ECDSA and ECDH methods. */ | ||
| exports.p521 = (0, _shortw_utils_ts_1.createCurve)({ ...p521_CURVE, Fp: Fp521, lowS: false, allowedPrivateKeyLengths: [130, 131, 132] }, sha2_js_1.sha512); | ||
| /** @deprecated use `p256` for consistency with `p256_hasher` */ | ||
| exports.secp256r1 = exports.p256; | ||
| /** @deprecated use `p384` for consistency with `p384_hasher` */ | ||
| exports.secp384r1 = exports.p384; | ||
| /** @deprecated use `p521` for consistency with `p521_hasher` */ | ||
| exports.secp521r1 = exports.p521; | ||
| export const p521 = /* @__PURE__ */ ecdsa(p521_Point, sha512); | ||
| /** Hashing / encoding to p521 points / field. RFC 9380 methods. */ | ||
| exports.p521_hasher = (() => { | ||
| return (0, hash_to_curve_ts_1.createHasher)(exports.p521.Point, createSWU(exports.p521.Point, { | ||
| export const p521_hasher = /* @__PURE__ */ (() => { | ||
| return createHasher(p521_Point, createSWU(p521_Point, { | ||
| A: p521_CURVE.a, | ||
| B: p521_CURVE.b, | ||
| Z: exports.p521.Point.Fp.create(BigInt('-4')), | ||
| Z: p521_Point.Fp.create(BigInt('-4')), | ||
| }), { | ||
@@ -129,12 +120,12 @@ DST: 'P521_XMD:SHA-512_SSWU_RO_', | ||
| expand: 'xmd', | ||
| hash: sha2_js_1.sha512, | ||
| hash: sha512, | ||
| }); | ||
| })(); | ||
| // export const p521_oprf: OPRF = createORPF({ | ||
| // name: 'P521-SHA512', | ||
| // Point: p521.Point, | ||
| // hash: sha512, | ||
| // hashToGroup: p521_hasher.hashToCurve, | ||
| // hashToScalar: p521_hasher.hashToScalar, // produces L=98 just like in RFC | ||
| // }); | ||
| export const p521_oprf = /* @__PURE__ */ (() => createORPF({ | ||
| name: 'P521-SHA512', | ||
| Point: p521_Point, | ||
| hash: sha512, | ||
| hashToGroup: p521_hasher.hashToCurve, | ||
| hashToScalar: p521_hasher.hashToScalar, // produces L=98 just like in RFC | ||
| }))(); | ||
| //# sourceMappingURL=nist.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"nist.js","sourceRoot":"","sources":["src/nist.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"nist.js","sourceRoot":"","sources":["src/nist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAkB,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAa,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,KAAK,EACL,mBAAmB,EACnB,WAAW,GAIZ,MAAM,2BAA2B,CAAC;AAEnC,wDAAwD;AACxD,kCAAkC;AAClC,MAAM,UAAU,GAA4B;IAC1C,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,EAAE,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAChF,EAAE,EAAE,MAAM,CAAC,oEAAoE,CAAC;CACjF,CAAC;AAEF,mDAAmD;AACnD,MAAM,UAAU,GAA4B;IAC1C,CAAC,EAAE,MAAM,CACP,oGAAoG,CACrG;IACD,CAAC,EAAE,MAAM,CACP,oGAAoG,CACrG;IACD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CACP,oGAAoG,CACrG;IACD,CAAC,EAAE,MAAM,CACP,oGAAoG,CACrG;IACD,EAAE,EAAE,MAAM,CACR,oGAAoG,CACrG;IACD,EAAE,EAAE,MAAM,CACR,oGAAoG,CACrG;CACF,CAAC;AAEF,oBAAoB;AACpB,MAAM,UAAU,GAA4B;IAC1C,CAAC,EAAE,MAAM,CACP,uIAAuI,CACxI;IACD,CAAC,EAAE,MAAM,CACP,wIAAwI,CACzI;IACD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CACP,uIAAuI,CACxI;IACD,CAAC,EAAE,MAAM,CACP,wIAAwI,CACzI;IACD,EAAE,EAAE,MAAM,CACR,wIAAwI,CACzI;IACD,EAAE,EAAE,MAAM,CACR,wIAAwI,CACzI;CACF,CAAC;AAOF,SAAS,SAAS,CAAC,KAAmC,EAAE,IAAa;IACnE,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,OAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,2EAA2E;AAE3E,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,IAAI,GAAU,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACrE,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAA4C,eAAe,CAAC,CAAC,GAAG,EAAE;IACxF,OAAO,YAAY,CACjB,UAAU,EACV,SAAS,CAAC,UAAU,EAAE;QACpB,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACvC,CAAC,EACF;QACE,GAAG,EAAE,2BAA2B;QAChC,SAAS,EAAE,2BAA2B;QACtC,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,GAAG;QACN,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,MAAM;KACb,CACF,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,MAAM,SAAS,GAAS,eAAe,CAAC,CAAC,GAAG,EAAE,CACnD,UAAU,CAAC;IACT,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,YAAY,EAAE,WAAW,CAAC,YAAY;CACvC,CAAC,CAAC,EAAE,CAAC;AAER,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC3D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,IAAI,GAAU,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACrE,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAA4C,eAAe,CAAC,CAAC,GAAG,EAAE;IACxF,OAAO,YAAY,CACjB,UAAU,EACV,SAAS,CAAC,UAAU,EAAE;QACpB,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACvC,CAAC,EACF;QACE,GAAG,EAAE,2BAA2B;QAChC,SAAS,EAAE,2BAA2B;QACtC,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,GAAG;QACN,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,MAAM;KACb,CACF,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,MAAM,SAAS,GAAS,eAAe,CAAC,CAAC,GAAG,EAAE,CACnD,UAAU,CAAC;IACT,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,YAAY,EAAE,WAAW,CAAC,YAAY;CACvC,CAAC,CAAC,EAAE,CAAC;AAER,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAChF,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,IAAI,GAAU,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAErE,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAA4C,eAAe,CAAC,CAAC,GAAG,EAAE;IACxF,OAAO,YAAY,CACjB,UAAU,EACV,SAAS,CAAC,UAAU,EAAE;QACpB,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACtC,CAAC,EACF;QACE,GAAG,EAAE,2BAA2B;QAChC,SAAS,EAAE,2BAA2B;QACtC,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,GAAG;QACN,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,MAAM;KACb,CACF,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,MAAM,SAAS,GAAS,eAAe,CAAC,CAAC,GAAG,EAAE,CACnD,UAAU,CAAC;IACT,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,iCAAiC;CAC1E,CAAC,CAAC,EAAE,CAAC"} |
+8
-223
| { | ||
| "name": "@noble/curves", | ||
| "version": "1.9.6", | ||
| "version": "2.0.0-beta.1", | ||
| "description": "Audited & minimal JS implementation of elliptic curve cryptography", | ||
@@ -10,7 +10,4 @@ "files": [ | ||
| "*.d.ts.map", | ||
| "esm", | ||
| "src", | ||
| "abstract", | ||
| "!oprf.*", | ||
| "!webcrypto.*" | ||
| "src" | ||
| ], | ||
@@ -20,4 +17,4 @@ "scripts": { | ||
| "bench:install": "cd test/benchmark; npm install; npm install ../.. --install-links", | ||
| "build": "tsc && tsc -p tsconfig.cjs.json", | ||
| "build:release": "npx jsbt esbuild test/build", | ||
| "build": "tsc", | ||
| "build:release": "npx --no @paulmillr/jsbt esbuild test/build", | ||
| "build:clean": "rm {.,esm,abstract,esm/abstract}/*.{js,d.ts,d.ts.map,js.map} 2> /dev/null", | ||
@@ -39,3 +36,3 @@ "lint": "prettier --check 'src/**/*.{js,ts}' 'test/*.js'", | ||
| "dependencies": { | ||
| "@noble/hashes": "1.8.0" | ||
| "@noble/hashes": "2.0.0-beta.3" | ||
| }, | ||
@@ -52,219 +49,7 @@ "devDependencies": { | ||
| "sideEffects": false, | ||
| "type": "module", | ||
| "main": "index.js", | ||
| "exports": { | ||
| ".": { | ||
| "import": "./esm/index.js", | ||
| "require": "./index.js" | ||
| }, | ||
| "./abstract/bls": { | ||
| "import": "./esm/abstract/bls.js", | ||
| "require": "./abstract/bls.js" | ||
| }, | ||
| "./abstract/curve": { | ||
| "import": "./esm/abstract/curve.js", | ||
| "require": "./abstract/curve.js" | ||
| }, | ||
| "./abstract/edwards": { | ||
| "import": "./esm/abstract/edwards.js", | ||
| "require": "./abstract/edwards.js" | ||
| }, | ||
| "./abstract/hash-to-curve": { | ||
| "import": "./esm/abstract/hash-to-curve.js", | ||
| "require": "./abstract/hash-to-curve.js" | ||
| }, | ||
| "./abstract/modular": { | ||
| "import": "./esm/abstract/modular.js", | ||
| "require": "./abstract/modular.js" | ||
| }, | ||
| "./abstract/montgomery": { | ||
| "import": "./esm/abstract/montgomery.js", | ||
| "require": "./abstract/montgomery.js" | ||
| }, | ||
| "./abstract/poseidon": { | ||
| "import": "./esm/abstract/poseidon.js", | ||
| "require": "./abstract/poseidon.js" | ||
| }, | ||
| "./abstract/tower": { | ||
| "import": "./esm/abstract/tower.js", | ||
| "require": "./abstract/tower.js" | ||
| }, | ||
| "./abstract/utils": { | ||
| "import": "./esm/abstract/utils.js", | ||
| "require": "./abstract/utils.js" | ||
| }, | ||
| "./abstract/weierstrass": { | ||
| "import": "./esm/abstract/weierstrass.js", | ||
| "require": "./abstract/weierstrass.js" | ||
| }, | ||
| "./abstract/fft": { | ||
| "import": "./esm/abstract/fft.js", | ||
| "require": "./abstract/fft.js" | ||
| }, | ||
| "./_shortw_utils": { | ||
| "import": "./esm/_shortw_utils.js", | ||
| "require": "./_shortw_utils.js" | ||
| }, | ||
| "./bls12-381": { | ||
| "import": "./esm/bls12-381.js", | ||
| "require": "./bls12-381.js" | ||
| }, | ||
| "./bn254": { | ||
| "import": "./esm/bn254.js", | ||
| "require": "./bn254.js" | ||
| }, | ||
| "./ed448": { | ||
| "import": "./esm/ed448.js", | ||
| "require": "./ed448.js" | ||
| }, | ||
| "./ed25519": { | ||
| "import": "./esm/ed25519.js", | ||
| "require": "./ed25519.js" | ||
| }, | ||
| "./index": { | ||
| "import": "./esm/index.js", | ||
| "require": "./index.js" | ||
| }, | ||
| "./jubjub": { | ||
| "import": "./esm/jubjub.js", | ||
| "require": "./jubjub.js" | ||
| }, | ||
| "./misc": { | ||
| "import": "./esm/misc.js", | ||
| "require": "./misc.js" | ||
| }, | ||
| "./nist": { | ||
| "import": "./esm/nist.js", | ||
| "require": "./nist.js" | ||
| }, | ||
| "./p256": { | ||
| "import": "./esm/p256.js", | ||
| "require": "./p256.js" | ||
| }, | ||
| "./p384": { | ||
| "import": "./esm/p384.js", | ||
| "require": "./p384.js" | ||
| }, | ||
| "./p521": { | ||
| "import": "./esm/p521.js", | ||
| "require": "./p521.js" | ||
| }, | ||
| "./pasta": { | ||
| "import": "./esm/pasta.js", | ||
| "require": "./pasta.js" | ||
| }, | ||
| "./secp256k1": { | ||
| "import": "./esm/secp256k1.js", | ||
| "require": "./secp256k1.js" | ||
| }, | ||
| "./utils": { | ||
| "import": "./esm/utils.js", | ||
| "require": "./utils.js" | ||
| }, | ||
| "./abstract/bls.js": { | ||
| "import": "./esm/abstract/bls.js", | ||
| "require": "./abstract/bls.js" | ||
| }, | ||
| "./abstract/curve.js": { | ||
| "import": "./esm/abstract/curve.js", | ||
| "require": "./abstract/curve.js" | ||
| }, | ||
| "./abstract/edwards.js": { | ||
| "import": "./esm/abstract/edwards.js", | ||
| "require": "./abstract/edwards.js" | ||
| }, | ||
| "./abstract/hash-to-curve.js": { | ||
| "import": "./esm/abstract/hash-to-curve.js", | ||
| "require": "./abstract/hash-to-curve.js" | ||
| }, | ||
| "./abstract/modular.js": { | ||
| "import": "./esm/abstract/modular.js", | ||
| "require": "./abstract/modular.js" | ||
| }, | ||
| "./abstract/montgomery.js": { | ||
| "import": "./esm/abstract/montgomery.js", | ||
| "require": "./abstract/montgomery.js" | ||
| }, | ||
| "./abstract/poseidon.js": { | ||
| "import": "./esm/abstract/poseidon.js", | ||
| "require": "./abstract/poseidon.js" | ||
| }, | ||
| "./abstract/tower.js": { | ||
| "import": "./esm/abstract/tower.js", | ||
| "require": "./abstract/tower.js" | ||
| }, | ||
| "./abstract/utils.js": { | ||
| "import": "./esm/abstract/utils.js", | ||
| "require": "./abstract/utils.js" | ||
| }, | ||
| "./abstract/weierstrass.js": { | ||
| "import": "./esm/abstract/weierstrass.js", | ||
| "require": "./abstract/weierstrass.js" | ||
| }, | ||
| "./abstract/fft.js": { | ||
| "import": "./esm/abstract/fft.js", | ||
| "require": "./abstract/fft.js" | ||
| }, | ||
| "./_shortw_utils.js": { | ||
| "import": "./esm/_shortw_utils.js", | ||
| "require": "./_shortw_utils.js" | ||
| }, | ||
| "./bls12-381.js": { | ||
| "import": "./esm/bls12-381.js", | ||
| "require": "./bls12-381.js" | ||
| }, | ||
| "./bn254.js": { | ||
| "import": "./esm/bn254.js", | ||
| "require": "./bn254.js" | ||
| }, | ||
| "./utils.js": { | ||
| "import": "./esm/utils.js", | ||
| "require": "./utils.js" | ||
| }, | ||
| "./ed448.js": { | ||
| "import": "./esm/ed448.js", | ||
| "require": "./ed448.js" | ||
| }, | ||
| "./ed25519.js": { | ||
| "import": "./esm/ed25519.js", | ||
| "require": "./ed25519.js" | ||
| }, | ||
| "./index.js": { | ||
| "import": "./esm/index.js", | ||
| "require": "./index.js" | ||
| }, | ||
| "./jubjub.js": { | ||
| "import": "./esm/jubjub.js", | ||
| "require": "./jubjub.js" | ||
| }, | ||
| "./misc.js": { | ||
| "import": "./esm/misc.js", | ||
| "require": "./misc.js" | ||
| }, | ||
| "./nist.js": { | ||
| "import": "./esm/nist.js", | ||
| "require": "./nist.js" | ||
| }, | ||
| "./p256.js": { | ||
| "import": "./esm/p256.js", | ||
| "require": "./p256.js" | ||
| }, | ||
| "./p384.js": { | ||
| "import": "./esm/p384.js", | ||
| "require": "./p384.js" | ||
| }, | ||
| "./p521.js": { | ||
| "import": "./esm/p521.js", | ||
| "require": "./p521.js" | ||
| }, | ||
| "./pasta.js": { | ||
| "import": "./esm/pasta.js", | ||
| "require": "./pasta.js" | ||
| }, | ||
| "./secp256k1.js": { | ||
| "import": "./esm/secp256k1.js", | ||
| "require": "./secp256k1.js" | ||
| } | ||
| }, | ||
| "module": "index.js", | ||
| "engines": { | ||
| "node": "^14.21.3 || >=16" | ||
| "node": ">= 20.19.0" | ||
| }, | ||
@@ -271,0 +56,0 @@ "keywords": [ |
+259
-413
@@ -8,3 +8,3 @@ # noble-curves | ||
| - 🏎 Fast: hand-optimized for caveats of JS engines | ||
| - 🔍 Reliable: tested against cross-library, wycheproof and acvp vectors | ||
| - 🔍 Reliable: cross-library / wycheproof tests and fuzzing ensure correctness | ||
| - ➰ Weierstrass, Edwards, Montgomery curves; ECDSA, EdDSA, Schnorr, BLS signatures | ||
@@ -60,125 +60,140 @@ - ✍️ ECDH, hash-to-curve, OPRF, Poseidon ZK-friendly hash | ||
| import { jubjub, babyjubjub } from '@noble/curves/misc.js'; | ||
| // hash-to-curve | ||
| import { secp256k1_hasher } from '@noble/curves/secp256k1.js'; | ||
| import { p256_hasher, p384_hasher, p521_hasher } from '@noble/curves/nist.js'; | ||
| import { ristretto255_hasher } from '@noble/curves/ed25519.js'; | ||
| import { decaf448_hasher } from '@noble/curves/ed448.js'; | ||
| // OPRFs | ||
| import { p256_oprf, p384_oprf, p521_oprf } from '@noble/curves/nist.js'; | ||
| import { ristretto255_oprf } from '@noble/curves/ed25519.js'; | ||
| import { decaf448_orpf } from '@noble/curves/ed448.js'; | ||
| // utils | ||
| import { weierstrass, ecdsa } from '@noble/curves/abstract/weierstrass.js'; | ||
| import { edwards, eddsa } from '@noble/curves/abstract/edwards.js'; | ||
| import { poseidon, poseidonSponge } from '@noble/curves/abstract/poseidon.js'; | ||
| import { Field, mod, pow } from '@noble/curves/abstract/modular.js'; | ||
| import { FFT, poly } from '@noble/curves/abstract/fft.js'; | ||
| import { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from '@noble/curves/abstract/utils.js'; | ||
| ``` | ||
| - [ECDSA signatures over secp256k1 and others](#ecdsa-signatures-over-secp256k1-and-others) | ||
| - [Hedged ECDSA with noise](#hedged-ecdsa-with-noise) | ||
| - [ECDH: Diffie-Hellman shared secrets](#ecdh-diffie-hellman-shared-secrets) | ||
| - [secp256k1 Schnorr signatures from BIP340](#secp256k1-schnorr-signatures-from-bip340) | ||
| - [ed25519](#ed25519) / [X25519](#x25519) / [ristretto255](#ristretto255) | ||
| - [ed448](#ed448) / [X448](#x448) / [decaf448](#decaf448) | ||
| - [bls12-381](#bls12-381) | ||
| - [bn254 aka alt_bn128](#bn254-aka-alt_bn128) | ||
| - [misc curves](#misc-curves) | ||
| - [Low-level methods](#low-level-methods) | ||
| - [Abstract API](#abstract-api) | ||
| - [weierstrass](#weierstrass-short-weierstrass-curve), [Projective Point](#projective-weierstrass-point), [ECDSA signatures](#ecdsa-signatures) | ||
| - [edwards](#edwards-twisted-edwards-curve), [Extended Point](#extended-edwards-point), [EdDSA signatures](#eddsa-signatures) | ||
| - [montgomery](#montgomery-montgomery-curve) | ||
| - [bls](#bls-barreto-lynn-scott-curves) | ||
| - [hash-to-curve](#hash-to-curve-hashing-strings-to-curve-points) | ||
| - [poseidon](#poseidon-poseidon-hash) | ||
| - [modular](#modular-modular-arithmetics-utilities) | ||
| - [fft](#fft-fast-fourier-transform) | ||
| - [Creating private keys from hashes](#creating-private-keys-from-hashes) | ||
| - [utils](#utils-useful-utilities) | ||
| - [Security](#security) | ||
| - [Speed](#speed) | ||
| - [Upgrading](#upgrading) | ||
| - [Contributing & testing](#contributing--testing) | ||
| - [License](#license) | ||
| ### Implementations | ||
| ### ECDSA, EdDSA, Schnorr signatures | ||
| #### ECDSA signatures over secp256k1 and others | ||
| #### secp256k1, p256, p384, p521, ed25519, ed448 | ||
| ```ts | ||
| import { secp256k1 } from '@noble/curves/secp256k1.js'; | ||
| // import { p256 } from '@noble/curves/nist.js'; // or p384 / p521 | ||
| ```js | ||
| import { secp256k1, schnorr } from '@noble/curves/secp256k1.js'; | ||
| import { p256, p384, p521 } from '@noble/curves/nist.js'; | ||
| import { ed25519 } from '@noble/curves/ed25519.js'; | ||
| import { ed448 } from '@noble/curves/ed448.js'; | ||
| const priv = secp256k1.utils.randomPrivateKey(); | ||
| const pub = secp256k1.getPublicKey(priv); | ||
| const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa | ||
| const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available | ||
| const isValid = secp256k1.verify(sig, msg, pub) === true; | ||
| import { hexToBytes, utf8ToBytes } from '@noble/curves/utils.js'; | ||
| // hex strings are also supported besides Uint8Array-s: | ||
| const privHex = '46c930bc7bb4db7f55da20798697421b98c4175a52c630294d75a84b9c126236'; | ||
| const pub2 = secp256k1.getPublicKey(privHex); | ||
| for (const curve of [secp256k1, schnorr, p256, p384, p521, ed25519, ed448]) { | ||
| const { secretKey, publicKey } = curve.keygen(); | ||
| const msg = utf8ToBytes('hello noble'); | ||
| const sig = curve.sign(msg, secretKey); | ||
| const isValid = curve.verify(sig, msg, publicKey); | ||
| console.log(curve, secretKey, publicKey, sig); | ||
| } | ||
| // public key recovery | ||
| // let sig = secp256k1.Signature.fromCompact(sigHex); // or .fromDER(sigDERHex) | ||
| // sig = sig.addRecoveryBit(bit); // bit is not serialized into compact / der format | ||
| sig.recoverPublicKey(msg).toRawBytes(); // === pub; // public key recovery | ||
| // Specific private key | ||
| const priv2 = hexToBytes('46c930bc7bb4db7f55da20798697421b98c4175a52c630294d75a84b9c126236'); | ||
| const pub2 = secp256k1.getPublicKey(priv2); | ||
| ``` | ||
| The same code would work for NIST P256 (secp256r1), P384 (secp384r1) & P521 (secp521r1). | ||
| - We provide NIST P256 (same as secp256r1 / prime256v1), P384 (secp384r1) & P521 (secp521r1), | ||
| their hash-to-curve methods, and OPRFs. | ||
| - ECDSA signatures conform to .... | ||
| - EdDSA conform to RFC8032. | ||
| - Schnorr is only available for secp256k1 and conforms to BIP340. | ||
| #### Hedged ECDSA with noise | ||
| #### ristretto255, decaf448 | ||
| ```ts | ||
| const noisySignature = secp256k1.sign(msg, priv, { extraEntropy: true }); | ||
| const ent = new Uint8Array(32).fill(3); // set custom entropy | ||
| const noisySignature2 = secp256k1.sign(msg, priv, { extraEntropy: ent }); | ||
| ``` | ||
| import { ristretto255, ristretto255_hasher, ristretto255_oprf } from '@noble/curves/ed25519.js'; | ||
| import { decaf448, decaf448_hasher, decaf448_oprf } from '@noble/curves/ed448.js'; | ||
| Hedged ECDSA is add-on, providing improved protection against fault attacks. | ||
| It adds noise to signatures. The technique is used by default in BIP340; we also implement them | ||
| optionally for ECDSA. Check out blog post | ||
| [Deterministic signatures are not your friends](https://paulmillr.com/posts/deterministic-signatures/) | ||
| and [spec draft](https://datatracker.ietf.org/doc/draft-irtf-cfrg-det-sigs-with-noise/). | ||
| import { sha512 } from '@noble/hashes/sha2.js'; | ||
| import { shake256 } from '@noble/hashes/sha3.js'; | ||
| #### ECDH: Diffie-Hellman shared secrets | ||
| const msg = new TextEncoder().encode('Ristretto is traditionally a short shot of espresso coffee'); | ||
| hashToCurve(msg); | ||
| ```ts | ||
| const someonesPub = secp256k1.getPublicKey(secp256k1.utils.randomPrivateKey()); | ||
| const shared = secp256k1.getSharedSecret(priv, someonesPub); | ||
| // NOTE: | ||
| // - `shared` includes parity byte: strip it using shared.slice(1) | ||
| // - `shared` is not hashed: more secure way is sha256(shared) or hkdf(shared) | ||
| const dp = DecafPoint.fromHex( | ||
| 'c898eb4f87f97c564c6fd61fc7e49689314a1f818ec85eeb3bd5514ac816d38778f69ef347a89fca817e66defdedce178c7cc709b2116e75' | ||
| ); | ||
| DecafPoint.BASE.multiply(2n).add(dp).subtract(DecafPoint.BASE).toBytes(); | ||
| DecafPoint.ZERO.equals(dp) === false; | ||
| // pre-hashed hash-to-curve | ||
| DecafPoint.hashToCurve(shake256(msg, { dkLen: 112 })); | ||
| // full hash-to-curve including domain separation tag | ||
| hashToDecaf448(msg, { DST: 'decaf448_XOF:SHAKE256_D448MAP_RO_' }); | ||
| ``` | ||
| #### secp256k1 Schnorr signatures from BIP340 | ||
| Check out [RFC9496](https://www.rfc-editor.org/rfc/rfc9496) more info on ristretto255 & decaf448. | ||
| ```ts | ||
| import { schnorr } from '@noble/curves/secp256k1.js'; | ||
| const priv = schnorr.utils.randomPrivateKey(); | ||
| const pub = schnorr.getPublicKey(priv); | ||
| const msg = new TextEncoder().encode('hello'); | ||
| const sig = schnorr.sign(msg, priv); | ||
| const isValid = schnorr.verify(sig, msg, pub); | ||
| ``` | ||
| #### Prehashed signing | ||
| #### ed25519 | ||
| #### Hedged ECDSA with noise | ||
| ```ts | ||
| import { ed25519 } from '@noble/curves/ed25519.js'; | ||
| const priv = ed25519.utils.randomPrivateKey(); | ||
| const pub = ed25519.getPublicKey(priv); | ||
| const msg = new TextEncoder().encode('hello'); | ||
| const sig = ed25519.sign(msg, priv); | ||
| ed25519.verify(sig, msg, pub); // Default mode: follows ZIP215 | ||
| ed25519.verify(sig, msg, pub, { zip215: false }); // SBS / e-voting / RFC8032 / FIPS 186-5 | ||
| #### Consensus-friendliness vs e-voting | ||
| #### webcrypto: Friendly wrapper | ||
| ```js | ||
| const sig2 = curve.sign(msg, secretKey, { prehash: false }) | ||
| const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa | ||
| const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available | ||
| const isValid = secp256k1.verify(sig, msg, pub) === true; | ||
| const isValid = ed25519.verify(sig, msg, pub); // Default mode: follows ZIP215 | ||
| // SBS / e-voting / RFC8032 / FIPS 186-5 | ||
| const isValidRfc = ed25519.verify(sig, msg, pub, { zip215: false }); | ||
| // Variants from RFC8032: with context, prehashed | ||
| import { ed25519ctx, ed25519ph } from '@noble/curves/ed25519.js'; | ||
| import { secp256k1 } from '@noble/curves/secp256k1.js'; | ||
| // random entropy | ||
| const sigNoisy = secp256k1.sign(msg, priv, { extraEntropy: true }); | ||
| // set custom entropy | ||
| const ent = new Uint8Array(32).fill(3); | ||
| const sigNoisy2 = secp256k1.sign(msg, priv, { extraEntropy: ent }); | ||
| ``` | ||
| Default `verify` behavior follows ZIP215 and | ||
| can be used in consensus-critical applications. | ||
| If you need SBS (Strongly Binding Signatures) and FIPS 186-5 compliance, | ||
| use `zip215: false`. Check out [Edwards Signatures section for more info](#edwards-twisted-edwards-curve). | ||
| Both options have SUF-CMA (strong unforgeability under chosen message attacks). | ||
| - Hedged ECDSA is add-on, providing improved protection against fault attacks. | ||
| It adds noise to signatures. | ||
| The technique is used by default in BIP340; we also implement them optionally for ECDSA. | ||
| Check out blog post [Deterministic signatures are not your friends](https://paulmillr.com/posts/deterministic-signatures/) | ||
| and [cfrg-det-sigs-with-noise draft](https://datatracker.ietf.org/doc/draft-irtf-cfrg-det-sigs-with-noise/). | ||
| - In ed25519 & ed448, default `verify` behavior follows ZIP215 and | ||
| can be used in consensus-critical applications. | ||
| If you need SBS (Strongly Binding Signatures) and FIPS 186-5 compliance, | ||
| use `zip215: false`. Check out [Edwards Signatures section for more info](#edwards-twisted-edwards-curve). | ||
| Both options have SUF-CMA (strong unforgeability under chosen message attacks). | ||
| #### X25519 | ||
| ### ECDH: Diffie-Hellman shared secrets | ||
| ```ts | ||
| // X25519 aka ECDH on Curve25519 from [RFC7748](https://www.rfc-editor.org/rfc/rfc7748) | ||
| ```js | ||
| import { secp256k1 } from '@noble/curves/secp256k1.js'; | ||
| import { x25519 } from '@noble/curves/ed25519.js'; | ||
| const priv = 'a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4'; | ||
| const pub = 'e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c'; | ||
| import { x448 } from '@noble/curves/ed448.js'; | ||
| import { p256, p384, p521 } from '@noble/curves/nist.js'; | ||
| for (const curve of [secp256k1, schnorr, x25519, x448, p256, p384, p521]) { | ||
| const alice = curve.keygen(); | ||
| const bob = curve.keygen(); | ||
| const sharedKey = curve.getSharedSecret(alice.secretKey, bob.publicKey); | ||
| console.log('alice', alice, 'bob', bob, 'shared', sharedKey); | ||
| } | ||
| x25519.getSharedSecret(priv, pub) === x25519.scalarMult(priv, pub); // aliases | ||
| x25519.getPublicKey(priv) === x25519.scalarMultBase(priv); | ||
| x25519.getPublicKey(x25519.utils.randomPrivateKey()); | ||
| // ed25519 => x25519 conversion | ||
@@ -190,82 +205,15 @@ import { edwardsToMontgomeryPub, edwardsToMontgomeryPriv } from '@noble/curves/ed25519.js'; | ||
| #### ristretto255 | ||
| - X25519 aka ECDH on Curve25519 from [RFC7748](https://www.rfc-editor.org/rfc/rfc7748). | ||
| - X448 aka ECDH on Curve448 from [RFC7748](https://www.rfc-editor.org/rfc/rfc7748) | ||
| ```ts | ||
| import { sha512 } from '@noble/hashes/sha2.js'; | ||
| import { | ||
| hashToCurve, | ||
| encodeToCurve, | ||
| RistrettoPoint, | ||
| hashToRistretto255, | ||
| } from '@noble/curves/ed25519.js'; | ||
| > [!NOTE] | ||
| > In Weierstrass curves, shared secrets include y-parity bytes. To strip it, use `key.slice(1)`. | ||
| const msg = new TextEncoder().encode('Ristretto is traditionally a short shot of espresso coffee'); | ||
| hashToCurve(msg); | ||
| > [!NOTE] | ||
| > In Weierstrass curves, shared secrets are not hashed: use hashing or KDF on top, like `sha256(shared)` or `hkdf(shared)`. | ||
| const rp = RistrettoPoint.fromHex( | ||
| '6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919' | ||
| ); | ||
| RistrettoPoint.BASE.multiply(2n).add(rp).subtract(RistrettoPoint.BASE).toRawBytes(); | ||
| RistrettoPoint.ZERO.equals(dp) === false; | ||
| // pre-hashed hash-to-curve | ||
| RistrettoPoint.hashToCurve(sha512(msg)); | ||
| // full hash-to-curve including domain separation tag | ||
| hashToRistretto255(msg, { DST: 'ristretto255_XMD:SHA-512_R255MAP_RO_' }); | ||
| ``` | ||
| Check out [RFC9496](https://www.rfc-editor.org/rfc/rfc9496) more info on ristretto255. | ||
| ### BLS signatures, bls12-381, bn254 aka alt_bn128 | ||
| #### ed448 | ||
| ```ts | ||
| import { ed448 } from '@noble/curves/ed448.js'; | ||
| const priv = ed448.utils.randomPrivateKey(); | ||
| const pub = ed448.getPublicKey(priv); | ||
| const msg = new TextEncoder().encode('whatsup'); | ||
| const sig = ed448.sign(msg, priv); | ||
| ed448.verify(sig, msg, pub); | ||
| // Variants from RFC8032: prehashed | ||
| import { ed448ph } from '@noble/curves/ed448.js'; | ||
| ``` | ||
| #### X448 | ||
| ```ts | ||
| // X448 aka ECDH on Curve448 from [RFC7748](https://www.rfc-editor.org/rfc/rfc7748) | ||
| import { x448 } from '@noble/curves/ed448.js'; | ||
| x448.getSharedSecret(priv, pub) === x448.scalarMult(priv, pub); // aliases | ||
| x448.getPublicKey(priv) === x448.scalarMultBase(priv); | ||
| // ed448 => x448 conversion | ||
| import { edwardsToMontgomeryPub } from '@noble/curves/ed448.js'; | ||
| edwardsToMontgomeryPub(ed448.getPublicKey(ed448.utils.randomPrivateKey())); | ||
| ``` | ||
| #### decaf448 | ||
| ```ts | ||
| // decaf448 from [RFC9496](https://www.rfc-editor.org/rfc/rfc9496) | ||
| import { shake256 } from '@noble/hashes/sha3.js'; | ||
| import { hashToCurve, encodeToCurve, DecafPoint, hashToDecaf448 } from '@noble/curves/ed448.js'; | ||
| const msg = new TextEncoder().encode('Ristretto is traditionally a short shot of espresso coffee'); | ||
| hashToCurve(msg); | ||
| const dp = DecafPoint.fromHex( | ||
| 'c898eb4f87f97c564c6fd61fc7e49689314a1f818ec85eeb3bd5514ac816d38778f69ef347a89fca817e66defdedce178c7cc709b2116e75' | ||
| ); | ||
| DecafPoint.BASE.multiply(2n).add(dp).subtract(DecafPoint.BASE).toRawBytes(); | ||
| DecafPoint.ZERO.equals(dp) === false; | ||
| // pre-hashed hash-to-curve | ||
| DecafPoint.hashToCurve(shake256(msg, { dkLen: 112 })); | ||
| // full hash-to-curve including domain separation tag | ||
| hashToDecaf448(msg, { DST: 'decaf448_XOF:SHAKE256_D448MAP_RO_' }); | ||
| ``` | ||
| Check out [RFC9496](https://www.rfc-editor.org/rfc/rfc9496) more info on decaf448. | ||
| #### bls12-381 | ||
| ```ts | ||
| import { bls12_381 } from '@noble/curves/bls12-381.js'; | ||
@@ -317,15 +265,7 @@ import { hexToBytes } from '@noble/curves/abstract/utils.js'; | ||
| #### bn254 aka alt_bn128 | ||
| ```ts | ||
| import { bn254 } from '@noble/curves/bn254.js'; | ||
| console.log(bn254.G1, bn254.G2, bn254.pairing); | ||
| ``` | ||
| The API mirrors [BLS](#bls12-381). The curve was previously called alt_bn128. | ||
| The BN254 API mirrors [BLS](#bls12-381). The curve was previously called alt_bn128. | ||
| The implementation is compatible with [EIP-196](https://eips.ethereum.org/EIPS/eip-196) and | ||
| [EIP-197](https://eips.ethereum.org/EIPS/eip-197). | ||
| We don't implement Point methods toHex / toRawBytes. | ||
| We don't implement Point methods toBytes. | ||
| To work around this limitation, has to initialize points on their own from BigInts. | ||
@@ -341,84 +281,74 @@ Reason it's not implemented is because [there is no standard](https://github.com/privacy-scaling-explorations/halo2curves/issues/109). | ||
| #### misc curves | ||
| ### Low-level math: EC Point, modular | ||
| ```ts | ||
| ```js | ||
| import { secp256k1, schnorr } from '@noble/curves/secp256k1.js'; | ||
| import { p256, p384, p521 } from '@noble/curves/nist.js'; | ||
| import { ed25519, ristretto255 } from '@noble/curves/ed25519.js'; | ||
| import { ed448, decaf448 } from '@noble/curves/ed448.js'; | ||
| import { bls12_381 } from '@noble/curves/bls12-381.js' | ||
| import { bn254 } from '@noble/curves/bn254.js'; | ||
| import { jubjub, babyjubjub } from '@noble/curves/misc.js'; | ||
| ``` | ||
| Miscellaneous, rarely used curves are contained in the module. | ||
| Jubjub curves have Fp over scalar fields of other curves. They are friendly to ZK proofs. | ||
| jubjub Fp = bls n. babyjubjub Fp = bn254 n. | ||
| const curves = [ | ||
| secp256k1, schnorr, p256, p384, p521, ed25519, ed448, | ||
| ristretto255, decaf448, | ||
| bls12_381.G1, bls12_381.G2, bn254.G1, bn254.G2, | ||
| jubjub, babyjubjub | ||
| ]; | ||
| for (const curve of curves) { | ||
| const { info, Point } = curve; | ||
| const { BASE, ZERO, Fp, Fn } = Point; | ||
| const p = BASE.multiply(2n); | ||
| ## Abstract API | ||
| // Initialization | ||
| if (info.type === 'weierstrass') { | ||
| // projective (homogeneous) coordinates: (X, Y, Z) ∋ (x=X/Z, y=Y/Z) | ||
| const p_ = new Point(BASE.X, BASE.Y, BASE.Z); | ||
| } else if (info.type === 'edwards') { | ||
| // extended coordinates: (X, Y, Z, T) ∋ (x=X/Z, y=Y/Z) | ||
| const p_ = new Point(BASE.X, BASE.Y, BASE.Z, BASE.T); | ||
| } | ||
| Abstract API allows to define custom curves. All arithmetics is done with JS | ||
| bigints over finite fields, which is defined from `modular` sub-module. | ||
| For scalar multiplication, we use | ||
| [precomputed tables with w-ary non-adjacent form (wNAF)](https://paulmillr.com/posts/noble-secp256k1-fast-ecc/). | ||
| Precomputes are enabled for weierstrass and edwards BASE points of a curve. | ||
| Implementations use [noble-hashes](https://github.com/paulmillr/noble-hashes). | ||
| It's always possible to use different hashing library. | ||
| // Math | ||
| const p1 = p.add(p); | ||
| const p2 = p.double(); | ||
| const p3 = p.subtract(p); | ||
| const p4 = p.negate(); | ||
| const p5 = p.multiply(451n); | ||
| // MSM (multi-scalar multiplication) | ||
| const pa = [BASE, BASE.multiply(2n), BASE.multiply(4n), BASE.multiply(8n)]; | ||
| const p6 = Point.msm(pa, [3n, 5n, 7n, 11n]); | ||
| const _true3 = p6.equals(BASE.multiply(129n)); // 129*G | ||
| ### weierstrass: Short Weierstrass curve | ||
| const pcl = p.clearCofactor(); | ||
| console.log(p.isTorsionFree(), p.isSmallOrder()); | ||
| ```js | ||
| import { weierstrass } from '@noble/curves/abstract/weierstrass.js'; | ||
| // NIST secp192r1 aka p192. https://www.secg.org/sec2-v2.pdf | ||
| const p192_CURVE = { | ||
| p: 0xfffffffffffffffffffffffffffffffeffffffffffffffffn, | ||
| n: 0xffffffffffffffffffffffff99def836146bc9b1b4d22831n, | ||
| h: 1n, | ||
| a: 0xfffffffffffffffffffffffffffffffefffffffffffffffcn, | ||
| b: 0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1n, | ||
| Gx: 0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012n, | ||
| Gy: 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811n, | ||
| }; | ||
| const p192_Point = weierstrass(p192_CURVE); | ||
| const r1 = p.toBytes(); | ||
| const r1_ = Point.fromBytes(r1); | ||
| const r2 = p.toAffine(); | ||
| const { x, y } = r2; | ||
| const r2_ = Point.fromAffine(r2); | ||
| } | ||
| ``` | ||
| Short Weierstrass curve's formula is `y² = x³ + ax + b`. `weierstrass` | ||
| expects arguments `a`, `b`, field characteristic `p`, curve order `n`, | ||
| cofactor `h` and coordinates `Gx`, `Gy` of generator point. | ||
| #### Modular math | ||
| #### Projective Weierstrass Point | ||
| ```js | ||
| // # weierstrass Point methods | ||
| // projective (homogeneous) coordinates: (x, y, z) ∋ (x=x/z, y=y/z) | ||
| // const p = new Point(x, y, z); | ||
| const p = Point.BASE; | ||
| // arithmetics | ||
| p.add(p).equals(p.double()); | ||
| p.subtract(p).equals(Point.ZERO); | ||
| p.negate(); | ||
| p.multiply(31415n); | ||
| import { mod, invert, Field } from '@noble/curves/abstract/modular.js'; | ||
| // decoding, encoding | ||
| const b = p.toBytes(); | ||
| const p2 = Point.fromBytes(b); | ||
| // affine conversion | ||
| const { x, y } = p.toAffine(); | ||
| const p3 = Point.fromAffine({ x, y }); | ||
| // Finite Field utils | ||
| const fp = Field(2n ** 255n - 19n); // Finite field over 2^255-19 | ||
| fp.mul(591n, 932n); // multiplication | ||
| fp.pow(481n, 11024858120n); // exponentiation | ||
| fp.div(5n, 17n); // division: 5/17 mod 2^255-19 == 5 * invert(17) | ||
| fp.inv(5n); // modular inverse | ||
| fp.sqrt(21n); // square root | ||
| // Multi-scalar-multiplication (MSM) is basically `(Pa + Qb + Rc + ...)`. | ||
| // It's 10-30x faster vs naive addition for large amount of points. | ||
| // Pippenger algorithm is used underneath. | ||
| const points = [Point.BASE, Point.BASE.multiply(2n), Point.BASE.multiply(4n), Point.BASE.multiply(8n)]; | ||
| Point.msm(points, [3n, 5n, 7n, 11n]).equals(Point.BASE.multiply(129n)); // 129*G | ||
| // Non-Field generic utils are also available | ||
| mod(21n, 10n); // 21 mod 10 == 1n; fixed version of 21 % 10 | ||
| invert(17n, 10n); // invert(17) mod 10; modular multiplicative inverse | ||
| ``` | ||
| #### ECDSA signatures | ||
| ```js | ||
| import { ecdsa } from '@noble/curves/abstract/weierstrass.js'; | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| const p192 = ecdsa(p192_Point, sha256); | ||
| const priv = p192.utils.randomPrivateKey(); | ||
| const pub = p192.getPublicKey(priv); | ||
| const msg = sha256(new TextEncoder().encode('custom curve')); | ||
| const sig = p192.sign(msg); | ||
| const isValid = p192.verify(sig, msg, pub); | ||
| ``` | ||
| ECDSA signatures: | ||
@@ -435,58 +365,18 @@ | ||
| ### edwards: Twisted Edwards curve | ||
| All arithmetics is done with JS | ||
| bigints over finite fields, which is defined from `modular` sub-module. | ||
| For scalar multiplication, we use | ||
| [precomputed tables with w-ary non-adjacent form (wNAF)](https://paulmillr.com/posts/noble-secp256k1-fast-ecc/). | ||
| Precomputes are enabled for weierstrass and edwards BASE points of a curve. | ||
| Field operations are not constant-time: they are using JS bigints, see [security](#security). | ||
| The fact is mostly irrelevant, but the important method to keep in mind is `pow`, | ||
| which may leak exponent bits, when used naïvely. | ||
| ```ts | ||
| import { edwards } from '@noble/curves/abstract/edwards.js'; | ||
| const ed25519_CURVE = { | ||
| p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn, | ||
| n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn, | ||
| h: 8n, | ||
| a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn, | ||
| d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n, | ||
| Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an, | ||
| Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n, | ||
| }; | ||
| const ed25519_Point = edwards(ed25519_CURVE); | ||
| ``` | ||
| `mod.Field` is always **field over prime number**. Non-prime fields aren't supported for now. | ||
| We don't test for prime-ness for speed and because algorithms are probabilistic anyway. | ||
| Initializing a non-prime field could make your app suspectible to | ||
| DoS (infilite loop) on Tonelli-Shanks square root calculation. | ||
| Twisted Edwards curve's formula is `ax² + y² = 1 + dx²y²`. | ||
| You must specify `a`, `d`, field characteristic `p`, curve order `n` (sometimes named as `L`), | ||
| cofactor `h` and coordinates `Gx`, `Gy` of generator point. | ||
| Unlike `mod.inv`, `mod.invertBatch` won't throw on `0`: make sure to throw an error yourself. | ||
| #### Extended Edwards Point | ||
| ```js | ||
| const Point = ed25519_Point; | ||
| // extended coordinates: (x, y, z, t) ∋ (x=x/z, y=y/z) | ||
| // const p = new Point(x, y, z, t); | ||
| const p = Point.BASE; | ||
| // arithmetics | ||
| p.add(p).equals(p.double()); | ||
| p.subtract(p).equals(Point.ZERO); | ||
| p.negate(); | ||
| p.multiply(31415n); | ||
| // decoding, encoding | ||
| const b = p.toBytes(); | ||
| const p2 = Point.fromBytes(b); | ||
| // on-curve test | ||
| p.assertValidity(); | ||
| // affine conversion | ||
| const { x, y } = p.toAffine(); | ||
| const p3 = Point.fromAffine({ x, y }); | ||
| // misc | ||
| const pcl = p.clearCofactor(); | ||
| console.log(p.isTorsionFree(), p.isSmallOrder()); | ||
| ``` | ||
| #### EdDSA signatures | ||
| ```js | ||
| const ed25519 = eddsa(ed25519_Point, { hash: sha512 }); | ||
| // ed25519.getPublicKey(); | ||
| // ed25519.sign(); | ||
| // ed25519.verify(); | ||
| ``` | ||
| We define ed25519, ed448; user can use custom curves with EdDSA, | ||
@@ -508,34 +398,65 @@ but EdDSA in general is not defined. Check out `edwards.ts` source code. | ||
| ### montgomery: Montgomery curve | ||
| ### Making custom curves | ||
| The module contains methods for x-only ECDH on Curve25519 / Curve448 from RFC7748. | ||
| Proper Elliptic Curve Points are not implemented yet. | ||
| - Short Weierstrass curve's formula is `y² = x³ + ax + b`. `weierstrass` | ||
| expects arguments `a`, `b`, field characteristic `p`, curve order `n`, | ||
| cofactor `h` and coordinates `Gx`, `Gy` of generator point. | ||
| - Twisted Edwards curve's formula is `ax² + y² = 1 + dx²y²`. | ||
| You must specify `a`, `d`, field characteristic `p`, curve order `n` (sometimes named as `L`), | ||
| cofactor `h` and coordinates `Gx`, `Gy` of generator point. | ||
| ### bls: Barreto-Lynn-Scott curves | ||
| #### Custom Weierstrass curve | ||
| The module abstracts BLS (Barreto-Lynn-Scott) pairing-friendly elliptic curve construction. | ||
| They allow to construct [zk-SNARKs](https://z.cash/technology/zksnarks/) and | ||
| use aggregated, batch-verifiable | ||
| [threshold signatures](https://medium.com/snigirev.stepan/bls-signatures-better-than-schnorr-5a7fe30ea716), | ||
| using Boneh-Lynn-Shacham signature scheme. | ||
| ```js | ||
| import { weierstrass } from '@noble/curves/abstract/weierstrass.js'; | ||
| // NIST secp192r1 aka p192. https://www.secg.org/sec2-v2.pdf | ||
| const p192_CURVE = { | ||
| p: 0xfffffffffffffffffffffffffffffffeffffffffffffffffn, | ||
| n: 0xffffffffffffffffffffffff99def836146bc9b1b4d22831n, | ||
| h: 1n, | ||
| a: 0xfffffffffffffffffffffffffffffffefffffffffffffffcn, | ||
| b: 0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1n, | ||
| Gx: 0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012n, | ||
| Gy: 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811n, | ||
| }; | ||
| const p192_Point = weierstrass(p192_CURVE); | ||
| ``` | ||
| The module doesn't expose `CURVE` property: use `G1.CURVE`, `G2.CURVE` instead. | ||
| Only BLS12-381 is currently implemented. | ||
| Defining BLS12-377 and BLS24 should be straightforward. | ||
| #### Custom Edwards curve | ||
| The default BLS uses short public keys (with public keys in G1 and signatures in G2). | ||
| Short signatures (public keys in G2 and signatures in G1) are also supported. | ||
| ```js | ||
| import { edwards } from '@noble/curves/abstract/edwards.js'; | ||
| const ed25519_CURVE = { | ||
| p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn, | ||
| n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn, | ||
| h: 8n, | ||
| a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn, | ||
| d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n, | ||
| Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an, | ||
| Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n, | ||
| }; | ||
| const ed25519_Point = edwards(ed25519_CURVE); | ||
| ``` | ||
| ### hash-to-curve: Hashing strings to curve points | ||
| #### Custom ECDSA, requires curve and hash | ||
| The module allows to hash arbitrary strings to elliptic curve points. Implements [RFC 9380](https://www.rfc-editor.org/rfc/rfc9380). | ||
| ```js | ||
| import { ecdsa } from '@noble/curves/abstract/weierstrass.js'; | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| const p192 = ecdsa(p192_Point, sha256); | ||
| const p192_sha224 = ecdsa(p192.Point, sha224); | ||
| const keys = p192.keygen(); | ||
| const msg = new TextEncoder().encode('custom curve'); | ||
| const sig = p192.sign(msg, keys.secretKey); | ||
| const isValid = p192.verify(sig, msg, keys.publicKey); | ||
| // const ed25519 = eddsa(ed25519_Point, { hash: sha512 }); | ||
| ``` | ||
| Every curve has exported `hashToCurve` and `encodeToCurve` methods. You should always prefer `hashToCurve` for security: | ||
| ### hash-to-curve: hashing to curve points | ||
| ```ts | ||
| import { hashToCurve, encodeToCurve } from '@noble/curves/secp256k1.js'; | ||
| import { randomBytes } from '@noble/hashes/utils.js'; | ||
| hashToCurve('0102abcd'); | ||
| console.log(hashToCurve(randomBytes())); | ||
| console.log(encodeToCurve(randomBytes())); | ||
| import { secp256k1_hasher } from '@noble/curves/secp256k1.js'; | ||
| import { p256_hasher, p384_hasher, p521_hasher } from '@noble/curves/nist.js'; | ||
| import { ristretto255_hasher } from '@noble/curves/ed25519.js'; | ||
| import { decaf448_hasher } from '@noble/curves/ed448.js'; | ||
@@ -545,44 +466,27 @@ import { bls12_381 } from '@noble/curves/bls12-381.js'; | ||
| bls12_381.G2.hashToCurve(randomBytes(), { DST: 'custom' }); | ||
| import { expand_message_xmd, expand_message_xof, hash_to_field } from '@noble/curves/abstract/hash-to-curve.js'; | ||
| ``` | ||
| Low-level methods from the spec: | ||
| The module allows to hash arbitrary strings to elliptic curve points. Implements [RFC 9380](https://www.rfc-editor.org/rfc/rfc9380). | ||
| ```ts | ||
| // produces a uniformly random byte string using a cryptographic hash function H that outputs b bits. | ||
| function expand_message_xmd( | ||
| msg: Uint8Array, | ||
| DST: Uint8Array, | ||
| lenInBytes: number, | ||
| H: CHash // For CHash see abstract/weierstrass docs section | ||
| ): Uint8Array; | ||
| // produces a uniformly random byte string using an extendable-output function (XOF) H. | ||
| function expand_message_xof( | ||
| msg: Uint8Array, | ||
| DST: Uint8Array, | ||
| lenInBytes: number, | ||
| k: number, | ||
| H: CHash | ||
| ): Uint8Array; | ||
| // Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F | ||
| function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][]; | ||
| Every curve has exported `hashToCurve` and `encodeToCurve` methods. You should always prefer `hashToCurve` for security: | ||
| /** | ||
| * * `DST` is a domain separation tag, defined in section 2.2.5 | ||
| * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m | ||
| * * `m` is extension degree (1 for prime fields) | ||
| * * `k` is the target security target in bits (e.g. 128), from section 5.1 | ||
| * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF) | ||
| * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props | ||
| */ | ||
| type UnicodeOrBytes = string | Uint8Array; | ||
| type Opts = { | ||
| DST: UnicodeOrBytes; | ||
| p: bigint; | ||
| m: number; | ||
| k: number; | ||
| expand?: 'xmd' | 'xof'; | ||
| hash: CHash; | ||
| }; | ||
| ### oprf: oblivious pseudorandom functions | ||
| ```js | ||
| import { p256_oprf, p384_oprf, p521_oprf } from '@noble/curves/nist.js'; | ||
| import { ristretto255_oprf } from '@noble/curves/ed25519.js'; | ||
| import { decaf448_orpf } from '@noble/curves/ed448.js'; | ||
| ``` | ||
| We provide OPRFs, conforming to [RFC 9497](https://www.rfc-editor.org/rfc/rfc9497). | ||
| OPRF allows to interactively create an `Output = PRF(Input, serverSecretKey)`: | ||
| - Server cannot calculate Output by itself: it doesn't know Input | ||
| - Client cannot calculate Output by itself: it doesn't know server secretKey | ||
| - An attacker interception the communication can't restore Input/Output/serverSecretKey and can't | ||
| link Input to some value. | ||
| ### poseidon: Poseidon hash | ||
@@ -622,32 +526,2 @@ | ||
| ### modular: Modular arithmetics utilities | ||
| ```ts | ||
| import * as mod from '@noble/curves/abstract/modular.js'; | ||
| // Finite Field utils | ||
| const fp = mod.Field(2n ** 255n - 19n); // Finite field over 2^255-19 | ||
| fp.mul(591n, 932n); // multiplication | ||
| fp.pow(481n, 11024858120n); // exponentiation | ||
| fp.div(5n, 17n); // division: 5/17 mod 2^255-19 == 5 * invert(17) | ||
| fp.inv(5n); // modular inverse | ||
| fp.sqrt(21n); // square root | ||
| // Non-Field generic utils are also available | ||
| mod.mod(21n, 10n); // 21 mod 10 == 1n; fixed version of 21 % 10 | ||
| mod.invert(17n, 10n); // invert(17) mod 10; modular multiplicative inverse | ||
| mod.invertBatch([1n, 2n, 4n], 21n); // => [1n, 11n, 16n] in one inversion | ||
| ``` | ||
| Field operations are not constant-time: they are using JS bigints, see [security](#security). | ||
| The fact is mostly irrelevant, but the important method to keep in mind is `pow`, | ||
| which may leak exponent bits, when used naïvely. | ||
| `mod.Field` is always **field over prime number**. Non-prime fields aren't supported for now. | ||
| We don't test for prime-ness for speed and because algorithms are probabilistic anyway. | ||
| Initializing a non-prime field could make your app suspectible to | ||
| DoS (infilite loop) on Tonelli-Shanks square root calculation. | ||
| Unlike `mod.inv`, `mod.invertBatch` won't throw on `0`: make sure to throw an error yourself. | ||
| ### fft: Fast Fourier Transform | ||
@@ -662,28 +536,5 @@ | ||
| #### Creating private keys from hashes | ||
| ### utils: byte shuffling, conversion | ||
| You can't simply make a 32-byte private key from a 32-byte hash. | ||
| Doing so will make the key [biased](https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/). | ||
| To make the bias negligible, we follow [FIPS 186-5 A.2](https://csrc.nist.gov/publications/detail/fips/186/5/final) | ||
| and [RFC 9380](https://www.rfc-editor.org/rfc/rfc9380#section-5.2). | ||
| This means, for 32-byte key, we would need 48-byte hash to get 2^-128 bias, which matches curve security level. | ||
| `hashToPrivateScalar()` that hashes to **private key** was created for this purpose. | ||
| Use [abstract/hash-to-curve](#hash-to-curve-hashing-strings-to-curve-points) | ||
| if you need to hash to **public key**. | ||
| ```ts | ||
| import { p256 } from '@noble/curves/nist.js'; | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { hkdf } from '@noble/hashes/hkdf.js'; | ||
| import * as mod from '@noble/curves/abstract/modular.js'; | ||
| const someKey = new Uint8Array(32).fill(2); // Needs to actually be random, not .fill(2) | ||
| const derived = hkdf(sha256, someKey, undefined, 'application', 48); // 48 bytes for 32-byte priv | ||
| const validPrivateKey = mod.hashToPrivateScalar(derived, p256.CURVE.n); | ||
| ``` | ||
| ### utils: Useful utilities | ||
| ```ts | ||
| import * as utils from '@noble/curves/abstract/utils.js'; | ||
@@ -706,7 +557,2 @@ | ||
| ### Unreleased bits | ||
| - `test/unreleased-xeddsa.ts` contains implementation of XEd25519, defined by Signal | ||
| - `test/misc/endomorphism.js` contains tool for generation of endomorphism params for Koblitz curves | ||
| ## Security | ||
@@ -737,3 +583,3 @@ | ||
| It is tested against property-based, cross-library and Wycheproof vectors, | ||
| and is being fuzzed in [the separate repo](https://github.com/paulmillr/fuzzing). | ||
| and is being fuzzed in [the separate repo](https://github.com/paulmillr/integration-tests). | ||
@@ -740,0 +586,0 @@ If you see anything unusual: investigate and report. |
+7
-23
@@ -1,8 +0,4 @@ | ||
| import { type CurveFnWithCreate } from './_shortw_utils.ts'; | ||
| import type { CurveLengths } from './abstract/curve.ts'; | ||
| import { type H2CHasher, type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { mod } from './abstract/modular.ts'; | ||
| import { type WeierstrassPoint as PointType, type WeierstrassPointCons } from './abstract/weierstrass.ts'; | ||
| import type { Hex, PrivKey } from './utils.ts'; | ||
| import { bytesToNumberBE, numberToBytesBE } from './utils.ts'; | ||
| import { type H2CHasher } from './abstract/hash-to-curve.ts'; | ||
| import { type ECDSA, type WeierstrassPoint as PointType, type WeierstrassPointCons } from './abstract/weierstrass.ts'; | ||
| /** | ||
@@ -22,3 +18,3 @@ * secp256k1 curve, ECDSA and ECDH methods. | ||
| */ | ||
| export declare const secp256k1: CurveFnWithCreate; | ||
| export declare const secp256k1: ECDSA; | ||
| declare function taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array; | ||
@@ -33,3 +29,3 @@ /** | ||
| */ | ||
| declare function schnorrGetPublicKey(secretKey: Hex): Uint8Array; | ||
| declare function schnorrGetPublicKey(secretKey: Uint8Array): Uint8Array; | ||
| /** | ||
@@ -39,3 +35,3 @@ * Creates Schnorr signature as per BIP340. Verifies itself before returning anything. | ||
| */ | ||
| declare function schnorrSign(message: Hex, secretKey: PrivKey, auxRand?: Hex): Uint8Array; | ||
| declare function schnorrSign(message: Uint8Array, secretKey: Uint8Array, auxRand?: Uint8Array): Uint8Array; | ||
| /** | ||
@@ -45,3 +41,3 @@ * Verifies Schnorr signature. | ||
| */ | ||
| declare function schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean; | ||
| declare function schnorrVerify(signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): boolean; | ||
| export type SecpSchnorr = { | ||
@@ -61,10 +57,2 @@ keygen: (seed?: Uint8Array) => { | ||
| taggedHash: typeof taggedHash; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `utils` */ | ||
| numberToBytesBE: typeof numberToBytesBE; | ||
| /** @deprecated use `utils` */ | ||
| bytesToNumberBE: typeof bytesToNumberBE; | ||
| /** @deprecated use `modular` */ | ||
| mod: typeof mod; | ||
| }; | ||
@@ -88,8 +76,4 @@ lengths: CurveLengths; | ||
| /** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */ | ||
| export declare const secp256k1_hasher: H2CHasher<bigint>; | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| export declare const secp256k1_hasher: H2CHasher<WeierstrassPointCons<bigint>>; | ||
| export {}; | ||
| //# sourceMappingURL=secp256k1.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"AAUA,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAyB,GAAG,EAAQ,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAIL,KAAK,gBAAgB,IAAI,SAAS,EAElC,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,eAAe,EAIf,eAAe,EAEhB,MAAM,YAAY,CAAC;AAyDpB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,EAAE,iBAGvB,CAAC;AAMF,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAQtE;AAeD;;;GAGG;AACH,iBAAS,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAY5C;AASD;;GAEG;AACH,iBAAS,mBAAmB,CAAC,SAAS,EAAE,GAAG,GAAG,UAAU,CAEvD;AAED;;;GAGG;AACH,iBAAS,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAE,GAAqB,GAAG,UAAU,CAgBjG;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAsB5E;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;IAChF,YAAY,EAAE,OAAO,mBAAmB,CAAC;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC;IACzB,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE;QACL,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;QACnD,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;QACvD,MAAM,EAAE,OAAO,MAAM,CAAC;QACtB,UAAU,EAAE,OAAO,UAAU,CAAC;QAE9B,wCAAwC;QACxC,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;QACpD,8BAA8B;QAC9B,eAAe,EAAE,OAAO,eAAe,CAAC;QACxC,8BAA8B;QAC9B,eAAe,EAAE,OAAO,eAAe,CAAC;QACxC,gCAAgC;QAChC,GAAG,EAAE,OAAO,GAAG,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AACF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,OAAO,EAAE,WAsClB,CAAC;AA0CL,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAgBzC,CAAC;AAEP,uFAAuF;AACvF,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CACT,CAAC;AAElC,uFAAuF;AACvF,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,CACT,CAAC"} | ||
| {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAgB,KAAK,SAAS,EAAc,MAAM,6BAA6B,CAAC;AAEvF,OAAO,EACL,KAAK,KAAK,EAIV,KAAK,gBAAgB,IAAI,SAAS,EAGlC,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AA8DnC;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,SAAS,EAAE,KAA8C,CAAC;AAMvE,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAQtE;AAcD;;;GAGG;AACH,iBAAS,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAY5C;AASD;;GAEG;AACH,iBAAS,mBAAmB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAE9D;AAED;;;GAGG;AACH,iBAAS,WAAW,CAClB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,EACrB,OAAO,GAAE,UAA4B,GACpC,UAAU,CAgBZ;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAqBjG;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;IAChF,YAAY,EAAE,OAAO,mBAAmB,CAAC;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC;IACzB,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE;QACL,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;QACnD,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;QACvD,MAAM,EAAE,OAAO,MAAM,CAAC;QACtB,UAAU,EAAE,OAAO,UAAU,CAAC;KAC/B,CAAC;IACF,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AACF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,OAAO,EAAE,WA8BlB,CAAC;AA0CL,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAgB/D,CAAC"} |
+47
-60
@@ -1,4 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.encodeToCurve = exports.hashToCurve = exports.secp256k1_hasher = exports.schnorr = exports.secp256k1 = void 0; | ||
| /** | ||
@@ -12,11 +9,10 @@ * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf). | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const sha2_js_1 = require("@noble/hashes/sha2.js"); | ||
| const utils_js_1 = require("@noble/hashes/utils.js"); | ||
| const _shortw_utils_ts_1 = require("./_shortw_utils.js"); | ||
| const hash_to_curve_ts_1 = require("./abstract/hash-to-curve.js"); | ||
| const modular_ts_1 = require("./abstract/modular.js"); | ||
| const weierstrass_ts_1 = require("./abstract/weierstrass.js"); | ||
| const utils_ts_1 = require("./utils.js"); | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { randomBytes } from '@noble/hashes/utils.js'; | ||
| import { createHasher, isogenyMap } from "./abstract/hash-to-curve.js"; | ||
| import { Field, mapHashToField, pow2 } from "./abstract/modular.js"; | ||
| import { ecdsa, mapToCurveSimpleSWU, weierstrass, } from "./abstract/weierstrass.js"; | ||
| import { abytes, asciiToBytes, bytesToNumberBE, concatBytes, inRange } from "./utils.js"; | ||
| // Seems like generator was produced from some seed: | ||
| // `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x` | ||
| // `Pointk1.BASE.multiply(Pointk1.Fn.inv(2n, N)).toAffine().x` | ||
| // // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n | ||
@@ -54,14 +50,14 @@ const secp256k1_CURVE = { | ||
| const b3 = (b2 * b2 * y) % P; // x^7 | ||
| const b6 = ((0, modular_ts_1.pow2)(b3, _3n, P) * b3) % P; | ||
| const b9 = ((0, modular_ts_1.pow2)(b6, _3n, P) * b3) % P; | ||
| const b11 = ((0, modular_ts_1.pow2)(b9, _2n, P) * b2) % P; | ||
| const b22 = ((0, modular_ts_1.pow2)(b11, _11n, P) * b11) % P; | ||
| const b44 = ((0, modular_ts_1.pow2)(b22, _22n, P) * b22) % P; | ||
| const b88 = ((0, modular_ts_1.pow2)(b44, _44n, P) * b44) % P; | ||
| const b176 = ((0, modular_ts_1.pow2)(b88, _88n, P) * b88) % P; | ||
| const b220 = ((0, modular_ts_1.pow2)(b176, _44n, P) * b44) % P; | ||
| const b223 = ((0, modular_ts_1.pow2)(b220, _3n, P) * b3) % P; | ||
| const t1 = ((0, modular_ts_1.pow2)(b223, _23n, P) * b22) % P; | ||
| const t2 = ((0, modular_ts_1.pow2)(t1, _6n, P) * b2) % P; | ||
| const root = (0, modular_ts_1.pow2)(t2, _2n, P); | ||
| const b6 = (pow2(b3, _3n, P) * b3) % P; | ||
| const b9 = (pow2(b6, _3n, P) * b3) % P; | ||
| const b11 = (pow2(b9, _2n, P) * b2) % P; | ||
| const b22 = (pow2(b11, _11n, P) * b11) % P; | ||
| const b44 = (pow2(b22, _22n, P) * b22) % P; | ||
| const b88 = (pow2(b44, _44n, P) * b44) % P; | ||
| const b176 = (pow2(b88, _88n, P) * b88) % P; | ||
| const b220 = (pow2(b176, _44n, P) * b44) % P; | ||
| const b223 = (pow2(b220, _3n, P) * b3) % P; | ||
| const t1 = (pow2(b223, _23n, P) * b22) % P; | ||
| const t2 = (pow2(t1, _6n, P) * b2) % P; | ||
| const root = pow2(t2, _2n, P); | ||
| if (!Fpk1.eql(Fpk1.sqr(root), y)) | ||
@@ -71,3 +67,7 @@ throw new Error('Cannot find square root'); | ||
| } | ||
| const Fpk1 = (0, modular_ts_1.Field)(secp256k1_CURVE.p, { sqrt: sqrtMod }); | ||
| const Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod }); | ||
| const Pointk1 = /* @__PURE__ */ weierstrass(secp256k1_CURVE, { | ||
| Fp: Fpk1, | ||
| endo: secp256k1_ENDO, | ||
| }); | ||
| /** | ||
@@ -87,3 +87,3 @@ * secp256k1 curve, ECDSA and ECDH methods. | ||
| */ | ||
| exports.secp256k1 = (0, _shortw_utils_ts_1.createCurve)({ ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO }, sha2_js_1.sha256); | ||
| export const secp256k1 = /* @__PURE__ */ ecdsa(Pointk1, sha256); | ||
| // Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code. | ||
@@ -96,11 +96,10 @@ // https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki | ||
| if (tagP === undefined) { | ||
| const tagH = (0, sha2_js_1.sha256)((0, utils_ts_1.utf8ToBytes)(tag)); | ||
| tagP = (0, utils_ts_1.concatBytes)(tagH, tagH); | ||
| const tagH = sha256(asciiToBytes(tag)); | ||
| tagP = concatBytes(tagH, tagH); | ||
| TAGGED_HASH_PREFIXES[tag] = tagP; | ||
| } | ||
| return (0, sha2_js_1.sha256)((0, utils_ts_1.concatBytes)(tagP, ...messages)); | ||
| return sha256(concatBytes(tagP, ...messages)); | ||
| } | ||
| // ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03 | ||
| const pointToBytes = (point) => point.toBytes(true).slice(1); | ||
| const Pointk1 = /* @__PURE__ */ (() => exports.secp256k1.Point)(); | ||
| const hasEven = (y) => y % _2n === _0n; | ||
@@ -110,3 +109,3 @@ // Calculate point, scalar and bytes | ||
| const { Fn, BASE } = Pointk1; | ||
| const d_ = (0, weierstrass_ts_1._normFnElement)(Fn, priv); | ||
| const d_ = Fn.fromBytes(priv); | ||
| const p = BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside | ||
@@ -135,3 +134,3 @@ const scalar = hasEven(p.y) ? d_ : Fn.neg(d_); | ||
| } | ||
| const num = utils_ts_1.bytesToNumberBE; | ||
| const num = bytesToNumberBE; | ||
| /** | ||
@@ -153,7 +152,7 @@ * Create tagged hash, convert it to bigint, reduce modulo-n. | ||
| */ | ||
| function schnorrSign(message, secretKey, auxRand = (0, utils_js_1.randomBytes)(32)) { | ||
| function schnorrSign(message, secretKey, auxRand = randomBytes(32)) { | ||
| const { Fn } = Pointk1; | ||
| const m = (0, utils_ts_1.ensureBytes)('message', message); | ||
| const m = abytes(message, undefined, 'message'); | ||
| const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder | ||
| const a = (0, utils_ts_1.ensureBytes)('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array | ||
| const a = abytes(auxRand, 32, 'auxRand'); // Auxiliary random data a: a 32-byte array | ||
| const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a) | ||
@@ -178,15 +177,14 @@ const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m) | ||
| const { Fn, BASE } = Pointk1; | ||
| const sig = (0, utils_ts_1.ensureBytes)('signature', signature, 64); | ||
| const m = (0, utils_ts_1.ensureBytes)('message', message); | ||
| const pub = (0, utils_ts_1.ensureBytes)('publicKey', publicKey, 32); | ||
| const sig = abytes(signature, 64, 'signature'); | ||
| const m = abytes(message, undefined, 'message'); | ||
| const pub = abytes(publicKey, 32, 'publicKey'); | ||
| try { | ||
| const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails | ||
| const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p. | ||
| if (!(0, utils_ts_1.inRange)(r, _1n, secp256k1_CURVE.p)) | ||
| if (!inRange(r, _1n, secp256k1_CURVE.p)) | ||
| return false; | ||
| const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n. | ||
| if (!(0, utils_ts_1.inRange)(s, _1n, secp256k1_CURVE.n)) | ||
| if (!inRange(s, _1n, secp256k1_CURVE.n)) | ||
| return false; | ||
| // int(challenge(bytes(r)||bytes(P)||m))%n | ||
| const e = challenge(Fn.toBytes(r), pointToBytes(P), m); | ||
| const e = challenge(Fn.toBytes(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n | ||
| // R = s⋅G - e⋅P, where -eP == (n-e)P | ||
@@ -217,10 +215,8 @@ const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e))); | ||
| */ | ||
| exports.schnorr = (() => { | ||
| export const schnorr = /* @__PURE__ */ (() => { | ||
| const size = 32; | ||
| const seedLength = 48; | ||
| const randomSecretKey = (seed = (0, utils_js_1.randomBytes)(seedLength)) => { | ||
| return (0, modular_ts_1.mapHashToField)(seed, secp256k1_CURVE.n); | ||
| const randomSecretKey = (seed = randomBytes(seedLength)) => { | ||
| return mapHashToField(seed, secp256k1_CURVE.n); | ||
| }; | ||
| // TODO: remove | ||
| exports.secp256k1.utils.randomSecretKey; | ||
| function keygen(seed) { | ||
@@ -237,11 +233,6 @@ const secretKey = randomSecretKey(seed); | ||
| utils: { | ||
| randomSecretKey: randomSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| randomSecretKey, | ||
| taggedHash, | ||
| // TODO: remove | ||
| lift_x, | ||
| pointToBytes, | ||
| numberToBytesBE: utils_ts_1.numberToBytesBE, | ||
| bytesToNumberBE: utils_ts_1.bytesToNumberBE, | ||
| mod: modular_ts_1.mod, | ||
| }, | ||
@@ -257,3 +248,3 @@ lengths: { | ||
| })(); | ||
| const isoMap = /* @__PURE__ */ (() => (0, hash_to_curve_ts_1.isogenyMap)(Fpk1, [ | ||
| const isoMap = /* @__PURE__ */ (() => isogenyMap(Fpk1, [ | ||
| // xNum | ||
@@ -287,3 +278,3 @@ [ | ||
| ].map((i) => i.map((j) => BigInt(j)))))(); | ||
| const mapSWU = /* @__PURE__ */ (() => (0, weierstrass_ts_1.mapToCurveSimpleSWU)(Fpk1, { | ||
| const mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fpk1, { | ||
| A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'), | ||
@@ -294,3 +285,3 @@ B: BigInt('1771'), | ||
| /** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */ | ||
| exports.secp256k1_hasher = (() => (0, hash_to_curve_ts_1.createHasher)(exports.secp256k1.Point, (scalars) => { | ||
| export const secp256k1_hasher = /* @__PURE__ */ (() => createHasher(Pointk1, (scalars) => { | ||
| const { x, y } = mapSWU(Fpk1.create(scalars[0])); | ||
@@ -305,8 +296,4 @@ return isoMap(x, y); | ||
| expand: 'xmd', | ||
| hash: sha2_js_1.sha256, | ||
| hash: sha256, | ||
| }))(); | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| exports.hashToCurve = (() => exports.secp256k1_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| exports.encodeToCurve = (() => exports.secp256k1_hasher.encodeToCurve)(); | ||
| //# sourceMappingURL=secp256k1.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,sEAAsE;AACtE,mDAA+C;AAC/C,qDAAqD;AACrD,yDAAyE;AAEzE,kEAKqC;AACrC,sDAAyE;AACzE,8DAOmC;AAEnC,yCAOoB;AAEpB,oDAAoD;AACpD,0DAA0D;AAC1D,iEAAiE;AACjE,MAAM,eAAe,GAA4B;IAC/C,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAChF,EAAE,EAAE,MAAM,CAAC,oEAAoE,CAAC;CACjF,CAAC;AAEF,MAAM,cAAc,GAAqB;IACvC,IAAI,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAClF,OAAO,EAAE;QACP,CAAC,MAAM,CAAC,oCAAoC,CAAC,EAAE,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAC7F,CAAC,MAAM,CAAC,qCAAqC,CAAC,EAAE,MAAM,CAAC,oCAAoC,CAAC,CAAC;KAC9F;CACF,CAAC;AAEF,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEtC;;;GAGG;AACH,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAC5B,kBAAkB;IAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,kBAAkB;IAClB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;IACtC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IACpC,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,IAAI,GAAG,IAAA,kBAAK,EAAC,eAAe,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACU,QAAA,SAAS,GAAsB,IAAA,8BAAW,EACrD,EAAE,GAAG,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,EAClE,gBAAM,CACP,CAAC;AAEF,+FAA+F;AAC/F,iEAAiE;AACjE,wFAAwF;AACxF,MAAM,oBAAoB,GAAkC,EAAE,CAAC;AAC/D,SAAS,UAAU,CAAC,GAAW,EAAE,GAAG,QAAsB;IACxD,IAAI,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAA,gBAAM,EAAC,IAAA,sBAAW,EAAC,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,GAAG,IAAA,sBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,IAAA,gBAAM,EAAC,IAAA,sBAAW,EAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,oFAAoF;AACpF,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1D,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC;AAE/C,oCAAoC;AACpC,SAAS,mBAAmB,CAAC,IAAa;IACxC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAA,+BAAc,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,4CAA4C;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AACD;;;GAGG;AACH,SAAS,MAAM,CAAC,CAAS;IACvB,MAAM,EAAE,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;IACjE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,2CAA2C;IAC/D,mDAAmD;IACnD,mDAAmD;IACnD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,OAAO,CAAC,CAAC;AACX,CAAC;AACD,MAAM,GAAG,GAAG,0BAAe,CAAC;AAC5B;;GAEG;AACH,SAAS,SAAS,CAAC,GAAG,IAAkB;IACtC,OAAO,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,SAAc;IACzC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,oDAAoD;AACnG,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAY,EAAE,SAAkB,EAAE,UAAe,IAAA,sBAAW,EAAC,EAAE,CAAC;IACnF,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IACvB,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC;IACjG,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C;IAC1F,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yDAAyD;IACtH,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,4CAA4C;IAChG,yDAAyD;IACzD,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gEAAgE;IAChG,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,+CAA+C;IAC/E,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACf,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,iEAAiE;IACjE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,SAAc,EAAE,OAAY,EAAE,SAAc;IACjE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAA,sBAAW,EAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAA,sBAAW,EAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C;QACtE,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;QAC7E,IAAI,CAAC,IAAA,kBAAO,EAAC,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAC/E,IAAI,CAAC,IAAA,kBAAO,EAAC,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACtD,0CAA0C;QAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,qCAAqC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9B,yDAAyD;QACzD,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAyBD;;;;;;;;;;;;GAYG;AACU,QAAA,OAAO,GAAgC,CAAC,GAAG,EAAE;IACxD,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,eAAe,GAAG,CAAC,IAAI,GAAG,IAAA,sBAAW,EAAC,UAAU,CAAC,EAAc,EAAE;QACrE,OAAO,IAAA,2BAAc,EAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,eAAe;IACf,iBAAS,CAAC,KAAK,CAAC,eAAe,CAAC;IAChC,SAAS,MAAM,CAAC,IAAiB;QAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;IAClE,CAAC;IACD,OAAO;QACL,MAAM;QACN,YAAY,EAAE,mBAAmB;QACjC,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,OAAO;QACd,KAAK,EAAE;YACL,eAAe,EAAE,eAAe;YAChC,gBAAgB,EAAE,eAAe;YACjC,UAAU;YAEV,eAAe;YACf,MAAM;YACN,YAAY;YACZ,eAAe,EAAf,0BAAe;YACf,eAAe,EAAf,0BAAe;YACf,GAAG,EAAH,gBAAG;SACJ;QACD,OAAO,EAAE;YACP,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,kBAAkB,EAAE,KAAK;YACzB,SAAS,EAAE,IAAI,GAAG,CAAC;YACnB,IAAI,EAAE,UAAU;SACjB;KACF,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CACnC,IAAA,6BAAU,EACR,IAAI,EACJ;IACE,OAAO;IACP;QACE,oEAAoE;QACpE,mEAAmE;QACnE,oEAAoE;QACpE,oEAAoE;KACrE;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE,EAAE,SAAS;KAChF;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;KACrE;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE,EAAE,SAAS;KAChF;CACF,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAA6C,CAClF,CAAC,EAAE,CAAC;AACP,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CACnC,IAAA,oCAAmB,EAAC,IAAI,EAAE;IACxB,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACjB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;CAC9B,CAAC,CAAC,EAAE,CAAC;AAER,wEAAwE;AAC3D,QAAA,gBAAgB,GAAsC,CAAC,GAAG,EAAE,CACvE,IAAA,+BAAY,EACV,iBAAS,CAAC,KAAK,EACf,CAAC,OAAiB,EAAE,EAAE;IACpB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,CAAC,EACD;IACE,GAAG,EAAE,gCAAgC;IACrC,SAAS,EAAE,gCAAgC;IAC3C,CAAC,EAAE,IAAI,CAAC,KAAK;IACb,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,gBAAM;CACb,CACF,CAAC,EAAE,CAAC;AAEP,uFAAuF;AAC1E,QAAA,WAAW,GAAsC,CAAC,GAAG,EAAE,CAClE,wBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;AAElC,uFAAuF;AAC1E,QAAA,aAAa,GAAsC,CAAC,GAAG,EAAE,CACpE,wBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC"} | ||
| {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"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"} |
+196
-343
@@ -18,19 +18,10 @@ /** | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { abytes, memoized, notImplemented, randomBytes } from '../utils.ts'; | ||
| import { normalizeZ, type CurveLengths } from './curve.ts'; | ||
| import { | ||
| abytes, | ||
| ensureBytes, | ||
| memoized, | ||
| randomBytes, | ||
| type CHash, | ||
| type Hex, | ||
| type PrivKey, | ||
| } from '../utils.ts'; | ||
| import { normalizeZ } from './curve.ts'; | ||
| import { | ||
| createHasher, | ||
| type H2CHasher, | ||
| type H2CHashOpts, | ||
| type H2CMethod, | ||
| type H2COpts, | ||
| type H2CPointConstructor, | ||
| type htfBasicOpts, | ||
| type MapToCurve, | ||
@@ -40,10 +31,3 @@ } from './hash-to-curve.ts'; | ||
| import type { Fp12, Fp12Bls, Fp2, Fp2Bls, Fp6Bls } from './tower.ts'; | ||
| import { | ||
| _normFnElement, | ||
| weierstrassPoints, | ||
| type CurvePointsRes, | ||
| type CurvePointsType, | ||
| type WeierstrassPoint, | ||
| type WeierstrassPointCons, | ||
| } from './weierstrass.ts'; | ||
| import { type WeierstrassPoint, type WeierstrassPointCons } from './weierstrass.ts'; | ||
@@ -59,16 +43,12 @@ type Fp = bigint; // Can be different field? | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>; | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp>; | ||
| fromHex(hex: string): WeierstrassPoint<Fp>; | ||
| toBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| toHex(point: WeierstrassPoint<Fp>): string; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| }; | ||
| export type SignatureCoder<Fp> = { | ||
| export type LongSignatureCoder<Fp> = { | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>; | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp>; | ||
| fromHex(hex: string): WeierstrassPoint<Fp>; | ||
| toBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| toHex(point: WeierstrassPoint<Fp>): string; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| }; | ||
@@ -100,2 +80,4 @@ | ||
| export type BlsPairing = { | ||
| lengths: CurveLengths; | ||
| Fr: IField<bigint>; | ||
| Fp12: Fp12Bls; | ||
@@ -109,42 +91,21 @@ calcPairingPrecomputes: (p: WeierstrassPoint<Fp2>) => Precompute; | ||
| ) => Fp12; | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| }; | ||
| // TODO: replace CurveType with this? It doesn't contain r however and has postPrecompute | ||
| export type BlsPairingParams = { | ||
| // NOTE: MSB is always ignored and used as marker for length, | ||
| // otherwise leading zeros will be lost. | ||
| // Can be different from 'X' (seed) param! | ||
| // MSB is always ignored and used as marker for length, otherwise leading zeros will be lost. | ||
| // Can be different from `X` (seed) param. | ||
| ateLoopSize: bigint; | ||
| xNegative: boolean; | ||
| twistType: TwistType; // BLS12-381: Multiplicative, BN254: Divisive | ||
| // This is super ugly hack for untwist point in BN254 after miller loop | ||
| postPrecompute?: PostPrecomputeFn; | ||
| randomBytes?: (len?: number) => Uint8Array; | ||
| postPrecompute?: PostPrecomputeFn; // Ugly hack to untwist point in BN254 after miller loop | ||
| }; | ||
| export type CurveType = { | ||
| G1: CurvePointsType<Fp> & { | ||
| ShortSignature: SignatureCoder<Fp>; | ||
| mapToCurve: MapToCurve<Fp>; | ||
| htfDefaults: H2COpts; | ||
| }; | ||
| G2: CurvePointsType<Fp2> & { | ||
| Signature: SignatureCoder<Fp2>; | ||
| mapToCurve: MapToCurve<Fp2>; | ||
| htfDefaults: H2COpts; | ||
| }; | ||
| fields: BlsFields; | ||
| params: { | ||
| // NOTE: MSB is always ignored and used as marker for length, | ||
| // otherwise leading zeros will be lost. | ||
| // Can be different from 'X' (seed) param! | ||
| ateLoopSize: BlsPairingParams['ateLoopSize']; | ||
| xNegative: BlsPairingParams['xNegative']; | ||
| r: bigint; // TODO: remove | ||
| twistType: BlsPairingParams['twistType']; // BLS12-381: Multiplicative, BN254: Divisive | ||
| }; | ||
| htfDefaults: H2COpts; | ||
| hash: CHash; // Because we need outputLen for DRBG | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| // This is super ugly hack for untwist point in BN254 after miller loop | ||
| postPrecompute?: PostPrecomputeFn; | ||
| export type BlsHasherParams = { | ||
| mapToG1?: MapToCurve<Fp>; | ||
| mapToG2?: MapToCurve<Fp2>; | ||
| hasherOpts: H2COpts; | ||
| hasherOptsG1: H2COpts; | ||
| hasherOptsG2: H2COpts; | ||
| }; | ||
| type PrecomputeSingle = [Fp2, Fp2, Fp2][]; | ||
@@ -159,9 +120,8 @@ type Precompute = PrecomputeSingle[]; | ||
| export interface BLSCurvePair { | ||
| longSignatures: BLSSigs<bigint, Fp2>; | ||
| shortSignatures: BLSSigs<Fp2, bigint>; | ||
| lengths: CurveLengths; | ||
| millerLoopBatch: BlsPairing['millerLoopBatch']; | ||
| pairing: BlsPairing['pairing']; | ||
| pairingBatch: BlsPairing['pairingBatch']; | ||
| G1: { Point: WeierstrassPointCons<bigint> } & H2CHasher<Fp>; | ||
| G2: { Point: WeierstrassPointCons<Fp2> } & H2CHasher<Fp2>; | ||
| G1: { Point: WeierstrassPointCons<Fp> }; | ||
| G2: { Point: WeierstrassPointCons<Fp2> }; | ||
| fields: { | ||
@@ -175,88 +135,30 @@ Fp: IField<Fp>; | ||
| utils: { | ||
| randomSecretKey: () => Uint8Array; | ||
| /** @deprecated use randomSecretKey */ | ||
| randomPrivateKey: () => Uint8Array; | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| calcPairingPrecomputes: BlsPairing['calcPairingPrecomputes']; | ||
| }; | ||
| } | ||
| export type CurveFn = BLSCurvePair & { | ||
| /** @deprecated use `longSignatures.getPublicKey` */ | ||
| getPublicKey: (secretKey: PrivKey) => Uint8Array; | ||
| /** @deprecated use `shortSignatures.getPublicKey` */ | ||
| getPublicKeyForShortSignatures: (secretKey: PrivKey) => Uint8Array; | ||
| /** @deprecated use `longSignatures.sign` */ | ||
| sign: { | ||
| (message: Hex, secretKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array; | ||
| ( | ||
| message: WeierstrassPoint<Fp2>, | ||
| secretKey: PrivKey, | ||
| htfOpts?: htfBasicOpts | ||
| ): WeierstrassPoint<Fp2>; | ||
| }; | ||
| /** @deprecated use `shortSignatures.sign` */ | ||
| signShortSignature: { | ||
| (message: Hex, secretKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array; | ||
| ( | ||
| message: WeierstrassPoint<Fp>, | ||
| secretKey: PrivKey, | ||
| htfOpts?: htfBasicOpts | ||
| ): WeierstrassPoint<Fp>; | ||
| }; | ||
| /** @deprecated use `longSignatures.verify` */ | ||
| verify: ( | ||
| signature: Hex | WeierstrassPoint<Fp2>, | ||
| message: Hex | WeierstrassPoint<Fp2>, | ||
| publicKey: Hex | WeierstrassPoint<Fp>, | ||
| htfOpts?: htfBasicOpts | ||
| ) => boolean; | ||
| /** @deprecated use `shortSignatures.verify` */ | ||
| verifyShortSignature: ( | ||
| signature: Hex | WeierstrassPoint<Fp>, | ||
| message: Hex | WeierstrassPoint<Fp>, | ||
| publicKey: Hex | WeierstrassPoint<Fp2>, | ||
| htfOpts?: htfBasicOpts | ||
| ) => boolean; | ||
| verifyBatch: ( | ||
| signature: Hex | WeierstrassPoint<Fp2>, | ||
| messages: (Hex | WeierstrassPoint<Fp2>)[], | ||
| publicKeys: (Hex | WeierstrassPoint<Fp>)[], | ||
| htfOpts?: htfBasicOpts | ||
| ) => boolean; | ||
| /** @deprecated use `longSignatures.aggregatePublicKeys` */ | ||
| aggregatePublicKeys: { | ||
| (publicKeys: Hex[]): Uint8Array; | ||
| (publicKeys: WeierstrassPoint<Fp>[]): WeierstrassPoint<Fp>; | ||
| }; | ||
| /** @deprecated use `longSignatures.aggregateSignatures` */ | ||
| aggregateSignatures: { | ||
| (signatures: Hex[]): Uint8Array; | ||
| (signatures: WeierstrassPoint<Fp2>[]): WeierstrassPoint<Fp2>; | ||
| }; | ||
| /** @deprecated use `shortSignatures.aggregateSignatures` */ | ||
| aggregateShortSignatures: { | ||
| (signatures: Hex[]): Uint8Array; | ||
| (signatures: WeierstrassPoint<Fp>[]): WeierstrassPoint<Fp>; | ||
| }; | ||
| G1: CurvePointsRes<Fp> & H2CHasher<Fp>; | ||
| G2: CurvePointsRes<Fp2> & H2CHasher<Fp2>; | ||
| /** @deprecated use `longSignatures.Signature` */ | ||
| Signature: SignatureCoder<Fp2>; | ||
| /** @deprecated use `shortSignatures.Signature` */ | ||
| ShortSignature: ShortSignatureCoder<Fp>; | ||
| params: { | ||
| ateLoopSize: bigint; | ||
| r: bigint; | ||
| twistType: TwistType; | ||
| /** @deprecated */ | ||
| G1b: bigint; | ||
| /** @deprecated */ | ||
| G2b: Fp2; | ||
| }; | ||
| }; | ||
| } | ||
| type BLSInput = Hex | Uint8Array; | ||
| export interface BlsCurvePairWithHashers extends BLSCurvePair { | ||
| G1: H2CHasher<WeierstrassPointCons<Fp>>; | ||
| G2: H2CHasher<WeierstrassPointCons<Fp2>>; | ||
| } | ||
| export interface BlsCurvePairWithSignatures extends BlsCurvePairWithHashers { | ||
| longSignatures: BLSSigs<bigint, Fp2>; | ||
| shortSignatures: BLSSigs<Fp2, bigint>; | ||
| } | ||
| type BLSInput = Uint8Array; | ||
| export interface BLSSigs<P, S> { | ||
| getPublicKey(secretKey: PrivKey): WeierstrassPoint<P>; | ||
| sign(hashedMessage: WeierstrassPoint<S>, secretKey: PrivKey): WeierstrassPoint<S>; | ||
| lengths: CurveLengths; | ||
| keygen(seed?: Uint8Array): { | ||
| secretKey: Uint8Array; | ||
| publicKey: WeierstrassPoint<P>; | ||
| }; | ||
| getPublicKey(secretKey: Uint8Array): WeierstrassPoint<P>; | ||
| sign(hashedMessage: WeierstrassPoint<S>, secretKey: Uint8Array): WeierstrassPoint<S>; | ||
| verify( | ||
@@ -269,4 +171,3 @@ signature: WeierstrassPoint<S> | BLSInput, | ||
| signature: WeierstrassPoint<S> | BLSInput, | ||
| messages: WeierstrassPoint<S>[], | ||
| publicKeys: (WeierstrassPoint<P> | BLSInput)[] | ||
| items: { message: WeierstrassPoint<S>; publicKey: WeierstrassPoint<P> | BLSInput }[] | ||
| ) => boolean; | ||
@@ -276,3 +177,3 @@ aggregatePublicKeys(publicKeys: (WeierstrassPoint<P> | BLSInput)[]): WeierstrassPoint<P>; | ||
| hash(message: Uint8Array, DST?: string | Uint8Array, hashOpts?: H2CHashOpts): WeierstrassPoint<S>; | ||
| Signature: SignatureCoder<S>; | ||
| Signature: LongSignatureCoder<S>; | ||
| } | ||
@@ -305,3 +206,3 @@ | ||
| ): BlsPairing { | ||
| const { Fp2, Fp12 } = fields; | ||
| const { Fr, Fp2, Fp12 } = fields; | ||
| const { twistType, ateLoopSize, xNegative, postPrecompute } = params; | ||
@@ -433,3 +334,13 @@ type G1 = typeof G1.BASE; | ||
| } | ||
| const lengths = { | ||
| seed: getMinHashLength(Fr.ORDER), | ||
| }; | ||
| const rand = params.randomBytes || randomBytes; | ||
| const randomSecretKey = (seed = rand(lengths.seed)): Uint8Array => { | ||
| abytes(seed, lengths.seed, 'seed'); | ||
| return mapHashToField(seed, Fr.ORDER); | ||
| }; | ||
| return { | ||
| lengths, | ||
| Fr, | ||
| Fp12, // NOTE: we re-export Fp12 here because pairing results are Fp12! | ||
@@ -440,2 +351,3 @@ millerLoopBatch, | ||
| calcPairingPrecomputes, | ||
| randomSecretKey, | ||
| }; | ||
@@ -446,18 +358,27 @@ } | ||
| blsPairing: BlsPairing, | ||
| PubCurve: CurvePointsRes<P> & H2CHasher<P>, | ||
| SigCurve: CurvePointsRes<S> & H2CHasher<S>, | ||
| SignatureCoder: SignatureCoder<S>, | ||
| isSigG1: boolean | ||
| PubPoint: WeierstrassPointCons<P>, | ||
| SigPoint: WeierstrassPointCons<S>, | ||
| isSigG1: boolean, | ||
| hashToSigCurve: H2CMethod<WeierstrassPoint<S>>, | ||
| SignatureCoder?: LongSignatureCoder<S> | ||
| ): BLSSigs<P, S> { | ||
| const { Fp12, pairingBatch } = blsPairing; | ||
| const { Fr, Fp12, pairingBatch, randomSecretKey, lengths } = blsPairing; | ||
| if (!SignatureCoder) { | ||
| SignatureCoder = { | ||
| fromBytes: notImplemented, | ||
| fromHex: notImplemented, | ||
| toBytes: notImplemented, | ||
| toHex: notImplemented, | ||
| }; | ||
| } | ||
| type PubPoint = WeierstrassPoint<P>; | ||
| type SigPoint = WeierstrassPoint<S>; | ||
| function normPub(point: PubPoint | BLSInput): PubPoint { | ||
| return point instanceof PubCurve.Point ? (point as PubPoint) : PubCurve.Point.fromHex(point); | ||
| return point instanceof PubPoint ? (point as PubPoint) : PubPoint.fromBytes(point); | ||
| } | ||
| function normSig(point: SigPoint | BLSInput): SigPoint { | ||
| return point instanceof SigCurve.Point ? (point as SigPoint) : SigCurve.Point.fromHex(point); | ||
| return point instanceof SigPoint ? (point as SigPoint) : SigPoint.fromBytes(point); | ||
| } | ||
| function amsg(m: unknown): SigPoint { | ||
| if (!(m instanceof SigCurve.Point)) | ||
| if (!(m instanceof SigPoint)) | ||
| throw new Error(`expected valid message hashed to ${!isSigG1 ? 'G2' : 'G1'} curve`); | ||
@@ -467,4 +388,4 @@ return m as SigPoint; | ||
| type G1 = CurvePointsRes<Fp>['Point']['BASE']; | ||
| type G2 = CurvePointsRes<Fp2>['Point']['BASE']; | ||
| type G1 = WeierstrassPoint<Fp>; | ||
| type G2 = WeierstrassPoint<Fp2>; | ||
| type PairingInput = { g1: G1; g2: G2 }; | ||
@@ -475,16 +396,24 @@ // What matters here is what point pairing API accepts as G1 or G2, not actual size or names | ||
| : (a: PubPoint, b: SigPoint) => ({ g1: b, g2: a }) as PairingInput; | ||
| return { | ||
| return Object.freeze({ | ||
| lengths: { ...lengths, secretKey: Fr.BYTES }, | ||
| keygen(seed?: Uint8Array) { | ||
| const secretKey = randomSecretKey(seed); | ||
| const publicKey = this.getPublicKey(secretKey); | ||
| return { secretKey, publicKey }; | ||
| }, | ||
| // P = pk x G | ||
| getPublicKey(secretKey: PrivKey): PubPoint { | ||
| // TODO: replace with | ||
| // const sec = PubCurve.Point.Fn.fromBytes(secretKey); | ||
| const sec = _normFnElement(PubCurve.Point.Fn, secretKey); | ||
| return PubCurve.Point.BASE.multiply(sec); | ||
| getPublicKey(secretKey: Uint8Array): PubPoint { | ||
| let sec; | ||
| try { | ||
| sec = PubPoint.Fn.fromBytes(secretKey); | ||
| } catch (error) { | ||
| // @ts-ignore | ||
| throw new Error('invalid private key: ' + typeof secretKey, { cause: error }); | ||
| } | ||
| return PubPoint.BASE.multiply(sec); | ||
| }, | ||
| // S = pk x H(m) | ||
| sign(message: SigPoint, secretKey: PrivKey, unusedArg?: any): SigPoint { | ||
| sign(message: SigPoint, secretKey: Uint8Array, unusedArg?: any): SigPoint { | ||
| if (unusedArg != null) throw new Error('sign() expects 2 arguments'); | ||
| // TODO: replace with | ||
| // PubCurve.Point.Fn.fromBytes(secretKey) | ||
| const sec = _normFnElement(PubCurve.Point.Fn, secretKey); | ||
| const sec = PubPoint.Fn.fromBytes(secretKey); | ||
| amsg(message).assertValidity(); | ||
@@ -506,3 +435,3 @@ return message.multiply(sec); | ||
| const P = publicKey.negate(); | ||
| const G = PubCurve.Point.BASE; | ||
| const G = PubPoint.BASE; | ||
| const Hm = amsg(message); | ||
@@ -522,11 +451,8 @@ const S = signature; | ||
| signature: SigPoint | BLSInput, | ||
| messages: SigPoint[], | ||
| publicKeys: (PubPoint | BLSInput)[] | ||
| items: { message: SigPoint; publicKey: PubPoint | BLSInput }[] | ||
| ): boolean { | ||
| aNonEmpty(messages); | ||
| if (publicKeys.length !== messages.length) | ||
| throw new Error('amount of public keys and messages should be equal'); | ||
| aNonEmpty(items); | ||
| const sig = normSig(signature); | ||
| const nMessages = messages; | ||
| const nPublicKeys = publicKeys.map(normPub); | ||
| const nMessages = items.map((i) => i.message); | ||
| const nPublicKeys = items.map((i) => normPub(i.publicKey)); | ||
| // NOTE: this works only for exact same object | ||
@@ -545,3 +471,3 @@ const messagePubKeyMap = new Map<SigPoint, PubPoint[]>(); | ||
| const paired = []; | ||
| const G = PubCurve.Point.BASE; | ||
| const G = PubPoint.BASE; | ||
| try { | ||
@@ -563,3 +489,3 @@ for (const [msg, keys] of messagePubKeyMap) { | ||
| publicKeys = publicKeys.map((pub) => normPub(pub)); | ||
| const agg = (publicKeys as PubPoint[]).reduce((sum, p) => sum.add(p), PubCurve.Point.ZERO); | ||
| const agg = (publicKeys as PubPoint[]).reduce((sum, p) => sum.add(p), PubPoint.ZERO); | ||
| agg.assertValidity(); | ||
@@ -574,3 +500,3 @@ return agg; | ||
| signatures = signatures.map((sig) => normSig(sig)); | ||
| const agg = (signatures as SigPoint[]).reduce((sum, s) => sum.add(s), SigCurve.Point.ZERO); | ||
| const agg = (signatures as SigPoint[]).reduce((sum, s) => sum.add(s), SigPoint.ZERO); | ||
| agg.assertValidity(); | ||
@@ -583,186 +509,113 @@ return agg; | ||
| const opts = DST ? { DST } : undefined; | ||
| return SigCurve.hashToCurve(messageBytes, opts) as SigPoint; | ||
| return hashToSigCurve(messageBytes, opts); | ||
| }, | ||
| Signature: SignatureCoder, | ||
| }; | ||
| }) /*satisfies Signer */; | ||
| } | ||
| // G1_Point: ProjConstructor<bigint>, G2_Point: ProjConstructor<Fp2>, | ||
| export function bls(CURVE: CurveType): CurveFn { | ||
| type BlsSignatureCoders = Partial<{ | ||
| LongSignature: LongSignatureCoder<Fp2>; | ||
| ShortSignature: ShortSignatureCoder<Fp>; | ||
| }>; | ||
| // NOTE: separate function instead of function override, so we don't depend on hasher in bn254. | ||
| export function blsBasic( | ||
| fields: BlsFields, | ||
| G1_Point: WeierstrassPointCons<Fp>, | ||
| G2_Point: WeierstrassPointCons<Fp2>, | ||
| params: BlsPairingParams | ||
| ): BLSCurvePair { | ||
| // Fields are specific for curve, so for now we'll need to pass them with opts | ||
| const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields; | ||
| const { Fp, Fr, Fp2, Fp6, Fp12 } = fields; | ||
| // Point on G1 curve: (x, y) | ||
| const G1_ = weierstrassPoints(CURVE.G1); | ||
| const G1 = Object.assign( | ||
| G1_, | ||
| createHasher(G1_.Point, CURVE.G1.mapToCurve, { | ||
| ...CURVE.htfDefaults, | ||
| ...CURVE.G1.htfDefaults, | ||
| }) | ||
| ); | ||
| // const G1_Point = weierstrass(CURVE.G1, { Fn: Fr }); | ||
| const G1 = { Point: G1_Point }; | ||
| // Point on G2 curve (complex numbers): (x₁, x₂+i), (y₁, y₂+i) | ||
| const G2_ = weierstrassPoints(CURVE.G2); | ||
| const G2 = Object.assign( | ||
| G2_, | ||
| createHasher(G2_.Point as H2CPointConstructor<Fp2>, CURVE.G2.mapToCurve, { | ||
| ...CURVE.htfDefaults, | ||
| ...CURVE.G2.htfDefaults, | ||
| }) | ||
| ); | ||
| type G1 = typeof G1.Point.BASE; | ||
| type G2 = typeof G2.Point.BASE; | ||
| const G2 = { Point: G2_Point }; | ||
| const pairingRes = createBlsPairing(CURVE.fields, G1.Point, G2.Point, { | ||
| ...CURVE.params, | ||
| postPrecompute: CURVE.postPrecompute, | ||
| }); | ||
| const { millerLoopBatch, pairing, pairingBatch, calcPairingPrecomputes } = pairingRes; | ||
| const longSignatures = createBlsSig(pairingRes, G1, G2, CURVE.G2.Signature, false); | ||
| const shortSignatures = createBlsSig(pairingRes, G2, G1, CURVE.G1.ShortSignature, true); | ||
| const rand = CURVE.randomBytes || randomBytes; | ||
| const randomSecretKey = (): Uint8Array => { | ||
| const length = getMinHashLength(Fr.ORDER); | ||
| return mapHashToField(rand(length), Fr.ORDER); | ||
| }; | ||
| const utils = { | ||
| const pairingRes = createBlsPairing(fields, G1_Point, G2_Point, params); | ||
| const { | ||
| millerLoopBatch, | ||
| pairing, | ||
| pairingBatch, | ||
| calcPairingPrecomputes, | ||
| randomSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| calcPairingPrecomputes, | ||
| }; | ||
| lengths, | ||
| } = pairingRes; | ||
| // LEGACY code | ||
| type G1Hex = Hex | G1; | ||
| type G2Hex = Hex | G2; | ||
| const { ShortSignature } = CURVE.G1; | ||
| const { Signature } = CURVE.G2; | ||
| function normP1Hash(point: G1Hex, htfOpts?: htfBasicOpts): G1 { | ||
| return point instanceof G1.Point | ||
| ? point | ||
| : shortSignatures.hash(ensureBytes('point', point), htfOpts?.DST); | ||
| } | ||
| function normP2Hash(point: G2Hex, htfOpts?: htfBasicOpts): G2 { | ||
| return point instanceof G2.Point | ||
| ? point | ||
| : longSignatures.hash(ensureBytes('point', point), htfOpts?.DST); | ||
| } | ||
| function getPublicKey(privateKey: PrivKey): Uint8Array { | ||
| return longSignatures.getPublicKey(privateKey).toBytes(true); | ||
| } | ||
| function getPublicKeyForShortSignatures(privateKey: PrivKey): Uint8Array { | ||
| return shortSignatures.getPublicKey(privateKey).toBytes(true); | ||
| } | ||
| function sign(message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array; | ||
| function sign(message: G2, privateKey: PrivKey, htfOpts?: htfBasicOpts): G2; | ||
| function sign(message: G2Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array | G2 { | ||
| const Hm = normP2Hash(message, htfOpts); | ||
| const S = longSignatures.sign(Hm, privateKey); | ||
| return message instanceof G2.Point ? S : Signature.toBytes(S); | ||
| } | ||
| function signShortSignature( | ||
| message: Hex, | ||
| privateKey: PrivKey, | ||
| htfOpts?: htfBasicOpts | ||
| ): Uint8Array; | ||
| function signShortSignature(message: G1, privateKey: PrivKey, htfOpts?: htfBasicOpts): G1; | ||
| function signShortSignature( | ||
| message: G1Hex, | ||
| privateKey: PrivKey, | ||
| htfOpts?: htfBasicOpts | ||
| ): Uint8Array | G1 { | ||
| const Hm = normP1Hash(message, htfOpts); | ||
| const S = shortSignatures.sign(Hm, privateKey); | ||
| return message instanceof G1.Point ? S : ShortSignature.toBytes(S); | ||
| } | ||
| function verify( | ||
| signature: G2Hex, | ||
| message: G2Hex, | ||
| publicKey: G1Hex, | ||
| htfOpts?: htfBasicOpts | ||
| ): boolean { | ||
| const Hm = normP2Hash(message, htfOpts); | ||
| return longSignatures.verify(signature, Hm, publicKey); | ||
| } | ||
| function verifyShortSignature( | ||
| signature: G1Hex, | ||
| message: G1Hex, | ||
| publicKey: G2Hex, | ||
| htfOpts?: htfBasicOpts | ||
| ): boolean { | ||
| const Hm = normP1Hash(message, htfOpts); | ||
| return shortSignatures.verify(signature, Hm, publicKey); | ||
| } | ||
| function aggregatePublicKeys(publicKeys: Hex[]): Uint8Array; | ||
| function aggregatePublicKeys(publicKeys: G1[]): G1; | ||
| function aggregatePublicKeys(publicKeys: G1Hex[]): Uint8Array | G1 { | ||
| const agg = longSignatures.aggregatePublicKeys(publicKeys); | ||
| return publicKeys[0] instanceof G1.Point ? agg : agg.toBytes(true); | ||
| } | ||
| function aggregateSignatures(signatures: Hex[]): Uint8Array; | ||
| function aggregateSignatures(signatures: G2[]): G2; | ||
| function aggregateSignatures(signatures: G2Hex[]): Uint8Array | G2 { | ||
| const agg = longSignatures.aggregateSignatures(signatures); | ||
| return signatures[0] instanceof G2.Point ? agg : Signature.toBytes(agg); | ||
| } | ||
| function aggregateShortSignatures(signatures: Hex[]): Uint8Array; | ||
| function aggregateShortSignatures(signatures: G1[]): G1; | ||
| function aggregateShortSignatures(signatures: G1Hex[]): Uint8Array | G1 { | ||
| const agg = shortSignatures.aggregateSignatures(signatures); | ||
| return signatures[0] instanceof G1.Point ? agg : ShortSignature.toBytes(agg); | ||
| } | ||
| function verifyBatch( | ||
| signature: G2Hex, | ||
| messages: G2Hex[], | ||
| publicKeys: G1Hex[], | ||
| htfOpts?: htfBasicOpts | ||
| ): boolean { | ||
| const Hm = messages.map((m) => normP2Hash(m, htfOpts)); | ||
| return longSignatures.verifyBatch(signature, Hm, publicKeys); | ||
| } | ||
| G1.Point.BASE.precompute(4); | ||
| return { | ||
| longSignatures, | ||
| shortSignatures, | ||
| return Object.freeze({ | ||
| lengths, | ||
| millerLoopBatch, | ||
| pairing, | ||
| pairingBatch, | ||
| verifyBatch, | ||
| fields: { | ||
| Fr, | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| }, | ||
| G1, | ||
| G2, | ||
| fields: { Fr, Fp, Fp2, Fp6, Fp12 }, | ||
| params: { | ||
| ateLoopSize: CURVE.params.ateLoopSize, | ||
| twistType: CURVE.params.twistType, | ||
| // deprecated | ||
| r: CURVE.params.r, | ||
| G1b: CURVE.G1.b, | ||
| G2b: CURVE.G2.b, | ||
| ateLoopSize: params.ateLoopSize, | ||
| twistType: params.twistType, | ||
| }, | ||
| utils, | ||
| utils: { | ||
| randomSecretKey, | ||
| calcPairingPrecomputes, | ||
| }, | ||
| }); | ||
| } | ||
| // deprecated | ||
| getPublicKey, | ||
| getPublicKeyForShortSignatures, | ||
| sign, | ||
| signShortSignature, | ||
| verify, | ||
| verifyShortSignature, | ||
| aggregatePublicKeys, | ||
| aggregateSignatures, | ||
| aggregateShortSignatures, | ||
| G1, | ||
| G2, | ||
| Signature, | ||
| ShortSignature, | ||
| // We can export this too, but seems there is not much reasons for now? If user wants hasher, they can just create hasher. | ||
| function blsHashers( | ||
| fields: BlsFields, | ||
| G1_Point: WeierstrassPointCons<Fp>, | ||
| G2_Point: WeierstrassPointCons<Fp2>, | ||
| params: BlsPairingParams, | ||
| hasherParams: BlsHasherParams | ||
| ): BlsCurvePairWithHashers { | ||
| const base = blsBasic(fields, G1_Point, G2_Point, params); | ||
| const G1Hasher = createHasher(G1_Point, hasherParams.mapToG1 || notImplemented, { | ||
| ...hasherParams.hasherOpts, | ||
| ...hasherParams.hasherOptsG1, | ||
| }); | ||
| const G2Hasher = createHasher(G2_Point, hasherParams.mapToG2 || notImplemented, { | ||
| ...hasherParams.hasherOpts, | ||
| ...hasherParams.hasherOptsG2, | ||
| }); | ||
| return Object.freeze({ ...base, G1: G1Hasher, G2: G2Hasher }); | ||
| } | ||
| // G1_Point: ProjConstructor<bigint>, G2_Point: ProjConstructor<Fp2>, | ||
| // Rename to blsSignatures? | ||
| export function bls( | ||
| fields: BlsFields, | ||
| G1_Point: WeierstrassPointCons<Fp>, | ||
| G2_Point: WeierstrassPointCons<Fp2>, | ||
| params: BlsPairingParams, | ||
| hasherParams: BlsHasherParams, | ||
| signatureCoders: BlsSignatureCoders | ||
| ): BlsCurvePairWithSignatures { | ||
| const base = blsHashers(fields, G1_Point, G2_Point, params, hasherParams); | ||
| const pairingRes: BlsPairing = { | ||
| ...base, | ||
| Fr: base.fields.Fr, | ||
| Fp12: base.fields.Fp12, | ||
| calcPairingPrecomputes: base.utils.calcPairingPrecomputes, | ||
| randomSecretKey: base.utils.randomSecretKey, | ||
| }; | ||
| const longSignatures = createBlsSig( | ||
| pairingRes, | ||
| G1_Point, | ||
| G2_Point, | ||
| false, | ||
| base.G2.hashToCurve, | ||
| signatureCoders?.LongSignature | ||
| ); | ||
| const shortSignatures = createBlsSig( | ||
| pairingRes, | ||
| G2_Point, | ||
| G1_Point, | ||
| true, | ||
| base.G1.hashToCurve, | ||
| signatureCoders?.ShortSignature | ||
| ); | ||
| return Object.freeze({ ...base, longSignatures, shortSignatures }); | ||
| } |
@@ -7,4 +7,4 @@ /** | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { bitLen, bitMask, validateObject } from '../utils.ts'; | ||
| import { Field, FpInvertBatch, nLength, validateField, type IField } from './modular.ts'; | ||
| import { bitLen, bitMask } from '../utils.ts'; | ||
| import { Field, FpInvertBatch, validateField, type IField } from './modular.ts'; | ||
@@ -19,14 +19,2 @@ const _0n = BigInt(0); | ||
| // This was initialy do this way to re-use montgomery ladder in field (add->mul,double->sqr), but | ||
| // that didn't happen and there is probably not much reason to have separate Group like this? | ||
| export interface Group<T extends Group<T>> { | ||
| double(): T; | ||
| negate(): T; | ||
| add(other: T): T; | ||
| subtract(other: T): T; | ||
| equals(other: T): boolean; | ||
| multiply(scalar: bigint): T; | ||
| toAffine?(invertedZ?: any): AffinePoint<any>; | ||
| } | ||
| // We can't "abstract out" coordinates (X, Y, Z; and T in Edwards): argument names of constructor | ||
@@ -41,3 +29,3 @@ // are not accessible. See Typescript gh-56093, gh-41594. | ||
| /** Base interface for all elliptic curve Points. */ | ||
| export interface CurvePoint<F, P extends CurvePoint<F, P>> extends Group<P> { | ||
| export interface CurvePoint<F, P extends CurvePoint<F, P>> { | ||
| /** Affine x coordinate. Different from projective / extended X coordinate. */ | ||
@@ -83,3 +71,3 @@ x: F; | ||
| fromBytes(bytes: Uint8Array): P; | ||
| fromHex(hex: Uint8Array | string): P; | ||
| fromHex(hex: string): P; | ||
| } | ||
@@ -141,12 +129,3 @@ | ||
| } | ||
| export type GroupConstructor<T> = { | ||
| BASE: T; | ||
| ZERO: T; | ||
| }; | ||
| /** @deprecated */ | ||
| export type ExtendedGroupConstructor<T> = GroupConstructor<T> & { | ||
| Fp: IField<any>; | ||
| Fn: IField<bigint>; | ||
| fromAffine(ap: AffinePoint<any>): T; | ||
| }; | ||
| export type Mapper<T> = (i: T[]) => T[]; | ||
@@ -472,3 +451,2 @@ | ||
| c: PC, | ||
| fieldN: IField<bigint>, | ||
| points: P[], | ||
@@ -483,2 +461,3 @@ scalars: bigint[] | ||
| // 0 is accepted in scalars | ||
| const fieldN = c.Fn; | ||
| validateMSMPoints(points, c); | ||
@@ -527,3 +506,2 @@ validateMSMScalars(scalars, fieldN); | ||
| c: PC, | ||
| fieldN: IField<bigint>, | ||
| points: P[], | ||
@@ -567,2 +545,3 @@ windowSize: number | ||
| */ | ||
| const fieldN = c.Fn; | ||
| validateW(windowSize, fieldN.BITS); | ||
@@ -602,54 +581,2 @@ validateMSMPoints(points, c); | ||
| // TODO: remove | ||
| /** | ||
| * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok. | ||
| * Though generator can be different (Fp2 / Fp6 for BLS). | ||
| */ | ||
| export type BasicCurve<T> = { | ||
| Fp: IField<T>; // Field over which we'll do calculations (Fp) | ||
| n: bigint; // Curve order, total count of valid points in the field | ||
| nBitLength?: number; // bit length of curve order | ||
| nByteLength?: number; // byte length of curve order | ||
| h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation | ||
| hEff?: bigint; // Number to multiply to clear cofactor | ||
| Gx: T; // base point X coordinate | ||
| Gy: T; // base point Y coordinate | ||
| allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey | ||
| }; | ||
| // TODO: remove | ||
| /** @deprecated */ | ||
| export function validateBasic<FP, T>( | ||
| curve: BasicCurve<FP> & T | ||
| ): Readonly< | ||
| { | ||
| readonly nBitLength: number; | ||
| readonly nByteLength: number; | ||
| } & BasicCurve<FP> & | ||
| T & { | ||
| p: bigint; | ||
| } | ||
| > { | ||
| validateField(curve.Fp); | ||
| validateObject( | ||
| curve, | ||
| { | ||
| n: 'bigint', | ||
| h: 'bigint', | ||
| Gx: 'field', | ||
| Gy: 'field', | ||
| }, | ||
| { | ||
| nBitLength: 'isSafeInteger', | ||
| nByteLength: 'isSafeInteger', | ||
| } | ||
| ); | ||
| // Set defaults | ||
| return Object.freeze({ | ||
| ...nLength(curve.n, curve.nBitLength), | ||
| ...curve, | ||
| ...{ p: curve.Fp.ORDER }, | ||
| } as const); | ||
| } | ||
| export type ValidCurveParams<T> = { | ||
@@ -656,0 +583,0 @@ p: bigint; |
+49
-171
@@ -10,4 +10,4 @@ /** | ||
| _validateObject, | ||
| _abool2 as abool, | ||
| _abytes2 as abytes, | ||
| abool, | ||
| abytes, | ||
| aInRange, | ||
@@ -18,9 +18,9 @@ bytesToHex, | ||
| copyBytes, | ||
| ensureBytes, | ||
| hexToBytes, | ||
| isBytes, | ||
| memoized, | ||
| notImplemented, | ||
| randomBytes as randomBytesWeb, | ||
| randomBytes as wcRandomBytes, | ||
| type FHash, | ||
| type Hex, | ||
| type Signer, | ||
| } from '../utils.ts'; | ||
@@ -30,6 +30,4 @@ import { | ||
| normalizeZ, | ||
| pippenger, | ||
| wNAF, | ||
| type AffinePoint, | ||
| type BasicCurve, | ||
| type CurveLengths, | ||
@@ -39,3 +37,3 @@ type CurvePoint, | ||
| } from './curve.ts'; | ||
| import { Field, type IField, type NLength } from './modular.ts'; | ||
| import { type IField } from './modular.ts'; | ||
@@ -58,15 +56,2 @@ // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
| readonly T: bigint; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(): Uint8Array; | ||
| /** @deprecated use `p.precompute(windowSize)` */ | ||
| _setWindowSize(windowSize: number): void; | ||
| /** @deprecated use .X */ | ||
| readonly ex: bigint; | ||
| /** @deprecated use .Y */ | ||
| readonly ey: bigint; | ||
| /** @deprecated use .Z */ | ||
| readonly ez: bigint; | ||
| /** @deprecated use .T */ | ||
| readonly et: bigint; | ||
| } | ||
@@ -78,10 +63,4 @@ /** Static methods of Extended Point with coordinates in X, Y, Z, T. */ | ||
| fromBytes(bytes: Uint8Array, zip215?: boolean): EdwardsPoint; | ||
| fromHex(hex: Hex, zip215?: boolean): EdwardsPoint; | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| msm(points: EdwardsPoint[], scalars: bigint[]): EdwardsPoint; | ||
| fromHex(hex: string, zip215?: boolean): EdwardsPoint; | ||
| } | ||
| /** @deprecated use EdwardsPoint */ | ||
| export type ExtPointType = EdwardsPoint; | ||
| /** @deprecated use EdwardsPointCons */ | ||
| export type ExtPointConstructor = EdwardsPointCons; | ||
@@ -148,9 +127,13 @@ /** | ||
| keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array }; | ||
| getPublicKey: (secretKey: Hex) => Uint8Array; | ||
| sign: (message: Hex, secretKey: Hex, options?: { context?: Hex }) => Uint8Array; | ||
| getPublicKey: (secretKey: Uint8Array) => Uint8Array; | ||
| sign: ( | ||
| message: Uint8Array, | ||
| secretKey: Uint8Array, | ||
| options?: { context?: Uint8Array } | ||
| ) => Uint8Array; | ||
| verify: ( | ||
| sig: Hex, | ||
| message: Hex, | ||
| publicKey: Hex, | ||
| options?: { context?: Hex; zip215: boolean } | ||
| sig: Uint8Array, | ||
| message: Uint8Array, | ||
| publicKey: Uint8Array, | ||
| options?: { context?: Uint8Array; zip215: boolean } | ||
| ) => boolean; | ||
@@ -189,3 +172,3 @@ Point: EdwardsPointCons; | ||
| toMontgomeryPriv: (privateKey: Uint8Array) => Uint8Array; | ||
| getExtendedPublicKey: (key: Hex) => { | ||
| getExtendedPublicKey: (key: Uint8Array) => { | ||
| head: Uint8Array; | ||
@@ -197,7 +180,2 @@ prefix: Uint8Array; | ||
| }; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `point.precompute()` */ | ||
| precompute: (windowSize?: number, point?: EdwardsPoint) => EdwardsPoint; | ||
| }; | ||
@@ -362,4 +340,5 @@ lengths: CurveLengths; | ||
| } | ||
| static fromHex(bytes: Uint8Array, zip215 = false): Point { | ||
| return Point.fromBytes(ensureBytes('point', bytes), zip215); | ||
| static fromHex(hex: string, zip215 = false): Point { | ||
| return Point.fromBytes(hexToBytes(hex), zip215); | ||
| } | ||
@@ -517,28 +496,2 @@ | ||
| } | ||
| // TODO: remove | ||
| get ex(): bigint { | ||
| return this.X; | ||
| } | ||
| get ey(): bigint { | ||
| return this.Y; | ||
| } | ||
| get ez(): bigint { | ||
| return this.Z; | ||
| } | ||
| get et(): bigint { | ||
| return this.T; | ||
| } | ||
| static normalizeZ(points: Point[]): Point[] { | ||
| return normalizeZ(Point, points); | ||
| } | ||
| static msm(points: Point[], scalars: bigint[]): Point { | ||
| return pippenger(Point, Fn, points, scalars); | ||
| } | ||
| _setWindowSize(windowSize: number) { | ||
| this.precompute(windowSize); | ||
| } | ||
| toRawBytes(): Uint8Array { | ||
| return this.toBytes(); | ||
| } | ||
| } | ||
@@ -578,3 +531,3 @@ const wnaf = new wNAF(Point, Fn.BITS); | ||
| static fromHex(_hex: Hex): any { | ||
| static fromHex(_hex: string): any { | ||
| notImplemented(); | ||
@@ -654,7 +607,2 @@ } | ||
| protected abstract init(ep: EdwardsPoint): T; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(): Uint8Array { | ||
| return this.toBytes(); | ||
| } | ||
| } | ||
@@ -682,3 +630,3 @@ | ||
| const randomBytes = eddsaOpts.randomBytes || randomBytesWeb; | ||
| const randomBytes = eddsaOpts.randomBytes || wcRandomBytes; | ||
| const adjustScalarBytes = eddsaOpts.adjustScalarBytes || ((bytes: Uint8Array) => bytes); | ||
@@ -699,8 +647,8 @@ const domain = | ||
| // Get the hashed private scalar per RFC8032 5.1.5 | ||
| function getPrivateScalar(key: Hex) { | ||
| function getPrivateScalar(key: Uint8Array) { | ||
| const len = lengths.secretKey; | ||
| key = ensureBytes('private key', key, len); | ||
| abytes(key, lengths.secretKey, 'secretKey'); | ||
| // Hash private key with curve's hash function to produce uniformingly random input | ||
| // Check byte lengths: ensure(64, h(ensure(32, key))) | ||
| const hashed = ensureBytes('hashed private key', cHash(key), 2 * len); | ||
| const hashed = abytes(cHash(key), 2 * len, 'hashedSecretKey'); | ||
| const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE | ||
@@ -713,3 +661,3 @@ const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6) | ||
| /** Convenience method that creates public key from scalar. RFC8032 5.1.5 */ | ||
| function getExtendedPublicKey(secretKey: Hex) { | ||
| function getExtendedPublicKey(secretKey: Uint8Array) { | ||
| const { head, prefix, scalar } = getPrivateScalar(secretKey); | ||
@@ -722,3 +670,3 @@ const point = BASE.multiply(scalar); // Point on Edwards curve aka public key | ||
| /** Calculates EdDSA pub key. RFC8032 5.1.5. */ | ||
| function getPublicKey(secretKey: Hex): Uint8Array { | ||
| function getPublicKey(secretKey: Uint8Array): Uint8Array { | ||
| return getExtendedPublicKey(secretKey).pointBytes; | ||
@@ -728,10 +676,14 @@ } | ||
| // int('LE', SHA512(dom2(F, C) || msgs)) mod N | ||
| function hashDomainToScalar(context: Hex = Uint8Array.of(), ...msgs: Uint8Array[]) { | ||
| function hashDomainToScalar(context: Uint8Array = Uint8Array.of(), ...msgs: Uint8Array[]) { | ||
| const msg = concatBytes(...msgs); | ||
| return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash))); | ||
| return modN_LE(cHash(domain(msg, abytes(context, undefined, 'context'), !!prehash))); | ||
| } | ||
| /** Signs message with privateKey. RFC8032 5.1.6 */ | ||
| function sign(msg: Hex, secretKey: Hex, options: { context?: Hex } = {}): Uint8Array { | ||
| msg = ensureBytes('message', msg); | ||
| function sign( | ||
| msg: Uint8Array, | ||
| secretKey: Uint8Array, | ||
| options: { context?: Uint8Array } = {} | ||
| ): Uint8Array { | ||
| msg = abytes(msg, undefined, 'message'); | ||
| if (prehash) msg = prehash(msg); // for ed25519ph etc. | ||
@@ -749,3 +701,3 @@ const { prefix, scalar, pointBytes } = getExtendedPublicKey(secretKey); | ||
| // verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex: | ||
| const verifyOpts: { context?: Hex; zip215?: boolean } = { zip215: true }; | ||
| const verifyOpts: { context?: Uint8Array; zip215?: boolean } = { zip215: true }; | ||
@@ -756,8 +708,13 @@ /** | ||
| */ | ||
| function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean { | ||
| function verify( | ||
| sig: Uint8Array, | ||
| msg: Uint8Array, | ||
| publicKey: Uint8Array, | ||
| options = verifyOpts | ||
| ): boolean { | ||
| const { context, zip215 } = options; | ||
| const len = lengths.signature; | ||
| sig = ensureBytes('signature', sig, len); | ||
| msg = ensureBytes('message', msg); | ||
| publicKey = ensureBytes('publicKey', publicKey, lengths.publicKey); | ||
| sig = abytes(sig, len, 'signature'); | ||
| msg = abytes(msg, undefined, 'message'); | ||
| publicKey = abytes(publicKey, lengths.publicKey, 'publicKey'); | ||
| if (zip215 !== undefined) abool(zip215, 'zip215'); | ||
@@ -803,5 +760,7 @@ if (prehash) msg = prehash(msg); // for ed25519ph, etc | ||
| } | ||
| function isValidSecretKey(key: Uint8Array): boolean { | ||
| return isBytes(key) && key.length === Fn.BYTES; | ||
| } | ||
| function isValidPublicKey(key: Uint8Array, zip215?: boolean): boolean { | ||
@@ -837,3 +796,2 @@ try { | ||
| }, | ||
| toMontgomeryPriv(secretKey: Uint8Array): Uint8Array { | ||
@@ -845,9 +803,2 @@ const size = lengths.secretKey; | ||
| }, | ||
| /** @deprecated */ | ||
| randomPrivateKey: randomSecretKey, | ||
| /** @deprecated */ | ||
| precompute(windowSize = 8, point: EdwardsPoint = Point.BASE): EdwardsPoint { | ||
| return point.precompute(windowSize, false); | ||
| }, | ||
| }; | ||
@@ -863,76 +814,3 @@ | ||
| lengths, | ||
| }); | ||
| }) satisfies Signer; | ||
| } | ||
| // TODO: remove everything below | ||
| export type CurveType = BasicCurve<bigint> & { | ||
| a: bigint; // curve param a | ||
| d: bigint; // curve param d | ||
| /** @deprecated the property will be removed in next release */ | ||
| hash: FHash; // Hashing | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; // CSPRNG | ||
| adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn | ||
| domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing | ||
| uvRatio?: UVRatio; // Ratio √(u/v) | ||
| prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify() | ||
| mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard | ||
| }; | ||
| export type CurveTypeWithLength = Readonly<CurveType & Partial<NLength>>; | ||
| export type CurveFn = { | ||
| /** @deprecated the property will be removed in next release */ | ||
| CURVE: CurveType; | ||
| keygen: EdDSA['keygen']; | ||
| getPublicKey: EdDSA['getPublicKey']; | ||
| sign: EdDSA['sign']; | ||
| verify: EdDSA['verify']; | ||
| Point: EdwardsPointCons; | ||
| /** @deprecated use `Point` */ | ||
| ExtendedPoint: EdwardsPointCons; | ||
| utils: EdDSA['utils']; | ||
| lengths: CurveLengths; | ||
| }; | ||
| export type EdComposed = { | ||
| CURVE: EdwardsOpts; | ||
| curveOpts: EdwardsExtraOpts; | ||
| hash: FHash; | ||
| eddsaOpts: EdDSAOpts; | ||
| }; | ||
| function _eddsa_legacy_opts_to_new(c: CurveTypeWithLength): EdComposed { | ||
| const CURVE: EdwardsOpts = { | ||
| a: c.a, | ||
| d: c.d, | ||
| p: c.Fp.ORDER, | ||
| n: c.n, | ||
| h: c.h, | ||
| Gx: c.Gx, | ||
| Gy: c.Gy, | ||
| }; | ||
| const Fp = c.Fp; | ||
| const Fn = Field(CURVE.n, c.nBitLength, true); | ||
| const curveOpts: EdwardsExtraOpts = { Fp, Fn, uvRatio: c.uvRatio }; | ||
| const eddsaOpts: EdDSAOpts = { | ||
| randomBytes: c.randomBytes, | ||
| adjustScalarBytes: c.adjustScalarBytes, | ||
| domain: c.domain, | ||
| prehash: c.prehash, | ||
| mapToCurve: c.mapToCurve, | ||
| }; | ||
| return { CURVE, curveOpts, hash: c.hash, eddsaOpts }; | ||
| } | ||
| function _eddsa_new_output_to_legacy(c: CurveTypeWithLength, eddsa: EdDSA): CurveFn { | ||
| const Point = eddsa.Point; | ||
| const legacy = Object.assign({}, eddsa, { | ||
| ExtendedPoint: Point, | ||
| CURVE: c, | ||
| nBitLength: Point.Fn.BITS, | ||
| nByteLength: Point.Fn.BYTES, | ||
| }); | ||
| return legacy; | ||
| } | ||
| // TODO: remove. Use eddsa | ||
| export function twistedEdwards(c: CurveTypeWithLength): CurveFn { | ||
| const { CURVE, curveOpts, hash, eddsaOpts } = _eddsa_legacy_opts_to_new(c); | ||
| const Point = edwards(CURVE, curveOpts); | ||
| const EDDSA = eddsa(Point, hash, eddsaOpts); | ||
| return _eddsa_new_output_to_legacy(c, EDDSA); | ||
| } |
@@ -12,2 +12,3 @@ /** | ||
| abytes, | ||
| asciiToBytes, | ||
| bytesToNumberBE, | ||
@@ -17,5 +18,4 @@ concatBytes, | ||
| isHash, | ||
| utf8ToBytes, | ||
| } from '../utils.ts'; | ||
| import type { AffinePoint, Group, GroupConstructor } from './curve.ts'; | ||
| import type { AffinePoint, PC_ANY, PC_F, PC_P } from './curve.ts'; | ||
| import { FpInvertBatch, mod, type IField } from './modular.ts'; | ||
@@ -45,4 +45,2 @@ | ||
| }; | ||
| // todo: remove | ||
| export type Opts = H2COpts; | ||
@@ -77,5 +75,8 @@ // Octet Stream to Integer. "spec" implementation of os2ip is 2.5x slower vs bytesToNumberBE. | ||
| // User can always use utf8 if they want, by passing Uint8Array. | ||
| // If string is passed, we treat it as ASCII: other formats are likely a mistake. | ||
| function normDST(DST: UnicodeOrBytes): Uint8Array { | ||
| if (!isBytes(DST) && typeof DST !== 'string') throw new Error('DST must be Uint8Array or string'); | ||
| return typeof DST === 'string' ? utf8ToBytes(DST) : DST; | ||
| if (!isBytes(DST) && typeof DST !== 'string') | ||
| throw new Error('DST must be Uint8Array or ascii string'); | ||
| return typeof DST === 'string' ? asciiToBytes(DST) : DST; | ||
| } | ||
@@ -97,3 +98,3 @@ | ||
| // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3 | ||
| if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST)); | ||
| if (DST.length > 255) DST = H(concatBytes(asciiToBytes('H2C-OVERSIZE-DST-'), DST)); | ||
| const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H; | ||
@@ -137,3 +138,3 @@ const ell = Math.ceil(lenInBytes / b_in_bytes); | ||
| const dkLen = Math.ceil((2 * k) / 8); | ||
| DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest(); | ||
| DST = H.create({ dkLen }).update(asciiToBytes('H2C-OVERSIZE-DST-')).update(DST).digest(); | ||
| } | ||
@@ -219,14 +220,2 @@ if (lenInBytes > 65535 || DST.length > 255) | ||
| /** Point interface, which curves must implement to work correctly with the module. */ | ||
| export interface H2CPoint<T> extends Group<H2CPoint<T>> { | ||
| add(rhs: H2CPoint<T>): H2CPoint<T>; | ||
| toAffine(iz?: bigint): AffinePoint<T>; | ||
| clearCofactor(): H2CPoint<T>; | ||
| assertValidity(): void; | ||
| } | ||
| export interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> { | ||
| fromAffine(ap: AffinePoint<T>): H2CPoint<T>; | ||
| } | ||
| export type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>; | ||
@@ -237,9 +226,7 @@ | ||
| export type htfBasicOpts = { DST: UnicodeOrBytes }; | ||
| export type H2CMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>; | ||
| export type H2CMethod<P> = (msg: Uint8Array, options?: htfBasicOpts) => P; | ||
| // TODO: remove | ||
| export type HTFMethod<T> = H2CMethod<T>; | ||
| export type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>; | ||
| export type H2CHasherBase<T> = { | ||
| hashToCurve: H2CMethod<T>; | ||
| hashToScalar: (msg: Uint8Array, options: htfBasicOpts) => bigint; | ||
| export type H2CHasherBase<P> = { | ||
| hashToCurve: H2CMethod<P>; | ||
| hashToScalar: (msg: Uint8Array, options?: htfBasicOpts) => bigint; | ||
| }; | ||
@@ -253,27 +240,26 @@ /** | ||
| */ | ||
| export type H2CHasher<T> = H2CHasherBase<T> & { | ||
| encodeToCurve: H2CMethod<T>; | ||
| mapToCurve: MapMethod<T>; | ||
| export type H2CHasher<PC extends PC_ANY> = H2CHasherBase<PC_P<PC>> & { | ||
| Point: PC; | ||
| encodeToCurve: H2CMethod<PC_P<PC>>; | ||
| mapToCurve: MapToCurve<PC_F<PC>>; | ||
| defaults: H2COpts & { encodeDST?: UnicodeOrBytes }; | ||
| }; | ||
| // TODO: remove | ||
| export type Hasher<T> = H2CHasher<T>; | ||
| export const _DST_scalar: Uint8Array = utf8ToBytes('HashToScalar-'); | ||
| export const _DST_scalar: Uint8Array = asciiToBytes('HashToScalar-'); | ||
| /** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */ | ||
| export function createHasher<T>( | ||
| Point: H2CPointConstructor<T>, | ||
| mapToCurve: MapToCurve<T>, | ||
| export function createHasher<PC extends PC_ANY>( | ||
| Point: PC, | ||
| mapToCurve: MapToCurve<PC_F<PC>>, | ||
| defaults: H2COpts & { encodeDST?: UnicodeOrBytes } | ||
| ): H2CHasher<T> { | ||
| ): H2CHasher<PC> { | ||
| if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined'); | ||
| function map(num: bigint[]) { | ||
| return Point.fromAffine(mapToCurve(num)); | ||
| function map(num: bigint[]): PC_P<PC> { | ||
| return Point.fromAffine(mapToCurve(num)) as PC_P<PC>; | ||
| } | ||
| function clear(initial: H2CPoint<T>) { | ||
| function clear(initial: PC_P<PC>): PC_P<PC> { | ||
| const P = initial.clearCofactor(); | ||
| if (P.equals(Point.ZERO)) return Point.ZERO; // zero will throw in assert | ||
| if (P.equals(Point.ZERO)) return Point.ZERO as PC_P<PC>; // zero will throw in assert | ||
| P.assertValidity(); | ||
| return P; | ||
| return P as PC_P<PC>; | ||
| } | ||
@@ -283,4 +269,5 @@ | ||
| defaults, | ||
| Point, | ||
| hashToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> { | ||
| hashToCurve(msg: Uint8Array, options?: htfBasicOpts): PC_P<PC> { | ||
| const opts = Object.assign({}, defaults, options); | ||
@@ -290,5 +277,5 @@ const u = hash_to_field(msg, 2, opts); | ||
| const u1 = map(u[1]); | ||
| return clear(u0.add(u1)); | ||
| return clear(u0.add(u1) as PC_P<PC>); | ||
| }, | ||
| encodeToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> { | ||
| encodeToCurve(msg: Uint8Array, options?: htfBasicOpts): PC_P<PC> { | ||
| const optsDst = defaults.encodeDST ? { DST: defaults.encodeDST } : {}; | ||
@@ -301,3 +288,3 @@ const opts = Object.assign({}, defaults, optsDst, options); | ||
| /** See {@link H2CHasher} */ | ||
| mapToCurve(scalars: bigint[]): H2CPoint<T> { | ||
| mapToCurve(scalars: bigint[]): PC_P<PC> { | ||
| if (!Array.isArray(scalars)) throw new Error('expected array of bigints'); | ||
@@ -304,0 +291,0 @@ for (const i of scalars) |
+144
-130
@@ -10,7 +10,6 @@ /** | ||
| _validateObject, | ||
| abytes, | ||
| anumber, | ||
| bitMask, | ||
| bytesToNumberBE, | ||
| bytesToNumberLE, | ||
| ensureBytes, | ||
| numberToBytesBE, | ||
@@ -21,3 +20,3 @@ numberToBytesLE, | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3); | ||
| const _0n = BigInt(0), _1n = /* @__PURE__ */ BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3); | ||
| // prettier-ignore | ||
@@ -232,6 +231,5 @@ const _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _7n = /* @__PURE__ */ BigInt(7); | ||
| ORDER: bigint; | ||
| isLE: boolean; | ||
| BYTES: number; | ||
| BITS: number; | ||
| MASK: bigint; | ||
| isLE: boolean; | ||
| ZERO: T; | ||
@@ -266,3 +264,2 @@ ONE: T; | ||
| isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2 | ||
| allowedLengths?: number[]; | ||
| // legendre?(num: T): T; | ||
@@ -284,3 +281,2 @@ invertBatch: (lst: T[]) => T[]; | ||
| ORDER: 'bigint', | ||
| MASK: 'bigint', | ||
| BYTES: 'number', | ||
@@ -389,8 +385,143 @@ BITS: 'number', | ||
| type FieldOpts = Partial<{ | ||
| sqrt: SqrtFn; | ||
| isLE: boolean; | ||
| BITS: number; | ||
| sqrt: SqrtFn; | ||
| allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes) | ||
| modFromBytes: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n | ||
| allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes) | ||
| }>; | ||
| class _Field implements IField<bigint> { | ||
| readonly ORDER: bigint; | ||
| readonly BITS: number; | ||
| readonly BYTES: number; | ||
| readonly isLE: boolean; | ||
| readonly ZERO = _0n; | ||
| readonly ONE = _1n; | ||
| readonly _lengths?: number[]; | ||
| private _sqrt: ReturnType<typeof FpSqrt> | undefined; // cached sqrt | ||
| private readonly _mod?: boolean; | ||
| constructor(ORDER: bigint, opts: FieldOpts = {}) { | ||
| if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER); | ||
| let _nbitLength: number | undefined = undefined; | ||
| this.isLE = false; | ||
| if (opts != null && typeof opts === 'object') { | ||
| if (typeof opts.BITS === 'number') _nbitLength = opts.BITS; | ||
| if (typeof opts.sqrt === 'function') this.sqrt = opts.sqrt; | ||
| if (typeof opts.isLE === 'boolean') this.isLE = opts.isLE; | ||
| if (opts.allowedLengths) this._lengths = opts.allowedLengths?.slice(); | ||
| if (typeof opts.modFromBytes === 'boolean') this._mod = opts.modFromBytes; | ||
| } | ||
| const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength); | ||
| if (nByteLength > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes'); | ||
| this.ORDER = ORDER; | ||
| this.BITS = nBitLength; | ||
| this.BYTES = nByteLength; | ||
| this._sqrt = undefined; | ||
| Object.preventExtensions(this); | ||
| } | ||
| create(num: bigint) { | ||
| return mod(num, this.ORDER); | ||
| } | ||
| isValid(num: bigint) { | ||
| if (typeof num !== 'bigint') | ||
| throw new Error('invalid field element: expected bigint, got ' + typeof num); | ||
| return _0n <= num && num < this.ORDER; // 0 is valid element, but it's not invertible | ||
| } | ||
| is0(num: bigint) { | ||
| return num === _0n; | ||
| } | ||
| // is valid and invertible | ||
| isValidNot0(num: bigint) { | ||
| return !this.is0(num) && this.isValid(num); | ||
| } | ||
| isOdd(num: bigint) { | ||
| return (num & _1n) === _1n; | ||
| } | ||
| neg(num: bigint) { | ||
| return mod(-num, this.ORDER); | ||
| } | ||
| eql(lhs: bigint, rhs: bigint) { | ||
| return lhs === rhs; | ||
| } | ||
| sqr(num: bigint) { | ||
| return mod(num * num, this.ORDER); | ||
| } | ||
| add(lhs: bigint, rhs: bigint) { | ||
| return mod(lhs + rhs, this.ORDER); | ||
| } | ||
| sub(lhs: bigint, rhs: bigint) { | ||
| return mod(lhs - rhs, this.ORDER); | ||
| } | ||
| mul(lhs: bigint, rhs: bigint) { | ||
| return mod(lhs * rhs, this.ORDER); | ||
| } | ||
| pow(num: bigint, power: bigint): bigint { | ||
| return FpPow(this, num, power); | ||
| } | ||
| div(lhs: bigint, rhs: bigint) { | ||
| return mod(lhs * invert(rhs, this.ORDER), this.ORDER); | ||
| } | ||
| // Same as above, but doesn't normalize | ||
| sqrN(num: bigint) { | ||
| return num * num; | ||
| } | ||
| addN(lhs: bigint, rhs: bigint) { | ||
| return lhs + rhs; | ||
| } | ||
| subN(lhs: bigint, rhs: bigint) { | ||
| return lhs - rhs; | ||
| } | ||
| mulN(lhs: bigint, rhs: bigint) { | ||
| return lhs * rhs; | ||
| } | ||
| inv(num: bigint) { | ||
| return invert(num, this.ORDER); | ||
| } | ||
| sqrt(num: bigint): bigint { | ||
| // Caching _sqrt speeds up sqrt9mod16 by 5x and tonneli-shanks by 10% | ||
| if (!this._sqrt) this._sqrt = FpSqrt(this.ORDER); | ||
| return this._sqrt(this, num); | ||
| } | ||
| toBytes(num: bigint) { | ||
| return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE(num, this.BYTES); | ||
| } | ||
| fromBytes(bytes: Uint8Array, skipValidation = false) { | ||
| abytes(bytes); | ||
| const { _lengths: allowedLengths, BYTES, isLE, ORDER, _mod: modFromBytes } = this; | ||
| if (allowedLengths) { | ||
| if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) { | ||
| throw new Error( | ||
| 'Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length | ||
| ); | ||
| } | ||
| const padded = new Uint8Array(BYTES); | ||
| // isLE add 0 to right, !isLE to the left. | ||
| padded.set(bytes, isLE ? 0 : padded.length - bytes.length); | ||
| bytes = padded; | ||
| } | ||
| if (bytes.length !== BYTES) | ||
| throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length); | ||
| let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes); | ||
| if (modFromBytes) scalar = mod(scalar, ORDER); | ||
| if (!skipValidation) | ||
| if (!this.isValid(scalar)) | ||
| throw new Error('invalid field element: outside of range 0..ORDER'); | ||
| // NOTE: we don't validate scalar here, please use isValid. This done such way because some | ||
| // protocol may allow non-reduced scalar that reduced later or changed some other way. | ||
| return scalar; | ||
| } | ||
| // TODO: we don't need it here, move out to separate fn | ||
| invertBatch(lst: bigint[]): bigint[] { | ||
| return FpInvertBatch(this, lst); | ||
| } | ||
| // We can't move this out because Fp6, Fp12 implement it | ||
| // and it's unclear what to return in there. | ||
| cmov(a: bigint, b: bigint, condition: boolean) { | ||
| return condition ? b : a; | ||
| } | ||
| } | ||
| /** | ||
@@ -415,100 +546,4 @@ * Creates a finite field. Major performance optimizations: | ||
| */ | ||
| export function Field( | ||
| ORDER: bigint, | ||
| bitLenOrOpts?: number | FieldOpts, // TODO: use opts only in v2? | ||
| isLE = false, | ||
| opts: { sqrt?: SqrtFn } = {} | ||
| ): Readonly<FpField> { | ||
| if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER); | ||
| let _nbitLength: number | undefined = undefined; | ||
| let _sqrt: SqrtFn | undefined = undefined; | ||
| let modFromBytes: boolean = false; | ||
| let allowedLengths: undefined | readonly number[] = undefined; | ||
| if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) { | ||
| if (opts.sqrt || isLE) throw new Error('cannot specify opts in two arguments'); | ||
| const _opts = bitLenOrOpts; | ||
| if (_opts.BITS) _nbitLength = _opts.BITS; | ||
| if (_opts.sqrt) _sqrt = _opts.sqrt; | ||
| if (typeof _opts.isLE === 'boolean') isLE = _opts.isLE; | ||
| if (typeof _opts.modFromBytes === 'boolean') modFromBytes = _opts.modFromBytes; | ||
| allowedLengths = _opts.allowedLengths; | ||
| } else { | ||
| if (typeof bitLenOrOpts === 'number') _nbitLength = bitLenOrOpts; | ||
| if (opts.sqrt) _sqrt = opts.sqrt; | ||
| } | ||
| const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength); | ||
| if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes'); | ||
| let sqrtP: ReturnType<typeof FpSqrt>; // cached sqrtP | ||
| const f: Readonly<FpField> = Object.freeze({ | ||
| ORDER, | ||
| isLE, | ||
| BITS, | ||
| BYTES, | ||
| MASK: bitMask(BITS), | ||
| ZERO: _0n, | ||
| ONE: _1n, | ||
| allowedLengths: allowedLengths, | ||
| create: (num) => mod(num, ORDER), | ||
| isValid: (num) => { | ||
| if (typeof num !== 'bigint') | ||
| throw new Error('invalid field element: expected bigint, got ' + typeof num); | ||
| return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible | ||
| }, | ||
| is0: (num) => num === _0n, | ||
| // is valid and invertible | ||
| isValidNot0: (num: bigint) => !f.is0(num) && f.isValid(num), | ||
| isOdd: (num) => (num & _1n) === _1n, | ||
| neg: (num) => mod(-num, ORDER), | ||
| eql: (lhs, rhs) => lhs === rhs, | ||
| sqr: (num) => mod(num * num, ORDER), | ||
| add: (lhs, rhs) => mod(lhs + rhs, ORDER), | ||
| sub: (lhs, rhs) => mod(lhs - rhs, ORDER), | ||
| mul: (lhs, rhs) => mod(lhs * rhs, ORDER), | ||
| pow: (num, power) => FpPow(f, num, power), | ||
| div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER), | ||
| // Same as above, but doesn't normalize | ||
| sqrN: (num) => num * num, | ||
| addN: (lhs, rhs) => lhs + rhs, | ||
| subN: (lhs, rhs) => lhs - rhs, | ||
| mulN: (lhs, rhs) => lhs * rhs, | ||
| inv: (num) => invert(num, ORDER), | ||
| sqrt: | ||
| _sqrt || | ||
| ((n) => { | ||
| if (!sqrtP) sqrtP = FpSqrt(ORDER); | ||
| return sqrtP(f, n); | ||
| }), | ||
| toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)), | ||
| fromBytes: (bytes, skipValidation = true) => { | ||
| if (allowedLengths) { | ||
| if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) { | ||
| throw new Error( | ||
| 'Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length | ||
| ); | ||
| } | ||
| const padded = new Uint8Array(BYTES); | ||
| // isLE add 0 to right, !isLE to the left. | ||
| padded.set(bytes, isLE ? 0 : padded.length - bytes.length); | ||
| bytes = padded; | ||
| } | ||
| if (bytes.length !== BYTES) | ||
| throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length); | ||
| let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes); | ||
| if (modFromBytes) scalar = mod(scalar, ORDER); | ||
| if (!skipValidation) | ||
| if (!f.isValid(scalar)) throw new Error('invalid field element: outside of range 0..ORDER'); | ||
| // NOTE: we don't validate scalar here, please use isValid. This done such way because some | ||
| // protocol may allow non-reduced scalar that reduced later or changed some other way. | ||
| return scalar; | ||
| }, | ||
| // TODO: we don't need it here, move out to separate fn | ||
| invertBatch: (lst) => FpInvertBatch(f, lst), | ||
| // We can't move this out because Fp6, Fp12 implement it | ||
| // and it's unclear what to return in there. | ||
| cmov: (a, b, c) => (c ? b : a), | ||
| } as FpField); | ||
| return Object.freeze(f); | ||
| export function Field(ORDER: bigint, opts: FieldOpts = {}): Readonly<FpField> { | ||
| return new _Field(ORDER, opts); | ||
| } | ||
@@ -543,24 +578,2 @@ | ||
| /** | ||
| * "Constant-time" private key generation utility. | ||
| * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field). | ||
| * Which makes it slightly more biased, less secure. | ||
| * @deprecated use `mapKeyToField` instead | ||
| */ | ||
| export function hashToPrivateScalar( | ||
| hash: string | Uint8Array, | ||
| groupOrder: bigint, | ||
| isLE = false | ||
| ): bigint { | ||
| hash = ensureBytes('privateHash', hash); | ||
| const hashLen = hash.length; | ||
| const minLen = nLength(groupOrder).nByteLength + 8; | ||
| if (minLen < 24 || hashLen < minLen || hashLen > 1024) | ||
| throw new Error( | ||
| 'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen | ||
| ); | ||
| const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash); | ||
| return mod(num, groupOrder - _1n) + _1n; | ||
| } | ||
| /** | ||
| * Returns total number of bytes consumed by the field element. | ||
@@ -598,3 +611,3 @@ * For example, 32 bytes for usual 256-bit weierstrass curve. | ||
| * @param hash hash output from SHA3 or a similar function | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n) | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.Point.Fn.ORDER) | ||
| * @param isLE interpret hash bytes as LE num | ||
@@ -604,2 +617,3 @@ * @returns valid private scalar | ||
| export function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array { | ||
| abytes(key); | ||
| const len = key.length; | ||
@@ -606,0 +620,0 @@ const fieldLen = getFieldBytesLength(fieldOrder); |
@@ -13,5 +13,6 @@ /** | ||
| bytesToNumberLE, | ||
| ensureBytes, | ||
| copyBytes, | ||
| numberToBytesLE, | ||
| randomBytes, | ||
| type CryptoKeys, | ||
| } from '../utils.ts'; | ||
@@ -24,3 +25,2 @@ import type { CurveLengths } from './curve.ts'; | ||
| const _2n = BigInt(2); | ||
| type Hex = string | Uint8Array; | ||
@@ -36,10 +36,8 @@ export type CurveType = { | ||
| export type MontgomeryECDH = { | ||
| scalarMult: (scalar: Hex, u: Hex) => Uint8Array; | ||
| scalarMultBase: (scalar: Hex) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: Hex, publicKeyB: Hex) => Uint8Array; | ||
| getPublicKey: (secretKey: Hex) => Uint8Array; | ||
| scalarMult: (scalar: Uint8Array, u: Uint8Array) => Uint8Array; | ||
| scalarMultBase: (scalar: Uint8Array) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: Uint8Array, publicKeyB: Uint8Array) => Uint8Array; | ||
| getPublicKey: (secretKey: Uint8Array) => Uint8Array; | ||
| utils: { | ||
| randomSecretKey: () => Uint8Array; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: () => Uint8Array; | ||
| }; | ||
@@ -50,3 +48,2 @@ GuBytes: Uint8Array; | ||
| }; | ||
| export type CurveFn = MontgomeryECDH; | ||
@@ -89,4 +86,4 @@ function validateOpts(curve: CurveType) { | ||
| } | ||
| function decodeU(u: Hex): bigint { | ||
| const _u = ensureBytes('u coordinate', u, fieldLen); | ||
| function decodeU(u: Uint8Array): bigint { | ||
| const _u = copyBytes(abytes(u, fieldLen, 'uCoordinate')); | ||
| // RFC: When receiving such an array, implementations of X25519 | ||
@@ -101,6 +98,6 @@ // (but not X448) MUST mask the most significant bit in the final byte. | ||
| } | ||
| function decodeScalar(scalar: Hex): bigint { | ||
| return bytesToNumberLE(adjustScalarBytes(ensureBytes('scalar', scalar, fieldLen))); | ||
| function decodeScalar(scalar: Uint8Array): bigint { | ||
| return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, 'scalar')))); | ||
| } | ||
| function scalarMult(scalar: Hex, u: Hex): Uint8Array { | ||
| function scalarMult(scalar: Uint8Array, u: Uint8Array): Uint8Array { | ||
| const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar)); | ||
@@ -114,3 +111,3 @@ // Some public keys are useless, of low-order. Curve author doesn't think | ||
| // Computes public key from private. By doing scalar multiplication of base point. | ||
| function scalarMultBase(scalar: Hex): Uint8Array { | ||
| function scalarMultBase(scalar: Uint8Array): Uint8Array { | ||
| return scalarMult(scalar, GuBytes); | ||
@@ -180,3 +177,3 @@ } | ||
| const randomSecretKey = (seed = randomBytes_(fieldLen)) => { | ||
| abytes(seed, lengths.seed); | ||
| abytes(seed, lengths.seed, 'seed'); | ||
| return seed; | ||
@@ -192,6 +189,8 @@ }; | ||
| }; | ||
| return { | ||
| return Object.freeze({ | ||
| keygen, | ||
| getSharedSecret: (secretKey: Hex, publicKey: Hex) => scalarMult(secretKey, publicKey), | ||
| getPublicKey: (secretKey: Hex): Uint8Array => scalarMultBase(secretKey), | ||
| getSharedSecret: (secretKey: Uint8Array, publicKey: Uint8Array) => | ||
| scalarMult(secretKey, publicKey), | ||
| getPublicKey: (secretKey: Uint8Array): Uint8Array => scalarMultBase(secretKey), | ||
| scalarMult, | ||
@@ -202,3 +201,3 @@ scalarMultBase, | ||
| lengths, | ||
| }; | ||
| }) satisfies CryptoKeys; | ||
| } |
@@ -161,3 +161,2 @@ /** | ||
| readonly isLE: boolean; | ||
| readonly MASK = _1n; | ||
@@ -379,3 +378,2 @@ readonly ZERO: Fp2; | ||
| readonly isLE: boolean; | ||
| readonly MASK = _1n; | ||
@@ -604,3 +602,2 @@ readonly ZERO: Fp6; | ||
| readonly isLE: boolean; | ||
| readonly MASK = _1n; | ||
@@ -607,0 +604,0 @@ readonly ZERO: Fp12; |
+143
-138
@@ -81,3 +81,3 @@ /** | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { bls, type CurveFn } from './abstract/bls.ts'; | ||
| import { bls, type BlsCurvePairWithSignatures } from './abstract/bls.ts'; | ||
| import { Field, type IField } from './abstract/modular.ts'; | ||
@@ -91,5 +91,6 @@ import { | ||
| concatBytes, | ||
| ensureBytes, | ||
| copyBytes, | ||
| hexToBytes, | ||
| numberToBytesBE, | ||
| type Hex, | ||
| randomBytes, | ||
| } from './utils.ts'; | ||
@@ -102,2 +103,3 @@ // Types | ||
| mapToCurveSimpleSWU, | ||
| weierstrass, | ||
| type AffinePoint, | ||
@@ -152,5 +154,5 @@ type WeierstrassOpts, | ||
| // CURVE FIELDS | ||
| // r = z⁴ − z² + 1; CURVE.n from other curves | ||
| export const bls12_381_Fr: IField<bigint> = Field(bls12_381_CURVE_G1.n, { | ||
| modFromBytes: true, | ||
| isLE: true, | ||
| }); | ||
@@ -200,3 +202,3 @@ const { Fp, Fp2, Fp6, Fp12 } = tower12({ | ||
| */ | ||
| const htfDefaults = Object.freeze({ | ||
| const hasher_opts = Object.freeze({ | ||
| DST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_', | ||
@@ -249,4 +251,5 @@ encodeDST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_', | ||
| function parseMask(bytes: Uint8Array) { | ||
| // Copy, so we can remove mask data. It will be removed also later, when Fp.create will call modulo. | ||
| bytes = bytes.slice(); | ||
| // Copy, so we can remove mask data. | ||
| // It will be removed also later, when Fp.create will call modulo. | ||
| bytes = copyBytes(bytes); | ||
| const mask = bytes[0] & 0b1110_0000; | ||
@@ -331,4 +334,4 @@ const compressed = !!((mask >> 7) & 1); // compression bit (0b1000_0000) | ||
| function signatureG1FromBytes(hex: Hex): WeierstrassPoint<Fp> { | ||
| const { infinity, sort, value } = parseMask(ensureBytes('signatureHex', hex, 48)); | ||
| function signatureG1FromBytes(bytes: Uint8Array): WeierstrassPoint<Fp> { | ||
| const { infinity, sort, value } = parseMask(abytes(bytes, 48, 'signature')); | ||
| const P = Fp.ORDER; | ||
@@ -438,6 +441,6 @@ const Point = bls12_381.G1.Point; | ||
| function signatureG2FromBytes(hex: Hex) { | ||
| function signatureG2FromBytes(bytes: Uint8Array) { | ||
| const { ORDER: P } = Fp; | ||
| // TODO: Optimize, it's very slow because of sqrt. | ||
| const { infinity, sort, value } = parseMask(ensureBytes('signatureHex', hex)); | ||
| const { infinity, sort, value } = parseMask(abytes(bytes)); | ||
| const Point = bls12_381.G2.Point; | ||
@@ -471,2 +474,123 @@ const half = value.length / 2; | ||
| const signatureCoders = { | ||
| ShortSignature: { | ||
| fromBytes(bytes: Uint8Array) { | ||
| return signatureG1FromBytes(abytes(bytes)); | ||
| }, | ||
| fromHex(hex: string): WeierstrassPoint<Fp> { | ||
| return signatureG1FromBytes(hexToBytes(hex)); | ||
| }, | ||
| toBytes(point: WeierstrassPoint<Fp>) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toRawBytes(point: WeierstrassPoint<Fp>) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toHex(point: WeierstrassPoint<Fp>) { | ||
| return bytesToHex(signatureG1ToBytes(point)); | ||
| }, | ||
| }, | ||
| LongSignature: { | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp2> { | ||
| return signatureG2FromBytes(abytes(bytes)); | ||
| }, | ||
| fromHex(hex: string): WeierstrassPoint<Fp2> { | ||
| return signatureG2FromBytes(hexToBytes(hex)); | ||
| }, | ||
| toBytes(point: WeierstrassPoint<Fp2>) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toRawBytes(point: WeierstrassPoint<Fp2>) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toHex(point: WeierstrassPoint<Fp2>) { | ||
| return bytesToHex(signatureG2ToBytes(point)); | ||
| }, | ||
| }, | ||
| }; | ||
| const fields = { | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| Fr: bls12_381_Fr, | ||
| }; | ||
| const G1_Point = weierstrass(bls12_381_CURVE_G1, { | ||
| allowInfinityPoint: true, | ||
| Fn: bls12_381_Fr, | ||
| fromBytes: pointG1FromBytes, | ||
| toBytes: pointG1ToBytes, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| isTorsionFree: (c, point): boolean => { | ||
| // GLV endomorphism ψ(P) | ||
| const beta = BigInt( | ||
| '0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe' | ||
| ); | ||
| const phi = new c(Fp.mul(point.X, beta), point.Y, point.Z); | ||
| // TODO: unroll | ||
| const xP = point.multiplyUnsafe(BLS_X).negate(); // [x]P | ||
| const u2P = xP.multiplyUnsafe(BLS_X); // [u2]P | ||
| return u2P.equals(phi); | ||
| }, | ||
| // Clear cofactor of G1 | ||
| // https://eprint.iacr.org/2019/403 | ||
| clearCofactor: (_c, point) => { | ||
| // return this.multiplyUnsafe(CURVE.h); | ||
| return point.multiplyUnsafe(BLS_X).add(point); // x*P + P | ||
| }, | ||
| }); | ||
| const G2_Point = weierstrass(bls12_381_CURVE_G2, { | ||
| Fp: Fp2, | ||
| allowInfinityPoint: true, | ||
| Fn: bls12_381_Fr, | ||
| fromBytes: pointG2FromBytes, | ||
| toBytes: pointG2ToBytes, | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| // Older version: https://eprint.iacr.org/2019/814.pdf | ||
| isTorsionFree: (c, P): boolean => { | ||
| return P.multiplyUnsafe(BLS_X).negate().equals(G2psi(c, P)); // ψ(P) == [u](P) | ||
| }, | ||
| // clear_cofactor_bls12381_g2 from RFC 9380. | ||
| // https://eprint.iacr.org/2017/419.pdf | ||
| // prettier-ignore | ||
| clearCofactor: (c, P) => { | ||
| const x = BLS_X; | ||
| let t1 = P.multiplyUnsafe(x).negate(); // [-x]P | ||
| let t2 = G2psi(c, P); // Ψ(P) | ||
| let t3 = P.double(); // 2P | ||
| t3 = G2psi2(c, t3); // Ψ²(2P) | ||
| t3 = t3.subtract(t2); // Ψ²(2P) - Ψ(P) | ||
| t2 = t1.add(t2); // [-x]P + Ψ(P) | ||
| t2 = t2.multiplyUnsafe(x).negate(); // [x²]P - [x]Ψ(P) | ||
| t3 = t3.add(t2); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) | ||
| t3 = t3.subtract(t1); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P | ||
| const Q = t3.subtract(P); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P - 1P | ||
| return Q; // [x²-x-1]P + [x-1]Ψ(P) + Ψ²(2P) | ||
| }, | ||
| }); | ||
| const bls12_hasher_opts = { | ||
| mapToG1: mapToG1, | ||
| mapToG2: mapToG2, | ||
| hasherOpts: hasher_opts, | ||
| hasherOptsG1: { ...hasher_opts, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' }, | ||
| hasherOptsG2: { ...hasher_opts }, | ||
| }; | ||
| const bls12_params = { | ||
| ateLoopSize: BLS_X, // The BLS parameter x for BLS12-381 | ||
| xNegative: true, | ||
| twistType: 'multiplicative' as const, | ||
| randomBytes: randomBytes, | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-clearing-the-cofactor | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-cofactor-clearing-for-bls12 | ||
| // G2hEff: BigInt( | ||
| // '0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551' | ||
| // ), | ||
| }; | ||
| /** | ||
@@ -483,129 +607,10 @@ * bls12-381 pairing-friendly curve. | ||
| */ | ||
| export const bls12_381: CurveFn = bls({ | ||
| // Fields | ||
| fields: { | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| Fr: bls12_381_Fr, | ||
| }, | ||
| // G1: y² = x³ + 4 | ||
| G1: { | ||
| ...bls12_381_CURVE_G1, | ||
| Fp, | ||
| htfDefaults: { ...htfDefaults, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| isTorsionFree: (c, point): boolean => { | ||
| // GLV endomorphism ψ(P) | ||
| const beta = BigInt( | ||
| '0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe' | ||
| ); | ||
| const phi = new c(Fp.mul(point.X, beta), point.Y, point.Z); | ||
| // TODO: unroll | ||
| const xP = point.multiplyUnsafe(BLS_X).negate(); // [x]P | ||
| const u2P = xP.multiplyUnsafe(BLS_X); // [u2]P | ||
| return u2P.equals(phi); | ||
| }, | ||
| // Clear cofactor of G1 | ||
| // https://eprint.iacr.org/2019/403 | ||
| clearCofactor: (_c, point) => { | ||
| // return this.multiplyUnsafe(CURVE.h); | ||
| return point.multiplyUnsafe(BLS_X).add(point); // x*P + P | ||
| }, | ||
| mapToCurve: mapToG1, | ||
| fromBytes: pointG1FromBytes, | ||
| toBytes: pointG1ToBytes, | ||
| ShortSignature: { | ||
| fromBytes(bytes: Uint8Array) { | ||
| abytes(bytes); | ||
| return signatureG1FromBytes(bytes); | ||
| }, | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp> { | ||
| return signatureG1FromBytes(hex); | ||
| }, | ||
| toBytes(point: WeierstrassPoint<Fp>) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toRawBytes(point: WeierstrassPoint<Fp>) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toHex(point: WeierstrassPoint<Fp>) { | ||
| return bytesToHex(signatureG1ToBytes(point)); | ||
| }, | ||
| }, | ||
| }, | ||
| G2: { | ||
| ...bls12_381_CURVE_G2, | ||
| Fp: Fp2, | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-clearing-the-cofactor | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-cofactor-clearing-for-bls12 | ||
| hEff: BigInt( | ||
| '0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551' | ||
| ), | ||
| htfDefaults: { ...htfDefaults }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| mapToCurve: mapToG2, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| // Older version: https://eprint.iacr.org/2019/814.pdf | ||
| isTorsionFree: (c, P): boolean => { | ||
| return P.multiplyUnsafe(BLS_X).negate().equals(G2psi(c, P)); // ψ(P) == [u](P) | ||
| }, | ||
| // Maps the point into the prime-order subgroup G2. | ||
| // clear_cofactor_bls12381_g2 from RFC 9380. | ||
| // https://eprint.iacr.org/2017/419.pdf | ||
| // prettier-ignore | ||
| clearCofactor: (c, P) => { | ||
| const x = BLS_X; | ||
| let t1 = P.multiplyUnsafe(x).negate(); // [-x]P | ||
| let t2 = G2psi(c, P); // Ψ(P) | ||
| let t3 = P.double(); // 2P | ||
| t3 = G2psi2(c, t3); // Ψ²(2P) | ||
| t3 = t3.subtract(t2); // Ψ²(2P) - Ψ(P) | ||
| t2 = t1.add(t2); // [-x]P + Ψ(P) | ||
| t2 = t2.multiplyUnsafe(x).negate(); // [x²]P - [x]Ψ(P) | ||
| t3 = t3.add(t2); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) | ||
| t3 = t3.subtract(t1); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P | ||
| const Q = t3.subtract(P); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P - 1P | ||
| return Q; // [x²-x-1]P + [x-1]Ψ(P) + Ψ²(2P) | ||
| }, | ||
| fromBytes: pointG2FromBytes, | ||
| toBytes: pointG2ToBytes, | ||
| Signature: { | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp2> { | ||
| abytes(bytes); | ||
| return signatureG2FromBytes(bytes); | ||
| }, | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp2> { | ||
| return signatureG2FromBytes(hex); | ||
| }, | ||
| toBytes(point: WeierstrassPoint<Fp2>) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toRawBytes(point: WeierstrassPoint<Fp2>) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toHex(point: WeierstrassPoint<Fp2>) { | ||
| return bytesToHex(signatureG2ToBytes(point)); | ||
| }, | ||
| }, | ||
| }, | ||
| params: { | ||
| ateLoopSize: BLS_X, // The BLS parameter x for BLS12-381 | ||
| r: bls12_381_CURVE_G1.n, // order; z⁴ − z² + 1; CURVE.n from other curves | ||
| xNegative: true, | ||
| twistType: 'multiplicative', | ||
| }, | ||
| htfDefaults, | ||
| hash: sha256, | ||
| }); | ||
| export const bls12_381: BlsCurvePairWithSignatures = bls( | ||
| fields, | ||
| G1_Point, | ||
| G2_Point, | ||
| bls12_params, | ||
| bls12_hasher_opts, | ||
| signatureCoders | ||
| ); | ||
@@ -612,0 +617,0 @@ // 3-isogeny map from E' to E https://www.rfc-editor.org/rfc/rfc9380#appendix-E.3 |
+65
-89
@@ -57,6 +57,5 @@ /** | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { | ||
| bls, | ||
| type CurveFn as BLSCurveFn, | ||
| blsBasic, | ||
| type BLSCurvePair, | ||
| type PostPrecomputeFn, | ||
@@ -68,4 +67,4 @@ type PostPrecomputePointAddFn, | ||
| import { psiFrobenius, tower12 } from './abstract/tower.ts'; | ||
| import { type CurveFn, weierstrass, type WeierstrassOpts } from './abstract/weierstrass.ts'; | ||
| import { bitLen, notImplemented } from './utils.ts'; | ||
| import { weierstrass, type WeierstrassOpts } from './abstract/weierstrass.ts'; | ||
| import { bitLen } from './utils.ts'; | ||
| // prettier-ignore | ||
@@ -127,20 +126,2 @@ const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| /* | ||
| No hashToCurve for now (and signatures): | ||
| - RFC 9380 doesn't mention bn254 and doesn't provide test vectors | ||
| - Overall seems like nobody is using BLS signatures on top of bn254 | ||
| - Seems like it can utilize SVDW, which is not implemented yet | ||
| */ | ||
| const htfDefaults = Object.freeze({ | ||
| // DST: a domain separation tag defined in section 2.2.5 | ||
| DST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| p: Fp.ORDER, | ||
| m: 2, | ||
| k: 128, | ||
| expand: 'xmd', | ||
| hash: sha256, | ||
| }); | ||
| export const _postPrecompute: PostPrecomputeFn = ( | ||
@@ -177,2 +158,61 @@ Rx: Fp2, | ||
| const fields = { Fp, Fp2, Fp6, Fp12, Fr: bn254_Fr }; | ||
| const bn254_G1 = weierstrass(bn254_G1_CURVE, { | ||
| Fp, | ||
| Fn: bn254_Fr, | ||
| allowInfinityPoint: true, | ||
| }); | ||
| const bn254_G2 = weierstrass(bn254_G2_CURVE, { | ||
| Fp: Fp2, | ||
| Fn: bn254_Fr, | ||
| allowInfinityPoint: true, | ||
| isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P | ||
| }); | ||
| /* | ||
| No hashToCurve for now (and signatures): | ||
| - RFC 9380 doesn't mention bn254 and doesn't provide test vectors | ||
| - Overall seems like nobody is using BLS signatures on top of bn254 | ||
| - Seems like it can utilize SVDW, which is not implemented yet | ||
| */ | ||
| // const htfDefaults = Object.freeze({ | ||
| // // DST: a domain separation tag defined in section 2.2.5 | ||
| // DST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| // encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| // p: Fp.ORDER, | ||
| // m: 2, | ||
| // k: 128, | ||
| // expand: 'xmd', | ||
| // hash: sha256, | ||
| // }); | ||
| // const hasherOpts = { | ||
| // { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' } | ||
| // }; | ||
| const bn254_params = { | ||
| ateLoopSize: BN_X * _6n + _2n, | ||
| r: bn254_Fr.ORDER, | ||
| xNegative: false, | ||
| twistType: 'divisive' as const, | ||
| postPrecompute: _postPrecompute, | ||
| }; | ||
| // const bn254_hasher = { | ||
| // hasherOpts: htfDefaults, | ||
| // hasherOptsG1: { m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' }, | ||
| // hasherOptsG2: htfDefaults | ||
| // }; | ||
| // G2_heff hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'), | ||
| // fromBytes: notImplemented, | ||
| // toBytes: notImplemented, | ||
| // mapToCurve: notImplemented, | ||
| // fromBytes: notImplemented, | ||
| // toBytes: notImplemented, | ||
| // ShortSignature: { | ||
| // fromBytes: notImplemented, | ||
| // fromHex: notImplemented, | ||
| // toBytes: notImplemented, | ||
| // toRawBytes: notImplemented, | ||
| // toHex: notImplemented, | ||
| // }, | ||
| /** | ||
@@ -182,67 +222,3 @@ * bn254 (a.k.a. alt_bn128) pairing-friendly curve. | ||
| */ | ||
| export const bn254: BLSCurveFn = bls({ | ||
| // Fields | ||
| fields: { Fp, Fp2, Fp6, Fp12, Fr: bn254_Fr }, | ||
| G1: { | ||
| ...bn254_G1_CURVE, | ||
| Fp, | ||
| htfDefaults: { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| mapToCurve: notImplemented, | ||
| fromBytes: notImplemented, | ||
| toBytes: notImplemented, | ||
| ShortSignature: { | ||
| fromBytes: notImplemented, | ||
| fromHex: notImplemented, | ||
| toBytes: notImplemented, | ||
| toRawBytes: notImplemented, | ||
| toHex: notImplemented, | ||
| }, | ||
| }, | ||
| G2: { | ||
| ...bn254_G2_CURVE, | ||
| Fp: Fp2, | ||
| hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'), | ||
| htfDefaults: { ...htfDefaults }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P | ||
| mapToCurve: notImplemented, | ||
| fromBytes: notImplemented, | ||
| toBytes: notImplemented, | ||
| Signature: { | ||
| fromBytes: notImplemented, | ||
| fromHex: notImplemented, | ||
| toBytes: notImplemented, | ||
| toRawBytes: notImplemented, | ||
| toHex: notImplemented, | ||
| }, | ||
| }, | ||
| params: { | ||
| ateLoopSize: BN_X * _6n + _2n, | ||
| r: bn254_Fr.ORDER, | ||
| xNegative: false, | ||
| twistType: 'divisive', | ||
| }, | ||
| htfDefaults, | ||
| hash: sha256, | ||
| postPrecompute: _postPrecompute, | ||
| }); | ||
| /** | ||
| * bn254 weierstrass curve with ECDSA. | ||
| * This is very rare and probably not used anywhere. | ||
| * Instead, you should use G1 / G2, defined above. | ||
| * @deprecated | ||
| */ | ||
| export const bn254_weierstrass: CurveFn = weierstrass({ | ||
| a: BigInt(0), | ||
| b: BigInt(3), | ||
| Fp, | ||
| n: BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'), | ||
| Gx: BigInt(1), | ||
| Gy: BigInt(2), | ||
| h: BigInt(1), | ||
| hash: sha256, | ||
| }); | ||
| // bn254_hasher | ||
| export const bn254: BLSCurvePair = blsBasic(fields, bn254_G1, bn254_G2, bn254_params); |
+52
-104
@@ -10,10 +10,13 @@ /** | ||
| import { sha512 } from '@noble/hashes/sha2.js'; | ||
| import { abytes, concatBytes, utf8ToBytes } from '@noble/hashes/utils.js'; | ||
| import { pippenger, type AffinePoint } from './abstract/curve.ts'; | ||
| import { abytes, concatBytes, hexToBytes } from '@noble/hashes/utils.js'; | ||
| import { type AffinePoint } from './abstract/curve.ts'; | ||
| import { | ||
| eddsa, | ||
| edwards, | ||
| PrimeEdwardsPoint, | ||
| twistedEdwards, | ||
| type CurveFn, | ||
| type EdDSA, | ||
| type EdDSAOpts, | ||
| type EdwardsOpts, | ||
| type EdwardsPoint, | ||
| type EdwardsPointCons, | ||
| } from './abstract/edwards.ts'; | ||
@@ -26,7 +29,5 @@ import { | ||
| type H2CHasherBase, | ||
| type H2CMethod, | ||
| type htfBasicOpts, | ||
| } from './abstract/hash-to-curve.ts'; | ||
| import { | ||
| Field, | ||
| FpInvertBatch, | ||
@@ -39,4 +40,5 @@ FpSqrtEven, | ||
| } from './abstract/modular.ts'; | ||
| import { montgomery, type MontgomeryECDH as XCurveFn } from './abstract/montgomery.ts'; | ||
| import { bytesToNumberLE, ensureBytes, equalBytes, type Hex } from './utils.ts'; | ||
| import { montgomery, type MontgomeryECDH } from './abstract/montgomery.ts'; | ||
| import { createORPF, type OPRF } from './abstract/oprf.ts'; | ||
| import { asciiToBytes, bytesToNumberLE, equalBytes } from './utils.ts'; | ||
@@ -48,7 +50,6 @@ // prettier-ignore | ||
| // P = 2n**255n-19n | ||
| // P = 2n**255n - 19n | ||
| const ed25519_CURVE_p = BigInt( | ||
| '0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed' | ||
| ); | ||
| // N = 2n**252n + 27742317777372353535851937790883648493n | ||
@@ -123,16 +124,21 @@ // a = Fp.create(BigInt(-1)) | ||
| const Fp = /* @__PURE__ */ (() => Field(ed25519_CURVE.p, { isLE: true }))(); | ||
| const Fn = /* @__PURE__ */ (() => Field(ed25519_CURVE.n, { isLE: true }))(); | ||
| const ed25519_Point = /* @__PURE__ */ edwards(ed25519_CURVE, { uvRatio }); | ||
| const Fp = /* @__PURE__ */ (() => ed25519_Point.Fp)(); | ||
| const Fn = /* @__PURE__ */ (() => ed25519_Point.Fn)(); | ||
| const ed25519Defaults = /* @__PURE__ */ (() => ({ | ||
| ...ed25519_CURVE, | ||
| Fp, | ||
| hash: sha512, | ||
| adjustScalarBytes, | ||
| // dom2 | ||
| // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3. | ||
| // Constant-time, u/√v | ||
| uvRatio, | ||
| }))(); | ||
| const ed25519_eddsa_opts = { adjustScalarBytes }; | ||
| function ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) { | ||
| if (ctx.length > 255) throw new Error('Context is too big'); | ||
| return concatBytes( | ||
| asciiToBytes('SigEd25519 no Ed25519 collisions'), | ||
| new Uint8Array([phflag ? 1 : 0, ctx.length]), | ||
| ctx, | ||
| data | ||
| ); | ||
| } | ||
| function _ed(opts: EdDSAOpts) { | ||
| return eddsa(ed25519_Point, sha512, Object.assign({}, ed25519_eddsa_opts, opts)); | ||
| } | ||
| /** | ||
@@ -148,29 +154,7 @@ * ed25519 curve with EdDSA signatures. | ||
| */ | ||
| export const ed25519: CurveFn = /* @__PURE__ */ (() => twistedEdwards(ed25519Defaults))(); | ||
| function ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) { | ||
| if (ctx.length > 255) throw new Error('Context is too big'); | ||
| return concatBytes( | ||
| utf8ToBytes('SigEd25519 no Ed25519 collisions'), | ||
| new Uint8Array([phflag ? 1 : 0, ctx.length]), | ||
| ctx, | ||
| data | ||
| ); | ||
| } | ||
| export const ed25519: EdDSA = /* @__PURE__ */ _ed({}); | ||
| /** Context of ed25519. Uses context for domain separation. */ | ||
| export const ed25519ctx: CurveFn = /* @__PURE__ */ (() => | ||
| twistedEdwards({ | ||
| ...ed25519Defaults, | ||
| domain: ed25519_domain, | ||
| }))(); | ||
| export const ed25519ctx: EdDSA = /* @__PURE__ */ _ed({ domain: ed25519_domain }); | ||
| /** Prehashed version of ed25519. Accepts already-hashed messages in sign() and verify(). */ | ||
| export const ed25519ph: CurveFn = /* @__PURE__ */ (() => | ||
| twistedEdwards( | ||
| Object.assign({}, ed25519Defaults, { | ||
| domain: ed25519_domain, | ||
| prehash: sha512, | ||
| }) | ||
| ))(); | ||
| export const ed25519ph: EdDSA = /* @__PURE__ */ _ed({ domain: ed25519_domain, prehash: sha512 }); | ||
@@ -187,4 +171,4 @@ /** | ||
| */ | ||
| export const x25519: XCurveFn = /* @__PURE__ */ (() => { | ||
| const P = Fp.ORDER; | ||
| export const x25519: MontgomeryECDH = /* @__PURE__ */ (() => { | ||
| const P = ed25519_CURVE_p; | ||
| return montgomery({ | ||
@@ -275,5 +259,5 @@ P, | ||
| /** Hashing to ed25519 points / field. RFC 9380 methods. */ | ||
| export const ed25519_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() => | ||
| export const ed25519_hasher: H2CHasher<EdwardsPointCons> = /* @__PURE__ */ (() => | ||
| createHasher( | ||
| ed25519.Point, | ||
| ed25519_Point, | ||
| (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]), | ||
@@ -315,4 +299,3 @@ { | ||
| ); | ||
| const bytes255ToNumberLE = (bytes: Uint8Array) => | ||
| ed25519.Point.Fp.create(bytesToNumberLE(bytes) & MAX_255B); | ||
| const bytes255ToNumberLE = (bytes: Uint8Array) => Fp.create(bytesToNumberLE(bytes) & MAX_255B); | ||
@@ -345,3 +328,3 @@ type ExtendedPoint = EdwardsPoint; | ||
| const W3 = mod(_1n + s2); // 13 | ||
| return new ed25519.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| return new ed25519_Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| } | ||
@@ -372,6 +355,6 @@ | ||
| static BASE: _RistrettoPoint = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519.Point.BASE))(); | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519_Point.BASE))(); | ||
| // prettier-ignore | ||
| static ZERO: _RistrettoPoint = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519.Point.ZERO))(); | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519_Point.ZERO))(); | ||
| // prettier-ignore | ||
@@ -389,3 +372,3 @@ static Fp: IField<bigint> = | ||
| static fromAffine(ap: AffinePoint<bigint>): _RistrettoPoint { | ||
| return new _RistrettoPoint(ed25519.Point.fromAffine(ap)); | ||
| return new _RistrettoPoint(ed25519_Point.fromAffine(ap)); | ||
| } | ||
@@ -401,7 +384,2 @@ | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| static hashToCurve(hex: Hex): _RistrettoPoint { | ||
| return ristretto255_map(ensureBytes('ristrettoHash', hex, 64)); | ||
| } | ||
| static fromBytes(bytes: Uint8Array): _RistrettoPoint { | ||
@@ -432,3 +410,3 @@ abytes(bytes, 32); | ||
| throw new Error('invalid ristretto255 encoding 2'); | ||
| return new _RistrettoPoint(new ed25519.Point(x, y, _1n, t)); | ||
| return new _RistrettoPoint(new ed25519_Point(x, y, _1n, t)); | ||
| } | ||
@@ -441,10 +419,6 @@ | ||
| */ | ||
| static fromHex(hex: Hex): _RistrettoPoint { | ||
| return _RistrettoPoint.fromBytes(ensureBytes('ristrettoHex', hex, 32)); | ||
| static fromHex(hex: string): _RistrettoPoint { | ||
| return _RistrettoPoint.fromBytes(hexToBytes(hex)); | ||
| } | ||
| static msm(points: _RistrettoPoint[], scalars: bigint[]): _RistrettoPoint { | ||
| return pippenger(_RistrettoPoint, ed25519.Point.Fn, points, scalars); | ||
| } | ||
| /** | ||
@@ -507,3 +481,3 @@ * Encodes ristretto point to Uint8Array. | ||
| /** Hashing to ristretto255 points / field. RFC 9380 methods. */ | ||
| export const ristretto255_hasher: H2CHasherBase<bigint> = { | ||
| export const ristretto255_hasher: H2CHasherBase<_RistrettoPoint> = { | ||
| hashToCurve(msg: Uint8Array, options?: htfBasicOpts): _RistrettoPoint { | ||
@@ -520,9 +494,10 @@ const DST = options?.DST || 'ristretto255_XMD:SHA-512_R255MAP_RO_'; | ||
| // export const ristretto255_oprf: OPRF = createORPF({ | ||
| // name: 'ristretto255-SHA512', | ||
| // Point: RistrettoPoint, | ||
| // hash: sha512, | ||
| // hashToGroup: ristretto255_hasher.hashToCurve, | ||
| // hashToScalar: ristretto255_hasher.hashToScalar, | ||
| // }); | ||
| export const ristretto255_oprf: OPRF = /* @__PURE__ */ (() => | ||
| createORPF({ | ||
| name: 'ristretto255-SHA512', | ||
| Point: _RistrettoPoint, | ||
| hash: sha512, | ||
| hashToGroup: ristretto255_hasher.hashToCurve, | ||
| hashToScalar: ristretto255_hasher.hashToScalar, | ||
| }))(); | ||
@@ -545,28 +520,1 @@ /** | ||
| ]; | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array { | ||
| return ed25519.utils.toMontgomery(ensureBytes('pub', edwardsPub)); | ||
| } | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export const edwardsToMontgomery: typeof edwardsToMontgomeryPub = edwardsToMontgomeryPub; | ||
| /** @deprecated use `ed25519.utils.toMontgomeryPriv` */ | ||
| export function edwardsToMontgomeryPriv(edwardsPriv: Uint8Array): Uint8Array { | ||
| return ed25519.utils.toMontgomeryPriv(ensureBytes('pub', edwardsPriv)); | ||
| } | ||
| /** @deprecated use `ristretto255.Point` */ | ||
| export const RistrettoPoint: typeof _RistrettoPoint = _RistrettoPoint; | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => ed25519_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => | ||
| ed25519_hasher.encodeToCurve)(); | ||
| type RistHasher = (msg: Uint8Array, options: htfBasicOpts) => _RistrettoPoint; | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const hashToRistretto255: RistHasher = /* @__PURE__ */ (() => | ||
| ristretto255_hasher.hashToCurve as RistHasher)(); | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const hash_to_ristretto255: RistHasher = /* @__PURE__ */ (() => | ||
| ristretto255_hasher.hashToCurve as RistHasher)(); |
+32
-77
@@ -11,10 +11,9 @@ /** | ||
| import { shake256 } from '@noble/hashes/sha3.js'; | ||
| import { abytes, concatBytes, createHasher as wrapConstructor } from '@noble/hashes/utils.js'; | ||
| import { concatBytes, hexToBytes, createHasher as wrapConstructor } from '@noble/hashes/utils.js'; | ||
| import type { AffinePoint } from './abstract/curve.ts'; | ||
| import { pippenger } from './abstract/curve.ts'; | ||
| import { | ||
| eddsa, | ||
| edwards, | ||
| PrimeEdwardsPoint, | ||
| twistedEdwards, | ||
| type CurveFn, | ||
| type EdDSA, | ||
| type EdwardsOpts, | ||
@@ -30,8 +29,8 @@ type EdwardsPoint, | ||
| type H2CHasherBase, | ||
| type H2CMethod, | ||
| type htfBasicOpts, | ||
| } from './abstract/hash-to-curve.ts'; | ||
| import { Field, FpInvertBatch, isNegativeLE, mod, pow2, type IField } from './abstract/modular.ts'; | ||
| import { montgomery, type MontgomeryECDH as XCurveFn } from './abstract/montgomery.ts'; | ||
| import { asciiToBytes, bytesToNumberLE, ensureBytes, equalBytes, type Hex } from './utils.ts'; | ||
| import { montgomery, type MontgomeryECDH } from './abstract/montgomery.ts'; | ||
| import { createORPF, type OPRF } from './abstract/oprf.ts'; | ||
| import { abytes, asciiToBytes, bytesToNumberLE, equalBytes } from './utils.ts'; | ||
@@ -159,16 +158,5 @@ // edwards448 curve | ||
| } | ||
| // const ed448_eddsa_opts = { adjustScalarBytes, domain: dom4 }; | ||
| // const ed448_Point = edwards(ed448_CURVE, { Fp, Fn, uvRatio }); | ||
| const ed448_eddsa_opts = { adjustScalarBytes, domain: dom4 }; | ||
| const ed448_Point = edwards(ed448_CURVE, { Fp, Fn, uvRatio }); | ||
| const ED448_DEF = /* @__PURE__ */ (() => ({ | ||
| ...ed448_CURVE, | ||
| Fp, | ||
| Fn, | ||
| nBitLength: Fn.BITS, | ||
| hash: shake256_114, | ||
| adjustScalarBytes, | ||
| domain: dom4, | ||
| uvRatio, | ||
| }))(); | ||
| /** | ||
@@ -183,11 +171,10 @@ * ed448 EdDSA curve and methods. | ||
| */ | ||
| export const ed448: CurveFn = twistedEdwards(ED448_DEF); | ||
| export const ed448: EdDSA = eddsa(ed448_Point, shake256_114, ed448_eddsa_opts); | ||
| // There is no ed448ctx, since ed448 supports ctx by default | ||
| /** Prehashed version of ed448. Accepts already-hashed messages in sign() and verify(). */ | ||
| export const ed448ph: CurveFn = /* @__PURE__ */ (() => | ||
| twistedEdwards({ | ||
| ...ED448_DEF, | ||
| prehash: shake256_64, | ||
| }))(); | ||
| export const ed448ph: EdDSA = /* @__PURE__ */ eddsa(ed448_Point, shake256_114, { | ||
| ...ed448_eddsa_opts, | ||
| prehash: shake256_64, | ||
| }); | ||
@@ -206,3 +193,3 @@ /** | ||
| */ | ||
| export const x448: XCurveFn = /* @__PURE__ */ (() => { | ||
| export const x448: MontgomeryECDH = /* @__PURE__ */ (() => { | ||
| const P = ed448_CURVE.p; | ||
@@ -299,4 +286,4 @@ return montgomery({ | ||
| /** Hashing / encoding to ed448 points / field. RFC 9380 methods. */ | ||
| export const ed448_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() => | ||
| createHasher(ed448.Point, (scalars: bigint[]) => map_to_curve_elligator2_edwards448(scalars[0]), { | ||
| export const ed448_hasher: H2CHasher<EdwardsPointCons> = /* @__PURE__ */ (() => | ||
| createHasher(ed448_Point, (scalars: bigint[]) => map_to_curve_elligator2_edwards448(scalars[0]), { | ||
| DST: 'edwards448_XOF:SHAKE256_ELL2_RO_', | ||
@@ -357,3 +344,3 @@ encodeDST: 'edwards448_XOF:SHAKE256_ELL2_NU_', | ||
| const W3 = mod(v_prime * s * (r - _1n) * ONE_MINUS_TWO_D + sgn); // 11 | ||
| return new ed448.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| return new ed448_Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| } | ||
@@ -385,6 +372,6 @@ | ||
| static BASE: _DecafPoint = | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448.Point.BASE).multiplyUnsafe(_2n))(); | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448_Point.BASE).multiplyUnsafe(_2n))(); | ||
| // prettier-ignore | ||
| static ZERO: _DecafPoint = | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448.Point.ZERO))(); | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448_Point.ZERO))(); | ||
| // prettier-ignore | ||
@@ -402,3 +389,3 @@ static Fp: IField<bigint> = | ||
| static fromAffine(ap: AffinePoint<bigint>): _DecafPoint { | ||
| return new _DecafPoint(ed448.Point.fromAffine(ap)); | ||
| return new _DecafPoint(ed448_Point.fromAffine(ap)); | ||
| } | ||
@@ -414,7 +401,2 @@ | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| static hashToCurve(hex: Hex): _DecafPoint { | ||
| return decaf448_map(ensureBytes('decafHash', hex, 112)); | ||
| } | ||
| static fromBytes(bytes: Uint8Array): _DecafPoint { | ||
@@ -429,3 +411,2 @@ abytes(bytes, 56); | ||
| // 2. Check that s is non-negative, or else abort | ||
| if (!equalBytes(Fn448.toBytes(s), bytes) || isNegativeLE(s, P)) | ||
@@ -449,3 +430,3 @@ throw new Error('invalid decaf448 encoding 1'); | ||
| if (!isValid) throw new Error('invalid decaf448 encoding 2'); | ||
| return new _DecafPoint(new ed448.Point(x, y, _1n, t)); | ||
| return new _DecafPoint(new ed448_Point(x, y, _1n, t)); | ||
| } | ||
@@ -458,11 +439,6 @@ | ||
| */ | ||
| static fromHex(hex: Hex): _DecafPoint { | ||
| return _DecafPoint.fromBytes(ensureBytes('decafHex', hex, 56)); | ||
| static fromHex(hex: string): _DecafPoint { | ||
| return _DecafPoint.fromBytes(hexToBytes(hex)); | ||
| } | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| static msm(points: _DecafPoint[], scalars: bigint[]): _DecafPoint { | ||
| return pippenger(_DecafPoint, Fn, points, scalars); | ||
| } | ||
| /** | ||
@@ -509,3 +485,3 @@ * Encodes decaf point to Uint8Array. | ||
| /** Hashing to decaf448 points / field. RFC 9380 methods. */ | ||
| export const decaf448_hasher: H2CHasherBase<bigint> = { | ||
| export const decaf448_hasher: H2CHasherBase<_DecafPoint> = { | ||
| hashToCurve(msg: Uint8Array, options?: htfBasicOpts): _DecafPoint { | ||
@@ -525,9 +501,10 @@ const DST = options?.DST || 'decaf448_XOF:SHAKE256_D448MAP_RO_'; | ||
| // export const decaf448_oprf: OPRF = createORPF({ | ||
| // name: 'decaf448-SHAKE256', | ||
| // Point: DecafPoint, | ||
| // hash: (msg: Uint8Array) => shake256(msg, { dkLen: 64 }), | ||
| // hashToGroup: decaf448_hasher.hashToCurve, | ||
| // hashToScalar: decaf448_hasher.hashToScalar, | ||
| // }); | ||
| export const decaf448_oprf: OPRF = /* @__PURE__ */ (() => | ||
| createORPF({ | ||
| name: 'decaf448-SHAKE256', | ||
| Point: _DecafPoint, | ||
| hash: (msg: Uint8Array) => shake256(msg, { dkLen: 64 }), | ||
| hashToGroup: decaf448_hasher.hashToCurve, | ||
| hashToScalar: decaf448_hasher.hashToScalar, | ||
| }))(); | ||
@@ -546,23 +523,1 @@ /** | ||
| ]; | ||
| type DcfHasher = (msg: Uint8Array, options: htfBasicOpts) => _DecafPoint; | ||
| /** @deprecated use `decaf448.Point` */ | ||
| export const DecafPoint: typeof _DecafPoint = _DecafPoint; | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => ed448_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => | ||
| ed448_hasher.encodeToCurve)(); | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const hashToDecaf448: DcfHasher = /* @__PURE__ */ (() => | ||
| decaf448_hasher.hashToCurve as DcfHasher)(); | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const hash_to_decaf448: DcfHasher = /* @__PURE__ */ (() => | ||
| decaf448_hasher.hashToCurve as DcfHasher)(); | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export function edwardsToMontgomeryPub(edwardsPub: string | Uint8Array): Uint8Array { | ||
| return ed448.utils.toMontgomery(ensureBytes('pub', edwardsPub)); | ||
| } | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export const edwardsToMontgomery: typeof edwardsToMontgomeryPub = edwardsToMontgomeryPub; |
+1
-1
@@ -12,5 +12,5 @@ /** | ||
| import { bn254 } from '@noble/curves/bn254.js'; | ||
| import { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from '@noble/curves/abstract/utils.js'; | ||
| import { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from '@noble/curves/utils.js'; | ||
| ``` | ||
| */ | ||
| throw new Error('root module cannot be imported: import submodules instead. Check out README'); |
+66
-49
@@ -9,14 +9,15 @@ /** | ||
| import { blake2s } from '@noble/hashes/blake2.js'; | ||
| import { sha256, sha512 } from '@noble/hashes/sha2.js'; | ||
| import { concatBytes, utf8ToBytes } from '@noble/hashes/utils.js'; | ||
| import { sha256, sha384, sha512 } from '@noble/hashes/sha2.js'; | ||
| import { concatBytes } from '@noble/hashes/utils.js'; | ||
| import { | ||
| twistedEdwards, | ||
| type CurveFn, | ||
| eddsa, | ||
| edwards, | ||
| type EdDSA, | ||
| type EdwardsOpts, | ||
| type EdwardsPoint, | ||
| } from './abstract/edwards.ts'; | ||
| import { Field, mod } from './abstract/modular.ts'; | ||
| import { weierstrass, type CurveFn as WCurveFn } from './abstract/weierstrass.ts'; | ||
| import { ecdsa, weierstrass, type ECDSA, type WeierstrassOpts } from './abstract/weierstrass.ts'; | ||
| import { bls12_381_Fr } from './bls12-381.ts'; | ||
| import { bn254_Fr } from './bn254.ts'; | ||
| import { asciiToBytes } from './utils.ts'; | ||
@@ -36,7 +37,3 @@ // Jubjub curves have 𝔽p over scalar fields of other curves. They are friendly to ZK proofs. | ||
| /** Curve over scalar field of bls12-381. jubjub Fp = bls n */ | ||
| export const jubjub: CurveFn = /* @__PURE__ */ twistedEdwards({ | ||
| ...jubjub_CURVE, | ||
| Fp: bls12_381_Fr, | ||
| hash: sha512, | ||
| }); | ||
| export const jubjub: EdDSA = /* @__PURE__ */ eddsa(edwards(jubjub_CURVE), sha512); | ||
@@ -53,9 +50,5 @@ const babyjubjub_CURVE: EdwardsOpts = { | ||
| /** Curve over scalar field of bn254. babyjubjub Fp = bn254 n */ | ||
| export const babyjubjub: CurveFn = /* @__PURE__ */ twistedEdwards({ | ||
| ...babyjubjub_CURVE, | ||
| Fp: bn254_Fr, | ||
| hash: blake256, | ||
| }); | ||
| export const babyjubjub: EdDSA = /* @__PURE__ */ eddsa(edwards(babyjubjub_CURVE), blake256); | ||
| const jubjub_gh_first_block = utf8ToBytes( | ||
| const jubjub_gh_first_block = asciiToBytes( | ||
| '096b36a5804bfacef1691e173c366a47ff5ba84a44f26ddd7e8d9f79d5b42df0' | ||
@@ -93,36 +86,60 @@ ); | ||
| // Pasta curves. See [Spec](https://o1-labs.github.io/proof-systems/specs/pasta.html). | ||
| const brainpoolP256r1_CURVE: WeierstrassOpts<bigint> = { | ||
| p: BigInt('0xa9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5377'), | ||
| a: BigInt('0x7d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9'), | ||
| b: BigInt('0x26dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b6'), | ||
| n: BigInt('0xa9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7'), | ||
| Gx: BigInt('0x8bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262'), | ||
| Gy: BigInt('0x547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f046997'), | ||
| h: BigInt(1), | ||
| }; | ||
| /** Brainpool P256r1 with sha256, from RFC 5639. */ | ||
| export const brainpoolP256r1: ECDSA = ecdsa(weierstrass(brainpoolP256r1_CURVE), sha256); | ||
| export const pasta_p: bigint = BigInt( | ||
| '0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001' | ||
| ); | ||
| export const pasta_q: bigint = BigInt( | ||
| '0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001' | ||
| ); | ||
| const brainpoolP384r1_CURVE: WeierstrassOpts<bigint> = { | ||
| p: BigInt( | ||
| '0x8cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec53' | ||
| ), | ||
| a: BigInt( | ||
| '0x7bc382c63d8c150c3c72080ace05afa0c2bea28e4fb22787139165efba91f90f8aa5814a503ad4eb04a8c7dd22ce2826' | ||
| ), | ||
| b: BigInt( | ||
| '0x04a8c7dd22ce28268b39b55416f0447c2fb77de107dcd2a62e880ea53eeb62d57cb4390295dbc9943ab78696fa504c11' | ||
| ), | ||
| n: BigInt( | ||
| '0x8cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b31f166e6cac0425a7cf3ab6af6b7fc3103b883202e9046565' | ||
| ), | ||
| Gx: BigInt( | ||
| '0x1d1c64f068cf45ffa2a63a81b7c13f6b8847a3e77ef14fe3db7fcafe0cbd10e8e826e03436d646aaef87b2e247d4af1e' | ||
| ), | ||
| Gy: BigInt( | ||
| '0x8abe1d7520f9c2a45cb1eb8e95cfd55262b70b29feec5864e19c054ff99129280e4646217791811142820341263c5315' | ||
| ), | ||
| h: BigInt(1), | ||
| }; | ||
| /** Brainpool P384r1 with sha384, from RFC 5639. */ | ||
| export const brainpoolP384r1: ECDSA = ecdsa(weierstrass(brainpoolP384r1_CURVE), sha384); | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export const pallas: WCurveFn = weierstrass({ | ||
| a: BigInt(0), | ||
| b: BigInt(5), | ||
| Fp: Field(pasta_p), | ||
| n: pasta_q, | ||
| Gx: mod(BigInt(-1), pasta_p), | ||
| Gy: BigInt(2), | ||
| const brainpoolP512r1_CURVE: WeierstrassOpts<bigint> = { | ||
| p: BigInt( | ||
| '0xaadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f3' | ||
| ), | ||
| a: BigInt( | ||
| '0x7830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca' | ||
| ), | ||
| b: BigInt( | ||
| '0x3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94cadc083e67984050b75ebae5dd2809bd638016f723' | ||
| ), | ||
| n: BigInt( | ||
| '0xaadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330870553e5c414ca92619418661197fac10471db1d381085ddaddb58796829ca90069' | ||
| ), | ||
| Gx: BigInt( | ||
| '0x81aee4bdd82ed9645a21322e9c4c6a9385ed9f70b5d916c1b43b62eef4d0098eff3b1f78e2d0d48d50d1687b93b97d5f7c6d5047406a5e688b352209bcb9f822' | ||
| ), | ||
| Gy: BigInt( | ||
| '0x7dde385d566332ecc0eabfa9cf7822fdf209f70024a57b1aa000c55b881f8111b2dcde494a5f485e5bca4bd88a2763aed1ca2b2fa8f0540678cd1e0f3ad80892' | ||
| ), | ||
| h: BigInt(1), | ||
| hash: sha256, | ||
| }); | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export const vesta: WCurveFn = weierstrass({ | ||
| a: BigInt(0), | ||
| b: BigInt(5), | ||
| Fp: Field(pasta_q), | ||
| n: pasta_p, | ||
| Gx: mod(BigInt(-1), pasta_q), | ||
| Gy: BigInt(2), | ||
| h: BigInt(1), | ||
| hash: sha256, | ||
| }); | ||
| }; | ||
| /** Brainpool P521r1 with sha512, from RFC 5639. */ | ||
| export const brainpoolP512r1: ECDSA = ecdsa(weierstrass(brainpoolP512r1_CURVE), sha512); |
+48
-57
@@ -8,7 +8,10 @@ /** | ||
| import { sha256, sha384, sha512 } from '@noble/hashes/sha2.js'; | ||
| import { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts'; | ||
| import { createHasher, type H2CHasher } from './abstract/hash-to-curve.ts'; | ||
| import { Field } from './abstract/modular.ts'; | ||
| import { createORPF, type OPRF } from './abstract/oprf.ts'; | ||
| import { | ||
| ecdsa, | ||
| mapToCurveSimpleSWU, | ||
| weierstrass, | ||
| type ECDSA, | ||
| type WeierstrassOpts, | ||
@@ -76,5 +79,2 @@ type WeierstrassPointCons, | ||
| const Fp256 = Field(p256_CURVE.p); | ||
| const Fp384 = Field(p384_CURVE.p); | ||
| const Fp521 = Field(p521_CURVE.p); | ||
| type SwuOpts = { | ||
@@ -91,14 +91,13 @@ A: bigint; | ||
| /** NIST P256 (aka secp256r1, prime256v1) curve, ECDSA and ECDH methods. */ | ||
| export const p256: CurveFnWithCreate = createCurve( | ||
| { ...p256_CURVE, Fp: Fp256, lowS: false }, | ||
| sha256 | ||
| ); | ||
| const p256_Point = /* @__PURE__ */ weierstrass(p256_CURVE); | ||
| export const p256: ECDSA = /* @__PURE__ */ ecdsa(p256_Point, sha256); | ||
| /** Hashing / encoding to p256 points / field. RFC 9380 methods. */ | ||
| export const p256_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() => { | ||
| export const p256_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => { | ||
| return createHasher( | ||
| p256.Point, | ||
| createSWU(p256.Point, { | ||
| p256_Point, | ||
| createSWU(p256_Point, { | ||
| A: p256_CURVE.a, | ||
| B: p256_CURVE.b, | ||
| Z: p256.Point.Fp.create(BigInt('-10')), | ||
| Z: p256_Point.Fp.create(BigInt('-10')), | ||
| }), | ||
@@ -117,23 +116,22 @@ { | ||
| // export const p256_oprf: OPRF = createORPF({ | ||
| // name: 'P256-SHA256', | ||
| // Point: p256.Point, | ||
| // hash: sha256, | ||
| // hashToGroup: p256_hasher.hashToCurve, | ||
| // hashToScalar: p256_hasher.hashToScalar, | ||
| // }); | ||
| export const p256_oprf: OPRF = /* @__PURE__ */ (() => | ||
| createORPF({ | ||
| name: 'P256-SHA256', | ||
| Point: p256_Point, | ||
| hash: sha256, | ||
| hashToGroup: p256_hasher.hashToCurve, | ||
| hashToScalar: p256_hasher.hashToScalar, | ||
| }))(); | ||
| const p384_Point = /* @__PURE__ */ weierstrass(p384_CURVE); | ||
| /** NIST P384 (aka secp384r1) curve, ECDSA and ECDH methods. */ | ||
| export const p384: CurveFnWithCreate = createCurve( | ||
| { ...p384_CURVE, Fp: Fp384, lowS: false }, | ||
| sha384 | ||
| ); | ||
| export const p384: ECDSA = /* @__PURE__ */ ecdsa(p384_Point, sha384); | ||
| /** Hashing / encoding to p384 points / field. RFC 9380 methods. */ | ||
| export const p384_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() => { | ||
| export const p384_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => { | ||
| return createHasher( | ||
| p384.Point, | ||
| createSWU(p384.Point, { | ||
| p384_Point, | ||
| createSWU(p384_Point, { | ||
| A: p384_CURVE.a, | ||
| B: p384_CURVE.b, | ||
| Z: p384.Point.Fp.create(BigInt('-12')), | ||
| Z: p384_Point.Fp.create(BigInt('-12')), | ||
| }), | ||
@@ -152,32 +150,24 @@ { | ||
| // export const p384_oprf: OPRF = createORPF({ | ||
| // name: 'P384-SHA384', | ||
| // Point: p384.Point, | ||
| // hash: sha384, | ||
| // hashToGroup: p384_hasher.hashToCurve, | ||
| // hashToScalar: p384_hasher.hashToScalar, | ||
| // }); | ||
| export const p384_oprf: OPRF = /* @__PURE__ */ (() => | ||
| createORPF({ | ||
| name: 'P384-SHA384', | ||
| Point: p384_Point, | ||
| hash: sha384, | ||
| hashToGroup: p384_hasher.hashToCurve, | ||
| hashToScalar: p384_hasher.hashToScalar, | ||
| }))(); | ||
| // const Fn521 = Field(p521_CURVE.n, { allowedScalarLengths: [65, 66] }); | ||
| const Fn521 = /* @__PURE__ */ Field(p521_CURVE.n, { allowedLengths: [65, 66] }); | ||
| const p521_Point = /* @__PURE__ */ weierstrass(p521_CURVE, { Fn: Fn521 }); | ||
| /** NIST P521 (aka secp521r1) curve, ECDSA and ECDH methods. */ | ||
| export const p521: CurveFnWithCreate = createCurve( | ||
| { ...p521_CURVE, Fp: Fp521, lowS: false, allowedPrivateKeyLengths: [130, 131, 132] }, | ||
| sha512 | ||
| ); | ||
| export const p521: ECDSA = /* @__PURE__ */ ecdsa(p521_Point, sha512); | ||
| /** @deprecated use `p256` for consistency with `p256_hasher` */ | ||
| export const secp256r1: typeof p256 = p256; | ||
| /** @deprecated use `p384` for consistency with `p384_hasher` */ | ||
| export const secp384r1: typeof p384 = p384; | ||
| /** @deprecated use `p521` for consistency with `p521_hasher` */ | ||
| export const secp521r1: typeof p521 = p521; | ||
| /** Hashing / encoding to p521 points / field. RFC 9380 methods. */ | ||
| export const p521_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() => { | ||
| export const p521_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => { | ||
| return createHasher( | ||
| p521.Point, | ||
| createSWU(p521.Point, { | ||
| p521_Point, | ||
| createSWU(p521_Point, { | ||
| A: p521_CURVE.a, | ||
| B: p521_CURVE.b, | ||
| Z: p521.Point.Fp.create(BigInt('-4')), | ||
| Z: p521_Point.Fp.create(BigInt('-4')), | ||
| }), | ||
@@ -196,8 +186,9 @@ { | ||
| // export const p521_oprf: OPRF = createORPF({ | ||
| // name: 'P521-SHA512', | ||
| // Point: p521.Point, | ||
| // hash: sha512, | ||
| // hashToGroup: p521_hasher.hashToCurve, | ||
| // hashToScalar: p521_hasher.hashToScalar, // produces L=98 just like in RFC | ||
| // }); | ||
| export const p521_oprf: OPRF = /* @__PURE__ */ (() => | ||
| createORPF({ | ||
| name: 'P521-SHA512', | ||
| Point: p521_Point, | ||
| hash: sha512, | ||
| hashToGroup: p521_hasher.hashToCurve, | ||
| hashToScalar: p521_hasher.hashToScalar, // produces L=98 just like in RFC | ||
| }))(); |
+32
-65
@@ -11,31 +11,19 @@ /** | ||
| import { randomBytes } from '@noble/hashes/utils.js'; | ||
| import { createCurve, type CurveFnWithCreate } from './_shortw_utils.ts'; | ||
| import type { CurveLengths } from './abstract/curve.ts'; | ||
| import { createHasher, type H2CHasher, isogenyMap } from './abstract/hash-to-curve.ts'; | ||
| import { Field, mapHashToField, pow2 } from './abstract/modular.ts'; | ||
| import { | ||
| createHasher, | ||
| type H2CHasher, | ||
| type H2CMethod, | ||
| isogenyMap, | ||
| } from './abstract/hash-to-curve.ts'; | ||
| import { Field, mapHashToField, mod, pow2 } from './abstract/modular.ts'; | ||
| import { | ||
| _normFnElement, | ||
| type ECDSA, | ||
| ecdsa, | ||
| type EndomorphismOpts, | ||
| mapToCurveSimpleSWU, | ||
| type WeierstrassPoint as PointType, | ||
| weierstrass, | ||
| type WeierstrassOpts, | ||
| type WeierstrassPointCons, | ||
| } from './abstract/weierstrass.ts'; | ||
| import type { Hex, PrivKey } from './utils.ts'; | ||
| import { | ||
| bytesToNumberBE, | ||
| concatBytes, | ||
| ensureBytes, | ||
| inRange, | ||
| numberToBytesBE, | ||
| utf8ToBytes, | ||
| } from './utils.ts'; | ||
| import { abytes, asciiToBytes, bytesToNumberBE, concatBytes, inRange } from './utils.ts'; | ||
| // Seems like generator was produced from some seed: | ||
| // `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x` | ||
| // `Pointk1.BASE.multiply(Pointk1.Fn.inv(2n, N)).toAffine().x` | ||
| // // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n | ||
@@ -93,2 +81,6 @@ const secp256k1_CURVE: WeierstrassOpts<bigint> = { | ||
| const Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod }); | ||
| const Pointk1 = /* @__PURE__ */ weierstrass(secp256k1_CURVE, { | ||
| Fp: Fpk1, | ||
| endo: secp256k1_ENDO, | ||
| }); | ||
@@ -109,7 +101,5 @@ /** | ||
| */ | ||
| export const secp256k1: CurveFnWithCreate = createCurve( | ||
| { ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO }, | ||
| sha256 | ||
| ); | ||
| export const secp256k1: ECDSA = /* @__PURE__ */ ecdsa(Pointk1, sha256); | ||
| // Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code. | ||
@@ -122,3 +112,3 @@ // https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki | ||
| if (tagP === undefined) { | ||
| const tagH = sha256(utf8ToBytes(tag)); | ||
| const tagH = sha256(asciiToBytes(tag)); | ||
| tagP = concatBytes(tagH, tagH); | ||
@@ -132,9 +122,8 @@ TAGGED_HASH_PREFIXES[tag] = tagP; | ||
| const pointToBytes = (point: PointType<bigint>) => point.toBytes(true).slice(1); | ||
| const Pointk1 = /* @__PURE__ */ (() => secp256k1.Point)(); | ||
| const hasEven = (y: bigint) => y % _2n === _0n; | ||
| // Calculate point, scalar and bytes | ||
| function schnorrGetExtPubKey(priv: PrivKey) { | ||
| function schnorrGetExtPubKey(priv: Uint8Array) { | ||
| const { Fn, BASE } = Pointk1; | ||
| const d_ = _normFnElement(Fn, priv); | ||
| const d_ = Fn.fromBytes(priv); | ||
| const p = BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside | ||
@@ -172,3 +161,3 @@ const scalar = hasEven(p.y) ? d_ : Fn.neg(d_); | ||
| */ | ||
| function schnorrGetPublicKey(secretKey: Hex): Uint8Array { | ||
| function schnorrGetPublicKey(secretKey: Uint8Array): Uint8Array { | ||
| return schnorrGetExtPubKey(secretKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G) | ||
@@ -181,7 +170,11 @@ } | ||
| */ | ||
| function schnorrSign(message: Hex, secretKey: PrivKey, auxRand: Hex = randomBytes(32)): Uint8Array { | ||
| function schnorrSign( | ||
| message: Uint8Array, | ||
| secretKey: Uint8Array, | ||
| auxRand: Uint8Array = randomBytes(32) | ||
| ): Uint8Array { | ||
| const { Fn } = Pointk1; | ||
| const m = ensureBytes('message', message); | ||
| const m = abytes(message, undefined, 'message'); | ||
| const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder | ||
| const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array | ||
| const a = abytes(auxRand, 32, 'auxRand'); // Auxiliary random data a: a 32-byte array | ||
| const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a) | ||
@@ -204,7 +197,7 @@ const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m) | ||
| */ | ||
| function schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean { | ||
| function schnorrVerify(signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): boolean { | ||
| const { Fn, BASE } = Pointk1; | ||
| const sig = ensureBytes('signature', signature, 64); | ||
| const m = ensureBytes('message', message); | ||
| const pub = ensureBytes('publicKey', publicKey, 32); | ||
| const sig = abytes(signature, 64, 'signature'); | ||
| const m = abytes(message, undefined, 'message'); | ||
| const pub = abytes(publicKey, 32, 'publicKey'); | ||
| try { | ||
@@ -216,4 +209,3 @@ const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails | ||
| if (!inRange(s, _1n, secp256k1_CURVE.n)) return false; | ||
| // int(challenge(bytes(r)||bytes(P)||m))%n | ||
| const e = challenge(Fn.toBytes(r), pointToBytes(P), m); | ||
| const e = challenge(Fn.toBytes(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n | ||
| // R = s⋅G - e⋅P, where -eP == (n-e)P | ||
@@ -241,11 +233,2 @@ const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e))); | ||
| taggedHash: typeof taggedHash; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `utils` */ | ||
| numberToBytesBE: typeof numberToBytesBE; | ||
| /** @deprecated use `utils` */ | ||
| bytesToNumberBE: typeof bytesToNumberBE; | ||
| /** @deprecated use `modular` */ | ||
| mod: typeof mod; | ||
| }; | ||
@@ -273,4 +256,2 @@ lengths: CurveLengths; | ||
| }; | ||
| // TODO: remove | ||
| secp256k1.utils.randomSecretKey; | ||
| function keygen(seed?: Uint8Array) { | ||
@@ -287,12 +268,6 @@ const secretKey = randomSecretKey(seed); | ||
| utils: { | ||
| randomSecretKey: randomSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| randomSecretKey, | ||
| taggedHash, | ||
| // TODO: remove | ||
| lift_x, | ||
| pointToBytes, | ||
| numberToBytesBE, | ||
| bytesToNumberBE, | ||
| mod, | ||
| }, | ||
@@ -350,5 +325,5 @@ lengths: { | ||
| /** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */ | ||
| export const secp256k1_hasher: H2CHasher<bigint> = /* @__PURE__ */ (() => | ||
| export const secp256k1_hasher: H2CHasher<WeierstrassPointCons<bigint>> = /* @__PURE__ */ (() => | ||
| createHasher( | ||
| secp256k1.Point, | ||
| Pointk1, | ||
| (scalars: bigint[]) => { | ||
@@ -368,9 +343,1 @@ const { x, y } = mapSWU(Fpk1.create(scalars[0])); | ||
| ))(); | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => | ||
| secp256k1_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => | ||
| secp256k1_hasher.encodeToCurve)(); |
+41
-61
@@ -8,2 +8,3 @@ /** | ||
| abytes as abytes_, | ||
| anumber, | ||
| bytesToHex as bytesToHex_, | ||
@@ -23,10 +24,9 @@ concatBytes as concatBytes_, | ||
| randomBytes, | ||
| utf8ToBytes, | ||
| utf8ToBytes | ||
| } from '@noble/hashes/utils.js'; | ||
| const _0n = /* @__PURE__ */ BigInt(0); | ||
| const _1n = /* @__PURE__ */ BigInt(1); | ||
| export type Hex = Uint8Array | string; // hex strings are accepted for simplicity | ||
| export type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve | ||
| export type CHash = { | ||
| (message: Uint8Array | string): Uint8Array; | ||
| (message: Uint8Array): Uint8Array; | ||
| blockLen: number; | ||
@@ -36,10 +36,4 @@ outputLen: number; | ||
| }; | ||
| export type FHash = (message: Uint8Array | string) => Uint8Array; | ||
| export function abool(title: string, value: boolean): void { | ||
| if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value); | ||
| } | ||
| // tmp name until v2 | ||
| export function _abool2(value: boolean, title: string = ''): boolean { | ||
| export type FHash = (message: Uint8Array) => Uint8Array; | ||
| export function abool(value: boolean, title: string = ''): boolean { | ||
| if (typeof value !== 'boolean') { | ||
@@ -52,20 +46,12 @@ const prefix = title && `"${title}"`; | ||
| // tmp name until v2 | ||
| /** Asserts something is Uint8Array. */ | ||
| export function _abytes2(value: Uint8Array, length?: number, title: string = ''): Uint8Array { | ||
| const bytes = isBytes_(value); | ||
| const len = value?.length; | ||
| const needsLen = length !== undefined; | ||
| if (!bytes || (needsLen && len !== length)) { | ||
| const prefix = title && `"${title}" `; | ||
| const ofLen = needsLen ? ` of length ${length}` : ''; | ||
| const got = bytes ? `length=${len}` : `type=${typeof value}`; | ||
| throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got); | ||
| } | ||
| return value; | ||
| // Used in weierstrass, der | ||
| function abignumer(n: number | bigint) { | ||
| if (typeof n === 'bigint') { | ||
| if (!isPosBig(n)) throw new Error('positive bigint expected, got ' + n); | ||
| } else anumber(n); | ||
| return n; | ||
| } | ||
| // Used in weierstrass, der | ||
| export function numberToHexUnpadded(num: number | bigint): string { | ||
| const hex = num.toString(16); | ||
| const hex = abignumer(num).toString(16); | ||
| return hex.length & 1 ? '0' + hex : hex; | ||
@@ -84,8 +70,11 @@ } | ||
| export function bytesToNumberLE(bytes: Uint8Array): bigint { | ||
| abytes_(bytes); | ||
| return hexToNumber(bytesToHex_(Uint8Array.from(bytes).reverse())); | ||
| return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse())); | ||
| } | ||
| export function numberToBytesBE(n: number | bigint, len: number): Uint8Array { | ||
| return hexToBytes_(n.toString(16).padStart(len * 2, '0')); | ||
| anumber(len); | ||
| n = abignumer(n); | ||
| const res = hexToBytes_(n.toString(16).padStart(len * 2, '0')); | ||
| if (res.length !== len) throw new Error('number too large'); | ||
| return res; | ||
| } | ||
@@ -97,35 +86,5 @@ export function numberToBytesLE(n: number | bigint, len: number): Uint8Array { | ||
| export function numberToVarBytesBE(n: number | bigint): Uint8Array { | ||
| return hexToBytes_(numberToHexUnpadded(n)); | ||
| return hexToBytes_(numberToHexUnpadded(abignumer(n))); | ||
| } | ||
| /** | ||
| * Takes hex string or Uint8Array, converts to Uint8Array. | ||
| * Validates output length. | ||
| * Will throw error for other types. | ||
| * @param title descriptive title for an error e.g. 'secret key' | ||
| * @param hex hex string or Uint8Array | ||
| * @param expectedLength optional, will compare to result array's length | ||
| * @returns | ||
| */ | ||
| export function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array { | ||
| let res: Uint8Array; | ||
| if (typeof hex === 'string') { | ||
| try { | ||
| res = hexToBytes_(hex); | ||
| } catch (e) { | ||
| throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e); | ||
| } | ||
| } else if (isBytes_(hex)) { | ||
| // Uint8Array.from() instead of hash.slice() because node.js Buffer | ||
| // is instance of Uint8Array, and its slice() creates **mutable** copy | ||
| res = Uint8Array.from(hex); | ||
| } else { | ||
| throw new Error(title + ' must be hex string or Uint8Array'); | ||
| } | ||
| const len = res.length; | ||
| if (typeof expectedLength === 'number' && len !== expectedLength) | ||
| throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len); | ||
| return res; | ||
| } | ||
| // Compares 2 u8a-s in kinda constant time | ||
@@ -138,2 +97,3 @@ export function equalBytes(a: Uint8Array, b: Uint8Array): boolean { | ||
| } | ||
| /** | ||
@@ -384,1 +344,21 @@ * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer, | ||
| } | ||
| export interface CryptoKeys { | ||
| lengths: { seed?: number; public?: number; secret?: number }; | ||
| keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array }; | ||
| getPublicKey: (secretKey: Uint8Array) => Uint8Array; | ||
| } | ||
| /** Generic interface for signatures. Has keygen, sign and verify. */ | ||
| export interface Signer extends CryptoKeys { | ||
| // Interfaces are fun. We cannot just add new fields without copying old ones. | ||
| lengths: { | ||
| seed?: number; | ||
| public?: number; | ||
| secret?: number; | ||
| signRand?: number; | ||
| signature?: number; | ||
| }; | ||
| sign: (msg: Uint8Array, secretKey: Uint8Array) => Uint8Array; | ||
| verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array) => boolean; | ||
| } |
+28
-19
@@ -1,6 +0,4 @@ | ||
| export { abytes, anumber, bytesToHex, bytesToUtf8, concatBytes, hexToBytes, isBytes, randomBytes, utf8ToBytes, } from '@noble/hashes/utils.js'; | ||
| export type Hex = Uint8Array | string; | ||
| export type PrivKey = Hex | bigint; | ||
| export { abytes, anumber, bytesToHex, bytesToUtf8, concatBytes, hexToBytes, isBytes, randomBytes, utf8ToBytes } from '@noble/hashes/utils.js'; | ||
| export type CHash = { | ||
| (message: Uint8Array | string): Uint8Array; | ||
| (message: Uint8Array): Uint8Array; | ||
| blockLen: number; | ||
@@ -12,7 +10,4 @@ outputLen: number; | ||
| }; | ||
| export type FHash = (message: Uint8Array | string) => Uint8Array; | ||
| export declare function abool(title: string, value: boolean): void; | ||
| export declare function _abool2(value: boolean, title?: string): boolean; | ||
| /** Asserts something is Uint8Array. */ | ||
| export declare function _abytes2(value: Uint8Array, length?: number, title?: string): Uint8Array; | ||
| export type FHash = (message: Uint8Array) => Uint8Array; | ||
| export declare function abool(value: boolean, title?: string): boolean; | ||
| export declare function numberToHexUnpadded(num: number | bigint): string; | ||
@@ -25,12 +20,2 @@ export declare function hexToNumber(hex: string): bigint; | ||
| export declare function numberToVarBytesBE(n: number | bigint): Uint8Array; | ||
| /** | ||
| * Takes hex string or Uint8Array, converts to Uint8Array. | ||
| * Validates output length. | ||
| * Will throw error for other types. | ||
| * @param title descriptive title for an error e.g. 'secret key' | ||
| * @param hex hex string or Uint8Array | ||
| * @param expectedLength optional, will compare to result array's length | ||
| * @returns | ||
| */ | ||
| export declare function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array; | ||
| export declare function equalBytes(a: Uint8Array, b: Uint8Array): boolean; | ||
@@ -112,2 +97,26 @@ /** | ||
| export declare function memoized<T extends object, R, O extends any[]>(fn: (arg: T, ...args: O) => R): (arg: T, ...args: O) => R; | ||
| export interface CryptoKeys { | ||
| lengths: { | ||
| seed?: number; | ||
| public?: number; | ||
| secret?: number; | ||
| }; | ||
| keygen: (seed?: Uint8Array) => { | ||
| secretKey: Uint8Array; | ||
| publicKey: Uint8Array; | ||
| }; | ||
| getPublicKey: (secretKey: Uint8Array) => Uint8Array; | ||
| } | ||
| /** Generic interface for signatures. Has keygen, sign and verify. */ | ||
| export interface Signer extends CryptoKeys { | ||
| lengths: { | ||
| seed?: number; | ||
| public?: number; | ||
| secret?: number; | ||
| signRand?: number; | ||
| signature?: number; | ||
| }; | ||
| sign: (msg: Uint8Array, secretKey: Uint8Array) => Uint8Array; | ||
| verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array) => boolean; | ||
| } | ||
| //# sourceMappingURL=utils.d.ts.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"} |
+45
-121
@@ -1,28 +0,1 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.notImplemented = exports.bitMask = exports.utf8ToBytes = exports.randomBytes = exports.isBytes = exports.hexToBytes = exports.concatBytes = exports.bytesToUtf8 = exports.bytesToHex = exports.anumber = exports.abytes = void 0; | ||
| exports.abool = abool; | ||
| exports._abool2 = _abool2; | ||
| exports._abytes2 = _abytes2; | ||
| exports.numberToHexUnpadded = numberToHexUnpadded; | ||
| exports.hexToNumber = hexToNumber; | ||
| exports.bytesToNumberBE = bytesToNumberBE; | ||
| exports.bytesToNumberLE = bytesToNumberLE; | ||
| exports.numberToBytesBE = numberToBytesBE; | ||
| exports.numberToBytesLE = numberToBytesLE; | ||
| exports.numberToVarBytesBE = numberToVarBytesBE; | ||
| exports.ensureBytes = ensureBytes; | ||
| exports.equalBytes = equalBytes; | ||
| exports.copyBytes = copyBytes; | ||
| exports.asciiToBytes = asciiToBytes; | ||
| exports.inRange = inRange; | ||
| exports.aInRange = aInRange; | ||
| exports.bitLen = bitLen; | ||
| exports.bitGet = bitGet; | ||
| exports.bitSet = bitSet; | ||
| exports.createHmacDrbg = createHmacDrbg; | ||
| exports.validateObject = validateObject; | ||
| exports.isHash = isHash; | ||
| exports._validateObject = _validateObject; | ||
| exports.memoized = memoized; | ||
| /** | ||
@@ -33,21 +6,7 @@ * Hex, bytes and number utilities. | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| const utils_js_1 = require("@noble/hashes/utils.js"); | ||
| var utils_js_2 = require("@noble/hashes/utils.js"); | ||
| Object.defineProperty(exports, "abytes", { enumerable: true, get: function () { return utils_js_2.abytes; } }); | ||
| Object.defineProperty(exports, "anumber", { enumerable: true, get: function () { return utils_js_2.anumber; } }); | ||
| Object.defineProperty(exports, "bytesToHex", { enumerable: true, get: function () { return utils_js_2.bytesToHex; } }); | ||
| Object.defineProperty(exports, "bytesToUtf8", { enumerable: true, get: function () { return utils_js_2.bytesToUtf8; } }); | ||
| Object.defineProperty(exports, "concatBytes", { enumerable: true, get: function () { return utils_js_2.concatBytes; } }); | ||
| Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return utils_js_2.hexToBytes; } }); | ||
| Object.defineProperty(exports, "isBytes", { enumerable: true, get: function () { return utils_js_2.isBytes; } }); | ||
| Object.defineProperty(exports, "randomBytes", { enumerable: true, get: function () { return utils_js_2.randomBytes; } }); | ||
| Object.defineProperty(exports, "utf8ToBytes", { enumerable: true, get: function () { return utils_js_2.utf8ToBytes; } }); | ||
| import { abytes as abytes_, anumber, bytesToHex as bytesToHex_, concatBytes as concatBytes_, hexToBytes as hexToBytes_, isBytes as isBytes_, } from '@noble/hashes/utils.js'; | ||
| export { abytes, anumber, bytesToHex, bytesToUtf8, concatBytes, hexToBytes, isBytes, randomBytes, utf8ToBytes } from '@noble/hashes/utils.js'; | ||
| const _0n = /* @__PURE__ */ BigInt(0); | ||
| const _1n = /* @__PURE__ */ BigInt(1); | ||
| function abool(title, value) { | ||
| if (typeof value !== 'boolean') | ||
| throw new Error(title + ' boolean expected, got ' + value); | ||
| } | ||
| // tmp name until v2 | ||
| function _abool2(value, title = '') { | ||
| export function abool(value, title = '') { | ||
| if (typeof value !== 'boolean') { | ||
@@ -59,22 +18,17 @@ const prefix = title && `"${title}"`; | ||
| } | ||
| // tmp name until v2 | ||
| /** Asserts something is Uint8Array. */ | ||
| function _abytes2(value, length, title = '') { | ||
| const bytes = (0, utils_js_1.isBytes)(value); | ||
| const len = value?.length; | ||
| const needsLen = length !== undefined; | ||
| if (!bytes || (needsLen && len !== length)) { | ||
| const prefix = title && `"${title}" `; | ||
| const ofLen = needsLen ? ` of length ${length}` : ''; | ||
| const got = bytes ? `length=${len}` : `type=${typeof value}`; | ||
| throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got); | ||
| // Used in weierstrass, der | ||
| function abignumer(n) { | ||
| if (typeof n === 'bigint') { | ||
| if (!isPosBig(n)) | ||
| throw new Error('positive bigint expected, got ' + n); | ||
| } | ||
| return value; | ||
| else | ||
| anumber(n); | ||
| return n; | ||
| } | ||
| // Used in weierstrass, der | ||
| function numberToHexUnpadded(num) { | ||
| const hex = num.toString(16); | ||
| export function numberToHexUnpadded(num) { | ||
| const hex = abignumer(num).toString(16); | ||
| return hex.length & 1 ? '0' + hex : hex; | ||
| } | ||
| function hexToNumber(hex) { | ||
| export function hexToNumber(hex) { | ||
| if (typeof hex !== 'string') | ||
@@ -85,53 +39,25 @@ throw new Error('hex string expected, got ' + typeof hex); | ||
| // BE: Big Endian, LE: Little Endian | ||
| function bytesToNumberBE(bytes) { | ||
| return hexToNumber((0, utils_js_1.bytesToHex)(bytes)); | ||
| export function bytesToNumberBE(bytes) { | ||
| return hexToNumber(bytesToHex_(bytes)); | ||
| } | ||
| function bytesToNumberLE(bytes) { | ||
| (0, utils_js_1.abytes)(bytes); | ||
| return hexToNumber((0, utils_js_1.bytesToHex)(Uint8Array.from(bytes).reverse())); | ||
| export function bytesToNumberLE(bytes) { | ||
| return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse())); | ||
| } | ||
| function numberToBytesBE(n, len) { | ||
| return (0, utils_js_1.hexToBytes)(n.toString(16).padStart(len * 2, '0')); | ||
| export function numberToBytesBE(n, len) { | ||
| anumber(len); | ||
| n = abignumer(n); | ||
| const res = hexToBytes_(n.toString(16).padStart(len * 2, '0')); | ||
| if (res.length !== len) | ||
| throw new Error('number too large'); | ||
| return res; | ||
| } | ||
| function numberToBytesLE(n, len) { | ||
| export function numberToBytesLE(n, len) { | ||
| return numberToBytesBE(n, len).reverse(); | ||
| } | ||
| // Unpadded, rarely used | ||
| function numberToVarBytesBE(n) { | ||
| return (0, utils_js_1.hexToBytes)(numberToHexUnpadded(n)); | ||
| export function numberToVarBytesBE(n) { | ||
| return hexToBytes_(numberToHexUnpadded(abignumer(n))); | ||
| } | ||
| /** | ||
| * Takes hex string or Uint8Array, converts to Uint8Array. | ||
| * Validates output length. | ||
| * Will throw error for other types. | ||
| * @param title descriptive title for an error e.g. 'secret key' | ||
| * @param hex hex string or Uint8Array | ||
| * @param expectedLength optional, will compare to result array's length | ||
| * @returns | ||
| */ | ||
| function ensureBytes(title, hex, expectedLength) { | ||
| let res; | ||
| if (typeof hex === 'string') { | ||
| try { | ||
| res = (0, utils_js_1.hexToBytes)(hex); | ||
| } | ||
| catch (e) { | ||
| throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e); | ||
| } | ||
| } | ||
| else if ((0, utils_js_1.isBytes)(hex)) { | ||
| // Uint8Array.from() instead of hash.slice() because node.js Buffer | ||
| // is instance of Uint8Array, and its slice() creates **mutable** copy | ||
| res = Uint8Array.from(hex); | ||
| } | ||
| else { | ||
| throw new Error(title + ' must be hex string or Uint8Array'); | ||
| } | ||
| const len = res.length; | ||
| if (typeof expectedLength === 'number' && len !== expectedLength) | ||
| throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len); | ||
| return res; | ||
| } | ||
| // Compares 2 u8a-s in kinda constant time | ||
| function equalBytes(a, b) { | ||
| export function equalBytes(a, b) { | ||
| if (a.length !== b.length) | ||
@@ -148,3 +74,3 @@ return false; | ||
| */ | ||
| function copyBytes(bytes) { | ||
| export function copyBytes(bytes) { | ||
| return Uint8Array.from(bytes); | ||
@@ -157,3 +83,3 @@ } | ||
| */ | ||
| function asciiToBytes(ascii) { | ||
| export function asciiToBytes(ascii) { | ||
| return Uint8Array.from(ascii, (c, i) => { | ||
@@ -178,3 +104,3 @@ const charCode = c.charCodeAt(0); | ||
| const isPosBig = (n) => typeof n === 'bigint' && _0n <= n; | ||
| function inRange(n, min, max) { | ||
| export function inRange(n, min, max) { | ||
| return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max; | ||
@@ -187,3 +113,3 @@ } | ||
| */ | ||
| function aInRange(title, n, min, max) { | ||
| export function aInRange(title, n, min, max) { | ||
| // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)? | ||
@@ -203,3 +129,3 @@ // consider P=256n, min=0n, max=P | ||
| */ | ||
| function bitLen(n) { | ||
| export function bitLen(n) { | ||
| let len; | ||
@@ -215,3 +141,3 @@ for (len = 0; n > _0n; n >>= _1n, len += 1) | ||
| */ | ||
| function bitGet(n, pos) { | ||
| export function bitGet(n, pos) { | ||
| return (n >> BigInt(pos)) & _1n; | ||
@@ -222,3 +148,3 @@ } | ||
| */ | ||
| function bitSet(n, pos, value) { | ||
| export function bitSet(n, pos, value) { | ||
| return n | ((value ? _1n : _0n) << BigInt(pos)); | ||
@@ -230,4 +156,3 @@ } | ||
| */ | ||
| const bitMask = (n) => (_1n << BigInt(n)) - _1n; | ||
| exports.bitMask = bitMask; | ||
| export const bitMask = (n) => (_1n << BigInt(n)) - _1n; | ||
| /** | ||
@@ -240,3 +165,3 @@ * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs. | ||
| */ | ||
| function createHmacDrbg(hashLen, qByteLen, hmacFn) { | ||
| export function createHmacDrbg(hashLen, qByteLen, hmacFn) { | ||
| if (typeof hashLen !== 'number' || hashLen < 2) | ||
@@ -281,3 +206,3 @@ throw new Error('hashLen must be a number'); | ||
| } | ||
| return (0, utils_js_1.concatBytes)(...out); | ||
| return concatBytes_(...out); | ||
| }; | ||
@@ -301,3 +226,3 @@ const genUntil = (seed, pred) => { | ||
| string: (val) => typeof val === 'string', | ||
| stringOrUint8Array: (val) => typeof val === 'string' || (0, utils_js_1.isBytes)(val), | ||
| stringOrUint8Array: (val) => typeof val === 'string' || isBytes_(val), | ||
| isSafeInteger: (val) => Number.isSafeInteger(val), | ||
@@ -309,3 +234,3 @@ array: (val) => Array.isArray(val), | ||
| // type Record<K extends string | number | symbol, T> = { [P in K]: T; } | ||
| function validateObject(object, validators, optValidators = {}) { | ||
| export function validateObject(object, validators, optValidators = {}) { | ||
| const checkField = (fieldName, type, isOptional) => { | ||
@@ -336,6 +261,6 @@ const checkVal = validatorFns[type]; | ||
| // const z4 = validateObject(o, { a: 'boolean', z: 'bug' }); | ||
| function isHash(val) { | ||
| export function isHash(val) { | ||
| return typeof val === 'function' && Number.isSafeInteger(val.outputLen); | ||
| } | ||
| function _validateObject(object, fields, optFields = {}) { | ||
| export function _validateObject(object, fields, optFields = {}) { | ||
| if (!object || typeof object !== 'object') | ||
@@ -357,6 +282,5 @@ throw new Error('expected valid options object'); | ||
| */ | ||
| const notImplemented = () => { | ||
| export const notImplemented = () => { | ||
| throw new Error('not implemented'); | ||
| }; | ||
| exports.notImplemented = notImplemented; | ||
| /** | ||
@@ -366,3 +290,3 @@ * Memoizes (caches) computation result. | ||
| */ | ||
| function memoized(fn) { | ||
| export function memoized(fn) { | ||
| const map = new WeakMap(); | ||
@@ -369,0 +293,0 @@ return (arg, ...args) => { |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Utilities for short weierstrass curves, combined with noble-hashes. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type CurveFn, type CurveType } from './abstract/weierstrass.ts'; | ||
| import type { CHash } from './utils.ts'; | ||
| /** connects noble-curves to noble-hashes */ | ||
| export declare function getHash(hash: CHash): { | ||
| hash: CHash; | ||
| }; | ||
| /** Same API as @noble/hashes, with ability to create curve with custom hash */ | ||
| export type CurveDef = Readonly<Omit<CurveType, 'hash'>>; | ||
| export type CurveFnWithCreate = CurveFn & { | ||
| create: (hash: CHash) => CurveFn; | ||
| }; | ||
| /** @deprecated use new `weierstrass()` and `ecdsa()` methods */ | ||
| export declare function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate; | ||
| //# sourceMappingURL=_shortw_utils.d.ts.map |
| {"version":3,"file":"_shortw_utils.d.ts","sourceRoot":"","sources":["../src/_shortw_utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,2BAA2B,CAAC;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,4CAA4C;AAC5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAEpD;AACD,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACzD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAA;CAAE,CAAC;AAE/E,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,iBAAiB,CAGjF"} |
| /** | ||
| * Utilities for short weierstrass curves, combined with noble-hashes. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { weierstrass } from "./abstract/weierstrass.js"; | ||
| /** connects noble-curves to noble-hashes */ | ||
| export function getHash(hash) { | ||
| return { hash }; | ||
| } | ||
| /** @deprecated use new `weierstrass()` and `ecdsa()` methods */ | ||
| export function createCurve(curveDef, defHash) { | ||
| const create = (hash) => weierstrass({ ...curveDef, hash: hash }); | ||
| return { ...create(defHash), create }; | ||
| } | ||
| //# sourceMappingURL=_shortw_utils.js.map |
| {"version":3,"file":"_shortw_utils.js","sourceRoot":"","sources":["../src/_shortw_utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAgC,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGtF,4CAA4C;AAC5C,MAAM,UAAU,OAAO,CAAC,IAAW;IACjC,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAKD,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,QAAkB,EAAE,OAAc;IAC5D,MAAM,MAAM,GAAG,CAAC,IAAW,EAAW,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAClF,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC"} |
| /** | ||
| * BLS != BLS. | ||
| * The file implements BLS (Boneh-Lynn-Shacham) signatures. | ||
| * Used in both BLS (Barreto-Lynn-Scott) and BN (Barreto-Naehrig) | ||
| * families of pairing-friendly curves. | ||
| * Consists of two curves: G1 and G2: | ||
| * - G1 is a subgroup of (x, y) E(Fq) over y² = x³ + 4. | ||
| * - G2 is a subgroup of ((x₁, x₂+i), (y₁, y₂+i)) E(Fq²) over y² = x³ + 4(1 + i) where i is √-1 | ||
| * - Gt, created by bilinear (ate) pairing e(G1, G2), consists of p-th roots of unity in | ||
| * Fq^k where k is embedding degree. Only degree 12 is currently supported, 24 is not. | ||
| * Pairing is used to aggregate and verify signatures. | ||
| * There are two modes of operation: | ||
| * - Long signatures: X-byte keys + 2X-byte sigs (G1 keys + G2 sigs). | ||
| * - Short signatures: 2X-byte keys + X-byte sigs (G2 keys + G1 sigs). | ||
| * @module | ||
| **/ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type CHash, type Hex, type PrivKey } from '../utils.ts'; | ||
| import { type H2CHasher, type H2CHashOpts, type H2COpts, type htfBasicOpts, type MapToCurve } from './hash-to-curve.ts'; | ||
| import { type IField } from './modular.ts'; | ||
| import type { Fp12, Fp12Bls, Fp2, Fp2Bls, Fp6Bls } from './tower.ts'; | ||
| import { type CurvePointsRes, type CurvePointsType, type WeierstrassPoint, type WeierstrassPointCons } from './weierstrass.ts'; | ||
| type Fp = bigint; | ||
| export type TwistType = 'multiplicative' | 'divisive'; | ||
| export type ShortSignatureCoder<Fp> = { | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>; | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp>; | ||
| toBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| toHex(point: WeierstrassPoint<Fp>): string; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| }; | ||
| export type SignatureCoder<Fp> = { | ||
| fromBytes(bytes: Uint8Array): WeierstrassPoint<Fp>; | ||
| fromHex(hex: Hex): WeierstrassPoint<Fp>; | ||
| toBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| toHex(point: WeierstrassPoint<Fp>): string; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(point: WeierstrassPoint<Fp>): Uint8Array; | ||
| }; | ||
| export type BlsFields = { | ||
| Fp: IField<Fp>; | ||
| Fr: IField<bigint>; | ||
| Fp2: Fp2Bls; | ||
| Fp6: Fp6Bls; | ||
| Fp12: Fp12Bls; | ||
| }; | ||
| export type PostPrecomputePointAddFn = (Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2) => { | ||
| Rx: Fp2; | ||
| Ry: Fp2; | ||
| Rz: Fp2; | ||
| }; | ||
| export type PostPrecomputeFn = (Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2, pointAdd: PostPrecomputePointAddFn) => void; | ||
| export type BlsPairing = { | ||
| Fp12: Fp12Bls; | ||
| calcPairingPrecomputes: (p: WeierstrassPoint<Fp2>) => Precompute; | ||
| millerLoopBatch: (pairs: [Precompute, Fp, Fp][]) => Fp12; | ||
| pairing: (P: WeierstrassPoint<Fp>, Q: WeierstrassPoint<Fp2>, withFinalExponent?: boolean) => Fp12; | ||
| pairingBatch: (pairs: { | ||
| g1: WeierstrassPoint<Fp>; | ||
| g2: WeierstrassPoint<Fp2>; | ||
| }[], withFinalExponent?: boolean) => Fp12; | ||
| }; | ||
| export type BlsPairingParams = { | ||
| ateLoopSize: bigint; | ||
| xNegative: boolean; | ||
| twistType: TwistType; | ||
| postPrecompute?: PostPrecomputeFn; | ||
| }; | ||
| export type CurveType = { | ||
| G1: CurvePointsType<Fp> & { | ||
| ShortSignature: SignatureCoder<Fp>; | ||
| mapToCurve: MapToCurve<Fp>; | ||
| htfDefaults: H2COpts; | ||
| }; | ||
| G2: CurvePointsType<Fp2> & { | ||
| Signature: SignatureCoder<Fp2>; | ||
| mapToCurve: MapToCurve<Fp2>; | ||
| htfDefaults: H2COpts; | ||
| }; | ||
| fields: BlsFields; | ||
| params: { | ||
| ateLoopSize: BlsPairingParams['ateLoopSize']; | ||
| xNegative: BlsPairingParams['xNegative']; | ||
| r: bigint; | ||
| twistType: BlsPairingParams['twistType']; | ||
| }; | ||
| htfDefaults: H2COpts; | ||
| hash: CHash; | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| postPrecompute?: PostPrecomputeFn; | ||
| }; | ||
| type PrecomputeSingle = [Fp2, Fp2, Fp2][]; | ||
| type Precompute = PrecomputeSingle[]; | ||
| /** | ||
| * BLS consists of two curves: G1 and G2: | ||
| * - G1 is a subgroup of (x, y) E(Fq) over y² = x³ + 4. | ||
| * - G2 is a subgroup of ((x₁, x₂+i), (y₁, y₂+i)) E(Fq²) over y² = x³ + 4(1 + i) where i is √-1 | ||
| */ | ||
| export interface BLSCurvePair { | ||
| longSignatures: BLSSigs<bigint, Fp2>; | ||
| shortSignatures: BLSSigs<Fp2, bigint>; | ||
| millerLoopBatch: BlsPairing['millerLoopBatch']; | ||
| pairing: BlsPairing['pairing']; | ||
| pairingBatch: BlsPairing['pairingBatch']; | ||
| G1: { | ||
| Point: WeierstrassPointCons<bigint>; | ||
| } & H2CHasher<Fp>; | ||
| G2: { | ||
| Point: WeierstrassPointCons<Fp2>; | ||
| } & H2CHasher<Fp2>; | ||
| fields: { | ||
| Fp: IField<Fp>; | ||
| Fp2: Fp2Bls; | ||
| Fp6: Fp6Bls; | ||
| Fp12: Fp12Bls; | ||
| Fr: IField<bigint>; | ||
| }; | ||
| utils: { | ||
| randomSecretKey: () => Uint8Array; | ||
| /** @deprecated use randomSecretKey */ | ||
| randomPrivateKey: () => Uint8Array; | ||
| calcPairingPrecomputes: BlsPairing['calcPairingPrecomputes']; | ||
| }; | ||
| } | ||
| export type CurveFn = BLSCurvePair & { | ||
| /** @deprecated use `longSignatures.getPublicKey` */ | ||
| getPublicKey: (secretKey: PrivKey) => Uint8Array; | ||
| /** @deprecated use `shortSignatures.getPublicKey` */ | ||
| getPublicKeyForShortSignatures: (secretKey: PrivKey) => Uint8Array; | ||
| /** @deprecated use `longSignatures.sign` */ | ||
| sign: { | ||
| (message: Hex, secretKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array; | ||
| (message: WeierstrassPoint<Fp2>, secretKey: PrivKey, htfOpts?: htfBasicOpts): WeierstrassPoint<Fp2>; | ||
| }; | ||
| /** @deprecated use `shortSignatures.sign` */ | ||
| signShortSignature: { | ||
| (message: Hex, secretKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array; | ||
| (message: WeierstrassPoint<Fp>, secretKey: PrivKey, htfOpts?: htfBasicOpts): WeierstrassPoint<Fp>; | ||
| }; | ||
| /** @deprecated use `longSignatures.verify` */ | ||
| verify: (signature: Hex | WeierstrassPoint<Fp2>, message: Hex | WeierstrassPoint<Fp2>, publicKey: Hex | WeierstrassPoint<Fp>, htfOpts?: htfBasicOpts) => boolean; | ||
| /** @deprecated use `shortSignatures.verify` */ | ||
| verifyShortSignature: (signature: Hex | WeierstrassPoint<Fp>, message: Hex | WeierstrassPoint<Fp>, publicKey: Hex | WeierstrassPoint<Fp2>, htfOpts?: htfBasicOpts) => boolean; | ||
| verifyBatch: (signature: Hex | WeierstrassPoint<Fp2>, messages: (Hex | WeierstrassPoint<Fp2>)[], publicKeys: (Hex | WeierstrassPoint<Fp>)[], htfOpts?: htfBasicOpts) => boolean; | ||
| /** @deprecated use `longSignatures.aggregatePublicKeys` */ | ||
| aggregatePublicKeys: { | ||
| (publicKeys: Hex[]): Uint8Array; | ||
| (publicKeys: WeierstrassPoint<Fp>[]): WeierstrassPoint<Fp>; | ||
| }; | ||
| /** @deprecated use `longSignatures.aggregateSignatures` */ | ||
| aggregateSignatures: { | ||
| (signatures: Hex[]): Uint8Array; | ||
| (signatures: WeierstrassPoint<Fp2>[]): WeierstrassPoint<Fp2>; | ||
| }; | ||
| /** @deprecated use `shortSignatures.aggregateSignatures` */ | ||
| aggregateShortSignatures: { | ||
| (signatures: Hex[]): Uint8Array; | ||
| (signatures: WeierstrassPoint<Fp>[]): WeierstrassPoint<Fp>; | ||
| }; | ||
| G1: CurvePointsRes<Fp> & H2CHasher<Fp>; | ||
| G2: CurvePointsRes<Fp2> & H2CHasher<Fp2>; | ||
| /** @deprecated use `longSignatures.Signature` */ | ||
| Signature: SignatureCoder<Fp2>; | ||
| /** @deprecated use `shortSignatures.Signature` */ | ||
| ShortSignature: ShortSignatureCoder<Fp>; | ||
| params: { | ||
| ateLoopSize: bigint; | ||
| r: bigint; | ||
| twistType: TwistType; | ||
| /** @deprecated */ | ||
| G1b: bigint; | ||
| /** @deprecated */ | ||
| G2b: Fp2; | ||
| }; | ||
| }; | ||
| type BLSInput = Hex | Uint8Array; | ||
| export interface BLSSigs<P, S> { | ||
| getPublicKey(secretKey: PrivKey): WeierstrassPoint<P>; | ||
| sign(hashedMessage: WeierstrassPoint<S>, secretKey: PrivKey): WeierstrassPoint<S>; | ||
| verify(signature: WeierstrassPoint<S> | BLSInput, message: WeierstrassPoint<S>, publicKey: WeierstrassPoint<P> | BLSInput): boolean; | ||
| verifyBatch: (signature: WeierstrassPoint<S> | BLSInput, messages: WeierstrassPoint<S>[], publicKeys: (WeierstrassPoint<P> | BLSInput)[]) => boolean; | ||
| aggregatePublicKeys(publicKeys: (WeierstrassPoint<P> | BLSInput)[]): WeierstrassPoint<P>; | ||
| aggregateSignatures(signatures: (WeierstrassPoint<S> | BLSInput)[]): WeierstrassPoint<S>; | ||
| hash(message: Uint8Array, DST?: string | Uint8Array, hashOpts?: H2CHashOpts): WeierstrassPoint<S>; | ||
| Signature: SignatureCoder<S>; | ||
| } | ||
| export declare function bls(CURVE: CurveType): CurveFn; | ||
| export {}; | ||
| //# sourceMappingURL=bls.d.ts.map |
| {"version":3,"file":"bls.d.ts","sourceRoot":"","sources":["../../src/abstract/bls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;IAeI;AACJ,sEAAsE;AACtE,OAAO,EAKL,KAAK,KAAK,EACV,KAAK,GAAG,EACR,KAAK,OAAO,EACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,OAAO,EAEZ,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAoC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,KAAK,EAAE,GAAG,MAAM,CAAC;AAKjB,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG,UAAU,CAAC;AAEtD,MAAM,MAAM,mBAAmB,CAAC,EAAE,IAAI;IACpC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;IACjD,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;IAC3C,gCAAgC;IAChC,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,EAAE,IAAI;IAC/B,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;IACjD,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;IAC3C,gCAAgC;IAChC,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACrC,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,KACJ;IAAE,EAAE,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,GAAG,CAAA;CAAE,CAAC;AACnC,MAAM,MAAM,gBAAgB,GAAG,CAC7B,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,wBAAwB,KAC/B,IAAI,CAAC;AACV,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,sBAAsB,EAAE,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC;IACjE,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAClG,YAAY,EAAE,CACZ,KAAK,EAAE;QAAE,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;KAAE,EAAE,EAChE,iBAAiB,CAAC,EAAE,OAAO,KACxB,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAI7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IAErB,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC,GAAG;QACxB,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;QACnC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG;QACzB,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/B,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE;QAIN,WAAW,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC7C,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC,EAAE,MAAM,CAAC;QACV,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;KAC1C,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,KAAK,CAAC;IACZ,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;IAEnD,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,KAAK,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAC1C,KAAK,UAAU,GAAG,gBAAgB,EAAE,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,eAAe,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC/C,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IACzC,EAAE,EAAE;QAAE,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5D,EAAE,EAAE;QAAE,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;KACpB,CAAC;IACF,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,UAAU,CAAC;QAClC,sCAAsC;QACtC,gBAAgB,EAAE,MAAM,UAAU,CAAC;QACnC,sBAAsB,EAAE,UAAU,CAAC,wBAAwB,CAAC,CAAC;KAC9D,CAAC;CACH;AAED,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG;IACnC,oDAAoD;IACpD,YAAY,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,UAAU,CAAC;IACjD,qDAAqD;IACrD,8BAA8B,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,UAAU,CAAC;IACnE,4CAA4C;IAC5C,IAAI,EAAE;QACJ,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;QACvE,CACE,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC9B,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,gBAAgB,CAAC,GAAG,CAAC,CAAC;KAC1B,CAAC;IACF,6CAA6C;IAC7C,kBAAkB,EAAE;QAClB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;QACvE,CACE,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAC7B,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,gBAAgB,CAAC,EAAE,CAAC,CAAC;KACzB,CAAC;IACF,8CAA8C;IAC9C,MAAM,EAAE,CACN,SAAS,EAAE,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,EACtC,OAAO,EAAE,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,EACpC,SAAS,EAAE,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,EACrC,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC;IACb,+CAA+C;IAC/C,oBAAoB,EAAE,CACpB,SAAS,EAAE,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,EACrC,OAAO,EAAE,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,EACnC,SAAS,EAAE,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,EACtC,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC;IACb,WAAW,EAAE,CACX,SAAS,EAAE,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,EACtC,QAAQ,EAAE,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EACzC,UAAU,EAAE,CAAC,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,EAC1C,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC;IACb,2DAA2D;IAC3D,mBAAmB,EAAE;QACnB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;QAChC,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC5D,CAAC;IACF,2DAA2D;IAC3D,mBAAmB,EAAE;QACnB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;QAChC,CAAC,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;KAC9D,CAAC;IACF,4DAA4D;IAC5D,wBAAwB,EAAE;QACxB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;QAChC,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC5D,CAAC;IACF,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IACvC,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACzC,iDAAiD;IACjD,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,kDAAkD;IAClD,cAAc,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,SAAS,EAAE,SAAS,CAAC;QACrB,kBAAkB;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,kBAAkB;QAClB,GAAG,EAAE,GAAG,CAAC;KACV,CAAC;CACH,CAAC;AAEF,KAAK,QAAQ,GAAG,GAAG,GAAG,UAAU,CAAC;AACjC,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3B,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,CACJ,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ,EACzC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC5B,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ,GACxC,OAAO,CAAC;IACX,WAAW,EAAE,CACX,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ,EACzC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAC/B,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,KAC3C,OAAO,CAAC;IACb,mBAAmB,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACzF,mBAAmB,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClG,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;CAC9B;AA6SD,wBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAiL7C"} |
| /** | ||
| * BLS != BLS. | ||
| * The file implements BLS (Boneh-Lynn-Shacham) signatures. | ||
| * Used in both BLS (Barreto-Lynn-Scott) and BN (Barreto-Naehrig) | ||
| * families of pairing-friendly curves. | ||
| * Consists of two curves: G1 and G2: | ||
| * - G1 is a subgroup of (x, y) E(Fq) over y² = x³ + 4. | ||
| * - G2 is a subgroup of ((x₁, x₂+i), (y₁, y₂+i)) E(Fq²) over y² = x³ + 4(1 + i) where i is √-1 | ||
| * - Gt, created by bilinear (ate) pairing e(G1, G2), consists of p-th roots of unity in | ||
| * Fq^k where k is embedding degree. Only degree 12 is currently supported, 24 is not. | ||
| * Pairing is used to aggregate and verify signatures. | ||
| * There are two modes of operation: | ||
| * - Long signatures: X-byte keys + 2X-byte sigs (G1 keys + G2 sigs). | ||
| * - Short signatures: 2X-byte keys + X-byte sigs (G2 keys + G1 sigs). | ||
| * @module | ||
| **/ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { abytes, ensureBytes, memoized, randomBytes, } from "../utils.js"; | ||
| import { normalizeZ } from "./curve.js"; | ||
| import { createHasher, } from "./hash-to-curve.js"; | ||
| import { getMinHashLength, mapHashToField } from "./modular.js"; | ||
| import { _normFnElement, weierstrassPoints, } from "./weierstrass.js"; | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| // Not used with BLS12-381 (no sequential `11` in X). Useful for other curves. | ||
| function NAfDecomposition(a) { | ||
| const res = []; | ||
| // a>1 because of marker bit | ||
| for (; a > _1n; a >>= _1n) { | ||
| if ((a & _1n) === _0n) | ||
| res.unshift(0); | ||
| else if ((a & _3n) === _3n) { | ||
| res.unshift(-1); | ||
| a += _1n; | ||
| } | ||
| else | ||
| res.unshift(1); | ||
| } | ||
| return res; | ||
| } | ||
| function aNonEmpty(arr) { | ||
| if (!Array.isArray(arr) || arr.length === 0) | ||
| throw new Error('expected non-empty array'); | ||
| } | ||
| // This should be enough for bn254, no need to export full stuff? | ||
| function createBlsPairing(fields, G1, G2, params) { | ||
| const { Fp2, Fp12 } = fields; | ||
| const { twistType, ateLoopSize, xNegative, postPrecompute } = params; | ||
| // Applies sparse multiplication as line function | ||
| let lineFunction; | ||
| if (twistType === 'multiplicative') { | ||
| lineFunction = (c0, c1, c2, f, Px, Py) => Fp12.mul014(f, c0, Fp2.mul(c1, Px), Fp2.mul(c2, Py)); | ||
| } | ||
| else if (twistType === 'divisive') { | ||
| // NOTE: it should be [c0, c1, c2], but we use different order here to reduce complexity of | ||
| // precompute calculations. | ||
| lineFunction = (c0, c1, c2, f, Px, Py) => Fp12.mul034(f, Fp2.mul(c2, Py), Fp2.mul(c1, Px), c0); | ||
| } | ||
| else | ||
| throw new Error('bls: unknown twist type'); | ||
| const Fp2div2 = Fp2.div(Fp2.ONE, Fp2.mul(Fp2.ONE, _2n)); | ||
| function pointDouble(ell, Rx, Ry, Rz) { | ||
| const t0 = Fp2.sqr(Ry); // Ry² | ||
| const t1 = Fp2.sqr(Rz); // Rz² | ||
| const t2 = Fp2.mulByB(Fp2.mul(t1, _3n)); // 3 * T1 * B | ||
| const t3 = Fp2.mul(t2, _3n); // 3 * T2 | ||
| const t4 = Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(Ry, Rz)), t1), t0); // (Ry + Rz)² - T1 - T0 | ||
| const c0 = Fp2.sub(t2, t0); // T2 - T0 (i) | ||
| const c1 = Fp2.mul(Fp2.sqr(Rx), _3n); // 3 * Rx² | ||
| const c2 = Fp2.neg(t4); // -T4 (-h) | ||
| ell.push([c0, c1, c2]); | ||
| Rx = Fp2.mul(Fp2.mul(Fp2.mul(Fp2.sub(t0, t3), Rx), Ry), Fp2div2); // ((T0 - T3) * Rx * Ry) / 2 | ||
| Ry = Fp2.sub(Fp2.sqr(Fp2.mul(Fp2.add(t0, t3), Fp2div2)), Fp2.mul(Fp2.sqr(t2), _3n)); // ((T0 + T3) / 2)² - 3 * T2² | ||
| Rz = Fp2.mul(t0, t4); // T0 * T4 | ||
| return { Rx, Ry, Rz }; | ||
| } | ||
| function pointAdd(ell, Rx, Ry, Rz, Qx, Qy) { | ||
| // Addition | ||
| const t0 = Fp2.sub(Ry, Fp2.mul(Qy, Rz)); // Ry - Qy * Rz | ||
| const t1 = Fp2.sub(Rx, Fp2.mul(Qx, Rz)); // Rx - Qx * Rz | ||
| const c0 = Fp2.sub(Fp2.mul(t0, Qx), Fp2.mul(t1, Qy)); // T0 * Qx - T1 * Qy == Ry * Qx - Rx * Qy | ||
| const c1 = Fp2.neg(t0); // -T0 == Qy * Rz - Ry | ||
| const c2 = t1; // == Rx - Qx * Rz | ||
| ell.push([c0, c1, c2]); | ||
| const t2 = Fp2.sqr(t1); // T1² | ||
| const t3 = Fp2.mul(t2, t1); // T2 * T1 | ||
| const t4 = Fp2.mul(t2, Rx); // T2 * Rx | ||
| const t5 = Fp2.add(Fp2.sub(t3, Fp2.mul(t4, _2n)), Fp2.mul(Fp2.sqr(t0), Rz)); // T3 - 2 * T4 + T0² * Rz | ||
| Rx = Fp2.mul(t1, t5); // T1 * T5 | ||
| Ry = Fp2.sub(Fp2.mul(Fp2.sub(t4, t5), t0), Fp2.mul(t3, Ry)); // (T4 - T5) * T0 - T3 * Ry | ||
| Rz = Fp2.mul(Rz, t3); // Rz * T3 | ||
| return { Rx, Ry, Rz }; | ||
| } | ||
| // Pre-compute coefficients for sparse multiplication | ||
| // Point addition and point double calculations is reused for coefficients | ||
| // pointAdd happens only if bit set, so wNAF is reasonable. Unfortunately we cannot combine | ||
| // add + double in windowed precomputes here, otherwise it would be single op (since X is static) | ||
| const ATE_NAF = NAfDecomposition(ateLoopSize); | ||
| const calcPairingPrecomputes = memoized((point) => { | ||
| const p = point; | ||
| const { x, y } = p.toAffine(); | ||
| // prettier-ignore | ||
| const Qx = x, Qy = y, negQy = Fp2.neg(y); | ||
| // prettier-ignore | ||
| let Rx = Qx, Ry = Qy, Rz = Fp2.ONE; | ||
| const ell = []; | ||
| for (const bit of ATE_NAF) { | ||
| const cur = []; | ||
| ({ Rx, Ry, Rz } = pointDouble(cur, Rx, Ry, Rz)); | ||
| if (bit) | ||
| ({ Rx, Ry, Rz } = pointAdd(cur, Rx, Ry, Rz, Qx, bit === -1 ? negQy : Qy)); | ||
| ell.push(cur); | ||
| } | ||
| if (postPrecompute) { | ||
| const last = ell[ell.length - 1]; | ||
| postPrecompute(Rx, Ry, Rz, Qx, Qy, pointAdd.bind(null, last)); | ||
| } | ||
| return ell; | ||
| }); | ||
| function millerLoopBatch(pairs, withFinalExponent = false) { | ||
| let f12 = Fp12.ONE; | ||
| if (pairs.length) { | ||
| const ellLen = pairs[0][0].length; | ||
| for (let i = 0; i < ellLen; i++) { | ||
| f12 = Fp12.sqr(f12); // This allows us to do sqr only one time for all pairings | ||
| // NOTE: we apply multiple pairings in parallel here | ||
| for (const [ell, Px, Py] of pairs) { | ||
| for (const [c0, c1, c2] of ell[i]) | ||
| f12 = lineFunction(c0, c1, c2, f12, Px, Py); | ||
| } | ||
| } | ||
| } | ||
| if (xNegative) | ||
| f12 = Fp12.conjugate(f12); | ||
| return withFinalExponent ? Fp12.finalExponentiate(f12) : f12; | ||
| } | ||
| // Calculates product of multiple pairings | ||
| // This up to x2 faster than just `map(({g1, g2})=>pairing({g1,g2}))` | ||
| function pairingBatch(pairs, withFinalExponent = true) { | ||
| const res = []; | ||
| // Cache precomputed toAffine for all points | ||
| normalizeZ(G1, pairs.map(({ g1 }) => g1)); | ||
| normalizeZ(G2, pairs.map(({ g2 }) => g2)); | ||
| for (const { g1, g2 } of pairs) { | ||
| if (g1.is0() || g2.is0()) | ||
| throw new Error('pairing is not available for ZERO point'); | ||
| // This uses toAffine inside | ||
| g1.assertValidity(); | ||
| g2.assertValidity(); | ||
| const Qa = g1.toAffine(); | ||
| res.push([calcPairingPrecomputes(g2), Qa.x, Qa.y]); | ||
| } | ||
| return millerLoopBatch(res, withFinalExponent); | ||
| } | ||
| // Calculates bilinear pairing | ||
| function pairing(Q, P, withFinalExponent = true) { | ||
| return pairingBatch([{ g1: Q, g2: P }], withFinalExponent); | ||
| } | ||
| return { | ||
| Fp12, // NOTE: we re-export Fp12 here because pairing results are Fp12! | ||
| millerLoopBatch, | ||
| pairing, | ||
| pairingBatch, | ||
| calcPairingPrecomputes, | ||
| }; | ||
| } | ||
| function createBlsSig(blsPairing, PubCurve, SigCurve, SignatureCoder, isSigG1) { | ||
| const { Fp12, pairingBatch } = blsPairing; | ||
| function normPub(point) { | ||
| return point instanceof PubCurve.Point ? point : PubCurve.Point.fromHex(point); | ||
| } | ||
| function normSig(point) { | ||
| return point instanceof SigCurve.Point ? point : SigCurve.Point.fromHex(point); | ||
| } | ||
| function amsg(m) { | ||
| if (!(m instanceof SigCurve.Point)) | ||
| throw new Error(`expected valid message hashed to ${!isSigG1 ? 'G2' : 'G1'} curve`); | ||
| return m; | ||
| } | ||
| // What matters here is what point pairing API accepts as G1 or G2, not actual size or names | ||
| const pair = !isSigG1 | ||
| ? (a, b) => ({ g1: a, g2: b }) | ||
| : (a, b) => ({ g1: b, g2: a }); | ||
| return { | ||
| // P = pk x G | ||
| getPublicKey(secretKey) { | ||
| // TODO: replace with | ||
| // const sec = PubCurve.Point.Fn.fromBytes(secretKey); | ||
| const sec = _normFnElement(PubCurve.Point.Fn, secretKey); | ||
| return PubCurve.Point.BASE.multiply(sec); | ||
| }, | ||
| // S = pk x H(m) | ||
| sign(message, secretKey, unusedArg) { | ||
| if (unusedArg != null) | ||
| throw new Error('sign() expects 2 arguments'); | ||
| // TODO: replace with | ||
| // PubCurve.Point.Fn.fromBytes(secretKey) | ||
| const sec = _normFnElement(PubCurve.Point.Fn, secretKey); | ||
| amsg(message).assertValidity(); | ||
| return message.multiply(sec); | ||
| }, | ||
| // Checks if pairing of public key & hash is equal to pairing of generator & signature. | ||
| // e(P, H(m)) == e(G, S) | ||
| // e(S, G) == e(H(m), P) | ||
| verify(signature, message, publicKey, unusedArg) { | ||
| if (unusedArg != null) | ||
| throw new Error('verify() expects 3 arguments'); | ||
| signature = normSig(signature); | ||
| publicKey = normPub(publicKey); | ||
| const P = publicKey.negate(); | ||
| const G = PubCurve.Point.BASE; | ||
| const Hm = amsg(message); | ||
| const S = signature; | ||
| // This code was changed in 1.9.x: | ||
| // Before it was G.negate() in G2, now it's always pubKey.negate | ||
| // e(P, -Q)===e(-P, Q)==e(P, Q)^-1. Negate can be done anywhere (as long it is done once per pair). | ||
| // We just moving sign, but since pairing is multiplicative, we doing X * X^-1 = 1 | ||
| const exp = pairingBatch([pair(P, Hm), pair(G, S)]); | ||
| return Fp12.eql(exp, Fp12.ONE); | ||
| }, | ||
| // https://ethresear.ch/t/fast-verification-of-multiple-bls-signatures/5407 | ||
| // e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si)) | ||
| // TODO: maybe `{message: G2Hex, publicKey: G1Hex}[]` instead? | ||
| verifyBatch(signature, messages, publicKeys) { | ||
| aNonEmpty(messages); | ||
| if (publicKeys.length !== messages.length) | ||
| throw new Error('amount of public keys and messages should be equal'); | ||
| const sig = normSig(signature); | ||
| const nMessages = messages; | ||
| const nPublicKeys = publicKeys.map(normPub); | ||
| // NOTE: this works only for exact same object | ||
| const messagePubKeyMap = new Map(); | ||
| for (let i = 0; i < nPublicKeys.length; i++) { | ||
| const pub = nPublicKeys[i]; | ||
| const msg = nMessages[i]; | ||
| let keys = messagePubKeyMap.get(msg); | ||
| if (keys === undefined) { | ||
| keys = []; | ||
| messagePubKeyMap.set(msg, keys); | ||
| } | ||
| keys.push(pub); | ||
| } | ||
| const paired = []; | ||
| const G = PubCurve.Point.BASE; | ||
| try { | ||
| for (const [msg, keys] of messagePubKeyMap) { | ||
| const groupPublicKey = keys.reduce((acc, msg) => acc.add(msg)); | ||
| paired.push(pair(groupPublicKey, msg)); | ||
| } | ||
| paired.push(pair(G.negate(), sig)); | ||
| return Fp12.eql(pairingBatch(paired), Fp12.ONE); | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| }, | ||
| // Adds a bunch of public key points together. | ||
| // pk1 + pk2 + pk3 = pkA | ||
| aggregatePublicKeys(publicKeys) { | ||
| aNonEmpty(publicKeys); | ||
| publicKeys = publicKeys.map((pub) => normPub(pub)); | ||
| const agg = publicKeys.reduce((sum, p) => sum.add(p), PubCurve.Point.ZERO); | ||
| agg.assertValidity(); | ||
| return agg; | ||
| }, | ||
| // Adds a bunch of signature points together. | ||
| // pk1 + pk2 + pk3 = pkA | ||
| aggregateSignatures(signatures) { | ||
| aNonEmpty(signatures); | ||
| signatures = signatures.map((sig) => normSig(sig)); | ||
| const agg = signatures.reduce((sum, s) => sum.add(s), SigCurve.Point.ZERO); | ||
| agg.assertValidity(); | ||
| return agg; | ||
| }, | ||
| hash(messageBytes, DST) { | ||
| abytes(messageBytes); | ||
| const opts = DST ? { DST } : undefined; | ||
| return SigCurve.hashToCurve(messageBytes, opts); | ||
| }, | ||
| Signature: SignatureCoder, | ||
| }; | ||
| } | ||
| // G1_Point: ProjConstructor<bigint>, G2_Point: ProjConstructor<Fp2>, | ||
| export function bls(CURVE) { | ||
| // Fields are specific for curve, so for now we'll need to pass them with opts | ||
| const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields; | ||
| // Point on G1 curve: (x, y) | ||
| const G1_ = weierstrassPoints(CURVE.G1); | ||
| const G1 = Object.assign(G1_, createHasher(G1_.Point, CURVE.G1.mapToCurve, { | ||
| ...CURVE.htfDefaults, | ||
| ...CURVE.G1.htfDefaults, | ||
| })); | ||
| // Point on G2 curve (complex numbers): (x₁, x₂+i), (y₁, y₂+i) | ||
| const G2_ = weierstrassPoints(CURVE.G2); | ||
| const G2 = Object.assign(G2_, createHasher(G2_.Point, CURVE.G2.mapToCurve, { | ||
| ...CURVE.htfDefaults, | ||
| ...CURVE.G2.htfDefaults, | ||
| })); | ||
| const pairingRes = createBlsPairing(CURVE.fields, G1.Point, G2.Point, { | ||
| ...CURVE.params, | ||
| postPrecompute: CURVE.postPrecompute, | ||
| }); | ||
| const { millerLoopBatch, pairing, pairingBatch, calcPairingPrecomputes } = pairingRes; | ||
| const longSignatures = createBlsSig(pairingRes, G1, G2, CURVE.G2.Signature, false); | ||
| const shortSignatures = createBlsSig(pairingRes, G2, G1, CURVE.G1.ShortSignature, true); | ||
| const rand = CURVE.randomBytes || randomBytes; | ||
| const randomSecretKey = () => { | ||
| const length = getMinHashLength(Fr.ORDER); | ||
| return mapHashToField(rand(length), Fr.ORDER); | ||
| }; | ||
| const utils = { | ||
| randomSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| calcPairingPrecomputes, | ||
| }; | ||
| const { ShortSignature } = CURVE.G1; | ||
| const { Signature } = CURVE.G2; | ||
| function normP1Hash(point, htfOpts) { | ||
| return point instanceof G1.Point | ||
| ? point | ||
| : shortSignatures.hash(ensureBytes('point', point), htfOpts?.DST); | ||
| } | ||
| function normP2Hash(point, htfOpts) { | ||
| return point instanceof G2.Point | ||
| ? point | ||
| : longSignatures.hash(ensureBytes('point', point), htfOpts?.DST); | ||
| } | ||
| function getPublicKey(privateKey) { | ||
| return longSignatures.getPublicKey(privateKey).toBytes(true); | ||
| } | ||
| function getPublicKeyForShortSignatures(privateKey) { | ||
| return shortSignatures.getPublicKey(privateKey).toBytes(true); | ||
| } | ||
| function sign(message, privateKey, htfOpts) { | ||
| const Hm = normP2Hash(message, htfOpts); | ||
| const S = longSignatures.sign(Hm, privateKey); | ||
| return message instanceof G2.Point ? S : Signature.toBytes(S); | ||
| } | ||
| function signShortSignature(message, privateKey, htfOpts) { | ||
| const Hm = normP1Hash(message, htfOpts); | ||
| const S = shortSignatures.sign(Hm, privateKey); | ||
| return message instanceof G1.Point ? S : ShortSignature.toBytes(S); | ||
| } | ||
| function verify(signature, message, publicKey, htfOpts) { | ||
| const Hm = normP2Hash(message, htfOpts); | ||
| return longSignatures.verify(signature, Hm, publicKey); | ||
| } | ||
| function verifyShortSignature(signature, message, publicKey, htfOpts) { | ||
| const Hm = normP1Hash(message, htfOpts); | ||
| return shortSignatures.verify(signature, Hm, publicKey); | ||
| } | ||
| function aggregatePublicKeys(publicKeys) { | ||
| const agg = longSignatures.aggregatePublicKeys(publicKeys); | ||
| return publicKeys[0] instanceof G1.Point ? agg : agg.toBytes(true); | ||
| } | ||
| function aggregateSignatures(signatures) { | ||
| const agg = longSignatures.aggregateSignatures(signatures); | ||
| return signatures[0] instanceof G2.Point ? agg : Signature.toBytes(agg); | ||
| } | ||
| function aggregateShortSignatures(signatures) { | ||
| const agg = shortSignatures.aggregateSignatures(signatures); | ||
| return signatures[0] instanceof G1.Point ? agg : ShortSignature.toBytes(agg); | ||
| } | ||
| function verifyBatch(signature, messages, publicKeys, htfOpts) { | ||
| const Hm = messages.map((m) => normP2Hash(m, htfOpts)); | ||
| return longSignatures.verifyBatch(signature, Hm, publicKeys); | ||
| } | ||
| G1.Point.BASE.precompute(4); | ||
| return { | ||
| longSignatures, | ||
| shortSignatures, | ||
| millerLoopBatch, | ||
| pairing, | ||
| pairingBatch, | ||
| verifyBatch, | ||
| fields: { | ||
| Fr, | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| }, | ||
| params: { | ||
| ateLoopSize: CURVE.params.ateLoopSize, | ||
| twistType: CURVE.params.twistType, | ||
| // deprecated | ||
| r: CURVE.params.r, | ||
| G1b: CURVE.G1.b, | ||
| G2b: CURVE.G2.b, | ||
| }, | ||
| utils, | ||
| // deprecated | ||
| getPublicKey, | ||
| getPublicKeyForShortSignatures, | ||
| sign, | ||
| signShortSignature, | ||
| verify, | ||
| verifyShortSignature, | ||
| aggregatePublicKeys, | ||
| aggregateSignatures, | ||
| aggregateShortSignatures, | ||
| G1, | ||
| G2, | ||
| Signature, | ||
| ShortSignature, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=bls.js.map |
| {"version":3,"file":"bls.js","sourceRoot":"","sources":["../../src/abstract/bls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;IAeI;AACJ,sEAAsE;AACtE,OAAO,EACL,MAAM,EACN,WAAW,EACX,QAAQ,EACR,WAAW,GAIZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EACL,YAAY,GAOb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAe,MAAM,cAAc,CAAC;AAE7E,OAAO,EACL,cAAc,EACd,iBAAiB,GAKlB,MAAM,kBAAkB,CAAC;AAI1B,kBAAkB;AAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AA4NzE,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,CAAS;IACjC,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG;YAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACjC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC,IAAI,GAAG,CAAC;QACX,CAAC;;YAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,GAAU;IAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC3F,CAAC;AAED,iEAAiE;AACjE,SAAS,gBAAgB,CACvB,MAAiB,EACjB,EAA4B,EAC5B,EAA6B,EAC7B,MAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAGrE,iDAAiD;IACjD,IAAI,YAA0E,CAAC;IAC/E,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;QACnC,YAAY,GAAG,CAAC,EAAO,EAAE,EAAO,EAAE,EAAO,EAAE,CAAO,EAAE,EAAM,EAAE,EAAM,EAAE,EAAE,CACpE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,2FAA2F;QAC3F,2BAA2B;QAC3B,YAAY,GAAG,CAAC,EAAO,EAAE,EAAO,EAAE,EAAO,EAAE,CAAO,EAAE,EAAM,EAAE,EAAM,EAAE,EAAE,CACpE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;;QAAM,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,SAAS,WAAW,CAAC,GAAqB,EAAE,EAAO,EAAE,EAAO,EAAE,EAAO;QACnE,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;QAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;QAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa;QACtD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS;QACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB;QACtF,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc;QAC1C,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU;QAChD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;QAEnC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEvB,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,4BAA4B;QAC9F,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B;QAClH,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;QAChC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IACD,SAAS,QAAQ,CAAC,GAAqB,EAAE,EAAO,EAAE,EAAO,EAAE,EAAO,EAAE,EAAO,EAAE,EAAO;QAClF,WAAW;QACX,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;QACxD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;QACxD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAChG,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB;QAC9C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,kBAAkB;QAEjC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEvB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;QAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;QACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;QACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB;QACtG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;QAChC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,2BAA2B;QACxF,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;QAChC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAED,qDAAqD;IACrD,0EAA0E;IAC1E,2FAA2F;IAC3F,iGAAiG;IACjG,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE9C,MAAM,sBAAsB,GAAG,QAAQ,CAAC,CAAC,KAAS,EAAE,EAAE;QACpD,MAAM,CAAC,GAAG,KAAK,CAAC;QAChB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9B,kBAAkB;QAClB,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,kBAAkB;QAClB,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;QACnC,MAAM,GAAG,GAAe,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAqB,EAAE,CAAC;YACjC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,GAAG;gBAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnF,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAKH,SAAS,eAAe,CAAC,KAAkB,EAAE,oBAA6B,KAAK;QAC7E,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,0DAA0D;gBAC/E,oDAAoD;gBACpD,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;oBAClC,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;wBAAE,GAAG,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,SAAS;YAAE,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,CAAC;IAED,0CAA0C;IAC1C,qEAAqE;IACrE,SAAS,YAAY,CAAC,KAAqB,EAAE,oBAA6B,IAAI;QAC5E,MAAM,GAAG,GAAgB,EAAE,CAAC;QAC5B,4CAA4C;QAC5C,UAAU,CACR,EAAE,EACF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAC1B,CAAC;QACF,UAAU,CACR,EAAE,EACF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAC1B,CAAC;QACF,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACrF,4BAA4B;YAC5B,EAAE,CAAC,cAAc,EAAE,CAAC;YACpB,EAAE,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACjD,CAAC;IACD,8BAA8B;IAC9B,SAAS,OAAO,CAAC,CAAK,EAAE,CAAK,EAAE,oBAA6B,IAAI;QAC9D,OAAO,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,IAAI,EAAE,iEAAiE;QACvE,eAAe;QACf,OAAO;QACP,YAAY;QACZ,sBAAsB;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,UAAsB,EACtB,QAA0C,EAC1C,QAA0C,EAC1C,cAAiC,EACjC,OAAgB;IAEhB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC;IAG1C,SAAS,OAAO,CAAC,KAA0B;QACzC,OAAO,KAAK,YAAY,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,KAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/F,CAAC;IACD,SAAS,OAAO,CAAC,KAA0B;QACzC,OAAO,KAAK,YAAY,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,KAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/F,CAAC;IACD,SAAS,IAAI,CAAC,CAAU;QACtB,IAAI,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,KAAK,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;QACtF,OAAO,CAAa,CAAC;IACvB,CAAC;IAKD,4FAA4F;IAC5F,MAAM,IAAI,GAA+C,CAAC,OAAO;QAC/D,CAAC,CAAC,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAiB;QAClE,CAAC,CAAC,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAiB,CAAC;IACrE,OAAO;QACL,aAAa;QACb,YAAY,CAAC,SAAkB;YAC7B,qBAAqB;YACrB,sDAAsD;YACtD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACzD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,gBAAgB;QAChB,IAAI,CAAC,OAAiB,EAAE,SAAkB,EAAE,SAAe;YACzD,IAAI,SAAS,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACrE,qBAAqB;YACrB,yCAAyC;YACzC,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,uFAAuF;QACvF,wBAAwB;QACxB,wBAAwB;QACxB,MAAM,CACJ,SAA8B,EAC9B,OAAiB,EACjB,SAA8B,EAC9B,SAAe;YAEf,IAAI,SAAS,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACvE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/B,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,SAAS,CAAC;YACpB,kCAAkC;YAClC,gEAAgE;YAChE,mGAAmG;YACnG,kFAAkF;YAClF,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,2EAA2E;QAC3E,gDAAgD;QAChD,8DAA8D;QAC9D,WAAW,CACT,SAA8B,EAC9B,QAAoB,EACpB,UAAmC;YAEnC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;gBACvC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,8CAA8C;YAC9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwB,CAAC;YACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,IAAI,GAAG,EAAE,CAAC;oBACV,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC;gBACH,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,gBAAgB,EAAE,CAAC;oBAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,8CAA8C;QAC9C,wBAAwB;QACxB,mBAAmB,CAAC,UAAmC;YACrD,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,GAAI,UAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3F,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,6CAA6C;QAC7C,wBAAwB;QACxB,mBAAmB,CAAC,UAAmC;YACrD,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,GAAI,UAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3F,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,CAAC,YAAwB,EAAE,GAAyB;YACtD,MAAM,CAAC,YAAY,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACvC,OAAO,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAa,CAAC;QAC9D,CAAC;QACD,SAAS,EAAE,cAAc;KAC1B,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,GAAG,CAAC,KAAgB;IAClC,8EAA8E;IAC9E,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IAChD,4BAA4B;IAC5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CACtB,GAAG,EACH,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE;QAC3C,GAAG,KAAK,CAAC,WAAW;QACpB,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW;KACxB,CAAC,CACH,CAAC;IACF,8DAA8D;IAC9D,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CACtB,GAAG,EACH,YAAY,CAAC,GAAG,CAAC,KAAiC,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE;QACvE,GAAG,KAAK,CAAC,WAAW;QACpB,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW;KACxB,CAAC,CACH,CAAC;IAIF,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE;QACpE,GAAG,KAAK,CAAC,MAAM;QACf,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CAAC;IAEH,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,UAAU,CAAC;IACtF,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnF,MAAM,eAAe,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAExF,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC;IAC9C,MAAM,eAAe,GAAG,GAAe,EAAE;QACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,eAAe;QACf,gBAAgB,EAAE,eAAe;QACjC,sBAAsB;KACvB,CAAC;IAMF,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAE/B,SAAS,UAAU,CAAC,KAAY,EAAE,OAAsB;QACtD,OAAO,KAAK,YAAY,EAAE,CAAC,KAAK;YAC9B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,SAAS,UAAU,CAAC,KAAY,EAAE,OAAsB;QACtD,OAAO,KAAK,YAAY,EAAE,CAAC,KAAK;YAC9B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,SAAS,YAAY,CAAC,UAAmB;QACvC,OAAO,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,SAAS,8BAA8B,CAAC,UAAmB;QACzD,OAAO,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAGD,SAAS,IAAI,CAAC,OAAc,EAAE,UAAmB,EAAE,OAAsB;QACvE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9C,OAAO,OAAO,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAOD,SAAS,kBAAkB,CACzB,OAAc,EACd,UAAmB,EACnB,OAAsB;QAEtB,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/C,OAAO,OAAO,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,SAAS,MAAM,CACb,SAAgB,EAChB,OAAc,EACd,SAAgB,EAChB,OAAsB;QAEtB,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IACD,SAAS,oBAAoB,CAC3B,SAAgB,EAChB,OAAc,EACd,SAAgB,EAChB,OAAsB;QAEtB,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAGD,SAAS,mBAAmB,CAAC,UAAmB;QAC9C,MAAM,GAAG,GAAG,cAAc,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAGD,SAAS,mBAAmB,CAAC,UAAmB;QAC9C,MAAM,GAAG,GAAG,cAAc,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC;IAGD,SAAS,wBAAwB,CAAC,UAAmB;QACnD,MAAM,GAAG,GAAG,eAAe,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC5D,OAAO,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,SAAS,WAAW,CAClB,SAAgB,EAChB,QAAiB,EACjB,UAAmB,EACnB,OAAsB;QAEtB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAE5B,OAAO;QACL,cAAc;QACd,eAAe;QACf,eAAe;QACf,OAAO;QACP,YAAY;QACZ,WAAW;QACX,MAAM,EAAE;YACN,EAAE;YACF,EAAE;YACF,GAAG;YACH,GAAG;YACH,IAAI;SACL;QACD,MAAM,EAAE;YACN,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;YACrC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;YACjC,aAAa;YACb,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACjB,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACf,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;SAChB;QACD,KAAK;QAEL,aAAa;QACb,YAAY;QACZ,8BAA8B;QAC9B,IAAI;QACJ,kBAAkB;QAClB,MAAM;QACN,oBAAoB;QACpB,mBAAmB;QACnB,mBAAmB;QACnB,wBAAwB;QACxB,EAAE;QACF,EAAE;QACF,SAAS;QACT,cAAc;KACf,CAAC;AACJ,CAAC"} |
| import { type IField } from './modular.ts'; | ||
| export type AffinePoint<T> = { | ||
| x: T; | ||
| y: T; | ||
| } & { | ||
| Z?: never; | ||
| }; | ||
| export interface Group<T extends Group<T>> { | ||
| double(): T; | ||
| negate(): T; | ||
| add(other: T): T; | ||
| subtract(other: T): T; | ||
| equals(other: T): boolean; | ||
| multiply(scalar: bigint): T; | ||
| toAffine?(invertedZ?: any): AffinePoint<any>; | ||
| } | ||
| /** Base interface for all elliptic curve Points. */ | ||
| export interface CurvePoint<F, P extends CurvePoint<F, P>> extends Group<P> { | ||
| /** Affine x coordinate. Different from projective / extended X coordinate. */ | ||
| x: F; | ||
| /** Affine y coordinate. Different from projective / extended Y coordinate. */ | ||
| y: F; | ||
| Z?: F; | ||
| double(): P; | ||
| negate(): P; | ||
| add(other: P): P; | ||
| subtract(other: P): P; | ||
| equals(other: P): boolean; | ||
| multiply(scalar: bigint): P; | ||
| assertValidity(): void; | ||
| clearCofactor(): P; | ||
| is0(): boolean; | ||
| isTorsionFree(): boolean; | ||
| isSmallOrder(): boolean; | ||
| multiplyUnsafe(scalar: bigint): P; | ||
| /** | ||
| * Massively speeds up `p.multiply(n)` by using precompute tables (caching). See {@link wNAF}. | ||
| * @param isLazy calculate cache now. Default (true) ensures it's deferred to first `multiply()` | ||
| */ | ||
| precompute(windowSize?: number, isLazy?: boolean): P; | ||
| /** Converts point to 2D xy affine coordinates */ | ||
| toAffine(invertedZ?: F): AffinePoint<F>; | ||
| toBytes(): Uint8Array; | ||
| toHex(): string; | ||
| } | ||
| /** Base interface for all elliptic curve Point constructors. */ | ||
| export interface CurvePointCons<P extends CurvePoint<any, P>> { | ||
| [Symbol.hasInstance]: (item: unknown) => boolean; | ||
| BASE: P; | ||
| ZERO: P; | ||
| /** Field for basic curve math */ | ||
| Fp: IField<P_F<P>>; | ||
| /** Scalar field, for scalars in multiply and others */ | ||
| Fn: IField<bigint>; | ||
| /** Creates point from x, y. Does NOT validate if the point is valid. Use `.assertValidity()`. */ | ||
| fromAffine(p: AffinePoint<P_F<P>>): P; | ||
| fromBytes(bytes: Uint8Array): P; | ||
| fromHex(hex: Uint8Array | string): P; | ||
| } | ||
| /** Returns Fp type from Point (P_F<P> == P.F) */ | ||
| export type P_F<P extends CurvePoint<any, P>> = P extends CurvePoint<infer F, P> ? F : never; | ||
| /** Returns Fp type from PointCons (PC_F<PC> == PC.P.F) */ | ||
| export type PC_F<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['Fp']['ZERO']; | ||
| /** Returns Point type from PointCons (PC_P<PC> == PC.P) */ | ||
| export type PC_P<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['ZERO']; | ||
| export type PC_ANY = CurvePointCons<CurvePoint<any, CurvePoint<any, CurvePoint<any, CurvePoint<any, CurvePoint<any, CurvePoint<any, CurvePoint<any, CurvePoint<any, CurvePoint<any, CurvePoint<any, any>>>>>>>>>>>; | ||
| export interface CurveLengths { | ||
| secretKey?: number; | ||
| publicKey?: number; | ||
| publicKeyUncompressed?: number; | ||
| publicKeyHasPrefix?: boolean; | ||
| signature?: number; | ||
| seed?: number; | ||
| } | ||
| export type GroupConstructor<T> = { | ||
| BASE: T; | ||
| ZERO: T; | ||
| }; | ||
| /** @deprecated */ | ||
| export type ExtendedGroupConstructor<T> = GroupConstructor<T> & { | ||
| Fp: IField<any>; | ||
| Fn: IField<bigint>; | ||
| fromAffine(ap: AffinePoint<any>): T; | ||
| }; | ||
| export type Mapper<T> = (i: T[]) => T[]; | ||
| export declare function negateCt<T extends { | ||
| negate: () => T; | ||
| }>(condition: boolean, item: T): T; | ||
| /** | ||
| * Takes a bunch of Projective Points but executes only one | ||
| * inversion on all of them. Inversion is very slow operation, | ||
| * so this improves performance massively. | ||
| * Optimization: converts a list of projective points to a list of identical points with Z=1. | ||
| */ | ||
| export declare function normalizeZ<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(c: PC, points: P[]): P[]; | ||
| /** Internal wNAF opts for specific W and scalarBits */ | ||
| export type WOpts = { | ||
| windows: number; | ||
| windowSize: number; | ||
| mask: bigint; | ||
| maxNumber: number; | ||
| shiftBy: bigint; | ||
| }; | ||
| /** | ||
| * Elliptic curve multiplication of Point by scalar. Fragile. | ||
| * Table generation takes **30MB of ram and 10ms on high-end CPU**, | ||
| * but may take much longer on slow devices. Actual generation will happen on | ||
| * first call of `multiply()`. By default, `BASE` point is precomputed. | ||
| * | ||
| * Scalars should always be less than curve order: this should be checked inside of a curve itself. | ||
| * Creates precomputation tables for fast multiplication: | ||
| * - private scalar is split by fixed size windows of W bits | ||
| * - every window point is collected from window's table & added to accumulator | ||
| * - since windows are different, same point inside tables won't be accessed more than once per calc | ||
| * - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar) | ||
| * - +1 window is neccessary for wNAF | ||
| * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication | ||
| * | ||
| * @todo Research returning 2d JS array of windows, instead of a single window. | ||
| * This would allow windows to be in different memory locations | ||
| */ | ||
| export declare class wNAF<PC extends PC_ANY> { | ||
| private readonly BASE; | ||
| private readonly ZERO; | ||
| private readonly Fn; | ||
| readonly bits: number; | ||
| constructor(Point: PC, bits: number); | ||
| _unsafeLadder(elm: PC_P<PC>, n: bigint, p?: PC_P<PC>): PC_P<PC>; | ||
| /** | ||
| * Creates a wNAF precomputation window. Used for caching. | ||
| * Default window size is set by `utils.precompute()` and is equal to 8. | ||
| * Number of precomputed points depends on the curve size: | ||
| * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where: | ||
| * - 𝑊 is the window size | ||
| * - 𝑛 is the bitlength of the curve order. | ||
| * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224. | ||
| * @param point Point instance | ||
| * @param W window size | ||
| * @returns precomputed point tables flattened to a single array | ||
| */ | ||
| private precomputeWindow; | ||
| /** | ||
| * Implements ec multiplication using precomputed tables and w-ary non-adjacent form. | ||
| * More compact implementation: | ||
| * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541 | ||
| * @returns real and fake (for const-time) points | ||
| */ | ||
| private wNAF; | ||
| /** | ||
| * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form. | ||
| * @param acc accumulator point to add result of multiplication | ||
| * @returns point | ||
| */ | ||
| private wNAFUnsafe; | ||
| private getPrecomputes; | ||
| cached(point: PC_P<PC>, scalar: bigint, transform?: Mapper<PC_P<PC>>): { | ||
| p: PC_P<PC>; | ||
| f: PC_P<PC>; | ||
| }; | ||
| unsafe(point: PC_P<PC>, scalar: bigint, transform?: Mapper<PC_P<PC>>, prev?: PC_P<PC>): PC_P<PC>; | ||
| createCache(P: PC_P<PC>, W: number): void; | ||
| hasCache(elm: PC_P<PC>): boolean; | ||
| } | ||
| /** | ||
| * Endomorphism-specific multiplication for Koblitz curves. | ||
| * Cost: 128 dbl, 0-256 adds. | ||
| */ | ||
| export declare function mulEndoUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(Point: PC, point: P, k1: bigint, k2: bigint): { | ||
| p1: P; | ||
| p2: P; | ||
| }; | ||
| /** | ||
| * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...). | ||
| * 30x faster vs naive addition on L=4096, 10x faster than precomputes. | ||
| * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL. | ||
| * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0. | ||
| * @param c Curve Point constructor | ||
| * @param fieldN field over CURVE.N - important that it's not over CURVE.P | ||
| * @param points array of L curve points | ||
| * @param scalars array of L scalars (aka secret keys / bigints) | ||
| */ | ||
| export declare function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(c: PC, fieldN: IField<bigint>, points: P[], scalars: bigint[]): P; | ||
| /** | ||
| * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...). | ||
| * @param c Curve Point constructor | ||
| * @param fieldN field over CURVE.N - important that it's not over CURVE.P | ||
| * @param points array of L curve points | ||
| * @returns function which multiplies points with scaars | ||
| */ | ||
| export declare function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(c: PC, fieldN: IField<bigint>, points: P[], windowSize: number): (scalars: bigint[]) => P; | ||
| /** | ||
| * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok. | ||
| * Though generator can be different (Fp2 / Fp6 for BLS). | ||
| */ | ||
| export type BasicCurve<T> = { | ||
| Fp: IField<T>; | ||
| n: bigint; | ||
| nBitLength?: number; | ||
| nByteLength?: number; | ||
| h: bigint; | ||
| hEff?: bigint; | ||
| Gx: T; | ||
| Gy: T; | ||
| allowInfinityPoint?: boolean; | ||
| }; | ||
| /** @deprecated */ | ||
| export declare function validateBasic<FP, T>(curve: BasicCurve<FP> & T): Readonly<{ | ||
| readonly nBitLength: number; | ||
| readonly nByteLength: number; | ||
| } & BasicCurve<FP> & T & { | ||
| p: bigint; | ||
| }>; | ||
| export type ValidCurveParams<T> = { | ||
| p: bigint; | ||
| n: bigint; | ||
| h: bigint; | ||
| a: T; | ||
| b?: T; | ||
| d?: T; | ||
| Gx: T; | ||
| Gy: T; | ||
| }; | ||
| export type FpFn<T> = { | ||
| Fp: IField<T>; | ||
| Fn: IField<bigint>; | ||
| }; | ||
| /** Validates CURVE opts and creates fields */ | ||
| export declare function _createCurveFields<T>(type: 'weierstrass' | 'edwards', CURVE: ValidCurveParams<T>, curveOpts?: Partial<FpFn<T>>, FpFnLE?: boolean): FpFn<T> & { | ||
| CURVE: ValidCurveParams<T>; | ||
| }; | ||
| //# sourceMappingURL=curve.d.ts.map |
| {"version":3,"file":"curve.d.ts","sourceRoot":"","sources":["../../src/abstract/curve.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Methods for elliptic curve multiplication by scalars. | ||
| * Contains wNAF, pippenger. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { bitLen, bitMask, validateObject } from "../utils.js"; | ||
| import { Field, FpInvertBatch, nLength, validateField } from "./modular.js"; | ||
| const _0n = BigInt(0); | ||
| const _1n = BigInt(1); | ||
| export function negateCt(condition, item) { | ||
| const neg = item.negate(); | ||
| return condition ? neg : item; | ||
| } | ||
| /** | ||
| * Takes a bunch of Projective Points but executes only one | ||
| * inversion on all of them. Inversion is very slow operation, | ||
| * so this improves performance massively. | ||
| * Optimization: converts a list of projective points to a list of identical points with Z=1. | ||
| */ | ||
| export function normalizeZ(c, points) { | ||
| const invertedZs = FpInvertBatch(c.Fp, points.map((p) => p.Z)); | ||
| return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i]))); | ||
| } | ||
| function validateW(W, bits) { | ||
| if (!Number.isSafeInteger(W) || W <= 0 || W > bits) | ||
| throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W); | ||
| } | ||
| function calcWOpts(W, scalarBits) { | ||
| validateW(W, scalarBits); | ||
| const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero | ||
| const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero | ||
| const maxNumber = 2 ** W; // W=8 256 | ||
| const mask = bitMask(W); // W=8 255 == mask 0b11111111 | ||
| const shiftBy = BigInt(W); // W=8 8 | ||
| return { windows, windowSize, mask, maxNumber, shiftBy }; | ||
| } | ||
| function calcOffsets(n, window, wOpts) { | ||
| const { windowSize, mask, maxNumber, shiftBy } = wOpts; | ||
| let wbits = Number(n & mask); // extract W bits. | ||
| let nextN = n >> shiftBy; // shift number by W bits. | ||
| // What actually happens here: | ||
| // const highestBit = Number(mask ^ (mask >> 1n)); | ||
| // let wbits2 = wbits - 1; // skip zero | ||
| // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~); | ||
| // split if bits > max: +224 => 256-32 | ||
| if (wbits > windowSize) { | ||
| // we skip zero, which means instead of `>= size-1`, we do `> size` | ||
| wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here. | ||
| nextN += _1n; // +256 (carry) | ||
| } | ||
| const offsetStart = window * windowSize; | ||
| const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero | ||
| const isZero = wbits === 0; // is current window slice a 0? | ||
| const isNeg = wbits < 0; // is current window slice negative? | ||
| const isNegF = window % 2 !== 0; // fake random statement for noise | ||
| const offsetF = offsetStart; // fake offset for noise | ||
| return { nextN, offset, isZero, isNeg, isNegF, offsetF }; | ||
| } | ||
| function validateMSMPoints(points, c) { | ||
| if (!Array.isArray(points)) | ||
| throw new Error('array expected'); | ||
| points.forEach((p, i) => { | ||
| if (!(p instanceof c)) | ||
| throw new Error('invalid point at index ' + i); | ||
| }); | ||
| } | ||
| function validateMSMScalars(scalars, field) { | ||
| if (!Array.isArray(scalars)) | ||
| throw new Error('array of scalars expected'); | ||
| scalars.forEach((s, i) => { | ||
| if (!field.isValid(s)) | ||
| throw new Error('invalid scalar at index ' + i); | ||
| }); | ||
| } | ||
| // Since points in different groups cannot be equal (different object constructor), | ||
| // we can have single place to store precomputes. | ||
| // Allows to make points frozen / immutable. | ||
| const pointPrecomputes = new WeakMap(); | ||
| const pointWindowSizes = new WeakMap(); | ||
| function getW(P) { | ||
| // To disable precomputes: | ||
| // return 1; | ||
| return pointWindowSizes.get(P) || 1; | ||
| } | ||
| function assert0(n) { | ||
| if (n !== _0n) | ||
| throw new Error('invalid wNAF'); | ||
| } | ||
| /** | ||
| * Elliptic curve multiplication of Point by scalar. Fragile. | ||
| * Table generation takes **30MB of ram and 10ms on high-end CPU**, | ||
| * but may take much longer on slow devices. Actual generation will happen on | ||
| * first call of `multiply()`. By default, `BASE` point is precomputed. | ||
| * | ||
| * Scalars should always be less than curve order: this should be checked inside of a curve itself. | ||
| * Creates precomputation tables for fast multiplication: | ||
| * - private scalar is split by fixed size windows of W bits | ||
| * - every window point is collected from window's table & added to accumulator | ||
| * - since windows are different, same point inside tables won't be accessed more than once per calc | ||
| * - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar) | ||
| * - +1 window is neccessary for wNAF | ||
| * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication | ||
| * | ||
| * @todo Research returning 2d JS array of windows, instead of a single window. | ||
| * This would allow windows to be in different memory locations | ||
| */ | ||
| export class wNAF { | ||
| // Parametrized with a given Point class (not individual point) | ||
| constructor(Point, bits) { | ||
| this.BASE = Point.BASE; | ||
| this.ZERO = Point.ZERO; | ||
| this.Fn = Point.Fn; | ||
| this.bits = bits; | ||
| } | ||
| // non-const time multiplication ladder | ||
| _unsafeLadder(elm, n, p = this.ZERO) { | ||
| let d = elm; | ||
| while (n > _0n) { | ||
| if (n & _1n) | ||
| p = p.add(d); | ||
| d = d.double(); | ||
| n >>= _1n; | ||
| } | ||
| return p; | ||
| } | ||
| /** | ||
| * Creates a wNAF precomputation window. Used for caching. | ||
| * Default window size is set by `utils.precompute()` and is equal to 8. | ||
| * Number of precomputed points depends on the curve size: | ||
| * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where: | ||
| * - 𝑊 is the window size | ||
| * - 𝑛 is the bitlength of the curve order. | ||
| * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224. | ||
| * @param point Point instance | ||
| * @param W window size | ||
| * @returns precomputed point tables flattened to a single array | ||
| */ | ||
| precomputeWindow(point, W) { | ||
| const { windows, windowSize } = calcWOpts(W, this.bits); | ||
| const points = []; | ||
| let p = point; | ||
| let base = p; | ||
| for (let window = 0; window < windows; window++) { | ||
| base = p; | ||
| points.push(base); | ||
| // i=1, bc we skip 0 | ||
| for (let i = 1; i < windowSize; i++) { | ||
| base = base.add(p); | ||
| points.push(base); | ||
| } | ||
| p = base.double(); | ||
| } | ||
| return points; | ||
| } | ||
| /** | ||
| * Implements ec multiplication using precomputed tables and w-ary non-adjacent form. | ||
| * More compact implementation: | ||
| * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541 | ||
| * @returns real and fake (for const-time) points | ||
| */ | ||
| wNAF(W, precomputes, n) { | ||
| // Scalar should be smaller than field order | ||
| if (!this.Fn.isValid(n)) | ||
| throw new Error('invalid scalar'); | ||
| // Accumulators | ||
| let p = this.ZERO; | ||
| let f = this.BASE; | ||
| // This code was first written with assumption that 'f' and 'p' will never be infinity point: | ||
| // since each addition is multiplied by 2 ** W, it cannot cancel each other. However, | ||
| // there is negate now: it is possible that negated element from low value | ||
| // would be the same as high element, which will create carry into next window. | ||
| // It's not obvious how this can fail, but still worth investigating later. | ||
| const wo = calcWOpts(W, this.bits); | ||
| for (let window = 0; window < wo.windows; window++) { | ||
| // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise | ||
| const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo); | ||
| n = nextN; | ||
| if (isZero) { | ||
| // bits are 0: add garbage to fake point | ||
| // Important part for const-time getPublicKey: add random "noise" point to f. | ||
| f = f.add(negateCt(isNegF, precomputes[offsetF])); | ||
| } | ||
| else { | ||
| // bits are 1: add to result point | ||
| p = p.add(negateCt(isNeg, precomputes[offset])); | ||
| } | ||
| } | ||
| assert0(n); | ||
| // Return both real and fake points: JIT won't eliminate f. | ||
| // At this point there is a way to F be infinity-point even if p is not, | ||
| // which makes it less const-time: around 1 bigint multiply. | ||
| return { p, f }; | ||
| } | ||
| /** | ||
| * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form. | ||
| * @param acc accumulator point to add result of multiplication | ||
| * @returns point | ||
| */ | ||
| wNAFUnsafe(W, precomputes, n, acc = this.ZERO) { | ||
| const wo = calcWOpts(W, this.bits); | ||
| for (let window = 0; window < wo.windows; window++) { | ||
| if (n === _0n) | ||
| break; // Early-exit, skip 0 value | ||
| const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo); | ||
| n = nextN; | ||
| if (isZero) { | ||
| // Window bits are 0: skip processing. | ||
| // Move to next window. | ||
| continue; | ||
| } | ||
| else { | ||
| const item = precomputes[offset]; | ||
| acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM | ||
| } | ||
| } | ||
| assert0(n); | ||
| return acc; | ||
| } | ||
| getPrecomputes(W, point, transform) { | ||
| // Calculate precomputes on a first run, reuse them after | ||
| let comp = pointPrecomputes.get(point); | ||
| if (!comp) { | ||
| comp = this.precomputeWindow(point, W); | ||
| if (W !== 1) { | ||
| // Doing transform outside of if brings 15% perf hit | ||
| if (typeof transform === 'function') | ||
| comp = transform(comp); | ||
| pointPrecomputes.set(point, comp); | ||
| } | ||
| } | ||
| return comp; | ||
| } | ||
| cached(point, scalar, transform) { | ||
| const W = getW(point); | ||
| return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar); | ||
| } | ||
| unsafe(point, scalar, transform, prev) { | ||
| const W = getW(point); | ||
| if (W === 1) | ||
| return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster | ||
| return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev); | ||
| } | ||
| // We calculate precomputes for elliptic curve point multiplication | ||
| // using windowed method. This specifies window size and | ||
| // stores precomputed values. Usually only base point would be precomputed. | ||
| createCache(P, W) { | ||
| validateW(W, this.bits); | ||
| pointWindowSizes.set(P, W); | ||
| pointPrecomputes.delete(P); | ||
| } | ||
| hasCache(elm) { | ||
| return getW(elm) !== 1; | ||
| } | ||
| } | ||
| /** | ||
| * Endomorphism-specific multiplication for Koblitz curves. | ||
| * Cost: 128 dbl, 0-256 adds. | ||
| */ | ||
| export function mulEndoUnsafe(Point, point, k1, k2) { | ||
| let acc = point; | ||
| let p1 = Point.ZERO; | ||
| let p2 = Point.ZERO; | ||
| while (k1 > _0n || k2 > _0n) { | ||
| if (k1 & _1n) | ||
| p1 = p1.add(acc); | ||
| if (k2 & _1n) | ||
| p2 = p2.add(acc); | ||
| acc = acc.double(); | ||
| k1 >>= _1n; | ||
| k2 >>= _1n; | ||
| } | ||
| return { p1, p2 }; | ||
| } | ||
| /** | ||
| * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...). | ||
| * 30x faster vs naive addition on L=4096, 10x faster than precomputes. | ||
| * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL. | ||
| * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0. | ||
| * @param c Curve Point constructor | ||
| * @param fieldN field over CURVE.N - important that it's not over CURVE.P | ||
| * @param points array of L curve points | ||
| * @param scalars array of L scalars (aka secret keys / bigints) | ||
| */ | ||
| export function pippenger(c, fieldN, points, scalars) { | ||
| // If we split scalars by some window (let's say 8 bits), every chunk will only | ||
| // take 256 buckets even if there are 4096 scalars, also re-uses double. | ||
| // TODO: | ||
| // - https://eprint.iacr.org/2024/750.pdf | ||
| // - https://tches.iacr.org/index.php/TCHES/article/view/10287 | ||
| // 0 is accepted in scalars | ||
| validateMSMPoints(points, c); | ||
| validateMSMScalars(scalars, fieldN); | ||
| const plength = points.length; | ||
| const slength = scalars.length; | ||
| if (plength !== slength) | ||
| throw new Error('arrays of points and scalars must have equal length'); | ||
| // if (plength === 0) throw new Error('array must be of length >= 2'); | ||
| const zero = c.ZERO; | ||
| const wbits = bitLen(BigInt(plength)); | ||
| let windowSize = 1; // bits | ||
| if (wbits > 12) | ||
| windowSize = wbits - 3; | ||
| else if (wbits > 4) | ||
| windowSize = wbits - 2; | ||
| else if (wbits > 0) | ||
| windowSize = 2; | ||
| const MASK = bitMask(windowSize); | ||
| const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array | ||
| const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize; | ||
| let sum = zero; | ||
| for (let i = lastBits; i >= 0; i -= windowSize) { | ||
| buckets.fill(zero); | ||
| for (let j = 0; j < slength; j++) { | ||
| const scalar = scalars[j]; | ||
| const wbits = Number((scalar >> BigInt(i)) & MASK); | ||
| buckets[wbits] = buckets[wbits].add(points[j]); | ||
| } | ||
| let resI = zero; // not using this will do small speed-up, but will lose ct | ||
| // Skip first bucket, because it is zero | ||
| for (let j = buckets.length - 1, sumI = zero; j > 0; j--) { | ||
| sumI = sumI.add(buckets[j]); | ||
| resI = resI.add(sumI); | ||
| } | ||
| sum = sum.add(resI); | ||
| if (i !== 0) | ||
| for (let j = 0; j < windowSize; j++) | ||
| sum = sum.double(); | ||
| } | ||
| return sum; | ||
| } | ||
| /** | ||
| * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...). | ||
| * @param c Curve Point constructor | ||
| * @param fieldN field over CURVE.N - important that it's not over CURVE.P | ||
| * @param points array of L curve points | ||
| * @returns function which multiplies points with scaars | ||
| */ | ||
| export function precomputeMSMUnsafe(c, fieldN, points, windowSize) { | ||
| /** | ||
| * Performance Analysis of Window-based Precomputation | ||
| * | ||
| * Base Case (256-bit scalar, 8-bit window): | ||
| * - Standard precomputation requires: | ||
| * - 31 additions per scalar × 256 scalars = 7,936 ops | ||
| * - Plus 255 summary additions = 8,191 total ops | ||
| * Note: Summary additions can be optimized via accumulator | ||
| * | ||
| * Chunked Precomputation Analysis: | ||
| * - Using 32 chunks requires: | ||
| * - 255 additions per chunk | ||
| * - 256 doublings | ||
| * - Total: (255 × 32) + 256 = 8,416 ops | ||
| * | ||
| * Memory Usage Comparison: | ||
| * Window Size | Standard Points | Chunked Points | ||
| * ------------|-----------------|--------------- | ||
| * 4-bit | 520 | 15 | ||
| * 8-bit | 4,224 | 255 | ||
| * 10-bit | 13,824 | 1,023 | ||
| * 16-bit | 557,056 | 65,535 | ||
| * | ||
| * Key Advantages: | ||
| * 1. Enables larger window sizes due to reduced memory overhead | ||
| * 2. More efficient for smaller scalar counts: | ||
| * - 16 chunks: (16 × 255) + 256 = 4,336 ops | ||
| * - ~2x faster than standard 8,191 ops | ||
| * | ||
| * Limitations: | ||
| * - Not suitable for plain precomputes (requires 256 constant doublings) | ||
| * - Performance degrades with larger scalar counts: | ||
| * - Optimal for ~256 scalars | ||
| * - Less efficient for 4096+ scalars (Pippenger preferred) | ||
| */ | ||
| validateW(windowSize, fieldN.BITS); | ||
| validateMSMPoints(points, c); | ||
| const zero = c.ZERO; | ||
| const tableSize = 2 ** windowSize - 1; // table size (without zero) | ||
| const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item | ||
| const MASK = bitMask(windowSize); | ||
| const tables = points.map((p) => { | ||
| const res = []; | ||
| for (let i = 0, acc = p; i < tableSize; i++) { | ||
| res.push(acc); | ||
| acc = acc.add(p); | ||
| } | ||
| return res; | ||
| }); | ||
| return (scalars) => { | ||
| validateMSMScalars(scalars, fieldN); | ||
| if (scalars.length > points.length) | ||
| throw new Error('array of scalars must be smaller than array of points'); | ||
| let res = zero; | ||
| for (let i = 0; i < chunks; i++) { | ||
| // No need to double if accumulator is still zero. | ||
| if (res !== zero) | ||
| for (let j = 0; j < windowSize; j++) | ||
| res = res.double(); | ||
| const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize); | ||
| for (let j = 0; j < scalars.length; j++) { | ||
| const n = scalars[j]; | ||
| const curr = Number((n >> shiftBy) & MASK); | ||
| if (!curr) | ||
| continue; // skip zero scalars chunks | ||
| res = res.add(tables[j][curr - 1]); | ||
| } | ||
| } | ||
| return res; | ||
| }; | ||
| } | ||
| // TODO: remove | ||
| /** @deprecated */ | ||
| export function validateBasic(curve) { | ||
| validateField(curve.Fp); | ||
| validateObject(curve, { | ||
| n: 'bigint', | ||
| h: 'bigint', | ||
| Gx: 'field', | ||
| Gy: 'field', | ||
| }, { | ||
| nBitLength: 'isSafeInteger', | ||
| nByteLength: 'isSafeInteger', | ||
| }); | ||
| // Set defaults | ||
| return Object.freeze({ | ||
| ...nLength(curve.n, curve.nBitLength), | ||
| ...curve, | ||
| ...{ p: curve.Fp.ORDER }, | ||
| }); | ||
| } | ||
| function createField(order, field, isLE) { | ||
| if (field) { | ||
| if (field.ORDER !== order) | ||
| throw new Error('Field.ORDER must match order: Fp == p, Fn == n'); | ||
| validateField(field); | ||
| return field; | ||
| } | ||
| else { | ||
| return Field(order, { isLE }); | ||
| } | ||
| } | ||
| /** Validates CURVE opts and creates fields */ | ||
| export function _createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) { | ||
| if (FpFnLE === undefined) | ||
| FpFnLE = type === 'edwards'; | ||
| if (!CURVE || typeof CURVE !== 'object') | ||
| throw new Error(`expected valid ${type} CURVE object`); | ||
| for (const p of ['p', 'n', 'h']) { | ||
| const val = CURVE[p]; | ||
| if (!(typeof val === 'bigint' && val > _0n)) | ||
| throw new Error(`CURVE.${p} must be positive bigint`); | ||
| } | ||
| const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE); | ||
| const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE); | ||
| const _b = type === 'weierstrass' ? 'b' : 'd'; | ||
| const params = ['Gx', 'Gy', 'a', _b]; | ||
| for (const p of params) { | ||
| // @ts-ignore | ||
| if (!Fp.isValid(CURVE[p])) | ||
| throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`); | ||
| } | ||
| CURVE = Object.freeze(Object.assign({}, CURVE)); | ||
| return { CURVE, Fp, Fn }; | ||
| } | ||
| //# sourceMappingURL=curve.js.map |
| {"version":3,"file":"curve.js","sourceRoot":"","sources":["../../src/abstract/curve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AAEzF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AA0ItB,MAAM,UAAU,QAAQ,CAAgC,SAAkB,EAAE,IAAO;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,CAAK,EACL,MAAW;IAEX,MAAM,UAAU,GAAG,aAAa,CAC9B,CAAC,CAAC,EAAE,EACJ,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CACxB,CAAC;IACF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,IAAY;IACxC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;QAChD,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;AACnF,CAAC;AAWD,SAAS,SAAS,CAAC,CAAS,EAAE,UAAkB;IAC9C,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,uCAAuC;IACtF,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,yCAAyC;IAC1E,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;IACnC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAAC,CAAS,EAAE,MAAc,EAAE,KAAY;IAC1D,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACvD,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,kBAAkB;IAChD,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,0BAA0B;IAEpD,8BAA8B;IAC9B,kDAAkD;IAClD,uCAAuC;IACvC,6DAA6D;IAE7D,sCAAsC;IACtC,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;QACvB,mEAAmE;QACnE,KAAK,IAAI,SAAS,CAAC,CAAC,qEAAqE;QACzF,KAAK,IAAI,GAAG,CAAC,CAAC,eAAe;IAC/B,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B;IAC5E,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,+BAA+B;IAC3D,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,oCAAoC;IAC7D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,kCAAkC;IACnE,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,wBAAwB;IACrD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAa,EAAE,CAAM;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;AACD,SAAS,kBAAkB,CAAC,OAAc,EAAE,KAAU;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC1E,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,iDAAiD;AACjD,4CAA4C;AAC5C,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAc,CAAC;AACnD,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAe,CAAC;AAEpD,SAAS,IAAI,CAAC,CAAM;IAClB,0BAA0B;IAC1B,YAAY;IACZ,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,IAAI,CAAC,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,IAAI;IAMf,+DAA+D;IAC/D,YAAY,KAAS,EAAE,IAAY;QACjC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,uCAAuC;IACvC,aAAa,CAAC,GAAa,EAAE,CAAS,EAAE,IAAc,IAAI,CAAC,IAAI;QAC7D,IAAI,CAAC,GAAa,GAAG,CAAC;QACtB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,GAAG;gBAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACf,CAAC,KAAK,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;;;;;;;;;OAWG;IACK,gBAAgB,CAAC,KAAe,EAAE,CAAS;QACjD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAa,KAAK,CAAC;QACxB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YAChD,IAAI,GAAG,CAAC,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,oBAAoB;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YACD,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,IAAI,CAAC,CAAS,EAAE,WAAuB,EAAE,CAAS;QACxD,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC3D,eAAe;QACf,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAClB,6FAA6F;QAC7F,qFAAqF;QACrF,0EAA0E;QAC1E,+EAA+E;QAC/E,2EAA2E;QAC3E,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YACnD,qFAAqF;YACrF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACrF,CAAC,GAAG,KAAK,CAAC;YACV,IAAI,MAAM,EAAE,CAAC;gBACX,wCAAwC;gBACxC,6EAA6E;gBAC7E,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,kCAAkC;gBAClC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAC,CAAC;QACX,2DAA2D;QAC3D,wEAAwE;QACxE,4DAA4D;QAC5D,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACK,UAAU,CAChB,CAAS,EACT,WAAuB,EACvB,CAAS,EACT,MAAgB,IAAI,CAAC,IAAI;QAEzB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,KAAK,GAAG;gBAAE,MAAM,CAAC,2BAA2B;YACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACpE,CAAC,GAAG,KAAK,CAAC;YACV,IAAI,MAAM,EAAE,CAAC;gBACX,sCAAsC;gBACtC,uBAAuB;gBACvB,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACjC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;YACzF,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAC,CAAC;QACX,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,cAAc,CAAC,CAAS,EAAE,KAAe,EAAE,SAA4B;QAC7E,yDAAyD;QACzD,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAe,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,oDAAoD;gBACpD,IAAI,OAAO,SAAS,KAAK,UAAU;oBAAE,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC5D,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CACJ,KAAe,EACf,MAAc,EACd,SAA4B;QAE5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,KAAe,EAAE,MAAc,EAAE,SAA4B,EAAE,IAAe;QACnF,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B;QAC5F,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;IAED,mEAAmE;IACnE,wDAAwD;IACxD,2EAA2E;IAC3E,WAAW,CAAC,CAAW,EAAE,CAAS;QAChC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAa;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAS,EACT,KAAQ,EACR,EAAU,EACV,EAAU;IAEV,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IACpB,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IACpB,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC;QAC5B,IAAI,EAAE,GAAG,GAAG;YAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,GAAG;YAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,EAAE,KAAK,GAAG,CAAC;QACX,EAAE,KAAK,GAAG,CAAC;IACb,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CACvB,CAAK,EACL,MAAsB,EACtB,MAAW,EACX,OAAiB;IAEjB,+EAA+E;IAC/E,wEAAwE;IACxE,QAAQ;IACR,yCAAyC;IACzC,8DAA8D;IAC9D,2BAA2B;IAC3B,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,IAAI,OAAO,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAChG,sEAAsE;IACtE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACpB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,OAAO;IAC3B,IAAI,KAAK,GAAG,EAAE;QAAE,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;SAClC,IAAI,KAAK,GAAG,CAAC;QAAE,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;SACtC,IAAI,KAAK,GAAG,CAAC;QAAE,UAAU,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;IACzE,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,0DAA0D;QAC3E,wCAAwC;QACxC,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;gBAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,GAAQ,CAAC;AAClB,CAAC;AACD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAAK,EACL,MAAsB,EACtB,MAAW,EACX,UAAkB;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACpB,MAAM,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,4BAA4B;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,iBAAiB;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAI,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,OAAiB,EAAK,EAAE;QAC9B,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAChC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,kDAAkD;YAClD,IAAI,GAAG,KAAK,IAAI;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;oBAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;YACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI;oBAAE,SAAS,CAAC,2BAA2B;gBAChD,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAmBD,eAAe;AACf,kBAAkB;AAClB,MAAM,UAAU,aAAa,CAC3B,KAAyB;IAUzB,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxB,cAAc,CACZ,KAAK,EACL;QACE,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,QAAQ;QACX,EAAE,EAAE,OAAO;QACX,EAAE,EAAE,OAAO;KACZ,EACD;QACE,UAAU,EAAE,eAAe;QAC3B,WAAW,EAAE,eAAe;KAC7B,CACF,CAAC;IACF,eAAe;IACf,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;QACrC,GAAG,KAAK;QACR,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;KAChB,CAAC,CAAC;AACd,CAAC;AAaD,SAAS,WAAW,CAAI,KAAa,EAAE,KAAiB,EAAE,IAAc;IACtE,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC7F,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAyB,CAAC;IACxD,CAAC;AACH,CAAC;AAGD,8CAA8C;AAC9C,MAAM,UAAU,kBAAkB,CAChC,IAA+B,EAC/B,KAA0B,EAC1B,YAA8B,EAAE,EAChC,MAAgB;IAEhB,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IACtD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,eAAe,CAAC,CAAC;IAChG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,EAAE,GAAc,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAU,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,aAAa;QACb,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3B,CAAC"} |
| /** | ||
| * Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y². | ||
| * For design rationale of types / exports, see weierstrass module documentation. | ||
| * Untwisted Edwards curves exist, but they aren't used in real-world protocols. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type FHash, type Hex } from '../utils.ts'; | ||
| import { type AffinePoint, type BasicCurve, type CurveLengths, type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { type IField, type NLength } from './modular.ts'; | ||
| export type UVRatio = (u: bigint, v: bigint) => { | ||
| isValid: boolean; | ||
| value: bigint; | ||
| }; | ||
| /** Instance of Extended Point with coordinates in X, Y, Z, T. */ | ||
| export interface EdwardsPoint extends CurvePoint<bigint, EdwardsPoint> { | ||
| /** extended X coordinate. Different from affine x. */ | ||
| readonly X: bigint; | ||
| /** extended Y coordinate. Different from affine y. */ | ||
| readonly Y: bigint; | ||
| /** extended Z coordinate */ | ||
| readonly Z: bigint; | ||
| /** extended T coordinate */ | ||
| readonly T: bigint; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(): Uint8Array; | ||
| /** @deprecated use `p.precompute(windowSize)` */ | ||
| _setWindowSize(windowSize: number): void; | ||
| /** @deprecated use .X */ | ||
| readonly ex: bigint; | ||
| /** @deprecated use .Y */ | ||
| readonly ey: bigint; | ||
| /** @deprecated use .Z */ | ||
| readonly ez: bigint; | ||
| /** @deprecated use .T */ | ||
| readonly et: bigint; | ||
| } | ||
| /** Static methods of Extended Point with coordinates in X, Y, Z, T. */ | ||
| export interface EdwardsPointCons extends CurvePointCons<EdwardsPoint> { | ||
| new (X: bigint, Y: bigint, Z: bigint, T: bigint): EdwardsPoint; | ||
| CURVE(): EdwardsOpts; | ||
| fromBytes(bytes: Uint8Array, zip215?: boolean): EdwardsPoint; | ||
| fromHex(hex: Hex, zip215?: boolean): EdwardsPoint; | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| msm(points: EdwardsPoint[], scalars: bigint[]): EdwardsPoint; | ||
| } | ||
| /** @deprecated use EdwardsPoint */ | ||
| export type ExtPointType = EdwardsPoint; | ||
| /** @deprecated use EdwardsPointCons */ | ||
| export type ExtPointConstructor = EdwardsPointCons; | ||
| /** | ||
| * Twisted Edwards curve options. | ||
| * | ||
| * * a: formula param | ||
| * * d: formula param | ||
| * * p: prime characteristic (order) of finite field, in which arithmetics is done | ||
| * * n: order of prime subgroup a.k.a total amount of valid curve points | ||
| * * h: cofactor. h*n is group order; n is subgroup order | ||
| * * Gx: x coordinate of generator point a.k.a. base point | ||
| * * Gy: y coordinate of generator point | ||
| */ | ||
| export type EdwardsOpts = Readonly<{ | ||
| p: bigint; | ||
| n: bigint; | ||
| h: bigint; | ||
| a: bigint; | ||
| d: bigint; | ||
| Gx: bigint; | ||
| Gy: bigint; | ||
| }>; | ||
| /** | ||
| * Extra curve options for Twisted Edwards. | ||
| * | ||
| * * Fp: redefined Field over curve.p | ||
| * * Fn: redefined Field over curve.n | ||
| * * uvRatio: helper function for decompression, calculating √(u/v) | ||
| */ | ||
| export type EdwardsExtraOpts = Partial<{ | ||
| Fp: IField<bigint>; | ||
| Fn: IField<bigint>; | ||
| FpFnLE: boolean; | ||
| uvRatio: (u: bigint, v: bigint) => { | ||
| isValid: boolean; | ||
| value: bigint; | ||
| }; | ||
| }>; | ||
| /** | ||
| * EdDSA (Edwards Digital Signature algorithm) options. | ||
| * | ||
| * * hash: hash function used to hash secret keys and messages | ||
| * * adjustScalarBytes: clears bits to get valid field element | ||
| * * domain: Used for hashing | ||
| * * mapToCurve: for hash-to-curve standard | ||
| * * prehash: RFC 8032 pre-hashing of messages to sign() / verify() | ||
| * * randomBytes: function generating random bytes, used for randomSecretKey | ||
| */ | ||
| export type EdDSAOpts = Partial<{ | ||
| adjustScalarBytes: (bytes: Uint8Array) => Uint8Array; | ||
| domain: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; | ||
| mapToCurve: (scalar: bigint[]) => AffinePoint<bigint>; | ||
| prehash: FHash; | ||
| randomBytes: (bytesLength?: number) => Uint8Array; | ||
| }>; | ||
| /** | ||
| * EdDSA (Edwards Digital Signature algorithm) interface. | ||
| * | ||
| * Allows to create and verify signatures, create public and secret keys. | ||
| */ | ||
| export interface EdDSA { | ||
| keygen: (seed?: Uint8Array) => { | ||
| secretKey: Uint8Array; | ||
| publicKey: Uint8Array; | ||
| }; | ||
| getPublicKey: (secretKey: Hex) => Uint8Array; | ||
| sign: (message: Hex, secretKey: Hex, options?: { | ||
| context?: Hex; | ||
| }) => Uint8Array; | ||
| verify: (sig: Hex, message: Hex, publicKey: Hex, options?: { | ||
| context?: Hex; | ||
| zip215: boolean; | ||
| }) => boolean; | ||
| Point: EdwardsPointCons; | ||
| utils: { | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| isValidSecretKey: (secretKey: Uint8Array) => boolean; | ||
| isValidPublicKey: (publicKey: Uint8Array, zip215?: boolean) => boolean; | ||
| /** | ||
| * Converts ed public key to x public key. | ||
| * | ||
| * There is NO `fromMontgomery`: | ||
| * - There are 2 valid ed25519 points for every x25519, with flipped coordinate | ||
| * - Sometimes there are 0 valid ed25519 points, because x25519 *additionally* | ||
| * accepts inputs on the quadratic twist, which can't be moved to ed25519 | ||
| * | ||
| * @example | ||
| * ```js | ||
| * const someonesPub = ed25519.getPublicKey(ed25519.utils.randomSecretKey()); | ||
| * const aPriv = x25519.utils.randomSecretKey(); | ||
| * x25519.getSharedSecret(aPriv, ed25519.utils.toMontgomery(someonesPub)) | ||
| * ``` | ||
| */ | ||
| toMontgomery: (publicKey: Uint8Array) => Uint8Array; | ||
| /** | ||
| * Converts ed secret key to x secret key. | ||
| * @example | ||
| * ```js | ||
| * const someonesPub = x25519.getPublicKey(x25519.utils.randomSecretKey()); | ||
| * const aPriv = ed25519.utils.randomSecretKey(); | ||
| * x25519.getSharedSecret(ed25519.utils.toMontgomeryPriv(aPriv), someonesPub) | ||
| * ``` | ||
| */ | ||
| toMontgomeryPriv: (privateKey: Uint8Array) => Uint8Array; | ||
| getExtendedPublicKey: (key: Hex) => { | ||
| head: Uint8Array; | ||
| prefix: Uint8Array; | ||
| scalar: bigint; | ||
| point: EdwardsPoint; | ||
| pointBytes: Uint8Array; | ||
| }; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `point.precompute()` */ | ||
| precompute: (windowSize?: number, point?: EdwardsPoint) => EdwardsPoint; | ||
| }; | ||
| lengths: CurveLengths; | ||
| } | ||
| export declare function edwards(params: EdwardsOpts, extraOpts?: EdwardsExtraOpts): EdwardsPointCons; | ||
| /** | ||
| * Base class for prime-order points like Ristretto255 and Decaf448. | ||
| * These points eliminate cofactor issues by representing equivalence classes | ||
| * of Edwards curve points. | ||
| */ | ||
| export declare abstract class PrimeEdwardsPoint<T extends PrimeEdwardsPoint<T>> implements CurvePoint<bigint, T> { | ||
| static BASE: PrimeEdwardsPoint<any>; | ||
| static ZERO: PrimeEdwardsPoint<any>; | ||
| static Fp: IField<bigint>; | ||
| static Fn: IField<bigint>; | ||
| protected readonly ep: EdwardsPoint; | ||
| constructor(ep: EdwardsPoint); | ||
| abstract toBytes(): Uint8Array; | ||
| abstract equals(other: T): boolean; | ||
| static fromBytes(_bytes: Uint8Array): any; | ||
| static fromHex(_hex: Hex): any; | ||
| get x(): bigint; | ||
| get y(): bigint; | ||
| clearCofactor(): T; | ||
| assertValidity(): void; | ||
| toAffine(invertedZ?: bigint): AffinePoint<bigint>; | ||
| toHex(): string; | ||
| toString(): string; | ||
| isTorsionFree(): boolean; | ||
| isSmallOrder(): boolean; | ||
| add(other: T): T; | ||
| subtract(other: T): T; | ||
| multiply(scalar: bigint): T; | ||
| multiplyUnsafe(scalar: bigint): T; | ||
| double(): T; | ||
| negate(): T; | ||
| precompute(windowSize?: number, isLazy?: boolean): T; | ||
| abstract is0(): boolean; | ||
| protected abstract assertSame(other: T): void; | ||
| protected abstract init(ep: EdwardsPoint): T; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(): Uint8Array; | ||
| } | ||
| /** | ||
| * Initializes EdDSA signatures over given Edwards curve. | ||
| */ | ||
| export declare function eddsa(Point: EdwardsPointCons, cHash: FHash, eddsaOpts?: EdDSAOpts): EdDSA; | ||
| export type CurveType = BasicCurve<bigint> & { | ||
| a: bigint; | ||
| d: bigint; | ||
| /** @deprecated the property will be removed in next release */ | ||
| hash: FHash; | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; | ||
| domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; | ||
| uvRatio?: UVRatio; | ||
| prehash?: FHash; | ||
| mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; | ||
| }; | ||
| export type CurveTypeWithLength = Readonly<CurveType & Partial<NLength>>; | ||
| export type CurveFn = { | ||
| /** @deprecated the property will be removed in next release */ | ||
| CURVE: CurveType; | ||
| keygen: EdDSA['keygen']; | ||
| getPublicKey: EdDSA['getPublicKey']; | ||
| sign: EdDSA['sign']; | ||
| verify: EdDSA['verify']; | ||
| Point: EdwardsPointCons; | ||
| /** @deprecated use `Point` */ | ||
| ExtendedPoint: EdwardsPointCons; | ||
| utils: EdDSA['utils']; | ||
| lengths: CurveLengths; | ||
| }; | ||
| export type EdComposed = { | ||
| CURVE: EdwardsOpts; | ||
| curveOpts: EdwardsExtraOpts; | ||
| hash: FHash; | ||
| eddsaOpts: EdDSAOpts; | ||
| }; | ||
| export declare function twistedEdwards(c: CurveTypeWithLength): CurveFn; | ||
| //# sourceMappingURL=edwards.d.ts.map |
| {"version":3,"file":"edwards.d.ts","sourceRoot":"","sources":["../../src/abstract/edwards.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y². | ||
| * For design rationale of types / exports, see weierstrass module documentation. | ||
| * Untwisted Edwards curves exist, but they aren't used in real-world protocols. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { _validateObject, _abool2 as abool, _abytes2 as abytes, aInRange, bytesToHex, bytesToNumberLE, concatBytes, copyBytes, ensureBytes, isBytes, memoized, notImplemented, randomBytes as randomBytesWeb, } from "../utils.js"; | ||
| import { _createCurveFields, normalizeZ, pippenger, wNAF, } from "./curve.js"; | ||
| import { Field } from "./modular.js"; | ||
| // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8); | ||
| function isEdValidXY(Fp, CURVE, x, y) { | ||
| const x2 = Fp.sqr(x); | ||
| const y2 = Fp.sqr(y); | ||
| const left = Fp.add(Fp.mul(CURVE.a, x2), y2); | ||
| const right = Fp.add(Fp.ONE, Fp.mul(CURVE.d, Fp.mul(x2, y2))); | ||
| return Fp.eql(left, right); | ||
| } | ||
| export function edwards(params, extraOpts = {}) { | ||
| const validated = _createCurveFields('edwards', params, extraOpts, extraOpts.FpFnLE); | ||
| const { Fp, Fn } = validated; | ||
| let CURVE = validated.CURVE; | ||
| const { h: cofactor } = CURVE; | ||
| _validateObject(extraOpts, {}, { uvRatio: 'function' }); | ||
| // Important: | ||
| // There are some places where Fp.BYTES is used instead of nByteLength. | ||
| // So far, everything has been tested with curves of Fp.BYTES == nByteLength. | ||
| // TODO: test and find curves which behave otherwise. | ||
| const MASK = _2n << (BigInt(Fn.BYTES * 8) - _1n); | ||
| const modP = (n) => Fp.create(n); // Function overrides | ||
| // sqrt(u/v) | ||
| const uvRatio = extraOpts.uvRatio || | ||
| ((u, v) => { | ||
| try { | ||
| return { isValid: true, value: Fp.sqrt(Fp.div(u, v)) }; | ||
| } | ||
| catch (e) { | ||
| return { isValid: false, value: _0n }; | ||
| } | ||
| }); | ||
| // Validate whether the passed curve params are valid. | ||
| // equation ax² + y² = 1 + dx²y² should work for generator point. | ||
| if (!isEdValidXY(Fp, CURVE, CURVE.Gx, CURVE.Gy)) | ||
| throw new Error('bad curve params: generator point'); | ||
| /** | ||
| * Asserts coordinate is valid: 0 <= n < MASK. | ||
| * Coordinates >= Fp.ORDER are allowed for zip215. | ||
| */ | ||
| function acoord(title, n, banZero = false) { | ||
| const min = banZero ? _1n : _0n; | ||
| aInRange('coordinate ' + title, n, min, MASK); | ||
| return n; | ||
| } | ||
| function aextpoint(other) { | ||
| if (!(other instanceof Point)) | ||
| throw new Error('ExtendedPoint expected'); | ||
| } | ||
| // Converts Extended point to default (x, y) coordinates. | ||
| // Can accept precomputed Z^-1 - for example, from invertBatch. | ||
| const toAffineMemo = memoized((p, iz) => { | ||
| const { X, Y, Z } = p; | ||
| const is0 = p.is0(); | ||
| if (iz == null) | ||
| iz = is0 ? _8n : Fp.inv(Z); // 8 was chosen arbitrarily | ||
| const x = modP(X * iz); | ||
| const y = modP(Y * iz); | ||
| const zz = Fp.mul(Z, iz); | ||
| if (is0) | ||
| return { x: _0n, y: _1n }; | ||
| if (zz !== _1n) | ||
| throw new Error('invZ was invalid'); | ||
| return { x, y }; | ||
| }); | ||
| const assertValidMemo = memoized((p) => { | ||
| const { a, d } = CURVE; | ||
| if (p.is0()) | ||
| throw new Error('bad point: ZERO'); // TODO: optimize, with vars below? | ||
| // Equation in affine coordinates: ax² + y² = 1 + dx²y² | ||
| // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y² | ||
| const { X, Y, Z, T } = p; | ||
| const X2 = modP(X * X); // X² | ||
| const Y2 = modP(Y * Y); // Y² | ||
| const Z2 = modP(Z * Z); // Z² | ||
| const Z4 = modP(Z2 * Z2); // Z⁴ | ||
| const aX2 = modP(X2 * a); // aX² | ||
| const left = modP(Z2 * modP(aX2 + Y2)); // (aX² + Y²)Z² | ||
| const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z⁴ + dX²Y² | ||
| if (left !== right) | ||
| throw new Error('bad point: equation left != right (1)'); | ||
| // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T | ||
| const XY = modP(X * Y); | ||
| const ZT = modP(Z * T); | ||
| if (XY !== ZT) | ||
| throw new Error('bad point: equation left != right (2)'); | ||
| return true; | ||
| }); | ||
| // Extended Point works in extended coordinates: (X, Y, Z, T) ∋ (x=X/Z, y=Y/Z, T=xy). | ||
| // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates | ||
| class Point { | ||
| constructor(X, Y, Z, T) { | ||
| this.X = acoord('x', X); | ||
| this.Y = acoord('y', Y); | ||
| this.Z = acoord('z', Z, true); | ||
| this.T = acoord('t', T); | ||
| Object.freeze(this); | ||
| } | ||
| static CURVE() { | ||
| return CURVE; | ||
| } | ||
| static fromAffine(p) { | ||
| if (p instanceof Point) | ||
| throw new Error('extended point not allowed'); | ||
| const { x, y } = p || {}; | ||
| acoord('x', x); | ||
| acoord('y', y); | ||
| return new Point(x, y, _1n, modP(x * y)); | ||
| } | ||
| // Uses algo from RFC8032 5.1.3. | ||
| static fromBytes(bytes, zip215 = false) { | ||
| const len = Fp.BYTES; | ||
| const { a, d } = CURVE; | ||
| bytes = copyBytes(abytes(bytes, len, 'point')); | ||
| abool(zip215, 'zip215'); | ||
| const normed = copyBytes(bytes); // copy again, we'll manipulate it | ||
| const lastByte = bytes[len - 1]; // select last byte | ||
| normed[len - 1] = lastByte & ~0x80; // clear last bit | ||
| const y = bytesToNumberLE(normed); | ||
| // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5. | ||
| // RFC8032 prohibits >= p, but ZIP215 doesn't | ||
| // zip215=true: 0 <= y < MASK (2^256 for ed25519) | ||
| // zip215=false: 0 <= y < P (2^255-19 for ed25519) | ||
| const max = zip215 ? MASK : Fp.ORDER; | ||
| aInRange('point.y', y, _0n, max); | ||
| // Ed25519: x² = (y²-1)/(dy²+1) mod p. Ed448: x² = (y²-1)/(dy²-1) mod p. Generic case: | ||
| // ax²+y²=1+dx²y² => y²-1=dx²y²-ax² => y²-1=x²(dy²-a) => x²=(y²-1)/(dy²-a) | ||
| const y2 = modP(y * y); // denominator is always non-0 mod p. | ||
| const u = modP(y2 - _1n); // u = y² - 1 | ||
| const v = modP(d * y2 - a); // v = d y² + 1. | ||
| let { isValid, value: x } = uvRatio(u, v); // √(u/v) | ||
| if (!isValid) | ||
| throw new Error('bad point: invalid y coordinate'); | ||
| const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper | ||
| const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit | ||
| if (!zip215 && x === _0n && isLastByteOdd) | ||
| // if x=0 and x_0 = 1, fail | ||
| throw new Error('bad point: x=0 and x_0=1'); | ||
| if (isLastByteOdd !== isXOdd) | ||
| x = modP(-x); // if x_0 != x mod 2, set x = p-x | ||
| return Point.fromAffine({ x, y }); | ||
| } | ||
| static fromHex(bytes, zip215 = false) { | ||
| return Point.fromBytes(ensureBytes('point', bytes), zip215); | ||
| } | ||
| get x() { | ||
| return this.toAffine().x; | ||
| } | ||
| get y() { | ||
| return this.toAffine().y; | ||
| } | ||
| precompute(windowSize = 8, isLazy = true) { | ||
| wnaf.createCache(this, windowSize); | ||
| if (!isLazy) | ||
| this.multiply(_2n); // random number | ||
| return this; | ||
| } | ||
| // Useful in fromAffine() - not for fromBytes(), which always created valid points. | ||
| assertValidity() { | ||
| assertValidMemo(this); | ||
| } | ||
| // Compare one point to another. | ||
| equals(other) { | ||
| aextpoint(other); | ||
| const { X: X1, Y: Y1, Z: Z1 } = this; | ||
| const { X: X2, Y: Y2, Z: Z2 } = other; | ||
| const X1Z2 = modP(X1 * Z2); | ||
| const X2Z1 = modP(X2 * Z1); | ||
| const Y1Z2 = modP(Y1 * Z2); | ||
| const Y2Z1 = modP(Y2 * Z1); | ||
| return X1Z2 === X2Z1 && Y1Z2 === Y2Z1; | ||
| } | ||
| is0() { | ||
| return this.equals(Point.ZERO); | ||
| } | ||
| negate() { | ||
| // Flips point sign to a negative one (-x, y in affine coords) | ||
| return new Point(modP(-this.X), this.Y, this.Z, modP(-this.T)); | ||
| } | ||
| // Fast algo for doubling Extended Point. | ||
| // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd | ||
| // Cost: 4M + 4S + 1*a + 6add + 1*2. | ||
| double() { | ||
| const { a } = CURVE; | ||
| const { X: X1, Y: Y1, Z: Z1 } = this; | ||
| const A = modP(X1 * X1); // A = X12 | ||
| const B = modP(Y1 * Y1); // B = Y12 | ||
| const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12 | ||
| const D = modP(a * A); // D = a*A | ||
| const x1y1 = X1 + Y1; | ||
| const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B | ||
| const G = D + B; // G = D+B | ||
| const F = G - C; // F = G-C | ||
| const H = D - B; // H = D-B | ||
| const X3 = modP(E * F); // X3 = E*F | ||
| const Y3 = modP(G * H); // Y3 = G*H | ||
| const T3 = modP(E * H); // T3 = E*H | ||
| const Z3 = modP(F * G); // Z3 = F*G | ||
| return new Point(X3, Y3, Z3, T3); | ||
| } | ||
| // Fast algo for adding 2 Extended Points. | ||
| // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd | ||
| // Cost: 9M + 1*a + 1*d + 7add. | ||
| add(other) { | ||
| aextpoint(other); | ||
| const { a, d } = CURVE; | ||
| const { X: X1, Y: Y1, Z: Z1, T: T1 } = this; | ||
| const { X: X2, Y: Y2, Z: Z2, T: T2 } = other; | ||
| const A = modP(X1 * X2); // A = X1*X2 | ||
| const B = modP(Y1 * Y2); // B = Y1*Y2 | ||
| const C = modP(T1 * d * T2); // C = T1*d*T2 | ||
| const D = modP(Z1 * Z2); // D = Z1*Z2 | ||
| const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B | ||
| const F = D - C; // F = D-C | ||
| const G = D + C; // G = D+C | ||
| const H = modP(B - a * A); // H = B-a*A | ||
| const X3 = modP(E * F); // X3 = E*F | ||
| const Y3 = modP(G * H); // Y3 = G*H | ||
| const T3 = modP(E * H); // T3 = E*H | ||
| const Z3 = modP(F * G); // Z3 = F*G | ||
| return new Point(X3, Y3, Z3, T3); | ||
| } | ||
| subtract(other) { | ||
| return this.add(other.negate()); | ||
| } | ||
| // Constant-time multiplication. | ||
| multiply(scalar) { | ||
| // 1 <= scalar < L | ||
| if (!Fn.isValidNot0(scalar)) | ||
| throw new Error('invalid scalar: expected 1 <= sc < curve.n'); | ||
| const { p, f } = wnaf.cached(this, scalar, (p) => normalizeZ(Point, p)); | ||
| return normalizeZ(Point, [p, f])[0]; | ||
| } | ||
| // Non-constant-time multiplication. Uses double-and-add algorithm. | ||
| // It's faster, but should only be used when you don't care about | ||
| // an exposed private key e.g. sig verification. | ||
| // Does NOT allow scalars higher than CURVE.n. | ||
| // Accepts optional accumulator to merge with multiply (important for sparse scalars) | ||
| multiplyUnsafe(scalar, acc = Point.ZERO) { | ||
| // 0 <= scalar < L | ||
| if (!Fn.isValid(scalar)) | ||
| throw new Error('invalid scalar: expected 0 <= sc < curve.n'); | ||
| if (scalar === _0n) | ||
| return Point.ZERO; | ||
| if (this.is0() || scalar === _1n) | ||
| return this; | ||
| return wnaf.unsafe(this, scalar, (p) => normalizeZ(Point, p), acc); | ||
| } | ||
| // Checks if point is of small order. | ||
| // If you add something to small order point, you will have "dirty" | ||
| // point with torsion component. | ||
| // Multiplies point by cofactor and checks if the result is 0. | ||
| isSmallOrder() { | ||
| return this.multiplyUnsafe(cofactor).is0(); | ||
| } | ||
| // Multiplies point by curve order and checks if the result is 0. | ||
| // Returns `false` is the point is dirty. | ||
| isTorsionFree() { | ||
| return wnaf.unsafe(this, CURVE.n).is0(); | ||
| } | ||
| // Converts Extended point to default (x, y) coordinates. | ||
| // Can accept precomputed Z^-1 - for example, from invertBatch. | ||
| toAffine(invertedZ) { | ||
| return toAffineMemo(this, invertedZ); | ||
| } | ||
| clearCofactor() { | ||
| if (cofactor === _1n) | ||
| return this; | ||
| return this.multiplyUnsafe(cofactor); | ||
| } | ||
| toBytes() { | ||
| const { x, y } = this.toAffine(); | ||
| // Fp.toBytes() allows non-canonical encoding of y (>= p). | ||
| const bytes = Fp.toBytes(y); | ||
| // Each y has 2 valid points: (x, y), (x,-y). | ||
| // When compressing, it's enough to store y and use the last byte to encode sign of x | ||
| bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0; | ||
| return bytes; | ||
| } | ||
| toHex() { | ||
| return bytesToHex(this.toBytes()); | ||
| } | ||
| toString() { | ||
| return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`; | ||
| } | ||
| // TODO: remove | ||
| get ex() { | ||
| return this.X; | ||
| } | ||
| get ey() { | ||
| return this.Y; | ||
| } | ||
| get ez() { | ||
| return this.Z; | ||
| } | ||
| get et() { | ||
| return this.T; | ||
| } | ||
| static normalizeZ(points) { | ||
| return normalizeZ(Point, points); | ||
| } | ||
| static msm(points, scalars) { | ||
| return pippenger(Point, Fn, points, scalars); | ||
| } | ||
| _setWindowSize(windowSize) { | ||
| this.precompute(windowSize); | ||
| } | ||
| toRawBytes() { | ||
| return this.toBytes(); | ||
| } | ||
| } | ||
| // base / generator point | ||
| Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy)); | ||
| // zero / infinity / identity point | ||
| Point.ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0 | ||
| // math field | ||
| Point.Fp = Fp; | ||
| // scalar field | ||
| Point.Fn = Fn; | ||
| const wnaf = new wNAF(Point, Fn.BITS); | ||
| Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms. | ||
| return Point; | ||
| } | ||
| /** | ||
| * Base class for prime-order points like Ristretto255 and Decaf448. | ||
| * These points eliminate cofactor issues by representing equivalence classes | ||
| * of Edwards curve points. | ||
| */ | ||
| export class PrimeEdwardsPoint { | ||
| constructor(ep) { | ||
| this.ep = ep; | ||
| } | ||
| // Static methods that must be implemented by subclasses | ||
| static fromBytes(_bytes) { | ||
| notImplemented(); | ||
| } | ||
| static fromHex(_hex) { | ||
| notImplemented(); | ||
| } | ||
| get x() { | ||
| return this.toAffine().x; | ||
| } | ||
| get y() { | ||
| return this.toAffine().y; | ||
| } | ||
| // Common implementations | ||
| clearCofactor() { | ||
| // no-op for prime-order groups | ||
| return this; | ||
| } | ||
| assertValidity() { | ||
| this.ep.assertValidity(); | ||
| } | ||
| toAffine(invertedZ) { | ||
| return this.ep.toAffine(invertedZ); | ||
| } | ||
| toHex() { | ||
| return bytesToHex(this.toBytes()); | ||
| } | ||
| toString() { | ||
| return this.toHex(); | ||
| } | ||
| isTorsionFree() { | ||
| return true; | ||
| } | ||
| isSmallOrder() { | ||
| return false; | ||
| } | ||
| add(other) { | ||
| this.assertSame(other); | ||
| return this.init(this.ep.add(other.ep)); | ||
| } | ||
| subtract(other) { | ||
| this.assertSame(other); | ||
| return this.init(this.ep.subtract(other.ep)); | ||
| } | ||
| multiply(scalar) { | ||
| return this.init(this.ep.multiply(scalar)); | ||
| } | ||
| multiplyUnsafe(scalar) { | ||
| return this.init(this.ep.multiplyUnsafe(scalar)); | ||
| } | ||
| double() { | ||
| return this.init(this.ep.double()); | ||
| } | ||
| negate() { | ||
| return this.init(this.ep.negate()); | ||
| } | ||
| precompute(windowSize, isLazy) { | ||
| return this.init(this.ep.precompute(windowSize, isLazy)); | ||
| } | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes() { | ||
| return this.toBytes(); | ||
| } | ||
| } | ||
| /** | ||
| * Initializes EdDSA signatures over given Edwards curve. | ||
| */ | ||
| export function eddsa(Point, cHash, eddsaOpts = {}) { | ||
| if (typeof cHash !== 'function') | ||
| throw new Error('"hash" function param is required'); | ||
| _validateObject(eddsaOpts, {}, { | ||
| adjustScalarBytes: 'function', | ||
| randomBytes: 'function', | ||
| domain: 'function', | ||
| prehash: 'function', | ||
| mapToCurve: 'function', | ||
| }); | ||
| const { prehash } = eddsaOpts; | ||
| const { BASE, Fp, Fn } = Point; | ||
| const randomBytes = eddsaOpts.randomBytes || randomBytesWeb; | ||
| const adjustScalarBytes = eddsaOpts.adjustScalarBytes || ((bytes) => bytes); | ||
| const domain = eddsaOpts.domain || | ||
| ((data, ctx, phflag) => { | ||
| abool(phflag, 'phflag'); | ||
| if (ctx.length || phflag) | ||
| throw new Error('Contexts/pre-hash are not supported'); | ||
| return data; | ||
| }); // NOOP | ||
| // Little-endian SHA512 with modulo n | ||
| function modN_LE(hash) { | ||
| return Fn.create(bytesToNumberLE(hash)); // Not Fn.fromBytes: it has length limit | ||
| } | ||
| // Get the hashed private scalar per RFC8032 5.1.5 | ||
| function getPrivateScalar(key) { | ||
| const len = lengths.secretKey; | ||
| key = ensureBytes('private key', key, len); | ||
| // Hash private key with curve's hash function to produce uniformingly random input | ||
| // Check byte lengths: ensure(64, h(ensure(32, key))) | ||
| const hashed = ensureBytes('hashed private key', cHash(key), 2 * len); | ||
| const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE | ||
| const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6) | ||
| const scalar = modN_LE(head); // The actual private scalar | ||
| return { head, prefix, scalar }; | ||
| } | ||
| /** Convenience method that creates public key from scalar. RFC8032 5.1.5 */ | ||
| function getExtendedPublicKey(secretKey) { | ||
| const { head, prefix, scalar } = getPrivateScalar(secretKey); | ||
| const point = BASE.multiply(scalar); // Point on Edwards curve aka public key | ||
| const pointBytes = point.toBytes(); | ||
| return { head, prefix, scalar, point, pointBytes }; | ||
| } | ||
| /** Calculates EdDSA pub key. RFC8032 5.1.5. */ | ||
| function getPublicKey(secretKey) { | ||
| return getExtendedPublicKey(secretKey).pointBytes; | ||
| } | ||
| // int('LE', SHA512(dom2(F, C) || msgs)) mod N | ||
| function hashDomainToScalar(context = Uint8Array.of(), ...msgs) { | ||
| const msg = concatBytes(...msgs); | ||
| return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash))); | ||
| } | ||
| /** Signs message with privateKey. RFC8032 5.1.6 */ | ||
| function sign(msg, secretKey, options = {}) { | ||
| msg = ensureBytes('message', msg); | ||
| if (prehash) | ||
| msg = prehash(msg); // for ed25519ph etc. | ||
| const { prefix, scalar, pointBytes } = getExtendedPublicKey(secretKey); | ||
| const r = hashDomainToScalar(options.context, prefix, msg); // r = dom2(F, C) || prefix || PH(M) | ||
| const R = BASE.multiply(r).toBytes(); // R = rG | ||
| const k = hashDomainToScalar(options.context, R, pointBytes, msg); // R || A || PH(M) | ||
| const s = Fn.create(r + k * scalar); // S = (r + k * s) mod L | ||
| if (!Fn.isValid(s)) | ||
| throw new Error('sign failed: invalid s'); // 0 <= s < L | ||
| const rs = concatBytes(R, Fn.toBytes(s)); | ||
| return abytes(rs, lengths.signature, 'result'); | ||
| } | ||
| // verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex: | ||
| const verifyOpts = { zip215: true }; | ||
| /** | ||
| * Verifies EdDSA signature against message and public key. RFC8032 5.1.7. | ||
| * An extended group equation is checked. | ||
| */ | ||
| function verify(sig, msg, publicKey, options = verifyOpts) { | ||
| const { context, zip215 } = options; | ||
| const len = lengths.signature; | ||
| sig = ensureBytes('signature', sig, len); | ||
| msg = ensureBytes('message', msg); | ||
| publicKey = ensureBytes('publicKey', publicKey, lengths.publicKey); | ||
| if (zip215 !== undefined) | ||
| abool(zip215, 'zip215'); | ||
| if (prehash) | ||
| msg = prehash(msg); // for ed25519ph, etc | ||
| const mid = len / 2; | ||
| const r = sig.subarray(0, mid); | ||
| const s = bytesToNumberLE(sig.subarray(mid, len)); | ||
| let A, R, SB; | ||
| try { | ||
| // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5. | ||
| // zip215=true: 0 <= y < MASK (2^256 for ed25519) | ||
| // zip215=false: 0 <= y < P (2^255-19 for ed25519) | ||
| A = Point.fromBytes(publicKey, zip215); | ||
| R = Point.fromBytes(r, zip215); | ||
| SB = BASE.multiplyUnsafe(s); // 0 <= s < l is done inside | ||
| } | ||
| catch (error) { | ||
| return false; | ||
| } | ||
| if (!zip215 && A.isSmallOrder()) | ||
| return false; // zip215 allows public keys of small order | ||
| const k = hashDomainToScalar(context, R.toBytes(), A.toBytes(), msg); | ||
| const RkA = R.add(A.multiplyUnsafe(k)); | ||
| // Extended group equation | ||
| // [8][S]B = [8]R + [8][k]A' | ||
| return RkA.subtract(SB).clearCofactor().is0(); | ||
| } | ||
| const _size = Fp.BYTES; // 32 for ed25519, 57 for ed448 | ||
| const lengths = { | ||
| secretKey: _size, | ||
| publicKey: _size, | ||
| signature: 2 * _size, | ||
| seed: _size, | ||
| }; | ||
| function randomSecretKey(seed = randomBytes(lengths.seed)) { | ||
| return abytes(seed, lengths.seed, 'seed'); | ||
| } | ||
| function keygen(seed) { | ||
| const secretKey = utils.randomSecretKey(seed); | ||
| return { secretKey, publicKey: getPublicKey(secretKey) }; | ||
| } | ||
| function isValidSecretKey(key) { | ||
| return isBytes(key) && key.length === Fn.BYTES; | ||
| } | ||
| function isValidPublicKey(key, zip215) { | ||
| try { | ||
| return !!Point.fromBytes(key, zip215); | ||
| } | ||
| catch (error) { | ||
| return false; | ||
| } | ||
| } | ||
| const utils = { | ||
| getExtendedPublicKey, | ||
| randomSecretKey, | ||
| isValidSecretKey, | ||
| isValidPublicKey, | ||
| /** | ||
| * Converts ed public key to x public key. Uses formula: | ||
| * - ed25519: | ||
| * - `(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)` | ||
| * - `(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))` | ||
| * - ed448: | ||
| * - `(u, v) = ((y-1)/(y+1), sqrt(156324)*u/x)` | ||
| * - `(x, y) = (sqrt(156324)*u/v, (1+u)/(1-u))` | ||
| */ | ||
| toMontgomery(publicKey) { | ||
| const { y } = Point.fromBytes(publicKey); | ||
| const size = lengths.publicKey; | ||
| const is25519 = size === 32; | ||
| if (!is25519 && size !== 57) | ||
| throw new Error('only defined for 25519 and 448'); | ||
| const u = is25519 ? Fp.div(_1n + y, _1n - y) : Fp.div(y - _1n, y + _1n); | ||
| return Fp.toBytes(u); | ||
| }, | ||
| toMontgomeryPriv(secretKey) { | ||
| const size = lengths.secretKey; | ||
| abytes(secretKey, size); | ||
| const hashed = cHash(secretKey.subarray(0, size)); | ||
| return adjustScalarBytes(hashed).subarray(0, size); | ||
| }, | ||
| /** @deprecated */ | ||
| randomPrivateKey: randomSecretKey, | ||
| /** @deprecated */ | ||
| precompute(windowSize = 8, point = Point.BASE) { | ||
| return point.precompute(windowSize, false); | ||
| }, | ||
| }; | ||
| return Object.freeze({ | ||
| keygen, | ||
| getPublicKey, | ||
| sign, | ||
| verify, | ||
| utils, | ||
| Point, | ||
| lengths, | ||
| }); | ||
| } | ||
| function _eddsa_legacy_opts_to_new(c) { | ||
| const CURVE = { | ||
| a: c.a, | ||
| d: c.d, | ||
| p: c.Fp.ORDER, | ||
| n: c.n, | ||
| h: c.h, | ||
| Gx: c.Gx, | ||
| Gy: c.Gy, | ||
| }; | ||
| const Fp = c.Fp; | ||
| const Fn = Field(CURVE.n, c.nBitLength, true); | ||
| const curveOpts = { Fp, Fn, uvRatio: c.uvRatio }; | ||
| const eddsaOpts = { | ||
| randomBytes: c.randomBytes, | ||
| adjustScalarBytes: c.adjustScalarBytes, | ||
| domain: c.domain, | ||
| prehash: c.prehash, | ||
| mapToCurve: c.mapToCurve, | ||
| }; | ||
| return { CURVE, curveOpts, hash: c.hash, eddsaOpts }; | ||
| } | ||
| function _eddsa_new_output_to_legacy(c, eddsa) { | ||
| const Point = eddsa.Point; | ||
| const legacy = Object.assign({}, eddsa, { | ||
| ExtendedPoint: Point, | ||
| CURVE: c, | ||
| nBitLength: Point.Fn.BITS, | ||
| nByteLength: Point.Fn.BYTES, | ||
| }); | ||
| return legacy; | ||
| } | ||
| // TODO: remove. Use eddsa | ||
| export function twistedEdwards(c) { | ||
| const { CURVE, curveOpts, hash, eddsaOpts } = _eddsa_legacy_opts_to_new(c); | ||
| const Point = edwards(CURVE, curveOpts); | ||
| const EDDSA = eddsa(Point, hash, eddsaOpts); | ||
| return _eddsa_new_output_to_legacy(c, EDDSA); | ||
| } | ||
| //# sourceMappingURL=edwards.js.map |
| {"version":3,"file":"edwards.js","sourceRoot":"","sources":["../../src/abstract/edwards.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Experimental implementation of NTT / FFT (Fast Fourier Transform) over finite fields. | ||
| * API may change at any time. The code has not been audited. Feature requests are welcome. | ||
| * @module | ||
| */ | ||
| import type { IField } from './modular.ts'; | ||
| export interface MutableArrayLike<T> { | ||
| [index: number]: T; | ||
| length: number; | ||
| slice(start?: number, end?: number): this; | ||
| [Symbol.iterator](): Iterator<T>; | ||
| } | ||
| /** Checks if integer is in form of `1 << X` */ | ||
| export declare function isPowerOfTwo(x: number): boolean; | ||
| export declare function nextPowerOfTwo(n: number): number; | ||
| export declare function reverseBits(n: number, bits: number): number; | ||
| /** Similar to `bitLen(x)-1` but much faster for small integers, like indices */ | ||
| export declare function log2(n: number): number; | ||
| /** | ||
| * Moves lowest bit to highest position, which at first step splits | ||
| * array on even and odd indices, then it applied again to each part, | ||
| * which is core of fft | ||
| */ | ||
| export declare function bitReversalInplace<T extends MutableArrayLike<any>>(values: T): T; | ||
| export declare function bitReversalPermutation<T>(values: T[]): T[]; | ||
| export type RootsOfUnity = { | ||
| roots: (bits: number) => bigint[]; | ||
| brp(bits: number): bigint[]; | ||
| inverse(bits: number): bigint[]; | ||
| omega: (bits: number) => bigint; | ||
| clear: () => void; | ||
| }; | ||
| /** We limit roots up to 2**31, which is a lot: 2-billion polynomimal should be rare. */ | ||
| export declare function rootsOfUnity(field: IField<bigint>, generator?: bigint): RootsOfUnity; | ||
| export type Polynomial<T> = MutableArrayLike<T>; | ||
| /** | ||
| * Maps great to Field<bigint>, but not to Group (EC points): | ||
| * - inv from scalar field | ||
| * - we need multiplyUnsafe here, instead of multiply for speed | ||
| * - multiplyUnsafe is safe in the context: we do mul(rootsOfUnity), which are public and sparse | ||
| */ | ||
| export type FFTOpts<T, R> = { | ||
| add: (a: T, b: T) => T; | ||
| sub: (a: T, b: T) => T; | ||
| mul: (a: T, scalar: R) => T; | ||
| inv: (a: R) => R; | ||
| }; | ||
| export type FFTCoreOpts<R> = { | ||
| N: number; | ||
| roots: Polynomial<R>; | ||
| dit: boolean; | ||
| invertButterflies?: boolean; | ||
| skipStages?: number; | ||
| brp?: boolean; | ||
| }; | ||
| export type FFTCoreLoop<T> = <P extends Polynomial<T>>(values: P) => P; | ||
| /** | ||
| * Constructs different flavors of FFT. radix2 implementation of low level mutating API. Flavors: | ||
| * | ||
| * - DIT (Decimation-in-Time): Bottom-Up (leaves -> root), Cool-Turkey | ||
| * - DIF (Decimation-in-Frequency): Top-Down (root -> leaves), Gentleman–Sande | ||
| * | ||
| * DIT takes brp input, returns natural output. | ||
| * DIF takes natural input, returns brp output. | ||
| * | ||
| * The output is actually identical. Time / frequence distinction is not meaningful | ||
| * for Polynomial multiplication in fields. | ||
| * Which means if protocol supports/needs brp output/inputs, then we can skip this step. | ||
| * | ||
| * Cyclic NTT: Rq = Zq[x]/(x^n-1). butterfly_DIT+loop_DIT OR butterfly_DIF+loop_DIT, roots are omega | ||
| * Negacyclic NTT: Rq = Zq[x]/(x^n+1). butterfly_DIT+loop_DIF, at least for mlkem / mldsa | ||
| */ | ||
| export declare const FFTCore: <T, R>(F: FFTOpts<T, R>, coreOpts: FFTCoreOpts<R>) => FFTCoreLoop<T>; | ||
| export type FFTMethods<T> = { | ||
| direct<P extends Polynomial<T>>(values: P, brpInput?: boolean, brpOutput?: boolean): P; | ||
| inverse<P extends Polynomial<T>>(values: P, brpInput?: boolean, brpOutput?: boolean): P; | ||
| }; | ||
| /** | ||
| * NTT aka FFT over finite field (NOT over complex numbers). | ||
| * Naming mirrors other libraries. | ||
| */ | ||
| export declare function FFT<T>(roots: RootsOfUnity, opts: FFTOpts<T, bigint>): FFTMethods<T>; | ||
| export type CreatePolyFn<P extends Polynomial<T>, T> = (len: number, elm?: T) => P; | ||
| export type PolyFn<P extends Polynomial<T>, T> = { | ||
| roots: RootsOfUnity; | ||
| create: CreatePolyFn<P, T>; | ||
| length?: number; | ||
| degree: (a: P) => number; | ||
| extend: (a: P, len: number) => P; | ||
| add: (a: P, b: P) => P; | ||
| sub: (a: P, b: P) => P; | ||
| mul: (a: P, b: P | T) => P; | ||
| dot: (a: P, b: P) => P; | ||
| convolve: (a: P, b: P) => P; | ||
| shift: (p: P, factor: bigint) => P; | ||
| clone: (a: P) => P; | ||
| eval: (a: P, basis: P) => T; | ||
| monomial: { | ||
| basis: (x: T, n: number) => P; | ||
| eval: (a: P, x: T) => T; | ||
| }; | ||
| lagrange: { | ||
| basis: (x: T, n: number, brp?: boolean) => P; | ||
| eval: (a: P, x: T, brp?: boolean) => T; | ||
| }; | ||
| vanishing: (roots: P) => P; | ||
| }; | ||
| /** | ||
| * Poly wants a cracker. | ||
| * | ||
| * Polynomials are functions like `y=f(x)`, which means when we multiply two polynomials, result is | ||
| * function `f3(x) = f1(x) * f2(x)`, we don't multiply values. Key takeaways: | ||
| * | ||
| * - **Polynomial** is an array of coefficients: `f(x) = sum(coeff[i] * basis[i](x))` | ||
| * - **Basis** is array of functions | ||
| * - **Monominal** is Polynomial where `basis[i](x) == x**i` (powers) | ||
| * - **Array size** is domain size | ||
| * - **Lattice** is matrix (Polynomial of Polynomials) | ||
| */ | ||
| export declare function poly<T>(field: IField<T>, roots: RootsOfUnity, create?: undefined, fft?: FFTMethods<T>, length?: number): PolyFn<T[], T>; | ||
| export declare function poly<T, P extends Polynomial<T>>(field: IField<T>, roots: RootsOfUnity, create: CreatePolyFn<P, T>, fft?: FFTMethods<T>, length?: number): PolyFn<P, T>; | ||
| //# sourceMappingURL=fft.d.ts.map |
| {"version":3,"file":"fft.d.ts","sourceRoot":"","sources":["../../src/abstract/fft.ts"],"names":[],"mappings":"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"} |
| function checkU32(n) { | ||
| // 0xff_ff_ff_ff | ||
| if (!Number.isSafeInteger(n) || n < 0 || n > 0xffffffff) | ||
| throw new Error('wrong u32 integer:' + n); | ||
| return n; | ||
| } | ||
| /** Checks if integer is in form of `1 << X` */ | ||
| export function isPowerOfTwo(x) { | ||
| checkU32(x); | ||
| return (x & (x - 1)) === 0 && x !== 0; | ||
| } | ||
| export function nextPowerOfTwo(n) { | ||
| checkU32(n); | ||
| if (n <= 1) | ||
| return 1; | ||
| return (1 << (log2(n - 1) + 1)) >>> 0; | ||
| } | ||
| export function reverseBits(n, bits) { | ||
| checkU32(n); | ||
| let reversed = 0; | ||
| for (let i = 0; i < bits; i++, n >>>= 1) | ||
| reversed = (reversed << 1) | (n & 1); | ||
| return reversed; | ||
| } | ||
| /** Similar to `bitLen(x)-1` but much faster for small integers, like indices */ | ||
| export function log2(n) { | ||
| checkU32(n); | ||
| return 31 - Math.clz32(n); | ||
| } | ||
| /** | ||
| * Moves lowest bit to highest position, which at first step splits | ||
| * array on even and odd indices, then it applied again to each part, | ||
| * which is core of fft | ||
| */ | ||
| export function bitReversalInplace(values) { | ||
| const n = values.length; | ||
| if (n < 2 || !isPowerOfTwo(n)) | ||
| throw new Error('n must be a power of 2 and greater than 1. Got ' + n); | ||
| const bits = log2(n); | ||
| for (let i = 0; i < n; i++) { | ||
| const j = reverseBits(i, bits); | ||
| if (i < j) { | ||
| const tmp = values[i]; | ||
| values[i] = values[j]; | ||
| values[j] = tmp; | ||
| } | ||
| } | ||
| return values; | ||
| } | ||
| export function bitReversalPermutation(values) { | ||
| return bitReversalInplace(values.slice()); | ||
| } | ||
| const _1n = /** @__PURE__ */ BigInt(1); | ||
| function findGenerator(field) { | ||
| let G = BigInt(2); | ||
| for (; field.eql(field.pow(G, field.ORDER >> _1n), field.ONE); G++) | ||
| ; | ||
| return G; | ||
| } | ||
| /** We limit roots up to 2**31, which is a lot: 2-billion polynomimal should be rare. */ | ||
| export function rootsOfUnity(field, generator) { | ||
| // Factor field.ORDER-1 as oddFactor * 2^powerOfTwo | ||
| let oddFactor = field.ORDER - _1n; | ||
| let powerOfTwo = 0; | ||
| for (; (oddFactor & _1n) !== _1n; powerOfTwo++, oddFactor >>= _1n) | ||
| ; | ||
| // Find non quadratic residue | ||
| let G = generator !== undefined ? BigInt(generator) : findGenerator(field); | ||
| // Powers of generator | ||
| const omegas = new Array(powerOfTwo + 1); | ||
| omegas[powerOfTwo] = field.pow(G, oddFactor); | ||
| for (let i = powerOfTwo; i > 0; i--) | ||
| omegas[i - 1] = field.sqr(omegas[i]); | ||
| // Compute all roots of unity for powers up to maxPower | ||
| const rootsCache = []; | ||
| const checkBits = (bits) => { | ||
| checkU32(bits); | ||
| if (bits > 31 || bits > powerOfTwo) | ||
| throw new Error('rootsOfUnity: wrong bits ' + bits + ' powerOfTwo=' + powerOfTwo); | ||
| return bits; | ||
| }; | ||
| const precomputeRoots = (maxPower) => { | ||
| checkBits(maxPower); | ||
| for (let power = maxPower; power >= 0; power--) { | ||
| if (rootsCache[power]) | ||
| continue; // Skip if we've already computed roots for this power | ||
| const rootsAtPower = []; | ||
| for (let j = 0, cur = field.ONE; j < 2 ** power; j++, cur = field.mul(cur, omegas[power])) | ||
| rootsAtPower.push(cur); | ||
| rootsCache[power] = rootsAtPower; | ||
| } | ||
| return rootsCache[maxPower]; | ||
| }; | ||
| const brpCache = new Map(); | ||
| const inverseCache = new Map(); | ||
| // NOTE: we use bits instead of power, because power = 2**bits, | ||
| // but power is not neccesary isPowerOfTwo(power)! | ||
| return { | ||
| roots: (bits) => { | ||
| const b = checkBits(bits); | ||
| return precomputeRoots(b); | ||
| }, | ||
| brp(bits) { | ||
| const b = checkBits(bits); | ||
| if (brpCache.has(b)) | ||
| return brpCache.get(b); | ||
| else { | ||
| const res = bitReversalPermutation(this.roots(b)); | ||
| brpCache.set(b, res); | ||
| return res; | ||
| } | ||
| }, | ||
| inverse(bits) { | ||
| const b = checkBits(bits); | ||
| if (inverseCache.has(b)) | ||
| return inverseCache.get(b); | ||
| else { | ||
| const res = field.invertBatch(this.roots(b)); | ||
| inverseCache.set(b, res); | ||
| return res; | ||
| } | ||
| }, | ||
| omega: (bits) => omegas[checkBits(bits)], | ||
| clear: () => { | ||
| rootsCache.splice(0, rootsCache.length); | ||
| brpCache.clear(); | ||
| }, | ||
| }; | ||
| } | ||
| /** | ||
| * Constructs different flavors of FFT. radix2 implementation of low level mutating API. Flavors: | ||
| * | ||
| * - DIT (Decimation-in-Time): Bottom-Up (leaves -> root), Cool-Turkey | ||
| * - DIF (Decimation-in-Frequency): Top-Down (root -> leaves), Gentleman–Sande | ||
| * | ||
| * DIT takes brp input, returns natural output. | ||
| * DIF takes natural input, returns brp output. | ||
| * | ||
| * The output is actually identical. Time / frequence distinction is not meaningful | ||
| * for Polynomial multiplication in fields. | ||
| * Which means if protocol supports/needs brp output/inputs, then we can skip this step. | ||
| * | ||
| * Cyclic NTT: Rq = Zq[x]/(x^n-1). butterfly_DIT+loop_DIT OR butterfly_DIF+loop_DIT, roots are omega | ||
| * Negacyclic NTT: Rq = Zq[x]/(x^n+1). butterfly_DIT+loop_DIF, at least for mlkem / mldsa | ||
| */ | ||
| export const FFTCore = (F, coreOpts) => { | ||
| const { N, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts; | ||
| const bits = log2(N); | ||
| if (!isPowerOfTwo(N)) | ||
| throw new Error('FFT: Polynomial size should be power of two'); | ||
| const isDit = dit !== invertButterflies; | ||
| isDit; | ||
| return (values) => { | ||
| if (values.length !== N) | ||
| throw new Error('FFT: wrong Polynomial length'); | ||
| if (dit && brp) | ||
| bitReversalInplace(values); | ||
| for (let i = 0, g = 1; i < bits - skipStages; i++) { | ||
| // For each stage s (sub-FFT length m = 2^s) | ||
| const s = dit ? i + 1 + skipStages : bits - i; | ||
| const m = 1 << s; | ||
| const m2 = m >> 1; | ||
| const stride = N >> s; | ||
| // Loop over each subarray of length m | ||
| for (let k = 0; k < N; k += m) { | ||
| // Loop over each butterfly within the subarray | ||
| for (let j = 0, grp = g++; j < m2; j++) { | ||
| const rootPos = invertButterflies ? (dit ? N - grp : grp) : j * stride; | ||
| const i0 = k + j; | ||
| const i1 = k + j + m2; | ||
| const omega = roots[rootPos]; | ||
| const b = values[i1]; | ||
| const a = values[i0]; | ||
| // Inlining gives us 10% perf in kyber vs functions | ||
| if (isDit) { | ||
| const t = F.mul(b, omega); // Standard DIT butterfly | ||
| values[i0] = F.add(a, t); | ||
| values[i1] = F.sub(a, t); | ||
| } | ||
| else if (invertButterflies) { | ||
| values[i0] = F.add(b, a); // DIT loop + inverted butterflies (Kyber decode) | ||
| values[i1] = F.mul(F.sub(b, a), omega); | ||
| } | ||
| else { | ||
| values[i0] = F.add(a, b); // Standard DIF butterfly | ||
| values[i1] = F.mul(F.sub(a, b), omega); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| if (!dit && brp) | ||
| bitReversalInplace(values); | ||
| return values; | ||
| }; | ||
| }; | ||
| /** | ||
| * NTT aka FFT over finite field (NOT over complex numbers). | ||
| * Naming mirrors other libraries. | ||
| */ | ||
| export function FFT(roots, opts) { | ||
| const getLoop = (N, roots, brpInput = false, brpOutput = false) => { | ||
| if (brpInput && brpOutput) { | ||
| // we cannot optimize this case, but lets support it anyway | ||
| return (values) => FFTCore(opts, { N, roots, dit: false, brp: false })(bitReversalInplace(values)); | ||
| } | ||
| if (brpInput) | ||
| return FFTCore(opts, { N, roots, dit: true, brp: false }); | ||
| if (brpOutput) | ||
| return FFTCore(opts, { N, roots, dit: false, brp: false }); | ||
| return FFTCore(opts, { N, roots, dit: true, brp: true }); // all natural | ||
| }; | ||
| return { | ||
| direct(values, brpInput = false, brpOutput = false) { | ||
| const N = values.length; | ||
| if (!isPowerOfTwo(N)) | ||
| throw new Error('FFT: Polynomial size should be power of two'); | ||
| const bits = log2(N); | ||
| return getLoop(N, roots.roots(bits), brpInput, brpOutput)(values.slice()); | ||
| }, | ||
| inverse(values, brpInput = false, brpOutput = false) { | ||
| const N = values.length; | ||
| const bits = log2(N); | ||
| const res = getLoop(N, roots.inverse(bits), brpInput, brpOutput)(values.slice()); | ||
| const ivm = opts.inv(BigInt(values.length)); // scale | ||
| // we can get brp output if we use dif instead of dit! | ||
| for (let i = 0; i < res.length; i++) | ||
| res[i] = opts.mul(res[i], ivm); | ||
| // Allows to re-use non-inverted roots, but is VERY fragile | ||
| // return [res[0]].concat(res.slice(1).reverse()); | ||
| // inverse calculated as pow(-1), which transforms into ω^{-kn} (-> reverses indices) | ||
| return res; | ||
| }, | ||
| }; | ||
| } | ||
| export function poly(field, roots, create, fft, length) { | ||
| const F = field; | ||
| const _create = create || | ||
| ((len, elm) => new Array(len).fill(elm ?? F.ZERO)); | ||
| const isPoly = (x) => Array.isArray(x) || ArrayBuffer.isView(x); | ||
| const checkLength = (...lst) => { | ||
| if (!lst.length) | ||
| return 0; | ||
| for (const i of lst) | ||
| if (!isPoly(i)) | ||
| throw new Error('poly: not polynomial: ' + i); | ||
| const L = lst[0].length; | ||
| for (let i = 1; i < lst.length; i++) | ||
| if (lst[i].length !== L) | ||
| throw new Error(`poly: mismatched lengths ${L} vs ${lst[i].length}`); | ||
| if (length !== undefined && L !== length) | ||
| throw new Error(`poly: expected fixed length ${length}, got ${L}`); | ||
| return L; | ||
| }; | ||
| function findOmegaIndex(x, n, brp = false) { | ||
| const bits = log2(n); | ||
| const omega = brp ? roots.brp(bits) : roots.roots(bits); | ||
| for (let i = 0; i < n; i++) | ||
| if (F.eql(x, omega[i])) | ||
| return i; | ||
| return -1; | ||
| } | ||
| // TODO: mutating versions for mlkem/mldsa | ||
| return { | ||
| roots, | ||
| create: _create, | ||
| length, | ||
| extend: (a, len) => { | ||
| checkLength(a); | ||
| const out = _create(len, F.ZERO); | ||
| for (let i = 0; i < a.length; i++) | ||
| out[i] = a[i]; | ||
| return out; | ||
| }, | ||
| degree: (a) => { | ||
| checkLength(a); | ||
| for (let i = a.length - 1; i >= 0; i--) | ||
| if (!F.is0(a[i])) | ||
| return i; | ||
| return -1; | ||
| }, | ||
| add: (a, b) => { | ||
| const len = checkLength(a, b); | ||
| const out = _create(len); | ||
| for (let i = 0; i < len; i++) | ||
| out[i] = F.add(a[i], b[i]); | ||
| return out; | ||
| }, | ||
| sub: (a, b) => { | ||
| const len = checkLength(a, b); | ||
| const out = _create(len); | ||
| for (let i = 0; i < len; i++) | ||
| out[i] = F.sub(a[i], b[i]); | ||
| return out; | ||
| }, | ||
| dot: (a, b) => { | ||
| const len = checkLength(a, b); | ||
| const out = _create(len); | ||
| for (let i = 0; i < len; i++) | ||
| out[i] = F.mul(a[i], b[i]); | ||
| return out; | ||
| }, | ||
| mul: (a, b) => { | ||
| if (isPoly(b)) { | ||
| const len = checkLength(a, b); | ||
| if (fft) { | ||
| const A = fft.direct(a, false, true); | ||
| const B = fft.direct(b, false, true); | ||
| for (let i = 0; i < A.length; i++) | ||
| A[i] = F.mul(A[i], B[i]); | ||
| return fft.inverse(A, true, false); | ||
| } | ||
| else { | ||
| // NOTE: this is quadratic and mostly for compat tests with FFT | ||
| const res = _create(len); | ||
| for (let i = 0; i < len; i++) { | ||
| for (let j = 0; j < len; j++) { | ||
| const k = (i + j) % len; // wrap mod length | ||
| res[k] = F.add(res[k], F.mul(a[i], b[j])); | ||
| } | ||
| } | ||
| return res; | ||
| } | ||
| } | ||
| else { | ||
| const out = _create(checkLength(a)); | ||
| for (let i = 0; i < out.length; i++) | ||
| out[i] = F.mul(a[i], b); | ||
| return out; | ||
| } | ||
| }, | ||
| convolve(a, b) { | ||
| const len = nextPowerOfTwo(a.length + b.length - 1); | ||
| return this.mul(this.extend(a, len), this.extend(b, len)); | ||
| }, | ||
| shift(p, factor) { | ||
| const out = _create(checkLength(p)); | ||
| out[0] = p[0]; | ||
| for (let i = 1, power = F.ONE; i < p.length; i++) { | ||
| power = F.mul(power, factor); | ||
| out[i] = F.mul(p[i], power); | ||
| } | ||
| return out; | ||
| }, | ||
| clone: (a) => { | ||
| checkLength(a); | ||
| const out = _create(a.length); | ||
| for (let i = 0; i < a.length; i++) | ||
| out[i] = a[i]; | ||
| return out; | ||
| }, | ||
| eval: (a, basis) => { | ||
| checkLength(a); | ||
| let acc = F.ZERO; | ||
| for (let i = 0; i < a.length; i++) | ||
| acc = F.add(acc, F.mul(a[i], basis[i])); | ||
| return acc; | ||
| }, | ||
| monomial: { | ||
| basis: (x, n) => { | ||
| const out = _create(n); | ||
| let pow = F.ONE; | ||
| for (let i = 0; i < n; i++) { | ||
| out[i] = pow; | ||
| pow = F.mul(pow, x); | ||
| } | ||
| return out; | ||
| }, | ||
| eval: (a, x) => { | ||
| checkLength(a); | ||
| // Same as eval(a, monomialBasis(x, a.length)), but it is faster this way | ||
| let acc = F.ZERO; | ||
| for (let i = a.length - 1; i >= 0; i--) | ||
| acc = F.add(F.mul(acc, x), a[i]); | ||
| return acc; | ||
| }, | ||
| }, | ||
| lagrange: { | ||
| basis: (x, n, brp = false, weights) => { | ||
| const bits = log2(n); | ||
| const cache = weights || brp ? roots.brp(bits) : roots.roots(bits); // [ω⁰, ω¹, ..., ωⁿ⁻¹] | ||
| const out = _create(n); | ||
| // Fast Kronecker-δ shortcut | ||
| const idx = findOmegaIndex(x, n, brp); | ||
| if (idx !== -1) { | ||
| out[idx] = F.ONE; | ||
| return out; | ||
| } | ||
| const tm = F.pow(x, BigInt(n)); | ||
| const c = F.mul(F.sub(tm, F.ONE), F.inv(BigInt(n))); // c = (xⁿ - 1)/n | ||
| const denom = _create(n); | ||
| for (let i = 0; i < n; i++) | ||
| denom[i] = F.sub(x, cache[i]); | ||
| const inv = F.invertBatch(denom); | ||
| for (let i = 0; i < n; i++) | ||
| out[i] = F.mul(c, F.mul(cache[i], inv[i])); | ||
| return out; | ||
| }, | ||
| eval(a, x, brp = false) { | ||
| checkLength(a); | ||
| const idx = findOmegaIndex(x, a.length, brp); | ||
| if (idx !== -1) | ||
| return a[idx]; // fast path | ||
| const L = this.basis(x, a.length, brp); // Lᵢ(x) | ||
| let acc = F.ZERO; | ||
| for (let i = 0; i < a.length; i++) | ||
| if (!F.is0(a[i])) | ||
| acc = F.add(acc, F.mul(a[i], L[i])); | ||
| return acc; | ||
| }, | ||
| }, | ||
| vanishing(roots) { | ||
| checkLength(roots); | ||
| const out = _create(roots.length + 1, F.ZERO); | ||
| out[0] = F.ONE; | ||
| for (const r of roots) { | ||
| const neg = F.neg(r); | ||
| for (let j = out.length - 1; j > 0; j--) | ||
| out[j] = F.add(F.mul(out[j], neg), out[j - 1]); | ||
| out[0] = F.mul(out[0], neg); | ||
| } | ||
| return out; | ||
| }, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=fft.js.map |
| {"version":3,"file":"fft.js","sourceRoot":"","sources":["../../src/abstract/fft.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * hash-to-curve from RFC 9380. | ||
| * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F. | ||
| * https://www.rfc-editor.org/rfc/rfc9380 | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import type { CHash } from '../utils.ts'; | ||
| import type { AffinePoint, Group, GroupConstructor } from './curve.ts'; | ||
| import { type IField } from './modular.ts'; | ||
| export type UnicodeOrBytes = string | Uint8Array; | ||
| /** | ||
| * * `DST` is a domain separation tag, defined in section 2.2.5 | ||
| * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m | ||
| * * `m` is extension degree (1 for prime fields) | ||
| * * `k` is the target security target in bits (e.g. 128), from section 5.1 | ||
| * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF) | ||
| * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props | ||
| */ | ||
| export type H2COpts = { | ||
| DST: UnicodeOrBytes; | ||
| expand: 'xmd' | 'xof'; | ||
| hash: CHash; | ||
| p: bigint; | ||
| m: number; | ||
| k: number; | ||
| }; | ||
| export type H2CHashOpts = { | ||
| expand: 'xmd' | 'xof'; | ||
| hash: CHash; | ||
| }; | ||
| export type Opts = H2COpts; | ||
| /** | ||
| * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits. | ||
| * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1). | ||
| */ | ||
| export declare function expand_message_xmd(msg: Uint8Array, DST: UnicodeOrBytes, lenInBytes: number, H: CHash): Uint8Array; | ||
| /** | ||
| * Produces a uniformly random byte string using an extendable-output function (XOF) H. | ||
| * 1. The collision resistance of H MUST be at least k bits. | ||
| * 2. H MUST be an XOF that has been proved indifferentiable from | ||
| * a random oracle under a reasonable cryptographic assumption. | ||
| * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2). | ||
| */ | ||
| export declare function expand_message_xof(msg: Uint8Array, DST: UnicodeOrBytes, lenInBytes: number, k: number, H: CHash): Uint8Array; | ||
| /** | ||
| * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F. | ||
| * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2). | ||
| * @param msg a byte string containing the message to hash | ||
| * @param count the number of elements of F to output | ||
| * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above | ||
| * @returns [u_0, ..., u_(count - 1)], a list of field elements. | ||
| */ | ||
| export declare function hash_to_field(msg: Uint8Array, count: number, options: H2COpts): bigint[][]; | ||
| export type XY<T> = (x: T, y: T) => { | ||
| x: T; | ||
| y: T; | ||
| }; | ||
| export type XYRatio<T> = [T[], T[], T[], T[]]; | ||
| export declare function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<T>; | ||
| /** Point interface, which curves must implement to work correctly with the module. */ | ||
| export interface H2CPoint<T> extends Group<H2CPoint<T>> { | ||
| add(rhs: H2CPoint<T>): H2CPoint<T>; | ||
| toAffine(iz?: bigint): AffinePoint<T>; | ||
| clearCofactor(): H2CPoint<T>; | ||
| assertValidity(): void; | ||
| } | ||
| export interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> { | ||
| fromAffine(ap: AffinePoint<T>): H2CPoint<T>; | ||
| } | ||
| export type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>; | ||
| export type htfBasicOpts = { | ||
| DST: UnicodeOrBytes; | ||
| }; | ||
| export type H2CMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>; | ||
| export type HTFMethod<T> = H2CMethod<T>; | ||
| export type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>; | ||
| export type H2CHasherBase<T> = { | ||
| hashToCurve: H2CMethod<T>; | ||
| hashToScalar: (msg: Uint8Array, options: htfBasicOpts) => bigint; | ||
| }; | ||
| /** | ||
| * RFC 9380 methods, with cofactor clearing. See https://www.rfc-editor.org/rfc/rfc9380#section-3. | ||
| * | ||
| * * hashToCurve: `map(hash(input))`, encodes RANDOM bytes to curve (WITH hashing) | ||
| * * encodeToCurve: `map(hash(input))`, encodes NON-UNIFORM bytes to curve (WITH hashing) | ||
| * * mapToCurve: `map(scalars)`, encodes NON-UNIFORM scalars to curve (NO hashing) | ||
| */ | ||
| export type H2CHasher<T> = H2CHasherBase<T> & { | ||
| encodeToCurve: H2CMethod<T>; | ||
| mapToCurve: MapMethod<T>; | ||
| defaults: H2COpts & { | ||
| encodeDST?: UnicodeOrBytes; | ||
| }; | ||
| }; | ||
| export type Hasher<T> = H2CHasher<T>; | ||
| export declare const _DST_scalar: Uint8Array; | ||
| /** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */ | ||
| export declare function createHasher<T>(Point: H2CPointConstructor<T>, mapToCurve: MapToCurve<T>, defaults: H2COpts & { | ||
| encodeDST?: UnicodeOrBytes; | ||
| }): H2CHasher<T>; | ||
| //# sourceMappingURL=hash-to-curve.d.ts.map |
| {"version":3,"file":"hash-to-curve.d.ts","sourceRoot":"","sources":["../../src/abstract/hash-to-curve.ts"],"names":[],"mappings":"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"} |
| import { _validateObject, abytes, bytesToNumberBE, concatBytes, isBytes, isHash, utf8ToBytes, } from "../utils.js"; | ||
| import { FpInvertBatch, mod } from "./modular.js"; | ||
| // Octet Stream to Integer. "spec" implementation of os2ip is 2.5x slower vs bytesToNumberBE. | ||
| const os2ip = bytesToNumberBE; | ||
| // Integer to Octet Stream (numberToBytesBE) | ||
| function i2osp(value, length) { | ||
| anum(value); | ||
| anum(length); | ||
| if (value < 0 || value >= 1 << (8 * length)) | ||
| throw new Error('invalid I2OSP input: ' + value); | ||
| const res = Array.from({ length }).fill(0); | ||
| for (let i = length - 1; i >= 0; i--) { | ||
| res[i] = value & 0xff; | ||
| value >>>= 8; | ||
| } | ||
| return new Uint8Array(res); | ||
| } | ||
| function strxor(a, b) { | ||
| const arr = new Uint8Array(a.length); | ||
| for (let i = 0; i < a.length; i++) { | ||
| arr[i] = a[i] ^ b[i]; | ||
| } | ||
| return arr; | ||
| } | ||
| function anum(item) { | ||
| if (!Number.isSafeInteger(item)) | ||
| throw new Error('number expected'); | ||
| } | ||
| function normDST(DST) { | ||
| if (!isBytes(DST) && typeof DST !== 'string') | ||
| throw new Error('DST must be Uint8Array or string'); | ||
| return typeof DST === 'string' ? utf8ToBytes(DST) : DST; | ||
| } | ||
| /** | ||
| * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits. | ||
| * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1). | ||
| */ | ||
| export function expand_message_xmd(msg, DST, lenInBytes, H) { | ||
| abytes(msg); | ||
| anum(lenInBytes); | ||
| DST = normDST(DST); | ||
| // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3 | ||
| if (DST.length > 255) | ||
| DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST)); | ||
| const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H; | ||
| const ell = Math.ceil(lenInBytes / b_in_bytes); | ||
| if (lenInBytes > 65535 || ell > 255) | ||
| throw new Error('expand_message_xmd: invalid lenInBytes'); | ||
| const DST_prime = concatBytes(DST, i2osp(DST.length, 1)); | ||
| const Z_pad = i2osp(0, r_in_bytes); | ||
| const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str | ||
| const b = new Array(ell); | ||
| const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime)); | ||
| b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime)); | ||
| for (let i = 1; i <= ell; i++) { | ||
| const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime]; | ||
| b[i] = H(concatBytes(...args)); | ||
| } | ||
| const pseudo_random_bytes = concatBytes(...b); | ||
| return pseudo_random_bytes.slice(0, lenInBytes); | ||
| } | ||
| /** | ||
| * Produces a uniformly random byte string using an extendable-output function (XOF) H. | ||
| * 1. The collision resistance of H MUST be at least k bits. | ||
| * 2. H MUST be an XOF that has been proved indifferentiable from | ||
| * a random oracle under a reasonable cryptographic assumption. | ||
| * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2). | ||
| */ | ||
| export function expand_message_xof(msg, DST, lenInBytes, k, H) { | ||
| abytes(msg); | ||
| anum(lenInBytes); | ||
| DST = normDST(DST); | ||
| // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3 | ||
| // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8)); | ||
| if (DST.length > 255) { | ||
| const dkLen = Math.ceil((2 * k) / 8); | ||
| DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest(); | ||
| } | ||
| if (lenInBytes > 65535 || DST.length > 255) | ||
| throw new Error('expand_message_xof: invalid lenInBytes'); | ||
| return (H.create({ dkLen: lenInBytes }) | ||
| .update(msg) | ||
| .update(i2osp(lenInBytes, 2)) | ||
| // 2. DST_prime = DST || I2OSP(len(DST), 1) | ||
| .update(DST) | ||
| .update(i2osp(DST.length, 1)) | ||
| .digest()); | ||
| } | ||
| /** | ||
| * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F. | ||
| * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2). | ||
| * @param msg a byte string containing the message to hash | ||
| * @param count the number of elements of F to output | ||
| * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above | ||
| * @returns [u_0, ..., u_(count - 1)], a list of field elements. | ||
| */ | ||
| export function hash_to_field(msg, count, options) { | ||
| _validateObject(options, { | ||
| p: 'bigint', | ||
| m: 'number', | ||
| k: 'number', | ||
| hash: 'function', | ||
| }); | ||
| const { p, k, m, hash, expand, DST } = options; | ||
| if (!isHash(options.hash)) | ||
| throw new Error('expected valid hash'); | ||
| abytes(msg); | ||
| anum(count); | ||
| const log2p = p.toString(2).length; | ||
| const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above | ||
| const len_in_bytes = count * m * L; | ||
| let prb; // pseudo_random_bytes | ||
| if (expand === 'xmd') { | ||
| prb = expand_message_xmd(msg, DST, len_in_bytes, hash); | ||
| } | ||
| else if (expand === 'xof') { | ||
| prb = expand_message_xof(msg, DST, len_in_bytes, k, hash); | ||
| } | ||
| else if (expand === '_internal_pass') { | ||
| // for internal tests only | ||
| prb = msg; | ||
| } | ||
| else { | ||
| throw new Error('expand must be "xmd" or "xof"'); | ||
| } | ||
| const u = new Array(count); | ||
| for (let i = 0; i < count; i++) { | ||
| const e = new Array(m); | ||
| for (let j = 0; j < m; j++) { | ||
| const elm_offset = L * (j + i * m); | ||
| const tv = prb.subarray(elm_offset, elm_offset + L); | ||
| e[j] = mod(os2ip(tv), p); | ||
| } | ||
| u[i] = e; | ||
| } | ||
| return u; | ||
| } | ||
| export function isogenyMap(field, map) { | ||
| // Make same order as in spec | ||
| const coeff = map.map((i) => Array.from(i).reverse()); | ||
| return (x, y) => { | ||
| const [xn, xd, yn, yd] = coeff.map((val) => val.reduce((acc, i) => field.add(field.mul(acc, x), i))); | ||
| // 6.6.3 | ||
| // Exceptional cases of iso_map are inputs that cause the denominator of | ||
| // either rational function to evaluate to zero; such cases MUST return | ||
| // the identity point on E. | ||
| const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true); | ||
| x = field.mul(xn, xd_inv); // xNum / xDen | ||
| y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev) | ||
| return { x, y }; | ||
| }; | ||
| } | ||
| export const _DST_scalar = utf8ToBytes('HashToScalar-'); | ||
| /** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */ | ||
| export function createHasher(Point, mapToCurve, defaults) { | ||
| if (typeof mapToCurve !== 'function') | ||
| throw new Error('mapToCurve() must be defined'); | ||
| function map(num) { | ||
| return Point.fromAffine(mapToCurve(num)); | ||
| } | ||
| function clear(initial) { | ||
| const P = initial.clearCofactor(); | ||
| if (P.equals(Point.ZERO)) | ||
| return Point.ZERO; // zero will throw in assert | ||
| P.assertValidity(); | ||
| return P; | ||
| } | ||
| return { | ||
| defaults, | ||
| hashToCurve(msg, options) { | ||
| const opts = Object.assign({}, defaults, options); | ||
| const u = hash_to_field(msg, 2, opts); | ||
| const u0 = map(u[0]); | ||
| const u1 = map(u[1]); | ||
| return clear(u0.add(u1)); | ||
| }, | ||
| encodeToCurve(msg, options) { | ||
| const optsDst = defaults.encodeDST ? { DST: defaults.encodeDST } : {}; | ||
| const opts = Object.assign({}, defaults, optsDst, options); | ||
| const u = hash_to_field(msg, 1, opts); | ||
| const u0 = map(u[0]); | ||
| return clear(u0); | ||
| }, | ||
| /** See {@link H2CHasher} */ | ||
| mapToCurve(scalars) { | ||
| if (!Array.isArray(scalars)) | ||
| throw new Error('expected array of bigints'); | ||
| for (const i of scalars) | ||
| if (typeof i !== 'bigint') | ||
| throw new Error('expected array of bigints'); | ||
| return clear(map(scalars)); | ||
| }, | ||
| // hash_to_scalar can produce 0: https://www.rfc-editor.org/errata/eid8393 | ||
| // RFC 9380, draft-irtf-cfrg-bbs-signatures-08 | ||
| hashToScalar(msg, options) { | ||
| // @ts-ignore | ||
| const N = Point.Fn.ORDER; | ||
| const opts = Object.assign({}, defaults, { p: N, m: 1, DST: _DST_scalar }, options); | ||
| return hash_to_field(msg, 1, opts)[0][0]; | ||
| }, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=hash-to-curve.js.map |
| {"version":3,"file":"hash-to-curve.js","sourceRoot":"","sources":["../../src/abstract/hash-to-curve.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,eAAe,EACf,MAAM,EACN,eAAe,EACf,WAAW,EACX,OAAO,EACP,MAAM,EACN,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,GAAG,EAAe,MAAM,cAAc,CAAC;AA2B/D,6FAA6F;AAC7F,MAAM,KAAK,GAAG,eAAe,CAAC;AAE9B,4CAA4C;AAC5C,SAAS,KAAK,CAAC,KAAa,EAAE,MAAc;IAC1C,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAa,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;QACtB,KAAK,MAAM,CAAC,CAAC;IACf,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,MAAM,CAAC,CAAa,EAAE,CAAa;IAC1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CAAC,IAAa;IACzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,OAAO,CAAC,GAAmB;IAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClG,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAe,EACf,GAAmB,EACnB,UAAkB,EAClB,CAAQ;IAER,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnB,uDAAuD;IACvD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QAAE,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;IAC/C,IAAI,UAAU,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;IAC3D,MAAM,CAAC,GAAG,IAAI,KAAK,CAAa,GAAG,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAe,EACf,GAAmB,EACnB,UAAkB,EAClB,CAAS,EACT,CAAQ;IAER,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnB,uDAAuD;IACvD,oFAAoF;IACpF,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,UAAU,GAAG,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QACxC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,OAAO,CACL,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SAC5B,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7B,2CAA2C;SAC1C,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SAC5B,MAAM,EAAE,CACZ,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAe,EAAE,KAAa,EAAE,OAAgB;IAC5E,eAAe,CAAC,OAAO,EAAE;QACvB,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,QAAQ;QACX,IAAI,EAAE,UAAU;KACjB,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uCAAuC;IAC7E,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,CAAC,sBAAsB;IAC/B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACvC,0BAA0B;QAC1B,GAAG,GAAG,GAAG,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAID,MAAM,UAAU,UAAU,CAAyB,KAAQ,EAAE,GAAe;IAC1E,6BAA6B;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE;QACpB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACzC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACxD,CAAC;QACF,QAAQ;QACR,wEAAwE;QACxE,uEAAuE;QACvE,2BAA2B;QAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc;QACzC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC7D,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AA0CD,MAAM,CAAC,MAAM,WAAW,GAAe,WAAW,CAAC,eAAe,CAAC,CAAC;AAEpE,kGAAkG;AAClG,MAAM,UAAU,YAAY,CAC1B,KAA6B,EAC7B,UAAyB,EACzB,QAAkD;IAElD,IAAI,OAAO,UAAU,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtF,SAAS,GAAG,CAAC,GAAa;QACxB,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,SAAS,KAAK,CAAC,OAAoB;QACjC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,4BAA4B;QACzE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO;QACL,QAAQ;QAER,WAAW,CAAC,GAAe,EAAE,OAAsB;YACjD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,aAAa,CAAC,GAAe,EAAE,OAAsB;YACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,4BAA4B;QAC5B,UAAU,CAAC,OAAiB;YAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1E,KAAK,MAAM,CAAC,IAAI,OAAO;gBACrB,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,0EAA0E;QAC1E,8CAA8C;QAC9C,YAAY,CAAC,GAAe,EAAE,OAAsB;YAClD,aAAa;YACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;YACpF,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC;AACJ,CAAC"} |
| export declare function mod(a: bigint, b: bigint): bigint; | ||
| /** | ||
| * Efficiently raise num to power and do modular division. | ||
| * Unsafe in some contexts: uses ladder, so can expose bigint bits. | ||
| * @example | ||
| * pow(2n, 6n, 11n) // 64n % 11n == 9n | ||
| */ | ||
| export declare function pow(num: bigint, power: bigint, modulo: bigint): bigint; | ||
| /** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */ | ||
| export declare function pow2(x: bigint, power: bigint, modulo: bigint): bigint; | ||
| /** | ||
| * Inverses number over modulo. | ||
| * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/). | ||
| */ | ||
| export declare function invert(number: bigint, modulo: bigint): bigint; | ||
| /** | ||
| * Tonelli-Shanks square root search algorithm. | ||
| * 1. https://eprint.iacr.org/2012/685.pdf (page 12) | ||
| * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks | ||
| * @param P field order | ||
| * @returns function that takes field Fp (created from P) and number n | ||
| */ | ||
| export declare function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T; | ||
| /** | ||
| * Square root for a finite field. Will try optimized versions first: | ||
| * | ||
| * 1. P ≡ 3 (mod 4) | ||
| * 2. P ≡ 5 (mod 8) | ||
| * 3. P ≡ 9 (mod 16) | ||
| * 4. Tonelli-Shanks algorithm | ||
| * | ||
| * Different algorithms can give different roots, it is up to user to decide which one they want. | ||
| * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve). | ||
| */ | ||
| export declare function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T; | ||
| export declare const isNegativeLE: (num: bigint, modulo: bigint) => boolean; | ||
| /** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */ | ||
| export interface IField<T> { | ||
| ORDER: bigint; | ||
| isLE: boolean; | ||
| BYTES: number; | ||
| BITS: number; | ||
| MASK: bigint; | ||
| ZERO: T; | ||
| ONE: T; | ||
| create: (num: T) => T; | ||
| isValid: (num: T) => boolean; | ||
| is0: (num: T) => boolean; | ||
| isValidNot0: (num: T) => boolean; | ||
| neg(num: T): T; | ||
| inv(num: T): T; | ||
| sqrt(num: T): T; | ||
| sqr(num: T): T; | ||
| eql(lhs: T, rhs: T): boolean; | ||
| add(lhs: T, rhs: T): T; | ||
| sub(lhs: T, rhs: T): T; | ||
| mul(lhs: T, rhs: T | bigint): T; | ||
| pow(lhs: T, power: bigint): T; | ||
| div(lhs: T, rhs: T | bigint): T; | ||
| addN(lhs: T, rhs: T): T; | ||
| subN(lhs: T, rhs: T): T; | ||
| mulN(lhs: T, rhs: T | bigint): T; | ||
| sqrN(num: T): T; | ||
| isOdd?(num: T): boolean; | ||
| allowedLengths?: number[]; | ||
| invertBatch: (lst: T[]) => T[]; | ||
| toBytes(num: T): Uint8Array; | ||
| fromBytes(bytes: Uint8Array, skipValidation?: boolean): T; | ||
| cmov(a: T, b: T, c: boolean): T; | ||
| } | ||
| export declare function validateField<T>(field: IField<T>): IField<T>; | ||
| /** | ||
| * Same as `pow` but for Fp: non-constant-time. | ||
| * Unsafe in some contexts: uses ladder, so can expose bigint bits. | ||
| */ | ||
| export declare function FpPow<T>(Fp: IField<T>, num: T, power: bigint): T; | ||
| /** | ||
| * Efficiently invert an array of Field elements. | ||
| * Exception-free. Will return `undefined` for 0 elements. | ||
| * @param passZero map 0 to 0 (instead of undefined) | ||
| */ | ||
| export declare function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero?: boolean): T[]; | ||
| export declare function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T; | ||
| /** | ||
| * Legendre symbol. | ||
| * Legendre constant is used to calculate Legendre symbol (a | p) | ||
| * which denotes the value of a^((p-1)/2) (mod p). | ||
| * | ||
| * * (a | p) ≡ 1 if a is a square (mod p), quadratic residue | ||
| * * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue | ||
| * * (a | p) ≡ 0 if a ≡ 0 (mod p) | ||
| */ | ||
| export declare function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1; | ||
| export declare function FpIsSquare<T>(Fp: IField<T>, n: T): boolean; | ||
| export type NLength = { | ||
| nByteLength: number; | ||
| nBitLength: number; | ||
| }; | ||
| export declare function nLength(n: bigint, nBitLength?: number): NLength; | ||
| type FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>; | ||
| type SqrtFn = (n: bigint) => bigint; | ||
| type FieldOpts = Partial<{ | ||
| sqrt: SqrtFn; | ||
| isLE: boolean; | ||
| BITS: number; | ||
| modFromBytes: boolean; | ||
| allowedLengths?: readonly number[]; | ||
| }>; | ||
| /** | ||
| * Creates a finite field. Major performance optimizations: | ||
| * * 1. Denormalized operations like mulN instead of mul. | ||
| * * 2. Identical object shape: never add or remove keys. | ||
| * * 3. `Object.freeze`. | ||
| * Fragile: always run a benchmark on a change. | ||
| * Security note: operations don't check 'isValid' for all elements for performance reasons, | ||
| * it is caller responsibility to check this. | ||
| * This is low-level code, please make sure you know what you're doing. | ||
| * | ||
| * Note about field properties: | ||
| * * CHARACTERISTIC p = prime number, number of elements in main subgroup. | ||
| * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`. | ||
| * | ||
| * @param ORDER field order, probably prime, or could be composite | ||
| * @param bitLen how many bits the field consumes | ||
| * @param isLE (default: false) if encoding / decoding should be in little-endian | ||
| * @param redef optional faster redefinitions of sqrt and other methods | ||
| */ | ||
| export declare function Field(ORDER: bigint, bitLenOrOpts?: number | FieldOpts, // TODO: use opts only in v2? | ||
| isLE?: boolean, opts?: { | ||
| sqrt?: SqrtFn; | ||
| }): Readonly<FpField>; | ||
| export declare function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T; | ||
| export declare function FpSqrtEven<T>(Fp: IField<T>, elm: T): T; | ||
| /** | ||
| * "Constant-time" private key generation utility. | ||
| * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field). | ||
| * Which makes it slightly more biased, less secure. | ||
| * @deprecated use `mapKeyToField` instead | ||
| */ | ||
| export declare function hashToPrivateScalar(hash: string | Uint8Array, groupOrder: bigint, isLE?: boolean): bigint; | ||
| /** | ||
| * Returns total number of bytes consumed by the field element. | ||
| * For example, 32 bytes for usual 256-bit weierstrass curve. | ||
| * @param fieldOrder number of field elements, usually CURVE.n | ||
| * @returns byte length of field | ||
| */ | ||
| export declare function getFieldBytesLength(fieldOrder: bigint): number; | ||
| /** | ||
| * Returns minimal amount of bytes that can be safely reduced | ||
| * by field order. | ||
| * Should be 2^-128 for 128-bit curve such as P256. | ||
| * @param fieldOrder number of field elements, usually CURVE.n | ||
| * @returns byte length of target hash | ||
| */ | ||
| export declare function getMinHashLength(fieldOrder: bigint): number; | ||
| /** | ||
| * "Constant-time" private key generation utility. | ||
| * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF | ||
| * and convert them into private scalar, with the modulo bias being negligible. | ||
| * Needs at least 48 bytes of input for 32-byte private key. | ||
| * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/ | ||
| * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final | ||
| * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5 | ||
| * @param hash hash output from SHA3 or a similar function | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n) | ||
| * @param isLE interpret hash bytes as LE num | ||
| * @returns valid private scalar | ||
| */ | ||
| export declare function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE?: boolean): Uint8Array; | ||
| export {}; | ||
| //# sourceMappingURL=modular.d.ts.map |
| {"version":3,"file":"modular.d.ts","sourceRoot":"","sources":["../../src/abstract/modular.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Utils for modular division and fields. | ||
| * Field over 11 is a finite (Galois) field is integer number operations `mod 11`. | ||
| * There is no division: it is replaced by modular multiplicative inverse. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { _validateObject, anumber, bitMask, bytesToNumberBE, bytesToNumberLE, ensureBytes, numberToBytesBE, numberToBytesLE, } from "../utils.js"; | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3); | ||
| // prettier-ignore | ||
| const _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _7n = /* @__PURE__ */ BigInt(7); | ||
| // prettier-ignore | ||
| const _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16); | ||
| // Calculates a modulo b | ||
| export function mod(a, b) { | ||
| const result = a % b; | ||
| return result >= _0n ? result : b + result; | ||
| } | ||
| /** | ||
| * Efficiently raise num to power and do modular division. | ||
| * Unsafe in some contexts: uses ladder, so can expose bigint bits. | ||
| * @example | ||
| * pow(2n, 6n, 11n) // 64n % 11n == 9n | ||
| */ | ||
| export function pow(num, power, modulo) { | ||
| return FpPow(Field(modulo), num, power); | ||
| } | ||
| /** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */ | ||
| export function pow2(x, power, modulo) { | ||
| let res = x; | ||
| while (power-- > _0n) { | ||
| res *= res; | ||
| res %= modulo; | ||
| } | ||
| return res; | ||
| } | ||
| /** | ||
| * Inverses number over modulo. | ||
| * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/). | ||
| */ | ||
| export function invert(number, modulo) { | ||
| if (number === _0n) | ||
| throw new Error('invert: expected non-zero number'); | ||
| if (modulo <= _0n) | ||
| throw new Error('invert: expected positive modulus, got ' + modulo); | ||
| // 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 | ||
| let x = _0n, y = _1n, u = _1n, v = _0n; | ||
| while (a !== _0n) { | ||
| // JIT applies optimization if those two lines follow each other | ||
| const q = b / a; | ||
| const r = b % a; | ||
| const m = x - u * q; | ||
| const n = y - v * q; | ||
| // prettier-ignore | ||
| b = a, a = r, x = u, y = v, u = m, v = n; | ||
| } | ||
| const gcd = b; | ||
| if (gcd !== _1n) | ||
| throw new Error('invert: does not exist'); | ||
| return mod(x, modulo); | ||
| } | ||
| function assertIsSquare(Fp, root, n) { | ||
| if (!Fp.eql(Fp.sqr(root), n)) | ||
| throw new Error('Cannot find square root'); | ||
| } | ||
| // Not all roots are possible! Example which will throw: | ||
| // const NUM = | ||
| // n = 72057594037927816n; | ||
| // Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab')); | ||
| function sqrt3mod4(Fp, n) { | ||
| const p1div4 = (Fp.ORDER + _1n) / _4n; | ||
| const root = Fp.pow(n, p1div4); | ||
| assertIsSquare(Fp, root, n); | ||
| return root; | ||
| } | ||
| function sqrt5mod8(Fp, n) { | ||
| const p5div8 = (Fp.ORDER - _5n) / _8n; | ||
| const n2 = Fp.mul(n, _2n); | ||
| const v = Fp.pow(n2, p5div8); | ||
| const nv = Fp.mul(n, v); | ||
| const i = Fp.mul(Fp.mul(nv, _2n), v); | ||
| const root = Fp.mul(nv, Fp.sub(i, Fp.ONE)); | ||
| assertIsSquare(Fp, root, n); | ||
| return root; | ||
| } | ||
| // Based on RFC9380, Kong algorithm | ||
| // prettier-ignore | ||
| function sqrt9mod16(P) { | ||
| const Fp_ = Field(P); | ||
| const tn = tonelliShanks(P); | ||
| const c1 = tn(Fp_, Fp_.neg(Fp_.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F | ||
| const c2 = tn(Fp_, c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F | ||
| const c3 = tn(Fp_, Fp_.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F | ||
| const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic | ||
| return (Fp, n) => { | ||
| let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4 | ||
| let tv2 = Fp.mul(tv1, c1); // 2. tv2 = c1 * tv1 | ||
| const tv3 = Fp.mul(tv1, c2); // 3. tv3 = c2 * tv1 | ||
| const tv4 = Fp.mul(tv1, c3); // 4. tv4 = c3 * tv1 | ||
| const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x | ||
| const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x | ||
| tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x | ||
| tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x | ||
| const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x | ||
| const root = Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select sqrt from tv1 & tv2 | ||
| assertIsSquare(Fp, root, n); | ||
| return root; | ||
| }; | ||
| } | ||
| /** | ||
| * Tonelli-Shanks square root search algorithm. | ||
| * 1. https://eprint.iacr.org/2012/685.pdf (page 12) | ||
| * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks | ||
| * @param P field order | ||
| * @returns function that takes field Fp (created from P) and number n | ||
| */ | ||
| export function tonelliShanks(P) { | ||
| // Initialization (precomputation). | ||
| // Caching initialization could boost perf by 7%. | ||
| if (P < _3n) | ||
| throw new Error('sqrt is not defined for small field'); | ||
| // Factor P - 1 = Q * 2^S, where Q is odd | ||
| let Q = P - _1n; | ||
| let S = 0; | ||
| while (Q % _2n === _0n) { | ||
| Q /= _2n; | ||
| S++; | ||
| } | ||
| // Find the first quadratic non-residue Z >= 2 | ||
| let Z = _2n; | ||
| const _Fp = Field(P); | ||
| while (FpLegendre(_Fp, Z) === 1) { | ||
| // Basic primality test for P. After x iterations, chance of | ||
| // not finding quadratic non-residue is 2^x, so 2^1000. | ||
| if (Z++ > 1000) | ||
| throw new Error('Cannot find square root: probably non-prime P'); | ||
| } | ||
| // Fast-path; usually done before Z, but we do "primality test". | ||
| if (S === 1) | ||
| return sqrt3mod4; | ||
| // Slow-path | ||
| // TODO: test on Fp2 and others | ||
| let cc = _Fp.pow(Z, Q); // c = z^Q | ||
| const Q1div2 = (Q + _1n) / _2n; | ||
| return function tonelliSlow(Fp, n) { | ||
| if (Fp.is0(n)) | ||
| return n; | ||
| // Check if n is a quadratic residue using Legendre symbol | ||
| if (FpLegendre(Fp, n) !== 1) | ||
| throw new Error('Cannot find square root'); | ||
| // Initialize variables for the main loop | ||
| let M = S; | ||
| let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp | ||
| let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor | ||
| let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root | ||
| // Main loop | ||
| // while t != 1 | ||
| while (!Fp.eql(t, Fp.ONE)) { | ||
| if (Fp.is0(t)) | ||
| return Fp.ZERO; // if t=0 return R=0 | ||
| let i = 1; | ||
| // Find the smallest i >= 1 such that t^(2^i) ≡ 1 (mod P) | ||
| let t_tmp = Fp.sqr(t); // t^(2^1) | ||
| while (!Fp.eql(t_tmp, Fp.ONE)) { | ||
| i++; | ||
| t_tmp = Fp.sqr(t_tmp); // t^(2^2)... | ||
| if (i === M) | ||
| throw new Error('Cannot find square root'); | ||
| } | ||
| // Calculate the exponent for b: 2^(M - i - 1) | ||
| const exponent = _1n << BigInt(M - i - 1); // bigint is important | ||
| const b = Fp.pow(c, exponent); // b = 2^(M - i - 1) | ||
| // Update variables | ||
| M = i; | ||
| c = Fp.sqr(b); // c = b^2 | ||
| t = Fp.mul(t, c); // t = (t * b^2) | ||
| R = Fp.mul(R, b); // R = R*b | ||
| } | ||
| return R; | ||
| }; | ||
| } | ||
| /** | ||
| * Square root for a finite field. Will try optimized versions first: | ||
| * | ||
| * 1. P ≡ 3 (mod 4) | ||
| * 2. P ≡ 5 (mod 8) | ||
| * 3. P ≡ 9 (mod 16) | ||
| * 4. Tonelli-Shanks algorithm | ||
| * | ||
| * Different algorithms can give different roots, it is up to user to decide which one they want. | ||
| * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve). | ||
| */ | ||
| export function FpSqrt(P) { | ||
| // P ≡ 3 (mod 4) => √n = n^((P+1)/4) | ||
| if (P % _4n === _3n) | ||
| return sqrt3mod4; | ||
| // P ≡ 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf | ||
| if (P % _8n === _5n) | ||
| return sqrt5mod8; | ||
| // P ≡ 9 (mod 16) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4) | ||
| if (P % _16n === _9n) | ||
| return sqrt9mod16(P); | ||
| // Tonelli-Shanks algorithm | ||
| return tonelliShanks(P); | ||
| } | ||
| // Little-endian check for first LE bit (last BE bit); | ||
| export const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n; | ||
| // prettier-ignore | ||
| const FIELD_FIELDS = [ | ||
| 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr', | ||
| 'eql', 'add', 'sub', 'mul', 'pow', 'div', | ||
| 'addN', 'subN', 'mulN', 'sqrN' | ||
| ]; | ||
| export function validateField(field) { | ||
| const initial = { | ||
| ORDER: 'bigint', | ||
| MASK: 'bigint', | ||
| BYTES: 'number', | ||
| BITS: 'number', | ||
| }; | ||
| const opts = FIELD_FIELDS.reduce((map, val) => { | ||
| map[val] = 'function'; | ||
| return map; | ||
| }, initial); | ||
| _validateObject(field, opts); | ||
| // const max = 16384; | ||
| // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field'); | ||
| // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field'); | ||
| return field; | ||
| } | ||
| // Generic field functions | ||
| /** | ||
| * Same as `pow` but for Fp: non-constant-time. | ||
| * Unsafe in some contexts: uses ladder, so can expose bigint bits. | ||
| */ | ||
| export function FpPow(Fp, num, power) { | ||
| if (power < _0n) | ||
| throw new Error('invalid exponent, negatives unsupported'); | ||
| if (power === _0n) | ||
| return Fp.ONE; | ||
| if (power === _1n) | ||
| return num; | ||
| let p = Fp.ONE; | ||
| let d = num; | ||
| while (power > _0n) { | ||
| if (power & _1n) | ||
| p = Fp.mul(p, d); | ||
| d = Fp.sqr(d); | ||
| power >>= _1n; | ||
| } | ||
| return p; | ||
| } | ||
| /** | ||
| * Efficiently invert an array of Field elements. | ||
| * Exception-free. Will return `undefined` for 0 elements. | ||
| * @param passZero map 0 to 0 (instead of undefined) | ||
| */ | ||
| export function FpInvertBatch(Fp, nums, passZero = false) { | ||
| const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined); | ||
| // Walk from first to last, multiply them by each other MOD p | ||
| const multipliedAcc = nums.reduce((acc, num, i) => { | ||
| if (Fp.is0(num)) | ||
| return acc; | ||
| inverted[i] = acc; | ||
| return Fp.mul(acc, num); | ||
| }, Fp.ONE); | ||
| // Invert last element | ||
| const invertedAcc = Fp.inv(multipliedAcc); | ||
| // Walk from last to first, multiply them by inverted each other MOD p | ||
| nums.reduceRight((acc, num, i) => { | ||
| if (Fp.is0(num)) | ||
| return acc; | ||
| inverted[i] = Fp.mul(acc, inverted[i]); | ||
| return Fp.mul(acc, num); | ||
| }, invertedAcc); | ||
| return inverted; | ||
| } | ||
| // TODO: remove | ||
| export function FpDiv(Fp, lhs, rhs) { | ||
| return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs)); | ||
| } | ||
| /** | ||
| * Legendre symbol. | ||
| * Legendre constant is used to calculate Legendre symbol (a | p) | ||
| * which denotes the value of a^((p-1)/2) (mod p). | ||
| * | ||
| * * (a | p) ≡ 1 if a is a square (mod p), quadratic residue | ||
| * * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue | ||
| * * (a | p) ≡ 0 if a ≡ 0 (mod p) | ||
| */ | ||
| export function FpLegendre(Fp, n) { | ||
| // We can use 3rd argument as optional cache of this value | ||
| // but seems unneeded for now. The operation is very fast. | ||
| const p1mod2 = (Fp.ORDER - _1n) / _2n; | ||
| const powered = Fp.pow(n, p1mod2); | ||
| const yes = Fp.eql(powered, Fp.ONE); | ||
| const zero = Fp.eql(powered, Fp.ZERO); | ||
| const no = Fp.eql(powered, Fp.neg(Fp.ONE)); | ||
| if (!yes && !zero && !no) | ||
| throw new Error('invalid Legendre symbol result'); | ||
| return yes ? 1 : zero ? 0 : -1; | ||
| } | ||
| // This function returns True whenever the value x is a square in the field F. | ||
| export function FpIsSquare(Fp, n) { | ||
| const l = FpLegendre(Fp, n); | ||
| return l === 1; | ||
| } | ||
| // CURVE.n lengths | ||
| export function nLength(n, nBitLength) { | ||
| // Bit size, byte size of CURVE.n | ||
| if (nBitLength !== undefined) | ||
| anumber(nBitLength); | ||
| const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length; | ||
| const nByteLength = Math.ceil(_nBitLength / 8); | ||
| return { nBitLength: _nBitLength, nByteLength }; | ||
| } | ||
| /** | ||
| * Creates a finite field. Major performance optimizations: | ||
| * * 1. Denormalized operations like mulN instead of mul. | ||
| * * 2. Identical object shape: never add or remove keys. | ||
| * * 3. `Object.freeze`. | ||
| * Fragile: always run a benchmark on a change. | ||
| * Security note: operations don't check 'isValid' for all elements for performance reasons, | ||
| * it is caller responsibility to check this. | ||
| * This is low-level code, please make sure you know what you're doing. | ||
| * | ||
| * Note about field properties: | ||
| * * CHARACTERISTIC p = prime number, number of elements in main subgroup. | ||
| * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`. | ||
| * | ||
| * @param ORDER field order, probably prime, or could be composite | ||
| * @param bitLen how many bits the field consumes | ||
| * @param isLE (default: false) if encoding / decoding should be in little-endian | ||
| * @param redef optional faster redefinitions of sqrt and other methods | ||
| */ | ||
| export function Field(ORDER, bitLenOrOpts, // TODO: use opts only in v2? | ||
| isLE = false, opts = {}) { | ||
| if (ORDER <= _0n) | ||
| throw new Error('invalid field: expected ORDER > 0, got ' + ORDER); | ||
| let _nbitLength = undefined; | ||
| let _sqrt = undefined; | ||
| let modFromBytes = false; | ||
| let allowedLengths = undefined; | ||
| if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) { | ||
| if (opts.sqrt || isLE) | ||
| throw new Error('cannot specify opts in two arguments'); | ||
| const _opts = bitLenOrOpts; | ||
| if (_opts.BITS) | ||
| _nbitLength = _opts.BITS; | ||
| if (_opts.sqrt) | ||
| _sqrt = _opts.sqrt; | ||
| if (typeof _opts.isLE === 'boolean') | ||
| isLE = _opts.isLE; | ||
| if (typeof _opts.modFromBytes === 'boolean') | ||
| modFromBytes = _opts.modFromBytes; | ||
| allowedLengths = _opts.allowedLengths; | ||
| } | ||
| else { | ||
| if (typeof bitLenOrOpts === 'number') | ||
| _nbitLength = bitLenOrOpts; | ||
| if (opts.sqrt) | ||
| _sqrt = opts.sqrt; | ||
| } | ||
| const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength); | ||
| if (BYTES > 2048) | ||
| throw new Error('invalid field: expected ORDER of <= 2048 bytes'); | ||
| let sqrtP; // cached sqrtP | ||
| const f = Object.freeze({ | ||
| ORDER, | ||
| isLE, | ||
| BITS, | ||
| BYTES, | ||
| MASK: bitMask(BITS), | ||
| ZERO: _0n, | ||
| ONE: _1n, | ||
| allowedLengths: allowedLengths, | ||
| create: (num) => mod(num, ORDER), | ||
| isValid: (num) => { | ||
| if (typeof num !== 'bigint') | ||
| throw new Error('invalid field element: expected bigint, got ' + typeof num); | ||
| return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible | ||
| }, | ||
| is0: (num) => num === _0n, | ||
| // is valid and invertible | ||
| isValidNot0: (num) => !f.is0(num) && f.isValid(num), | ||
| isOdd: (num) => (num & _1n) === _1n, | ||
| neg: (num) => mod(-num, ORDER), | ||
| eql: (lhs, rhs) => lhs === rhs, | ||
| sqr: (num) => mod(num * num, ORDER), | ||
| add: (lhs, rhs) => mod(lhs + rhs, ORDER), | ||
| sub: (lhs, rhs) => mod(lhs - rhs, ORDER), | ||
| mul: (lhs, rhs) => mod(lhs * rhs, ORDER), | ||
| pow: (num, power) => FpPow(f, num, power), | ||
| div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER), | ||
| // Same as above, but doesn't normalize | ||
| sqrN: (num) => num * num, | ||
| addN: (lhs, rhs) => lhs + rhs, | ||
| subN: (lhs, rhs) => lhs - rhs, | ||
| mulN: (lhs, rhs) => lhs * rhs, | ||
| inv: (num) => invert(num, ORDER), | ||
| sqrt: _sqrt || | ||
| ((n) => { | ||
| if (!sqrtP) | ||
| sqrtP = FpSqrt(ORDER); | ||
| return sqrtP(f, n); | ||
| }), | ||
| toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)), | ||
| fromBytes: (bytes, skipValidation = true) => { | ||
| if (allowedLengths) { | ||
| if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) { | ||
| throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length); | ||
| } | ||
| const padded = new Uint8Array(BYTES); | ||
| // isLE add 0 to right, !isLE to the left. | ||
| padded.set(bytes, isLE ? 0 : padded.length - bytes.length); | ||
| bytes = padded; | ||
| } | ||
| if (bytes.length !== BYTES) | ||
| throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length); | ||
| let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes); | ||
| if (modFromBytes) | ||
| scalar = mod(scalar, ORDER); | ||
| if (!skipValidation) | ||
| if (!f.isValid(scalar)) | ||
| throw new Error('invalid field element: outside of range 0..ORDER'); | ||
| // NOTE: we don't validate scalar here, please use isValid. This done such way because some | ||
| // protocol may allow non-reduced scalar that reduced later or changed some other way. | ||
| return scalar; | ||
| }, | ||
| // TODO: we don't need it here, move out to separate fn | ||
| invertBatch: (lst) => FpInvertBatch(f, lst), | ||
| // We can't move this out because Fp6, Fp12 implement it | ||
| // and it's unclear what to return in there. | ||
| cmov: (a, b, c) => (c ? b : a), | ||
| }); | ||
| return Object.freeze(f); | ||
| } | ||
| // Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)? | ||
| // This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG). | ||
| // which mean we cannot force this via opts. | ||
| // Not sure what to do with randomBytes, we can accept it inside opts if wanted. | ||
| // Probably need to export getMinHashLength somewhere? | ||
| // random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) { | ||
| // const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES; | ||
| // if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes? | ||
| // const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes); | ||
| // // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0 | ||
| // const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n; | ||
| // return reduced; | ||
| // }, | ||
| export function FpSqrtOdd(Fp, elm) { | ||
| if (!Fp.isOdd) | ||
| throw new Error("Field doesn't have isOdd"); | ||
| const root = Fp.sqrt(elm); | ||
| return Fp.isOdd(root) ? root : Fp.neg(root); | ||
| } | ||
| export function FpSqrtEven(Fp, elm) { | ||
| if (!Fp.isOdd) | ||
| throw new Error("Field doesn't have isOdd"); | ||
| const root = Fp.sqrt(elm); | ||
| return Fp.isOdd(root) ? Fp.neg(root) : root; | ||
| } | ||
| /** | ||
| * "Constant-time" private key generation utility. | ||
| * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field). | ||
| * Which makes it slightly more biased, less secure. | ||
| * @deprecated use `mapKeyToField` instead | ||
| */ | ||
| export function hashToPrivateScalar(hash, groupOrder, isLE = false) { | ||
| hash = ensureBytes('privateHash', hash); | ||
| const hashLen = hash.length; | ||
| const minLen = nLength(groupOrder).nByteLength + 8; | ||
| if (minLen < 24 || hashLen < minLen || hashLen > 1024) | ||
| throw new Error('hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen); | ||
| const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash); | ||
| return mod(num, groupOrder - _1n) + _1n; | ||
| } | ||
| /** | ||
| * Returns total number of bytes consumed by the field element. | ||
| * For example, 32 bytes for usual 256-bit weierstrass curve. | ||
| * @param fieldOrder number of field elements, usually CURVE.n | ||
| * @returns byte length of field | ||
| */ | ||
| export function getFieldBytesLength(fieldOrder) { | ||
| if (typeof fieldOrder !== 'bigint') | ||
| throw new Error('field order must be bigint'); | ||
| const bitLength = fieldOrder.toString(2).length; | ||
| return Math.ceil(bitLength / 8); | ||
| } | ||
| /** | ||
| * Returns minimal amount of bytes that can be safely reduced | ||
| * by field order. | ||
| * Should be 2^-128 for 128-bit curve such as P256. | ||
| * @param fieldOrder number of field elements, usually CURVE.n | ||
| * @returns byte length of target hash | ||
| */ | ||
| export function getMinHashLength(fieldOrder) { | ||
| const length = getFieldBytesLength(fieldOrder); | ||
| return length + Math.ceil(length / 2); | ||
| } | ||
| /** | ||
| * "Constant-time" private key generation utility. | ||
| * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF | ||
| * and convert them into private scalar, with the modulo bias being negligible. | ||
| * Needs at least 48 bytes of input for 32-byte private key. | ||
| * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/ | ||
| * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final | ||
| * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5 | ||
| * @param hash hash output from SHA3 or a similar function | ||
| * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n) | ||
| * @param isLE interpret hash bytes as LE num | ||
| * @returns valid private scalar | ||
| */ | ||
| export function mapHashToField(key, fieldOrder, isLE = false) { | ||
| const len = key.length; | ||
| const fieldLen = getFieldBytesLength(fieldOrder); | ||
| const minLen = getMinHashLength(fieldOrder); | ||
| // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings. | ||
| if (len < 16 || len < minLen || len > 1024) | ||
| throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len); | ||
| const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key); | ||
| // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0 | ||
| const reduced = mod(num, fieldOrder - _1n) + _1n; | ||
| return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen); | ||
| } | ||
| //# sourceMappingURL=modular.js.map |
| {"version":3,"file":"modular.js","sourceRoot":"","sources":["../../src/abstract/modular.ts"],"names":[],"mappings":"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"} |
| import type { CurveLengths } from './curve.ts'; | ||
| type Hex = string | Uint8Array; | ||
| export type CurveType = { | ||
| P: bigint; | ||
| type: 'x25519' | 'x448'; | ||
| adjustScalarBytes: (bytes: Uint8Array) => Uint8Array; | ||
| powPminus2: (x: bigint) => bigint; | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| }; | ||
| export type MontgomeryECDH = { | ||
| scalarMult: (scalar: Hex, u: Hex) => Uint8Array; | ||
| scalarMultBase: (scalar: Hex) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: Hex, publicKeyB: Hex) => Uint8Array; | ||
| getPublicKey: (secretKey: Hex) => Uint8Array; | ||
| utils: { | ||
| randomSecretKey: () => Uint8Array; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: () => Uint8Array; | ||
| }; | ||
| GuBytes: Uint8Array; | ||
| lengths: CurveLengths; | ||
| keygen: (seed?: Uint8Array) => { | ||
| secretKey: Uint8Array; | ||
| publicKey: Uint8Array; | ||
| }; | ||
| }; | ||
| export type CurveFn = MontgomeryECDH; | ||
| export declare function montgomery(curveDef: CurveType): MontgomeryECDH; | ||
| export {}; | ||
| //# sourceMappingURL=montgomery.d.ts.map |
| {"version":3,"file":"montgomery.d.ts","sourceRoot":"","sources":["../../src/abstract/montgomery.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,KAAK,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/B,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC;IAChD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,UAAU,CAAC;IAC5C,eAAe,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC;IAClE,YAAY,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,UAAU,CAAC;IAC7C,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,UAAU,CAAC;QAClC,wCAAwC;QACxC,gBAAgB,EAAE,MAAM,UAAU,CAAC;KACpC,CAAC;IACF,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;CACjF,CAAC;AACF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC;AAUrC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,GAAG,cAAc,CAyI9D"} |
| /** | ||
| * Montgomery curve methods. It's not really whole montgomery curve, | ||
| * just bunch of very specific methods for X25519 / X448 from | ||
| * [RFC 7748](https://www.rfc-editor.org/rfc/rfc7748) | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { _validateObject, abytes, aInRange, bytesToNumberLE, ensureBytes, numberToBytesLE, randomBytes, } from "../utils.js"; | ||
| import { mod } from "./modular.js"; | ||
| const _0n = BigInt(0); | ||
| const _1n = BigInt(1); | ||
| const _2n = BigInt(2); | ||
| function validateOpts(curve) { | ||
| _validateObject(curve, { | ||
| adjustScalarBytes: 'function', | ||
| powPminus2: 'function', | ||
| }); | ||
| return Object.freeze({ ...curve }); | ||
| } | ||
| export function montgomery(curveDef) { | ||
| const CURVE = validateOpts(curveDef); | ||
| const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE; | ||
| const is25519 = type === 'x25519'; | ||
| if (!is25519 && type !== 'x448') | ||
| throw new Error('invalid type'); | ||
| const randomBytes_ = rand || randomBytes; | ||
| const montgomeryBits = is25519 ? 255 : 448; | ||
| const fieldLen = is25519 ? 32 : 56; | ||
| const Gu = is25519 ? BigInt(9) : BigInt(5); | ||
| // RFC 7748 #5: | ||
| // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and | ||
| // (156326 - 2) / 4 = 39081 for curve448/X448 | ||
| // const a = is25519 ? 156326n : 486662n; | ||
| const a24 = is25519 ? BigInt(121665) : BigInt(39081); | ||
| // RFC: x25519 "the resulting integer is of the form 2^254 plus | ||
| // eight times a value between 0 and 2^251 - 1 (inclusive)" | ||
| // x448: "2^447 plus four times a value between 0 and 2^445 - 1 (inclusive)" | ||
| const minScalar = is25519 ? _2n ** BigInt(254) : _2n ** BigInt(447); | ||
| const maxAdded = is25519 | ||
| ? BigInt(8) * _2n ** BigInt(251) - _1n | ||
| : BigInt(4) * _2n ** BigInt(445) - _1n; | ||
| const maxScalar = minScalar + maxAdded + _1n; // (inclusive) | ||
| const modP = (n) => mod(n, P); | ||
| const GuBytes = encodeU(Gu); | ||
| function encodeU(u) { | ||
| return numberToBytesLE(modP(u), fieldLen); | ||
| } | ||
| function decodeU(u) { | ||
| const _u = ensureBytes('u coordinate', u, fieldLen); | ||
| // RFC: When receiving such an array, implementations of X25519 | ||
| // (but not X448) MUST mask the most significant bit in the final byte. | ||
| if (is25519) | ||
| _u[31] &= 127; // 0b0111_1111 | ||
| // RFC: Implementations MUST accept non-canonical values and process them as | ||
| // if they had been reduced modulo the field prime. The non-canonical | ||
| // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224 | ||
| // - 1 through 2^448 - 1 for X448. | ||
| return modP(bytesToNumberLE(_u)); | ||
| } | ||
| function decodeScalar(scalar) { | ||
| return bytesToNumberLE(adjustScalarBytes(ensureBytes('scalar', scalar, fieldLen))); | ||
| } | ||
| function scalarMult(scalar, u) { | ||
| const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar)); | ||
| // Some public keys are useless, of low-order. Curve author doesn't think | ||
| // it needs to be validated, but we do it nonetheless. | ||
| // https://cr.yp.to/ecdh.html#validate | ||
| if (pu === _0n) | ||
| throw new Error('invalid private or public key received'); | ||
| return encodeU(pu); | ||
| } | ||
| // Computes public key from private. By doing scalar multiplication of base point. | ||
| function scalarMultBase(scalar) { | ||
| return scalarMult(scalar, GuBytes); | ||
| } | ||
| // cswap from RFC7748 "example code" | ||
| function cswap(swap, x_2, x_3) { | ||
| // dummy = mask(swap) AND (x_2 XOR x_3) | ||
| // Where mask(swap) is the all-1 or all-0 word of the same length as x_2 | ||
| // and x_3, computed, e.g., as mask(swap) = 0 - swap. | ||
| const dummy = modP(swap * (x_2 - x_3)); | ||
| x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy | ||
| x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy | ||
| return { x_2, x_3 }; | ||
| } | ||
| /** | ||
| * Montgomery x-only multiplication ladder. | ||
| * @param pointU u coordinate (x) on Montgomery Curve 25519 | ||
| * @param scalar by which the point would be multiplied | ||
| * @returns new Point on Montgomery curve | ||
| */ | ||
| function montgomeryLadder(u, scalar) { | ||
| aInRange('u', u, _0n, P); | ||
| aInRange('scalar', scalar, minScalar, maxScalar); | ||
| const k = scalar; | ||
| const x_1 = u; | ||
| let x_2 = _1n; | ||
| let z_2 = _0n; | ||
| let x_3 = u; | ||
| let z_3 = _1n; | ||
| let swap = _0n; | ||
| for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) { | ||
| const k_t = (k >> t) & _1n; | ||
| swap ^= k_t; | ||
| ({ x_2, x_3 } = cswap(swap, x_2, x_3)); | ||
| ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3)); | ||
| swap = k_t; | ||
| const A = x_2 + z_2; | ||
| const AA = modP(A * A); | ||
| const B = x_2 - z_2; | ||
| const BB = modP(B * B); | ||
| const E = AA - BB; | ||
| const C = x_3 + z_3; | ||
| const D = x_3 - z_3; | ||
| const DA = modP(D * A); | ||
| const CB = modP(C * B); | ||
| const dacb = DA + CB; | ||
| const da_cb = DA - CB; | ||
| x_3 = modP(dacb * dacb); | ||
| z_3 = modP(x_1 * modP(da_cb * da_cb)); | ||
| x_2 = modP(AA * BB); | ||
| z_2 = modP(E * (AA + modP(a24 * E))); | ||
| } | ||
| ({ x_2, x_3 } = cswap(swap, x_2, x_3)); | ||
| ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3)); | ||
| const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent | ||
| return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2)) | ||
| } | ||
| const lengths = { | ||
| secretKey: fieldLen, | ||
| publicKey: fieldLen, | ||
| seed: fieldLen, | ||
| }; | ||
| const randomSecretKey = (seed = randomBytes_(fieldLen)) => { | ||
| abytes(seed, lengths.seed); | ||
| return seed; | ||
| }; | ||
| function keygen(seed) { | ||
| const secretKey = randomSecretKey(seed); | ||
| return { secretKey, publicKey: scalarMultBase(secretKey) }; | ||
| } | ||
| const utils = { | ||
| randomSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| }; | ||
| return { | ||
| keygen, | ||
| getSharedSecret: (secretKey, publicKey) => scalarMult(secretKey, publicKey), | ||
| getPublicKey: (secretKey) => scalarMultBase(secretKey), | ||
| scalarMult, | ||
| scalarMultBase, | ||
| utils, | ||
| GuBytes: GuBytes.slice(), | ||
| lengths, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=montgomery.js.map |
| {"version":3,"file":"montgomery.js","sourceRoot":"","sources":["../../src/abstract/montgomery.ts"],"names":[],"mappings":"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"} |
| import { type IField } from './modular.ts'; | ||
| export type PoseidonBasicOpts = { | ||
| Fp: IField<bigint>; | ||
| t: number; | ||
| roundsFull: number; | ||
| roundsPartial: number; | ||
| isSboxInverse?: boolean; | ||
| }; | ||
| export type PoseidonGrainOpts = PoseidonBasicOpts & { | ||
| sboxPower?: number; | ||
| }; | ||
| type PoseidonConstants = { | ||
| mds: bigint[][]; | ||
| roundConstants: bigint[][]; | ||
| }; | ||
| export declare function grainGenConstants(opts: PoseidonGrainOpts, skipMDS?: number): PoseidonConstants; | ||
| export type PoseidonOpts = PoseidonBasicOpts & PoseidonConstants & { | ||
| sboxPower?: number; | ||
| reversePartialPowIdx?: boolean; | ||
| }; | ||
| export declare function validateOpts(opts: PoseidonOpts): Readonly<{ | ||
| rounds: number; | ||
| sboxFn: (n: bigint) => bigint; | ||
| roundConstants: bigint[][]; | ||
| mds: bigint[][]; | ||
| Fp: IField<bigint>; | ||
| t: number; | ||
| roundsFull: number; | ||
| roundsPartial: number; | ||
| sboxPower?: number; | ||
| reversePartialPowIdx?: boolean; | ||
| }>; | ||
| export declare function splitConstants(rc: bigint[], t: number): bigint[][]; | ||
| export type PoseidonFn = { | ||
| (values: bigint[]): bigint[]; | ||
| roundConstants: bigint[][]; | ||
| }; | ||
| /** Poseidon NTT-friendly hash. */ | ||
| export declare function poseidon(opts: PoseidonOpts): PoseidonFn; | ||
| export declare class PoseidonSponge { | ||
| private Fp; | ||
| readonly rate: number; | ||
| readonly capacity: number; | ||
| readonly hash: PoseidonFn; | ||
| private state; | ||
| private pos; | ||
| private isAbsorbing; | ||
| constructor(Fp: IField<bigint>, rate: number, capacity: number, hash: PoseidonFn); | ||
| private process; | ||
| absorb(input: bigint[]): void; | ||
| squeeze(count: number): bigint[]; | ||
| clean(): void; | ||
| clone(): PoseidonSponge; | ||
| } | ||
| export type PoseidonSpongeOpts = Omit<PoseidonOpts, 't'> & { | ||
| rate: number; | ||
| capacity: number; | ||
| }; | ||
| /** | ||
| * The method is not defined in spec, but nevertheless used often. | ||
| * Check carefully for compatibility: there are many edge cases, like absorbing an empty array. | ||
| * We cross-test against: | ||
| * - https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms | ||
| * - https://github.com/arkworks-rs/crypto-primitives/tree/main | ||
| */ | ||
| export declare function poseidonSponge(opts: PoseidonSpongeOpts): () => PoseidonSponge; | ||
| export {}; | ||
| //# sourceMappingURL=poseidon.d.ts.map |
| {"version":3,"file":"poseidon.d.ts","sourceRoot":"","sources":["../../src/abstract/poseidon.ts"],"names":[],"mappings":"AAUA,OAAO,EAAwB,KAAK,MAAM,EAAiB,MAAM,cAAc,CAAC;AAyBhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AA0DF,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE,CAAC;AAIzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,GAAE,MAAU,GAAG,iBAAiB,CAuBjG;AAED,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAC1C,iBAAiB,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEJ,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC,CAwCD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAalE;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;CAC5B,CAAC;AACF,kCAAkC;AAClC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CAmCvD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAiB;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,WAAW,CAAQ;gBAEf,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAQhF,OAAO,CAAC,OAAO;IAGf,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAgB7B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAahC,KAAK,IAAI,IAAI;IAKb,KAAK,IAAI,cAAc;CAMxB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,cAAc,CAW7E"} |
| /** | ||
| * Implements [Poseidon](https://www.poseidon-hash.info) ZK-friendly hash. | ||
| * | ||
| * There are many poseidon variants with different constants. | ||
| * We don't provide them: you should construct them manually. | ||
| * Check out [micro-starknet](https://github.com/paulmillr/micro-starknet) package for a proper example. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { _validateObject, bitGet } from "../utils.js"; | ||
| import { FpInvertBatch, FpPow, validateField } from "./modular.js"; | ||
| // Grain LFSR (Linear-Feedback Shift Register): https://eprint.iacr.org/2009/109.pdf | ||
| function grainLFSR(state) { | ||
| let pos = 0; | ||
| if (state.length !== 80) | ||
| throw new Error('grainLFRS: wrong state length, should be 80 bits'); | ||
| const getBit = () => { | ||
| const r = (offset) => state[(pos + offset) % 80]; | ||
| const bit = r(62) ^ r(51) ^ r(38) ^ r(23) ^ r(13) ^ r(0); | ||
| state[pos] = bit; | ||
| pos = ++pos % 80; | ||
| return !!bit; | ||
| }; | ||
| for (let i = 0; i < 160; i++) | ||
| getBit(); | ||
| return () => { | ||
| // https://en.wikipedia.org/wiki/Shrinking_generator | ||
| while (true) { | ||
| const b1 = getBit(); | ||
| const b2 = getBit(); | ||
| if (!b1) | ||
| continue; | ||
| return b2; | ||
| } | ||
| }; | ||
| } | ||
| function assertValidPosOpts(opts) { | ||
| const { Fp, roundsFull } = opts; | ||
| validateField(Fp); | ||
| _validateObject(opts, { | ||
| t: 'number', | ||
| roundsFull: 'number', | ||
| roundsPartial: 'number', | ||
| }, { | ||
| isSboxInverse: 'boolean', | ||
| }); | ||
| for (const i of ['t', 'roundsFull', 'roundsPartial']) { | ||
| if (!Number.isSafeInteger(opts[i]) || opts[i] < 1) | ||
| throw new Error('invalid number ' + i); | ||
| } | ||
| if (roundsFull & 1) | ||
| throw new Error('roundsFull is not even' + roundsFull); | ||
| } | ||
| function poseidonGrain(opts) { | ||
| assertValidPosOpts(opts); | ||
| const { Fp } = opts; | ||
| const state = Array(80).fill(1); | ||
| let pos = 0; | ||
| const writeBits = (value, bitCount) => { | ||
| for (let i = bitCount - 1; i >= 0; i--) | ||
| state[pos++] = Number(bitGet(value, i)); | ||
| }; | ||
| const _0n = BigInt(0); | ||
| const _1n = BigInt(1); | ||
| writeBits(_1n, 2); // prime field | ||
| writeBits(opts.isSboxInverse ? _1n : _0n, 4); // b2..b5 | ||
| writeBits(BigInt(Fp.BITS), 12); // b6..b17 | ||
| writeBits(BigInt(opts.t), 12); // b18..b29 | ||
| writeBits(BigInt(opts.roundsFull), 10); // b30..b39 | ||
| writeBits(BigInt(opts.roundsPartial), 10); // b40..b49 | ||
| const getBit = grainLFSR(state); | ||
| return (count, reject) => { | ||
| const res = []; | ||
| for (let i = 0; i < count; i++) { | ||
| while (true) { | ||
| let num = _0n; | ||
| for (let i = 0; i < Fp.BITS; i++) { | ||
| num <<= _1n; | ||
| if (getBit()) | ||
| num |= _1n; | ||
| } | ||
| if (reject && num >= Fp.ORDER) | ||
| continue; // rejection sampling | ||
| res.push(Fp.create(num)); | ||
| break; | ||
| } | ||
| } | ||
| return res; | ||
| }; | ||
| } | ||
| // NOTE: this is not standard but used often for constant generation for poseidon | ||
| // (grain LFRS-like structure) | ||
| export function grainGenConstants(opts, skipMDS = 0) { | ||
| const { Fp, t, roundsFull, roundsPartial } = opts; | ||
| const rounds = roundsFull + roundsPartial; | ||
| const sample = poseidonGrain(opts); | ||
| const roundConstants = []; | ||
| for (let r = 0; r < rounds; r++) | ||
| roundConstants.push(sample(t, true)); | ||
| if (skipMDS > 0) | ||
| for (let i = 0; i < skipMDS; i++) | ||
| sample(2 * t, false); | ||
| const xs = sample(t, false); | ||
| const ys = sample(t, false); | ||
| // Construct MDS Matrix M[i][j] = 1 / (xs[i] + ys[j]) | ||
| const mds = []; | ||
| for (let i = 0; i < t; i++) { | ||
| const row = []; | ||
| for (let j = 0; j < t; j++) { | ||
| const xy = Fp.add(xs[i], ys[j]); | ||
| if (Fp.is0(xy)) | ||
| throw new Error(`Error generating MDS matrix: xs[${i}] + ys[${j}] resulted in zero.`); | ||
| row.push(xy); | ||
| } | ||
| mds.push(FpInvertBatch(Fp, row)); | ||
| } | ||
| return { roundConstants, mds }; | ||
| } | ||
| export function validateOpts(opts) { | ||
| assertValidPosOpts(opts); | ||
| const { Fp, mds, reversePartialPowIdx: rev, roundConstants: rc } = opts; | ||
| const { roundsFull, roundsPartial, sboxPower, t } = opts; | ||
| // MDS is TxT matrix | ||
| if (!Array.isArray(mds) || mds.length !== t) | ||
| throw new Error('Poseidon: invalid MDS matrix'); | ||
| const _mds = mds.map((mdsRow) => { | ||
| if (!Array.isArray(mdsRow) || mdsRow.length !== t) | ||
| throw new Error('invalid MDS matrix row: ' + mdsRow); | ||
| return mdsRow.map((i) => { | ||
| if (typeof i !== 'bigint') | ||
| throw new Error('invalid MDS matrix bigint: ' + i); | ||
| return Fp.create(i); | ||
| }); | ||
| }); | ||
| if (rev !== undefined && typeof rev !== 'boolean') | ||
| throw new Error('invalid param reversePartialPowIdx=' + rev); | ||
| if (roundsFull & 1) | ||
| throw new Error('roundsFull is not even' + roundsFull); | ||
| const rounds = roundsFull + roundsPartial; | ||
| if (!Array.isArray(rc) || rc.length !== rounds) | ||
| throw new Error('Poseidon: invalid round constants'); | ||
| const roundConstants = rc.map((rc) => { | ||
| if (!Array.isArray(rc) || rc.length !== t) | ||
| throw new Error('invalid round constants'); | ||
| return rc.map((i) => { | ||
| if (typeof i !== 'bigint' || !Fp.isValid(i)) | ||
| throw new Error('invalid round constant'); | ||
| return Fp.create(i); | ||
| }); | ||
| }); | ||
| if (!sboxPower || ![3, 5, 7, 17].includes(sboxPower)) | ||
| throw new Error('invalid sboxPower'); | ||
| const _sboxPower = BigInt(sboxPower); | ||
| let sboxFn = (n) => FpPow(Fp, n, _sboxPower); | ||
| // Unwrapped sbox power for common cases (195->142μs) | ||
| if (sboxPower === 3) | ||
| sboxFn = (n) => Fp.mul(Fp.sqrN(n), n); | ||
| else if (sboxPower === 5) | ||
| sboxFn = (n) => Fp.mul(Fp.sqrN(Fp.sqrN(n)), n); | ||
| return Object.freeze({ ...opts, rounds, sboxFn, roundConstants, mds: _mds }); | ||
| } | ||
| export function splitConstants(rc, t) { | ||
| if (typeof t !== 'number') | ||
| throw new Error('poseidonSplitConstants: invalid t'); | ||
| if (!Array.isArray(rc) || rc.length % t) | ||
| throw new Error('poseidonSplitConstants: invalid rc'); | ||
| const res = []; | ||
| let tmp = []; | ||
| for (let i = 0; i < rc.length; i++) { | ||
| tmp.push(rc[i]); | ||
| if (tmp.length === t) { | ||
| res.push(tmp); | ||
| tmp = []; | ||
| } | ||
| } | ||
| return res; | ||
| } | ||
| /** Poseidon NTT-friendly hash. */ | ||
| export function poseidon(opts) { | ||
| const _opts = validateOpts(opts); | ||
| const { Fp, mds, roundConstants, rounds: totalRounds, roundsPartial, sboxFn, t } = _opts; | ||
| const halfRoundsFull = _opts.roundsFull / 2; | ||
| const partialIdx = _opts.reversePartialPowIdx ? t - 1 : 0; | ||
| const poseidonRound = (values, isFull, idx) => { | ||
| values = values.map((i, j) => Fp.add(i, roundConstants[idx][j])); | ||
| if (isFull) | ||
| values = values.map((i) => sboxFn(i)); | ||
| else | ||
| values[partialIdx] = sboxFn(values[partialIdx]); | ||
| // Matrix multiplication | ||
| values = mds.map((i) => i.reduce((acc, i, j) => Fp.add(acc, Fp.mulN(i, values[j])), Fp.ZERO)); | ||
| return values; | ||
| }; | ||
| const poseidonHash = function poseidonHash(values) { | ||
| if (!Array.isArray(values) || values.length !== t) | ||
| throw new Error('invalid values, expected array of bigints with length ' + t); | ||
| values = values.map((i) => { | ||
| if (typeof i !== 'bigint') | ||
| throw new Error('invalid bigint=' + i); | ||
| return Fp.create(i); | ||
| }); | ||
| let lastRound = 0; | ||
| // Apply r_f/2 full rounds. | ||
| for (let i = 0; i < halfRoundsFull; i++) | ||
| values = poseidonRound(values, true, lastRound++); | ||
| // Apply r_p partial rounds. | ||
| for (let i = 0; i < roundsPartial; i++) | ||
| values = poseidonRound(values, false, lastRound++); | ||
| // Apply r_f/2 full rounds. | ||
| for (let i = 0; i < halfRoundsFull; i++) | ||
| values = poseidonRound(values, true, lastRound++); | ||
| if (lastRound !== totalRounds) | ||
| throw new Error('invalid number of rounds'); | ||
| return values; | ||
| }; | ||
| // For verification in tests | ||
| poseidonHash.roundConstants = roundConstants; | ||
| return poseidonHash; | ||
| } | ||
| export class PoseidonSponge { | ||
| constructor(Fp, rate, capacity, hash) { | ||
| this.pos = 0; | ||
| this.isAbsorbing = true; | ||
| this.Fp = Fp; | ||
| this.hash = hash; | ||
| this.rate = rate; | ||
| this.capacity = capacity; | ||
| this.state = new Array(rate + capacity); | ||
| this.clean(); | ||
| } | ||
| process() { | ||
| this.state = this.hash(this.state); | ||
| } | ||
| absorb(input) { | ||
| for (const i of input) | ||
| if (typeof i !== 'bigint' || !this.Fp.isValid(i)) | ||
| throw new Error('invalid input: ' + i); | ||
| for (let i = 0; i < input.length;) { | ||
| if (!this.isAbsorbing || this.pos === this.rate) { | ||
| this.process(); | ||
| this.pos = 0; | ||
| this.isAbsorbing = true; | ||
| } | ||
| const chunk = Math.min(this.rate - this.pos, input.length - i); | ||
| for (let j = 0; j < chunk; j++) { | ||
| const idx = this.capacity + this.pos++; | ||
| this.state[idx] = this.Fp.add(this.state[idx], input[i++]); | ||
| } | ||
| } | ||
| } | ||
| squeeze(count) { | ||
| const res = []; | ||
| while (res.length < count) { | ||
| if (this.isAbsorbing || this.pos === this.rate) { | ||
| this.process(); | ||
| this.pos = 0; | ||
| this.isAbsorbing = false; | ||
| } | ||
| const chunk = Math.min(this.rate - this.pos, count - res.length); | ||
| for (let i = 0; i < chunk; i++) | ||
| res.push(this.state[this.capacity + this.pos++]); | ||
| } | ||
| return res; | ||
| } | ||
| clean() { | ||
| this.state.fill(this.Fp.ZERO); | ||
| this.isAbsorbing = true; | ||
| this.pos = 0; | ||
| } | ||
| clone() { | ||
| const c = new PoseidonSponge(this.Fp, this.rate, this.capacity, this.hash); | ||
| c.pos = this.pos; | ||
| c.state = [...this.state]; | ||
| return c; | ||
| } | ||
| } | ||
| /** | ||
| * The method is not defined in spec, but nevertheless used often. | ||
| * Check carefully for compatibility: there are many edge cases, like absorbing an empty array. | ||
| * We cross-test against: | ||
| * - https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms | ||
| * - https://github.com/arkworks-rs/crypto-primitives/tree/main | ||
| */ | ||
| export function poseidonSponge(opts) { | ||
| for (const i of ['rate', 'capacity']) { | ||
| if (typeof opts[i] !== 'number' || !Number.isSafeInteger(opts[i])) | ||
| throw new Error('invalid number ' + i); | ||
| } | ||
| const { rate, capacity } = opts; | ||
| const t = opts.rate + opts.capacity; | ||
| // Re-use hash instance between multiple instances | ||
| const hash = poseidon({ ...opts, t }); | ||
| const { Fp } = opts; | ||
| return () => new PoseidonSponge(Fp, rate, capacity, hash); | ||
| } | ||
| //# sourceMappingURL=poseidon.js.map |
| {"version":3,"file":"poseidon.js","sourceRoot":"","sources":["../../src/abstract/poseidon.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,sEAAsE;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAe,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhF,oFAAoF;AACpF,SAAS,SAAS,CAAC,KAAe;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,GAAY,EAAE;QAC3B,MAAM,CAAC,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACjB,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,GAAG,CAAC;IACf,CAAC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,CAAC;IACvC,OAAO,GAAG,EAAE;QACV,oDAAoD;QACpD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAUD,SAAS,kBAAkB,CAAC,IAAuB;IACjD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,eAAe,CACb,IAAI,EACJ;QACE,CAAC,EAAE,QAAQ;QACX,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,QAAQ;KACxB,EACD;QACE,aAAa,EAAE,SAAS;KACzB,CACF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,eAAe,CAAU,EAAE,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,UAAU,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,IAAuB;IAC5C,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE;QACpD,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;IACjC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;IACvD,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;IAC1C,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;IAC1C,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;IACnD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;IAEtD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,CAAC,KAAa,EAAE,MAAe,EAAY,EAAE;QAClD,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,GAAG,GAAG,GAAG,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,GAAG,KAAK,GAAG,CAAC;oBACZ,IAAI,MAAM,EAAE;wBAAE,GAAG,IAAI,GAAG,CAAC;gBAC3B,CAAC;gBACD,IAAI,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,KAAK;oBAAE,SAAS,CAAC,qBAAqB;gBAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAQD,iFAAiF;AACjF,8BAA8B;AAC9B,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,UAAkB,CAAC;IAC5E,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,cAAc,GAAe,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,qDAAqD;IACrD,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YACxF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;AACjC,CAAC;AAQD,MAAM,UAAU,YAAY,CAAC,IAAkB;IAY7C,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACxE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IAEzD,oBAAoB;IACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,MAAM,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,CAAC,CAAC;YAC9E,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,SAAS;QAC/C,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,GAAG,CAAC,CAAC;IAE/D,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,UAAU,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;IAE1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM;QAC5C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACvF,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACrD,qDAAqD;IACrD,IAAI,SAAS,KAAK,CAAC;QAAE,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9D,IAAI,SAAS,KAAK,CAAC;QAAE,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAY,EAAE,CAAS;IACpD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAChF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC/F,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD,kCAAkC;AAClC,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;IACzF,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,CAAC,MAAgB,EAAE,MAAe,EAAE,GAAW,EAAE,EAAE;QACvE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,MAAM;YAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC7C,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,wBAAwB;QACxB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9F,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,YAAY,CAAC,MAAgB;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,wDAAwD,GAAG,CAAC,CAAC,CAAC;QAChF,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,2BAA2B;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE;YAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,4BAA4B;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE;YAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,2BAA2B;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE;YAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAE3F,IAAI,SAAS,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,4BAA4B;IAC5B,YAAY,CAAC,cAAc,GAAG,cAAc,CAAC;IAC7C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,cAAc;IASzB,YAAY,EAAkB,EAAE,IAAY,EAAE,QAAgB,EAAE,IAAgB;QAHxE,QAAG,GAAG,CAAC,CAAC;QACR,gBAAW,GAAG,IAAI,CAAC;QAGzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IACO,OAAO;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,CAAC,KAAe;QACpB,KAAK,MAAM,CAAC,IAAI,KAAK;YACnB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAI,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAa;QACnB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACf,CAAC;IACD,KAAK;QACH,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjB,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAU,EAAE,CAAC;QAC9C,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpC,kDAAkD;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACpB,OAAO,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC"} |
| import * as mod from './modular.ts'; | ||
| import type { WeierstrassPoint, WeierstrassPointCons } from './weierstrass.ts'; | ||
| export type BigintTuple = [bigint, bigint]; | ||
| export type Fp = bigint; | ||
| export type Fp2 = { | ||
| c0: bigint; | ||
| c1: bigint; | ||
| }; | ||
| export type BigintSix = [bigint, bigint, bigint, bigint, bigint, bigint]; | ||
| export type Fp6 = { | ||
| c0: Fp2; | ||
| c1: Fp2; | ||
| c2: Fp2; | ||
| }; | ||
| export type Fp12 = { | ||
| c0: Fp6; | ||
| c1: Fp6; | ||
| }; | ||
| export type BigintTwelve = [ | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint, | ||
| bigint | ||
| ]; | ||
| export type Fp2Bls = mod.IField<Fp2> & { | ||
| Fp: mod.IField<Fp>; | ||
| frobeniusMap(num: Fp2, power: number): Fp2; | ||
| fromBigTuple(num: BigintTuple): Fp2; | ||
| mulByB: (num: Fp2) => Fp2; | ||
| mulByNonresidue: (num: Fp2) => Fp2; | ||
| reim: (num: Fp2) => { | ||
| re: Fp; | ||
| im: Fp; | ||
| }; | ||
| Fp4Square: (a: Fp2, b: Fp2) => { | ||
| first: Fp2; | ||
| second: Fp2; | ||
| }; | ||
| NONRESIDUE: Fp2; | ||
| }; | ||
| export type Fp6Bls = mod.IField<Fp6> & { | ||
| Fp2: Fp2Bls; | ||
| frobeniusMap(num: Fp6, power: number): Fp6; | ||
| fromBigSix: (tuple: BigintSix) => Fp6; | ||
| mul1(num: Fp6, b1: Fp2): Fp6; | ||
| mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6; | ||
| mulByFp2(lhs: Fp6, rhs: Fp2): Fp6; | ||
| mulByNonresidue: (num: Fp6) => Fp6; | ||
| }; | ||
| export type Fp12Bls = mod.IField<Fp12> & { | ||
| Fp6: Fp6Bls; | ||
| frobeniusMap(num: Fp12, power: number): Fp12; | ||
| fromBigTwelve: (t: BigintTwelve) => Fp12; | ||
| mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12; | ||
| mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12; | ||
| mulByFp2(lhs: Fp12, rhs: Fp2): Fp12; | ||
| conjugate(num: Fp12): Fp12; | ||
| finalExponentiate(num: Fp12): Fp12; | ||
| _cyclotomicSquare(num: Fp12): Fp12; | ||
| _cyclotomicExp(num: Fp12, n: bigint): Fp12; | ||
| }; | ||
| export declare function psiFrobenius(Fp: mod.IField<Fp>, Fp2: Fp2Bls, base: Fp2): { | ||
| psi: (x: Fp2, y: Fp2) => [Fp2, Fp2]; | ||
| psi2: (x: Fp2, y: Fp2) => [Fp2, Fp2]; | ||
| G2psi: (c: WeierstrassPointCons<Fp2>, P: WeierstrassPoint<Fp2>) => WeierstrassPoint<Fp2>; | ||
| G2psi2: (c: WeierstrassPointCons<Fp2>, P: WeierstrassPoint<Fp2>) => WeierstrassPoint<Fp2>; | ||
| PSI_X: Fp2; | ||
| PSI_Y: Fp2; | ||
| PSI2_X: Fp2; | ||
| PSI2_Y: Fp2; | ||
| }; | ||
| export type Tower12Opts = { | ||
| ORDER: bigint; | ||
| X_LEN: number; | ||
| NONRESIDUE?: Fp; | ||
| FP2_NONRESIDUE: BigintTuple; | ||
| Fp2sqrt?: (num: Fp2) => Fp2; | ||
| Fp2mulByB: (num: Fp2) => Fp2; | ||
| Fp12finalExponentiate: (num: Fp12) => Fp12; | ||
| }; | ||
| export declare function tower12(opts: Tower12Opts): { | ||
| Fp: Readonly<mod.IField<bigint> & Required<Pick<mod.IField<bigint>, 'isOdd'>>>; | ||
| Fp2: Fp2Bls; | ||
| Fp6: Fp6Bls; | ||
| Fp12: Fp12Bls; | ||
| }; | ||
| //# sourceMappingURL=tower.d.ts.map |
| {"version":3,"file":"tower.d.ts","sourceRoot":"","sources":["../../src/abstract/tower.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Towered extension fields. | ||
| * Rather than implementing a massive 12th-degree extension directly, it is more efficient | ||
| * to build it up from smaller extensions: a tower of extensions. | ||
| * | ||
| * For BLS12-381, the Fp12 field is implemented as a quadratic (degree two) extension, | ||
| * on top of a cubic (degree three) extension, on top of a quadratic extension of Fp. | ||
| * | ||
| * For more info: "Pairings for beginners" by Costello, section 7.3. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { bitGet, bitLen, concatBytes, notImplemented } from "../utils.js"; | ||
| import * as mod from "./modular.js"; | ||
| // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| function calcFrobeniusCoefficients(Fp, nonResidue, modulus, degree, num = 1, divisor) { | ||
| const _divisor = BigInt(divisor === undefined ? degree : divisor); | ||
| const towerModulus = modulus ** BigInt(degree); | ||
| const res = []; | ||
| for (let i = 0; i < num; i++) { | ||
| const a = BigInt(i + 1); | ||
| const powers = []; | ||
| for (let j = 0, qPower = _1n; j < degree; j++) { | ||
| const power = ((a * qPower - a) / _divisor) % towerModulus; | ||
| powers.push(Fp.pow(nonResidue, power)); | ||
| qPower *= modulus; | ||
| } | ||
| res.push(powers); | ||
| } | ||
| return res; | ||
| } | ||
| // This works same at least for bls12-381, bn254 and bls12-377 | ||
| export function psiFrobenius(Fp, Fp2, base) { | ||
| // GLV endomorphism Ψ(P) | ||
| const PSI_X = Fp2.pow(base, (Fp.ORDER - _1n) / _3n); // u^((p-1)/3) | ||
| const PSI_Y = Fp2.pow(base, (Fp.ORDER - _1n) / _2n); // u^((p-1)/2) | ||
| function psi(x, y) { | ||
| // This x10 faster than previous version in bls12-381 | ||
| const x2 = Fp2.mul(Fp2.frobeniusMap(x, 1), PSI_X); | ||
| const y2 = Fp2.mul(Fp2.frobeniusMap(y, 1), PSI_Y); | ||
| return [x2, y2]; | ||
| } | ||
| // Ψ²(P) endomorphism (psi2(x) = psi(psi(x))) | ||
| const PSI2_X = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _3n); // u^((p^2 - 1)/3) | ||
| // This equals -1, which causes y to be Fp2.neg(y). | ||
| // But not sure if there are case when this is not true? | ||
| const PSI2_Y = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _2n); // u^((p^2 - 1)/3) | ||
| if (!Fp2.eql(PSI2_Y, Fp2.neg(Fp2.ONE))) | ||
| throw new Error('psiFrobenius: PSI2_Y!==-1'); | ||
| function psi2(x, y) { | ||
| return [Fp2.mul(x, PSI2_X), Fp2.neg(y)]; | ||
| } | ||
| // Map points | ||
| const mapAffine = (fn) => (c, P) => { | ||
| const affine = P.toAffine(); | ||
| const p = fn(affine.x, affine.y); | ||
| return c.fromAffine({ x: p[0], y: p[1] }); | ||
| }; | ||
| const G2psi = mapAffine(psi); | ||
| const G2psi2 = mapAffine(psi2); | ||
| return { psi, psi2, G2psi, G2psi2, PSI_X, PSI_Y, PSI2_X, PSI2_Y }; | ||
| } | ||
| const Fp2fromBigTuple = (Fp, tuple) => { | ||
| if (tuple.length !== 2) | ||
| throw new Error('invalid tuple'); | ||
| const fps = tuple.map((n) => Fp.create(n)); | ||
| return { c0: fps[0], c1: fps[1] }; | ||
| }; | ||
| class _Field2 { | ||
| constructor(Fp, opts = {}) { | ||
| this.MASK = _1n; | ||
| const ORDER = Fp.ORDER; | ||
| const FP2_ORDER = ORDER * ORDER; | ||
| this.Fp = Fp; | ||
| this.ORDER = FP2_ORDER; | ||
| this.BITS = bitLen(FP2_ORDER); | ||
| this.BYTES = Math.ceil(bitLen(FP2_ORDER) / 8); | ||
| this.isLE = Fp.isLE; | ||
| this.ZERO = { c0: Fp.ZERO, c1: Fp.ZERO }; | ||
| this.ONE = { c0: Fp.ONE, c1: Fp.ZERO }; | ||
| this.Fp_NONRESIDUE = Fp.create(opts.NONRESIDUE || BigInt(-1)); | ||
| this.Fp_div2 = Fp.div(Fp.ONE, _2n); // 1/2 | ||
| this.NONRESIDUE = Fp2fromBigTuple(Fp, opts.FP2_NONRESIDUE); | ||
| // const Fp2Nonresidue = Fp2fromBigTuple(opts.FP2_NONRESIDUE); | ||
| this.FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(Fp, this.Fp_NONRESIDUE, Fp.ORDER, 2)[0]; | ||
| this.mulByB = opts.Fp2mulByB; | ||
| Object.seal(this); | ||
| } | ||
| fromBigTuple(tuple) { | ||
| return Fp2fromBigTuple(this.Fp, tuple); | ||
| } | ||
| create(num) { | ||
| return num; | ||
| } | ||
| isValid({ c0, c1 }) { | ||
| function isValidC(num, ORDER) { | ||
| return typeof num === 'bigint' && _0n <= num && num < ORDER; | ||
| } | ||
| return isValidC(c0, this.ORDER) && isValidC(c1, this.ORDER); | ||
| } | ||
| is0({ c0, c1 }) { | ||
| return this.Fp.is0(c0) && this.Fp.is0(c1); | ||
| } | ||
| isValidNot0(num) { | ||
| return !this.is0(num) && this.isValid(num); | ||
| } | ||
| eql({ c0, c1 }, { c0: r0, c1: r1 }) { | ||
| return this.Fp.eql(c0, r0) && this.Fp.eql(c1, r1); | ||
| } | ||
| neg({ c0, c1 }) { | ||
| return { c0: this.Fp.neg(c0), c1: this.Fp.neg(c1) }; | ||
| } | ||
| pow(num, power) { | ||
| return mod.FpPow(this, num, power); | ||
| } | ||
| invertBatch(nums) { | ||
| return mod.FpInvertBatch(this, nums); | ||
| } | ||
| // Normalized | ||
| add(f1, f2) { | ||
| const { c0, c1 } = f1; | ||
| const { c0: r0, c1: r1 } = f2; | ||
| return { | ||
| c0: this.Fp.add(c0, r0), | ||
| c1: this.Fp.add(c1, r1), | ||
| }; | ||
| } | ||
| sub({ c0, c1 }, { c0: r0, c1: r1 }) { | ||
| return { | ||
| c0: this.Fp.sub(c0, r0), | ||
| c1: this.Fp.sub(c1, r1), | ||
| }; | ||
| } | ||
| mul({ c0, c1 }, rhs) { | ||
| const { Fp } = this; | ||
| if (typeof rhs === 'bigint') | ||
| return { c0: Fp.mul(c0, rhs), c1: Fp.mul(c1, rhs) }; | ||
| // (a+bi)(c+di) = (ac−bd) + (ad+bc)i | ||
| const { c0: r0, c1: r1 } = rhs; | ||
| let t1 = Fp.mul(c0, r0); // c0 * o0 | ||
| let t2 = Fp.mul(c1, r1); // c1 * o1 | ||
| // (T1 - T2) + ((c0 + c1) * (r0 + r1) - (T1 + T2))*i | ||
| const o0 = Fp.sub(t1, t2); | ||
| const o1 = Fp.sub(Fp.mul(Fp.add(c0, c1), Fp.add(r0, r1)), Fp.add(t1, t2)); | ||
| return { c0: o0, c1: o1 }; | ||
| } | ||
| sqr({ c0, c1 }) { | ||
| const { Fp } = this; | ||
| const a = Fp.add(c0, c1); | ||
| const b = Fp.sub(c0, c1); | ||
| const c = Fp.add(c0, c0); | ||
| return { c0: Fp.mul(a, b), c1: Fp.mul(c, c1) }; | ||
| } | ||
| // NonNormalized stuff | ||
| addN(a, b) { | ||
| return this.add(a, b); | ||
| } | ||
| subN(a, b) { | ||
| return this.sub(a, b); | ||
| } | ||
| mulN(a, b) { | ||
| return this.mul(a, b); | ||
| } | ||
| sqrN(a) { | ||
| return this.sqr(a); | ||
| } | ||
| // Why inversion for bigint inside Fp instead of Fp2? it is even used in that context? | ||
| div(lhs, rhs) { | ||
| const { Fp } = this; | ||
| // @ts-ignore | ||
| return this.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : this.inv(rhs)); | ||
| } | ||
| inv({ c0: a, c1: b }) { | ||
| // We wish to find the multiplicative inverse of a nonzero | ||
| // element a + bu in Fp2. We leverage an identity | ||
| // | ||
| // (a + bu)(a - bu) = a² + b² | ||
| // | ||
| // which holds because u² = -1. This can be rewritten as | ||
| // | ||
| // (a + bu)(a - bu)/(a² + b²) = 1 | ||
| // | ||
| // because a² + b² = 0 has no nonzero solutions for (a, b). | ||
| // This gives that (a - bu)/(a² + b²) is the inverse | ||
| // of (a + bu). Importantly, this can be computing using | ||
| // only a single inversion in Fp. | ||
| const { Fp } = this; | ||
| const factor = Fp.inv(Fp.create(a * a + b * b)); | ||
| return { c0: Fp.mul(factor, Fp.create(a)), c1: Fp.mul(factor, Fp.create(-b)) }; | ||
| } | ||
| sqrt(num) { | ||
| // This is generic for all quadratic extensions (Fp2) | ||
| const { Fp } = this; | ||
| const Fp2 = this; | ||
| const { c0, c1 } = num; | ||
| if (Fp.is0(c1)) { | ||
| // if c0 is quadratic residue | ||
| if (mod.FpLegendre(Fp, c0) === 1) | ||
| return Fp2.create({ c0: Fp.sqrt(c0), c1: Fp.ZERO }); | ||
| else | ||
| return Fp2.create({ c0: Fp.ZERO, c1: Fp.sqrt(Fp.div(c0, this.Fp_NONRESIDUE)) }); | ||
| } | ||
| const a = Fp.sqrt(Fp.sub(Fp.sqr(c0), Fp.mul(Fp.sqr(c1), this.Fp_NONRESIDUE))); | ||
| let d = Fp.mul(Fp.add(a, c0), this.Fp_div2); | ||
| const legendre = mod.FpLegendre(Fp, d); | ||
| // -1, Quadratic non residue | ||
| if (legendre === -1) | ||
| d = Fp.sub(d, a); | ||
| const a0 = Fp.sqrt(d); | ||
| const candidateSqrt = Fp2.create({ c0: a0, c1: Fp.div(Fp.mul(c1, this.Fp_div2), a0) }); | ||
| if (!Fp2.eql(Fp2.sqr(candidateSqrt), num)) | ||
| throw new Error('Cannot find square root'); | ||
| // Normalize root: at this point candidateSqrt ** 2 = num, but also -candidateSqrt ** 2 = num | ||
| const x1 = candidateSqrt; | ||
| const x2 = Fp2.neg(x1); | ||
| const { re: re1, im: im1 } = Fp2.reim(x1); | ||
| const { re: re2, im: im2 } = Fp2.reim(x2); | ||
| if (im1 > im2 || (im1 === im2 && re1 > re2)) | ||
| return x1; | ||
| return x2; | ||
| } | ||
| // Same as sgn0_m_eq_2 in RFC 9380 | ||
| isOdd(x) { | ||
| const { re: x0, im: x1 } = this.reim(x); | ||
| const sign_0 = x0 % _2n; | ||
| const zero_0 = x0 === _0n; | ||
| const sign_1 = x1 % _2n; | ||
| return BigInt(sign_0 || (zero_0 && sign_1)) == _1n; | ||
| } | ||
| // Bytes util | ||
| fromBytes(b) { | ||
| const { Fp } = this; | ||
| if (b.length !== this.BYTES) | ||
| throw new Error('fromBytes invalid length=' + b.length); | ||
| return { c0: Fp.fromBytes(b.subarray(0, Fp.BYTES)), c1: Fp.fromBytes(b.subarray(Fp.BYTES)) }; | ||
| } | ||
| toBytes({ c0, c1 }) { | ||
| return concatBytes(this.Fp.toBytes(c0), this.Fp.toBytes(c1)); | ||
| } | ||
| cmov({ c0, c1 }, { c0: r0, c1: r1 }, c) { | ||
| return { | ||
| c0: this.Fp.cmov(c0, r0, c), | ||
| c1: this.Fp.cmov(c1, r1, c), | ||
| }; | ||
| } | ||
| reim({ c0, c1 }) { | ||
| return { re: c0, im: c1 }; | ||
| } | ||
| Fp4Square(a, b) { | ||
| const Fp2 = this; | ||
| const a2 = Fp2.sqr(a); | ||
| const b2 = Fp2.sqr(b); | ||
| return { | ||
| first: Fp2.add(Fp2.mulByNonresidue(b2), a2), // b² * Nonresidue + a² | ||
| second: Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(a, b)), a2), b2), // (a + b)² - a² - b² | ||
| }; | ||
| } | ||
| // multiply by u + 1 | ||
| mulByNonresidue({ c0, c1 }) { | ||
| return this.mul({ c0, c1 }, this.NONRESIDUE); | ||
| } | ||
| frobeniusMap({ c0, c1 }, power) { | ||
| return { | ||
| c0, | ||
| c1: this.Fp.mul(c1, this.FROBENIUS_COEFFICIENTS[power % 2]), | ||
| }; | ||
| } | ||
| } | ||
| class _Field6 { | ||
| constructor(Fp2) { | ||
| this.MASK = _1n; | ||
| this.Fp2 = Fp2; | ||
| this.ORDER = Fp2.ORDER; // TODO: unused, but need to verify | ||
| this.BITS = 3 * Fp2.BITS; | ||
| this.BYTES = 3 * Fp2.BYTES; | ||
| this.isLE = Fp2.isLE; | ||
| this.ZERO = { c0: Fp2.ZERO, c1: Fp2.ZERO, c2: Fp2.ZERO }; | ||
| this.ONE = { c0: Fp2.ONE, c1: Fp2.ZERO, c2: Fp2.ZERO }; | ||
| const { Fp } = Fp2; | ||
| const frob = calcFrobeniusCoefficients(Fp2, Fp2.NONRESIDUE, Fp.ORDER, 6, 2, 3); | ||
| this.FROBENIUS_COEFFICIENTS_1 = frob[0]; | ||
| this.FROBENIUS_COEFFICIENTS_2 = frob[1]; | ||
| Object.seal(this); | ||
| } | ||
| add({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }) { | ||
| const { Fp2 } = this; | ||
| return { | ||
| c0: Fp2.add(c0, r0), | ||
| c1: Fp2.add(c1, r1), | ||
| c2: Fp2.add(c2, r2), | ||
| }; | ||
| } | ||
| sub({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }) { | ||
| const { Fp2 } = this; | ||
| return { | ||
| c0: Fp2.sub(c0, r0), | ||
| c1: Fp2.sub(c1, r1), | ||
| c2: Fp2.sub(c2, r2), | ||
| }; | ||
| } | ||
| mul({ c0, c1, c2 }, rhs) { | ||
| const { Fp2 } = this; | ||
| if (typeof rhs === 'bigint') { | ||
| return { | ||
| c0: Fp2.mul(c0, rhs), | ||
| c1: Fp2.mul(c1, rhs), | ||
| c2: Fp2.mul(c2, rhs), | ||
| }; | ||
| } | ||
| const { c0: r0, c1: r1, c2: r2 } = rhs; | ||
| const t0 = Fp2.mul(c0, r0); // c0 * o0 | ||
| const t1 = Fp2.mul(c1, r1); // c1 * o1 | ||
| const t2 = Fp2.mul(c2, r2); // c2 * o2 | ||
| return { | ||
| // t0 + (c1 + c2) * (r1 * r2) - (T1 + T2) * (u + 1) | ||
| c0: Fp2.add(t0, Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), Fp2.add(r1, r2)), Fp2.add(t1, t2)))), | ||
| // (c0 + c1) * (r0 + r1) - (T0 + T1) + T2 * (u + 1) | ||
| c1: Fp2.add(Fp2.sub(Fp2.mul(Fp2.add(c0, c1), Fp2.add(r0, r1)), Fp2.add(t0, t1)), Fp2.mulByNonresidue(t2)), | ||
| // T1 + (c0 + c2) * (r0 + r2) - T0 + T2 | ||
| c2: Fp2.sub(Fp2.add(t1, Fp2.mul(Fp2.add(c0, c2), Fp2.add(r0, r2))), Fp2.add(t0, t2)), | ||
| }; | ||
| } | ||
| sqr({ c0, c1, c2 }) { | ||
| const { Fp2 } = this; | ||
| let t0 = Fp2.sqr(c0); // c0² | ||
| let t1 = Fp2.mul(Fp2.mul(c0, c1), _2n); // 2 * c0 * c1 | ||
| let t3 = Fp2.mul(Fp2.mul(c1, c2), _2n); // 2 * c1 * c2 | ||
| let t4 = Fp2.sqr(c2); // c2² | ||
| return { | ||
| c0: Fp2.add(Fp2.mulByNonresidue(t3), t0), // T3 * (u + 1) + T0 | ||
| c1: Fp2.add(Fp2.mulByNonresidue(t4), t1), // T4 * (u + 1) + T1 | ||
| // T1 + (c0 - c1 + c2)² + T3 - T0 - T4 | ||
| c2: Fp2.sub(Fp2.sub(Fp2.add(Fp2.add(t1, Fp2.sqr(Fp2.add(Fp2.sub(c0, c1), c2))), t3), t0), t4), | ||
| }; | ||
| } | ||
| addN(a, b) { | ||
| return this.add(a, b); | ||
| } | ||
| subN(a, b) { | ||
| return this.sub(a, b); | ||
| } | ||
| mulN(a, b) { | ||
| return this.mul(a, b); | ||
| } | ||
| sqrN(a) { | ||
| return this.sqr(a); | ||
| } | ||
| create(num) { | ||
| return num; | ||
| } | ||
| isValid({ c0, c1, c2 }) { | ||
| const { Fp2 } = this; | ||
| return Fp2.isValid(c0) && Fp2.isValid(c1) && Fp2.isValid(c2); | ||
| } | ||
| is0({ c0, c1, c2 }) { | ||
| const { Fp2 } = this; | ||
| return Fp2.is0(c0) && Fp2.is0(c1) && Fp2.is0(c2); | ||
| } | ||
| isValidNot0(num) { | ||
| return !this.is0(num) && this.isValid(num); | ||
| } | ||
| neg({ c0, c1, c2 }) { | ||
| const { Fp2 } = this; | ||
| return { c0: Fp2.neg(c0), c1: Fp2.neg(c1), c2: Fp2.neg(c2) }; | ||
| } | ||
| eql({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }) { | ||
| const { Fp2 } = this; | ||
| return Fp2.eql(c0, r0) && Fp2.eql(c1, r1) && Fp2.eql(c2, r2); | ||
| } | ||
| sqrt(_) { | ||
| return notImplemented(); | ||
| } | ||
| // Do we need division by bigint at all? Should be done via order: | ||
| div(lhs, rhs) { | ||
| const { Fp2 } = this; | ||
| const { Fp } = Fp2; | ||
| return this.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : this.inv(rhs)); | ||
| } | ||
| pow(num, power) { | ||
| return mod.FpPow(this, num, power); | ||
| } | ||
| invertBatch(nums) { | ||
| return mod.FpInvertBatch(this, nums); | ||
| } | ||
| inv({ c0, c1, c2 }) { | ||
| const { Fp2 } = this; | ||
| let t0 = Fp2.sub(Fp2.sqr(c0), Fp2.mulByNonresidue(Fp2.mul(c2, c1))); // c0² - c2 * c1 * (u + 1) | ||
| let t1 = Fp2.sub(Fp2.mulByNonresidue(Fp2.sqr(c2)), Fp2.mul(c0, c1)); // c2² * (u + 1) - c0 * c1 | ||
| let t2 = Fp2.sub(Fp2.sqr(c1), Fp2.mul(c0, c2)); // c1² - c0 * c2 | ||
| // 1/(((c2 * T1 + c1 * T2) * v) + c0 * T0) | ||
| let t4 = Fp2.inv(Fp2.add(Fp2.mulByNonresidue(Fp2.add(Fp2.mul(c2, t1), Fp2.mul(c1, t2))), Fp2.mul(c0, t0))); | ||
| return { c0: Fp2.mul(t4, t0), c1: Fp2.mul(t4, t1), c2: Fp2.mul(t4, t2) }; | ||
| } | ||
| // Bytes utils | ||
| fromBytes(b) { | ||
| const { Fp2 } = this; | ||
| if (b.length !== this.BYTES) | ||
| throw new Error('fromBytes invalid length=' + b.length); | ||
| const B2 = Fp2.BYTES; | ||
| return { | ||
| c0: Fp2.fromBytes(b.subarray(0, B2)), | ||
| c1: Fp2.fromBytes(b.subarray(B2, B2 * 2)), | ||
| c2: Fp2.fromBytes(b.subarray(2 * B2)), | ||
| }; | ||
| } | ||
| toBytes({ c0, c1, c2 }) { | ||
| const { Fp2 } = this; | ||
| return concatBytes(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2)); | ||
| } | ||
| cmov({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }, c) { | ||
| const { Fp2 } = this; | ||
| return { | ||
| c0: Fp2.cmov(c0, r0, c), | ||
| c1: Fp2.cmov(c1, r1, c), | ||
| c2: Fp2.cmov(c2, r2, c), | ||
| }; | ||
| } | ||
| fromBigSix(t) { | ||
| const { Fp2 } = this; | ||
| if (!Array.isArray(t) || t.length !== 6) | ||
| throw new Error('invalid Fp6 usage'); | ||
| return { | ||
| c0: Fp2.fromBigTuple(t.slice(0, 2)), | ||
| c1: Fp2.fromBigTuple(t.slice(2, 4)), | ||
| c2: Fp2.fromBigTuple(t.slice(4, 6)), | ||
| }; | ||
| } | ||
| frobeniusMap({ c0, c1, c2 }, power) { | ||
| const { Fp2 } = this; | ||
| return { | ||
| c0: Fp2.frobeniusMap(c0, power), | ||
| c1: Fp2.mul(Fp2.frobeniusMap(c1, power), this.FROBENIUS_COEFFICIENTS_1[power % 6]), | ||
| c2: Fp2.mul(Fp2.frobeniusMap(c2, power), this.FROBENIUS_COEFFICIENTS_2[power % 6]), | ||
| }; | ||
| } | ||
| mulByFp2({ c0, c1, c2 }, rhs) { | ||
| const { Fp2 } = this; | ||
| return { | ||
| c0: Fp2.mul(c0, rhs), | ||
| c1: Fp2.mul(c1, rhs), | ||
| c2: Fp2.mul(c2, rhs), | ||
| }; | ||
| } | ||
| mulByNonresidue({ c0, c1, c2 }) { | ||
| const { Fp2 } = this; | ||
| return { c0: Fp2.mulByNonresidue(c2), c1: c0, c2: c1 }; | ||
| } | ||
| // Sparse multiplication | ||
| mul1({ c0, c1, c2 }, b1) { | ||
| const { Fp2 } = this; | ||
| return { | ||
| c0: Fp2.mulByNonresidue(Fp2.mul(c2, b1)), | ||
| c1: Fp2.mul(c0, b1), | ||
| c2: Fp2.mul(c1, b1), | ||
| }; | ||
| } | ||
| // Sparse multiplication | ||
| mul01({ c0, c1, c2 }, b0, b1) { | ||
| const { Fp2 } = this; | ||
| let t0 = Fp2.mul(c0, b0); // c0 * b0 | ||
| let t1 = Fp2.mul(c1, b1); // c1 * b1 | ||
| return { | ||
| // ((c1 + c2) * b1 - T1) * (u + 1) + T0 | ||
| c0: Fp2.add(Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), b1), t1)), t0), | ||
| // (b0 + b1) * (c0 + c1) - T0 - T1 | ||
| c1: Fp2.sub(Fp2.sub(Fp2.mul(Fp2.add(b0, b1), Fp2.add(c0, c1)), t0), t1), | ||
| // (c0 + c2) * b0 - T0 + T1 | ||
| c2: Fp2.add(Fp2.sub(Fp2.mul(Fp2.add(c0, c2), b0), t0), t1), | ||
| }; | ||
| } | ||
| } | ||
| class _Field12 { | ||
| constructor(Fp6, opts) { | ||
| this.MASK = _1n; | ||
| const { Fp2 } = Fp6; | ||
| const { Fp } = Fp2; | ||
| this.Fp6 = Fp6; | ||
| this.ORDER = Fp2.ORDER; // TODO: verify if it's unuesd | ||
| this.BITS = 2 * Fp6.BITS; | ||
| this.BYTES = 2 * Fp6.BYTES; | ||
| this.isLE = Fp6.isLE; | ||
| this.ZERO = { c0: Fp6.ZERO, c1: Fp6.ZERO }; | ||
| this.ONE = { c0: Fp6.ONE, c1: Fp6.ZERO }; | ||
| this.FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(Fp2, Fp2.NONRESIDUE, Fp.ORDER, 12, 1, 6)[0]; | ||
| this.X_LEN = opts.X_LEN; | ||
| this.finalExponentiate = opts.Fp12finalExponentiate; | ||
| } | ||
| create(num) { | ||
| return num; | ||
| } | ||
| isValid({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| return Fp6.isValid(c0) && Fp6.isValid(c1); | ||
| } | ||
| is0({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| return Fp6.is0(c0) && Fp6.is0(c1); | ||
| } | ||
| isValidNot0(num) { | ||
| return !this.is0(num) && this.isValid(num); | ||
| } | ||
| neg({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| return { c0: Fp6.neg(c0), c1: Fp6.neg(c1) }; | ||
| } | ||
| eql({ c0, c1 }, { c0: r0, c1: r1 }) { | ||
| const { Fp6 } = this; | ||
| return Fp6.eql(c0, r0) && Fp6.eql(c1, r1); | ||
| } | ||
| sqrt(_) { | ||
| notImplemented(); | ||
| } | ||
| inv({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| let t = Fp6.inv(Fp6.sub(Fp6.sqr(c0), Fp6.mulByNonresidue(Fp6.sqr(c1)))); // 1 / (c0² - c1² * v) | ||
| return { c0: Fp6.mul(c0, t), c1: Fp6.neg(Fp6.mul(c1, t)) }; // ((C0 * T) * T) + (-C1 * T) * w | ||
| } | ||
| div(lhs, rhs) { | ||
| const { Fp6 } = this; | ||
| const { Fp2 } = Fp6; | ||
| const { Fp } = Fp2; | ||
| return this.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : this.inv(rhs)); | ||
| } | ||
| pow(num, power) { | ||
| return mod.FpPow(this, num, power); | ||
| } | ||
| invertBatch(nums) { | ||
| return mod.FpInvertBatch(this, nums); | ||
| } | ||
| // Normalized | ||
| add({ c0, c1 }, { c0: r0, c1: r1 }) { | ||
| const { Fp6 } = this; | ||
| return { | ||
| c0: Fp6.add(c0, r0), | ||
| c1: Fp6.add(c1, r1), | ||
| }; | ||
| } | ||
| sub({ c0, c1 }, { c0: r0, c1: r1 }) { | ||
| const { Fp6 } = this; | ||
| return { | ||
| c0: Fp6.sub(c0, r0), | ||
| c1: Fp6.sub(c1, r1), | ||
| }; | ||
| } | ||
| mul({ c0, c1 }, rhs) { | ||
| const { Fp6 } = this; | ||
| if (typeof rhs === 'bigint') | ||
| return { c0: Fp6.mul(c0, rhs), c1: Fp6.mul(c1, rhs) }; | ||
| let { c0: r0, c1: r1 } = rhs; | ||
| let t1 = Fp6.mul(c0, r0); // c0 * r0 | ||
| let t2 = Fp6.mul(c1, r1); // c1 * r1 | ||
| return { | ||
| c0: Fp6.add(t1, Fp6.mulByNonresidue(t2)), // T1 + T2 * v | ||
| // (c0 + c1) * (r0 + r1) - (T1 + T2) | ||
| c1: Fp6.sub(Fp6.mul(Fp6.add(c0, c1), Fp6.add(r0, r1)), Fp6.add(t1, t2)), | ||
| }; | ||
| } | ||
| sqr({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| let ab = Fp6.mul(c0, c1); // c0 * c1 | ||
| return { | ||
| // (c1 * v + c0) * (c0 + c1) - AB - AB * v | ||
| c0: Fp6.sub(Fp6.sub(Fp6.mul(Fp6.add(Fp6.mulByNonresidue(c1), c0), Fp6.add(c0, c1)), ab), Fp6.mulByNonresidue(ab)), | ||
| c1: Fp6.add(ab, ab), | ||
| }; // AB + AB | ||
| } | ||
| // NonNormalized stuff | ||
| addN(a, b) { | ||
| return this.add(a, b); | ||
| } | ||
| subN(a, b) { | ||
| return this.sub(a, b); | ||
| } | ||
| mulN(a, b) { | ||
| return this.mul(a, b); | ||
| } | ||
| sqrN(a) { | ||
| return this.sqr(a); | ||
| } | ||
| // Bytes utils | ||
| fromBytes(b) { | ||
| const { Fp6 } = this; | ||
| if (b.length !== this.BYTES) | ||
| throw new Error('fromBytes invalid length=' + b.length); | ||
| return { | ||
| c0: Fp6.fromBytes(b.subarray(0, Fp6.BYTES)), | ||
| c1: Fp6.fromBytes(b.subarray(Fp6.BYTES)), | ||
| }; | ||
| } | ||
| toBytes({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| return concatBytes(Fp6.toBytes(c0), Fp6.toBytes(c1)); | ||
| } | ||
| cmov({ c0, c1 }, { c0: r0, c1: r1 }, c) { | ||
| const { Fp6 } = this; | ||
| return { | ||
| c0: Fp6.cmov(c0, r0, c), | ||
| c1: Fp6.cmov(c1, r1, c), | ||
| }; | ||
| } | ||
| // Utils | ||
| // toString() { | ||
| // return '' + 'Fp12(' + this.c0 + this.c1 + '* w'); | ||
| // }, | ||
| // fromTuple(c: [Fp6, Fp6]) { | ||
| // return new Fp12(...c); | ||
| // } | ||
| fromBigTwelve(t) { | ||
| const { Fp6 } = this; | ||
| return { | ||
| c0: Fp6.fromBigSix(t.slice(0, 6)), | ||
| c1: Fp6.fromBigSix(t.slice(6, 12)), | ||
| }; | ||
| } | ||
| // Raises to q**i -th power | ||
| frobeniusMap(lhs, power) { | ||
| const { Fp6 } = this; | ||
| const { Fp2 } = Fp6; | ||
| const { c0, c1, c2 } = Fp6.frobeniusMap(lhs.c1, power); | ||
| const coeff = this.FROBENIUS_COEFFICIENTS[power % 12]; | ||
| return { | ||
| c0: Fp6.frobeniusMap(lhs.c0, power), | ||
| c1: Fp6.create({ | ||
| c0: Fp2.mul(c0, coeff), | ||
| c1: Fp2.mul(c1, coeff), | ||
| c2: Fp2.mul(c2, coeff), | ||
| }), | ||
| }; | ||
| } | ||
| mulByFp2({ c0, c1 }, rhs) { | ||
| const { Fp6 } = this; | ||
| return { | ||
| c0: Fp6.mulByFp2(c0, rhs), | ||
| c1: Fp6.mulByFp2(c1, rhs), | ||
| }; | ||
| } | ||
| conjugate({ c0, c1 }) { | ||
| return { c0, c1: this.Fp6.neg(c1) }; | ||
| } | ||
| // Sparse multiplication | ||
| mul014({ c0, c1 }, o0, o1, o4) { | ||
| const { Fp6 } = this; | ||
| const { Fp2 } = Fp6; | ||
| let t0 = Fp6.mul01(c0, o0, o1); | ||
| let t1 = Fp6.mul1(c1, o4); | ||
| return { | ||
| c0: Fp6.add(Fp6.mulByNonresidue(t1), t0), // T1 * v + T0 | ||
| // (c1 + c0) * [o0, o1+o4] - T0 - T1 | ||
| c1: Fp6.sub(Fp6.sub(Fp6.mul01(Fp6.add(c1, c0), o0, Fp2.add(o1, o4)), t0), t1), | ||
| }; | ||
| } | ||
| mul034({ c0, c1 }, o0, o3, o4) { | ||
| const { Fp6 } = this; | ||
| const { Fp2 } = Fp6; | ||
| const a = Fp6.create({ | ||
| c0: Fp2.mul(c0.c0, o0), | ||
| c1: Fp2.mul(c0.c1, o0), | ||
| c2: Fp2.mul(c0.c2, o0), | ||
| }); | ||
| const b = Fp6.mul01(c1, o3, o4); | ||
| const e = Fp6.mul01(Fp6.add(c0, c1), Fp2.add(o0, o3), o4); | ||
| return { | ||
| c0: Fp6.add(Fp6.mulByNonresidue(b), a), | ||
| c1: Fp6.sub(e, Fp6.add(a, b)), | ||
| }; | ||
| } | ||
| // A cyclotomic group is a subgroup of Fp^n defined by | ||
| // GΦₙ(p) = {α ∈ Fpⁿ : α^Φₙ(p) = 1} | ||
| // The result of any pairing is in a cyclotomic subgroup | ||
| // https://eprint.iacr.org/2009/565.pdf | ||
| // https://eprint.iacr.org/2010/354.pdf | ||
| _cyclotomicSquare({ c0, c1 }) { | ||
| const { Fp6 } = this; | ||
| const { Fp2 } = Fp6; | ||
| const { c0: c0c0, c1: c0c1, c2: c0c2 } = c0; | ||
| const { c0: c1c0, c1: c1c1, c2: c1c2 } = c1; | ||
| const { first: t3, second: t4 } = Fp2.Fp4Square(c0c0, c1c1); | ||
| const { first: t5, second: t6 } = Fp2.Fp4Square(c1c0, c0c2); | ||
| const { first: t7, second: t8 } = Fp2.Fp4Square(c0c1, c1c2); | ||
| const t9 = Fp2.mulByNonresidue(t8); // T8 * (u + 1) | ||
| return { | ||
| c0: Fp6.create({ | ||
| c0: Fp2.add(Fp2.mul(Fp2.sub(t3, c0c0), _2n), t3), // 2 * (T3 - c0c0) + T3 | ||
| c1: Fp2.add(Fp2.mul(Fp2.sub(t5, c0c1), _2n), t5), // 2 * (T5 - c0c1) + T5 | ||
| c2: Fp2.add(Fp2.mul(Fp2.sub(t7, c0c2), _2n), t7), | ||
| }), // 2 * (T7 - c0c2) + T7 | ||
| c1: Fp6.create({ | ||
| c0: Fp2.add(Fp2.mul(Fp2.add(t9, c1c0), _2n), t9), // 2 * (T9 + c1c0) + T9 | ||
| c1: Fp2.add(Fp2.mul(Fp2.add(t4, c1c1), _2n), t4), // 2 * (T4 + c1c1) + T4 | ||
| c2: Fp2.add(Fp2.mul(Fp2.add(t6, c1c2), _2n), t6), | ||
| }), | ||
| }; // 2 * (T6 + c1c2) + T6 | ||
| } | ||
| // https://eprint.iacr.org/2009/565.pdf | ||
| _cyclotomicExp(num, n) { | ||
| let z = this.ONE; | ||
| for (let i = this.X_LEN - 1; i >= 0; i--) { | ||
| z = this._cyclotomicSquare(z); | ||
| if (bitGet(n, i)) | ||
| z = this.mul(z, num); | ||
| } | ||
| return z; | ||
| } | ||
| } | ||
| export function tower12(opts) { | ||
| const Fp = mod.Field(opts.ORDER); | ||
| const Fp2 = new _Field2(Fp, opts); | ||
| const Fp6 = new _Field6(Fp2); | ||
| const Fp12 = new _Field12(Fp6, opts); | ||
| return { Fp, Fp2, Fp6, Fp12 }; | ||
| } | ||
| //# sourceMappingURL=tower.js.map |
| {"version":3,"file":"tower.js","sourceRoot":"","sources":["../../src/abstract/tower.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * @module | ||
| */ | ||
| export * from '../utils.ts'; | ||
| //# sourceMappingURL=utils.d.ts.map |
| {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/abstract/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC"} |
| /** | ||
| * @module | ||
| */ | ||
| export * from "../utils.js"; | ||
| // TODO | ||
| // @deprecated use `@noble/curves/utils.js` | ||
| //# sourceMappingURL=utils.js.map |
| {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/abstract/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAE5B,OAAO;AACP,2CAA2C"} |
| import { type CHash, type Hex, type PrivKey } from '../utils.ts'; | ||
| import { type AffinePoint, type BasicCurve, type CurveLengths, type CurvePoint, type CurvePointCons } from './curve.ts'; | ||
| import { type IField, type NLength } from './modular.ts'; | ||
| export type { AffinePoint }; | ||
| export type HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array; | ||
| type EndoBasis = [[bigint, bigint], [bigint, bigint]]; | ||
| /** | ||
| * When Weierstrass curve has `a=0`, it becomes Koblitz curve. | ||
| * Koblitz curves allow using **efficiently-computable GLV endomorphism ψ**. | ||
| * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%. | ||
| * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit. | ||
| * | ||
| * Endomorphism consists of beta, lambda and splitScalar: | ||
| * | ||
| * 1. GLV endomorphism ψ transforms a point: `P = (x, y) ↦ ψ(P) = (β·x mod p, y)` | ||
| * 2. GLV scalar decomposition transforms a scalar: `k ≡ k₁ + k₂·λ (mod n)` | ||
| * 3. Then these are combined: `k·P = k₁·P + k₂·ψ(P)` | ||
| * 4. Two 128-bit point-by-scalar multiplications + one point addition is faster than | ||
| * one 256-bit multiplication. | ||
| * | ||
| * where | ||
| * * beta: β ∈ Fₚ with β³ = 1, β ≠ 1 | ||
| * * lambda: λ ∈ Fₙ with λ³ = 1, λ ≠ 1 | ||
| * * splitScalar decomposes k ↦ k₁, k₂, by using reduced basis vectors. | ||
| * Gauss lattice reduction calculates them from initial basis vectors `(n, 0), (-λ, 0)` | ||
| * | ||
| * Check out `test/misc/endomorphism.js` and | ||
| * [gist](https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066). | ||
| */ | ||
| export type EndomorphismOpts = { | ||
| beta: bigint; | ||
| basises?: EndoBasis; | ||
| splitScalar?: (k: bigint) => { | ||
| k1neg: boolean; | ||
| k1: bigint; | ||
| k2neg: boolean; | ||
| k2: bigint; | ||
| }; | ||
| }; | ||
| export type ScalarEndoParts = { | ||
| k1neg: boolean; | ||
| k1: bigint; | ||
| k2neg: boolean; | ||
| k2: bigint; | ||
| }; | ||
| /** | ||
| * Splits scalar for GLV endomorphism. | ||
| */ | ||
| export declare function _splitEndoScalar(k: bigint, basis: EndoBasis, n: bigint): ScalarEndoParts; | ||
| export type ECDSASigFormat = 'compact' | 'recovered' | 'der'; | ||
| export type ECDSARecoverOpts = { | ||
| prehash?: boolean; | ||
| }; | ||
| export type ECDSAVerifyOpts = { | ||
| prehash?: boolean; | ||
| lowS?: boolean; | ||
| format?: ECDSASigFormat; | ||
| }; | ||
| export type ECDSASignOpts = { | ||
| prehash?: boolean; | ||
| lowS?: boolean; | ||
| format?: ECDSASigFormat; | ||
| extraEntropy?: Uint8Array | boolean; | ||
| }; | ||
| /** Instance methods for 3D XYZ projective points. */ | ||
| export interface WeierstrassPoint<T> extends CurvePoint<T, WeierstrassPoint<T>> { | ||
| /** projective X coordinate. Different from affine x. */ | ||
| readonly X: T; | ||
| /** projective Y coordinate. Different from affine y. */ | ||
| readonly Y: T; | ||
| /** projective z coordinate */ | ||
| readonly Z: T; | ||
| /** affine x coordinate. Different from projective X. */ | ||
| get x(): T; | ||
| /** affine y coordinate. Different from projective Y. */ | ||
| get y(): T; | ||
| /** Encodes point using IEEE P1363 (DER) encoding. First byte is 2/3/4. Default = isCompressed. */ | ||
| toBytes(isCompressed?: boolean): Uint8Array; | ||
| toHex(isCompressed?: boolean): string; | ||
| /** @deprecated use `.X` */ | ||
| readonly px: T; | ||
| /** @deprecated use `.Y` */ | ||
| readonly py: T; | ||
| /** @deprecated use `.Z` */ | ||
| readonly pz: T; | ||
| /** @deprecated use `toBytes` */ | ||
| toRawBytes(isCompressed?: boolean): Uint8Array; | ||
| /** @deprecated use `multiplyUnsafe` */ | ||
| multiplyAndAddUnsafe(Q: WeierstrassPoint<T>, a: bigint, b: bigint): WeierstrassPoint<T> | undefined; | ||
| /** @deprecated use `p.y % 2n === 0n` */ | ||
| hasEvenY(): boolean; | ||
| /** @deprecated use `p.precompute(windowSize)` */ | ||
| _setWindowSize(windowSize: number): void; | ||
| } | ||
| /** Static methods for 3D XYZ projective points. */ | ||
| export interface WeierstrassPointCons<T> extends CurvePointCons<WeierstrassPoint<T>> { | ||
| /** Does NOT validate if the point is valid. Use `.assertValidity()`. */ | ||
| new (X: T, Y: T, Z: T): WeierstrassPoint<T>; | ||
| CURVE(): WeierstrassOpts<T>; | ||
| /** @deprecated use `Point.BASE.multiply(Point.Fn.fromBytes(privateKey))` */ | ||
| fromPrivateKey(privateKey: PrivKey): WeierstrassPoint<T>; | ||
| /** @deprecated use `import { normalizeZ } from '@noble/curves/abstract/curve.js';` */ | ||
| normalizeZ(points: WeierstrassPoint<T>[]): WeierstrassPoint<T>[]; | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| msm(points: WeierstrassPoint<T>[], scalars: bigint[]): WeierstrassPoint<T>; | ||
| } | ||
| /** | ||
| * Weierstrass curve options. | ||
| * | ||
| * * p: prime characteristic (order) of finite field, in which arithmetics is done | ||
| * * n: order of prime subgroup a.k.a total amount of valid curve points | ||
| * * h: cofactor, usually 1. h*n is group order; n is subgroup order | ||
| * * a: formula param, must be in field of p | ||
| * * b: formula param, must be in field of p | ||
| * * Gx: x coordinate of generator point a.k.a. base point | ||
| * * Gy: y coordinate of generator point | ||
| */ | ||
| export type WeierstrassOpts<T> = Readonly<{ | ||
| p: bigint; | ||
| n: bigint; | ||
| h: bigint; | ||
| a: T; | ||
| b: T; | ||
| Gx: T; | ||
| Gy: T; | ||
| }>; | ||
| export type WeierstrassExtraOpts<T> = Partial<{ | ||
| Fp: IField<T>; | ||
| Fn: IField<bigint>; | ||
| allowInfinityPoint: boolean; | ||
| endo: EndomorphismOpts; | ||
| isTorsionFree: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean; | ||
| clearCofactor: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>; | ||
| fromBytes: (bytes: Uint8Array) => AffinePoint<T>; | ||
| toBytes: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>, isCompressed: boolean) => Uint8Array; | ||
| }>; | ||
| /** | ||
| * Options for ECDSA signatures over a Weierstrass curve. | ||
| * | ||
| * * lowS: (default: true) whether produced / verified signatures occupy low half of ecdsaOpts.p. Prevents malleability. | ||
| * * hmac: (default: noble-hashes hmac) function, would be used to init hmac-drbg for k generation. | ||
| * * randomBytes: (default: webcrypto os-level CSPRNG) custom method for fetching secure randomness. | ||
| * * bits2int, bits2int_modN: used in sigs, sometimes overridden by curves | ||
| */ | ||
| export type ECDSAOpts = Partial<{ | ||
| lowS: boolean; | ||
| hmac: HmacFnSync; | ||
| randomBytes: (bytesLength?: number) => Uint8Array; | ||
| bits2int: (bytes: Uint8Array) => bigint; | ||
| bits2int_modN: (bytes: Uint8Array) => bigint; | ||
| }>; | ||
| /** | ||
| * Elliptic Curve Diffie-Hellman interface. | ||
| * Provides keygen, secret-to-public conversion, calculating shared secrets. | ||
| */ | ||
| export interface ECDH { | ||
| keygen: (seed?: Uint8Array) => { | ||
| secretKey: Uint8Array; | ||
| publicKey: Uint8Array; | ||
| }; | ||
| getPublicKey: (secretKey: PrivKey, isCompressed?: boolean) => Uint8Array; | ||
| getSharedSecret: (secretKeyA: PrivKey, publicKeyB: Hex, isCompressed?: boolean) => Uint8Array; | ||
| Point: WeierstrassPointCons<bigint>; | ||
| utils: { | ||
| isValidSecretKey: (secretKey: PrivKey) => boolean; | ||
| isValidPublicKey: (publicKey: Uint8Array, isCompressed?: boolean) => boolean; | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `isValidSecretKey` */ | ||
| isValidPrivateKey: (secretKey: PrivKey) => boolean; | ||
| /** @deprecated use `Point.Fn.fromBytes()` */ | ||
| normPrivateKeyToScalar: (key: PrivKey) => bigint; | ||
| /** @deprecated use `point.precompute()` */ | ||
| precompute: (windowSize?: number, point?: WeierstrassPoint<bigint>) => WeierstrassPoint<bigint>; | ||
| }; | ||
| lengths: CurveLengths; | ||
| } | ||
| /** | ||
| * ECDSA interface. | ||
| * Only supported for prime fields, not Fp2 (extension fields). | ||
| */ | ||
| export interface ECDSA extends ECDH { | ||
| sign: (message: Hex, secretKey: PrivKey, opts?: ECDSASignOpts) => ECDSASigRecovered; | ||
| verify: (signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array, opts?: ECDSAVerifyOpts) => boolean; | ||
| recoverPublicKey(signature: Uint8Array, message: Uint8Array, opts?: ECDSARecoverOpts): Uint8Array; | ||
| Signature: ECDSASignatureCons; | ||
| } | ||
| export declare class DERErr extends Error { | ||
| constructor(m?: string); | ||
| } | ||
| export type IDER = { | ||
| Err: typeof DERErr; | ||
| _tlv: { | ||
| encode: (tag: number, data: string) => string; | ||
| decode(tag: number, data: Uint8Array): { | ||
| v: Uint8Array; | ||
| l: Uint8Array; | ||
| }; | ||
| }; | ||
| _int: { | ||
| encode(num: bigint): string; | ||
| decode(data: Uint8Array): bigint; | ||
| }; | ||
| toSig(hex: string | Uint8Array): { | ||
| r: bigint; | ||
| s: bigint; | ||
| }; | ||
| hexFromSig(sig: { | ||
| r: bigint; | ||
| s: bigint; | ||
| }): string; | ||
| }; | ||
| /** | ||
| * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format: | ||
| * | ||
| * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S] | ||
| * | ||
| * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html | ||
| */ | ||
| export declare const DER: IDER; | ||
| export declare function _normFnElement(Fn: IField<bigint>, key: PrivKey): bigint; | ||
| /** | ||
| * Creates weierstrass Point constructor, based on specified curve options. | ||
| * | ||
| * @example | ||
| ```js | ||
| const opts = { | ||
| p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'), | ||
| n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'), | ||
| h: BigInt(1), | ||
| a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'), | ||
| b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'), | ||
| Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'), | ||
| Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'), | ||
| }; | ||
| const p256_Point = weierstrass(opts); | ||
| ``` | ||
| */ | ||
| export declare function weierstrassN<T>(params: WeierstrassOpts<T>, extraOpts?: WeierstrassExtraOpts<T>): WeierstrassPointCons<T>; | ||
| /** Methods of ECDSA signature instance. */ | ||
| export interface ECDSASignature { | ||
| readonly r: bigint; | ||
| readonly s: bigint; | ||
| readonly recovery?: number; | ||
| addRecoveryBit(recovery: number): ECDSASigRecovered; | ||
| hasHighS(): boolean; | ||
| toBytes(format?: string): Uint8Array; | ||
| toHex(format?: string): string; | ||
| /** @deprecated */ | ||
| assertValidity(): void; | ||
| /** @deprecated */ | ||
| normalizeS(): ECDSASignature; | ||
| /** @deprecated use standalone method `curve.recoverPublicKey(sig.toBytes('recovered'), msg)` */ | ||
| recoverPublicKey(msgHash: Hex): WeierstrassPoint<bigint>; | ||
| /** @deprecated use `.toBytes('compact')` */ | ||
| toCompactRawBytes(): Uint8Array; | ||
| /** @deprecated use `.toBytes('compact')` */ | ||
| toCompactHex(): string; | ||
| /** @deprecated use `.toBytes('der')` */ | ||
| toDERRawBytes(): Uint8Array; | ||
| /** @deprecated use `.toBytes('der')` */ | ||
| toDERHex(): string; | ||
| } | ||
| export type ECDSASigRecovered = ECDSASignature & { | ||
| readonly recovery: number; | ||
| }; | ||
| /** Methods of ECDSA signature constructor. */ | ||
| export type ECDSASignatureCons = { | ||
| new (r: bigint, s: bigint, recovery?: number): ECDSASignature; | ||
| fromBytes(bytes: Uint8Array, format?: ECDSASigFormat): ECDSASignature; | ||
| fromHex(hex: string, format?: ECDSASigFormat): ECDSASignature; | ||
| /** @deprecated use `.fromBytes(bytes, 'compact')` */ | ||
| fromCompact(hex: Hex): ECDSASignature; | ||
| /** @deprecated use `.fromBytes(bytes, 'der')` */ | ||
| fromDER(hex: Hex): ECDSASignature; | ||
| }; | ||
| /** | ||
| * Implementation of the Shallue and van de Woestijne method for any weierstrass curve. | ||
| * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular. | ||
| * b = True and y = sqrt(u / v) if (u / v) is square in F, and | ||
| * b = False and y = sqrt(Z * (u / v)) otherwise. | ||
| * @param Fp | ||
| * @param Z | ||
| * @returns | ||
| */ | ||
| export declare function SWUFpSqrtRatio<T>(Fp: IField<T>, Z: T): (u: T, v: T) => { | ||
| isValid: boolean; | ||
| value: T; | ||
| }; | ||
| /** | ||
| * Simplified Shallue-van de Woestijne-Ulas Method | ||
| * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2 | ||
| */ | ||
| export declare function mapToCurveSimpleSWU<T>(Fp: IField<T>, opts: { | ||
| A: T; | ||
| B: T; | ||
| Z: T; | ||
| }): (u: T) => { | ||
| x: T; | ||
| y: T; | ||
| }; | ||
| /** | ||
| * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling. | ||
| * This helper ensures no signature functionality is present. Less code, smaller bundle size. | ||
| */ | ||
| export declare function ecdh(Point: WeierstrassPointCons<bigint>, ecdhOpts?: { | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| }): ECDH; | ||
| /** | ||
| * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function. | ||
| * We need `hash` for 2 features: | ||
| * 1. Message prehash-ing. NOT used if `sign` / `verify` are called with `prehash: false` | ||
| * 2. k generation in `sign`, using HMAC-drbg(hash) | ||
| * | ||
| * ECDSAOpts are only rarely needed. | ||
| * | ||
| * @example | ||
| * ```js | ||
| * const p256_Point = weierstrass(...); | ||
| * const p256_sha256 = ecdsa(p256_Point, sha256); | ||
| * const p256_sha224 = ecdsa(p256_Point, sha224); | ||
| * const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } }); | ||
| * ``` | ||
| */ | ||
| export declare function ecdsa(Point: WeierstrassPointCons<bigint>, hash: CHash, ecdsaOpts?: ECDSAOpts): ECDSA; | ||
| /** @deprecated */ | ||
| export type SignatureType = ECDSASignature; | ||
| /** @deprecated */ | ||
| export type RecoveredSignatureType = ECDSASigRecovered; | ||
| /** @deprecated */ | ||
| export type SignatureLike = { | ||
| r: bigint; | ||
| s: bigint; | ||
| }; | ||
| /** @deprecated use `Uint8Array | boolean` */ | ||
| export type Entropy = Hex | boolean; | ||
| export type BasicWCurve<T> = BasicCurve<T> & { | ||
| a: T; | ||
| b: T; | ||
| allowedPrivateKeyLengths?: readonly number[]; | ||
| wrapPrivateKey?: boolean; | ||
| endo?: EndomorphismOpts; | ||
| isTorsionFree?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => boolean; | ||
| clearCofactor?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>) => WeierstrassPoint<T>; | ||
| }; | ||
| /** @deprecated use ECDSASignOpts */ | ||
| export type SignOpts = ECDSASignOpts; | ||
| /** @deprecated use ECDSASignOpts */ | ||
| export type VerOpts = ECDSAVerifyOpts; | ||
| /** @deprecated use WeierstrassPoint */ | ||
| export type ProjPointType<T> = WeierstrassPoint<T>; | ||
| /** @deprecated use WeierstrassPointCons */ | ||
| export type ProjConstructor<T> = WeierstrassPointCons<T>; | ||
| export type CurvePointsType<T> = BasicWCurve<T> & { | ||
| fromBytes?: (bytes: Uint8Array) => AffinePoint<T>; | ||
| toBytes?: (c: WeierstrassPointCons<T>, point: WeierstrassPoint<T>, isCompressed: boolean) => Uint8Array; | ||
| }; | ||
| export type CurvePointsTypeWithLength<T> = Readonly<CurvePointsType<T> & Partial<NLength>>; | ||
| export type CurvePointsRes<T> = { | ||
| Point: WeierstrassPointCons<T>; | ||
| /** @deprecated use `Point.CURVE()` */ | ||
| CURVE: CurvePointsType<T>; | ||
| /** @deprecated use `Point` */ | ||
| ProjectivePoint: WeierstrassPointCons<T>; | ||
| /** @deprecated use `Point.Fn.fromBytes(privateKey)` */ | ||
| normPrivateKeyToScalar: (key: PrivKey) => bigint; | ||
| /** @deprecated */ | ||
| weierstrassEquation: (x: T) => T; | ||
| /** @deprecated use `Point.Fn.isValidNot0(num)` */ | ||
| isWithinCurveOrder: (num: bigint) => boolean; | ||
| }; | ||
| /** @deprecated use `Uint8Array` */ | ||
| export type PubKey = Hex | WeierstrassPoint<bigint>; | ||
| export type CurveType = BasicWCurve<bigint> & { | ||
| hash: CHash; | ||
| hmac?: HmacFnSync; | ||
| randomBytes?: (bytesLength?: number) => Uint8Array; | ||
| lowS?: boolean; | ||
| bits2int?: (bytes: Uint8Array) => bigint; | ||
| bits2int_modN?: (bytes: Uint8Array) => bigint; | ||
| }; | ||
| export type CurveFn = { | ||
| /** @deprecated use `Point.CURVE()` */ | ||
| CURVE: CurvePointsType<bigint>; | ||
| keygen: ECDSA['keygen']; | ||
| getPublicKey: ECDSA['getPublicKey']; | ||
| getSharedSecret: ECDSA['getSharedSecret']; | ||
| sign: ECDSA['sign']; | ||
| verify: ECDSA['verify']; | ||
| Point: WeierstrassPointCons<bigint>; | ||
| /** @deprecated use `Point` */ | ||
| ProjectivePoint: WeierstrassPointCons<bigint>; | ||
| Signature: ECDSASignatureCons; | ||
| utils: ECDSA['utils']; | ||
| lengths: ECDSA['lengths']; | ||
| }; | ||
| /** @deprecated use `weierstrass` in newer releases */ | ||
| export declare function weierstrassPoints<T>(c: CurvePointsTypeWithLength<T>): CurvePointsRes<T>; | ||
| export type WsPointComposed<T> = { | ||
| CURVE: WeierstrassOpts<T>; | ||
| curveOpts: WeierstrassExtraOpts<T>; | ||
| }; | ||
| export type WsComposed = { | ||
| /** @deprecated use `Point.CURVE()` */ | ||
| CURVE: WeierstrassOpts<bigint>; | ||
| hash: CHash; | ||
| curveOpts: WeierstrassExtraOpts<bigint>; | ||
| ecdsaOpts: ECDSAOpts; | ||
| }; | ||
| export declare function _legacyHelperEquat<T>(Fp: IField<T>, a: T, b: T): (x: T) => T; | ||
| export declare function weierstrass(c: CurveType): CurveFn; | ||
| //# sourceMappingURL=weierstrass.d.ts.map |
| {"version":3,"file":"weierstrass.d.ts","sourceRoot":"","sources":["../../src/abstract/weierstrass.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Short Weierstrass curve methods. The formula is: y² = x³ + ax + b. | ||
| * | ||
| * ### Design rationale for types | ||
| * | ||
| * * Interaction between classes from different curves should fail: | ||
| * `k256.Point.BASE.add(p256.Point.BASE)` | ||
| * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime | ||
| * * Different calls of `curve()` would return different classes - | ||
| * `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve, | ||
| * it won't affect others | ||
| * | ||
| * TypeScript can't infer types for classes created inside a function. Classes is one instance | ||
| * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create | ||
| * unique type for every function call. | ||
| * | ||
| * We can use generic types via some param, like curve opts, but that would: | ||
| * 1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params) | ||
| * which is hard to debug. | ||
| * 2. Params can be generic and we can't enforce them to be constant value: | ||
| * if somebody creates curve from non-constant params, | ||
| * it would be allowed to interact with other curves with non-constant params | ||
| * | ||
| * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { hmac as nobleHmac } from '@noble/hashes/hmac.js'; | ||
| import { ahash } from '@noble/hashes/utils'; | ||
| import { _validateObject, _abool2 as abool, _abytes2 as abytes, aInRange, bitLen, bitMask, bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes, inRange, isBytes, memoized, numberToHexUnpadded, randomBytes as randomBytesWeb, } from "../utils.js"; | ||
| import { _createCurveFields, mulEndoUnsafe, negateCt, normalizeZ, pippenger, wNAF, } from "./curve.js"; | ||
| import { Field, FpInvertBatch, getMinHashLength, mapHashToField, nLength, validateField, } from "./modular.js"; | ||
| // We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value) | ||
| const divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n) / den; | ||
| /** | ||
| * Splits scalar for GLV endomorphism. | ||
| */ | ||
| export function _splitEndoScalar(k, basis, n) { | ||
| // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)` | ||
| // Since part can be negative, we need to do this on point. | ||
| // TODO: verifyScalar function which consumes lambda | ||
| const [[a1, b1], [a2, b2]] = basis; | ||
| const c1 = divNearest(b2 * k, n); | ||
| const c2 = divNearest(-b1 * k, n); | ||
| // |k1|/|k2| is < sqrt(N), but can be negative. | ||
| // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead. | ||
| let k1 = k - c1 * a1 - c2 * a2; | ||
| let k2 = -c1 * b1 - c2 * b2; | ||
| const k1neg = k1 < _0n; | ||
| const k2neg = k2 < _0n; | ||
| if (k1neg) | ||
| k1 = -k1; | ||
| if (k2neg) | ||
| k2 = -k2; | ||
| // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail. | ||
| // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it. | ||
| const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N | ||
| if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) { | ||
| throw new Error('splitScalar (endomorphism): failed, k=' + k); | ||
| } | ||
| return { k1neg, k1, k2neg, k2 }; | ||
| } | ||
| function validateSigFormat(format) { | ||
| if (!['compact', 'recovered', 'der'].includes(format)) | ||
| throw new Error('Signature format must be "compact", "recovered", or "der"'); | ||
| return format; | ||
| } | ||
| function validateSigOpts(opts, def) { | ||
| const optsn = {}; | ||
| for (let optName of Object.keys(def)) { | ||
| // @ts-ignore | ||
| optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName]; | ||
| } | ||
| abool(optsn.lowS, 'lowS'); | ||
| abool(optsn.prehash, 'prehash'); | ||
| if (optsn.format !== undefined) | ||
| validateSigFormat(optsn.format); | ||
| return optsn; | ||
| } | ||
| export class DERErr extends Error { | ||
| constructor(m = '') { | ||
| super(m); | ||
| } | ||
| } | ||
| /** | ||
| * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format: | ||
| * | ||
| * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S] | ||
| * | ||
| * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html | ||
| */ | ||
| export const DER = { | ||
| // asn.1 DER encoding utils | ||
| Err: DERErr, | ||
| // Basic building block is TLV (Tag-Length-Value) | ||
| _tlv: { | ||
| encode: (tag, data) => { | ||
| const { Err: E } = DER; | ||
| if (tag < 0 || tag > 256) | ||
| throw new E('tlv.encode: wrong tag'); | ||
| if (data.length & 1) | ||
| throw new E('tlv.encode: unpadded data'); | ||
| const dataLen = data.length / 2; | ||
| const len = numberToHexUnpadded(dataLen); | ||
| if ((len.length / 2) & 128) | ||
| throw new E('tlv.encode: long form length too big'); | ||
| // length of length with long form flag | ||
| const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 128) : ''; | ||
| const t = numberToHexUnpadded(tag); | ||
| return t + lenLen + len + data; | ||
| }, | ||
| // v - value, l - left bytes (unparsed) | ||
| decode(tag, data) { | ||
| const { Err: E } = DER; | ||
| let pos = 0; | ||
| if (tag < 0 || tag > 256) | ||
| throw new E('tlv.encode: wrong tag'); | ||
| if (data.length < 2 || data[pos++] !== tag) | ||
| throw new E('tlv.decode: wrong tlv'); | ||
| const first = data[pos++]; | ||
| const isLong = !!(first & 128); // First bit of first length byte is flag for short/long form | ||
| let length = 0; | ||
| if (!isLong) | ||
| length = first; | ||
| else { | ||
| // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)] | ||
| const lenLen = first & 127; | ||
| if (!lenLen) | ||
| throw new E('tlv.decode(long): indefinite length not supported'); | ||
| if (lenLen > 4) | ||
| throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js | ||
| const lengthBytes = data.subarray(pos, pos + lenLen); | ||
| if (lengthBytes.length !== lenLen) | ||
| throw new E('tlv.decode: length bytes not complete'); | ||
| if (lengthBytes[0] === 0) | ||
| throw new E('tlv.decode(long): zero leftmost byte'); | ||
| for (const b of lengthBytes) | ||
| length = (length << 8) | b; | ||
| pos += lenLen; | ||
| if (length < 128) | ||
| throw new E('tlv.decode(long): not minimal encoding'); | ||
| } | ||
| const v = data.subarray(pos, pos + length); | ||
| if (v.length !== length) | ||
| throw new E('tlv.decode: wrong value length'); | ||
| return { v, l: data.subarray(pos + length) }; | ||
| }, | ||
| }, | ||
| // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag, | ||
| // since we always use positive integers here. It must always be empty: | ||
| // - add zero byte if exists | ||
| // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding) | ||
| _int: { | ||
| encode(num) { | ||
| const { Err: E } = DER; | ||
| if (num < _0n) | ||
| throw new E('integer: negative integers are not allowed'); | ||
| let hex = numberToHexUnpadded(num); | ||
| // Pad with zero byte if negative flag is present | ||
| if (Number.parseInt(hex[0], 16) & 0b1000) | ||
| hex = '00' + hex; | ||
| if (hex.length & 1) | ||
| throw new E('unexpected DER parsing assertion: unpadded hex'); | ||
| return hex; | ||
| }, | ||
| decode(data) { | ||
| const { Err: E } = DER; | ||
| if (data[0] & 128) | ||
| throw new E('invalid signature integer: negative'); | ||
| if (data[0] === 0x00 && !(data[1] & 128)) | ||
| throw new E('invalid signature integer: unnecessary leading zero'); | ||
| return bytesToNumberBE(data); | ||
| }, | ||
| }, | ||
| toSig(hex) { | ||
| // parse DER signature | ||
| const { Err: E, _int: int, _tlv: tlv } = DER; | ||
| const data = ensureBytes('signature', hex); | ||
| const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data); | ||
| if (seqLeftBytes.length) | ||
| throw new E('invalid signature: left bytes after parsing'); | ||
| const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes); | ||
| const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes); | ||
| if (sLeftBytes.length) | ||
| throw new E('invalid signature: left bytes after parsing'); | ||
| return { r: int.decode(rBytes), s: int.decode(sBytes) }; | ||
| }, | ||
| hexFromSig(sig) { | ||
| const { _tlv: tlv, _int: int } = DER; | ||
| const rs = tlv.encode(0x02, int.encode(sig.r)); | ||
| const ss = tlv.encode(0x02, int.encode(sig.s)); | ||
| const seq = rs + ss; | ||
| return tlv.encode(0x30, seq); | ||
| }, | ||
| }; | ||
| // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4); | ||
| export function _normFnElement(Fn, key) { | ||
| const { BYTES: expected } = Fn; | ||
| let num; | ||
| if (typeof key === 'bigint') { | ||
| num = key; | ||
| } | ||
| else { | ||
| let bytes = ensureBytes('private key', key); | ||
| try { | ||
| num = Fn.fromBytes(bytes); | ||
| } | ||
| catch (error) { | ||
| throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`); | ||
| } | ||
| } | ||
| if (!Fn.isValidNot0(num)) | ||
| throw new Error('invalid private key: out of range [1..N-1]'); | ||
| return num; | ||
| } | ||
| /** | ||
| * Creates weierstrass Point constructor, based on specified curve options. | ||
| * | ||
| * @example | ||
| ```js | ||
| const opts = { | ||
| p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'), | ||
| n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'), | ||
| h: BigInt(1), | ||
| a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'), | ||
| b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'), | ||
| Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'), | ||
| Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'), | ||
| }; | ||
| const p256_Point = weierstrass(opts); | ||
| ``` | ||
| */ | ||
| export function weierstrassN(params, extraOpts = {}) { | ||
| const validated = _createCurveFields('weierstrass', params, extraOpts); | ||
| const { Fp, Fn } = validated; | ||
| let CURVE = validated.CURVE; | ||
| const { h: cofactor, n: CURVE_ORDER } = CURVE; | ||
| _validateObject(extraOpts, {}, { | ||
| allowInfinityPoint: 'boolean', | ||
| clearCofactor: 'function', | ||
| isTorsionFree: 'function', | ||
| fromBytes: 'function', | ||
| toBytes: 'function', | ||
| endo: 'object', | ||
| wrapPrivateKey: 'boolean', | ||
| }); | ||
| const { endo } = extraOpts; | ||
| if (endo) { | ||
| // validateObject(endo, { beta: 'bigint', splitScalar: 'function' }); | ||
| if (!Fp.is0(CURVE.a) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) { | ||
| throw new Error('invalid endo: expected "beta": bigint and "basises": array'); | ||
| } | ||
| } | ||
| const lengths = getWLengths(Fp, Fn); | ||
| function assertCompressionIsSupported() { | ||
| if (!Fp.isOdd) | ||
| throw new Error('compression is not supported: Field does not have .isOdd()'); | ||
| } | ||
| // Implements IEEE P1363 point encoding | ||
| function pointToBytes(_c, point, isCompressed) { | ||
| const { x, y } = point.toAffine(); | ||
| const bx = Fp.toBytes(x); | ||
| abool(isCompressed, 'isCompressed'); | ||
| if (isCompressed) { | ||
| assertCompressionIsSupported(); | ||
| const hasEvenY = !Fp.isOdd(y); | ||
| return concatBytes(pprefix(hasEvenY), bx); | ||
| } | ||
| else { | ||
| return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y)); | ||
| } | ||
| } | ||
| function pointFromBytes(bytes) { | ||
| abytes(bytes, undefined, 'Point'); | ||
| const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65 | ||
| const length = bytes.length; | ||
| const head = bytes[0]; | ||
| const tail = bytes.subarray(1); | ||
| // No actual validation is done here: use .assertValidity() | ||
| if (length === comp && (head === 0x02 || head === 0x03)) { | ||
| const x = Fp.fromBytes(tail); | ||
| if (!Fp.isValid(x)) | ||
| throw new Error('bad point: is not on curve, wrong x'); | ||
| const y2 = weierstrassEquation(x); // y² = x³ + ax + b | ||
| let y; | ||
| try { | ||
| y = Fp.sqrt(y2); // y = y² ^ (p+1)/4 | ||
| } | ||
| catch (sqrtError) { | ||
| const err = sqrtError instanceof Error ? ': ' + sqrtError.message : ''; | ||
| throw new Error('bad point: is not on curve, sqrt error' + err); | ||
| } | ||
| assertCompressionIsSupported(); | ||
| const isYOdd = Fp.isOdd(y); // (y & _1n) === _1n; | ||
| const isHeadOdd = (head & 1) === 1; // ECDSA-specific | ||
| if (isHeadOdd !== isYOdd) | ||
| y = Fp.neg(y); | ||
| return { x, y }; | ||
| } | ||
| else if (length === uncomp && head === 0x04) { | ||
| // TODO: more checks | ||
| const L = Fp.BYTES; | ||
| const x = Fp.fromBytes(tail.subarray(0, L)); | ||
| const y = Fp.fromBytes(tail.subarray(L, L * 2)); | ||
| if (!isValidXY(x, y)) | ||
| throw new Error('bad point: is not on curve'); | ||
| return { x, y }; | ||
| } | ||
| else { | ||
| throw new Error(`bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`); | ||
| } | ||
| } | ||
| const encodePoint = extraOpts.toBytes || pointToBytes; | ||
| const decodePoint = extraOpts.fromBytes || pointFromBytes; | ||
| function weierstrassEquation(x) { | ||
| const x2 = Fp.sqr(x); // x * x | ||
| const x3 = Fp.mul(x2, x); // x² * x | ||
| return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b); // x³ + a * x + b | ||
| } | ||
| // TODO: move top-level | ||
| /** Checks whether equation holds for given x, y: y² == x³ + ax + b */ | ||
| function isValidXY(x, y) { | ||
| const left = Fp.sqr(y); // y² | ||
| const right = weierstrassEquation(x); // x³ + ax + b | ||
| return Fp.eql(left, right); | ||
| } | ||
| // Validate whether the passed curve params are valid. | ||
| // Test 1: equation y² = x³ + ax + b should work for generator point. | ||
| if (!isValidXY(CURVE.Gx, CURVE.Gy)) | ||
| throw new Error('bad curve params: generator point'); | ||
| // Test 2: discriminant Δ part should be non-zero: 4a³ + 27b² != 0. | ||
| // Guarantees curve is genus-1, smooth (non-singular). | ||
| const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n); | ||
| const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27)); | ||
| if (Fp.is0(Fp.add(_4a3, _27b2))) | ||
| throw new Error('bad curve params: a or b'); | ||
| /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */ | ||
| function acoord(title, n, banZero = false) { | ||
| if (!Fp.isValid(n) || (banZero && Fp.is0(n))) | ||
| throw new Error(`bad point coordinate ${title}`); | ||
| return n; | ||
| } | ||
| function aprjpoint(other) { | ||
| if (!(other instanceof Point)) | ||
| throw new Error('ProjectivePoint expected'); | ||
| } | ||
| function splitEndoScalarN(k) { | ||
| if (!endo || !endo.basises) | ||
| throw new Error('no endo'); | ||
| return _splitEndoScalar(k, endo.basises, Fn.ORDER); | ||
| } | ||
| // Memoized toAffine / validity check. They are heavy. Points are immutable. | ||
| // Converts Projective point to affine (x, y) coordinates. | ||
| // Can accept precomputed Z^-1 - for example, from invertBatch. | ||
| // (X, Y, Z) ∋ (x=X/Z, y=Y/Z) | ||
| const toAffineMemo = memoized((p, iz) => { | ||
| const { X, Y, Z } = p; | ||
| // Fast-path for normalized points | ||
| if (Fp.eql(Z, Fp.ONE)) | ||
| return { x: X, y: Y }; | ||
| const is0 = p.is0(); | ||
| // If invZ was 0, we return zero point. However we still want to execute | ||
| // all operations, so we replace invZ with a random number, 1. | ||
| if (iz == null) | ||
| iz = is0 ? Fp.ONE : Fp.inv(Z); | ||
| const x = Fp.mul(X, iz); | ||
| const y = Fp.mul(Y, iz); | ||
| const zz = Fp.mul(Z, iz); | ||
| if (is0) | ||
| return { x: Fp.ZERO, y: Fp.ZERO }; | ||
| if (!Fp.eql(zz, Fp.ONE)) | ||
| throw new Error('invZ was invalid'); | ||
| return { x, y }; | ||
| }); | ||
| // NOTE: on exception this will crash 'cached' and no value will be set. | ||
| // Otherwise true will be return | ||
| const assertValidMemo = memoized((p) => { | ||
| if (p.is0()) { | ||
| // (0, 1, 0) aka ZERO is invalid in most contexts. | ||
| // In BLS, ZERO can be serialized, so we allow it. | ||
| // (0, 0, 0) is invalid representation of ZERO. | ||
| if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y)) | ||
| return; | ||
| throw new Error('bad point: ZERO'); | ||
| } | ||
| // Some 3rd-party test vectors require different wording between here & `fromCompressedHex` | ||
| const { x, y } = p.toAffine(); | ||
| if (!Fp.isValid(x) || !Fp.isValid(y)) | ||
| throw new Error('bad point: x or y not field elements'); | ||
| if (!isValidXY(x, y)) | ||
| throw new Error('bad point: equation left != right'); | ||
| if (!p.isTorsionFree()) | ||
| throw new Error('bad point: not in prime-order subgroup'); | ||
| return true; | ||
| }); | ||
| function finishEndo(endoBeta, k1p, k2p, k1neg, k2neg) { | ||
| k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z); | ||
| k1p = negateCt(k1neg, k1p); | ||
| k2p = negateCt(k2neg, k2p); | ||
| return k1p.add(k2p); | ||
| } | ||
| /** | ||
| * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) ∋ (x=X/Z, y=Y/Z). | ||
| * Default Point works in 2d / affine coordinates: (x, y). | ||
| * We're doing calculations in projective, because its operations don't require costly inversion. | ||
| */ | ||
| class Point { | ||
| /** Does NOT validate if the point is valid. Use `.assertValidity()`. */ | ||
| constructor(X, Y, Z) { | ||
| this.X = acoord('x', X); | ||
| this.Y = acoord('y', Y, true); | ||
| this.Z = acoord('z', Z); | ||
| Object.freeze(this); | ||
| } | ||
| static CURVE() { | ||
| return CURVE; | ||
| } | ||
| /** Does NOT validate if the point is valid. Use `.assertValidity()`. */ | ||
| static fromAffine(p) { | ||
| const { x, y } = p || {}; | ||
| if (!p || !Fp.isValid(x) || !Fp.isValid(y)) | ||
| throw new Error('invalid affine point'); | ||
| if (p instanceof Point) | ||
| throw new Error('projective point not allowed'); | ||
| // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0) | ||
| if (Fp.is0(x) && Fp.is0(y)) | ||
| return Point.ZERO; | ||
| return new Point(x, y, Fp.ONE); | ||
| } | ||
| static fromBytes(bytes) { | ||
| const P = Point.fromAffine(decodePoint(abytes(bytes, undefined, 'point'))); | ||
| P.assertValidity(); | ||
| return P; | ||
| } | ||
| static fromHex(hex) { | ||
| return Point.fromBytes(ensureBytes('pointHex', hex)); | ||
| } | ||
| get x() { | ||
| return this.toAffine().x; | ||
| } | ||
| get y() { | ||
| return this.toAffine().y; | ||
| } | ||
| /** | ||
| * | ||
| * @param windowSize | ||
| * @param isLazy true will defer table computation until the first multiplication | ||
| * @returns | ||
| */ | ||
| precompute(windowSize = 8, isLazy = true) { | ||
| wnaf.createCache(this, windowSize); | ||
| if (!isLazy) | ||
| this.multiply(_3n); // random number | ||
| return this; | ||
| } | ||
| // TODO: return `this` | ||
| /** A point on curve is valid if it conforms to equation. */ | ||
| assertValidity() { | ||
| assertValidMemo(this); | ||
| } | ||
| hasEvenY() { | ||
| const { y } = this.toAffine(); | ||
| if (!Fp.isOdd) | ||
| throw new Error("Field doesn't support isOdd"); | ||
| return !Fp.isOdd(y); | ||
| } | ||
| /** Compare one point to another. */ | ||
| equals(other) { | ||
| aprjpoint(other); | ||
| const { X: X1, Y: Y1, Z: Z1 } = this; | ||
| const { X: X2, Y: Y2, Z: Z2 } = other; | ||
| const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1)); | ||
| const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1)); | ||
| return U1 && U2; | ||
| } | ||
| /** Flips point to one corresponding to (x, -y) in Affine coordinates. */ | ||
| negate() { | ||
| return new Point(this.X, Fp.neg(this.Y), this.Z); | ||
| } | ||
| // Renes-Costello-Batina exception-free doubling formula. | ||
| // There is 30% faster Jacobian formula, but it is not complete. | ||
| // https://eprint.iacr.org/2015/1060, algorithm 3 | ||
| // Cost: 8M + 3S + 3*a + 2*b3 + 15add. | ||
| double() { | ||
| const { a, b } = CURVE; | ||
| const b3 = Fp.mul(b, _3n); | ||
| const { X: X1, Y: Y1, Z: Z1 } = this; | ||
| let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore | ||
| let t0 = Fp.mul(X1, X1); // step 1 | ||
| let t1 = Fp.mul(Y1, Y1); | ||
| let t2 = Fp.mul(Z1, Z1); | ||
| let t3 = Fp.mul(X1, Y1); | ||
| t3 = Fp.add(t3, t3); // step 5 | ||
| Z3 = Fp.mul(X1, Z1); | ||
| Z3 = Fp.add(Z3, Z3); | ||
| X3 = Fp.mul(a, Z3); | ||
| Y3 = Fp.mul(b3, t2); | ||
| Y3 = Fp.add(X3, Y3); // step 10 | ||
| X3 = Fp.sub(t1, Y3); | ||
| Y3 = Fp.add(t1, Y3); | ||
| Y3 = Fp.mul(X3, Y3); | ||
| X3 = Fp.mul(t3, X3); | ||
| Z3 = Fp.mul(b3, Z3); // step 15 | ||
| t2 = Fp.mul(a, t2); | ||
| t3 = Fp.sub(t0, t2); | ||
| t3 = Fp.mul(a, t3); | ||
| t3 = Fp.add(t3, Z3); | ||
| Z3 = Fp.add(t0, t0); // step 20 | ||
| t0 = Fp.add(Z3, t0); | ||
| t0 = Fp.add(t0, t2); | ||
| t0 = Fp.mul(t0, t3); | ||
| Y3 = Fp.add(Y3, t0); | ||
| t2 = Fp.mul(Y1, Z1); // step 25 | ||
| t2 = Fp.add(t2, t2); | ||
| t0 = Fp.mul(t2, t3); | ||
| X3 = Fp.sub(X3, t0); | ||
| Z3 = Fp.mul(t2, t1); | ||
| Z3 = Fp.add(Z3, Z3); // step 30 | ||
| Z3 = Fp.add(Z3, Z3); | ||
| return new Point(X3, Y3, Z3); | ||
| } | ||
| // Renes-Costello-Batina exception-free addition formula. | ||
| // There is 30% faster Jacobian formula, but it is not complete. | ||
| // https://eprint.iacr.org/2015/1060, algorithm 1 | ||
| // Cost: 12M + 0S + 3*a + 3*b3 + 23add. | ||
| add(other) { | ||
| aprjpoint(other); | ||
| const { X: X1, Y: Y1, Z: Z1 } = this; | ||
| const { X: X2, Y: Y2, Z: Z2 } = other; | ||
| let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore | ||
| const a = CURVE.a; | ||
| const b3 = Fp.mul(CURVE.b, _3n); | ||
| let t0 = Fp.mul(X1, X2); // step 1 | ||
| let t1 = Fp.mul(Y1, Y2); | ||
| let t2 = Fp.mul(Z1, Z2); | ||
| let t3 = Fp.add(X1, Y1); | ||
| let t4 = Fp.add(X2, Y2); // step 5 | ||
| t3 = Fp.mul(t3, t4); | ||
| t4 = Fp.add(t0, t1); | ||
| t3 = Fp.sub(t3, t4); | ||
| t4 = Fp.add(X1, Z1); | ||
| let t5 = Fp.add(X2, Z2); // step 10 | ||
| t4 = Fp.mul(t4, t5); | ||
| t5 = Fp.add(t0, t2); | ||
| t4 = Fp.sub(t4, t5); | ||
| t5 = Fp.add(Y1, Z1); | ||
| X3 = Fp.add(Y2, Z2); // step 15 | ||
| t5 = Fp.mul(t5, X3); | ||
| X3 = Fp.add(t1, t2); | ||
| t5 = Fp.sub(t5, X3); | ||
| Z3 = Fp.mul(a, t4); | ||
| X3 = Fp.mul(b3, t2); // step 20 | ||
| Z3 = Fp.add(X3, Z3); | ||
| X3 = Fp.sub(t1, Z3); | ||
| Z3 = Fp.add(t1, Z3); | ||
| Y3 = Fp.mul(X3, Z3); | ||
| t1 = Fp.add(t0, t0); // step 25 | ||
| t1 = Fp.add(t1, t0); | ||
| t2 = Fp.mul(a, t2); | ||
| t4 = Fp.mul(b3, t4); | ||
| t1 = Fp.add(t1, t2); | ||
| t2 = Fp.sub(t0, t2); // step 30 | ||
| t2 = Fp.mul(a, t2); | ||
| t4 = Fp.add(t4, t2); | ||
| t0 = Fp.mul(t1, t4); | ||
| Y3 = Fp.add(Y3, t0); | ||
| t0 = Fp.mul(t5, t4); // step 35 | ||
| X3 = Fp.mul(t3, X3); | ||
| X3 = Fp.sub(X3, t0); | ||
| t0 = Fp.mul(t3, t1); | ||
| Z3 = Fp.mul(t5, Z3); | ||
| Z3 = Fp.add(Z3, t0); // step 40 | ||
| return new Point(X3, Y3, Z3); | ||
| } | ||
| subtract(other) { | ||
| return this.add(other.negate()); | ||
| } | ||
| is0() { | ||
| return this.equals(Point.ZERO); | ||
| } | ||
| /** | ||
| * Constant time multiplication. | ||
| * Uses wNAF method. Windowed method may be 10% faster, | ||
| * but takes 2x longer to generate and consumes 2x memory. | ||
| * Uses precomputes when available. | ||
| * Uses endomorphism for Koblitz curves. | ||
| * @param scalar by which the point would be multiplied | ||
| * @returns New point | ||
| */ | ||
| multiply(scalar) { | ||
| const { endo } = extraOpts; | ||
| if (!Fn.isValidNot0(scalar)) | ||
| throw new Error('invalid scalar: out of range'); // 0 is invalid | ||
| let point, fake; // Fake point is used to const-time mult | ||
| const mul = (n) => wnaf.cached(this, n, (p) => normalizeZ(Point, p)); | ||
| /** See docs for {@link EndomorphismOpts} */ | ||
| if (endo) { | ||
| const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(scalar); | ||
| const { p: k1p, f: k1f } = mul(k1); | ||
| const { p: k2p, f: k2f } = mul(k2); | ||
| fake = k1f.add(k2f); | ||
| point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg); | ||
| } | ||
| else { | ||
| const { p, f } = mul(scalar); | ||
| point = p; | ||
| fake = f; | ||
| } | ||
| // Normalize `z` for both points, but return only real one | ||
| return normalizeZ(Point, [point, fake])[0]; | ||
| } | ||
| /** | ||
| * Non-constant-time multiplication. Uses double-and-add algorithm. | ||
| * It's faster, but should only be used when you don't care about | ||
| * an exposed secret key e.g. sig verification, which works over *public* keys. | ||
| */ | ||
| multiplyUnsafe(sc) { | ||
| const { endo } = extraOpts; | ||
| const p = this; | ||
| if (!Fn.isValid(sc)) | ||
| throw new Error('invalid scalar: out of range'); // 0 is valid | ||
| if (sc === _0n || p.is0()) | ||
| return Point.ZERO; | ||
| if (sc === _1n) | ||
| return p; // fast-path | ||
| if (wnaf.hasCache(this)) | ||
| return this.multiply(sc); | ||
| if (endo) { | ||
| const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc); | ||
| const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe | ||
| return finishEndo(endo.beta, p1, p2, k1neg, k2neg); | ||
| } | ||
| else { | ||
| return wnaf.unsafe(p, sc); | ||
| } | ||
| } | ||
| multiplyAndAddUnsafe(Q, a, b) { | ||
| const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b)); | ||
| return sum.is0() ? undefined : sum; | ||
| } | ||
| /** | ||
| * Converts Projective point to affine (x, y) coordinates. | ||
| * @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch | ||
| */ | ||
| toAffine(invertedZ) { | ||
| return toAffineMemo(this, invertedZ); | ||
| } | ||
| /** | ||
| * Checks whether Point is free of torsion elements (is in prime subgroup). | ||
| * Always torsion-free for cofactor=1 curves. | ||
| */ | ||
| isTorsionFree() { | ||
| const { isTorsionFree } = extraOpts; | ||
| if (cofactor === _1n) | ||
| return true; | ||
| if (isTorsionFree) | ||
| return isTorsionFree(Point, this); | ||
| return wnaf.unsafe(this, CURVE_ORDER).is0(); | ||
| } | ||
| clearCofactor() { | ||
| const { clearCofactor } = extraOpts; | ||
| if (cofactor === _1n) | ||
| return this; // Fast-path | ||
| if (clearCofactor) | ||
| return clearCofactor(Point, this); | ||
| return this.multiplyUnsafe(cofactor); | ||
| } | ||
| isSmallOrder() { | ||
| // can we use this.clearCofactor()? | ||
| return this.multiplyUnsafe(cofactor).is0(); | ||
| } | ||
| toBytes(isCompressed = true) { | ||
| abool(isCompressed, 'isCompressed'); | ||
| this.assertValidity(); | ||
| return encodePoint(Point, this, isCompressed); | ||
| } | ||
| toHex(isCompressed = true) { | ||
| return bytesToHex(this.toBytes(isCompressed)); | ||
| } | ||
| toString() { | ||
| return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`; | ||
| } | ||
| // TODO: remove | ||
| get px() { | ||
| return this.X; | ||
| } | ||
| get py() { | ||
| return this.X; | ||
| } | ||
| get pz() { | ||
| return this.Z; | ||
| } | ||
| toRawBytes(isCompressed = true) { | ||
| return this.toBytes(isCompressed); | ||
| } | ||
| _setWindowSize(windowSize) { | ||
| this.precompute(windowSize); | ||
| } | ||
| static normalizeZ(points) { | ||
| return normalizeZ(Point, points); | ||
| } | ||
| static msm(points, scalars) { | ||
| return pippenger(Point, Fn, points, scalars); | ||
| } | ||
| static fromPrivateKey(privateKey) { | ||
| return Point.BASE.multiply(_normFnElement(Fn, privateKey)); | ||
| } | ||
| } | ||
| // base / generator point | ||
| Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE); | ||
| // zero / infinity / identity point | ||
| Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0 | ||
| // math field | ||
| Point.Fp = Fp; | ||
| // scalar field | ||
| Point.Fn = Fn; | ||
| const bits = Fn.BITS; | ||
| const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits); | ||
| Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms. | ||
| return Point; | ||
| } | ||
| // Points start with byte 0x02 when y is even; otherwise 0x03 | ||
| function pprefix(hasEvenY) { | ||
| return Uint8Array.of(hasEvenY ? 0x02 : 0x03); | ||
| } | ||
| /** | ||
| * Implementation of the Shallue and van de Woestijne method for any weierstrass curve. | ||
| * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular. | ||
| * b = True and y = sqrt(u / v) if (u / v) is square in F, and | ||
| * b = False and y = sqrt(Z * (u / v)) otherwise. | ||
| * @param Fp | ||
| * @param Z | ||
| * @returns | ||
| */ | ||
| export function SWUFpSqrtRatio(Fp, Z) { | ||
| // Generic implementation | ||
| const q = Fp.ORDER; | ||
| let l = _0n; | ||
| for (let o = q - _1n; o % _2n === _0n; o /= _2n) | ||
| l += _1n; | ||
| const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1. | ||
| // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<. | ||
| // 2n ** c1 == 2n << (c1-1) | ||
| const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n); | ||
| const _2n_pow_c1 = _2n_pow_c1_1 * _2n; | ||
| const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic | ||
| const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic | ||
| const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic | ||
| const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic | ||
| const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2 | ||
| const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2) | ||
| let sqrtRatio = (u, v) => { | ||
| let tv1 = c6; // 1. tv1 = c6 | ||
| let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4 | ||
| let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2 | ||
| tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v | ||
| let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3 | ||
| tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3 | ||
| tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2 | ||
| tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v | ||
| tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u | ||
| let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2 | ||
| tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5 | ||
| let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1 | ||
| tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7 | ||
| tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1 | ||
| tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR) | ||
| tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR) | ||
| // 17. for i in (c1, c1 - 1, ..., 2): | ||
| for (let i = c1; i > _1n; i--) { | ||
| let tv5 = i - _2n; // 18. tv5 = i - 2 | ||
| tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5 | ||
| let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5 | ||
| const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1 | ||
| tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1 | ||
| tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1 | ||
| tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1 | ||
| tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1) | ||
| tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1) | ||
| } | ||
| return { isValid: isQR, value: tv3 }; | ||
| }; | ||
| if (Fp.ORDER % _4n === _3n) { | ||
| // sqrt_ratio_3mod4(u, v) | ||
| const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic | ||
| const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z) | ||
| sqrtRatio = (u, v) => { | ||
| let tv1 = Fp.sqr(v); // 1. tv1 = v^2 | ||
| const tv2 = Fp.mul(u, v); // 2. tv2 = u * v | ||
| tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2 | ||
| let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1 | ||
| y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2 | ||
| const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2 | ||
| const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v | ||
| const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u | ||
| let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR) | ||
| return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2 | ||
| }; | ||
| } | ||
| // No curves uses that | ||
| // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8 | ||
| return sqrtRatio; | ||
| } | ||
| /** | ||
| * Simplified Shallue-van de Woestijne-Ulas Method | ||
| * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2 | ||
| */ | ||
| export function mapToCurveSimpleSWU(Fp, opts) { | ||
| validateField(Fp); | ||
| const { A, B, Z } = opts; | ||
| if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z)) | ||
| throw new Error('mapToCurveSimpleSWU: invalid opts'); | ||
| const sqrtRatio = SWUFpSqrtRatio(Fp, Z); | ||
| if (!Fp.isOdd) | ||
| throw new Error('Field does not have .isOdd()'); | ||
| // Input: u, an element of F. | ||
| // Output: (x, y), a point on E. | ||
| return (u) => { | ||
| // prettier-ignore | ||
| let tv1, tv2, tv3, tv4, tv5, tv6, x, y; | ||
| tv1 = Fp.sqr(u); // 1. tv1 = u^2 | ||
| tv1 = Fp.mul(tv1, Z); // 2. tv1 = Z * tv1 | ||
| tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2 | ||
| tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1 | ||
| tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1 | ||
| tv3 = Fp.mul(tv3, B); // 6. tv3 = B * tv3 | ||
| tv4 = Fp.cmov(Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0) | ||
| tv4 = Fp.mul(tv4, A); // 8. tv4 = A * tv4 | ||
| tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2 | ||
| tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2 | ||
| tv5 = Fp.mul(tv6, A); // 11. tv5 = A * tv6 | ||
| tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5 | ||
| tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3 | ||
| tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4 | ||
| tv5 = Fp.mul(tv6, B); // 15. tv5 = B * tv6 | ||
| tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5 | ||
| x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3 | ||
| const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6) | ||
| y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1 | ||
| y = Fp.mul(y, value); // 20. y = y * y1 | ||
| x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square) | ||
| y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square) | ||
| const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23. e1 = sgn0(u) == sgn0(y) | ||
| y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1) | ||
| const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0]; | ||
| x = Fp.mul(x, tv4_inv); // 25. x = x / tv4 | ||
| return { x, y }; | ||
| }; | ||
| } | ||
| function getWLengths(Fp, Fn) { | ||
| return { | ||
| secretKey: Fn.BYTES, | ||
| publicKey: 1 + Fp.BYTES, | ||
| publicKeyUncompressed: 1 + 2 * Fp.BYTES, | ||
| publicKeyHasPrefix: true, | ||
| signature: 2 * Fn.BYTES, | ||
| }; | ||
| } | ||
| /** | ||
| * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling. | ||
| * This helper ensures no signature functionality is present. Less code, smaller bundle size. | ||
| */ | ||
| export function ecdh(Point, ecdhOpts = {}) { | ||
| const { Fn } = Point; | ||
| const randomBytes_ = ecdhOpts.randomBytes || randomBytesWeb; | ||
| const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) }); | ||
| function isValidSecretKey(secretKey) { | ||
| try { | ||
| return !!_normFnElement(Fn, secretKey); | ||
| } | ||
| catch (error) { | ||
| return false; | ||
| } | ||
| } | ||
| function isValidPublicKey(publicKey, isCompressed) { | ||
| const { publicKey: comp, publicKeyUncompressed } = lengths; | ||
| try { | ||
| const l = publicKey.length; | ||
| if (isCompressed === true && l !== comp) | ||
| return false; | ||
| if (isCompressed === false && l !== publicKeyUncompressed) | ||
| return false; | ||
| return !!Point.fromBytes(publicKey); | ||
| } | ||
| catch (error) { | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Produces cryptographically secure secret key from random of size | ||
| * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible. | ||
| */ | ||
| function randomSecretKey(seed = randomBytes_(lengths.seed)) { | ||
| return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER); | ||
| } | ||
| /** | ||
| * Computes public key for a secret key. Checks for validity of the secret key. | ||
| * @param isCompressed whether to return compact (default), or full key | ||
| * @returns Public key, full when isCompressed=false; short when isCompressed=true | ||
| */ | ||
| function getPublicKey(secretKey, isCompressed = true) { | ||
| return Point.BASE.multiply(_normFnElement(Fn, secretKey)).toBytes(isCompressed); | ||
| } | ||
| function keygen(seed) { | ||
| const secretKey = randomSecretKey(seed); | ||
| return { secretKey, publicKey: getPublicKey(secretKey) }; | ||
| } | ||
| /** | ||
| * Quick and dirty check for item being public key. Does not validate hex, or being on-curve. | ||
| */ | ||
| function isProbPub(item) { | ||
| if (typeof item === 'bigint') | ||
| return false; | ||
| if (item instanceof Point) | ||
| return true; | ||
| const { secretKey, publicKey, publicKeyUncompressed } = lengths; | ||
| if (Fn.allowedLengths || secretKey === publicKey) | ||
| return undefined; | ||
| const l = ensureBytes('key', item).length; | ||
| return l === publicKey || l === publicKeyUncompressed; | ||
| } | ||
| /** | ||
| * ECDH (Elliptic Curve Diffie Hellman). | ||
| * Computes shared public key from secret key A and public key B. | ||
| * Checks: 1) secret key validity 2) shared key is on-curve. | ||
| * Does NOT hash the result. | ||
| * @param isCompressed whether to return compact (default), or full key | ||
| * @returns shared public key | ||
| */ | ||
| function getSharedSecret(secretKeyA, publicKeyB, isCompressed = true) { | ||
| if (isProbPub(secretKeyA) === true) | ||
| throw new Error('first arg must be private key'); | ||
| if (isProbPub(publicKeyB) === false) | ||
| throw new Error('second arg must be public key'); | ||
| const s = _normFnElement(Fn, secretKeyA); | ||
| const b = Point.fromHex(publicKeyB); // checks for being on-curve | ||
| return b.multiply(s).toBytes(isCompressed); | ||
| } | ||
| const utils = { | ||
| isValidSecretKey, | ||
| isValidPublicKey, | ||
| randomSecretKey, | ||
| // TODO: remove | ||
| isValidPrivateKey: isValidSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| normPrivateKeyToScalar: (key) => _normFnElement(Fn, key), | ||
| precompute(windowSize = 8, point = Point.BASE) { | ||
| return point.precompute(windowSize, false); | ||
| }, | ||
| }; | ||
| return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths }); | ||
| } | ||
| /** | ||
| * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function. | ||
| * We need `hash` for 2 features: | ||
| * 1. Message prehash-ing. NOT used if `sign` / `verify` are called with `prehash: false` | ||
| * 2. k generation in `sign`, using HMAC-drbg(hash) | ||
| * | ||
| * ECDSAOpts are only rarely needed. | ||
| * | ||
| * @example | ||
| * ```js | ||
| * const p256_Point = weierstrass(...); | ||
| * const p256_sha256 = ecdsa(p256_Point, sha256); | ||
| * const p256_sha224 = ecdsa(p256_Point, sha224); | ||
| * const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } }); | ||
| * ``` | ||
| */ | ||
| export function ecdsa(Point, hash, ecdsaOpts = {}) { | ||
| ahash(hash); | ||
| _validateObject(ecdsaOpts, {}, { | ||
| hmac: 'function', | ||
| lowS: 'boolean', | ||
| randomBytes: 'function', | ||
| bits2int: 'function', | ||
| bits2int_modN: 'function', | ||
| }); | ||
| const randomBytes = ecdsaOpts.randomBytes || randomBytesWeb; | ||
| const hmac = ecdsaOpts.hmac || | ||
| ((key, ...msgs) => nobleHmac(hash, key, concatBytes(...msgs))); | ||
| const { Fp, Fn } = Point; | ||
| const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn; | ||
| const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts); | ||
| const defaultSigOpts = { | ||
| prehash: false, | ||
| lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : false, | ||
| format: undefined, //'compact' as ECDSASigFormat, | ||
| extraEntropy: false, | ||
| }; | ||
| const defaultSigOpts_format = 'compact'; | ||
| function isBiggerThanHalfOrder(number) { | ||
| const HALF = CURVE_ORDER >> _1n; | ||
| return number > HALF; | ||
| } | ||
| function validateRS(title, num) { | ||
| if (!Fn.isValidNot0(num)) | ||
| throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`); | ||
| return num; | ||
| } | ||
| function validateSigLength(bytes, format) { | ||
| validateSigFormat(format); | ||
| const size = lengths.signature; | ||
| const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined; | ||
| return abytes(bytes, sizer, `${format} signature`); | ||
| } | ||
| /** | ||
| * ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations. | ||
| */ | ||
| class Signature { | ||
| constructor(r, s, recovery) { | ||
| this.r = validateRS('r', r); // r in [1..N-1]; | ||
| this.s = validateRS('s', s); // s in [1..N-1]; | ||
| if (recovery != null) | ||
| this.recovery = recovery; | ||
| Object.freeze(this); | ||
| } | ||
| static fromBytes(bytes, format = defaultSigOpts_format) { | ||
| validateSigLength(bytes, format); | ||
| let recid; | ||
| if (format === 'der') { | ||
| const { r, s } = DER.toSig(abytes(bytes)); | ||
| return new Signature(r, s); | ||
| } | ||
| if (format === 'recovered') { | ||
| recid = bytes[0]; | ||
| format = 'compact'; | ||
| bytes = bytes.subarray(1); | ||
| } | ||
| const L = Fn.BYTES; | ||
| const r = bytes.subarray(0, L); | ||
| const s = bytes.subarray(L, L * 2); | ||
| return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid); | ||
| } | ||
| static fromHex(hex, format) { | ||
| return this.fromBytes(hexToBytes(hex), format); | ||
| } | ||
| addRecoveryBit(recovery) { | ||
| return new Signature(this.r, this.s, recovery); | ||
| } | ||
| recoverPublicKey(messageHash) { | ||
| const FIELD_ORDER = Fp.ORDER; | ||
| const { r, s, recovery: rec } = this; | ||
| if (rec == null || ![0, 1, 2, 3].includes(rec)) | ||
| throw new Error('recovery id invalid'); | ||
| // ECDSA recovery is hard for cofactor > 1 curves. | ||
| // In sign, `r = q.x mod n`, and here we recover q.x from r. | ||
| // While recovering q.x >= n, we need to add r+n for cofactor=1 curves. | ||
| // However, for cofactor>1, r+n may not get q.x: | ||
| // r+n*i would need to be done instead where i is unknown. | ||
| // To easily get i, we either need to: | ||
| // a. increase amount of valid recid values (4, 5...); OR | ||
| // b. prohibit non-prime-order signatures (recid > 1). | ||
| const hasCofactor = CURVE_ORDER * _2n < FIELD_ORDER; | ||
| if (hasCofactor && rec > 1) | ||
| throw new Error('recovery id is ambiguous for h>1 curve'); | ||
| const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r; | ||
| if (!Fp.isValid(radj)) | ||
| throw new Error('recovery id 2 or 3 invalid'); | ||
| const x = Fp.toBytes(radj); | ||
| const R = Point.fromBytes(concatBytes(pprefix((rec & 1) === 0), x)); | ||
| const ir = Fn.inv(radj); // r^-1 | ||
| const h = bits2int_modN(ensureBytes('msgHash', messageHash)); // Truncate hash | ||
| const u1 = Fn.create(-h * ir); // -hr^-1 | ||
| const u2 = Fn.create(s * ir); // sr^-1 | ||
| // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data. | ||
| const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2)); | ||
| if (Q.is0()) | ||
| throw new Error('point at infinify'); | ||
| Q.assertValidity(); | ||
| return Q; | ||
| } | ||
| // Signatures should be low-s, to prevent malleability. | ||
| hasHighS() { | ||
| return isBiggerThanHalfOrder(this.s); | ||
| } | ||
| toBytes(format = defaultSigOpts_format) { | ||
| validateSigFormat(format); | ||
| if (format === 'der') | ||
| return hexToBytes(DER.hexFromSig(this)); | ||
| const r = Fn.toBytes(this.r); | ||
| const s = Fn.toBytes(this.s); | ||
| if (format === 'recovered') { | ||
| if (this.recovery == null) | ||
| throw new Error('recovery bit must be present'); | ||
| return concatBytes(Uint8Array.of(this.recovery), r, s); | ||
| } | ||
| return concatBytes(r, s); | ||
| } | ||
| toHex(format) { | ||
| return bytesToHex(this.toBytes(format)); | ||
| } | ||
| // TODO: remove | ||
| assertValidity() { } | ||
| static fromCompact(hex) { | ||
| return Signature.fromBytes(ensureBytes('sig', hex), 'compact'); | ||
| } | ||
| static fromDER(hex) { | ||
| return Signature.fromBytes(ensureBytes('sig', hex), 'der'); | ||
| } | ||
| normalizeS() { | ||
| return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this; | ||
| } | ||
| toDERRawBytes() { | ||
| return this.toBytes('der'); | ||
| } | ||
| toDERHex() { | ||
| return bytesToHex(this.toBytes('der')); | ||
| } | ||
| toCompactRawBytes() { | ||
| return this.toBytes('compact'); | ||
| } | ||
| toCompactHex() { | ||
| return bytesToHex(this.toBytes('compact')); | ||
| } | ||
| } | ||
| // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets. | ||
| // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int. | ||
| // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same. | ||
| // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors | ||
| const bits2int = ecdsaOpts.bits2int || | ||
| function bits2int_def(bytes) { | ||
| // Our custom check "just in case", for protection against DoS | ||
| if (bytes.length > 8192) | ||
| throw new Error('input is too large'); | ||
| // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m) | ||
| // for some cases, since bytes.length * 8 is not actual bitLength. | ||
| const num = bytesToNumberBE(bytes); // check for == u8 done here | ||
| const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits | ||
| return delta > 0 ? num >> BigInt(delta) : num; | ||
| }; | ||
| const bits2int_modN = ecdsaOpts.bits2int_modN || | ||
| function bits2int_modN_def(bytes) { | ||
| return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here | ||
| }; | ||
| // Pads output with zero as per spec | ||
| const ORDER_MASK = bitMask(fnBits); | ||
| /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */ | ||
| function int2octets(num) { | ||
| // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8` | ||
| aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK); | ||
| return Fn.toBytes(num); | ||
| } | ||
| function validateMsgAndHash(message, prehash) { | ||
| abytes(message, undefined, 'message'); | ||
| return prehash ? abytes(hash(message), undefined, 'prehashed message') : message; | ||
| } | ||
| /** | ||
| * Steps A, D of RFC6979 3.2. | ||
| * Creates RFC6979 seed; converts msg/privKey to numbers. | ||
| * Used only in sign, not in verify. | ||
| * | ||
| * Warning: we cannot assume here that message has same amount of bytes as curve order, | ||
| * this will be invalid at least for P521. Also it can be bigger for P224 + SHA256. | ||
| */ | ||
| function prepSig(message, privateKey, opts) { | ||
| if (['recovered', 'canonical'].some((k) => k in opts)) | ||
| throw new Error('sign() legacy options not supported'); | ||
| const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts); | ||
| message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m) | ||
| // We can't later call bits2octets, since nested bits2int is broken for curves | ||
| // with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call. | ||
| // const bits2octets = (bits) => int2octets(bits2int_modN(bits)) | ||
| const h1int = bits2int_modN(message); | ||
| const d = _normFnElement(Fn, privateKey); // validate secret key, convert to bigint | ||
| const seedArgs = [int2octets(d), int2octets(h1int)]; | ||
| // extraEntropy. RFC6979 3.6: additional k' (optional). | ||
| if (extraEntropy != null && extraEntropy !== false) { | ||
| // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k') | ||
| // gen random bytes OR pass as-is | ||
| const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy; | ||
| seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes | ||
| } | ||
| const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2 | ||
| const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash! | ||
| // Converts signature params into point w r/s, checks result for validity. | ||
| // To transform k => Signature: | ||
| // q = k⋅G | ||
| // r = q.x mod n | ||
| // s = k^-1(m + rd) mod n | ||
| // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to | ||
| // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it: | ||
| // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT | ||
| function k2sig(kBytes) { | ||
| // RFC 6979 Section 3.2, step 3: k = bits2int(T) | ||
| // Important: all mod() calls here must be done over N | ||
| const k = bits2int(kBytes); // mod n, not mod p | ||
| if (!Fn.isValidNot0(k)) | ||
| return; // Valid scalars (including k) must be in 1..N-1 | ||
| const ik = Fn.inv(k); // k^-1 mod n | ||
| const q = Point.BASE.multiply(k).toAffine(); // q = k⋅G | ||
| const r = Fn.create(q.x); // r = q.x mod n | ||
| if (r === _0n) | ||
| return; | ||
| const s = Fn.create(ik * Fn.create(m + r * d)); // Not using blinding here, see comment above | ||
| if (s === _0n) | ||
| return; | ||
| let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n) | ||
| let normS = s; | ||
| if (lowS && isBiggerThanHalfOrder(s)) { | ||
| normS = Fn.neg(s); // if lowS was passed, ensure s is always | ||
| recovery ^= 1; // // in the bottom half of N | ||
| } | ||
| return new Signature(r, normS, recovery); // use normS, not s | ||
| } | ||
| return { seed, k2sig }; | ||
| } | ||
| /** | ||
| * Signs message hash with a secret key. | ||
| * | ||
| * ``` | ||
| * sign(m, d) where | ||
| * k = rfc6979_hmac_drbg(m, d) | ||
| * (x, y) = G × k | ||
| * r = x mod n | ||
| * s = (m + dr) / k mod n | ||
| * ``` | ||
| */ | ||
| function sign(message, secretKey, opts = {}) { | ||
| message = ensureBytes('message', message); | ||
| const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2. | ||
| const drbg = createHmacDrbg(hash.outputLen, Fn.BYTES, hmac); | ||
| const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G | ||
| return sig; | ||
| } | ||
| function tryParsingSig(sg) { | ||
| // Try to deduce format | ||
| let sig = undefined; | ||
| const isHex = typeof sg === 'string' || isBytes(sg); | ||
| const isObj = !isHex && | ||
| sg !== null && | ||
| typeof sg === 'object' && | ||
| typeof sg.r === 'bigint' && | ||
| typeof sg.s === 'bigint'; | ||
| if (!isHex && !isObj) | ||
| throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance'); | ||
| if (isObj) { | ||
| sig = new Signature(sg.r, sg.s); | ||
| } | ||
| else if (isHex) { | ||
| try { | ||
| sig = Signature.fromBytes(ensureBytes('sig', sg), 'der'); | ||
| } | ||
| catch (derError) { | ||
| if (!(derError instanceof DER.Err)) | ||
| throw derError; | ||
| } | ||
| if (!sig) { | ||
| try { | ||
| sig = Signature.fromBytes(ensureBytes('sig', sg), 'compact'); | ||
| } | ||
| catch (error) { | ||
| return false; | ||
| } | ||
| } | ||
| } | ||
| if (!sig) | ||
| return false; | ||
| return sig; | ||
| } | ||
| /** | ||
| * Verifies a signature against message and public key. | ||
| * Rejects lowS signatures by default: see {@link ECDSAVerifyOpts}. | ||
| * Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf: | ||
| * | ||
| * ``` | ||
| * verify(r, s, h, P) where | ||
| * u1 = hs^-1 mod n | ||
| * u2 = rs^-1 mod n | ||
| * R = u1⋅G + u2⋅P | ||
| * mod(R.x, n) == r | ||
| * ``` | ||
| */ | ||
| function verify(signature, message, publicKey, opts = {}) { | ||
| const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts); | ||
| publicKey = ensureBytes('publicKey', publicKey); | ||
| message = validateMsgAndHash(ensureBytes('message', message), prehash); | ||
| if ('strict' in opts) | ||
| throw new Error('options.strict was renamed to lowS'); | ||
| const sig = format === undefined | ||
| ? tryParsingSig(signature) | ||
| : Signature.fromBytes(ensureBytes('sig', signature), format); | ||
| if (sig === false) | ||
| return false; | ||
| try { | ||
| const P = Point.fromBytes(publicKey); | ||
| if (lowS && sig.hasHighS()) | ||
| return false; | ||
| const { r, s } = sig; | ||
| const h = bits2int_modN(message); // mod n, not mod p | ||
| const is = Fn.inv(s); // s^-1 mod n | ||
| const u1 = Fn.create(h * is); // u1 = hs^-1 mod n | ||
| const u2 = Fn.create(r * is); // u2 = rs^-1 mod n | ||
| const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2)); // u1⋅G + u2⋅P | ||
| if (R.is0()) | ||
| return false; | ||
| const v = Fn.create(R.x); // v = r.x mod n | ||
| return v === r; | ||
| } | ||
| catch (e) { | ||
| return false; | ||
| } | ||
| } | ||
| function recoverPublicKey(signature, message, opts = {}) { | ||
| const { prehash } = validateSigOpts(opts, defaultSigOpts); | ||
| message = validateMsgAndHash(message, prehash); | ||
| return Signature.fromBytes(signature, 'recovered').recoverPublicKey(message).toBytes(); | ||
| } | ||
| return Object.freeze({ | ||
| keygen, | ||
| getPublicKey, | ||
| getSharedSecret, | ||
| utils, | ||
| lengths, | ||
| Point, | ||
| sign, | ||
| verify, | ||
| recoverPublicKey, | ||
| Signature, | ||
| hash, | ||
| }); | ||
| } | ||
| /** @deprecated use `weierstrass` in newer releases */ | ||
| export function weierstrassPoints(c) { | ||
| const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c); | ||
| const Point = weierstrassN(CURVE, curveOpts); | ||
| return _weierstrass_new_output_to_legacy(c, Point); | ||
| } | ||
| function _weierstrass_legacy_opts_to_new(c) { | ||
| const CURVE = { | ||
| a: c.a, | ||
| b: c.b, | ||
| p: c.Fp.ORDER, | ||
| n: c.n, | ||
| h: c.h, | ||
| Gx: c.Gx, | ||
| Gy: c.Gy, | ||
| }; | ||
| const Fp = c.Fp; | ||
| let allowedLengths = c.allowedPrivateKeyLengths | ||
| ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2)))) | ||
| : undefined; | ||
| const Fn = Field(CURVE.n, { | ||
| BITS: c.nBitLength, | ||
| allowedLengths: allowedLengths, | ||
| modFromBytes: c.wrapPrivateKey, | ||
| }); | ||
| const curveOpts = { | ||
| Fp, | ||
| Fn, | ||
| allowInfinityPoint: c.allowInfinityPoint, | ||
| endo: c.endo, | ||
| isTorsionFree: c.isTorsionFree, | ||
| clearCofactor: c.clearCofactor, | ||
| fromBytes: c.fromBytes, | ||
| toBytes: c.toBytes, | ||
| }; | ||
| return { CURVE, curveOpts }; | ||
| } | ||
| function _ecdsa_legacy_opts_to_new(c) { | ||
| const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c); | ||
| const ecdsaOpts = { | ||
| hmac: c.hmac, | ||
| randomBytes: c.randomBytes, | ||
| lowS: c.lowS, | ||
| bits2int: c.bits2int, | ||
| bits2int_modN: c.bits2int_modN, | ||
| }; | ||
| return { CURVE, curveOpts, hash: c.hash, ecdsaOpts }; | ||
| } | ||
| export function _legacyHelperEquat(Fp, a, b) { | ||
| /** | ||
| * y² = x³ + ax + b: Short weierstrass curve formula. Takes x, returns y². | ||
| * @returns y² | ||
| */ | ||
| function weierstrassEquation(x) { | ||
| const x2 = Fp.sqr(x); // x * x | ||
| const x3 = Fp.mul(x2, x); // x² * x | ||
| return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x³ + a * x + b | ||
| } | ||
| return weierstrassEquation; | ||
| } | ||
| function _weierstrass_new_output_to_legacy(c, Point) { | ||
| const { Fp, Fn } = Point; | ||
| function isWithinCurveOrder(num) { | ||
| return inRange(num, _1n, Fn.ORDER); | ||
| } | ||
| const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b); | ||
| return Object.assign({}, { | ||
| CURVE: c, | ||
| Point: Point, | ||
| ProjectivePoint: Point, | ||
| normPrivateKeyToScalar: (key) => _normFnElement(Fn, key), | ||
| weierstrassEquation, | ||
| isWithinCurveOrder, | ||
| }); | ||
| } | ||
| function _ecdsa_new_output_to_legacy(c, _ecdsa) { | ||
| const Point = _ecdsa.Point; | ||
| return Object.assign({}, _ecdsa, { | ||
| ProjectivePoint: Point, | ||
| CURVE: Object.assign({}, c, nLength(Point.Fn.ORDER, Point.Fn.BITS)), | ||
| }); | ||
| } | ||
| // _ecdsa_legacy | ||
| export function weierstrass(c) { | ||
| const { CURVE, curveOpts, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c); | ||
| const Point = weierstrassN(CURVE, curveOpts); | ||
| const signs = ecdsa(Point, hash, ecdsaOpts); | ||
| return _ecdsa_new_output_to_legacy(c, signs); | ||
| } | ||
| //# sourceMappingURL=weierstrass.js.map |
| {"version":3,"file":"weierstrass.js","sourceRoot":"","sources":["../../src/abstract/weierstrass.ts"],"names":[],"mappings":"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C,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,yDAAyD;QACzD,gEAAgE;QAChE,iDAAiD;QACjD,uCAAuC;QACvC,GAAG,CAAC,KAAY;YACd,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YACtC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,kBAAkB;YAChE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;YAClC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;YAClC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YACnC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;YAC/B,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,QAAQ,CAAC,KAAY;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,GAAG;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED;;;;;;;;WAQG;QACH,QAAQ,CAAC,MAAc;YACrB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC,eAAe;YAC7F,IAAI,KAAY,EAAE,IAAW,CAAC,CAAC,wCAAwC;YACvE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7E,4CAA4C;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7B,KAAK,GAAG,CAAC,CAAC;gBACV,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;YACD,0DAA0D;YAC1D,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED;;;;WAIG;QACH,cAAc,CAAC,EAAU;YACvB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAa,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC,aAAa;YACnF,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;YAC7C,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAO,CAAC,CAAC,CAAC,YAAY;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;gBAChF,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,oBAAoB,CAAC,CAAQ,EAAE,CAAS,EAAE,CAAS;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,CAAC;QAED;;;WAGG;QACH,QAAQ,CAAC,SAAa;YACpB,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QAED;;;WAGG;QACH,aAAa;YACX,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAClC,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QAED,aAAa;YACX,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC,CAAC,YAAY;YAC/C,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAU,CAAC;YAC9D,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,YAAY;YACV,mCAAmC;YACnC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,YAAY,GAAG,IAAI;YACzB,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACpC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,YAAY,GAAG,IAAI;YACvB,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,QAAQ;YACN,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QACzD,CAAC;QAED,eAAe;QACf,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE;YACJ,OAAO,IAAI,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,UAAU,CAAC,YAAY,GAAG,IAAI;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QACD,cAAc,CAAC,UAAkB;YAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,MAAe;YAC/B,OAAO,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,MAAe,EAAE,OAAiB;YAC3C,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,UAAmB;YACvC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,CAAC;;IAhUD,yBAAyB;IACT,UAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7D,mCAAmC;IACnB,UAAI,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;IACtE,aAAa;IACG,QAAE,GAAG,EAAE,CAAC;IACxB,eAAe;IACC,QAAE,GAAG,EAAE,CAAC;IA2T1B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,sEAAsE;IAChG,OAAO,KAAK,CAAC;AACf,CAAC;AA0CD,6DAA6D;AAC7D,SAAS,OAAO,CAAC,QAAiB;IAChC,OAAO,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAa,EACb,CAAI;IAEJ,yBAAyB;IACzB,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACnB,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG;QAAE,CAAC,IAAI,GAAG,CAAC;IAC1D,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,2DAA2D;IACzE,yEAAyE;IACzE,2BAA2B;IAC3B,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC;IACtC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,iDAAiD;IACpF,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,uDAAuD;IACpF,MAAM,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,uDAAuD;IACpF,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,2DAA2D;IACpF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,2BAA2B;IACnE,IAAI,SAAS,GAAG,CAAC,CAAI,EAAE,CAAI,EAAkC,EAAE;QAC7D,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,cAAc;QAC5B,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB;QACxC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB;QAC7C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACzC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;QAC7C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAClD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB;QAC1C,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB;QACtD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;QAC5C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,iCAAiC;QAChE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,iCAAiC;QAChE,qCAAqC;QACrC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,qBAAqB;YACxC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,qBAAqB;YAC/C,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,uBAAuB;YACpD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;YACxD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YACjD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YACjD,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YAClD,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;YAC/D,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACvC,CAAC,CAAC;IACF,IAAI,EAAE,CAAC,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QAC3B,yBAAyB;QACzB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,+CAA+C;QAClF,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;QAClD,SAAS,GAAG,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE;YACzB,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;YACpC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC3C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;YAC7C,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB;YAC3C,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB;YACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;YAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kCAAkC;YACrE,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB;YAClD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B;YAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,uCAAuC;QAC7E,CAAC,CAAC;IACJ,CAAC;IACD,sBAAsB;IACtB,kDAAkD;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAa,EACb,IAIC;IAED,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC/D,6BAA6B;IAC7B,gCAAgC;IAChC,OAAO,CAAC,CAAI,EAAkB,EAAE;QAC9B,kBAAkB;QAClB,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB;QAC/C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oCAAoC;QAC1F,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1C,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9C,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC5C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,iDAAiD;QACjG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;QACzD,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;QACzC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,wCAAwC;QACtE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC;QACvE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;QACzE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;QAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB;QAC5C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAI,EAAa,EAAE,EAAkB;IACvD,OAAO;QACL,SAAS,EAAE,EAAE,CAAC,KAAK;QACnB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;QACvB,qBAAqB,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;QACvC,kBAAkB,EAAE,IAAI;QACxB,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;KACxB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAClB,KAAmC,EACnC,WAAmE,EAAE;IAErE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACrB,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,IAAI,cAAc,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE/F,SAAS,gBAAgB,CAAC,SAAkB;QAC1C,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CAAC,SAAqB,EAAE,YAAsB;QACrE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;YAC3B,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACtD,IAAI,YAAY,KAAK,KAAK,IAAI,CAAC,KAAK,qBAAqB;gBAAE,OAAO,KAAK,CAAC;YACxE,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;QACxD,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACH,SAAS,YAAY,CAAC,SAAkB,EAAE,YAAY,GAAG,IAAI;QAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClF,CAAC;IAED,SAAS,MAAM,CAAC,IAAiB;QAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,SAAS,SAAS,CAAC,IAAsB;QACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC3C,IAAI,IAAI,YAAY,KAAK;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAChE,IAAI,EAAE,CAAC,cAAc,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACnE,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;QAC1C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,qBAAqB,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,eAAe,CAAC,UAAmB,EAAE,UAAe,EAAE,YAAY,GAAG,IAAI;QAChF,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrF,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,4BAA4B;QACjE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QAEf,eAAe;QACf,iBAAiB,EAAE,gBAAgB;QACnC,gBAAgB,EAAE,eAAe;QACjC,sBAAsB,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC;QACjE,UAAU,CAAC,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI;YAC3C,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,KAAK,CACnB,KAAmC,EACnC,IAAW,EACX,YAAuB,EAAE;IAEzB,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,eAAe,CACb,SAAS,EACT,EAAE,EACF;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,UAAU;QACvB,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,UAAU;KAC1B,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,cAAc,CAAC;IAC5D,MAAM,IAAI,GACR,SAAS,CAAC,IAAI;QACb,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,CAAuB,CAAC;IAExF,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzF,MAAM,cAAc,GAA4B;QAC9C,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QAClE,MAAM,EAAE,SAAgB,EAAE,8BAA8B;QACxD,YAAY,EAAE,KAAK;KACpB,CAAC;IACF,MAAM,qBAAqB,GAAG,SAAS,CAAC;IAExC,SAAS,qBAAqB,CAAC,MAAc;QAC3C,MAAM,IAAI,GAAG,WAAW,IAAI,GAAG,CAAC;QAChC,OAAO,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,SAAS,UAAU,CAAC,KAAa,EAAE,GAAW;QAC5C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,kCAAkC,CAAC,CAAC;QAChF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,SAAS,iBAAiB,CAAC,KAAiB,EAAE,MAAsB;QAClE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAU,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,SAAS;QAIb,YAAY,CAAS,EAAE,CAAS,EAAE,QAAiB;YACjD,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC9C,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YAC9C,IAAI,QAAQ,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,KAAiB,EAAE,SAAyB,qBAAqB;YAChF,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,KAAyB,CAAC;YAC9B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,GAAG,SAAS,CAAC;gBACnB,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACnB,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,MAAuB;YACjD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,cAAc,CAAC,QAAgB;YAC7B,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAuB,CAAC;QACvE,CAAC;QAED,gBAAgB,CAAC,WAAgB;YAC/B,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACrC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAEvF,kDAAkD;YAClD,4DAA4D;YAC5D,uEAAuE;YACvE,gDAAgD;YAChD,0DAA0D;YAC1D,sCAAsC;YACtC,yDAAyD;YACzD,sDAAsD;YACtD,MAAM,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,CAAC;YACpD,IAAI,WAAW,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAEtF,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;YAChC,MAAM,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC9E,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;YACxC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ;YACtC,qFAAqF;YACrF,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,uDAAuD;QACvD,QAAQ;YACN,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,SAAyB,qBAAqB;YACpD,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC3E,OAAO,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,MAAuB;YAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,eAAe;QACf,cAAc,KAAU,CAAC;QACzB,MAAM,CAAC,WAAW,CAAC,GAAQ;YACzB,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,GAAQ;YACrB,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,UAAU;YACR,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,CAAC;QACD,aAAa;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ;YACN,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,iBAAiB;YACf,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,YAAY;YACV,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,CAAC;KACF;IAGD,kGAAkG;IAClG,0FAA0F;IAC1F,kFAAkF;IAClF,+FAA+F;IAC/F,MAAM,QAAQ,GACZ,SAAS,CAAC,QAAQ;QAClB,SAAS,YAAY,CAAC,KAAiB;YACrC,8DAA8D;YAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC/D,uFAAuF;YACvF,kEAAkE;YAClE,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,4BAA4B;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,uCAAuC;YAChF,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC;IACJ,MAAM,aAAa,GACjB,SAAS,CAAC,aAAa;QACvB,SAAS,iBAAiB,CAAC,KAAiB;YAC1C,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iCAAiC;QACtE,CAAC,CAAC;IACJ,oCAAoC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,oFAAoF;IACpF,SAAS,UAAU,CAAC,GAAW;QAC7B,0EAA0E;QAC1E,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,kBAAkB,CAAC,OAAmB,EAAE,OAAgB;QAC/D,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACnF,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,OAAO,CAAC,OAAmB,EAAE,UAAmB,EAAE,IAAmB;QAC5E,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9E,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,2BAA2B;QAC3E,8EAA8E;QAC9E,gFAAgF;QAChF,gEAAgE;QAChE,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,yCAAyC;QACnF,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,uDAAuD;QACvD,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YACnD,kEAAkE;YAClE,iCAAiC;YACjC,MAAM,CAAC,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAChF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;QACzE,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB;QAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,8EAA8E;QAC/F,0EAA0E;QAC1E,+BAA+B;QAC/B,UAAU;QACV,gBAAgB;QAChB,yBAAyB;QACzB,wEAAwE;QACxE,2FAA2F;QAC3F,0FAA0F;QAC1F,SAAS,KAAK,CAAC,MAAkB;YAC/B,gDAAgD;YAChD,sDAAsD;YACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;YAC/C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,gDAAgD;YAChF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;YACnC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC1C,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO;YACtB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,6CAA6C;YAC7F,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO;YACtB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,sCAAsC;YAC9F,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;gBAC5D,QAAQ,IAAI,CAAC,CAAC,CAAC,6BAA6B;YAC9C,CAAC;YACD,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAuB,CAAC,CAAC,mBAAmB;QACrF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;;;;OAUG;IACH,SAAS,IAAI,CAAC,OAAY,EAAE,SAAkB,EAAE,OAAsB,EAAE;QACtE,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B;QACxF,MAAM,IAAI,GAAG,cAAc,CAAqB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB;QACxD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,aAAa,CAAC,EAAuB;QAC5C,uBAAuB;QACvB,IAAI,GAAG,GAA0B,SAAS,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,GACT,CAAC,KAAK;YACN,EAAE,KAAK,IAAI;YACX,OAAO,EAAE,KAAK,QAAQ;YACtB,OAAO,EAAE,CAAC,CAAC,KAAK,QAAQ;YACxB,OAAO,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;YAClB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,CAAC,QAAQ,YAAY,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,QAAQ,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC;oBACH,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC/D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,MAAM,CACb,SAA8B,EAC9B,OAAY,EACZ,SAAc,EACd,OAAwB,EAAE;QAE1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACxE,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACvE,IAAI,QAAQ,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC5E,MAAM,GAAG,GACP,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;YAC1B,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,SAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE;gBAAE,OAAO,KAAK,CAAC;YACzC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;YACrB,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;YACrD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;YACnC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB;YACjD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB;YACjD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;YACjF,IAAI,CAAC,CAAC,GAAG,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CACvB,SAAqB,EACrB,OAAmB,EACnB,OAAyB,EAAE;QAE3B,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1D,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACzF,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,YAAY;QACZ,eAAe;QACf,KAAK;QACL,OAAO;QACP,KAAK;QACL,IAAI;QACJ,MAAM;QACN,gBAAgB;QAChB,SAAS;QACT,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAkGD,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAAI,CAA+B;IAClE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7C,OAAO,iCAAiC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAYD,SAAS,+BAA+B,CAAI,CAAqB;IAC/D,MAAM,KAAK,GAAuB;QAChC,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;QACb,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,EAAE,EAAE,CAAC,CAAC,EAAE;KACT,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAChB,IAAI,cAAc,GAAG,CAAC,CAAC,wBAAwB;QAC7C,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;QACxB,IAAI,EAAE,CAAC,CAAC,UAAU;QAClB,cAAc,EAAE,cAAc;QAC9B,YAAY,EAAE,CAAC,CAAC,cAAc;KAC/B,CAAC,CAAC;IACH,MAAM,SAAS,GAA4B;QACzC,EAAE;QACF,EAAE;QACF,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;QACxC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AACD,SAAS,yBAAyB,CAAC,CAAY;IAC7C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,aAAa,EAAE,CAAC,CAAC,aAAa;KAC/B,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AACvD,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAI,EAAa,EAAE,CAAI,EAAE,CAAI;IAC7D;;;OAGG;IACH,SAAS,mBAAmB,CAAC,CAAI;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACnC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;IAC/D,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AACD,SAAS,iCAAiC,CACxC,CAAqB,EACrB,KAA8B;IAE9B,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACzB,SAAS,kBAAkB,CAAC,GAAW;QACrC,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAClB,EAAE,EACF;QACE,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,KAAK;QACtB,sBAAsB,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC;QACjE,mBAAmB;QACnB,kBAAkB;KACnB,CACF,CAAC;AACJ,CAAC;AACD,SAAS,2BAA2B,CAAC,CAAY,EAAE,MAAa;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;QAC/B,eAAe,EAAE,KAAK;QACtB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;KACpE,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,WAAW,CAAC,CAAY;IACtC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,2BAA2B,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC"} |
| import { type CurveFn } from './abstract/bls.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
| export declare const bls12_381_Fr: IField<bigint>; | ||
| /** | ||
| * bls12-381 pairing-friendly curve. | ||
| * @example | ||
| * import { bls12_381 as bls } from '@noble/curves/bls12-381'; | ||
| * // G1 keys, G2 signatures | ||
| * const privateKey = '67d53f170b908cabb9eb326c3c337762d59289a8fec79f7bc9254b584b73265c'; | ||
| * const message = '64726e3da8'; | ||
| * const publicKey = bls.getPublicKey(privateKey); | ||
| * const signature = bls.sign(message, privateKey); | ||
| * const isValid = bls.verify(signature, message, publicKey); | ||
| */ | ||
| export declare const bls12_381: CurveFn; | ||
| //# sourceMappingURL=bls12-381.d.ts.map |
| {"version":3,"file":"bls12-381.d.ts","sourceRoot":"","sources":["../src/bls12-381.ts"],"names":[],"mappings":"AAgFA,OAAO,EAAO,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAmE3D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CAGtC,CAAC;AAuTH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,EAAE,OA8HtB,CAAC"} |
-705
| /** | ||
| * bls12-381 is pairing-friendly Barreto-Lynn-Scott elliptic curve construction allowing to: | ||
| * Construct zk-SNARKs at the ~120-bit security, as per [Barbulescu-Duquesne 2017](https://hal.science/hal-01534101/file/main.pdf) | ||
| * Efficiently verify N aggregate signatures with 1 pairing and N ec additions: | ||
| the Boneh-Lynn-Shacham signature scheme is orders of magnitude more efficient than Schnorr | ||
| BLS can mean 2 different things: | ||
| * Barreto-Lynn-Scott: BLS12, a Pairing Friendly Elliptic Curve | ||
| * Boneh-Lynn-Shacham: A Signature Scheme. | ||
| ### Summary | ||
| 1. BLS Relies on expensive bilinear pairing | ||
| 2. Secret Keys: 32 bytes | ||
| 3. Public Keys: 48 OR 96 bytes - big-endian x coordinate of point on G1 OR G2 curve | ||
| 4. Signatures: 96 OR 48 bytes - big-endian x coordinate of point on G2 OR G1 curve | ||
| 5. The 12 stands for the Embedding degree. | ||
| Modes of operation: | ||
| * Long signatures: 48-byte keys + 96-byte sigs (G1 keys + G2 sigs). | ||
| * Short signatures: 96-byte keys + 48-byte sigs (G2 keys + G1 sigs). | ||
| ### Formulas | ||
| - `P = pk x G` - public keys | ||
| - `S = pk x H(m)` - signing, uses hash-to-curve on m | ||
| - `e(P, H(m)) == e(G, S)` - verification using pairings | ||
| - `e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))` - signature aggregation | ||
| ### Curves | ||
| G1 is ordinary elliptic curve. G2 is extension field curve, think "over complex numbers". | ||
| - G1: y² = x³ + 4 | ||
| - G2: y² = x³ + 4(u + 1) where u = √−1; r-order subgroup of E'(Fp²), M-type twist | ||
| ### Towers | ||
| Pairing G1 + G2 produces element in Fp₁₂, 12-degree polynomial. | ||
| Fp₁₂ is usually implemented using tower of lower-degree polynomials for speed. | ||
| - Fp₁₂ = Fp₆² => Fp₂³ | ||
| - Fp(u) / (u² - β) where β = -1 | ||
| - Fp₂(v) / (v³ - ξ) where ξ = u + 1 | ||
| - Fp₆(w) / (w² - γ) where γ = v | ||
| - Fp²[u] = Fp/u²+1 | ||
| - Fp⁶[v] = Fp²/v³-1-u | ||
| - Fp¹²[w] = Fp⁶/w²-v | ||
| ### Params | ||
| * Embedding degree (k): 12 | ||
| * Seed is sometimes named x or t | ||
| * t = -15132376222941642752 | ||
| * p = (t-1)² * (t⁴-t²+1)/3 + t | ||
| * r = t⁴-t²+1 | ||
| * Ate loop size: X | ||
| To verify curve parameters, see | ||
| [pairing-friendly-curves spec](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-11). | ||
| Basic math is done over finite fields over p. | ||
| More complicated math is done over polynominal extension fields. | ||
| ### Compatibility and notes | ||
| 1. It is compatible with Algorand, Chia, Dfinity, Ethereum, Filecoin, ZEC. | ||
| Filecoin uses little endian byte arrays for secret keys - make sure to reverse byte order. | ||
| 2. Make sure to correctly select mode: "long signature" or "short signature". | ||
| 3. Compatible with specs: | ||
| RFC 9380, | ||
| [cfrg-pairing-friendly-curves-11](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-11), | ||
| [cfrg-bls-signature-05](https://datatracker.ietf.org/doc/draft-irtf-cfrg-bls-signature/). | ||
| * | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { bls } from "./abstract/bls.js"; | ||
| import { Field } from "./abstract/modular.js"; | ||
| import { abytes, bitLen, bitMask, bytesToHex, bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE, } from "./utils.js"; | ||
| // Types | ||
| import { isogenyMap } from "./abstract/hash-to-curve.js"; | ||
| import { psiFrobenius, tower12 } from "./abstract/tower.js"; | ||
| import { mapToCurveSimpleSWU, } from "./abstract/weierstrass.js"; | ||
| // Be friendly to bad ECMAScript parsers by not using bigint literals | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4); | ||
| // To verify math: | ||
| // https://tools.ietf.org/html/draft-irtf-cfrg-pairing-friendly-curves-11 | ||
| // The BLS parameter x (seed) for BLS12-381. NOTE: it is negative! | ||
| // x = -2^63 - 2^62 - 2^60 - 2^57 - 2^48 - 2^16 | ||
| const BLS_X = BigInt('0xd201000000010000'); | ||
| // t = x (called differently in different places) | ||
| // const t = -BLS_X; | ||
| const BLS_X_LEN = bitLen(BLS_X); | ||
| // a=0, b=4 | ||
| // P is characteristic of field Fp, in which curve calculations are done. | ||
| // p = (t-1)² * (t⁴-t²+1)/3 + t | ||
| // bls12_381_Fp = (t-1n)**2n * (t**4n - t**2n + 1n) / 3n + t | ||
| // r*h is curve order, amount of points on curve, | ||
| // where r is order of prime subgroup and h is cofactor. | ||
| // r = t⁴-t²+1 | ||
| // r = (t**4n - t**2n + 1n) | ||
| // cofactor h of G1: (t - 1)²/3 | ||
| // cofactorG1 = (t-1n)**2n/3n | ||
| // x = 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507 | ||
| // y = 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569 | ||
| const bls12_381_CURVE_G1 = { | ||
| p: BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'), | ||
| n: BigInt('0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001'), | ||
| h: BigInt('0x396c8c005555e1568c00aaab0000aaab'), | ||
| a: _0n, | ||
| b: _4n, | ||
| Gx: BigInt('0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb'), | ||
| Gy: BigInt('0x08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1'), | ||
| }; | ||
| // CURVE FIELDS | ||
| export const bls12_381_Fr = Field(bls12_381_CURVE_G1.n, { | ||
| modFromBytes: true, | ||
| isLE: true, | ||
| }); | ||
| const { Fp, Fp2, Fp6, Fp12 } = tower12({ | ||
| ORDER: bls12_381_CURVE_G1.p, | ||
| X_LEN: BLS_X_LEN, | ||
| // Finite extension field over irreducible polynominal. | ||
| // Fp(u) / (u² - β) where β = -1 | ||
| FP2_NONRESIDUE: [_1n, _1n], | ||
| Fp2mulByB: ({ c0, c1 }) => { | ||
| const t0 = Fp.mul(c0, _4n); // 4 * c0 | ||
| const t1 = Fp.mul(c1, _4n); // 4 * c1 | ||
| // (T0-T1) + (T0+T1)*i | ||
| return { c0: Fp.sub(t0, t1), c1: Fp.add(t0, t1) }; | ||
| }, | ||
| Fp12finalExponentiate: (num) => { | ||
| const x = BLS_X; | ||
| // this^(q⁶) / this | ||
| const t0 = Fp12.div(Fp12.frobeniusMap(num, 6), num); | ||
| // t0^(q²) * t0 | ||
| const t1 = Fp12.mul(Fp12.frobeniusMap(t0, 2), t0); | ||
| const t2 = Fp12.conjugate(Fp12._cyclotomicExp(t1, x)); | ||
| const t3 = Fp12.mul(Fp12.conjugate(Fp12._cyclotomicSquare(t1)), t2); | ||
| const t4 = Fp12.conjugate(Fp12._cyclotomicExp(t3, x)); | ||
| const t5 = Fp12.conjugate(Fp12._cyclotomicExp(t4, x)); | ||
| const t6 = Fp12.mul(Fp12.conjugate(Fp12._cyclotomicExp(t5, x)), Fp12._cyclotomicSquare(t2)); | ||
| const t7 = Fp12.conjugate(Fp12._cyclotomicExp(t6, x)); | ||
| const t2_t5_pow_q2 = Fp12.frobeniusMap(Fp12.mul(t2, t5), 2); | ||
| const t4_t1_pow_q3 = Fp12.frobeniusMap(Fp12.mul(t4, t1), 3); | ||
| const t6_t1c_pow_q1 = Fp12.frobeniusMap(Fp12.mul(t6, Fp12.conjugate(t1)), 1); | ||
| const t7_t3c_t1 = Fp12.mul(Fp12.mul(t7, Fp12.conjugate(t3)), t1); | ||
| // (t2 * t5)^(q²) * (t4 * t1)^(q³) * (t6 * t1.conj)^(q^1) * t7 * t3.conj * t1 | ||
| return Fp12.mul(Fp12.mul(Fp12.mul(t2_t5_pow_q2, t4_t1_pow_q3), t6_t1c_pow_q1), t7_t3c_t1); | ||
| }, | ||
| }); | ||
| // GLV endomorphism Ψ(P), for fast cofactor clearing | ||
| const { G2psi, G2psi2 } = psiFrobenius(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE)); // 1/(u+1) | ||
| /** | ||
| * Default hash_to_field / hash-to-curve for BLS. | ||
| * m: 1 for G1, 2 for G2 | ||
| * k: target security level in bits | ||
| * hash: any function, e.g. BBS+ uses BLAKE2: see [github](https://github.com/hyperledger/aries-framework-go/issues/2247). | ||
| * Parameter values come from [section 8.8.2 of RFC 9380](https://www.rfc-editor.org/rfc/rfc9380#section-8.8.2). | ||
| */ | ||
| const htfDefaults = Object.freeze({ | ||
| DST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_', | ||
| encodeDST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_', | ||
| p: Fp.ORDER, | ||
| m: 2, | ||
| k: 128, | ||
| expand: 'xmd', | ||
| hash: sha256, | ||
| }); | ||
| // a=0, b=4 | ||
| // cofactor h of G2 | ||
| // (t^8 - 4t^7 + 5t^6 - 4t^4 + 6t^3 - 4t^2 - 4t + 13)/9 | ||
| // cofactorG2 = (t**8n - 4n*t**7n + 5n*t**6n - 4n*t**4n + 6n*t**3n - 4n*t**2n - 4n*t+13n)/9n | ||
| // x = 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758*u + 352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160 | ||
| // y = 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582*u + 1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905 | ||
| const bls12_381_CURVE_G2 = { | ||
| p: Fp2.ORDER, | ||
| n: bls12_381_CURVE_G1.n, | ||
| h: BigInt('0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5'), | ||
| a: Fp2.ZERO, | ||
| b: Fp2.fromBigTuple([_4n, _4n]), | ||
| Gx: Fp2.fromBigTuple([ | ||
| BigInt('0x024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8'), | ||
| BigInt('0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e'), | ||
| ]), | ||
| Gy: Fp2.fromBigTuple([ | ||
| BigInt('0x0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801'), | ||
| BigInt('0x0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be'), | ||
| ]), | ||
| }; | ||
| // Encoding utils | ||
| // Compressed point of infinity | ||
| // Set compressed & point-at-infinity bits | ||
| const COMPZERO = setMask(Fp.toBytes(_0n), { infinity: true, compressed: true }); | ||
| function parseMask(bytes) { | ||
| // Copy, so we can remove mask data. It will be removed also later, when Fp.create will call modulo. | ||
| bytes = bytes.slice(); | ||
| const mask = bytes[0] & 224; | ||
| const compressed = !!((mask >> 7) & 1); // compression bit (0b1000_0000) | ||
| const infinity = !!((mask >> 6) & 1); // point at infinity bit (0b0100_0000) | ||
| const sort = !!((mask >> 5) & 1); // sort bit (0b0010_0000) | ||
| bytes[0] &= 31; // clear mask (zero first 3 bits) | ||
| return { compressed, infinity, sort, value: bytes }; | ||
| } | ||
| function setMask(bytes, mask) { | ||
| if (bytes[0] & 224) | ||
| throw new Error('setMask: non-empty mask'); | ||
| if (mask.compressed) | ||
| bytes[0] |= 128; | ||
| if (mask.infinity) | ||
| bytes[0] |= 64; | ||
| if (mask.sort) | ||
| bytes[0] |= 32; | ||
| return bytes; | ||
| } | ||
| function pointG1ToBytes(_c, point, isComp) { | ||
| const { BYTES: L, ORDER: P } = Fp; | ||
| const is0 = point.is0(); | ||
| const { x, y } = point.toAffine(); | ||
| if (isComp) { | ||
| if (is0) | ||
| return COMPZERO.slice(); | ||
| const sort = Boolean((y * _2n) / P); | ||
| return setMask(numberToBytesBE(x, L), { compressed: true, sort }); | ||
| } | ||
| else { | ||
| if (is0) { | ||
| return concatBytes(Uint8Array.of(0x40), new Uint8Array(2 * L - 1)); | ||
| } | ||
| else { | ||
| return concatBytes(numberToBytesBE(x, L), numberToBytesBE(y, L)); | ||
| } | ||
| } | ||
| } | ||
| function signatureG1ToBytes(point) { | ||
| point.assertValidity(); | ||
| const { BYTES: L, ORDER: P } = Fp; | ||
| const { x, y } = point.toAffine(); | ||
| if (point.is0()) | ||
| return COMPZERO.slice(); | ||
| const sort = Boolean((y * _2n) / P); | ||
| return setMask(numberToBytesBE(x, L), { compressed: true, sort }); | ||
| } | ||
| function pointG1FromBytes(bytes) { | ||
| const { compressed, infinity, sort, value } = parseMask(bytes); | ||
| const { BYTES: L, ORDER: P } = Fp; | ||
| if (value.length === 48 && compressed) { | ||
| const compressedValue = bytesToNumberBE(value); | ||
| // Zero | ||
| const x = Fp.create(compressedValue & bitMask(Fp.BITS)); | ||
| if (infinity) { | ||
| if (x !== _0n) | ||
| throw new Error('invalid G1 point: non-empty, at infinity, with compression'); | ||
| return { x: _0n, y: _0n }; | ||
| } | ||
| const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381_CURVE_G1.b)); // y² = x³ + b | ||
| let y = Fp.sqrt(right); | ||
| if (!y) | ||
| throw new Error('invalid G1 point: compressed point'); | ||
| if ((y * _2n) / P !== BigInt(sort)) | ||
| y = Fp.neg(y); | ||
| return { x: Fp.create(x), y: Fp.create(y) }; | ||
| } | ||
| else if (value.length === 96 && !compressed) { | ||
| // Check if the infinity flag is set | ||
| const x = bytesToNumberBE(value.subarray(0, L)); | ||
| const y = bytesToNumberBE(value.subarray(L)); | ||
| if (infinity) { | ||
| if (x !== _0n || y !== _0n) | ||
| throw new Error('G1: non-empty point at infinity'); | ||
| return bls12_381.G1.Point.ZERO.toAffine(); | ||
| } | ||
| return { x: Fp.create(x), y: Fp.create(y) }; | ||
| } | ||
| else { | ||
| throw new Error('invalid G1 point: expected 48/96 bytes'); | ||
| } | ||
| } | ||
| function signatureG1FromBytes(hex) { | ||
| const { infinity, sort, value } = parseMask(ensureBytes('signatureHex', hex, 48)); | ||
| const P = Fp.ORDER; | ||
| const Point = bls12_381.G1.Point; | ||
| const compressedValue = bytesToNumberBE(value); | ||
| // Zero | ||
| if (infinity) | ||
| return Point.ZERO; | ||
| const x = Fp.create(compressedValue & bitMask(Fp.BITS)); | ||
| const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381_CURVE_G1.b)); // y² = x³ + b | ||
| let y = Fp.sqrt(right); | ||
| if (!y) | ||
| throw new Error('invalid G1 point: compressed'); | ||
| const aflag = BigInt(sort); | ||
| if ((y * _2n) / P !== aflag) | ||
| y = Fp.neg(y); | ||
| const point = Point.fromAffine({ x, y }); | ||
| point.assertValidity(); | ||
| return point; | ||
| } | ||
| function pointG2ToBytes(_c, point, isComp) { | ||
| const { BYTES: L, ORDER: P } = Fp; | ||
| const is0 = point.is0(); | ||
| const { x, y } = point.toAffine(); | ||
| if (isComp) { | ||
| if (is0) | ||
| return concatBytes(COMPZERO, numberToBytesBE(_0n, L)); | ||
| const flag = Boolean(y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P); | ||
| return concatBytes(setMask(numberToBytesBE(x.c1, L), { compressed: true, sort: flag }), numberToBytesBE(x.c0, L)); | ||
| } | ||
| else { | ||
| if (is0) | ||
| return concatBytes(Uint8Array.of(0x40), new Uint8Array(4 * L - 1)); | ||
| const { re: x0, im: x1 } = Fp2.reim(x); | ||
| const { re: y0, im: y1 } = Fp2.reim(y); | ||
| return concatBytes(numberToBytesBE(x1, L), numberToBytesBE(x0, L), numberToBytesBE(y1, L), numberToBytesBE(y0, L)); | ||
| } | ||
| } | ||
| function signatureG2ToBytes(point) { | ||
| point.assertValidity(); | ||
| const { BYTES: L } = Fp; | ||
| if (point.is0()) | ||
| return concatBytes(COMPZERO, numberToBytesBE(_0n, L)); | ||
| const { x, y } = point.toAffine(); | ||
| const { re: x0, im: x1 } = Fp2.reim(x); | ||
| const { re: y0, im: y1 } = Fp2.reim(y); | ||
| const tmp = y1 > _0n ? y1 * _2n : y0 * _2n; | ||
| const sort = Boolean((tmp / Fp.ORDER) & _1n); | ||
| const z2 = x0; | ||
| return concatBytes(setMask(numberToBytesBE(x1, L), { sort, compressed: true }), numberToBytesBE(z2, L)); | ||
| } | ||
| function pointG2FromBytes(bytes) { | ||
| const { BYTES: L, ORDER: P } = Fp; | ||
| const { compressed, infinity, sort, value } = parseMask(bytes); | ||
| if ((!compressed && !infinity && sort) || // 00100000 | ||
| (!compressed && infinity && sort) || // 01100000 | ||
| (sort && infinity && compressed) // 11100000 | ||
| ) { | ||
| throw new Error('invalid encoding flag: ' + (bytes[0] & 224)); | ||
| } | ||
| const slc = (b, from, to) => bytesToNumberBE(b.slice(from, to)); | ||
| if (value.length === 96 && compressed) { | ||
| if (infinity) { | ||
| // check that all bytes are 0 | ||
| if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) { | ||
| throw new Error('invalid G2 point: compressed'); | ||
| } | ||
| return { x: Fp2.ZERO, y: Fp2.ZERO }; | ||
| } | ||
| const x_1 = slc(value, 0, L); | ||
| const x_0 = slc(value, L, 2 * L); | ||
| const x = Fp2.create({ c0: Fp.create(x_0), c1: Fp.create(x_1) }); | ||
| const right = Fp2.add(Fp2.pow(x, _3n), bls12_381_CURVE_G2.b); // y² = x³ + 4 * (u+1) = x³ + b | ||
| let y = Fp2.sqrt(right); | ||
| const Y_bit = y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P ? _1n : _0n; | ||
| y = sort && Y_bit > 0 ? y : Fp2.neg(y); | ||
| return { x, y }; | ||
| } | ||
| else if (value.length === 192 && !compressed) { | ||
| if (infinity) { | ||
| if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) { | ||
| throw new Error('invalid G2 point: uncompressed'); | ||
| } | ||
| return { x: Fp2.ZERO, y: Fp2.ZERO }; | ||
| } | ||
| const x1 = slc(value, 0 * L, 1 * L); | ||
| const x0 = slc(value, 1 * L, 2 * L); | ||
| const y1 = slc(value, 2 * L, 3 * L); | ||
| const y0 = slc(value, 3 * L, 4 * L); | ||
| return { x: Fp2.fromBigTuple([x0, x1]), y: Fp2.fromBigTuple([y0, y1]) }; | ||
| } | ||
| else { | ||
| throw new Error('invalid G2 point: expected 96/192 bytes'); | ||
| } | ||
| } | ||
| function signatureG2FromBytes(hex) { | ||
| const { ORDER: P } = Fp; | ||
| // TODO: Optimize, it's very slow because of sqrt. | ||
| const { infinity, sort, value } = parseMask(ensureBytes('signatureHex', hex)); | ||
| const Point = bls12_381.G2.Point; | ||
| const half = value.length / 2; | ||
| if (half !== 48 && half !== 96) | ||
| throw new Error('invalid compressed signature length, expected 96/192 bytes'); | ||
| const z1 = bytesToNumberBE(value.slice(0, half)); | ||
| const z2 = bytesToNumberBE(value.slice(half)); | ||
| // Indicates the infinity point | ||
| if (infinity) | ||
| return Point.ZERO; | ||
| const x1 = Fp.create(z1 & bitMask(Fp.BITS)); | ||
| const x2 = Fp.create(z2); | ||
| const x = Fp2.create({ c0: x2, c1: x1 }); | ||
| const y2 = Fp2.add(Fp2.pow(x, _3n), bls12_381_CURVE_G2.b); // y² = x³ + 4 | ||
| // The slow part | ||
| let y = Fp2.sqrt(y2); | ||
| if (!y) | ||
| throw new Error('Failed to find a square root'); | ||
| // Choose the y whose leftmost bit of the imaginary part is equal to the a_flag1 | ||
| // If y1 happens to be zero, then use the bit of y0 | ||
| const { re: y0, im: y1 } = Fp2.reim(y); | ||
| const aflag1 = BigInt(sort); | ||
| const isGreater = y1 > _0n && (y1 * _2n) / P !== aflag1; | ||
| const is0 = y1 === _0n && (y0 * _2n) / P !== aflag1; | ||
| if (isGreater || is0) | ||
| y = Fp2.neg(y); | ||
| const point = Point.fromAffine({ x, y }); | ||
| point.assertValidity(); | ||
| return point; | ||
| } | ||
| /** | ||
| * bls12-381 pairing-friendly curve. | ||
| * @example | ||
| * import { bls12_381 as bls } from '@noble/curves/bls12-381'; | ||
| * // G1 keys, G2 signatures | ||
| * const privateKey = '67d53f170b908cabb9eb326c3c337762d59289a8fec79f7bc9254b584b73265c'; | ||
| * const message = '64726e3da8'; | ||
| * const publicKey = bls.getPublicKey(privateKey); | ||
| * const signature = bls.sign(message, privateKey); | ||
| * const isValid = bls.verify(signature, message, publicKey); | ||
| */ | ||
| export const bls12_381 = bls({ | ||
| // Fields | ||
| fields: { | ||
| Fp, | ||
| Fp2, | ||
| Fp6, | ||
| Fp12, | ||
| Fr: bls12_381_Fr, | ||
| }, | ||
| // G1: y² = x³ + 4 | ||
| G1: { | ||
| ...bls12_381_CURVE_G1, | ||
| Fp, | ||
| htfDefaults: { ...htfDefaults, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| isTorsionFree: (c, point) => { | ||
| // GLV endomorphism ψ(P) | ||
| const beta = BigInt('0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe'); | ||
| const phi = new c(Fp.mul(point.X, beta), point.Y, point.Z); | ||
| // TODO: unroll | ||
| const xP = point.multiplyUnsafe(BLS_X).negate(); // [x]P | ||
| const u2P = xP.multiplyUnsafe(BLS_X); // [u2]P | ||
| return u2P.equals(phi); | ||
| }, | ||
| // Clear cofactor of G1 | ||
| // https://eprint.iacr.org/2019/403 | ||
| clearCofactor: (_c, point) => { | ||
| // return this.multiplyUnsafe(CURVE.h); | ||
| return point.multiplyUnsafe(BLS_X).add(point); // x*P + P | ||
| }, | ||
| mapToCurve: mapToG1, | ||
| fromBytes: pointG1FromBytes, | ||
| toBytes: pointG1ToBytes, | ||
| ShortSignature: { | ||
| fromBytes(bytes) { | ||
| abytes(bytes); | ||
| return signatureG1FromBytes(bytes); | ||
| }, | ||
| fromHex(hex) { | ||
| return signatureG1FromBytes(hex); | ||
| }, | ||
| toBytes(point) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toRawBytes(point) { | ||
| return signatureG1ToBytes(point); | ||
| }, | ||
| toHex(point) { | ||
| return bytesToHex(signatureG1ToBytes(point)); | ||
| }, | ||
| }, | ||
| }, | ||
| G2: { | ||
| ...bls12_381_CURVE_G2, | ||
| Fp: Fp2, | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-clearing-the-cofactor | ||
| // https://datatracker.ietf.org/doc/html/rfc9380#name-cofactor-clearing-for-bls12 | ||
| hEff: BigInt('0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551'), | ||
| htfDefaults: { ...htfDefaults }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| mapToCurve: mapToG2, | ||
| // Checks is the point resides in prime-order subgroup. | ||
| // point.isTorsionFree() should return true for valid points | ||
| // It returns false for shitty points. | ||
| // https://eprint.iacr.org/2021/1130.pdf | ||
| // Older version: https://eprint.iacr.org/2019/814.pdf | ||
| isTorsionFree: (c, P) => { | ||
| return P.multiplyUnsafe(BLS_X).negate().equals(G2psi(c, P)); // ψ(P) == [u](P) | ||
| }, | ||
| // Maps the point into the prime-order subgroup G2. | ||
| // clear_cofactor_bls12381_g2 from RFC 9380. | ||
| // https://eprint.iacr.org/2017/419.pdf | ||
| // prettier-ignore | ||
| clearCofactor: (c, P) => { | ||
| const x = BLS_X; | ||
| let t1 = P.multiplyUnsafe(x).negate(); // [-x]P | ||
| let t2 = G2psi(c, P); // Ψ(P) | ||
| let t3 = P.double(); // 2P | ||
| t3 = G2psi2(c, t3); // Ψ²(2P) | ||
| t3 = t3.subtract(t2); // Ψ²(2P) - Ψ(P) | ||
| t2 = t1.add(t2); // [-x]P + Ψ(P) | ||
| t2 = t2.multiplyUnsafe(x).negate(); // [x²]P - [x]Ψ(P) | ||
| t3 = t3.add(t2); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) | ||
| t3 = t3.subtract(t1); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P | ||
| const Q = t3.subtract(P); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P - 1P | ||
| return Q; // [x²-x-1]P + [x-1]Ψ(P) + Ψ²(2P) | ||
| }, | ||
| fromBytes: pointG2FromBytes, | ||
| toBytes: pointG2ToBytes, | ||
| Signature: { | ||
| fromBytes(bytes) { | ||
| abytes(bytes); | ||
| return signatureG2FromBytes(bytes); | ||
| }, | ||
| fromHex(hex) { | ||
| return signatureG2FromBytes(hex); | ||
| }, | ||
| toBytes(point) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toRawBytes(point) { | ||
| return signatureG2ToBytes(point); | ||
| }, | ||
| toHex(point) { | ||
| return bytesToHex(signatureG2ToBytes(point)); | ||
| }, | ||
| }, | ||
| }, | ||
| params: { | ||
| ateLoopSize: BLS_X, // The BLS parameter x for BLS12-381 | ||
| r: bls12_381_CURVE_G1.n, // order; z⁴ − z² + 1; CURVE.n from other curves | ||
| xNegative: true, | ||
| twistType: 'multiplicative', | ||
| }, | ||
| htfDefaults, | ||
| hash: sha256, | ||
| }); | ||
| // 3-isogeny map from E' to E https://www.rfc-editor.org/rfc/rfc9380#appendix-E.3 | ||
| const isogenyMapG2 = isogenyMap(Fp2, [ | ||
| // xNum | ||
| [ | ||
| [ | ||
| '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6', | ||
| '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6', | ||
| ], | ||
| [ | ||
| '0x0', | ||
| '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a', | ||
| ], | ||
| [ | ||
| '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e', | ||
| '0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d', | ||
| ], | ||
| [ | ||
| '0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1', | ||
| '0x0', | ||
| ], | ||
| ], | ||
| // xDen | ||
| [ | ||
| [ | ||
| '0x0', | ||
| '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63', | ||
| ], | ||
| [ | ||
| '0xc', | ||
| '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f', | ||
| ], | ||
| ['0x1', '0x0'], // LAST 1 | ||
| ], | ||
| // yNum | ||
| [ | ||
| [ | ||
| '0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706', | ||
| '0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706', | ||
| ], | ||
| [ | ||
| '0x0', | ||
| '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be', | ||
| ], | ||
| [ | ||
| '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c', | ||
| '0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f', | ||
| ], | ||
| [ | ||
| '0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10', | ||
| '0x0', | ||
| ], | ||
| ], | ||
| // yDen | ||
| [ | ||
| [ | ||
| '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb', | ||
| '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb', | ||
| ], | ||
| [ | ||
| '0x0', | ||
| '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3', | ||
| ], | ||
| [ | ||
| '0x12', | ||
| '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99', | ||
| ], | ||
| ['0x1', '0x0'], // LAST 1 | ||
| ], | ||
| ].map((i) => i.map((pair) => Fp2.fromBigTuple(pair.map(BigInt))))); | ||
| // 11-isogeny map from E' to E | ||
| const isogenyMapG1 = isogenyMap(Fp, [ | ||
| // xNum | ||
| [ | ||
| '0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7', | ||
| '0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb', | ||
| '0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0', | ||
| '0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861', | ||
| '0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9', | ||
| '0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983', | ||
| '0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84', | ||
| '0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e', | ||
| '0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317', | ||
| '0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e', | ||
| '0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b', | ||
| '0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229', | ||
| ], | ||
| // xDen | ||
| [ | ||
| '0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c', | ||
| '0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff', | ||
| '0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19', | ||
| '0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8', | ||
| '0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e', | ||
| '0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5', | ||
| '0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a', | ||
| '0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e', | ||
| '0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641', | ||
| '0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a', | ||
| '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', // LAST 1 | ||
| ], | ||
| // yNum | ||
| [ | ||
| '0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33', | ||
| '0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696', | ||
| '0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6', | ||
| '0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb', | ||
| '0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb', | ||
| '0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0', | ||
| '0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2', | ||
| '0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29', | ||
| '0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587', | ||
| '0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30', | ||
| '0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132', | ||
| '0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e', | ||
| '0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8', | ||
| '0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133', | ||
| '0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b', | ||
| '0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604', | ||
| ], | ||
| // yDen | ||
| [ | ||
| '0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1', | ||
| '0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d', | ||
| '0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2', | ||
| '0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416', | ||
| '0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d', | ||
| '0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac', | ||
| '0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c', | ||
| '0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9', | ||
| '0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a', | ||
| '0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55', | ||
| '0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8', | ||
| '0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092', | ||
| '0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc', | ||
| '0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7', | ||
| '0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f', | ||
| '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', // LAST 1 | ||
| ], | ||
| ].map((i) => i.map((j) => BigInt(j)))); | ||
| // Optimized SWU Map - Fp to G1 | ||
| const G1_SWU = mapToCurveSimpleSWU(Fp, { | ||
| A: Fp.create(BigInt('0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d')), | ||
| B: Fp.create(BigInt('0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0')), | ||
| Z: Fp.create(BigInt(11)), | ||
| }); | ||
| // SWU Map - Fp2 to G2': y² = x³ + 240i * x + 1012 + 1012i | ||
| const G2_SWU = mapToCurveSimpleSWU(Fp2, { | ||
| A: Fp2.create({ c0: Fp.create(_0n), c1: Fp.create(BigInt(240)) }), // A' = 240 * I | ||
| B: Fp2.create({ c0: Fp.create(BigInt(1012)), c1: Fp.create(BigInt(1012)) }), // B' = 1012 * (1 + I) | ||
| Z: Fp2.create({ c0: Fp.create(BigInt(-2)), c1: Fp.create(BigInt(-1)) }), // Z: -(2 + I) | ||
| }); | ||
| function mapToG1(scalars) { | ||
| const { x, y } = G1_SWU(Fp.create(scalars[0])); | ||
| return isogenyMapG1(x, y); | ||
| } | ||
| function mapToG2(scalars) { | ||
| const { x, y } = G2_SWU(Fp2.fromBigTuple(scalars)); | ||
| return isogenyMapG2(x, y); | ||
| } | ||
| //# sourceMappingURL=bls12-381.js.map |
| {"version":3,"file":"bls12-381.js","sourceRoot":"","sources":["../src/bls12-381.ts"],"names":[],"mappings":"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"} |
| import { type CurveFn as BLSCurveFn, type PostPrecomputeFn } from './abstract/bls.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
| import { type CurveFn } from './abstract/weierstrass.ts'; | ||
| export declare const bn254_Fr: IField<bigint>; | ||
| export declare const _postPrecompute: PostPrecomputeFn; | ||
| /** | ||
| * bn254 (a.k.a. alt_bn128) pairing-friendly curve. | ||
| * Contains G1 / G2 operations and pairings. | ||
| */ | ||
| export declare const bn254: BLSCurveFn; | ||
| /** | ||
| * bn254 weierstrass curve with ECDSA. | ||
| * This is very rare and probably not used anywhere. | ||
| * Instead, you should use G1 / G2, defined above. | ||
| * @deprecated | ||
| */ | ||
| export declare const bn254_weierstrass: CurveFn; | ||
| //# sourceMappingURL=bn254.d.ts.map |
| {"version":3,"file":"bn254.d.ts","sourceRoot":"","sources":["../src/bn254.ts"],"names":[],"mappings":"AAyDA,OAAO,EAEL,KAAK,OAAO,IAAI,UAAU,EAC1B,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,KAAK,OAAO,EAAqC,MAAM,2BAA2B,CAAC;AAsB5F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,CAA2B,CAAC;AAsDhE,eAAO,MAAM,eAAe,EAAE,gBAY7B,CAAC;AAmBF;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,UAgDlB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAS9B,CAAC"} |
-214
| /** | ||
| * bn254, previously known as alt_bn_128, when it had 128-bit security. | ||
| Barbulescu-Duquesne 2017 shown it's weaker: just about 100 bits, | ||
| so the naming has been adjusted to its prime bit count: | ||
| https://hal.science/hal-01534101/file/main.pdf. | ||
| Compatible with EIP-196 and EIP-197. | ||
| There are huge compatibility issues in the ecosystem: | ||
| 1. Different libraries call it in different ways: "bn254", "bn256", "alt_bn128", "bn128". | ||
| 2. libff has bn128, but it's a different curve with different G2: | ||
| https://github.com/scipr-lab/libff/blob/a44f482e18b8ac04d034c193bd9d7df7817ad73f/libff/algebra/curves/bn128/bn128_init.cpp#L166-L169 | ||
| 3. halo2curves bn256 is also incompatible and returns different outputs | ||
| We don't implement Point methods toHex / toBytes. | ||
| To work around this limitation, has to initialize points on their own from BigInts. | ||
| Reason it's not implemented is because [there is no standard](https://github.com/privacy-scaling-explorations/halo2curves/issues/109). | ||
| Points of divergence: | ||
| - Endianness: LE vs BE (byte-swapped) | ||
| - Flags as first hex bits (similar to BLS) vs no-flags | ||
| - Imaginary part last in G2 vs first (c0, c1 vs c1, c0) | ||
| The goal of our implementation is to support "Ethereum" variant of the curve, | ||
| because it at least has specs: | ||
| - EIP196 (https://eips.ethereum.org/EIPS/eip-196) describes bn254 ECADD and ECMUL opcodes for EVM | ||
| - EIP197 (https://eips.ethereum.org/EIPS/eip-197) describes bn254 pairings | ||
| - It's hard: EIPs don't have proper tests. EIP-197 returns boolean output instead of Fp12 | ||
| - The existing implementations are bad. Some are deprecated: | ||
| - https://github.com/paritytech/bn (old version) | ||
| - https://github.com/ewasm/ethereum-bn128.rs (uses paritytech/bn) | ||
| - https://github.com/zcash-hackworks/bn | ||
| - https://github.com/arkworks-rs/curves/blob/master/bn254/src/lib.rs | ||
| - Python implementations use different towers and produce different Fp12 outputs: | ||
| - https://github.com/ethereum/py_pairing | ||
| - https://github.com/ethereum/execution-specs/blob/master/src/ethereum/crypto/alt_bn128.py | ||
| - Points are encoded differently in different implementations | ||
| ### Params | ||
| Seed (X): 4965661367192848881 | ||
| Fr: (36x⁴+36x³+18x²+6x+1) | ||
| Fp: (36x⁴+36x³+24x²+6x+1) | ||
| (E / Fp ): Y² = X³+3 | ||
| (Et / Fp²): Y² = X³+3/(u+9) (D-type twist) | ||
| Ate loop size: 6x+2 | ||
| ### Towers | ||
| - Fp²[u] = Fp/u²+1 | ||
| - Fp⁶[v] = Fp²/v³-9-u | ||
| - Fp¹²[w] = Fp⁶/w²-v | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { bls, } from "./abstract/bls.js"; | ||
| import { Field } from "./abstract/modular.js"; | ||
| import { psiFrobenius, tower12 } from "./abstract/tower.js"; | ||
| import { weierstrass } from "./abstract/weierstrass.js"; | ||
| import { bitLen, notImplemented } from "./utils.js"; | ||
| // prettier-ignore | ||
| const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| const _6n = BigInt(6); | ||
| const BN_X = BigInt('4965661367192848881'); | ||
| const BN_X_LEN = bitLen(BN_X); | ||
| const SIX_X_SQUARED = _6n * BN_X ** _2n; | ||
| const bn254_G1_CURVE = { | ||
| p: BigInt('0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47'), | ||
| n: BigInt('0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001'), | ||
| h: _1n, | ||
| a: _0n, | ||
| b: _3n, | ||
| Gx: _1n, | ||
| Gy: BigInt(2), | ||
| }; | ||
| // r == n | ||
| // Finite field over r. It's for convenience and is not used in the code below. | ||
| export const bn254_Fr = Field(bn254_G1_CURVE.n); | ||
| // Fp2.div(Fp2.mul(Fp2.ONE, _3n), Fp2.NONRESIDUE) | ||
| const Fp2B = { | ||
| c0: BigInt('19485874751759354771024239261021720505790618469301721065564631296452457478373'), | ||
| c1: BigInt('266929791119991161246907387137283842545076965332900288569378510910307636690'), | ||
| }; | ||
| const { Fp, Fp2, Fp6, Fp12 } = tower12({ | ||
| ORDER: bn254_G1_CURVE.p, | ||
| X_LEN: BN_X_LEN, | ||
| FP2_NONRESIDUE: [BigInt(9), _1n], | ||
| Fp2mulByB: (num) => Fp2.mul(num, Fp2B), | ||
| Fp12finalExponentiate: (num) => { | ||
| const powMinusX = (num) => Fp12.conjugate(Fp12._cyclotomicExp(num, BN_X)); | ||
| const r0 = Fp12.mul(Fp12.conjugate(num), Fp12.inv(num)); | ||
| const r = Fp12.mul(Fp12.frobeniusMap(r0, 2), r0); | ||
| const y1 = Fp12._cyclotomicSquare(powMinusX(r)); | ||
| const y2 = Fp12.mul(Fp12._cyclotomicSquare(y1), y1); | ||
| const y4 = powMinusX(y2); | ||
| const y6 = powMinusX(Fp12._cyclotomicSquare(y4)); | ||
| const y8 = Fp12.mul(Fp12.mul(Fp12.conjugate(y6), y4), Fp12.conjugate(y2)); | ||
| const y9 = Fp12.mul(y8, y1); | ||
| return Fp12.mul(Fp12.frobeniusMap(Fp12.mul(Fp12.conjugate(r), y9), 3), Fp12.mul(Fp12.frobeniusMap(y8, 2), Fp12.mul(Fp12.frobeniusMap(y9, 1), Fp12.mul(Fp12.mul(y8, y4), r)))); | ||
| }, | ||
| }); | ||
| // END OF CURVE FIELDS | ||
| const { G2psi, psi } = psiFrobenius(Fp, Fp2, Fp2.NONRESIDUE); | ||
| /* | ||
| No hashToCurve for now (and signatures): | ||
| - RFC 9380 doesn't mention bn254 and doesn't provide test vectors | ||
| - Overall seems like nobody is using BLS signatures on top of bn254 | ||
| - Seems like it can utilize SVDW, which is not implemented yet | ||
| */ | ||
| const htfDefaults = Object.freeze({ | ||
| // DST: a domain separation tag defined in section 2.2.5 | ||
| DST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_', | ||
| p: Fp.ORDER, | ||
| m: 2, | ||
| k: 128, | ||
| expand: 'xmd', | ||
| hash: sha256, | ||
| }); | ||
| export const _postPrecompute = (Rx, Ry, Rz, Qx, Qy, pointAdd) => { | ||
| const q = psi(Qx, Qy); | ||
| ({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1])); | ||
| const q2 = psi(q[0], q[1]); | ||
| pointAdd(Rx, Ry, Rz, q2[0], Fp2.neg(q2[1])); | ||
| }; | ||
| // cofactor: (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1 | ||
| const bn254_G2_CURVE = { | ||
| p: Fp2.ORDER, | ||
| n: bn254_G1_CURVE.n, | ||
| h: BigInt('0x30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d'), | ||
| a: Fp2.ZERO, | ||
| b: Fp2B, | ||
| Gx: Fp2.fromBigTuple([ | ||
| BigInt('10857046999023057135944570762232829481370756359578518086990519993285655852781'), | ||
| BigInt('11559732032986387107991004021392285783925812861821192530917403151452391805634'), | ||
| ]), | ||
| Gy: Fp2.fromBigTuple([ | ||
| BigInt('8495653923123431417604973247489272438418190587263600148770280649306958101930'), | ||
| BigInt('4082367875863433681332203403145435568316851327593401208105741076214120093531'), | ||
| ]), | ||
| }; | ||
| /** | ||
| * bn254 (a.k.a. alt_bn128) pairing-friendly curve. | ||
| * Contains G1 / G2 operations and pairings. | ||
| */ | ||
| export const bn254 = bls({ | ||
| // Fields | ||
| fields: { Fp, Fp2, Fp6, Fp12, Fr: bn254_Fr }, | ||
| G1: { | ||
| ...bn254_G1_CURVE, | ||
| Fp, | ||
| htfDefaults: { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| mapToCurve: notImplemented, | ||
| fromBytes: notImplemented, | ||
| toBytes: notImplemented, | ||
| ShortSignature: { | ||
| fromBytes: notImplemented, | ||
| fromHex: notImplemented, | ||
| toBytes: notImplemented, | ||
| toRawBytes: notImplemented, | ||
| toHex: notImplemented, | ||
| }, | ||
| }, | ||
| G2: { | ||
| ...bn254_G2_CURVE, | ||
| Fp: Fp2, | ||
| hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'), | ||
| htfDefaults: { ...htfDefaults }, | ||
| wrapPrivateKey: true, | ||
| allowInfinityPoint: true, | ||
| isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P | ||
| mapToCurve: notImplemented, | ||
| fromBytes: notImplemented, | ||
| toBytes: notImplemented, | ||
| Signature: { | ||
| fromBytes: notImplemented, | ||
| fromHex: notImplemented, | ||
| toBytes: notImplemented, | ||
| toRawBytes: notImplemented, | ||
| toHex: notImplemented, | ||
| }, | ||
| }, | ||
| params: { | ||
| ateLoopSize: BN_X * _6n + _2n, | ||
| r: bn254_Fr.ORDER, | ||
| xNegative: false, | ||
| twistType: 'divisive', | ||
| }, | ||
| htfDefaults, | ||
| hash: sha256, | ||
| postPrecompute: _postPrecompute, | ||
| }); | ||
| /** | ||
| * bn254 weierstrass curve with ECDSA. | ||
| * This is very rare and probably not used anywhere. | ||
| * Instead, you should use G1 / G2, defined above. | ||
| * @deprecated | ||
| */ | ||
| export const bn254_weierstrass = weierstrass({ | ||
| a: BigInt(0), | ||
| b: BigInt(3), | ||
| Fp, | ||
| n: BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'), | ||
| Gx: BigInt(1), | ||
| Gy: BigInt(2), | ||
| h: BigInt(1), | ||
| hash: sha256, | ||
| }); | ||
| //# sourceMappingURL=bn254.js.map |
| {"version":3,"file":"bn254.js","sourceRoot":"","sources":["../src/bn254.ts"],"names":[],"mappings":"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"} |
-106
| import { type AffinePoint } from './abstract/curve.ts'; | ||
| import { PrimeEdwardsPoint, type CurveFn, type EdwardsPoint } from './abstract/edwards.ts'; | ||
| import { type H2CHasher, type H2CHasherBase, type H2CMethod, type htfBasicOpts } from './abstract/hash-to-curve.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
| import { type MontgomeryECDH as XCurveFn } from './abstract/montgomery.ts'; | ||
| import { type Hex } from './utils.ts'; | ||
| /** | ||
| * ed25519 curve with EdDSA signatures. | ||
| * @example | ||
| * import { ed25519 } from '@noble/curves/ed25519'; | ||
| * const { secretKey, publicKey } = ed25519.keygen(); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = ed25519.sign(msg, priv); | ||
| * ed25519.verify(sig, msg, pub); // Default mode: follows ZIP215 | ||
| * ed25519.verify(sig, msg, pub, { zip215: false }); // RFC8032 / FIPS 186-5 | ||
| */ | ||
| export declare const ed25519: CurveFn; | ||
| /** Context of ed25519. Uses context for domain separation. */ | ||
| export declare const ed25519ctx: CurveFn; | ||
| /** Prehashed version of ed25519. Accepts already-hashed messages in sign() and verify(). */ | ||
| export declare const ed25519ph: CurveFn; | ||
| /** | ||
| * ECDH using curve25519 aka x25519. | ||
| * @example | ||
| * import { x25519 } from '@noble/curves/ed25519'; | ||
| * const priv = 'a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4'; | ||
| * const pub = 'e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c'; | ||
| * x25519.getSharedSecret(priv, pub) === x25519.scalarMult(priv, pub); // aliases | ||
| * x25519.getPublicKey(priv) === x25519.scalarMultBase(priv); | ||
| * x25519.getPublicKey(x25519.utils.randomSecretKey()); | ||
| */ | ||
| export declare const x25519: XCurveFn; | ||
| /** Hashing to ed25519 points / field. RFC 9380 methods. */ | ||
| export declare const ed25519_hasher: H2CHasher<bigint>; | ||
| type ExtendedPoint = EdwardsPoint; | ||
| /** | ||
| * Wrapper over Edwards Point for ristretto255. | ||
| * | ||
| * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be | ||
| * a source of bugs for protocols like ring signatures. Ristretto was created to solve this. | ||
| * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint, | ||
| * but it should work in its own namespace: do not combine those two. | ||
| * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496). | ||
| */ | ||
| declare class _RistrettoPoint extends PrimeEdwardsPoint<_RistrettoPoint> { | ||
| static BASE: _RistrettoPoint; | ||
| static ZERO: _RistrettoPoint; | ||
| static Fp: IField<bigint>; | ||
| static Fn: IField<bigint>; | ||
| constructor(ep: ExtendedPoint); | ||
| static fromAffine(ap: AffinePoint<bigint>): _RistrettoPoint; | ||
| protected assertSame(other: _RistrettoPoint): void; | ||
| protected init(ep: EdwardsPoint): _RistrettoPoint; | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| static hashToCurve(hex: Hex): _RistrettoPoint; | ||
| static fromBytes(bytes: Uint8Array): _RistrettoPoint; | ||
| /** | ||
| * Converts ristretto-encoded string to ristretto point. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode). | ||
| * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding | ||
| */ | ||
| static fromHex(hex: Hex): _RistrettoPoint; | ||
| static msm(points: _RistrettoPoint[], scalars: bigint[]): _RistrettoPoint; | ||
| /** | ||
| * Encodes ristretto point to Uint8Array. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode). | ||
| */ | ||
| toBytes(): Uint8Array; | ||
| /** | ||
| * Compares two Ristretto points. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-equals). | ||
| */ | ||
| equals(other: _RistrettoPoint): boolean; | ||
| is0(): boolean; | ||
| } | ||
| export declare const ristretto255: { | ||
| Point: typeof _RistrettoPoint; | ||
| }; | ||
| /** Hashing to ristretto255 points / field. RFC 9380 methods. */ | ||
| export declare const ristretto255_hasher: H2CHasherBase<bigint>; | ||
| /** | ||
| * Weird / bogus points, useful for debugging. | ||
| * All 8 ed25519 points of 8-torsion subgroup can be generated from the point | ||
| * T = `26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05`. | ||
| * ⟨T⟩ = { O, T, 2T, 3T, 4T, 5T, 6T, 7T } | ||
| */ | ||
| export declare const ED25519_TORSION_SUBGROUP: string[]; | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export declare function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array; | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export declare const edwardsToMontgomery: typeof edwardsToMontgomeryPub; | ||
| /** @deprecated use `ed25519.utils.toMontgomeryPriv` */ | ||
| export declare function edwardsToMontgomeryPriv(edwardsPriv: Uint8Array): Uint8Array; | ||
| /** @deprecated use `ristretto255.Point` */ | ||
| export declare const RistrettoPoint: typeof _RistrettoPoint; | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| type RistHasher = (msg: Uint8Array, options: htfBasicOpts) => _RistrettoPoint; | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const hashToRistretto255: RistHasher; | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export declare const hash_to_ristretto255: RistHasher; | ||
| export {}; | ||
| //# sourceMappingURL=ed25519.d.ts.map |
| {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../src/ed25519.ts"],"names":[],"mappings":"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"} |
-467
| /** | ||
| * ed25519 Twisted Edwards curve with following addons: | ||
| * - X25519 ECDH | ||
| * - Ristretto cofactor elimination | ||
| * - Elligator hash-to-group / point indistinguishability | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { sha512 } from '@noble/hashes/sha2.js'; | ||
| import { abytes, concatBytes, utf8ToBytes } from '@noble/hashes/utils.js'; | ||
| import { pippenger } from "./abstract/curve.js"; | ||
| import { PrimeEdwardsPoint, twistedEdwards, } from "./abstract/edwards.js"; | ||
| import { _DST_scalar, createHasher, expand_message_xmd, } from "./abstract/hash-to-curve.js"; | ||
| import { Field, FpInvertBatch, FpSqrtEven, isNegativeLE, mod, pow2, } from "./abstract/modular.js"; | ||
| import { montgomery } from "./abstract/montgomery.js"; | ||
| import { bytesToNumberLE, ensureBytes, equalBytes } from "./utils.js"; | ||
| // prettier-ignore | ||
| const _0n = /* @__PURE__ */ BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3); | ||
| // prettier-ignore | ||
| const _5n = BigInt(5), _8n = BigInt(8); | ||
| // P = 2n**255n-19n | ||
| const ed25519_CURVE_p = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed'); | ||
| // N = 2n**252n + 27742317777372353535851937790883648493n | ||
| // a = Fp.create(BigInt(-1)) | ||
| // d = -121665/121666 a.k.a. Fp.neg(121665 * Fp.inv(121666)) | ||
| const ed25519_CURVE = /* @__PURE__ */ (() => ({ | ||
| p: ed25519_CURVE_p, | ||
| n: BigInt('0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed'), | ||
| h: _8n, | ||
| a: BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec'), | ||
| d: BigInt('0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3'), | ||
| Gx: BigInt('0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a'), | ||
| Gy: BigInt('0x6666666666666666666666666666666666666666666666666666666666666658'), | ||
| }))(); | ||
| function ed25519_pow_2_252_3(x) { | ||
| // prettier-ignore | ||
| const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80); | ||
| const P = ed25519_CURVE_p; | ||
| const x2 = (x * x) % P; | ||
| const b2 = (x2 * x) % P; // x^3, 11 | ||
| const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111 | ||
| const b5 = (pow2(b4, _1n, P) * x) % P; // x^31 | ||
| const b10 = (pow2(b5, _5n, P) * b5) % P; | ||
| const b20 = (pow2(b10, _10n, P) * b10) % P; | ||
| const b40 = (pow2(b20, _20n, P) * b20) % P; | ||
| const b80 = (pow2(b40, _40n, P) * b40) % P; | ||
| const b160 = (pow2(b80, _80n, P) * b80) % P; | ||
| const b240 = (pow2(b160, _80n, P) * b80) % P; | ||
| const b250 = (pow2(b240, _10n, P) * b10) % P; | ||
| const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P; | ||
| // ^ To pow to (p+3)/8, multiply it by x. | ||
| return { pow_p_5_8, b2 }; | ||
| } | ||
| function adjustScalarBytes(bytes) { | ||
| // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar, | ||
| // set the three least significant bits of the first byte | ||
| bytes[0] &= 248; // 0b1111_1000 | ||
| // and the most significant bit of the last to zero, | ||
| bytes[31] &= 127; // 0b0111_1111 | ||
| // set the second most significant bit of the last byte to 1 | ||
| bytes[31] |= 64; // 0b0100_0000 | ||
| return bytes; | ||
| } | ||
| // √(-1) aka √(a) aka 2^((p-1)/4) | ||
| // Fp.sqrt(Fp.neg(1)) | ||
| const ED25519_SQRT_M1 = /* @__PURE__ */ BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752'); | ||
| // sqrt(u/v) | ||
| function uvRatio(u, v) { | ||
| const P = ed25519_CURVE_p; | ||
| const v3 = mod(v * v * v, P); // v³ | ||
| const v7 = mod(v3 * v3 * v, P); // v⁷ | ||
| // (p+3)/8 and (p-5)/8 | ||
| const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8; | ||
| let x = mod(u * v3 * pow, P); // (uv³)(uv⁷)^(p-5)/8 | ||
| const vx2 = mod(v * x * x, P); // vx² | ||
| const root1 = x; // First root candidate | ||
| const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate | ||
| const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root | ||
| const useRoot2 = vx2 === mod(-u, P); // If vx² = -u, set x <-- x * 2^((p-1)/4) | ||
| const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx² = -u√(-1) | ||
| if (useRoot1) | ||
| x = root1; | ||
| if (useRoot2 || noRoot) | ||
| x = root2; // We return root2 anyway, for const-time | ||
| if (isNegativeLE(x, P)) | ||
| x = mod(-x, P); | ||
| return { isValid: useRoot1 || useRoot2, value: x }; | ||
| } | ||
| const Fp = /* @__PURE__ */ (() => Field(ed25519_CURVE.p, { isLE: true }))(); | ||
| const Fn = /* @__PURE__ */ (() => Field(ed25519_CURVE.n, { isLE: true }))(); | ||
| const ed25519Defaults = /* @__PURE__ */ (() => ({ | ||
| ...ed25519_CURVE, | ||
| Fp, | ||
| hash: sha512, | ||
| adjustScalarBytes, | ||
| // dom2 | ||
| // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3. | ||
| // Constant-time, u/√v | ||
| uvRatio, | ||
| }))(); | ||
| /** | ||
| * ed25519 curve with EdDSA signatures. | ||
| * @example | ||
| * import { ed25519 } from '@noble/curves/ed25519'; | ||
| * const { secretKey, publicKey } = ed25519.keygen(); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = ed25519.sign(msg, priv); | ||
| * ed25519.verify(sig, msg, pub); // Default mode: follows ZIP215 | ||
| * ed25519.verify(sig, msg, pub, { zip215: false }); // RFC8032 / FIPS 186-5 | ||
| */ | ||
| export const ed25519 = /* @__PURE__ */ (() => twistedEdwards(ed25519Defaults))(); | ||
| function ed25519_domain(data, ctx, phflag) { | ||
| if (ctx.length > 255) | ||
| throw new Error('Context is too big'); | ||
| return concatBytes(utf8ToBytes('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data); | ||
| } | ||
| /** Context of ed25519. Uses context for domain separation. */ | ||
| export const ed25519ctx = /* @__PURE__ */ (() => twistedEdwards({ | ||
| ...ed25519Defaults, | ||
| domain: ed25519_domain, | ||
| }))(); | ||
| /** Prehashed version of ed25519. Accepts already-hashed messages in sign() and verify(). */ | ||
| export const ed25519ph = /* @__PURE__ */ (() => twistedEdwards(Object.assign({}, ed25519Defaults, { | ||
| domain: ed25519_domain, | ||
| prehash: sha512, | ||
| })))(); | ||
| /** | ||
| * ECDH using curve25519 aka x25519. | ||
| * @example | ||
| * import { x25519 } from '@noble/curves/ed25519'; | ||
| * const priv = 'a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4'; | ||
| * const pub = 'e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c'; | ||
| * x25519.getSharedSecret(priv, pub) === x25519.scalarMult(priv, pub); // aliases | ||
| * x25519.getPublicKey(priv) === x25519.scalarMultBase(priv); | ||
| * x25519.getPublicKey(x25519.utils.randomSecretKey()); | ||
| */ | ||
| export const x25519 = /* @__PURE__ */ (() => { | ||
| const P = Fp.ORDER; | ||
| return montgomery({ | ||
| P, | ||
| type: 'x25519', | ||
| powPminus2: (x) => { | ||
| // x^(p-2) aka x^(2^255-21) | ||
| const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x); | ||
| return mod(pow2(pow_p_5_8, _3n, P) * b2, P); | ||
| }, | ||
| adjustScalarBytes, | ||
| }); | ||
| })(); | ||
| // Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator) | ||
| // NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since | ||
| // SageMath returns different root first and everything falls apart | ||
| const ELL2_C1 = /* @__PURE__ */ (() => (ed25519_CURVE_p + _3n) / _8n)(); // 1. c1 = (q + 3) / 8 # Integer arithmetic | ||
| const ELL2_C2 = /* @__PURE__ */ (() => Fp.pow(_2n, ELL2_C1))(); // 2. c2 = 2^c1 | ||
| const ELL2_C3 = /* @__PURE__ */ (() => Fp.sqrt(Fp.neg(Fp.ONE)))(); // 3. c3 = sqrt(-1) | ||
| // prettier-ignore | ||
| function map_to_curve_elligator2_curve25519(u) { | ||
| const ELL2_C4 = (ed25519_CURVE_p - _5n) / _8n; // 4. c4 = (q - 5) / 8 # Integer arithmetic | ||
| const ELL2_J = BigInt(486662); | ||
| let tv1 = Fp.sqr(u); // 1. tv1 = u^2 | ||
| tv1 = Fp.mul(tv1, _2n); // 2. tv1 = 2 * tv1 | ||
| let xd = Fp.add(tv1, Fp.ONE); // 3. xd = tv1 + 1 # Nonzero: -1 is square (mod p), tv1 is not | ||
| let x1n = Fp.neg(ELL2_J); // 4. x1n = -J # x1 = x1n / xd = -J / (1 + 2 * u^2) | ||
| let tv2 = Fp.sqr(xd); // 5. tv2 = xd^2 | ||
| let gxd = Fp.mul(tv2, xd); // 6. gxd = tv2 * xd # gxd = xd^3 | ||
| let gx1 = Fp.mul(tv1, ELL2_J); // 7. gx1 = J * tv1 # x1n + J * xd | ||
| gx1 = Fp.mul(gx1, x1n); // 8. gx1 = gx1 * x1n # x1n^2 + J * x1n * xd | ||
| gx1 = Fp.add(gx1, tv2); // 9. gx1 = gx1 + tv2 # x1n^2 + J * x1n * xd + xd^2 | ||
| gx1 = Fp.mul(gx1, x1n); // 10. gx1 = gx1 * x1n # x1n^3 + J * x1n^2 * xd + x1n * xd^2 | ||
| let tv3 = Fp.sqr(gxd); // 11. tv3 = gxd^2 | ||
| tv2 = Fp.sqr(tv3); // 12. tv2 = tv3^2 # gxd^4 | ||
| tv3 = Fp.mul(tv3, gxd); // 13. tv3 = tv3 * gxd # gxd^3 | ||
| tv3 = Fp.mul(tv3, gx1); // 14. tv3 = tv3 * gx1 # gx1 * gxd^3 | ||
| tv2 = Fp.mul(tv2, tv3); // 15. tv2 = tv2 * tv3 # gx1 * gxd^7 | ||
| let y11 = Fp.pow(tv2, ELL2_C4); // 16. y11 = tv2^c4 # (gx1 * gxd^7)^((p - 5) / 8) | ||
| y11 = Fp.mul(y11, tv3); // 17. y11 = y11 * tv3 # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8) | ||
| let y12 = Fp.mul(y11, ELL2_C3); // 18. y12 = y11 * c3 | ||
| tv2 = Fp.sqr(y11); // 19. tv2 = y11^2 | ||
| tv2 = Fp.mul(tv2, gxd); // 20. tv2 = tv2 * gxd | ||
| let e1 = Fp.eql(tv2, gx1); // 21. e1 = tv2 == gx1 | ||
| let y1 = Fp.cmov(y12, y11, e1); // 22. y1 = CMOV(y12, y11, e1) # If g(x1) is square, this is its sqrt | ||
| let x2n = Fp.mul(x1n, tv1); // 23. x2n = x1n * tv1 # x2 = x2n / xd = 2 * u^2 * x1n / xd | ||
| let y21 = Fp.mul(y11, u); // 24. y21 = y11 * u | ||
| y21 = Fp.mul(y21, ELL2_C2); // 25. y21 = y21 * c2 | ||
| let y22 = Fp.mul(y21, ELL2_C3); // 26. y22 = y21 * c3 | ||
| let gx2 = Fp.mul(gx1, tv1); // 27. gx2 = gx1 * tv1 # g(x2) = gx2 / gxd = 2 * u^2 * g(x1) | ||
| tv2 = Fp.sqr(y21); // 28. tv2 = y21^2 | ||
| tv2 = Fp.mul(tv2, gxd); // 29. tv2 = tv2 * gxd | ||
| let e2 = Fp.eql(tv2, gx2); // 30. e2 = tv2 == gx2 | ||
| let y2 = Fp.cmov(y22, y21, e2); // 31. y2 = CMOV(y22, y21, e2) # If g(x2) is square, this is its sqrt | ||
| tv2 = Fp.sqr(y1); // 32. tv2 = y1^2 | ||
| tv2 = Fp.mul(tv2, gxd); // 33. tv2 = tv2 * gxd | ||
| let e3 = Fp.eql(tv2, gx1); // 34. e3 = tv2 == gx1 | ||
| let xn = Fp.cmov(x2n, x1n, e3); // 35. xn = CMOV(x2n, x1n, e3) # If e3, x = x1, else x = x2 | ||
| let y = Fp.cmov(y2, y1, e3); // 36. y = CMOV(y2, y1, e3) # If e3, y = y1, else y = y2 | ||
| let e4 = Fp.isOdd(y); // 37. e4 = sgn0(y) == 1 # Fix sign of y | ||
| y = Fp.cmov(y, Fp.neg(y), e3 !== e4); // 38. y = CMOV(y, -y, e3 XOR e4) | ||
| return { xMn: xn, xMd: xd, yMn: y, yMd: _1n }; // 39. return (xn, xd, y, 1) | ||
| } | ||
| const ELL2_C1_EDWARDS = /* @__PURE__ */ (() => FpSqrtEven(Fp, Fp.neg(BigInt(486664))))(); // sgn0(c1) MUST equal 0 | ||
| function map_to_curve_elligator2_edwards25519(u) { | ||
| const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); // 1. (xMn, xMd, yMn, yMd) = | ||
| // map_to_curve_elligator2_curve25519(u) | ||
| let xn = Fp.mul(xMn, yMd); // 2. xn = xMn * yMd | ||
| xn = Fp.mul(xn, ELL2_C1_EDWARDS); // 3. xn = xn * c1 | ||
| let xd = Fp.mul(xMd, yMn); // 4. xd = xMd * yMn # xn / xd = c1 * xM / yM | ||
| let yn = Fp.sub(xMn, xMd); // 5. yn = xMn - xMd | ||
| let yd = Fp.add(xMn, xMd); // 6. yd = xMn + xMd # (n / d - 1) / (n / d + 1) = (n - d) / (n + d) | ||
| let tv1 = Fp.mul(xd, yd); // 7. tv1 = xd * yd | ||
| let e = Fp.eql(tv1, Fp.ZERO); // 8. e = tv1 == 0 | ||
| xn = Fp.cmov(xn, Fp.ZERO, e); // 9. xn = CMOV(xn, 0, e) | ||
| xd = Fp.cmov(xd, Fp.ONE, e); // 10. xd = CMOV(xd, 1, e) | ||
| yn = Fp.cmov(yn, Fp.ONE, e); // 11. yn = CMOV(yn, 1, e) | ||
| yd = Fp.cmov(yd, Fp.ONE, e); // 12. yd = CMOV(yd, 1, e) | ||
| const [xd_inv, yd_inv] = FpInvertBatch(Fp, [xd, yd], true); // batch division | ||
| return { x: Fp.mul(xn, xd_inv), y: Fp.mul(yn, yd_inv) }; // 13. return (xn, xd, yn, yd) | ||
| } | ||
| /** Hashing to ed25519 points / field. RFC 9380 methods. */ | ||
| export const ed25519_hasher = /* @__PURE__ */ (() => createHasher(ed25519.Point, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), { | ||
| DST: 'edwards25519_XMD:SHA-512_ELL2_RO_', | ||
| encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_', | ||
| p: ed25519_CURVE_p, | ||
| m: 1, | ||
| k: 128, | ||
| expand: 'xmd', | ||
| hash: sha512, | ||
| }))(); | ||
| // √(-1) aka √(a) aka 2^((p-1)/4) | ||
| const SQRT_M1 = ED25519_SQRT_M1; | ||
| // √(ad - 1) | ||
| const SQRT_AD_MINUS_ONE = /* @__PURE__ */ BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235'); | ||
| // 1 / √(a-d) | ||
| const INVSQRT_A_MINUS_D = /* @__PURE__ */ BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578'); | ||
| // 1-d² | ||
| const ONE_MINUS_D_SQ = /* @__PURE__ */ BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838'); | ||
| // (d-1)² | ||
| const D_MINUS_ONE_SQ = /* @__PURE__ */ BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952'); | ||
| // Calculates 1/√(number) | ||
| const invertSqrt = (number) => uvRatio(_1n, number); | ||
| const MAX_255B = /* @__PURE__ */ BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); | ||
| const bytes255ToNumberLE = (bytes) => ed25519.Point.Fp.create(bytesToNumberLE(bytes) & MAX_255B); | ||
| /** | ||
| * Computes Elligator map for Ristretto255. | ||
| * Described in [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#appendix-B) and on | ||
| * the [website](https://ristretto.group/formulas/elligator.html). | ||
| */ | ||
| function calcElligatorRistrettoMap(r0) { | ||
| const { d } = ed25519_CURVE; | ||
| const P = ed25519_CURVE_p; | ||
| const mod = (n) => Fp.create(n); | ||
| const r = mod(SQRT_M1 * r0 * r0); // 1 | ||
| const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2 | ||
| let c = BigInt(-1); // 3 | ||
| const D = mod((c - d * r) * mod(r + d)); // 4 | ||
| let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5 | ||
| let s_ = mod(s * r0); // 6 | ||
| if (!isNegativeLE(s_, P)) | ||
| s_ = mod(-s_); | ||
| if (!Ns_D_is_sq) | ||
| s = s_; // 7 | ||
| if (!Ns_D_is_sq) | ||
| c = r; // 8 | ||
| const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9 | ||
| const s2 = s * s; | ||
| const W0 = mod((s + s) * D); // 10 | ||
| const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11 | ||
| const W2 = mod(_1n - s2); // 12 | ||
| const W3 = mod(_1n + s2); // 13 | ||
| return new ed25519.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| } | ||
| function ristretto255_map(bytes) { | ||
| abytes(bytes, 64); | ||
| const r1 = bytes255ToNumberLE(bytes.subarray(0, 32)); | ||
| const R1 = calcElligatorRistrettoMap(r1); | ||
| const r2 = bytes255ToNumberLE(bytes.subarray(32, 64)); | ||
| const R2 = calcElligatorRistrettoMap(r2); | ||
| return new _RistrettoPoint(R1.add(R2)); | ||
| } | ||
| /** | ||
| * Wrapper over Edwards Point for ristretto255. | ||
| * | ||
| * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be | ||
| * a source of bugs for protocols like ring signatures. Ristretto was created to solve this. | ||
| * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint, | ||
| * but it should work in its own namespace: do not combine those two. | ||
| * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496). | ||
| */ | ||
| class _RistrettoPoint extends PrimeEdwardsPoint { | ||
| constructor(ep) { | ||
| super(ep); | ||
| } | ||
| static fromAffine(ap) { | ||
| return new _RistrettoPoint(ed25519.Point.fromAffine(ap)); | ||
| } | ||
| assertSame(other) { | ||
| if (!(other instanceof _RistrettoPoint)) | ||
| throw new Error('RistrettoPoint expected'); | ||
| } | ||
| init(ep) { | ||
| return new _RistrettoPoint(ep); | ||
| } | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| static hashToCurve(hex) { | ||
| return ristretto255_map(ensureBytes('ristrettoHash', hex, 64)); | ||
| } | ||
| static fromBytes(bytes) { | ||
| abytes(bytes, 32); | ||
| const { a, d } = ed25519_CURVE; | ||
| const P = ed25519_CURVE_p; | ||
| const mod = (n) => Fp.create(n); | ||
| const s = bytes255ToNumberLE(bytes); | ||
| // 1. Check that s_bytes is the canonical encoding of a field element, or else abort. | ||
| // 3. Check that s is non-negative, or else abort | ||
| if (!equalBytes(Fp.toBytes(s), bytes) || isNegativeLE(s, P)) | ||
| throw new Error('invalid ristretto255 encoding 1'); | ||
| const s2 = mod(s * s); | ||
| const u1 = mod(_1n + a * s2); // 4 (a is -1) | ||
| const u2 = mod(_1n - a * s2); // 5 | ||
| const u1_2 = mod(u1 * u1); | ||
| const u2_2 = mod(u2 * u2); | ||
| const v = mod(a * d * u1_2 - u2_2); // 6 | ||
| const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7 | ||
| const Dx = mod(I * u2); // 8 | ||
| const Dy = mod(I * Dx * v); // 9 | ||
| let x = mod((s + s) * Dx); // 10 | ||
| if (isNegativeLE(x, P)) | ||
| x = mod(-x); // 10 | ||
| const y = mod(u1 * Dy); // 11 | ||
| const t = mod(x * y); // 12 | ||
| if (!isValid || isNegativeLE(t, P) || y === _0n) | ||
| throw new Error('invalid ristretto255 encoding 2'); | ||
| return new _RistrettoPoint(new ed25519.Point(x, y, _1n, t)); | ||
| } | ||
| /** | ||
| * Converts ristretto-encoded string to ristretto point. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode). | ||
| * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding | ||
| */ | ||
| static fromHex(hex) { | ||
| return _RistrettoPoint.fromBytes(ensureBytes('ristrettoHex', hex, 32)); | ||
| } | ||
| static msm(points, scalars) { | ||
| return pippenger(_RistrettoPoint, ed25519.Point.Fn, points, scalars); | ||
| } | ||
| /** | ||
| * Encodes ristretto point to Uint8Array. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode). | ||
| */ | ||
| toBytes() { | ||
| let { X, Y, Z, T } = this.ep; | ||
| const P = ed25519_CURVE_p; | ||
| const mod = (n) => Fp.create(n); | ||
| const u1 = mod(mod(Z + Y) * mod(Z - Y)); // 1 | ||
| const u2 = mod(X * Y); // 2 | ||
| // Square root always exists | ||
| const u2sq = mod(u2 * u2); | ||
| const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3 | ||
| const D1 = mod(invsqrt * u1); // 4 | ||
| const D2 = mod(invsqrt * u2); // 5 | ||
| const zInv = mod(D1 * D2 * T); // 6 | ||
| let D; // 7 | ||
| if (isNegativeLE(T * zInv, P)) { | ||
| let _x = mod(Y * SQRT_M1); | ||
| let _y = mod(X * SQRT_M1); | ||
| X = _x; | ||
| Y = _y; | ||
| D = mod(D1 * INVSQRT_A_MINUS_D); | ||
| } | ||
| else { | ||
| D = D2; // 8 | ||
| } | ||
| if (isNegativeLE(X * zInv, P)) | ||
| Y = mod(-Y); // 9 | ||
| let s = mod((Z - Y) * D); // 10 (check footer's note, no sqrt(-a)) | ||
| if (isNegativeLE(s, P)) | ||
| s = mod(-s); | ||
| return Fp.toBytes(s); // 11 | ||
| } | ||
| /** | ||
| * Compares two Ristretto points. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-equals). | ||
| */ | ||
| equals(other) { | ||
| this.assertSame(other); | ||
| const { X: X1, Y: Y1 } = this.ep; | ||
| const { X: X2, Y: Y2 } = other.ep; | ||
| const mod = (n) => Fp.create(n); | ||
| // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2) | ||
| const one = mod(X1 * Y2) === mod(Y1 * X2); | ||
| const two = mod(Y1 * Y2) === mod(X1 * X2); | ||
| return one || two; | ||
| } | ||
| is0() { | ||
| return this.equals(_RistrettoPoint.ZERO); | ||
| } | ||
| } | ||
| // Do NOT change syntax: the following gymnastics is done, | ||
| // because typescript strips comments, which makes bundlers disable tree-shaking. | ||
| // prettier-ignore | ||
| _RistrettoPoint.BASE = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519.Point.BASE))(); | ||
| // prettier-ignore | ||
| _RistrettoPoint.ZERO = | ||
| /* @__PURE__ */ (() => new _RistrettoPoint(ed25519.Point.ZERO))(); | ||
| // prettier-ignore | ||
| _RistrettoPoint.Fp = | ||
| /* @__PURE__ */ (() => Fp)(); | ||
| // prettier-ignore | ||
| _RistrettoPoint.Fn = | ||
| /* @__PURE__ */ (() => Fn)(); | ||
| export const ristretto255 = { Point: _RistrettoPoint }; | ||
| /** Hashing to ristretto255 points / field. RFC 9380 methods. */ | ||
| export const ristretto255_hasher = { | ||
| hashToCurve(msg, options) { | ||
| const DST = options?.DST || 'ristretto255_XMD:SHA-512_R255MAP_RO_'; | ||
| const xmd = expand_message_xmd(msg, DST, 64, sha512); | ||
| return ristretto255_map(xmd); | ||
| }, | ||
| hashToScalar(msg, options = { DST: _DST_scalar }) { | ||
| const xmd = expand_message_xmd(msg, options.DST, 64, sha512); | ||
| return Fn.create(bytesToNumberLE(xmd)); | ||
| }, | ||
| }; | ||
| // export const ristretto255_oprf: OPRF = createORPF({ | ||
| // name: 'ristretto255-SHA512', | ||
| // Point: RistrettoPoint, | ||
| // hash: sha512, | ||
| // hashToGroup: ristretto255_hasher.hashToCurve, | ||
| // hashToScalar: ristretto255_hasher.hashToScalar, | ||
| // }); | ||
| /** | ||
| * Weird / bogus points, useful for debugging. | ||
| * All 8 ed25519 points of 8-torsion subgroup can be generated from the point | ||
| * T = `26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05`. | ||
| * ⟨T⟩ = { O, T, 2T, 3T, 4T, 5T, 6T, 7T } | ||
| */ | ||
| export const ED25519_TORSION_SUBGROUP = [ | ||
| '0100000000000000000000000000000000000000000000000000000000000000', | ||
| 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a', | ||
| '0000000000000000000000000000000000000000000000000000000000000080', | ||
| '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05', | ||
| 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f', | ||
| '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85', | ||
| '0000000000000000000000000000000000000000000000000000000000000000', | ||
| 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa', | ||
| ]; | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export function edwardsToMontgomeryPub(edwardsPub) { | ||
| return ed25519.utils.toMontgomery(ensureBytes('pub', edwardsPub)); | ||
| } | ||
| /** @deprecated use `ed25519.utils.toMontgomery` */ | ||
| export const edwardsToMontgomery = edwardsToMontgomeryPub; | ||
| /** @deprecated use `ed25519.utils.toMontgomeryPriv` */ | ||
| export function edwardsToMontgomeryPriv(edwardsPriv) { | ||
| return ed25519.utils.toMontgomeryPriv(ensureBytes('pub', edwardsPriv)); | ||
| } | ||
| /** @deprecated use `ristretto255.Point` */ | ||
| export const RistrettoPoint = _RistrettoPoint; | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const hashToCurve = /* @__PURE__ */ (() => ed25519_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const encodeToCurve = /* @__PURE__ */ (() => ed25519_hasher.encodeToCurve)(); | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const hashToRistretto255 = /* @__PURE__ */ (() => ristretto255_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */ | ||
| export const hash_to_ristretto255 = /* @__PURE__ */ (() => ristretto255_hasher.hashToCurve)(); | ||
| //# sourceMappingURL=ed25519.js.map |
| {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../src/ed25519.ts"],"names":[],"mappings":"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"} |
-100
| import type { AffinePoint } from './abstract/curve.ts'; | ||
| import { PrimeEdwardsPoint, type CurveFn, type EdwardsPoint, type EdwardsPointCons } from './abstract/edwards.ts'; | ||
| import { type H2CHasher, type H2CHasherBase, type H2CMethod, type htfBasicOpts } from './abstract/hash-to-curve.ts'; | ||
| import { type IField } from './abstract/modular.ts'; | ||
| import { type MontgomeryECDH as XCurveFn } from './abstract/montgomery.ts'; | ||
| import { type Hex } from './utils.ts'; | ||
| /** | ||
| * ed448 EdDSA curve and methods. | ||
| * @example | ||
| * import { ed448 } from '@noble/curves/ed448'; | ||
| * const { secretKey, publicKey } = ed448.keygen(); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = ed448.sign(msg, secretKey); | ||
| * const isValid = ed448.verify(sig, msg, publicKey); | ||
| */ | ||
| export declare const ed448: CurveFn; | ||
| /** Prehashed version of ed448. Accepts already-hashed messages in sign() and verify(). */ | ||
| export declare const ed448ph: CurveFn; | ||
| /** | ||
| * E448 curve, defined by NIST. | ||
| * E448 != edwards448 used in ed448. | ||
| * E448 is birationally equivalent to edwards448. | ||
| */ | ||
| export declare const E448: EdwardsPointCons; | ||
| /** | ||
| * ECDH using curve448 aka x448. | ||
| * x448 has 56-byte keys as per RFC 7748, while | ||
| * ed448 has 57-byte keys as per RFC 8032. | ||
| */ | ||
| export declare const x448: XCurveFn; | ||
| /** Hashing / encoding to ed448 points / field. RFC 9380 methods. */ | ||
| export declare const ed448_hasher: H2CHasher<bigint>; | ||
| /** | ||
| * Each ed448/EdwardsPoint has 4 different equivalent points. This can be | ||
| * a source of bugs for protocols like ring signatures. Decaf was created to solve this. | ||
| * Decaf point operates in X:Y:Z:T extended coordinates like EdwardsPoint, | ||
| * but it should work in its own namespace: do not combine those two. | ||
| * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496). | ||
| */ | ||
| declare class _DecafPoint extends PrimeEdwardsPoint<_DecafPoint> { | ||
| static BASE: _DecafPoint; | ||
| static ZERO: _DecafPoint; | ||
| static Fp: IField<bigint>; | ||
| static Fn: IField<bigint>; | ||
| constructor(ep: EdwardsPoint); | ||
| static fromAffine(ap: AffinePoint<bigint>): _DecafPoint; | ||
| protected assertSame(other: _DecafPoint): void; | ||
| protected init(ep: EdwardsPoint): _DecafPoint; | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| static hashToCurve(hex: Hex): _DecafPoint; | ||
| static fromBytes(bytes: Uint8Array): _DecafPoint; | ||
| /** | ||
| * Converts decaf-encoded string to decaf point. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode-2). | ||
| * @param hex Decaf-encoded 56 bytes. Not every 56-byte string is valid decaf encoding | ||
| */ | ||
| static fromHex(hex: Hex): _DecafPoint; | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| static msm(points: _DecafPoint[], scalars: bigint[]): _DecafPoint; | ||
| /** | ||
| * Encodes decaf point to Uint8Array. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode-2). | ||
| */ | ||
| toBytes(): Uint8Array; | ||
| /** | ||
| * Compare one point to another. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-equals-2). | ||
| */ | ||
| equals(other: _DecafPoint): boolean; | ||
| is0(): boolean; | ||
| } | ||
| export declare const decaf448: { | ||
| Point: typeof _DecafPoint; | ||
| }; | ||
| /** Hashing to decaf448 points / field. RFC 9380 methods. */ | ||
| export declare const decaf448_hasher: H2CHasherBase<bigint>; | ||
| /** | ||
| * Weird / bogus points, useful for debugging. | ||
| * Unlike ed25519, there is no ed448 generator point which can produce full T subgroup. | ||
| * Instead, there is a Klein four-group, which spans over 2 independent 2-torsion points: | ||
| * (0, 1), (0, -1), (-1, 0), (1, 0). | ||
| */ | ||
| export declare const ED448_TORSION_SUBGROUP: string[]; | ||
| type DcfHasher = (msg: Uint8Array, options: htfBasicOpts) => _DecafPoint; | ||
| /** @deprecated use `decaf448.Point` */ | ||
| export declare const DecafPoint: typeof _DecafPoint; | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const hashToDecaf448: DcfHasher; | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export declare const hash_to_decaf448: DcfHasher; | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export declare function edwardsToMontgomeryPub(edwardsPub: string | Uint8Array): Uint8Array; | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export declare const edwardsToMontgomery: typeof edwardsToMontgomeryPub; | ||
| export {}; | ||
| //# sourceMappingURL=ed448.d.ts.map |
| {"version":3,"file":"ed448.d.ts","sourceRoot":"","sources":["../src/ed448.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAEL,iBAAiB,EAEjB,KAAK,OAAO,EAEZ,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAiD,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAc,KAAK,cAAc,IAAI,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAA0D,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAyI9F;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,EAAE,OAAmC,CAAC;AAGxD,0FAA0F;AAC1F,eAAO,MAAM,OAAO,EAAE,OAIf,CAAC;AAER;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,gBAAsC,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,QAYf,CAAC;AA+EL,oEAAoE;AACpE,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,MAAM,CASpC,CAAC;AAgER;;;;;;GAMG;AACH,cAAM,WAAY,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IAGtD,MAAM,CAAC,IAAI,EAAE,WAAW,CAC0D;IAElF,MAAM,CAAC,IAAI,EAAE,WAAW,CACsC;IAE9D,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACS;IAElC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACS;gBAEtB,EAAE,EAAE,YAAY;IAI5B,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW;IAIvD,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI9C,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW;IAI7C,kFAAkF;IAClF,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW;IAIzC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW;IA+BhD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW;IAIrC,qFAAqF;IACrF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW;IAIjE;;;OAGG;IACH,OAAO,IAAI,UAAU;IAerB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAQnC,GAAG,IAAI,OAAO;CAGf;AAED,eAAO,MAAM,QAAQ,EAAE;IACrB,KAAK,EAAE,OAAO,WAAW,CAAC;CACF,CAAC;AAE3B,4DAA4D;AAC5D,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,MAAM,CAajD,CAAC;AAUF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAK1C,CAAC;AAEF,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,KAAK,WAAW,CAAC;AAEzE,uCAAuC;AACvC,eAAO,MAAM,UAAU,EAAE,OAAO,WAAyB,CAAC;AAC1D,+EAA+E;AAC/E,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAAsD,CAAC;AACjG,+EAA+E;AAC/E,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,CACb,CAAC;AAChC,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,SACgB,CAAC;AAC9C,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,SACc,CAAC;AAC9C,iDAAiD;AACjD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAElF;AACD,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,EAAE,OAAO,sBAA+C,CAAC"} |
-459
| /** | ||
| * Edwards448 (not Ed448-Goldilocks) curve with following addons: | ||
| * - X448 ECDH | ||
| * - Decaf cofactor elimination | ||
| * - Elligator hash-to-group / point indistinguishability | ||
| * Conforms to RFC 8032 https://www.rfc-editor.org/rfc/rfc8032.html#section-5.2 | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { shake256 } from '@noble/hashes/sha3.js'; | ||
| import { abytes, concatBytes, createHasher as wrapConstructor } from '@noble/hashes/utils.js'; | ||
| import { pippenger } from "./abstract/curve.js"; | ||
| import { edwards, PrimeEdwardsPoint, twistedEdwards, } from "./abstract/edwards.js"; | ||
| import { _DST_scalar, createHasher, expand_message_xof, } from "./abstract/hash-to-curve.js"; | ||
| import { Field, FpInvertBatch, isNegativeLE, mod, pow2 } from "./abstract/modular.js"; | ||
| import { montgomery } from "./abstract/montgomery.js"; | ||
| import { asciiToBytes, bytesToNumberLE, ensureBytes, equalBytes } from "./utils.js"; | ||
| // edwards448 curve | ||
| // a = 1n | ||
| // d = Fp.neg(39081n) | ||
| // Finite field 2n**448n - 2n**224n - 1n | ||
| // Subgroup order | ||
| // 2n**446n - 13818066809895115352007386748515426880336692474882178609894547503885n | ||
| const ed448_CURVE = { | ||
| p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffff'), | ||
| n: BigInt('0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffff7cca23e9c44edb49aed63690216cc2728dc58f552378c292ab5844f3'), | ||
| h: BigInt(4), | ||
| a: BigInt(1), | ||
| d: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffff6756'), | ||
| Gx: BigInt('0x4f1970c66bed0ded221d15a622bf36da9e146570470f1767ea6de324a3d3a46412ae1af72ab66511433b80e18b00938e2626a82bc70cc05e'), | ||
| Gy: BigInt('0x693f46716eb6bc248876203756c9c7624bea73736ca3984087789c1e05a0c2d73ad3ff1ce67c39c4fdbd132c4ed7c8ad9808795bf230fa14'), | ||
| }; | ||
| // E448 NIST curve is identical to edwards448, except for: | ||
| // d = 39082/39081 | ||
| // Gx = 3/2 | ||
| const E448_CURVE = Object.assign({}, ed448_CURVE, { | ||
| d: BigInt('0xd78b4bdc7f0daf19f24f38c29373a2ccad46157242a50f37809b1da3412a12e79ccc9c81264cfe9ad080997058fb61c4243cc32dbaa156b9'), | ||
| Gx: BigInt('0x79a70b2b70400553ae7c9df416c792c61128751ac92969240c25a07d728bdc93e21f7787ed6972249de732f38496cd11698713093e9c04fc'), | ||
| Gy: BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000001'), | ||
| }); | ||
| const shake256_114 = /* @__PURE__ */ wrapConstructor(() => shake256.create({ dkLen: 114 })); | ||
| const shake256_64 = /* @__PURE__ */ wrapConstructor(() => shake256.create({ dkLen: 64 })); | ||
| // prettier-ignore | ||
| const _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4), _11n = BigInt(11); | ||
| // prettier-ignore | ||
| const _22n = BigInt(22), _44n = BigInt(44), _88n = BigInt(88), _223n = BigInt(223); | ||
| // powPminus3div4 calculates z = x^k mod p, where k = (p-3)/4. | ||
| // Used for efficient square root calculation. | ||
| // ((P-3)/4).toString(2) would produce bits [223x 1, 0, 222x 1] | ||
| function ed448_pow_Pminus3div4(x) { | ||
| const P = ed448_CURVE.p; | ||
| const b2 = (x * x * x) % P; | ||
| const b3 = (b2 * b2 * x) % P; | ||
| const b6 = (pow2(b3, _3n, P) * b3) % P; | ||
| const b9 = (pow2(b6, _3n, P) * b3) % P; | ||
| const b11 = (pow2(b9, _2n, P) * b2) % P; | ||
| const b22 = (pow2(b11, _11n, P) * b11) % P; | ||
| const b44 = (pow2(b22, _22n, P) * b22) % P; | ||
| const b88 = (pow2(b44, _44n, P) * b44) % P; | ||
| const b176 = (pow2(b88, _88n, P) * b88) % P; | ||
| const b220 = (pow2(b176, _44n, P) * b44) % P; | ||
| const b222 = (pow2(b220, _2n, P) * b2) % P; | ||
| const b223 = (pow2(b222, _1n, P) * x) % P; | ||
| return (pow2(b223, _223n, P) * b222) % P; | ||
| } | ||
| function adjustScalarBytes(bytes) { | ||
| // Section 5: Likewise, for X448, set the two least significant bits of the first byte to 0, | ||
| bytes[0] &= 252; // 0b11111100 | ||
| // and the most significant bit of the last byte to 1. | ||
| bytes[55] |= 128; // 0b10000000 | ||
| // NOTE: is NOOP for 56 bytes scalars (X25519/X448) | ||
| bytes[56] = 0; // Byte outside of group (456 buts vs 448 bits) | ||
| return bytes; | ||
| } | ||
| // Constant-time ratio of u to v. Allows to combine inversion and square root u/√v. | ||
| // Uses algo from RFC8032 5.1.3. | ||
| function uvRatio(u, v) { | ||
| const P = ed448_CURVE.p; | ||
| // https://www.rfc-editor.org/rfc/rfc8032#section-5.2.3 | ||
| // To compute the square root of (u/v), the first step is to compute the | ||
| // candidate root x = (u/v)^((p+1)/4). This can be done using the | ||
| // following trick, to use a single modular powering for both the | ||
| // inversion of v and the square root: | ||
| // x = (u/v)^((p+1)/4) = u³v(u⁵v³)^((p-3)/4) (mod p) | ||
| const u2v = mod(u * u * v, P); // u²v | ||
| const u3v = mod(u2v * u, P); // u³v | ||
| const u5v3 = mod(u3v * u2v * v, P); // u⁵v³ | ||
| const root = ed448_pow_Pminus3div4(u5v3); | ||
| const x = mod(u3v * root, P); | ||
| // Verify that root is exists | ||
| const x2 = mod(x * x, P); // x² | ||
| // If vx² = u, the recovered x-coordinate is x. Otherwise, no | ||
| // square root exists, and the decoding fails. | ||
| return { isValid: mod(x2 * v, P) === u, value: x }; | ||
| } | ||
| // Finite field 2n**448n - 2n**224n - 1n | ||
| // The value fits in 448 bits, but we use 456-bit (57-byte) elements because of bitflags. | ||
| // - ed25519 fits in 255 bits, allowing using last 1 byte for specifying bit flag of point negation. | ||
| // - ed448 fits in 448 bits. We can't use last 1 byte: we can only use a bit 224 in the middle. | ||
| const Fp = /* @__PURE__ */ (() => Field(ed448_CURVE.p, { BITS: 456, isLE: true }))(); | ||
| const Fn = /* @__PURE__ */ (() => Field(ed448_CURVE.n, { BITS: 456, isLE: true }))(); | ||
| // decaf448 uses 448-bit (56-byte) keys | ||
| const Fp448 = /* @__PURE__ */ (() => Field(ed448_CURVE.p, { BITS: 448, isLE: true }))(); | ||
| const Fn448 = /* @__PURE__ */ (() => Field(ed448_CURVE.n, { BITS: 448, isLE: true }))(); | ||
| // SHAKE256(dom4(phflag,context)||x, 114) | ||
| function dom4(data, ctx, phflag) { | ||
| if (ctx.length > 255) | ||
| throw new Error('context must be smaller than 255, got: ' + ctx.length); | ||
| return concatBytes(asciiToBytes('SigEd448'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data); | ||
| } | ||
| // const ed448_eddsa_opts = { adjustScalarBytes, domain: dom4 }; | ||
| // const ed448_Point = edwards(ed448_CURVE, { Fp, Fn, uvRatio }); | ||
| const ED448_DEF = /* @__PURE__ */ (() => ({ | ||
| ...ed448_CURVE, | ||
| Fp, | ||
| Fn, | ||
| nBitLength: Fn.BITS, | ||
| hash: shake256_114, | ||
| adjustScalarBytes, | ||
| domain: dom4, | ||
| uvRatio, | ||
| }))(); | ||
| /** | ||
| * ed448 EdDSA curve and methods. | ||
| * @example | ||
| * import { ed448 } from '@noble/curves/ed448'; | ||
| * const { secretKey, publicKey } = ed448.keygen(); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = ed448.sign(msg, secretKey); | ||
| * const isValid = ed448.verify(sig, msg, publicKey); | ||
| */ | ||
| export const ed448 = twistedEdwards(ED448_DEF); | ||
| // There is no ed448ctx, since ed448 supports ctx by default | ||
| /** Prehashed version of ed448. Accepts already-hashed messages in sign() and verify(). */ | ||
| export const ed448ph = /* @__PURE__ */ (() => twistedEdwards({ | ||
| ...ED448_DEF, | ||
| prehash: shake256_64, | ||
| }))(); | ||
| /** | ||
| * E448 curve, defined by NIST. | ||
| * E448 != edwards448 used in ed448. | ||
| * E448 is birationally equivalent to edwards448. | ||
| */ | ||
| export const E448 = edwards(E448_CURVE); | ||
| /** | ||
| * ECDH using curve448 aka x448. | ||
| * x448 has 56-byte keys as per RFC 7748, while | ||
| * ed448 has 57-byte keys as per RFC 8032. | ||
| */ | ||
| export const x448 = /* @__PURE__ */ (() => { | ||
| const P = ed448_CURVE.p; | ||
| return montgomery({ | ||
| P, | ||
| type: 'x448', | ||
| powPminus2: (x) => { | ||
| const Pminus3div4 = ed448_pow_Pminus3div4(x); | ||
| const Pminus3 = pow2(Pminus3div4, _2n, P); | ||
| return mod(Pminus3 * x, P); // Pminus3 * x = Pminus2 | ||
| }, | ||
| adjustScalarBytes, | ||
| }); | ||
| })(); | ||
| // Hash To Curve Elligator2 Map | ||
| const ELL2_C1 = /* @__PURE__ */ (() => (Fp.ORDER - BigInt(3)) / BigInt(4))(); // 1. c1 = (q - 3) / 4 # Integer arithmetic | ||
| const ELL2_J = /* @__PURE__ */ BigInt(156326); | ||
| function map_to_curve_elligator2_curve448(u) { | ||
| let tv1 = Fp.sqr(u); // 1. tv1 = u^2 | ||
| let e1 = Fp.eql(tv1, Fp.ONE); // 2. e1 = tv1 == 1 | ||
| tv1 = Fp.cmov(tv1, Fp.ZERO, e1); // 3. tv1 = CMOV(tv1, 0, e1) # If Z * u^2 == -1, set tv1 = 0 | ||
| let xd = Fp.sub(Fp.ONE, tv1); // 4. xd = 1 - tv1 | ||
| let x1n = Fp.neg(ELL2_J); // 5. x1n = -J | ||
| let tv2 = Fp.sqr(xd); // 6. tv2 = xd^2 | ||
| let gxd = Fp.mul(tv2, xd); // 7. gxd = tv2 * xd # gxd = xd^3 | ||
| let gx1 = Fp.mul(tv1, Fp.neg(ELL2_J)); // 8. gx1 = -J * tv1 # x1n + J * xd | ||
| gx1 = Fp.mul(gx1, x1n); // 9. gx1 = gx1 * x1n # x1n^2 + J * x1n * xd | ||
| gx1 = Fp.add(gx1, tv2); // 10. gx1 = gx1 + tv2 # x1n^2 + J * x1n * xd + xd^2 | ||
| gx1 = Fp.mul(gx1, x1n); // 11. gx1 = gx1 * x1n # x1n^3 + J * x1n^2 * xd + x1n * xd^2 | ||
| let tv3 = Fp.sqr(gxd); // 12. tv3 = gxd^2 | ||
| tv2 = Fp.mul(gx1, gxd); // 13. tv2 = gx1 * gxd # gx1 * gxd | ||
| tv3 = Fp.mul(tv3, tv2); // 14. tv3 = tv3 * tv2 # gx1 * gxd^3 | ||
| let y1 = Fp.pow(tv3, ELL2_C1); // 15. y1 = tv3^c1 # (gx1 * gxd^3)^((p - 3) / 4) | ||
| y1 = Fp.mul(y1, tv2); // 16. y1 = y1 * tv2 # gx1 * gxd * (gx1 * gxd^3)^((p - 3) / 4) | ||
| let x2n = Fp.mul(x1n, Fp.neg(tv1)); // 17. x2n = -tv1 * x1n # x2 = x2n / xd = -1 * u^2 * x1n / xd | ||
| let y2 = Fp.mul(y1, u); // 18. y2 = y1 * u | ||
| y2 = Fp.cmov(y2, Fp.ZERO, e1); // 19. y2 = CMOV(y2, 0, e1) | ||
| tv2 = Fp.sqr(y1); // 20. tv2 = y1^2 | ||
| tv2 = Fp.mul(tv2, gxd); // 21. tv2 = tv2 * gxd | ||
| let e2 = Fp.eql(tv2, gx1); // 22. e2 = tv2 == gx1 | ||
| let xn = Fp.cmov(x2n, x1n, e2); // 23. xn = CMOV(x2n, x1n, e2) # If e2, x = x1, else x = x2 | ||
| let y = Fp.cmov(y2, y1, e2); // 24. y = CMOV(y2, y1, e2) # If e2, y = y1, else y = y2 | ||
| let e3 = Fp.isOdd(y); // 25. e3 = sgn0(y) == 1 # Fix sign of y | ||
| y = Fp.cmov(y, Fp.neg(y), e2 !== e3); // 26. y = CMOV(y, -y, e2 XOR e3) | ||
| return { xn, xd, yn: y, yd: Fp.ONE }; // 27. return (xn, xd, y, 1) | ||
| } | ||
| function map_to_curve_elligator2_edwards448(u) { | ||
| let { xn, xd, yn, yd } = map_to_curve_elligator2_curve448(u); // 1. (xn, xd, yn, yd) = map_to_curve_elligator2_curve448(u) | ||
| let xn2 = Fp.sqr(xn); // 2. xn2 = xn^2 | ||
| let xd2 = Fp.sqr(xd); // 3. xd2 = xd^2 | ||
| let xd4 = Fp.sqr(xd2); // 4. xd4 = xd2^2 | ||
| let yn2 = Fp.sqr(yn); // 5. yn2 = yn^2 | ||
| let yd2 = Fp.sqr(yd); // 6. yd2 = yd^2 | ||
| let xEn = Fp.sub(xn2, xd2); // 7. xEn = xn2 - xd2 | ||
| let tv2 = Fp.sub(xEn, xd2); // 8. tv2 = xEn - xd2 | ||
| xEn = Fp.mul(xEn, xd2); // 9. xEn = xEn * xd2 | ||
| xEn = Fp.mul(xEn, yd); // 10. xEn = xEn * yd | ||
| xEn = Fp.mul(xEn, yn); // 11. xEn = xEn * yn | ||
| xEn = Fp.mul(xEn, _4n); // 12. xEn = xEn * 4 | ||
| tv2 = Fp.mul(tv2, xn2); // 13. tv2 = tv2 * xn2 | ||
| tv2 = Fp.mul(tv2, yd2); // 14. tv2 = tv2 * yd2 | ||
| let tv3 = Fp.mul(yn2, _4n); // 15. tv3 = 4 * yn2 | ||
| let tv1 = Fp.add(tv3, yd2); // 16. tv1 = tv3 + yd2 | ||
| tv1 = Fp.mul(tv1, xd4); // 17. tv1 = tv1 * xd4 | ||
| let xEd = Fp.add(tv1, tv2); // 18. xEd = tv1 + tv2 | ||
| tv2 = Fp.mul(tv2, xn); // 19. tv2 = tv2 * xn | ||
| let tv4 = Fp.mul(xn, xd4); // 20. tv4 = xn * xd4 | ||
| let yEn = Fp.sub(tv3, yd2); // 21. yEn = tv3 - yd2 | ||
| yEn = Fp.mul(yEn, tv4); // 22. yEn = yEn * tv4 | ||
| yEn = Fp.sub(yEn, tv2); // 23. yEn = yEn - tv2 | ||
| tv1 = Fp.add(xn2, xd2); // 24. tv1 = xn2 + xd2 | ||
| tv1 = Fp.mul(tv1, xd2); // 25. tv1 = tv1 * xd2 | ||
| tv1 = Fp.mul(tv1, xd); // 26. tv1 = tv1 * xd | ||
| tv1 = Fp.mul(tv1, yn2); // 27. tv1 = tv1 * yn2 | ||
| tv1 = Fp.mul(tv1, BigInt(-2)); // 28. tv1 = -2 * tv1 | ||
| let yEd = Fp.add(tv2, tv1); // 29. yEd = tv2 + tv1 | ||
| tv4 = Fp.mul(tv4, yd2); // 30. tv4 = tv4 * yd2 | ||
| yEd = Fp.add(yEd, tv4); // 31. yEd = yEd + tv4 | ||
| tv1 = Fp.mul(xEd, yEd); // 32. tv1 = xEd * yEd | ||
| let e = Fp.eql(tv1, Fp.ZERO); // 33. e = tv1 == 0 | ||
| xEn = Fp.cmov(xEn, Fp.ZERO, e); // 34. xEn = CMOV(xEn, 0, e) | ||
| xEd = Fp.cmov(xEd, Fp.ONE, e); // 35. xEd = CMOV(xEd, 1, e) | ||
| yEn = Fp.cmov(yEn, Fp.ONE, e); // 36. yEn = CMOV(yEn, 1, e) | ||
| yEd = Fp.cmov(yEd, Fp.ONE, e); // 37. yEd = CMOV(yEd, 1, e) | ||
| const inv = FpInvertBatch(Fp, [xEd, yEd], true); // batch division | ||
| return { x: Fp.mul(xEn, inv[0]), y: Fp.mul(yEn, inv[1]) }; // 38. return (xEn, xEd, yEn, yEd) | ||
| } | ||
| /** Hashing / encoding to ed448 points / field. RFC 9380 methods. */ | ||
| export const ed448_hasher = /* @__PURE__ */ (() => createHasher(ed448.Point, (scalars) => map_to_curve_elligator2_edwards448(scalars[0]), { | ||
| DST: 'edwards448_XOF:SHAKE256_ELL2_RO_', | ||
| encodeDST: 'edwards448_XOF:SHAKE256_ELL2_NU_', | ||
| p: Fp.ORDER, | ||
| m: 1, | ||
| k: 224, | ||
| expand: 'xof', | ||
| hash: shake256, | ||
| }))(); | ||
| // 1-d | ||
| const ONE_MINUS_D = /* @__PURE__ */ BigInt('39082'); | ||
| // 1-2d | ||
| const ONE_MINUS_TWO_D = /* @__PURE__ */ BigInt('78163'); | ||
| // √(-d) | ||
| const SQRT_MINUS_D = /* @__PURE__ */ BigInt('98944233647732219769177004876929019128417576295529901074099889598043702116001257856802131563896515373927712232092845883226922417596214'); | ||
| // 1 / √(-d) | ||
| const INVSQRT_MINUS_D = /* @__PURE__ */ BigInt('315019913931389607337177038330951043522456072897266928557328499619017160722351061360252776265186336876723201881398623946864393857820716'); | ||
| // Calculates 1/√(number) | ||
| const invertSqrt = (number) => uvRatio(_1n, number); | ||
| /** | ||
| * Elligator map for hash-to-curve of decaf448. | ||
| * Described in [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#appendix-C) | ||
| * and [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-element-derivation-2). | ||
| */ | ||
| function calcElligatorDecafMap(r0) { | ||
| const { d } = ed448_CURVE; | ||
| const P = Fp.ORDER; | ||
| const mod = (n) => Fp.create(n); | ||
| const r = mod(-(r0 * r0)); // 1 | ||
| const u0 = mod(d * (r - _1n)); // 2 | ||
| const u1 = mod((u0 + _1n) * (u0 - r)); // 3 | ||
| const { isValid: was_square, value: v } = uvRatio(ONE_MINUS_TWO_D, mod((r + _1n) * u1)); // 4 | ||
| let v_prime = v; // 5 | ||
| if (!was_square) | ||
| v_prime = mod(r0 * v); | ||
| let sgn = _1n; // 6 | ||
| if (!was_square) | ||
| sgn = mod(-_1n); | ||
| const s = mod(v_prime * (r + _1n)); // 7 | ||
| let s_abs = s; | ||
| if (isNegativeLE(s, P)) | ||
| s_abs = mod(-s); | ||
| const s2 = s * s; | ||
| const W0 = mod(s_abs * _2n); // 8 | ||
| const W1 = mod(s2 + _1n); // 9 | ||
| const W2 = mod(s2 - _1n); // 10 | ||
| const W3 = mod(v_prime * s * (r - _1n) * ONE_MINUS_TWO_D + sgn); // 11 | ||
| return new ed448.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2)); | ||
| } | ||
| function decaf448_map(bytes) { | ||
| abytes(bytes, 112); | ||
| const skipValidation = true; | ||
| // Note: Similar to the field element decoding described in | ||
| // [RFC7748], and unlike the field element decoding described in | ||
| // Section 5.3.1, non-canonical values are accepted. | ||
| const r1 = Fp448.create(Fp448.fromBytes(bytes.subarray(0, 56), skipValidation)); | ||
| const R1 = calcElligatorDecafMap(r1); | ||
| const r2 = Fp448.create(Fp448.fromBytes(bytes.subarray(56, 112), skipValidation)); | ||
| const R2 = calcElligatorDecafMap(r2); | ||
| return new _DecafPoint(R1.add(R2)); | ||
| } | ||
| /** | ||
| * Each ed448/EdwardsPoint has 4 different equivalent points. This can be | ||
| * a source of bugs for protocols like ring signatures. Decaf was created to solve this. | ||
| * Decaf point operates in X:Y:Z:T extended coordinates like EdwardsPoint, | ||
| * but it should work in its own namespace: do not combine those two. | ||
| * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496). | ||
| */ | ||
| class _DecafPoint extends PrimeEdwardsPoint { | ||
| constructor(ep) { | ||
| super(ep); | ||
| } | ||
| static fromAffine(ap) { | ||
| return new _DecafPoint(ed448.Point.fromAffine(ap)); | ||
| } | ||
| assertSame(other) { | ||
| if (!(other instanceof _DecafPoint)) | ||
| throw new Error('DecafPoint expected'); | ||
| } | ||
| init(ep) { | ||
| return new _DecafPoint(ep); | ||
| } | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| static hashToCurve(hex) { | ||
| return decaf448_map(ensureBytes('decafHash', hex, 112)); | ||
| } | ||
| static fromBytes(bytes) { | ||
| abytes(bytes, 56); | ||
| const { d } = ed448_CURVE; | ||
| const P = Fp.ORDER; | ||
| const mod = (n) => Fp448.create(n); | ||
| const s = Fp448.fromBytes(bytes); | ||
| // 1. Check that s_bytes is the canonical encoding of a field element, or else abort. | ||
| // 2. Check that s is non-negative, or else abort | ||
| if (!equalBytes(Fn448.toBytes(s), bytes) || isNegativeLE(s, P)) | ||
| throw new Error('invalid decaf448 encoding 1'); | ||
| const s2 = mod(s * s); // 1 | ||
| const u1 = mod(_1n + s2); // 2 | ||
| const u1sq = mod(u1 * u1); | ||
| const u2 = mod(u1sq - _4n * d * s2); // 3 | ||
| const { isValid, value: invsqrt } = invertSqrt(mod(u2 * u1sq)); // 4 | ||
| let u3 = mod((s + s) * invsqrt * u1 * SQRT_MINUS_D); // 5 | ||
| if (isNegativeLE(u3, P)) | ||
| u3 = mod(-u3); | ||
| const x = mod(u3 * invsqrt * u2 * INVSQRT_MINUS_D); // 6 | ||
| const y = mod((_1n - s2) * invsqrt * u1); // 7 | ||
| const t = mod(x * y); // 8 | ||
| if (!isValid) | ||
| throw new Error('invalid decaf448 encoding 2'); | ||
| return new _DecafPoint(new ed448.Point(x, y, _1n, t)); | ||
| } | ||
| /** | ||
| * Converts decaf-encoded string to decaf point. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode-2). | ||
| * @param hex Decaf-encoded 56 bytes. Not every 56-byte string is valid decaf encoding | ||
| */ | ||
| static fromHex(hex) { | ||
| return _DecafPoint.fromBytes(ensureBytes('decafHex', hex, 56)); | ||
| } | ||
| /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */ | ||
| static msm(points, scalars) { | ||
| return pippenger(_DecafPoint, Fn, points, scalars); | ||
| } | ||
| /** | ||
| * Encodes decaf point to Uint8Array. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode-2). | ||
| */ | ||
| toBytes() { | ||
| const { X, Z, T } = this.ep; | ||
| const P = Fp.ORDER; | ||
| const mod = (n) => Fp.create(n); | ||
| const u1 = mod(mod(X + T) * mod(X - T)); // 1 | ||
| const x2 = mod(X * X); | ||
| const { value: invsqrt } = invertSqrt(mod(u1 * ONE_MINUS_D * x2)); // 2 | ||
| let ratio = mod(invsqrt * u1 * SQRT_MINUS_D); // 3 | ||
| if (isNegativeLE(ratio, P)) | ||
| ratio = mod(-ratio); | ||
| const u2 = mod(INVSQRT_MINUS_D * ratio * Z - T); // 4 | ||
| let s = mod(ONE_MINUS_D * invsqrt * X * u2); // 5 | ||
| if (isNegativeLE(s, P)) | ||
| s = mod(-s); | ||
| return Fn448.toBytes(s); | ||
| } | ||
| /** | ||
| * Compare one point to another. | ||
| * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-equals-2). | ||
| */ | ||
| equals(other) { | ||
| this.assertSame(other); | ||
| const { X: X1, Y: Y1 } = this.ep; | ||
| const { X: X2, Y: Y2 } = other.ep; | ||
| // (x1 * y2 == y1 * x2) | ||
| return Fp.create(X1 * Y2) === Fp.create(Y1 * X2); | ||
| } | ||
| is0() { | ||
| return this.equals(_DecafPoint.ZERO); | ||
| } | ||
| } | ||
| // The following gymnastics is done because typescript strips comments otherwise | ||
| // prettier-ignore | ||
| _DecafPoint.BASE = | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448.Point.BASE).multiplyUnsafe(_2n))(); | ||
| // prettier-ignore | ||
| _DecafPoint.ZERO = | ||
| /* @__PURE__ */ (() => new _DecafPoint(ed448.Point.ZERO))(); | ||
| // prettier-ignore | ||
| _DecafPoint.Fp = | ||
| /* @__PURE__ */ (() => Fp448)(); | ||
| // prettier-ignore | ||
| _DecafPoint.Fn = | ||
| /* @__PURE__ */ (() => Fn448)(); | ||
| export const decaf448 = { Point: _DecafPoint }; | ||
| /** Hashing to decaf448 points / field. RFC 9380 methods. */ | ||
| export const decaf448_hasher = { | ||
| hashToCurve(msg, options) { | ||
| const DST = options?.DST || 'decaf448_XOF:SHAKE256_D448MAP_RO_'; | ||
| return decaf448_map(expand_message_xof(msg, DST, 112, 224, shake256)); | ||
| }, | ||
| // Warning: has big modulo bias of 2^-64. | ||
| // RFC is invalid. RFC says "use 64-byte xof", while for 2^-112 bias | ||
| // it must use 84-byte xof (56+56/2), not 64. | ||
| hashToScalar(msg, options = { DST: _DST_scalar }) { | ||
| // Can't use `Fn448.fromBytes()`. 64-byte input => 56-byte field element | ||
| const xof = expand_message_xof(msg, options.DST, 64, 256, shake256); | ||
| return Fn448.create(bytesToNumberLE(xof)); | ||
| }, | ||
| }; | ||
| // export const decaf448_oprf: OPRF = createORPF({ | ||
| // name: 'decaf448-SHAKE256', | ||
| // Point: DecafPoint, | ||
| // hash: (msg: Uint8Array) => shake256(msg, { dkLen: 64 }), | ||
| // hashToGroup: decaf448_hasher.hashToCurve, | ||
| // hashToScalar: decaf448_hasher.hashToScalar, | ||
| // }); | ||
| /** | ||
| * Weird / bogus points, useful for debugging. | ||
| * Unlike ed25519, there is no ed448 generator point which can produce full T subgroup. | ||
| * Instead, there is a Klein four-group, which spans over 2 independent 2-torsion points: | ||
| * (0, 1), (0, -1), (-1, 0), (1, 0). | ||
| */ | ||
| export const ED448_TORSION_SUBGROUP = [ | ||
| '010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | ||
| 'fefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff00', | ||
| '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | ||
| '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080', | ||
| ]; | ||
| /** @deprecated use `decaf448.Point` */ | ||
| export const DecafPoint = _DecafPoint; | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const hashToCurve = /* @__PURE__ */ (() => ed448_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const encodeToCurve = /* @__PURE__ */ (() => ed448_hasher.encodeToCurve)(); | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const hashToDecaf448 = /* @__PURE__ */ (() => decaf448_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */ | ||
| export const hash_to_decaf448 = /* @__PURE__ */ (() => decaf448_hasher.hashToCurve)(); | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export function edwardsToMontgomeryPub(edwardsPub) { | ||
| return ed448.utils.toMontgomery(ensureBytes('pub', edwardsPub)); | ||
| } | ||
| /** @deprecated use `ed448.utils.toMontgomery` */ | ||
| export const edwardsToMontgomery = edwardsToMontgomeryPub; | ||
| //# sourceMappingURL=ed448.js.map |
| {"version":3,"file":"ed448.js","sourceRoot":"","sources":["../src/ed448.ts"],"names":[],"mappings":"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"} |
| export {}; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""} |
-17
| /** | ||
| * Audited & minimal JS implementation of elliptic curve cryptography. | ||
| * @module | ||
| * @example | ||
| ```js | ||
| import { secp256k1, schnorr } from '@noble/curves/secp256k1.js'; | ||
| import { ed25519, ed25519ph, ed25519ctx, x25519, RistrettoPoint } from '@noble/curves/ed25519.js'; | ||
| import { ed448, ed448ph, ed448ctx, x448 } from '@noble/curves/ed448.js'; | ||
| import { p256, p384, p521 } from '@noble/curves/nist.js'; | ||
| import { bls12_381 } from '@noble/curves/bls12-381.js'; | ||
| import { bn254 } from '@noble/curves/bn254.js'; | ||
| import { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from '@noble/curves/abstract/utils.js'; | ||
| ``` | ||
| */ | ||
| throw new Error('root module cannot be imported: import submodules instead. Check out README'); | ||
| export {}; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC"} |
| /** | ||
| * @deprecated | ||
| * @module | ||
| */ | ||
| import { jubjub_findGroupHash, jubjub_groupHash, jubjub as jubjubn } from './misc.ts'; | ||
| /** @deprecated use `import { jubjub } from '@noble/curves/misc.js';` */ | ||
| export declare const jubjub: typeof jubjubn; | ||
| /** @deprecated use `import { jubjub_findGroupHash } from '@noble/curves/misc.js';` */ | ||
| export declare const findGroupHash: typeof jubjub_findGroupHash; | ||
| /** @deprecated use `import { jubjub_groupHash } from '@noble/curves/misc.js';` */ | ||
| export declare const groupHash: typeof jubjub_groupHash; | ||
| //# sourceMappingURL=jubjub.d.ts.map |
| {"version":3,"file":"jubjub.d.ts","sourceRoot":"","sources":["../src/jubjub.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtF,wEAAwE;AACxE,eAAO,MAAM,MAAM,EAAE,OAAO,OAAiB,CAAC;AAC9C,sFAAsF;AACtF,eAAO,MAAM,aAAa,EAAE,OAAO,oBAA2C,CAAC;AAC/E,kFAAkF;AAClF,eAAO,MAAM,SAAS,EAAE,OAAO,gBAAmC,CAAC"} |
| /** | ||
| * @deprecated | ||
| * @module | ||
| */ | ||
| import { jubjub_findGroupHash, jubjub_groupHash, jubjub as jubjubn } from "./misc.js"; | ||
| /** @deprecated use `import { jubjub } from '@noble/curves/misc.js';` */ | ||
| export const jubjub = jubjubn; | ||
| /** @deprecated use `import { jubjub_findGroupHash } from '@noble/curves/misc.js';` */ | ||
| export const findGroupHash = jubjub_findGroupHash; | ||
| /** @deprecated use `import { jubjub_groupHash } from '@noble/curves/misc.js';` */ | ||
| export const groupHash = jubjub_groupHash; | ||
| //# sourceMappingURL=jubjub.js.map |
| {"version":3,"file":"jubjub.js","sourceRoot":"","sources":["../src/jubjub.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtF,wEAAwE;AACxE,MAAM,CAAC,MAAM,MAAM,GAAmB,OAAO,CAAC;AAC9C,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAgC,oBAAoB,CAAC;AAC/E,kFAAkF;AAClF,MAAM,CAAC,MAAM,SAAS,GAA4B,gBAAgB,CAAC"} |
| import { type CurveFn, type EdwardsPoint } from './abstract/edwards.ts'; | ||
| import { type CurveFn as WCurveFn } from './abstract/weierstrass.ts'; | ||
| /** Curve over scalar field of bls12-381. jubjub Fp = bls n */ | ||
| export declare const jubjub: CurveFn; | ||
| /** Curve over scalar field of bn254. babyjubjub Fp = bn254 n */ | ||
| export declare const babyjubjub: CurveFn; | ||
| export declare function jubjub_groupHash(tag: Uint8Array, personalization: Uint8Array): EdwardsPoint; | ||
| export declare function jubjub_findGroupHash(m: Uint8Array, personalization: Uint8Array): EdwardsPoint; | ||
| export declare const pasta_p: bigint; | ||
| export declare const pasta_q: bigint; | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export declare const pallas: WCurveFn; | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export declare const vesta: WCurveFn; | ||
| //# sourceMappingURL=misc.d.ts.map |
| {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAe,KAAK,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAgBlF,8DAA8D;AAC9D,eAAO,MAAM,MAAM,EAAE,OAInB,CAAC;AAWH,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,OAIvB,CAAC;AAOH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAU3F;AAKD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAW7F;AAID,eAAO,MAAM,OAAO,EAAE,MAErB,CAAC;AACF,eAAO,MAAM,OAAO,EAAE,MAErB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,QASnB,CAAC;AACH;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,QASlB,CAAC"} |
-109
| /** | ||
| * Miscellaneous, rarely used curves. | ||
| * jubjub, babyjubjub, pallas, vesta. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { blake256 } from '@noble/hashes/blake1.js'; | ||
| import { blake2s } from '@noble/hashes/blake2.js'; | ||
| import { sha256, sha512 } from '@noble/hashes/sha2.js'; | ||
| import { concatBytes, utf8ToBytes } from '@noble/hashes/utils.js'; | ||
| import { twistedEdwards, } from "./abstract/edwards.js"; | ||
| import { Field, mod } from "./abstract/modular.js"; | ||
| import { weierstrass } from "./abstract/weierstrass.js"; | ||
| import { bls12_381_Fr } from "./bls12-381.js"; | ||
| import { bn254_Fr } from "./bn254.js"; | ||
| // Jubjub curves have 𝔽p over scalar fields of other curves. They are friendly to ZK proofs. | ||
| // jubjub Fp = bls n. babyjubjub Fp = bn254 n. | ||
| // verify manually, check bls12-381.ts and bn254.ts. | ||
| const jubjub_CURVE = { | ||
| p: bls12_381_Fr.ORDER, | ||
| n: BigInt('0xe7db4ea6533afa906673b0101343b00a6682093ccc81082d0970e5ed6f72cb7'), | ||
| h: BigInt(8), | ||
| a: BigInt('0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000'), | ||
| d: BigInt('0x2a9318e74bfa2b48f5fd9207e6bd7fd4292d7f6d37579d2601065fd6d6343eb1'), | ||
| Gx: BigInt('0x11dafe5d23e1218086a365b99fbf3d3be72f6afd7d1f72623e6b071492d1122b'), | ||
| Gy: BigInt('0x1d523cf1ddab1a1793132e78c866c0c33e26ba5cc220fed7cc3f870e59d292aa'), | ||
| }; | ||
| /** Curve over scalar field of bls12-381. jubjub Fp = bls n */ | ||
| export const jubjub = /* @__PURE__ */ twistedEdwards({ | ||
| ...jubjub_CURVE, | ||
| Fp: bls12_381_Fr, | ||
| hash: sha512, | ||
| }); | ||
| const babyjubjub_CURVE = { | ||
| p: bn254_Fr.ORDER, | ||
| n: BigInt('0x30644e72e131a029b85045b68181585d59f76dc1c90770533b94bee1c9093788'), | ||
| h: BigInt(8), | ||
| a: BigInt('168700'), | ||
| d: BigInt('168696'), | ||
| Gx: BigInt('0x23343e3445b673d38bcba38f25645adb494b1255b1162bb40f41a59f4d4b45e'), | ||
| Gy: BigInt('0xc19139cb84c680a6e14116da06056174a0cfa121e6e5c2450f87d64fc000001'), | ||
| }; | ||
| /** Curve over scalar field of bn254. babyjubjub Fp = bn254 n */ | ||
| export const babyjubjub = /* @__PURE__ */ twistedEdwards({ | ||
| ...babyjubjub_CURVE, | ||
| Fp: bn254_Fr, | ||
| hash: blake256, | ||
| }); | ||
| const jubjub_gh_first_block = utf8ToBytes('096b36a5804bfacef1691e173c366a47ff5ba84a44f26ddd7e8d9f79d5b42df0'); | ||
| // Returns point at JubJub curve which is prime order and not zero | ||
| export function jubjub_groupHash(tag, personalization) { | ||
| const h = blake2s.create({ personalization, dkLen: 32 }); | ||
| h.update(jubjub_gh_first_block); | ||
| h.update(tag); | ||
| // NOTE: returns ExtendedPoint, in case it will be multiplied later | ||
| let p = jubjub.Point.fromBytes(h.digest()); | ||
| // NOTE: cannot replace with isSmallOrder, returns Point*8 | ||
| p = p.multiply(jubjub_CURVE.h); | ||
| if (p.equals(jubjub.Point.ZERO)) | ||
| throw new Error('Point has small order'); | ||
| return p; | ||
| } | ||
| // No secret data is leaked here at all. | ||
| // It operates over public data: | ||
| // const G_SPEND = jubjub.findGroupHash(Uint8Array.of(), utf8ToBytes('Item_G_')); | ||
| export function jubjub_findGroupHash(m, personalization) { | ||
| const tag = concatBytes(m, Uint8Array.of(0)); | ||
| const hashes = []; | ||
| for (let i = 0; i < 256; i++) { | ||
| tag[tag.length - 1] = i; | ||
| try { | ||
| hashes.push(jubjub_groupHash(tag, personalization)); | ||
| } | ||
| catch (e) { } | ||
| } | ||
| if (!hashes.length) | ||
| throw new Error('findGroupHash tag overflow'); | ||
| return hashes[0]; | ||
| } | ||
| // Pasta curves. See [Spec](https://o1-labs.github.io/proof-systems/specs/pasta.html). | ||
| export const pasta_p = BigInt('0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001'); | ||
| export const pasta_q = BigInt('0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001'); | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export const pallas = weierstrass({ | ||
| a: BigInt(0), | ||
| b: BigInt(5), | ||
| Fp: Field(pasta_p), | ||
| n: pasta_q, | ||
| Gx: mod(BigInt(-1), pasta_p), | ||
| Gy: BigInt(2), | ||
| h: BigInt(1), | ||
| hash: sha256, | ||
| }); | ||
| /** | ||
| * @deprecated | ||
| */ | ||
| export const vesta = weierstrass({ | ||
| a: BigInt(0), | ||
| b: BigInt(5), | ||
| Fp: Field(pasta_q), | ||
| n: pasta_p, | ||
| Gx: mod(BigInt(-1), pasta_q), | ||
| Gy: BigInt(2), | ||
| h: BigInt(1), | ||
| hash: sha256, | ||
| }); | ||
| //# sourceMappingURL=misc.js.map |
| {"version":3,"file":"misc.js","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"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"} |
| import { type CurveFnWithCreate } from './_shortw_utils.ts'; | ||
| import { type H2CHasher } from './abstract/hash-to-curve.ts'; | ||
| /** NIST P256 (aka secp256r1, prime256v1) curve, ECDSA and ECDH methods. */ | ||
| export declare const p256: CurveFnWithCreate; | ||
| /** Hashing / encoding to p256 points / field. RFC 9380 methods. */ | ||
| export declare const p256_hasher: H2CHasher<bigint>; | ||
| /** NIST P384 (aka secp384r1) curve, ECDSA and ECDH methods. */ | ||
| export declare const p384: CurveFnWithCreate; | ||
| /** Hashing / encoding to p384 points / field. RFC 9380 methods. */ | ||
| export declare const p384_hasher: H2CHasher<bigint>; | ||
| /** NIST P521 (aka secp521r1) curve, ECDSA and ECDH methods. */ | ||
| export declare const p521: CurveFnWithCreate; | ||
| /** @deprecated use `p256` for consistency with `p256_hasher` */ | ||
| export declare const secp256r1: typeof p256; | ||
| /** @deprecated use `p384` for consistency with `p384_hasher` */ | ||
| export declare const secp384r1: typeof p384; | ||
| /** @deprecated use `p521` for consistency with `p521_hasher` */ | ||
| export declare const secp521r1: typeof p521; | ||
| /** Hashing / encoding to p521 points / field. RFC 9380 methods. */ | ||
| export declare const p521_hasher: H2CHasher<bigint>; | ||
| //# sourceMappingURL=nist.d.ts.map |
| {"version":3,"file":"nist.d.ts","sourceRoot":"","sources":["../src/nist.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AA+E3E,2EAA2E;AAC3E,eAAO,MAAM,IAAI,EAAE,iBAGlB,CAAC;AACF,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAkBtC,CAAC;AAUL,+DAA+D;AAC/D,eAAO,MAAM,IAAI,EAAE,iBAGlB,CAAC;AACF,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAkBtC,CAAC;AAWL,+DAA+D;AAC/D,eAAO,MAAM,IAAI,EAAE,iBAGlB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,SAAS,EAAE,OAAO,IAAW,CAAC;AAC3C,gEAAgE;AAChE,eAAO,MAAM,SAAS,EAAE,OAAO,IAAW,CAAC;AAC3C,gEAAgE;AAChE,eAAO,MAAM,SAAS,EAAE,OAAO,IAAW,CAAC;AAE3C,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAkBtC,CAAC"} |
-132
| /** | ||
| * Internal module for NIST P256, P384, P521 curves. | ||
| * Do not use for now. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { sha256, sha384, sha512 } from '@noble/hashes/sha2.js'; | ||
| import { createCurve } from "./_shortw_utils.js"; | ||
| import { createHasher } from "./abstract/hash-to-curve.js"; | ||
| import { Field } from "./abstract/modular.js"; | ||
| import { mapToCurveSimpleSWU, } from "./abstract/weierstrass.js"; | ||
| // p = 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n - 1n | ||
| // a = Fp256.create(BigInt('-3')); | ||
| const p256_CURVE = { | ||
| p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'), | ||
| n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'), | ||
| h: BigInt(1), | ||
| a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'), | ||
| b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'), | ||
| Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'), | ||
| Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'), | ||
| }; | ||
| // p = 2n**384n - 2n**128n - 2n**96n + 2n**32n - 1n | ||
| const p384_CURVE = { | ||
| p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff'), | ||
| n: BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973'), | ||
| h: BigInt(1), | ||
| a: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc'), | ||
| b: BigInt('0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef'), | ||
| Gx: BigInt('0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7'), | ||
| Gy: BigInt('0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f'), | ||
| }; | ||
| // p = 2n**521n - 1n | ||
| const p521_CURVE = { | ||
| p: BigInt('0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'), | ||
| n: BigInt('0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409'), | ||
| h: BigInt(1), | ||
| a: BigInt('0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc'), | ||
| b: BigInt('0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00'), | ||
| Gx: BigInt('0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66'), | ||
| Gy: BigInt('0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650'), | ||
| }; | ||
| const Fp256 = Field(p256_CURVE.p); | ||
| const Fp384 = Field(p384_CURVE.p); | ||
| const Fp521 = Field(p521_CURVE.p); | ||
| function createSWU(Point, opts) { | ||
| const map = mapToCurveSimpleSWU(Point.Fp, opts); | ||
| return (scalars) => map(scalars[0]); | ||
| } | ||
| /** NIST P256 (aka secp256r1, prime256v1) curve, ECDSA and ECDH methods. */ | ||
| export const p256 = createCurve({ ...p256_CURVE, Fp: Fp256, lowS: false }, sha256); | ||
| /** Hashing / encoding to p256 points / field. RFC 9380 methods. */ | ||
| export const p256_hasher = /* @__PURE__ */ (() => { | ||
| return createHasher(p256.Point, createSWU(p256.Point, { | ||
| A: p256_CURVE.a, | ||
| B: p256_CURVE.b, | ||
| Z: p256.Point.Fp.create(BigInt('-10')), | ||
| }), { | ||
| DST: 'P256_XMD:SHA-256_SSWU_RO_', | ||
| encodeDST: 'P256_XMD:SHA-256_SSWU_NU_', | ||
| p: p256_CURVE.p, | ||
| m: 1, | ||
| k: 128, | ||
| expand: 'xmd', | ||
| hash: sha256, | ||
| }); | ||
| })(); | ||
| // export const p256_oprf: OPRF = createORPF({ | ||
| // name: 'P256-SHA256', | ||
| // Point: p256.Point, | ||
| // hash: sha256, | ||
| // hashToGroup: p256_hasher.hashToCurve, | ||
| // hashToScalar: p256_hasher.hashToScalar, | ||
| // }); | ||
| /** NIST P384 (aka secp384r1) curve, ECDSA and ECDH methods. */ | ||
| export const p384 = createCurve({ ...p384_CURVE, Fp: Fp384, lowS: false }, sha384); | ||
| /** Hashing / encoding to p384 points / field. RFC 9380 methods. */ | ||
| export const p384_hasher = /* @__PURE__ */ (() => { | ||
| return createHasher(p384.Point, createSWU(p384.Point, { | ||
| A: p384_CURVE.a, | ||
| B: p384_CURVE.b, | ||
| Z: p384.Point.Fp.create(BigInt('-12')), | ||
| }), { | ||
| DST: 'P384_XMD:SHA-384_SSWU_RO_', | ||
| encodeDST: 'P384_XMD:SHA-384_SSWU_NU_', | ||
| p: p384_CURVE.p, | ||
| m: 1, | ||
| k: 192, | ||
| expand: 'xmd', | ||
| hash: sha384, | ||
| }); | ||
| })(); | ||
| // export const p384_oprf: OPRF = createORPF({ | ||
| // name: 'P384-SHA384', | ||
| // Point: p384.Point, | ||
| // hash: sha384, | ||
| // hashToGroup: p384_hasher.hashToCurve, | ||
| // hashToScalar: p384_hasher.hashToScalar, | ||
| // }); | ||
| // const Fn521 = Field(p521_CURVE.n, { allowedScalarLengths: [65, 66] }); | ||
| /** NIST P521 (aka secp521r1) curve, ECDSA and ECDH methods. */ | ||
| export const p521 = createCurve({ ...p521_CURVE, Fp: Fp521, lowS: false, allowedPrivateKeyLengths: [130, 131, 132] }, sha512); | ||
| /** @deprecated use `p256` for consistency with `p256_hasher` */ | ||
| export const secp256r1 = p256; | ||
| /** @deprecated use `p384` for consistency with `p384_hasher` */ | ||
| export const secp384r1 = p384; | ||
| /** @deprecated use `p521` for consistency with `p521_hasher` */ | ||
| export const secp521r1 = p521; | ||
| /** Hashing / encoding to p521 points / field. RFC 9380 methods. */ | ||
| export const p521_hasher = /* @__PURE__ */ (() => { | ||
| return createHasher(p521.Point, createSWU(p521.Point, { | ||
| A: p521_CURVE.a, | ||
| B: p521_CURVE.b, | ||
| Z: p521.Point.Fp.create(BigInt('-4')), | ||
| }), { | ||
| DST: 'P521_XMD:SHA-512_SSWU_RO_', | ||
| encodeDST: 'P521_XMD:SHA-512_SSWU_NU_', | ||
| p: p521_CURVE.p, | ||
| m: 1, | ||
| k: 256, | ||
| expand: 'xmd', | ||
| hash: sha512, | ||
| }); | ||
| })(); | ||
| // export const p521_oprf: OPRF = createORPF({ | ||
| // name: 'P521-SHA512', | ||
| // Point: p521.Point, | ||
| // hash: sha512, | ||
| // hashToGroup: p521_hasher.hashToCurve, | ||
| // hashToScalar: p521_hasher.hashToScalar, // produces L=98 just like in RFC | ||
| // }); | ||
| //# sourceMappingURL=nist.js.map |
| {"version":3,"file":"nist.js","sourceRoot":"","sources":["../src/nist.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * NIST secp256r1 aka p256. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { p256 as p256n } from './nist.ts'; | ||
| /** @deprecated use `import { p256 } from '@noble/curves/nist.js';` */ | ||
| export declare const p256: typeof p256n; | ||
| /** @deprecated use `import { p256 } from '@noble/curves/nist.js';` */ | ||
| export declare const secp256r1: typeof p256n; | ||
| /** @deprecated use `import { p256_hasher } from '@noble/curves/nist.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { p256_hasher } from '@noble/curves/nist.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| //# sourceMappingURL=p256.d.ts.map |
| {"version":3,"file":"p256.d.ts","sourceRoot":"","sources":["../src/p256.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAe,IAAI,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AACvD,sEAAsE;AACtE,eAAO,MAAM,IAAI,EAAE,OAAO,KAAa,CAAC;AACxC,sEAAsE;AACtE,eAAO,MAAM,SAAS,EAAE,OAAO,KAAa,CAAC;AAC7C,6EAA6E;AAC7E,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAAqD,CAAC;AAChG,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,CAAuD,CAAC"} |
-16
| /** | ||
| * NIST secp256r1 aka p256. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import {} from "./abstract/hash-to-curve.js"; | ||
| import { p256_hasher, p256 as p256n } from "./nist.js"; | ||
| /** @deprecated use `import { p256 } from '@noble/curves/nist.js';` */ | ||
| export const p256 = p256n; | ||
| /** @deprecated use `import { p256 } from '@noble/curves/nist.js';` */ | ||
| export const secp256r1 = p256n; | ||
| /** @deprecated use `import { p256_hasher } from '@noble/curves/nist.js';` */ | ||
| export const hashToCurve = /* @__PURE__ */ (() => p256_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { p256_hasher } from '@noble/curves/nist.js';` */ | ||
| export const encodeToCurve = /* @__PURE__ */ (() => p256_hasher.encodeToCurve)(); | ||
| //# sourceMappingURL=p256.js.map |
| {"version":3,"file":"p256.js","sourceRoot":"","sources":["../src/p256.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAkB,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AACvD,sEAAsE;AACtE,MAAM,CAAC,MAAM,IAAI,GAAiB,KAAK,CAAC;AACxC,sEAAsE;AACtE,MAAM,CAAC,MAAM,SAAS,GAAiB,KAAK,CAAC;AAC7C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAsB,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;AAChG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAsB,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC"} |
| /** | ||
| * NIST secp384r1 aka p384. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { p384 as p384n } from './nist.ts'; | ||
| /** @deprecated use `import { p384 } from '@noble/curves/nist.js';` */ | ||
| export declare const p384: typeof p384n; | ||
| /** @deprecated use `import { p384 } from '@noble/curves/nist.js';` */ | ||
| export declare const secp384r1: typeof p384n; | ||
| /** @deprecated use `import { p384_hasher } from '@noble/curves/nist.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { p384_hasher } from '@noble/curves/nist.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| //# sourceMappingURL=p384.d.ts.map |
| {"version":3,"file":"p384.d.ts","sourceRoot":"","sources":["../src/p384.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAe,IAAI,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AACvD,sEAAsE;AACtE,eAAO,MAAM,IAAI,EAAE,OAAO,KAAa,CAAC;AACxC,sEAAsE;AACtE,eAAO,MAAM,SAAS,EAAE,OAAO,KAAa,CAAC;AAC7C,6EAA6E;AAC7E,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAAqD,CAAC;AAChG,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,CAAuD,CAAC"} |
-16
| /** | ||
| * NIST secp384r1 aka p384. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import {} from "./abstract/hash-to-curve.js"; | ||
| import { p384_hasher, p384 as p384n } from "./nist.js"; | ||
| /** @deprecated use `import { p384 } from '@noble/curves/nist.js';` */ | ||
| export const p384 = p384n; | ||
| /** @deprecated use `import { p384 } from '@noble/curves/nist.js';` */ | ||
| export const secp384r1 = p384n; | ||
| /** @deprecated use `import { p384_hasher } from '@noble/curves/nist.js';` */ | ||
| export const hashToCurve = /* @__PURE__ */ (() => p384_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { p384_hasher } from '@noble/curves/nist.js';` */ | ||
| export const encodeToCurve = /* @__PURE__ */ (() => p384_hasher.encodeToCurve)(); | ||
| //# sourceMappingURL=p384.js.map |
| {"version":3,"file":"p384.js","sourceRoot":"","sources":["../src/p384.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAkB,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AACvD,sEAAsE;AACtE,MAAM,CAAC,MAAM,IAAI,GAAiB,KAAK,CAAC;AACxC,sEAAsE;AACtE,MAAM,CAAC,MAAM,SAAS,GAAiB,KAAK,CAAC;AAC7C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAsB,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;AAChG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAsB,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC"} |
| /** | ||
| * NIST secp521r1 aka p521. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { p521 as p521n } from './nist.ts'; | ||
| /** @deprecated use `import { p521 } from '@noble/curves/nist.js';` */ | ||
| export declare const p521: typeof p521n; | ||
| /** @deprecated use `import { p521 } from '@noble/curves/nist.js';` */ | ||
| export declare const secp521r1: typeof p521n; | ||
| /** @deprecated use `import { p521_hasher } from '@noble/curves/nist.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { p521_hasher } from '@noble/curves/nist.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| //# sourceMappingURL=p521.d.ts.map |
| {"version":3,"file":"p521.d.ts","sourceRoot":"","sources":["../src/p521.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAe,IAAI,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AACvD,sEAAsE;AACtE,eAAO,MAAM,IAAI,EAAE,OAAO,KAAa,CAAC;AACxC,sEAAsE;AACtE,eAAO,MAAM,SAAS,EAAE,OAAO,KAAa,CAAC;AAC7C,6EAA6E;AAC7E,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CAAqD,CAAC;AAChG,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,CAAuD,CAAC"} |
-16
| /** | ||
| * NIST secp521r1 aka p521. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import {} from "./abstract/hash-to-curve.js"; | ||
| import { p521_hasher, p521 as p521n } from "./nist.js"; | ||
| /** @deprecated use `import { p521 } from '@noble/curves/nist.js';` */ | ||
| export const p521 = p521n; | ||
| /** @deprecated use `import { p521 } from '@noble/curves/nist.js';` */ | ||
| export const secp521r1 = p521n; | ||
| /** @deprecated use `import { p521_hasher } from '@noble/curves/nist.js';` */ | ||
| export const hashToCurve = /* @__PURE__ */ (() => p521_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { p521_hasher } from '@noble/curves/nist.js';` */ | ||
| export const encodeToCurve = /* @__PURE__ */ (() => p521_hasher.encodeToCurve)(); | ||
| //# sourceMappingURL=p521.js.map |
| {"version":3,"file":"p521.js","sourceRoot":"","sources":["../src/p521.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EAAkB,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AACvD,sEAAsE;AACtE,MAAM,CAAC,MAAM,IAAI,GAAiB,KAAK,CAAC;AACxC,sEAAsE;AACtE,MAAM,CAAC,MAAM,SAAS,GAAiB,KAAK,CAAC;AAC7C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAsB,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;AAChG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAsB,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC"} |
| { | ||
| "type": "module", | ||
| "sideEffects": false | ||
| } |
| /** | ||
| * @deprecated | ||
| * @module | ||
| */ | ||
| import { pallas as pn, vesta as vn } from './misc.ts'; | ||
| /** @deprecated */ | ||
| export declare const pallas: typeof pn; | ||
| /** @deprecated */ | ||
| export declare const vesta: typeof vn; | ||
| //# sourceMappingURL=pasta.d.ts.map |
| {"version":3,"file":"pasta.d.ts","sourceRoot":"","sources":["../src/pasta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,WAAW,CAAC;AACtD,kBAAkB;AAClB,eAAO,MAAM,MAAM,EAAE,OAAO,EAAO,CAAC;AACpC,kBAAkB;AAClB,eAAO,MAAM,KAAK,EAAE,OAAO,EAAO,CAAC"} |
-10
| /** | ||
| * @deprecated | ||
| * @module | ||
| */ | ||
| import { pallas as pn, vesta as vn } from "./misc.js"; | ||
| /** @deprecated */ | ||
| export const pallas = pn; | ||
| /** @deprecated */ | ||
| export const vesta = vn; | ||
| //# sourceMappingURL=pasta.js.map |
| {"version":3,"file":"pasta.js","sourceRoot":"","sources":["../src/pasta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,WAAW,CAAC;AACtD,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAc,EAAE,CAAC;AACpC,kBAAkB;AAClB,MAAM,CAAC,MAAM,KAAK,GAAc,EAAE,CAAC"} |
| import { type CurveFnWithCreate } from './_shortw_utils.ts'; | ||
| import type { CurveLengths } from './abstract/curve.ts'; | ||
| import { type H2CHasher, type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { mod } from './abstract/modular.ts'; | ||
| import { type WeierstrassPoint as PointType, type WeierstrassPointCons } from './abstract/weierstrass.ts'; | ||
| import type { Hex, PrivKey } from './utils.ts'; | ||
| import { bytesToNumberBE, numberToBytesBE } from './utils.ts'; | ||
| /** | ||
| * secp256k1 curve, ECDSA and ECDH methods. | ||
| * | ||
| * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n` | ||
| * | ||
| * @example | ||
| * ```js | ||
| * import { secp256k1 } from '@noble/curves/secp256k1'; | ||
| * const { secretKey, publicKey } = secp256k1.keygen(); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = secp256k1.sign(msg, secretKey); | ||
| * const isValid = secp256k1.verify(sig, msg, publicKey) === true; | ||
| * ``` | ||
| */ | ||
| export declare const secp256k1: CurveFnWithCreate; | ||
| declare function taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array; | ||
| /** | ||
| * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point. | ||
| * @returns valid point checked for being on-curve | ||
| */ | ||
| declare function lift_x(x: bigint): PointType<bigint>; | ||
| /** | ||
| * Schnorr public key is just `x` coordinate of Point as per BIP340. | ||
| */ | ||
| declare function schnorrGetPublicKey(secretKey: Hex): Uint8Array; | ||
| /** | ||
| * Creates Schnorr signature as per BIP340. Verifies itself before returning anything. | ||
| * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous. | ||
| */ | ||
| declare function schnorrSign(message: Hex, secretKey: PrivKey, auxRand?: Hex): Uint8Array; | ||
| /** | ||
| * Verifies Schnorr signature. | ||
| * Will swallow errors & return false except for initial type validation of arguments. | ||
| */ | ||
| declare function schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean; | ||
| export type SecpSchnorr = { | ||
| keygen: (seed?: Uint8Array) => { | ||
| secretKey: Uint8Array; | ||
| publicKey: Uint8Array; | ||
| }; | ||
| getPublicKey: typeof schnorrGetPublicKey; | ||
| sign: typeof schnorrSign; | ||
| verify: typeof schnorrVerify; | ||
| Point: WeierstrassPointCons<bigint>; | ||
| utils: { | ||
| randomSecretKey: (seed?: Uint8Array) => Uint8Array; | ||
| pointToBytes: (point: PointType<bigint>) => Uint8Array; | ||
| lift_x: typeof lift_x; | ||
| taggedHash: typeof taggedHash; | ||
| /** @deprecated use `randomSecretKey` */ | ||
| randomPrivateKey: (seed?: Uint8Array) => Uint8Array; | ||
| /** @deprecated use `utils` */ | ||
| numberToBytesBE: typeof numberToBytesBE; | ||
| /** @deprecated use `utils` */ | ||
| bytesToNumberBE: typeof bytesToNumberBE; | ||
| /** @deprecated use `modular` */ | ||
| mod: typeof mod; | ||
| }; | ||
| lengths: CurveLengths; | ||
| }; | ||
| /** | ||
| * Schnorr signatures over secp256k1. | ||
| * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki | ||
| * @example | ||
| * ```js | ||
| * import { schnorr } from '@noble/curves/secp256k1'; | ||
| * const { secretKey, publicKey } = schnorr.keygen(); | ||
| * // const publicKey = schnorr.getPublicKey(secretKey); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = schnorr.sign(msg, secretKey); | ||
| * const isValid = schnorr.verify(sig, msg, publicKey); | ||
| * ``` | ||
| */ | ||
| export declare const schnorr: SecpSchnorr; | ||
| /** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */ | ||
| export declare const secp256k1_hasher: H2CHasher<bigint>; | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export declare const hashToCurve: H2CMethod<bigint>; | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export declare const encodeToCurve: H2CMethod<bigint>; | ||
| export {}; | ||
| //# sourceMappingURL=secp256k1.d.ts.map |
| {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../src/secp256k1.ts"],"names":[],"mappings":"AAUA,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAyB,GAAG,EAAQ,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAIL,KAAK,gBAAgB,IAAI,SAAS,EAElC,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,eAAe,EAIf,eAAe,EAEhB,MAAM,YAAY,CAAC;AAyDpB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,EAAE,iBAGvB,CAAC;AAMF,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAQtE;AAeD;;;GAGG;AACH,iBAAS,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAY5C;AASD;;GAEG;AACH,iBAAS,mBAAmB,CAAC,SAAS,EAAE,GAAG,GAAG,UAAU,CAEvD;AAED;;;GAGG;AACH,iBAAS,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAE,GAAqB,GAAG,UAAU,CAgBjG;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAsB5E;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;IAChF,YAAY,EAAE,OAAO,mBAAmB,CAAC;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC;IACzB,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE;QACL,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;QACnD,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;QACvD,MAAM,EAAE,OAAO,MAAM,CAAC;QACtB,UAAU,EAAE,OAAO,UAAU,CAAC;QAE9B,wCAAwC;QACxC,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;QACpD,8BAA8B;QAC9B,eAAe,EAAE,OAAO,eAAe,CAAC;QACxC,8BAA8B;QAC9B,eAAe,EAAE,OAAO,eAAe,CAAC;QACxC,gCAAgC;QAChC,GAAG,EAAE,OAAO,GAAG,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AACF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,OAAO,EAAE,WAsClB,CAAC;AA0CL,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAgBzC,CAAC;AAEP,uFAAuF;AACvF,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,CACT,CAAC;AAElC,uFAAuF;AACvF,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,CACT,CAAC"} |
-294
| /** | ||
| * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf). | ||
| * | ||
| * Belongs to Koblitz curves: it has efficiently-computable GLV endomorphism ψ, | ||
| * check out {@link EndomorphismOpts}. Seems to be rigid (not backdoored). | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { sha256 } from '@noble/hashes/sha2.js'; | ||
| import { randomBytes } from '@noble/hashes/utils.js'; | ||
| import { createCurve } from "./_shortw_utils.js"; | ||
| import { createHasher, isogenyMap, } from "./abstract/hash-to-curve.js"; | ||
| import { Field, mapHashToField, mod, pow2 } from "./abstract/modular.js"; | ||
| import { _normFnElement, mapToCurveSimpleSWU, } from "./abstract/weierstrass.js"; | ||
| import { bytesToNumberBE, concatBytes, ensureBytes, inRange, numberToBytesBE, utf8ToBytes, } from "./utils.js"; | ||
| // Seems like generator was produced from some seed: | ||
| // `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x` | ||
| // // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n | ||
| const secp256k1_CURVE = { | ||
| p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'), | ||
| n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'), | ||
| h: BigInt(1), | ||
| a: BigInt(0), | ||
| b: BigInt(7), | ||
| Gx: BigInt('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'), | ||
| Gy: BigInt('0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'), | ||
| }; | ||
| const secp256k1_ENDO = { | ||
| beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'), | ||
| basises: [ | ||
| [BigInt('0x3086d221a7d46bcde86c90e49284eb15'), -BigInt('0xe4437ed6010e88286f547fa90abfe4c3')], | ||
| [BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'), BigInt('0x3086d221a7d46bcde86c90e49284eb15')], | ||
| ], | ||
| }; | ||
| const _0n = /* @__PURE__ */ BigInt(0); | ||
| const _1n = /* @__PURE__ */ BigInt(1); | ||
| const _2n = /* @__PURE__ */ BigInt(2); | ||
| /** | ||
| * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit. | ||
| * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00] | ||
| */ | ||
| function sqrtMod(y) { | ||
| const P = secp256k1_CURVE.p; | ||
| // prettier-ignore | ||
| const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22); | ||
| // prettier-ignore | ||
| const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88); | ||
| const b2 = (y * y * y) % P; // x^3, 11 | ||
| const b3 = (b2 * b2 * y) % P; // x^7 | ||
| const b6 = (pow2(b3, _3n, P) * b3) % P; | ||
| const b9 = (pow2(b6, _3n, P) * b3) % P; | ||
| const b11 = (pow2(b9, _2n, P) * b2) % P; | ||
| const b22 = (pow2(b11, _11n, P) * b11) % P; | ||
| const b44 = (pow2(b22, _22n, P) * b22) % P; | ||
| const b88 = (pow2(b44, _44n, P) * b44) % P; | ||
| const b176 = (pow2(b88, _88n, P) * b88) % P; | ||
| const b220 = (pow2(b176, _44n, P) * b44) % P; | ||
| const b223 = (pow2(b220, _3n, P) * b3) % P; | ||
| const t1 = (pow2(b223, _23n, P) * b22) % P; | ||
| const t2 = (pow2(t1, _6n, P) * b2) % P; | ||
| const root = pow2(t2, _2n, P); | ||
| if (!Fpk1.eql(Fpk1.sqr(root), y)) | ||
| throw new Error('Cannot find square root'); | ||
| return root; | ||
| } | ||
| const Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod }); | ||
| /** | ||
| * secp256k1 curve, ECDSA and ECDH methods. | ||
| * | ||
| * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n` | ||
| * | ||
| * @example | ||
| * ```js | ||
| * import { secp256k1 } from '@noble/curves/secp256k1'; | ||
| * const { secretKey, publicKey } = secp256k1.keygen(); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = secp256k1.sign(msg, secretKey); | ||
| * const isValid = secp256k1.verify(sig, msg, publicKey) === true; | ||
| * ``` | ||
| */ | ||
| export const secp256k1 = createCurve({ ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO }, sha256); | ||
| // Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code. | ||
| // https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki | ||
| /** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */ | ||
| const TAGGED_HASH_PREFIXES = {}; | ||
| function taggedHash(tag, ...messages) { | ||
| let tagP = TAGGED_HASH_PREFIXES[tag]; | ||
| if (tagP === undefined) { | ||
| const tagH = sha256(utf8ToBytes(tag)); | ||
| tagP = concatBytes(tagH, tagH); | ||
| TAGGED_HASH_PREFIXES[tag] = tagP; | ||
| } | ||
| return sha256(concatBytes(tagP, ...messages)); | ||
| } | ||
| // ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03 | ||
| const pointToBytes = (point) => point.toBytes(true).slice(1); | ||
| const Pointk1 = /* @__PURE__ */ (() => secp256k1.Point)(); | ||
| const hasEven = (y) => y % _2n === _0n; | ||
| // Calculate point, scalar and bytes | ||
| function schnorrGetExtPubKey(priv) { | ||
| const { Fn, BASE } = Pointk1; | ||
| const d_ = _normFnElement(Fn, priv); | ||
| const p = BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside | ||
| const scalar = hasEven(p.y) ? d_ : Fn.neg(d_); | ||
| return { scalar, bytes: pointToBytes(p) }; | ||
| } | ||
| /** | ||
| * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point. | ||
| * @returns valid point checked for being on-curve | ||
| */ | ||
| function lift_x(x) { | ||
| const Fp = Fpk1; | ||
| if (!Fp.isValidNot0(x)) | ||
| throw new Error('invalid x: Fail if x ≥ p'); | ||
| const xx = Fp.create(x * x); | ||
| const c = Fp.create(xx * x + BigInt(7)); // Let c = x³ + 7 mod p. | ||
| let y = Fp.sqrt(c); // Let y = c^(p+1)/4 mod p. Same as sqrt(). | ||
| // Return the unique point P such that x(P) = x and | ||
| // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise. | ||
| if (!hasEven(y)) | ||
| y = Fp.neg(y); | ||
| const p = Pointk1.fromAffine({ x, y }); | ||
| p.assertValidity(); | ||
| return p; | ||
| } | ||
| const num = bytesToNumberBE; | ||
| /** | ||
| * Create tagged hash, convert it to bigint, reduce modulo-n. | ||
| */ | ||
| function challenge(...args) { | ||
| return Pointk1.Fn.create(num(taggedHash('BIP0340/challenge', ...args))); | ||
| } | ||
| /** | ||
| * Schnorr public key is just `x` coordinate of Point as per BIP340. | ||
| */ | ||
| function schnorrGetPublicKey(secretKey) { | ||
| return schnorrGetExtPubKey(secretKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G) | ||
| } | ||
| /** | ||
| * Creates Schnorr signature as per BIP340. Verifies itself before returning anything. | ||
| * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous. | ||
| */ | ||
| function schnorrSign(message, secretKey, auxRand = randomBytes(32)) { | ||
| const { Fn } = Pointk1; | ||
| const m = ensureBytes('message', message); | ||
| const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder | ||
| const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array | ||
| const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a) | ||
| const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m) | ||
| // Let k' = int(rand) mod n. Fail if k' = 0. Let R = k'⋅G | ||
| const { bytes: rx, scalar: k } = schnorrGetExtPubKey(rand); | ||
| const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n. | ||
| const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n). | ||
| sig.set(rx, 0); | ||
| sig.set(Fn.toBytes(Fn.create(k + e * d)), 32); | ||
| // If Verify(bytes(P), m, sig) (see below) returns failure, abort | ||
| if (!schnorrVerify(sig, m, px)) | ||
| throw new Error('sign: Invalid signature produced'); | ||
| return sig; | ||
| } | ||
| /** | ||
| * Verifies Schnorr signature. | ||
| * Will swallow errors & return false except for initial type validation of arguments. | ||
| */ | ||
| function schnorrVerify(signature, message, publicKey) { | ||
| const { Fn, BASE } = Pointk1; | ||
| const sig = ensureBytes('signature', signature, 64); | ||
| const m = ensureBytes('message', message); | ||
| const pub = ensureBytes('publicKey', publicKey, 32); | ||
| try { | ||
| const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails | ||
| const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p. | ||
| if (!inRange(r, _1n, secp256k1_CURVE.p)) | ||
| return false; | ||
| const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n. | ||
| if (!inRange(s, _1n, secp256k1_CURVE.n)) | ||
| return false; | ||
| // int(challenge(bytes(r)||bytes(P)||m))%n | ||
| const e = challenge(Fn.toBytes(r), pointToBytes(P), m); | ||
| // R = s⋅G - e⋅P, where -eP == (n-e)P | ||
| const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e))); | ||
| const { x, y } = R.toAffine(); | ||
| // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r. | ||
| if (R.is0() || !hasEven(y) || x !== r) | ||
| return false; | ||
| return true; | ||
| } | ||
| catch (error) { | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Schnorr signatures over secp256k1. | ||
| * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki | ||
| * @example | ||
| * ```js | ||
| * import { schnorr } from '@noble/curves/secp256k1'; | ||
| * const { secretKey, publicKey } = schnorr.keygen(); | ||
| * // const publicKey = schnorr.getPublicKey(secretKey); | ||
| * const msg = new TextEncoder().encode('hello'); | ||
| * const sig = schnorr.sign(msg, secretKey); | ||
| * const isValid = schnorr.verify(sig, msg, publicKey); | ||
| * ``` | ||
| */ | ||
| export const schnorr = /* @__PURE__ */ (() => { | ||
| const size = 32; | ||
| const seedLength = 48; | ||
| const randomSecretKey = (seed = randomBytes(seedLength)) => { | ||
| return mapHashToField(seed, secp256k1_CURVE.n); | ||
| }; | ||
| // TODO: remove | ||
| secp256k1.utils.randomSecretKey; | ||
| function keygen(seed) { | ||
| const secretKey = randomSecretKey(seed); | ||
| return { secretKey, publicKey: schnorrGetPublicKey(secretKey) }; | ||
| } | ||
| return { | ||
| keygen, | ||
| getPublicKey: schnorrGetPublicKey, | ||
| sign: schnorrSign, | ||
| verify: schnorrVerify, | ||
| Point: Pointk1, | ||
| utils: { | ||
| randomSecretKey: randomSecretKey, | ||
| randomPrivateKey: randomSecretKey, | ||
| taggedHash, | ||
| // TODO: remove | ||
| lift_x, | ||
| pointToBytes, | ||
| numberToBytesBE, | ||
| bytesToNumberBE, | ||
| mod, | ||
| }, | ||
| lengths: { | ||
| secretKey: size, | ||
| publicKey: size, | ||
| publicKeyHasPrefix: false, | ||
| signature: size * 2, | ||
| seed: seedLength, | ||
| }, | ||
| }; | ||
| })(); | ||
| const isoMap = /* @__PURE__ */ (() => isogenyMap(Fpk1, [ | ||
| // xNum | ||
| [ | ||
| '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7', | ||
| '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581', | ||
| '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262', | ||
| '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c', | ||
| ], | ||
| // xDen | ||
| [ | ||
| '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b', | ||
| '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14', | ||
| '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1 | ||
| ], | ||
| // yNum | ||
| [ | ||
| '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c', | ||
| '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3', | ||
| '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931', | ||
| '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84', | ||
| ], | ||
| // yDen | ||
| [ | ||
| '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b', | ||
| '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573', | ||
| '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f', | ||
| '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1 | ||
| ], | ||
| ].map((i) => i.map((j) => BigInt(j)))))(); | ||
| const mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fpk1, { | ||
| A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'), | ||
| B: BigInt('1771'), | ||
| Z: Fpk1.create(BigInt('-11')), | ||
| }))(); | ||
| /** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */ | ||
| export const secp256k1_hasher = /* @__PURE__ */ (() => createHasher(secp256k1.Point, (scalars) => { | ||
| const { x, y } = mapSWU(Fpk1.create(scalars[0])); | ||
| return isoMap(x, y); | ||
| }, { | ||
| DST: 'secp256k1_XMD:SHA-256_SSWU_RO_', | ||
| encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_', | ||
| p: Fpk1.ORDER, | ||
| m: 1, | ||
| k: 128, | ||
| expand: 'xmd', | ||
| hash: sha256, | ||
| }))(); | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export const hashToCurve = /* @__PURE__ */ (() => secp256k1_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */ | ||
| export const encodeToCurve = /* @__PURE__ */ (() => secp256k1_hasher.encodeToCurve)(); | ||
| //# sourceMappingURL=secp256k1.js.map |
| {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../src/secp256k1.ts"],"names":[],"mappings":"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"} |
-110
| export { abytes, anumber, bytesToHex, bytesToUtf8, concatBytes, hexToBytes, isBytes, randomBytes, utf8ToBytes, } from '@noble/hashes/utils.js'; | ||
| export type Hex = Uint8Array | string; | ||
| export type PrivKey = Hex | bigint; | ||
| export type CHash = { | ||
| (message: Uint8Array | string): Uint8Array; | ||
| blockLen: number; | ||
| outputLen: number; | ||
| create(opts?: { | ||
| dkLen?: number; | ||
| }): any; | ||
| }; | ||
| export type FHash = (message: Uint8Array | string) => Uint8Array; | ||
| export declare function abool(title: string, value: boolean): void; | ||
| export declare function _abool2(value: boolean, title?: string): boolean; | ||
| /** Asserts something is Uint8Array. */ | ||
| export declare function _abytes2(value: Uint8Array, length?: number, title?: string): Uint8Array; | ||
| export declare function numberToHexUnpadded(num: number | bigint): string; | ||
| export declare function hexToNumber(hex: string): bigint; | ||
| export declare function bytesToNumberBE(bytes: Uint8Array): bigint; | ||
| export declare function bytesToNumberLE(bytes: Uint8Array): bigint; | ||
| export declare function numberToBytesBE(n: number | bigint, len: number): Uint8Array; | ||
| export declare function numberToBytesLE(n: number | bigint, len: number): Uint8Array; | ||
| export declare function numberToVarBytesBE(n: number | bigint): Uint8Array; | ||
| /** | ||
| * Takes hex string or Uint8Array, converts to Uint8Array. | ||
| * Validates output length. | ||
| * Will throw error for other types. | ||
| * @param title descriptive title for an error e.g. 'secret key' | ||
| * @param hex hex string or Uint8Array | ||
| * @param expectedLength optional, will compare to result array's length | ||
| * @returns | ||
| */ | ||
| export declare function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array; | ||
| export declare function equalBytes(a: Uint8Array, b: Uint8Array): boolean; | ||
| /** | ||
| * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer, | ||
| * and Buffer#slice creates mutable copy. Never use Buffers! | ||
| */ | ||
| export declare function copyBytes(bytes: Uint8Array): Uint8Array; | ||
| /** | ||
| * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols | ||
| * Should be safe to use for things expected to be ASCII. | ||
| * Returns exact same result as utf8ToBytes for ASCII or throws. | ||
| */ | ||
| export declare function asciiToBytes(ascii: string): Uint8Array; | ||
| export declare function inRange(n: bigint, min: bigint, max: bigint): boolean; | ||
| /** | ||
| * Asserts min <= n < max. NOTE: It's < max and not <= max. | ||
| * @example | ||
| * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n) | ||
| */ | ||
| export declare function aInRange(title: string, n: bigint, min: bigint, max: bigint): void; | ||
| /** | ||
| * Calculates amount of bits in a bigint. | ||
| * Same as `n.toString(2).length` | ||
| * TODO: merge with nLength in modular | ||
| */ | ||
| export declare function bitLen(n: bigint): number; | ||
| /** | ||
| * Gets single bit at position. | ||
| * NOTE: first bit position is 0 (same as arrays) | ||
| * Same as `!!+Array.from(n.toString(2)).reverse()[pos]` | ||
| */ | ||
| export declare function bitGet(n: bigint, pos: number): bigint; | ||
| /** | ||
| * Sets single bit at position. | ||
| */ | ||
| export declare function bitSet(n: bigint, pos: number, value: boolean): bigint; | ||
| /** | ||
| * Calculate mask for N bits. Not using ** operator with bigints because of old engines. | ||
| * Same as BigInt(`0b${Array(i).fill('1').join('')}`) | ||
| */ | ||
| export declare const bitMask: (n: number) => bigint; | ||
| type Pred<T> = (v: Uint8Array) => T | undefined; | ||
| /** | ||
| * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs. | ||
| * @returns function that will call DRBG until 2nd arg returns something meaningful | ||
| * @example | ||
| * const drbg = createHmacDRBG<Key>(32, 32, hmac); | ||
| * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined | ||
| */ | ||
| export declare function createHmacDrbg<T>(hashLen: number, qByteLen: number, hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array): (seed: Uint8Array, predicate: Pred<T>) => T; | ||
| declare const validatorFns: { | ||
| readonly bigint: (val: any) => boolean; | ||
| readonly function: (val: any) => boolean; | ||
| readonly boolean: (val: any) => boolean; | ||
| readonly string: (val: any) => boolean; | ||
| readonly stringOrUint8Array: (val: any) => boolean; | ||
| readonly isSafeInteger: (val: any) => boolean; | ||
| readonly array: (val: any) => boolean; | ||
| readonly field: (val: any, object: any) => any; | ||
| readonly hash: (val: any) => boolean; | ||
| }; | ||
| type Validator = keyof typeof validatorFns; | ||
| type ValMap<T extends Record<string, any>> = { | ||
| [K in keyof T]?: Validator; | ||
| }; | ||
| export declare function validateObject<T extends Record<string, any>>(object: T, validators: ValMap<T>, optValidators?: ValMap<T>): T; | ||
| export declare function isHash(val: CHash): boolean; | ||
| export declare function _validateObject(object: Record<string, any>, fields: Record<string, string>, optFields?: Record<string, string>): void; | ||
| /** | ||
| * throws not implemented error | ||
| */ | ||
| export declare const notImplemented: () => never; | ||
| /** | ||
| * Memoizes (caches) computation result. | ||
| * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed. | ||
| */ | ||
| export declare function memoized<T extends object, R, O extends any[]>(fn: (arg: T, ...args: O) => R): (arg: T, ...args: O) => R; | ||
| //# sourceMappingURL=utils.d.ts.map |
| {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"} |
-322
| /** | ||
| * Hex, bytes and number utilities. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { abytes as abytes_, bytesToHex as bytesToHex_, concatBytes as concatBytes_, hexToBytes as hexToBytes_, isBytes as isBytes_, } from '@noble/hashes/utils.js'; | ||
| export { abytes, anumber, bytesToHex, bytesToUtf8, concatBytes, hexToBytes, isBytes, randomBytes, utf8ToBytes, } from '@noble/hashes/utils.js'; | ||
| const _0n = /* @__PURE__ */ BigInt(0); | ||
| const _1n = /* @__PURE__ */ BigInt(1); | ||
| export function abool(title, value) { | ||
| if (typeof value !== 'boolean') | ||
| throw new Error(title + ' boolean expected, got ' + value); | ||
| } | ||
| // tmp name until v2 | ||
| export function _abool2(value, title = '') { | ||
| if (typeof value !== 'boolean') { | ||
| const prefix = title && `"${title}"`; | ||
| throw new Error(prefix + 'expected boolean, got type=' + typeof value); | ||
| } | ||
| return value; | ||
| } | ||
| // tmp name until v2 | ||
| /** Asserts something is Uint8Array. */ | ||
| export function _abytes2(value, length, title = '') { | ||
| const bytes = isBytes_(value); | ||
| const len = value?.length; | ||
| const needsLen = length !== undefined; | ||
| if (!bytes || (needsLen && len !== length)) { | ||
| const prefix = title && `"${title}" `; | ||
| const ofLen = needsLen ? ` of length ${length}` : ''; | ||
| const got = bytes ? `length=${len}` : `type=${typeof value}`; | ||
| throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got); | ||
| } | ||
| return value; | ||
| } | ||
| // Used in weierstrass, der | ||
| export function numberToHexUnpadded(num) { | ||
| const hex = num.toString(16); | ||
| return hex.length & 1 ? '0' + hex : hex; | ||
| } | ||
| export function hexToNumber(hex) { | ||
| if (typeof hex !== 'string') | ||
| throw new Error('hex string expected, got ' + typeof hex); | ||
| return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian | ||
| } | ||
| // BE: Big Endian, LE: Little Endian | ||
| export function bytesToNumberBE(bytes) { | ||
| return hexToNumber(bytesToHex_(bytes)); | ||
| } | ||
| export function bytesToNumberLE(bytes) { | ||
| abytes_(bytes); | ||
| return hexToNumber(bytesToHex_(Uint8Array.from(bytes).reverse())); | ||
| } | ||
| export function numberToBytesBE(n, len) { | ||
| return hexToBytes_(n.toString(16).padStart(len * 2, '0')); | ||
| } | ||
| export function numberToBytesLE(n, len) { | ||
| return numberToBytesBE(n, len).reverse(); | ||
| } | ||
| // Unpadded, rarely used | ||
| export function numberToVarBytesBE(n) { | ||
| return hexToBytes_(numberToHexUnpadded(n)); | ||
| } | ||
| /** | ||
| * Takes hex string or Uint8Array, converts to Uint8Array. | ||
| * Validates output length. | ||
| * Will throw error for other types. | ||
| * @param title descriptive title for an error e.g. 'secret key' | ||
| * @param hex hex string or Uint8Array | ||
| * @param expectedLength optional, will compare to result array's length | ||
| * @returns | ||
| */ | ||
| export function ensureBytes(title, hex, expectedLength) { | ||
| let res; | ||
| if (typeof hex === 'string') { | ||
| try { | ||
| res = hexToBytes_(hex); | ||
| } | ||
| catch (e) { | ||
| throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e); | ||
| } | ||
| } | ||
| else if (isBytes_(hex)) { | ||
| // Uint8Array.from() instead of hash.slice() because node.js Buffer | ||
| // is instance of Uint8Array, and its slice() creates **mutable** copy | ||
| res = Uint8Array.from(hex); | ||
| } | ||
| else { | ||
| throw new Error(title + ' must be hex string or Uint8Array'); | ||
| } | ||
| const len = res.length; | ||
| if (typeof expectedLength === 'number' && len !== expectedLength) | ||
| throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len); | ||
| return res; | ||
| } | ||
| // Compares 2 u8a-s in kinda constant time | ||
| export function equalBytes(a, b) { | ||
| if (a.length !== b.length) | ||
| return false; | ||
| let diff = 0; | ||
| for (let i = 0; i < a.length; i++) | ||
| diff |= a[i] ^ b[i]; | ||
| return diff === 0; | ||
| } | ||
| /** | ||
| * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer, | ||
| * and Buffer#slice creates mutable copy. Never use Buffers! | ||
| */ | ||
| export function copyBytes(bytes) { | ||
| return Uint8Array.from(bytes); | ||
| } | ||
| /** | ||
| * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols | ||
| * Should be safe to use for things expected to be ASCII. | ||
| * Returns exact same result as utf8ToBytes for ASCII or throws. | ||
| */ | ||
| export function asciiToBytes(ascii) { | ||
| return Uint8Array.from(ascii, (c, i) => { | ||
| const charCode = c.charCodeAt(0); | ||
| if (c.length !== 1 || charCode > 127) { | ||
| throw new Error(`string contains non-ASCII character "${ascii[i]}" with code ${charCode} at position ${i}`); | ||
| } | ||
| return charCode; | ||
| }); | ||
| } | ||
| /** | ||
| * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99]) | ||
| */ | ||
| // export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_; | ||
| /** | ||
| * Converts bytes to string using UTF8 encoding. | ||
| * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc' | ||
| */ | ||
| // export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_; | ||
| // Is positive bigint | ||
| const isPosBig = (n) => typeof n === 'bigint' && _0n <= n; | ||
| export function inRange(n, min, max) { | ||
| return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max; | ||
| } | ||
| /** | ||
| * Asserts min <= n < max. NOTE: It's < max and not <= max. | ||
| * @example | ||
| * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n) | ||
| */ | ||
| export function aInRange(title, n, min, max) { | ||
| // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)? | ||
| // consider P=256n, min=0n, max=P | ||
| // - a for min=0 would require -1: `inRange('x', x, -1n, P)` | ||
| // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)` | ||
| // - our way is the cleanest: `inRange('x', x, 0n, P) | ||
| if (!inRange(n, min, max)) | ||
| throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n); | ||
| } | ||
| // Bit operations | ||
| /** | ||
| * Calculates amount of bits in a bigint. | ||
| * Same as `n.toString(2).length` | ||
| * TODO: merge with nLength in modular | ||
| */ | ||
| export function bitLen(n) { | ||
| let len; | ||
| for (len = 0; n > _0n; n >>= _1n, len += 1) | ||
| ; | ||
| return len; | ||
| } | ||
| /** | ||
| * Gets single bit at position. | ||
| * NOTE: first bit position is 0 (same as arrays) | ||
| * Same as `!!+Array.from(n.toString(2)).reverse()[pos]` | ||
| */ | ||
| export function bitGet(n, pos) { | ||
| return (n >> BigInt(pos)) & _1n; | ||
| } | ||
| /** | ||
| * Sets single bit at position. | ||
| */ | ||
| export function bitSet(n, pos, value) { | ||
| return n | ((value ? _1n : _0n) << BigInt(pos)); | ||
| } | ||
| /** | ||
| * Calculate mask for N bits. Not using ** operator with bigints because of old engines. | ||
| * Same as BigInt(`0b${Array(i).fill('1').join('')}`) | ||
| */ | ||
| export const bitMask = (n) => (_1n << BigInt(n)) - _1n; | ||
| /** | ||
| * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs. | ||
| * @returns function that will call DRBG until 2nd arg returns something meaningful | ||
| * @example | ||
| * const drbg = createHmacDRBG<Key>(32, 32, hmac); | ||
| * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined | ||
| */ | ||
| export function createHmacDrbg(hashLen, qByteLen, hmacFn) { | ||
| if (typeof hashLen !== 'number' || hashLen < 2) | ||
| throw new Error('hashLen must be a number'); | ||
| if (typeof qByteLen !== 'number' || qByteLen < 2) | ||
| throw new Error('qByteLen must be a number'); | ||
| if (typeof hmacFn !== 'function') | ||
| throw new Error('hmacFn must be a function'); | ||
| // Step B, Step C: set hashLen to 8*ceil(hlen/8) | ||
| const u8n = (len) => new Uint8Array(len); // creates Uint8Array | ||
| const u8of = (byte) => Uint8Array.of(byte); // another shortcut | ||
| let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs. | ||
| let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same | ||
| let i = 0; // Iterations counter, will throw when over 1000 | ||
| const reset = () => { | ||
| v.fill(1); | ||
| k.fill(0); | ||
| i = 0; | ||
| }; | ||
| const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values) | ||
| const reseed = (seed = u8n(0)) => { | ||
| // HMAC-DRBG reseed() function. Steps D-G | ||
| k = h(u8of(0x00), seed); // k = hmac(k || v || 0x00 || seed) | ||
| v = h(); // v = hmac(k || v) | ||
| if (seed.length === 0) | ||
| return; | ||
| k = h(u8of(0x01), seed); // k = hmac(k || v || 0x01 || seed) | ||
| v = h(); // v = hmac(k || v) | ||
| }; | ||
| const gen = () => { | ||
| // HMAC-DRBG generate() function | ||
| if (i++ >= 1000) | ||
| throw new Error('drbg: tried 1000 values'); | ||
| let len = 0; | ||
| const out = []; | ||
| while (len < qByteLen) { | ||
| v = h(); | ||
| const sl = v.slice(); | ||
| out.push(sl); | ||
| len += v.length; | ||
| } | ||
| return concatBytes_(...out); | ||
| }; | ||
| const genUntil = (seed, pred) => { | ||
| reset(); | ||
| reseed(seed); // Steps D-G | ||
| let res = undefined; // Step H: grind until k is in [1..n-1] | ||
| while (!(res = pred(gen()))) | ||
| reseed(); | ||
| reset(); | ||
| return res; | ||
| }; | ||
| return genUntil; | ||
| } | ||
| // Validating curves and fields | ||
| const validatorFns = { | ||
| bigint: (val) => typeof val === 'bigint', | ||
| function: (val) => typeof val === 'function', | ||
| boolean: (val) => typeof val === 'boolean', | ||
| string: (val) => typeof val === 'string', | ||
| stringOrUint8Array: (val) => typeof val === 'string' || isBytes_(val), | ||
| isSafeInteger: (val) => Number.isSafeInteger(val), | ||
| array: (val) => Array.isArray(val), | ||
| field: (val, object) => object.Fp.isValid(val), | ||
| hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen), | ||
| }; | ||
| // type Record<K extends string | number | symbol, T> = { [P in K]: T; } | ||
| export function validateObject(object, validators, optValidators = {}) { | ||
| const checkField = (fieldName, type, isOptional) => { | ||
| const checkVal = validatorFns[type]; | ||
| if (typeof checkVal !== 'function') | ||
| throw new Error('invalid validator function'); | ||
| const val = object[fieldName]; | ||
| if (isOptional && val === undefined) | ||
| return; | ||
| if (!checkVal(val, object)) { | ||
| throw new Error('param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val); | ||
| } | ||
| }; | ||
| for (const [fieldName, type] of Object.entries(validators)) | ||
| checkField(fieldName, type, false); | ||
| for (const [fieldName, type] of Object.entries(optValidators)) | ||
| checkField(fieldName, type, true); | ||
| return object; | ||
| } | ||
| // validate type tests | ||
| // const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 }; | ||
| // const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok! | ||
| // // Should fail type-check | ||
| // const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' }); | ||
| // const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' }); | ||
| // const z3 = validateObject(o, { test: 'boolean', z: 'bug' }); | ||
| // const z4 = validateObject(o, { a: 'boolean', z: 'bug' }); | ||
| export function isHash(val) { | ||
| return typeof val === 'function' && Number.isSafeInteger(val.outputLen); | ||
| } | ||
| export function _validateObject(object, fields, optFields = {}) { | ||
| if (!object || typeof object !== 'object') | ||
| throw new Error('expected valid options object'); | ||
| function checkField(fieldName, expectedType, isOpt) { | ||
| const val = object[fieldName]; | ||
| if (isOpt && val === undefined) | ||
| return; | ||
| const current = typeof val; | ||
| if (current !== expectedType || val === null) | ||
| throw new Error(`param "${fieldName}" is invalid: expected ${expectedType}, got ${current}`); | ||
| } | ||
| Object.entries(fields).forEach(([k, v]) => checkField(k, v, false)); | ||
| Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true)); | ||
| } | ||
| /** | ||
| * throws not implemented error | ||
| */ | ||
| export const notImplemented = () => { | ||
| throw new Error('not implemented'); | ||
| }; | ||
| /** | ||
| * Memoizes (caches) computation result. | ||
| * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed. | ||
| */ | ||
| export function memoized(fn) { | ||
| const map = new WeakMap(); | ||
| return (arg, ...args) => { | ||
| const val = map.get(arg); | ||
| if (val !== undefined) | ||
| return val; | ||
| const computed = fn(arg, ...args); | ||
| map.set(arg, computed); | ||
| return computed; | ||
| }; | ||
| } | ||
| //# sourceMappingURL=utils.js.map |
| {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sEAAsE;AACtE,OAAO,EACL,MAAM,IAAI,OAAO,EACjB,UAAU,IAAI,WAAW,EACzB,WAAW,IAAI,YAAY,EAC3B,UAAU,IAAI,WAAW,EACzB,OAAO,IAAI,QAAQ,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,OAAO,EACP,WAAW,EACX,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAWtC,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,yBAAyB,GAAG,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,OAAO,CAAC,KAAc,EAAE,QAAgB,EAAE;IACxD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,6BAA6B,GAAG,OAAO,KAAK,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oBAAoB;AACpB,uCAAuC;AACvC,MAAM,UAAU,QAAQ,CAAC,KAAiB,EAAE,MAAe,EAAE,QAAgB,EAAE;IAC7E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,CAAC;IACtC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,GAAG,KAAK,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,OAAO,KAAK,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,OAAO,GAAG,CAAC,CAAC;IACvF,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa;AAC7D,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,OAAO,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,OAAO,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAkB,EAAE,GAAW;IAC7D,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,CAAkB,EAAE,GAAW;IAC7D,OAAO,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3C,CAAC;AACD,wBAAwB;AACxB,MAAM,UAAU,kBAAkB,CAAC,CAAkB;IACnD,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,GAAQ,EAAE,cAAuB;IAC1E,IAAI,GAAe,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,4CAA4C,GAAG,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,mEAAmE;QACnE,sEAAsE;QACtE,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,mCAAmC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,GAAG,KAAK,cAAc;QAC9D,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,aAAa,GAAG,cAAc,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,UAAU,CAAC,CAAa,EAAE,CAAa;IACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,wCAAwC,KAAK,CAAC,CAAC,CAAC,eAAe,QAAQ,gBAAgB,CAAC,EAAE,CAC3F,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,gEAAgE;AAChE;;;GAGG;AACH,gEAAgE;AAEhE,qBAAqB;AACrB,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC,CAAC;AAElE,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IACzD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,CAAS,EAAE,GAAW,EAAE,GAAW;IACzE,uEAAuE;IACvE,iCAAiC;IACjC,qEAAqE;IACrE,yEAAyE;IACzE,mEAAmE;IACnE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,iBAAiB;AAEjB;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,IAAI,GAAG,CAAC;IACR,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,CAAC;IAC5C,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,CAAS,EAAE,GAAW;IAC3C,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,CAAS,EAAE,GAAW,EAAE,KAAc;IAC3D,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAKvE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,QAAgB,EAChB,MAAkE;IAElE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5F,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/F,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/E,gDAAgD;IAChD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;IACvE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB;IACvE,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qEAAqE;IAC3F,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qEAAqE;IAC3F,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gDAAgD;IAC3D,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,GAAG,CAAC,CAAC;IACR,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,GAAG,CAAe,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB;IAC9E,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,yCAAyC;QACzC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC5D,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mBAAmB;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC5D,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mBAAmB;IAC9B,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,gCAAgC;QAChC,IAAI,CAAC,EAAE,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5D,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,OAAO,GAAG,GAAG,QAAQ,EAAE,CAAC;YACtB,CAAC,GAAG,CAAC,EAAE,CAAC;YACR,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,IAAa,EAAK,EAAE;QACtD,KAAK,EAAE,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;QAC1B,IAAI,GAAG,GAAkB,SAAS,CAAC,CAAC,uCAAuC;QAC3E,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,MAAM,EAAE,CAAC;QACtC,KAAK,EAAE,CAAC;QACR,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+BAA+B;AAE/B,MAAM,YAAY,GAAG;IACnB,MAAM,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ;IACtD,QAAQ,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,OAAO,GAAG,KAAK,UAAU;IAC1D,OAAO,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,OAAO,GAAG,KAAK,SAAS;IACxD,MAAM,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ;IACtD,kBAAkB,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC;IACnF,aAAa,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAChD,KAAK,EAAE,CAAC,GAAQ,EAAE,MAAW,EAAO,EAAE,CAAE,MAAc,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACtE,IAAI,EAAE,CAAC,GAAQ,EAAW,EAAE,CAAC,OAAO,GAAG,KAAK,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;CACrF,CAAC;AAGX,wEAAwE;AAExE,MAAM,UAAU,cAAc,CAC5B,MAAS,EACT,UAAqB,EACrB,gBAA2B,EAAE;IAE7B,MAAM,UAAU,GAAG,CAAC,SAAkB,EAAE,IAAe,EAAE,UAAmB,EAAE,EAAE;QAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,OAAO,QAAQ,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAElF,MAAM,GAAG,GAAG,MAAM,CAAC,SAAgC,CAAC,CAAC;QACrD,IAAI,UAAU,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,wBAAwB,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,CAChF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,UAAU,CAAC,SAAS,EAAE,IAAK,EAAE,KAAK,CAAC,CAAC;IAChG,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;QAAE,UAAU,CAAC,SAAS,EAAE,IAAK,EAAE,IAAI,CAAC,CAAC;IAClG,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,sBAAsB;AACtB,uEAAuE;AACvE,gFAAgF;AAChF,4BAA4B;AAC5B,2DAA2D;AAC3D,qEAAqE;AACrE,+DAA+D;AAC/D,4DAA4D;AAE5D,MAAM,UAAU,MAAM,CAAC,GAAU;IAC/B,OAAO,OAAO,GAAG,KAAK,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1E,CAAC;AACD,MAAM,UAAU,eAAe,CAC7B,MAA2B,EAC3B,MAA8B,EAC9B,YAAoC,EAAE;IAEtC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE5F,SAAS,UAAU,CAAC,SAAe,EAAE,YAAoB,EAAE,KAAc;QACvE,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,KAAK,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QACvC,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC;QAC3B,IAAI,OAAO,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI;YAC1C,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,0BAA0B,YAAY,SAAS,OAAO,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAU,EAAE;IACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,EAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,OAAO,EAAQ,CAAC;IAChC,OAAO,CAAC,GAAM,EAAE,GAAG,IAAO,EAAK,EAAE;QAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClC,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"} |
| /** | ||
| * Utilities for short weierstrass curves, combined with noble-hashes. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type CurveFn, type CurveType, weierstrass } from './abstract/weierstrass.ts'; | ||
| import type { CHash } from './utils.ts'; | ||
| /** connects noble-curves to noble-hashes */ | ||
| export function getHash(hash: CHash): { hash: CHash } { | ||
| return { hash }; | ||
| } | ||
| /** Same API as @noble/hashes, with ability to create curve with custom hash */ | ||
| export type CurveDef = Readonly<Omit<CurveType, 'hash'>>; | ||
| export type CurveFnWithCreate = CurveFn & { create: (hash: CHash) => CurveFn }; | ||
| /** @deprecated use new `weierstrass()` and `ecdsa()` methods */ | ||
| export function createCurve(curveDef: CurveDef, defHash: CHash): CurveFnWithCreate { | ||
| const create = (hash: CHash): CurveFn => weierstrass({ ...curveDef, hash: hash }); | ||
| return { ...create(defHash), create }; | ||
| } |
| /** | ||
| * @module | ||
| */ | ||
| export * from '../utils.ts'; | ||
| // TODO | ||
| // @deprecated use `@noble/curves/utils.js` |
| /** | ||
| * @deprecated | ||
| * @module | ||
| */ | ||
| import { jubjub_findGroupHash, jubjub_groupHash, jubjub as jubjubn } from './misc.ts'; | ||
| /** @deprecated use `import { jubjub } from '@noble/curves/misc.js';` */ | ||
| export const jubjub: typeof jubjubn = jubjubn; | ||
| /** @deprecated use `import { jubjub_findGroupHash } from '@noble/curves/misc.js';` */ | ||
| export const findGroupHash: typeof jubjub_findGroupHash = jubjub_findGroupHash; | ||
| /** @deprecated use `import { jubjub_groupHash } from '@noble/curves/misc.js';` */ | ||
| export const groupHash: typeof jubjub_groupHash = jubjub_groupHash; |
-15
| /** | ||
| * NIST secp256r1 aka p256. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { p256_hasher, p256 as p256n } from './nist.ts'; | ||
| /** @deprecated use `import { p256 } from '@noble/curves/nist.js';` */ | ||
| export const p256: typeof p256n = p256n; | ||
| /** @deprecated use `import { p256 } from '@noble/curves/nist.js';` */ | ||
| export const secp256r1: typeof p256n = p256n; | ||
| /** @deprecated use `import { p256_hasher } from '@noble/curves/nist.js';` */ | ||
| export const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => p256_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { p256_hasher } from '@noble/curves/nist.js';` */ | ||
| export const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => p256_hasher.encodeToCurve)(); |
-15
| /** | ||
| * NIST secp384r1 aka p384. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { p384_hasher, p384 as p384n } from './nist.ts'; | ||
| /** @deprecated use `import { p384 } from '@noble/curves/nist.js';` */ | ||
| export const p384: typeof p384n = p384n; | ||
| /** @deprecated use `import { p384 } from '@noble/curves/nist.js';` */ | ||
| export const secp384r1: typeof p384n = p384n; | ||
| /** @deprecated use `import { p384_hasher } from '@noble/curves/nist.js';` */ | ||
| export const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => p384_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { p384_hasher } from '@noble/curves/nist.js';` */ | ||
| export const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => p384_hasher.encodeToCurve)(); |
-15
| /** | ||
| * NIST secp521r1 aka p521. | ||
| * @module | ||
| */ | ||
| /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */ | ||
| import { type H2CMethod } from './abstract/hash-to-curve.ts'; | ||
| import { p521_hasher, p521 as p521n } from './nist.ts'; | ||
| /** @deprecated use `import { p521 } from '@noble/curves/nist.js';` */ | ||
| export const p521: typeof p521n = p521n; | ||
| /** @deprecated use `import { p521 } from '@noble/curves/nist.js';` */ | ||
| export const secp521r1: typeof p521n = p521n; | ||
| /** @deprecated use `import { p521_hasher } from '@noble/curves/nist.js';` */ | ||
| export const hashToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => p521_hasher.hashToCurve)(); | ||
| /** @deprecated use `import { p521_hasher } from '@noble/curves/nist.js';` */ | ||
| export const encodeToCurve: H2CMethod<bigint> = /* @__PURE__ */ (() => p521_hasher.encodeToCurve)(); |
| { | ||
| "type": "module" | ||
| } |
| /** | ||
| * @deprecated | ||
| * @module | ||
| */ | ||
| import { pallas as pn, vesta as vn } from './misc.ts'; | ||
| /** @deprecated */ | ||
| export const pallas: typeof pn = pn; | ||
| /** @deprecated */ | ||
| export const vesta: typeof vn = vn; |
Sorry, the diff of this file is too big to display
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
2
-33.33%Yes
NaN1233804
-39.31%136
-43.1%19968
-34.1%1
Infinity%1
Infinity%856
-15.25%+ Added
- Removed
Updated