chore(scure-sr25519): add the source lib/ is built from (#17)

The package shipped only compiled output, and no repository held its
source. lib/ is @scure/sr25519 0.2.0 with three edits made directly in
the compiled files: signing context 'substrate' -> 'bizinikiwi' and the
two header comment lines. index.ts is upstream's 0.2.0 source with the
same edits; compiled with its own tsconfig it reproduces lib/*.js and
lib/*.d.ts byte for byte. Only the source maps change, since the
hand-edited ones still described upstream's file.

- index.ts, tsconfig.json, tsconfig.cjs.json, upstream MIT LICENSE
- yarn build:scure-sr25519 rebuilds lib/
- scripts/check-scure-sr25519.sh, run in CI, fails when lib/ is not a
  build of index.ts
- README: what differs from upstream, how to build; it said the context
  was 'bizinikiwi' instead of 'bizinikiwi'
This commit is contained in:
SatoshiQaziMuhammed authored and GitHub committed 2026-10-19 22:50:39 +04:00
1 parent 0e96998a07
commit caaa7468bc
11 files changed
+655 -6

No files matched your search

+5
View File
@@ -37,6 +37,11 @@ jobs:
- name: Lint
run: yarn lint
# scure-sr25519 ships committed compiled output; it must be a build of
# the index.ts beside it, not hand-edited JavaScript.
- name: Check scure-sr25519 is built from its source
run: ./scripts/check-scure-sr25519.sh
test:
runs-on: ubuntu-latest
steps:
+4 -2
View File
@@ -11,8 +11,10 @@ export default [
'**/bytes.js',
'**/build/**',
'**/build-*/**',
// compiled sources only; there is nothing here to lint
'packages/scure-sr25519/lib/**'
// compiled from index.ts; there is nothing here to lint
'packages/scure-sr25519/lib/**',
// upstream @scure/sr25519 source, kept in its own style; see the package README
'packages/scure-sr25519/index.ts'
]
}
];
+1
View File
@@ -27,6 +27,7 @@
"build:js": "./scripts/build-js.sh",
"build:release": "pezkuwi-ci-ghact-build",
"build:rollup": "pezkuwi-exec-rollup --config",
"build:scure-sr25519": "node node_modules/typescript/bin/tsc -p packages/scure-sr25519/tsconfig.json && node node_modules/typescript/bin/tsc -p packages/scure-sr25519/tsconfig.cjs.json",
"build:wasm": "./scripts/build.sh",
"clean": "./scripts/clean.sh",
"deno": "yarn deno:build && yarn deno:check",
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2024 Paul Miller (https://paulmillr.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+17 -2
View File
@@ -28,8 +28,23 @@ const valid = verify(message, signature, publicKey);
## Difference from @scure/sr25519
This package uses `bizinikiwi` as the signing context instead of `bizinikiwi`.
`index.ts` is [@scure/sr25519 0.2.0](https://github.com/paulmillr/scure-sr25519/tree/0.2.0)
with three changes:
- the signing context is `bizinikiwi` instead of `substrate`
(`BIZINIKIWI_CONTEXT`, used by `sign` and `verify`), so signatures match
PezkuwiChain's runtime;
- the two header comment lines name Pezkuwi instead of Polkadot.
Nothing else differs; `lib/` is the TypeScript output of `index.ts`.
## Building
```bash
yarn build:scure-sr25519 # from the repository root; writes lib/
./scripts/check-scure-sr25519.sh # CI: lib/ must equal a fresh build
```
## License
MIT
MIT. See [LICENSE](./LICENSE); the copyright notice is upstream's.
+540
View File
@@ -0,0 +1,540 @@
/**
* Minimal JS implementation of sr25519 cryptography for Pezkuwi.
*
* Uses [Merlin](https://merlin.cool/index.html),
* a transcript construction, built on [Strobe](https://strobe.sourceforge.io).
* Merlin ensures two parties agree on the same state when communicating.
*
* More: https://wiki.pezkuwi.network/docs/learn-cryptography.
*/
import { mod } from '@noble/curves/abstract/modular.js';
import {
aInRange,
bitMask,
bytesToNumberLE,
equalBytes,
isBytes,
numberToBytesLE,
} from '@noble/curves/abstract/utils.js';
import { ed25519, RistrettoPoint } from '@noble/curves/ed25519.js';
import { keccakP } from '@noble/hashes/sha3.js';
import { sha512 } from '@noble/hashes/sha512.js';
import { concatBytes, randomBytes, u32, utf8ToBytes } from '@noble/hashes/utils.js';
// prettier-ignore
const _0n = BigInt(0), _3n = BigInt(3);
type Point = typeof RistrettoPoint.BASE;
type Data = string | Uint8Array;
export type RNG = (bytes: number) => Uint8Array;
function toData(d: Data): Uint8Array {
if (typeof d === 'string') return utf8ToBytes(d);
if (isBytes(d)) return d;
throw new Error('Wrong data');
}
// Could've used bytes from hashes/assert, but we add extra arg
function abytes(title: string, b: Uint8Array, ...lengths: number[]) {
if (!isBytes(b)) throw new Error(`${title}: Uint8Array expected`);
if (lengths.length && !lengths.includes(b.length))
throw new Error(
`${title}: Uint8Array expected of length ${lengths}, not of length=${b.length}`
);
}
function checkU32(title: string, n: number) {
if (!Number.isSafeInteger(n) || n < 0 || n > 0xff_ff_ff_ff)
throw new Error(`${title}: wrong u32 integer: ${n}`);
return n;
}
function cleanBytes(...list: Uint8Array[]): void {
for (const t of list) t.fill(0);
}
const EMPTY = Uint8Array.of();
const CURVE_ORDER = ed25519.CURVE.n;
function parseScalar(title: string, bytes: Uint8Array) {
abytes(title, bytes, 32);
const n = bytesToNumberLE(bytes);
aInRange(title, n, _0n, CURVE_ORDER);
return n;
}
const modN = (n: bigint) => mod(n, CURVE_ORDER);
// STROBE128 (minimal version required for Merlin)
// - https://strobe.sourceforge.io/specs/
// We can implement full version, but seems nobody uses this much.
const STROBE_R: number = 166;
const Flags = {
I: 1,
A: 1 << 1,
C: 1 << 2,
T: 1 << 3,
M: 1 << 4,
K: 1 << 5,
} as const;
// Differences: suffix, additional methods/flags
class Strobe128 {
state: Uint8Array = new Uint8Array(200);
state32: Uint32Array;
pos: number = 0;
posBegin: number = 0;
curFlags: number = 0;
constructor(protocolLabel: Data) {
this.state.set([1, STROBE_R + 2, 1, 0, 1, 96], 0);
this.state.set(utf8ToBytes('STROBEv1.0.2'), 6);
this.state32 = u32(this.state);
this.keccakF1600();
this.metaAD(protocolLabel, false);
}
private keccakF1600(): void {
keccakP(this.state32);
}
private runF(): void {
this.state[this.pos] ^= this.posBegin;
this.state[this.pos + 1] ^= 0x04;
this.state[STROBE_R + 1] ^= 0x80;
this.keccakF1600();
this.pos = 0;
this.posBegin = 0;
}
// keccak.update()
private absorb(data: Uint8Array): void {
for (let i = 0; i < data.length; i++) {
this.state[this.pos++] ^= data[i];
if (this.pos === STROBE_R) this.runF();
}
}
// keccak.xof()
private squeeze(len: number): Uint8Array {
const data = new Uint8Array(len);
for (let i = 0; i < data.length; i++) {
data[i] = this.state[this.pos];
this.state[this.pos++] = 0;
if (this.pos === STROBE_R) this.runF();
}
return data;
}
private overwrite(data: Uint8Array): void {
for (let i = 0; i < data.length; i++) {
this.state[this.pos++] = data[i];
if (this.pos === STROBE_R) this.runF();
}
}
private beginOp(flags: number, more: boolean): void {
if (more) {
if (this.curFlags !== flags) {
throw new Error(
`Continued op with changed flags from ${this.curFlags.toString(2)} to ${flags.toString(2)}`
);
}
return;
}
if ((flags & Flags.T) !== 0) throw new Error('T flag is not supported');
const oldBegin = this.posBegin;
this.posBegin = this.pos + 1;
this.curFlags = flags;
this.absorb(new Uint8Array([oldBegin, flags]));
const forceF = (flags & (Flags.C | Flags.K)) !== 0;
if (forceF && this.pos !== 0) this.runF();
}
// Public API
metaAD(data: Data, more: boolean): void {
this.beginOp(Flags.M | Flags.A, more);
this.absorb(toData(data));
}
AD(data: Data, more: boolean): void {
this.beginOp(Flags.A, more);
this.absorb(toData(data));
}
PRF(len: number, more: boolean): Uint8Array {
this.beginOp(Flags.I | Flags.A | Flags.C, more);
return this.squeeze(len);
}
KEY(data: Data, more: boolean): void {
this.beginOp(Flags.A | Flags.C, more);
this.overwrite(toData(data));
}
// Utils
clone(): Strobe128 {
const n = new Strobe128('0'); // tmp
n.pos = this.pos;
n.posBegin = this.posBegin;
n.state.set(this.state);
n.curFlags = this.curFlags;
return n;
}
clean(): void {
this.state.fill(0); // also clears state32, because same buffer
this.pos = 0;
this.curFlags = 0;
this.posBegin = 0;
}
}
// /STROBE128
// Merlin
// https://merlin.cool/index.html
class Merlin {
strobe: Strobe128;
constructor(label: Data) {
this.strobe = new Strobe128('Merlin v1.0');
this.appendMessage('dom-sep', label);
}
appendMessage(label: Data, message: Data): void {
this.strobe.metaAD(label, false);
checkU32('Merlin.appendMessage', message.length);
this.strobe.metaAD(numberToBytesLE(message.length, 4), true);
this.strobe.AD(message, false);
}
challengeBytes(label: Data, len: number): Uint8Array {
this.strobe.metaAD(label, false);
checkU32('Merlin.challengeBytes', len);
this.strobe.metaAD(numberToBytesLE(len, 4), true);
return this.strobe.PRF(len, false);
}
clean(): void {
this.strobe.clean();
}
}
// /Merlin
// Merlin signging context/transcript (sr25519 specific stuff, Merlin and Strobe are generic (but minimal))
class SigningContext extends Merlin {
private rng: RNG;
constructor(name: string, rng: RNG = randomBytes) {
super(name);
this.rng = rng;
}
label(label: Data): void {
this.appendMessage('', label);
}
bytes(bytes: Uint8Array): this {
this.appendMessage('sign-bytes', bytes);
return this;
}
protoName(label: Data): void {
this.appendMessage('proto-name', label);
}
commitPoint(label: Data, point: Point): void {
this.appendMessage(label, point.toRawBytes());
}
challengeScalar(label: Data): bigint {
return modN(bytesToNumberLE(this.challengeBytes(label, 64)));
}
witnessScalar(label: Data, nonceSeeds: Uint8Array[] = []): bigint {
return modN(bytesToNumberLE(this.witnessBytes(label, 64, nonceSeeds)));
}
witnessBytes(label: Data, len: number, nonceSeeds: Uint8Array[] = []): Uint8Array {
checkU32('SigningContext.witnessBytes', len);
const strobeRng = this.strobe.clone();
for (const ns of nonceSeeds) {
strobeRng.metaAD(label, false);
checkU32('SigningContext.witnessBytes nonce length', ns.length);
strobeRng.metaAD(numberToBytesLE(ns.length, 4), true);
strobeRng.KEY(ns, false);
}
const random = this.rng(32);
strobeRng.metaAD('rng', false);
strobeRng.KEY(random, false);
strobeRng.metaAD(numberToBytesLE(len, 4), false);
return strobeRng.PRF(len, false);
}
}
// /Merlin signing context
const MASK = bitMask(256);
// == (n * CURVE.h) % CURVE_BIT_MASK
const encodeScalar = (n: bigint) => numberToBytesLE((n << _3n) & MASK, 32);
// n / CURVE.h
const decodeScalar = (n: Uint8Array) => bytesToNumberLE(n) >> _3n;
// NOTE: secretKey is 64 bytes (key + nonce). This required for HDKD, since key can be derived not only from seed, but from other keys.
export function getPublicKey(secretKey: Uint8Array): Uint8Array {
abytes('secretKey', secretKey, 64);
const scalar = decodeScalar(secretKey.subarray(0, 32));
return RistrettoPoint.BASE.multiply(scalar).toRawBytes();
}
export function secretFromSeed(seed: Uint8Array): Uint8Array {
abytes('seed', seed, 32);
const r = sha512(seed);
// NOTE: different from ed25519
r[0] &= 248;
r[31] &= 63;
r[31] |= 64;
// this will strip upper 3 bits and lower 3 bits
const key = encodeScalar(decodeScalar(r.subarray(0, 32)));
const nonce = r.subarray(32, 64);
const res = concatBytes(key, nonce);
cleanBytes(key, nonce, r);
return res;
}
// Seems like ed25519 keypair? Generates keypair from other keypair in ed25519 format
// NOTE: not exported from wasm. Do we need this at all?
export function fromKeypair(pair: Uint8Array): Uint8Array {
abytes('keypair', pair, 96);
const sk = pair.subarray(0, 32);
const nonce = pair.subarray(32, 64);
const pubBytes = pair.subarray(64, 96);
const key = encodeScalar(bytesToNumberLE(sk));
const realPub = getPublicKey(pair.subarray(0, 64));
if (!equalBytes(pubBytes, realPub)) throw new Error('wrong public key');
// No need to clean since subarray's
return concatBytes(key, nonce, realPub);
}
// Basic sign. NOTE: context is currently constant. Please open issue if you need different one.
const BIZINIKIWI_CONTEXT = utf8ToBytes('bizinikiwi');
export function sign(
secretKey: Uint8Array,
message: Uint8Array,
rng: RNG = randomBytes
): Uint8Array {
abytes('message', message);
abytes('secretKey', secretKey, 64);
const t = new SigningContext('SigningContext', rng);
t.label(BIZINIKIWI_CONTEXT);
t.bytes(message);
const keyScalar = decodeScalar(secretKey.subarray(0, 32));
const nonce = secretKey.subarray(32, 64);
const pubPoint = RistrettoPoint.fromHex(getPublicKey(secretKey));
t.protoName('Schnorr-sig');
t.commitPoint('sign:pk', pubPoint);
const r = t.witnessScalar('signing', [nonce]);
const R = RistrettoPoint.BASE.multiply(r);
t.commitPoint('sign:R', R);
const k = t.challengeScalar('sign:c');
const s = modN(k * keyScalar + r);
const res = concatBytes(R.toRawBytes(), numberToBytesLE(s, 32));
res[63] |= 128; // add Schnorrkel marker
t.clean();
return res;
}
export function verify(message: Uint8Array, signature: Uint8Array, publicKey: Uint8Array): boolean {
abytes('message', message);
abytes('signature', signature, 64);
abytes('publicKey', publicKey, 32);
if ((signature[63] & 0b1000_0000) === 0) throw new Error('Schnorrkel marker missing');
const sBytes = Uint8Array.from(signature.subarray(32, 64)); // copy before modification
sBytes[31] &= 0b0111_1111; // remove Schnorrkel marker
const R = RistrettoPoint.fromHex(signature.subarray(0, 32));
const s = bytesToNumberLE(sBytes);
aInRange('s', s, _0n, CURVE_ORDER); // Just in case, it will be checked at multiplication later
const t = new SigningContext('SigningContext');
t.label(BIZINIKIWI_CONTEXT);
t.bytes(message);
const pubPoint = RistrettoPoint.fromHex(publicKey);
if (pubPoint.equals(RistrettoPoint.ZERO)) return false;
t.protoName('Schnorr-sig');
t.commitPoint('sign:pk', pubPoint);
t.commitPoint('sign:R', R);
const k = t.challengeScalar('sign:c');
const sP = RistrettoPoint.BASE.multiply(s);
const RR = pubPoint.negate().multiply(k).add(sP);
t.clean();
cleanBytes(sBytes);
return RR.equals(R);
}
export function getSharedSecret(secretKey: Uint8Array, publicKey: Uint8Array): Uint8Array {
abytes('secretKey', secretKey, 64);
abytes('publicKey', publicKey, 32);
const keyScalar = decodeScalar(secretKey.subarray(0, 32));
const pubPoint = RistrettoPoint.fromHex(publicKey);
if (pubPoint.equals(RistrettoPoint.ZERO)) throw new Error('wrong public key (infinity)');
return pubPoint.multiply(keyScalar).toRawBytes();
}
// Derive
export const HDKD: {
secretSoft(secretKey: Uint8Array, chainCode: Uint8Array, rng?: RNG): Uint8Array;
publicSoft(publicKey: Uint8Array, chainCode: Uint8Array): Uint8Array;
secretHard(secretKey: Uint8Array, chainCode: Uint8Array): Uint8Array;
} = {
secretSoft(secretKey: Uint8Array, chainCode: Uint8Array, rng: RNG = randomBytes): Uint8Array {
abytes('secretKey', secretKey, 64);
abytes('chainCode', chainCode, 32);
const masterScalar = decodeScalar(secretKey.subarray(0, 32));
const masterNonce = secretKey.subarray(32, 64);
const pubPoint = RistrettoPoint.fromHex(getPublicKey(secretKey));
const t = new SigningContext('SchnorrRistrettoHDKD', rng);
t.bytes(EMPTY);
t.appendMessage('chain-code', chainCode);
t.commitPoint('public-key', pubPoint);
const scalar = t.challengeScalar('HDKD-scalar');
const hdkdChainCode = t.challengeBytes('HDKD-chaincode', 32);
const nonceSeed = concatBytes(numberToBytesLE(masterScalar, 32), masterNonce);
const nonce = t.witnessBytes('HDKD-nonce', 32, [masterNonce, nonceSeed]);
const key = encodeScalar(modN(masterScalar + scalar));
const res = concatBytes(key, nonce);
cleanBytes(key, nonce, nonceSeed, hdkdChainCode);
t.clean();
return res;
},
publicSoft(publicKey: Uint8Array, chainCode: Uint8Array): Uint8Array {
abytes('publicKey', publicKey, 32);
abytes('chainCode', chainCode, 32);
const pubPoint = RistrettoPoint.fromHex(publicKey);
const t = new SigningContext('SchnorrRistrettoHDKD');
t.bytes(EMPTY);
t.appendMessage('chain-code', chainCode);
t.commitPoint('public-key', pubPoint);
const scalar = t.challengeScalar('HDKD-scalar');
t.challengeBytes('HDKD-chaincode', 32);
t.clean();
return pubPoint.add(RistrettoPoint.BASE.multiply(scalar)).toRawBytes();
},
secretHard(secretKey: Uint8Array, chainCode: Uint8Array): Uint8Array {
abytes('secretKey', secretKey, 64);
abytes('chainCode', chainCode, 32);
const key = numberToBytesLE(decodeScalar(secretKey.subarray(0, 32)), 32);
const t = new SigningContext('SchnorrRistrettoHDKD');
t.bytes(EMPTY);
t.appendMessage('chain-code', chainCode);
t.appendMessage('secret-key', key);
const msk = t.challengeBytes('HDKD-hard', 32);
const hdkdChainCode = t.challengeBytes('HDKD-chaincode', 32);
t.clean();
const res = secretFromSeed(msk);
cleanBytes(key, msk, hdkdChainCode);
t.clean();
return res;
},
};
// Schnorr DLEQ
type Proof = { s: bigint; c: bigint };
const dleq = {
proove(
keyScalar: bigint,
nonce: Uint8Array,
pubPoint: Point,
t: SigningContext,
input: Point,
output: Point
) {
t.protoName('DLEQProof');
t.commitPoint('vrf:h', input);
const r = t.witnessScalar(`proving${'\0'}0`, [nonce]);
const R = RistrettoPoint.BASE.multiply(r);
t.commitPoint('vrf:R=g^r', R);
const Hr = input.multiply(r);
t.commitPoint('vrf:h^r', Hr);
t.commitPoint('vrf:pk', pubPoint);
t.commitPoint('vrf:h^sk', output);
const c = t.challengeScalar('prove');
const s = modN(r - c * keyScalar);
return { proof: { c, s } as Proof, proofBatchable: { R, Hr, s } };
},
verify(pubPoint: Point, t: SigningContext, input: Point, output: Point, proof: Proof) {
if (pubPoint.equals(RistrettoPoint.ZERO)) return false;
t.protoName('DLEQProof');
t.commitPoint('vrf:h', input);
const R = pubPoint.multiply(proof.c).add(RistrettoPoint.BASE.multiply(proof.s));
t.commitPoint('vrf:R=g^r', R);
const Hr = output.multiply(proof.c).add(input.multiply(proof.s));
t.commitPoint('vrf:h^r', Hr);
t.commitPoint('vrf:pk', pubPoint);
t.commitPoint('vrf:h^sk', output);
const realC = t.challengeScalar('prove');
if (proof.c === realC) return { R, Hr, s: proof.s }; // proofBatchable
return false;
},
};
// VRF: Verifiable Random Function
function initVRF(
ctx: Uint8Array,
msg: Uint8Array,
extra: Uint8Array,
pubPoint: Point,
rng: RNG = randomBytes
) {
const t = new SigningContext('SigningContext', rng);
t.label(ctx);
t.bytes(msg);
t.commitPoint('vrf-nm-pk', pubPoint);
const hash = t.challengeBytes('VRFHash', 64);
const input = RistrettoPoint.hashToCurve(hash);
const transcript = new SigningContext('VRF', rng);
if (extra.length) transcript.label(extra);
t.clean();
cleanBytes(hash);
return { input, t: transcript };
}
export const vrf: {
sign(
msg: Uint8Array,
secretKey: Uint8Array,
ctx: Uint8Array,
extra: Uint8Array,
rng: RNG
): Uint8Array;
verify(
msg: Uint8Array,
signature: Uint8Array,
publicKey: Uint8Array,
ctx?: Uint8Array,
extra?: Uint8Array,
rng?: RNG
): boolean;
} = {
sign(
msg: Uint8Array,
secretKey: Uint8Array,
ctx: Uint8Array = EMPTY,
extra: Uint8Array = EMPTY,
rng: RNG = randomBytes
): Uint8Array {
abytes('msg', msg);
abytes('secretKey', secretKey, 64);
abytes('ctx', ctx);
abytes('extra', extra);
const keyScalar = decodeScalar(secretKey.subarray(0, 32));
const nonce = secretKey.subarray(32, 64);
const pubPoint = RistrettoPoint.fromHex(getPublicKey(secretKey));
const { input, t } = initVRF(ctx, msg, extra, pubPoint, rng);
const output = input.multiply(keyScalar);
const p = { input, output };
const { proof } = dleq.proove(keyScalar, nonce, pubPoint, t, input, output);
const cBytes = numberToBytesLE(proof.c, 32);
const sBytes = numberToBytesLE(proof.s, 32);
const res = concatBytes(p.output.toRawBytes(), cBytes, sBytes);
cleanBytes(nonce, cBytes, sBytes);
return res;
},
verify(
msg: Uint8Array,
signature: Uint8Array,
publicKey: Uint8Array,
ctx: Uint8Array = EMPTY,
extra: Uint8Array = EMPTY,
rng: RNG = randomBytes
): boolean {
abytes('msg', msg);
abytes('signature', signature, 96); // O(point) || c(scalar) || s(scalar)
abytes('pubkey', publicKey, 32);
abytes('ctx', ctx);
abytes('extra', extra);
const pubPoint = RistrettoPoint.fromHex(publicKey);
if (pubPoint.equals(RistrettoPoint.ZERO)) return false;
const proof: Proof = {
c: parseScalar('signature.c', signature.subarray(32, 64)),
s: parseScalar('signature.s', signature.subarray(64, 96)),
};
const { input, t } = initVRF(ctx, msg, extra, pubPoint, rng);
const output = RistrettoPoint.fromHex(signature.subarray(0, 32));
if (output.equals(RistrettoPoint.ZERO))
throw new Error('vrf.verify: wrong output point (identity)');
const proofBatchable = dleq.verify(pubPoint, t, input, output, proof);
return proofBatchable === false ? false : true;
},
};
// NOTE: for tests only, don't use
export const __tests: {
Strobe128: typeof Strobe128;
Merlin: typeof Merlin;
SigningContext: typeof SigningContext;
} = {
Strobe128,
Merlin,
SigningContext,
};
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"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 truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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 truncated
+9
View File
@@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "lib",
"module": "commonjs",
"moduleResolution": "node10",
"verbatimModuleSyntax": false
}
}
+30
View File
@@ -0,0 +1,30 @@
{
"compilerOptions": {
"target": "es2020",
"lib": ["es2020"],
"types": [],
"strict": true,
"sourceMap": true,
"declaration": true,
"declarationMap": true,
"allowSyntheticDefaultImports": false,
"allowUnreachableCode": false,
"esModuleInterop": false,
"isolatedDeclarations": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noUncheckedIndexedAccess": false,
"noUnusedLocals": true,
"noUnusedParameters": true,
"verbatimModuleSyntax": true,
"allowImportingTsExtensions": true,
"rewriteRelativeImportExtensions": true,
"erasableSyntaxOnly": true,
"baseUrl": ".",
"outDir": "lib/esm",
"module": "es2020",
"moduleResolution": "bundler"
},
"include": ["index.ts"],
"exclude": ["node_modules", "lib"]
}
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
# Copyright 2017-2026 @pezkuwi/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
# packages/scure-sr25519/lib is committed and published as-is. Rebuild it from
# index.ts and fail if the result differs, so the published code can only come
# from the source in this repository.
set -euo pipefail
PKG="$(cd "$(dirname "$0")/../packages/scure-sr25519" && pwd)"
# Build beside lib/ so the source paths in the maps come out the same.
OUT="$(mktemp -d "$PKG/.check-lib.XXXXXX")"
trap 'rm -rf "$OUT"' EXIT
node node_modules/typescript/bin/tsc -p "$PKG/tsconfig.json" --outDir "$OUT/esm"
node node_modules/typescript/bin/tsc -p "$PKG/tsconfig.cjs.json" --outDir "$OUT"
cp "$PKG/lib/esm/package.json" "$OUT/esm/package.json"
if ! diff -r "$OUT" "$PKG/lib"; then
echo "packages/scure-sr25519/lib does not match a build of index.ts; run 'yarn build:scure-sr25519' and commit packages/scure-sr25519/lib" >&2
exit 1
fi
echo "scure-sr25519: lib matches index.ts"