mirror of
https://github.com/pezkuwichain/pezkuwi-wasm.git
synced 2026-10-27 13:59:51 +00:00
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:
1 parent
0e96998a07
commit
caaa7468bc
11 files changed
+655
-6
No files matched your search
@@ -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
@@ -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'
|
||||
]
|
||||
}
|
||||
];
|
||||
@@ -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",
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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 @@
|
||||
{"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 @@
|
||||
{"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
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "lib",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node10",
|
||||
"verbatimModuleSyntax": false
|
||||
}
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
Executable
+26
@@ -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"
|
||||
Reference in new issue
Block a user