@notabene/verify-proof 1.9.0 → 1.11.1-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -15
- package/dist/bitcoin-3CW4MNAW.cjs +314 -0
- package/dist/bitcoin-3CW4MNAW.cjs.map +1 -0
- package/dist/bitcoin-QK53ILBF.js +312 -0
- package/dist/bitcoin-QK53ILBF.js.map +1 -0
- package/dist/cardano-DYBYEAAF.cjs +53 -0
- package/dist/cardano-DYBYEAAF.cjs.map +1 -0
- package/dist/cardano-WE6YXYLW.js +31 -0
- package/dist/cardano-WE6YXYLW.js.map +1 -0
- package/dist/chunk-E3V5ATTC.js +38 -0
- package/dist/chunk-E3V5ATTC.js.map +1 -0
- package/dist/chunk-OAXNH5XR.cjs +42 -0
- package/dist/chunk-OAXNH5XR.cjs.map +1 -0
- package/dist/concordium-HQC37GCK.cjs +188 -0
- package/dist/concordium-HQC37GCK.cjs.map +1 -0
- package/dist/concordium-XX4XYLLU.js +186 -0
- package/dist/concordium-XX4XYLLU.js.map +1 -0
- package/dist/cosmos-64MKE5FJ.cjs +683 -0
- package/dist/cosmos-64MKE5FJ.cjs.map +1 -0
- package/dist/cosmos-QMH7BK7S.js +681 -0
- package/dist/cosmos-QMH7BK7S.js.map +1 -0
- package/dist/eth-3DX3PXDU.cjs +37 -0
- package/dist/eth-3DX3PXDU.cjs.map +1 -0
- package/dist/eth-ICLGRJE5.js +34 -0
- package/dist/eth-ICLGRJE5.js.map +1 -0
- package/dist/index.cjs +69 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +67 -1
- package/dist/index.js.map +1 -1
- package/dist/solana-4KQFLZUC.js +342 -0
- package/dist/solana-4KQFLZUC.js.map +1 -0
- package/dist/solana-PQ5K4NGO.cjs +365 -0
- package/dist/solana-PQ5K4NGO.cjs.map +1 -0
- package/dist/tron-F5AARBY4.cjs +58 -0
- package/dist/tron-F5AARBY4.cjs.map +1 -0
- package/dist/tron-OBLPB2LN.js +53 -0
- package/dist/tron-OBLPB2LN.js.map +1 -0
- package/dist/xlm-5GODWWL2.cjs +28 -0
- package/dist/xlm-5GODWWL2.cjs.map +1 -0
- package/dist/xlm-GX2QGFLI.js +26 -0
- package/dist/xlm-GX2QGFLI.js.map +1 -0
- package/dist/xrpl-7HQLIDAK.cjs +1174 -0
- package/dist/xrpl-7HQLIDAK.cjs.map +1 -0
- package/dist/xrpl-YCDFXBGQ.js +1169 -0
- package/dist/xrpl-YCDFXBGQ.js.map +1 -0
- package/package.json +11 -2
- package/src/bitcoin.ts +98 -37
- package/src/cardano.ts +2 -2
- package/src/index.ts +31 -19
- package/src/solana.ts +1 -1
- package/src/tests/bitcoin.test.ts +105 -16
- package/src/tests/solana.test.ts +1 -1
- package/src/xlm.ts +1 -2
- package/dist/bitcoin.d.ts +0 -2
- package/dist/cardano.d.ts +0 -2
- package/dist/concordium.d.ts +0 -15
- package/dist/cosmos.d.ts +0 -2
- package/dist/eth.d.ts +0 -4
- package/dist/index.modern.js +0 -2
- package/dist/index.modern.js.map +0 -1
- package/dist/index.umd.js +0 -2
- package/dist/index.umd.js.map +0 -1
- package/dist/solana.d.ts +0 -17
- package/dist/tests/bitcoin.test.d.ts +0 -1
- package/dist/tests/cardano.test.d.ts +0 -1
- package/dist/tests/concordium.test.d.ts +0 -1
- package/dist/tests/cosmos.test.d.ts +0 -1
- package/dist/tests/eth.test.d.ts +0 -1
- package/dist/tests/index.test.d.ts +0 -1
- package/dist/tests/solana.test.d.ts +0 -1
- package/dist/tests/tron.test.d.ts +0 -1
- package/dist/tests/xlm.test.d.ts +0 -1
- package/dist/tests/xrpl.test.d.ts +0 -1
- package/dist/tron.d.ts +0 -6
- package/dist/xlm.d.ts +0 -2
- package/dist/xrpl.d.ts +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/@noble/hashes/src/cryptoNode.ts","../node_modules/@noble/hashes/src/utils.ts","../node_modules/@xrplf/isomorphic/src/utils/shared.ts","../node_modules/@xrplf/isomorphic/src/utils/index.ts","../node_modules/@xrplf/isomorphic/src/internal/normalizeInput.ts","../node_modules/@xrplf/isomorphic/src/internal/wrapCryptoCreateHash.ts","../node_modules/@xrplf/isomorphic/src/sha256/index.ts","../node_modules/ripple-address-codec/src/utils.ts","../node_modules/ripple-address-codec/src/xrp-codec.ts","../node_modules/ripple-address-codec/src/index.ts","../node_modules/@xrplf/isomorphic/src/ripemd160/index.ts","../node_modules/@xrplf/isomorphic/src/sha512/index.ts","../node_modules/ripple-keypairs/src/utils/Sha512.ts","../node_modules/ripple-keypairs/src/signing-schemes/secp256k1/utils.ts","../node_modules/ripple-keypairs/src/utils/assert.ts","../node_modules/ripple-keypairs/src/utils/getAlgorithmFromKey.ts","../node_modules/ripple-keypairs/src/signing-schemes/secp256k1/index.ts","../node_modules/ripple-keypairs/src/signing-schemes/ed25519/index.ts","../node_modules/ripple-keypairs/src/index.ts","../src/xrpl.ts"],"names":["Prefix","verify"],"mappings":"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","file":"xrpl-YCDFXBGQ.js","sourcesContent":["/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto: any =\n nc && typeof nc === 'object' && 'webcrypto' in nc\n ? (nc.webcrypto as any)\n : nc && typeof nc === 'object' && 'randomBytes' in nc\n ? nc\n : undefined;\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n hashCons: () => Hash<T>\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash<T>;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n hashCons: (opts?: T) => Hash<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): Hash<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n hashCons: (opts?: T) => HashXOF<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): HashXOF<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n","import { concatBytes } from '@noble/hashes/utils'\n\nexport const HEX_REGEX = /^[A-F0-9]*$/iu\n\nexport function concat(views: Uint8Array[]): Uint8Array {\n return concatBytes(...views)\n}\n\nexport function equal(buf1: Uint8Array, buf2: Uint8Array): boolean {\n if (buf1.byteLength !== buf2.byteLength) {\n return false\n }\n const dv1 = new Int8Array(buf1)\n const dv2 = new Int8Array(buf2)\n for (let i = 0; i !== buf1.byteLength; i++) {\n if (dv1[i] !== dv2[i]) {\n return false\n }\n }\n return true\n}\n","import { randomBytes as cryptoRandomBytes } from 'crypto'\nimport type { BytesToHexFn, HexToBytesFn, RandomBytesFn } from './types'\nimport { HexToStringFn, StringToHexFn } from './types'\nimport { HEX_REGEX } from './shared'\n\nconst OriginalBuffer = Symbol('OriginalBuffer')\n\n/**\n * An extended Uint8Array that incorporates a reference to the original Node.js Buffer.\n *\n * When converting a Node.js Buffer to a Uint8Array, there's an optimization that shares\n * the memory of the original Buffer with the resulting Uint8Array instead of copying data.\n * The Uint8ArrayWithReference interface is used to attach a reference to the original Buffer, ensuring\n * its persistence in memory (preventing garbage collection) as long as the Uint8Array exists.\n * This strategy upholds the ownership semantics of the slice of the ArrayBuffer.\n */\ninterface Uint8ArrayWithReference extends Uint8Array {\n [OriginalBuffer]: Buffer\n}\n\n/**\n * Converts a Node.js Buffer to a Uint8Array for uniform behavior with browser implementations.\n *\n * Choices:\n * 1. Directly returning the Buffer:\n * - Operation: Return Buffer as is (a Buffer *IS* an instanceof Uint8Array).\n * - Pros: Most memory and performance efficient.\n * - Cons: Violates strict Uint8Array typing and may lead to issues where Buffer-specific features are [ab]used.\n *\n * 2. Using `new Uint8Array(buffer)` or `Uint8Array.from(buffer)`:\n * - Operation: Copies the buffer's data into a new Uint8Array.\n * - Pros: Ensures data isolation; memory-safe.\n * - Cons: Less performant due to data duplication.\n *\n * 3. Using buf.buffer slice:\n * - Operation: Shares memory between Buffer and Uint8Array.\n * - Pros: Performant.\n * - Cons: Risks with shared memory and potential for invalid references.\n *\n * 4. Using buf.buffer slice and keeping a Buffer reference for ownership semantics:\n * - Operation: Shares memory and associates the original Buffer with the resulting Uint8Array.\n * - Pros: Performant while ensuring the original Buffer isn't garbage collected.\n * - Cons: Risks with shared memory but mitigates potential for invalid references.\n *\n * The chosen method (4) prioritizes performance by sharing memory while ensuring buffer ownership.\n *\n * @param {Buffer} buffer - The Node.js Buffer to convert.\n * @returns {Uint8Array} Resulting Uint8Array sharing the same memory as the Buffer and maintaining a reference to it.\n */\nfunction toUint8Array(buffer: Buffer): Uint8Array {\n const u8Array = new Uint8Array(\n buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n ),\n ) as Uint8ArrayWithReference\n u8Array[OriginalBuffer] = buffer\n return u8Array\n}\n\n/* eslint-disable func-style -- Typed to ensure uniformity between node and browser implementations and docs */\nexport const bytesToHex: typeof BytesToHexFn = (bytes) => {\n const buf = Buffer.from(bytes)\n return buf.toString('hex').toUpperCase()\n}\n\nexport const hexToBytes: typeof HexToBytesFn = (hex) => {\n if (!HEX_REGEX.test(hex)) {\n throw new Error('Invalid hex string')\n }\n return toUint8Array(Buffer.from(hex, 'hex'))\n}\n\nexport const randomBytes: typeof RandomBytesFn = (size) => {\n return toUint8Array(cryptoRandomBytes(size))\n}\n\nexport const hexToString: typeof HexToStringFn = (\n hex: string,\n encoding = 'utf8',\n): string => {\n if (!HEX_REGEX.test(hex)) {\n throw new Error('Invalid hex string')\n }\n return new TextDecoder(encoding).decode(hexToBytes(hex))\n}\n\nexport const stringToHex: typeof StringToHexFn = (string: string): string => {\n return bytesToHex(new TextEncoder().encode(string))\n}\n/* eslint-enable func-style */\n\nexport * from './shared'\n","import { Input } from './types'\n\n/**\n * Normalize a string, number array, or Uint8Array to a string or Uint8Array.\n * Both node and noble lib functions accept these types.\n *\n * @param input - value to normalize\n */\nexport default function normalizeInput(input: Input): string | Uint8Array {\n return Array.isArray(input) ? new Uint8Array(input) : input\n}\n","import { createHash } from 'crypto'\nimport { Hash, HashFn, Input } from './types'\nimport normalizeInput from './normalizeInput'\n\n/**\n * Wrap createHash from node to provide an interface that is isomorphic\n *\n * @param type - the hash name\n * @param fn - {createHash} the hash factory\n */\nexport default function wrapCryptoCreateHash(\n type: string,\n fn: typeof createHash,\n): HashFn {\n function hashFn(input: Input): Uint8Array {\n return fn(type).update(normalizeInput(input)).digest()\n }\n\n hashFn.create = (): Hash => {\n const hash = fn(type)\n return {\n update(input: Input): Hash {\n hash.update(normalizeInput(input))\n return this\n },\n digest(): Uint8Array {\n return hash.digest()\n },\n }\n }\n return hashFn\n}\n","import { createHash } from 'crypto'\nimport wrapCryptoCreateHash from '../internal/wrapCryptoCreateHash'\n\n/**\n * Wrap node's native sha256 implementation in HashFn\n */\nexport const sha256 = wrapCryptoCreateHash('sha256', createHash)\n","export type ByteArray = number[] | Uint8Array\n\n/**\n * Check whether two sequences (e.g. Arrays of numbers) are equal.\n *\n * @param arr1 - One of the arrays to compare.\n * @param arr2 - The other array to compare.\n */\nexport function arrayEqual(arr1: ByteArray, arr2: ByteArray): boolean {\n if (arr1.length !== arr2.length) {\n return false\n }\n return arr1.every((value, index) => value === arr2[index])\n}\n\n/**\n * Check whether a value is a scalar\n *\n * @param val - The value to check.\n */\nfunction isScalar(val: ByteArray | number): val is number {\n return typeof val === 'number'\n}\n\n/**\n * Concatenate all `arguments` into a single array. Each argument can be either\n * a single element or a sequence, which has a `length` property and supports\n * element retrieval via sequence[ix].\n *\n * > concatArgs(1, [2, 3], Uint8Array.from([4,5]), new Uint8Array([6, 7]));\n * [1,2,3,4,5,6,7]\n *\n * @param args - Concatenate of these args into a single array.\n * @returns Array of concatenated arguments\n */\n\nexport function concatArgs(...args: Array<number | ByteArray>): number[] {\n return args.flatMap((arg) => {\n return isScalar(arg) ? [arg] : Array.from(arg)\n })\n}\n","/**\n * Codec class\n */\n\nimport { base58xrp, BytesCoder } from '@scure/base'\nimport { sha256 } from '@xrplf/isomorphic/sha256'\n\nimport { arrayEqual, concatArgs, ByteArray } from './utils'\n\nclass Codec {\n private readonly _sha256: (bytes: ByteArray) => Uint8Array\n private readonly _codec: BytesCoder\n\n public constructor(options: { sha256: (bytes: ByteArray) => Uint8Array }) {\n this._sha256 = options.sha256\n this._codec = base58xrp\n }\n\n /**\n * Encoder.\n *\n * @param bytes - Uint8Array of data to encode.\n * @param opts - Options object including the version bytes and the expected length of the data to encode.\n */\n public encode(\n bytes: ByteArray,\n opts: {\n versions: number[]\n expectedLength: number\n },\n ): string {\n const versions = opts.versions\n return this._encodeVersioned(bytes, versions, opts.expectedLength)\n }\n\n /**\n * Decoder.\n *\n * @param base58string - Base58Check-encoded string to decode.\n * @param opts - Options object including the version byte(s) and the expected length of the data after decoding.\n */\n /* eslint-disable max-lines-per-function --\n * TODO refactor */\n public decode(\n base58string: string,\n opts: {\n versions: Array<number | number[]>\n expectedLength?: number\n versionTypes?: ['ed25519', 'secp256k1']\n },\n ): {\n version: number[]\n bytes: Uint8Array\n type: 'ed25519' | 'secp256k1' | null\n } {\n const versions = opts.versions\n const types = opts.versionTypes\n\n const withoutSum = this.decodeChecked(base58string)\n\n if (versions.length > 1 && !opts.expectedLength) {\n throw new Error(\n 'expectedLength is required because there are >= 2 possible versions',\n )\n }\n const versionLengthGuess =\n typeof versions[0] === 'number' ? 1 : versions[0].length\n const payloadLength =\n opts.expectedLength ?? withoutSum.length - versionLengthGuess\n const versionBytes = withoutSum.slice(0, -payloadLength)\n const payload = withoutSum.slice(-payloadLength)\n\n for (let i = 0; i < versions.length; i++) {\n /* eslint-disable @typescript-eslint/consistent-type-assertions --\n * TODO refactor */\n const version: number[] = Array.isArray(versions[i])\n ? (versions[i] as number[])\n : [versions[i] as number]\n if (arrayEqual(versionBytes, version)) {\n return {\n version,\n bytes: payload,\n type: types ? types[i] : null,\n }\n }\n /* eslint-enable @typescript-eslint/consistent-type-assertions */\n }\n\n throw new Error(\n 'version_invalid: version bytes do not match any of the provided version(s)',\n )\n }\n\n public encodeChecked(bytes: ByteArray): string {\n const check = this._sha256(this._sha256(bytes)).slice(0, 4)\n return this._encodeRaw(Uint8Array.from(concatArgs(bytes, check)))\n }\n\n public decodeChecked(base58string: string): Uint8Array {\n const intArray = this._decodeRaw(base58string)\n if (intArray.byteLength < 5) {\n throw new Error('invalid_input_size: decoded data must have length >= 5')\n }\n if (!this._verifyCheckSum(intArray)) {\n throw new Error('checksum_invalid')\n }\n return intArray.slice(0, -4)\n }\n\n private _encodeVersioned(\n bytes: ByteArray,\n versions: number[],\n expectedLength: number,\n ): string {\n if (!checkByteLength(bytes, expectedLength)) {\n throw new Error(\n 'unexpected_payload_length: bytes.length does not match expectedLength.' +\n ' Ensure that the bytes are a Uint8Array.',\n )\n }\n return this.encodeChecked(concatArgs(versions, bytes))\n }\n\n private _encodeRaw(bytes: ByteArray): string {\n return this._codec.encode(Uint8Array.from(bytes))\n }\n /* eslint-enable max-lines-per-function */\n\n private _decodeRaw(base58string: string): Uint8Array {\n return this._codec.decode(base58string)\n }\n\n private _verifyCheckSum(bytes: ByteArray): boolean {\n const computed = this._sha256(this._sha256(bytes.slice(0, -4))).slice(0, 4)\n const checksum = bytes.slice(-4)\n return arrayEqual(computed, checksum)\n }\n}\n\n/**\n * XRP codec\n */\n\n// base58 encodings: https://xrpl.org/base58-encodings.html\n// Account address (20 bytes)\nconst ACCOUNT_ID = 0\n// Account public key (33 bytes)\nconst ACCOUNT_PUBLIC_KEY = 0x23\n// 33; Seed value (for secret keys) (16 bytes)\nconst FAMILY_SEED = 0x21\n// 28; Validation public key (33 bytes)\nconst NODE_PUBLIC = 0x1c\n\n// [1, 225, 75]\nconst ED25519_SEED = [0x01, 0xe1, 0x4b]\n\nconst codecOptions = {\n sha256,\n}\n\nconst codecWithXrpAlphabet = new Codec(codecOptions)\n\nexport const codec = codecWithXrpAlphabet\n\n// entropy is a Uint8Array of size 16\n// type is 'ed25519' or 'secp256k1'\nexport function encodeSeed(\n entropy: ByteArray,\n type: 'ed25519' | 'secp256k1',\n): string {\n if (!checkByteLength(entropy, 16)) {\n throw new Error('entropy must have length 16')\n }\n const opts = {\n expectedLength: 16,\n\n // for secp256k1, use `FAMILY_SEED`\n versions: type === 'ed25519' ? ED25519_SEED : [FAMILY_SEED],\n }\n\n // prefixes entropy with version bytes\n return codecWithXrpAlphabet.encode(entropy, opts)\n}\n\nexport function decodeSeed(\n seed: string,\n opts: {\n versionTypes: ['ed25519', 'secp256k1']\n versions: Array<number | number[]>\n expectedLength: number\n } = {\n versionTypes: ['ed25519', 'secp256k1'],\n versions: [ED25519_SEED, FAMILY_SEED],\n expectedLength: 16,\n },\n): {\n version: number[]\n bytes: Uint8Array\n type: 'ed25519' | 'secp256k1' | null\n} {\n return codecWithXrpAlphabet.decode(seed, opts)\n}\n\nexport function encodeAccountID(bytes: ByteArray): string {\n const opts = { versions: [ACCOUNT_ID], expectedLength: 20 }\n return codecWithXrpAlphabet.encode(bytes, opts)\n}\n\n/* eslint-disable import/no-unused-modules ---\n * unclear why this is aliased but we should keep it in case someone else is\n * importing it with the aliased name */\nexport const encodeAddress = encodeAccountID\n/* eslint-enable import/no-unused-modules */\n\nexport function decodeAccountID(accountId: string): Uint8Array {\n const opts = { versions: [ACCOUNT_ID], expectedLength: 20 }\n return codecWithXrpAlphabet.decode(accountId, opts).bytes\n}\n\n/* eslint-disable import/no-unused-modules ---\n * unclear why this is aliased but we should keep it in case someone else is\n * importing it with the aliased name */\nexport const decodeAddress = decodeAccountID\n/* eslint-enable import/no-unused-modules */\n\nexport function decodeNodePublic(base58string: string): Uint8Array {\n const opts = { versions: [NODE_PUBLIC], expectedLength: 33 }\n return codecWithXrpAlphabet.decode(base58string, opts).bytes\n}\n\nexport function encodeNodePublic(bytes: ByteArray): string {\n const opts = { versions: [NODE_PUBLIC], expectedLength: 33 }\n return codecWithXrpAlphabet.encode(bytes, opts)\n}\n\nexport function encodeAccountPublic(bytes: ByteArray): string {\n const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 }\n return codecWithXrpAlphabet.encode(bytes, opts)\n}\n\nexport function decodeAccountPublic(base58string: string): Uint8Array {\n const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 }\n return codecWithXrpAlphabet.decode(base58string, opts).bytes\n}\n\nexport function isValidClassicAddress(address: string): boolean {\n try {\n decodeAccountID(address)\n } catch (_error) {\n return false\n }\n return true\n}\n\nfunction checkByteLength(bytes: ByteArray, expectedLength: number): boolean {\n return 'byteLength' in bytes\n ? bytes.byteLength === expectedLength\n : bytes.length === expectedLength\n}\n","import { concat, equal, hexToBytes } from '@xrplf/isomorphic/utils'\n\nimport {\n codec,\n encodeSeed,\n decodeSeed,\n encodeAccountID,\n decodeAccountID,\n encodeNodePublic,\n decodeNodePublic,\n encodeAccountPublic,\n decodeAccountPublic,\n isValidClassicAddress,\n} from './xrp-codec'\n\nconst PREFIX_BYTES = {\n // 5, 68\n main: Uint8Array.from([0x05, 0x44]),\n // 4, 147\n test: Uint8Array.from([0x04, 0x93]),\n}\n\nconst MAX_32_BIT_UNSIGNED_INT = 4294967295\n\nfunction classicAddressToXAddress(\n classicAddress: string,\n tag: number | false,\n test: boolean,\n): string {\n const accountId = decodeAccountID(classicAddress)\n return encodeXAddress(accountId, tag, test)\n}\n\nfunction encodeXAddress(\n accountId: Uint8Array,\n tag: number | false,\n test: boolean,\n): string {\n if (accountId.length !== 20) {\n // RIPEMD160 is 160 bits = 20 bytes\n throw new Error('Account ID must be 20 bytes')\n }\n if (tag !== false && tag > MAX_32_BIT_UNSIGNED_INT) {\n throw new Error('Invalid tag')\n }\n const theTag = tag || 0\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Passing null is a common js mistake\n const flag = tag === false || tag == null ? 0 : 1\n /* eslint-disable no-bitwise ---\n * need to use bitwise operations here */\n const bytes = concat([\n test ? PREFIX_BYTES.test : PREFIX_BYTES.main,\n accountId,\n Uint8Array.from([\n // 0x00 if no tag, 0x01 if 32-bit tag\n flag,\n // first byte\n theTag & 0xff,\n // second byte\n (theTag >> 8) & 0xff,\n // third byte\n (theTag >> 16) & 0xff,\n // fourth byte\n (theTag >> 24) & 0xff,\n 0,\n 0,\n 0,\n // four zero bytes (reserved for 64-bit tags)\n 0,\n ]),\n ])\n /* eslint-enable no-bitwise */\n return codec.encodeChecked(bytes)\n}\n\nfunction xAddressToClassicAddress(xAddress: string): {\n classicAddress: string\n tag: number | false\n test: boolean\n} {\n /* eslint-disable @typescript-eslint/naming-convention --\n * TODO 'test' should be something like 'isTest', do this later\n */\n const { accountId, tag, test } = decodeXAddress(xAddress)\n /* eslint-enable @typescript-eslint/naming-convention */\n const classicAddress = encodeAccountID(accountId)\n return {\n classicAddress,\n tag,\n test,\n }\n}\n\nfunction decodeXAddress(xAddress: string): {\n accountId: Uint8Array\n tag: number | false\n test: boolean\n} {\n const decoded = codec.decodeChecked(xAddress)\n /* eslint-disable @typescript-eslint/naming-convention --\n * TODO 'test' should be something like 'isTest', do this later\n */\n const test = isUint8ArrayForTestAddress(decoded)\n /* eslint-enable @typescript-eslint/naming-convention */\n const accountId = decoded.slice(2, 22)\n const tag = tagFromUint8Array(decoded)\n return {\n accountId,\n tag,\n test,\n }\n}\n\nfunction isUint8ArrayForTestAddress(buf: Uint8Array): boolean {\n const decodedPrefix = buf.slice(0, 2)\n if (equal(PREFIX_BYTES.main, decodedPrefix)) {\n return false\n }\n if (equal(PREFIX_BYTES.test, decodedPrefix)) {\n return true\n }\n\n throw new Error('Invalid X-address: bad prefix')\n}\n\nfunction tagFromUint8Array(buf: Uint8Array): number | false {\n const flag = buf[22]\n if (flag >= 2) {\n // No support for 64-bit tags at this time\n throw new Error('Unsupported X-address')\n }\n if (flag === 1) {\n // Little-endian to big-endian\n return buf[23] + buf[24] * 0x100 + buf[25] * 0x10000 + buf[26] * 0x1000000\n }\n if (flag !== 0) {\n throw new Error('flag must be zero to indicate no tag')\n }\n if (!equal(hexToBytes('0000000000000000'), buf.slice(23, 23 + 8))) {\n throw new Error('remaining bytes must be zero')\n }\n return false\n}\n\nfunction isValidXAddress(xAddress: string): boolean {\n try {\n decodeXAddress(xAddress)\n } catch (_error) {\n return false\n }\n return true\n}\n\nexport {\n // Codec with XRP alphabet\n codec,\n // Encode entropy as a \"seed\"\n encodeSeed,\n // Decode a seed into an object with its version, type, and bytes\n decodeSeed,\n // Encode bytes as a classic address (r...)\n encodeAccountID,\n // Decode a classic address to its raw bytes\n decodeAccountID,\n // Encode bytes to XRP Ledger node public key format\n encodeNodePublic,\n // Decode an XRP Ledger node public key into its raw bytes\n decodeNodePublic,\n // Encode a public key, as for payment channels\n encodeAccountPublic,\n // Decode a public key, as for payment channels\n decodeAccountPublic,\n // Check whether a classic address (r...) is valid\n isValidClassicAddress,\n // Derive X-address from classic address, tag, and network ID\n classicAddressToXAddress,\n // Encode account ID, tag, and network ID to X-address\n encodeXAddress,\n // Decode X-address to account ID, tag, and network ID\n xAddressToClassicAddress,\n // Convert X-address to classic address, tag, and network ID\n decodeXAddress,\n // Check whether an X-address (X...) is valid\n isValidXAddress,\n}\n","import { createHash } from 'crypto'\nimport wrapCryptoCreateHash from '../internal/wrapCryptoCreateHash'\n\n/**\n * Wrap node's native ripemd160 implementation in HashFn\n */\nexport const ripemd160 = wrapCryptoCreateHash('ripemd160', createHash)\n","import { createHash } from 'crypto'\nimport wrapCryptoCreateHash from '../internal/wrapCryptoCreateHash'\n\n/**\n * Wrap node's native sha512 implementation in HashFn\n */\nexport const sha512 = wrapCryptoCreateHash('sha512', createHash)\n","import { sha512 } from '@xrplf/isomorphic/sha512'\nimport { bytesToNumberBE } from '@noble/curves/abstract/utils'\n\ntype Input = Uint8Array | number[] | string\n\nexport default class Sha512 {\n // instantiate empty sha512 hash\n hash = sha512.create()\n\n static half(input: Input): Uint8Array {\n return new Sha512().add(input).first256()\n }\n\n add(bytes: Input): this {\n this.hash.update(bytes)\n return this\n }\n\n addU32(i: number): this {\n const buffer = new Uint8Array(4)\n new DataView(buffer.buffer).setUint32(0, i)\n return this.add(buffer)\n }\n\n finish(): Uint8Array {\n return this.hash.digest()\n }\n\n first256(): Uint8Array {\n return this.finish().slice(0, 32)\n }\n\n first256BigInt(): bigint {\n return bytesToNumberBE(this.first256())\n }\n}\n","import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport Sha512 from '../../utils/Sha512'\n\nconst ZERO = BigInt(0)\n\nfunction deriveScalar(bytes: Uint8Array, discrim?: number): bigint {\n const order = secp256k1.CURVE.n\n for (let i = 0; i <= 0xffff_ffff; i++) {\n // We hash the bytes to find a 256-bit number, looping until we are sure it\n // is less than the order of the curve.\n const hasher = new Sha512().add(bytes)\n // If the optional discriminator index was passed in, update the hash.\n if (discrim !== undefined) {\n hasher.addU32(discrim)\n }\n hasher.addU32(i)\n const key = hasher.first256BigInt()\n /* istanbul ignore else */\n if (key > ZERO && key < order) {\n return key\n }\n }\n // This error is practically impossible to reach.\n // The order of the curve describes the (finite) amount of points on the curve\n // https://github.com/indutny/elliptic/blob/master/lib/elliptic/curves.js#L182\n // How often will an (essentially) random number generated by Sha512 be larger than that?\n // There's 2^32 chances (the for loop) to get a number smaller than the order,\n // and it's rare that you'll even get past the first loop iteration.\n // Note that in TypeScript we actually need the throw, otherwise the function signature would be bigint | undefined\n //\n /* istanbul ignore next */\n throw new Error('impossible unicorn ;)')\n}\n\n/**\n * @param seed - Bytes.\n * @param [opts] - Object.\n * @param [opts.accountIndex=0] - The account number to generate.\n * @param [opts.validator=false] - Generate root key-pair,\n * as used by validators.\n * @returns {bigint} 256 bit scalar value.\n *\n */\nexport function derivePrivateKey(\n seed: Uint8Array,\n opts: {\n validator?: boolean\n accountIndex?: number\n } = {},\n): bigint {\n const root = opts.validator\n const order = secp256k1.CURVE.n\n\n // This private generator represents the `root` private key, and is what's\n // used by validators for signing when a keypair is generated from a seed.\n const privateGen = deriveScalar(seed)\n if (root) {\n // As returned by validation_create for a given seed\n return privateGen\n }\n const publicGen =\n secp256k1.ProjectivePoint.BASE.multiply(privateGen).toRawBytes(true)\n // A seed can generate many keypairs as a function of the seed and a uint32.\n // Almost everyone just uses the first account, `0`.\n const accountIndex = opts.accountIndex || 0\n return (deriveScalar(publicGen, accountIndex) + privateGen) % order\n}\n\nexport function accountPublicFromPublicGenerator(publicGenBytes: Uint8Array) {\n const rootPubPoint = secp256k1.ProjectivePoint.fromHex(publicGenBytes)\n const scalar = deriveScalar(publicGenBytes, 0)\n const point = secp256k1.ProjectivePoint.BASE.multiply(scalar)\n const offset = rootPubPoint.add(point)\n return offset.toRawBytes(true)\n}\n","const assertHelper: {\n ok: (cond: boolean, message?: string) => asserts cond is true\n} = {\n ok(cond, message): asserts cond is true {\n if (!cond) {\n throw new Error(message)\n }\n },\n}\n\nexport default assertHelper\n","import type { Algorithm, HexString, KeyType } from '../types'\n\nenum Prefix {\n NONE = -1,\n ED25519 = 0xed,\n SECP256K1_PUB_X = 0x02,\n SECP256K1_PUB_X_ODD_Y = 0x03,\n SECP256K1_PUB_XY = 0x04,\n SECP256K1_PRIVATE = 0x00,\n}\n\ntype CompositeKey = `${KeyType}_${Prefix}_${number}`\n\n/**\n * | Curve | Type | Prefix | Length | Description | Algorithm |\n * |-----------|-------------|:------:|:------:|-------------------------------------------------------|----------------:|\n * | ed25519 | Private | 0xED | 33 | prefix + Uint256LE (0 < n < order ) | ed25519 |\n * | ed25519 | Public | 0xED | 33 | prefix + 32 y-bytes | ed25519 |\n * | secp256k1 | Public (1) | 0x02 | 33 | prefix + 32 x-bytes | ecdsa-secp256k1 |\n * | secp256k1 | Public (2) | 0x03 | 33 | prefix + 32 x-bytes (y is odd) | ecdsa-secp256k1 |\n * | secp256k1 | Public (3) | 0x04 | 65 | prefix + 32 x-bytes + 32 y-bytes | ecdsa-secp256k1 |\n * | secp256k1 | Private (1) | None | 32 | Uint256BE (0 < n < order) | ecdsa-secp256k1 |\n * | secp256k1 | Private (2) | 0x00 | 33 | prefix + Uint256BE (0 < n < order) | ecdsa-secp256k1 |\n *\n * Note: The 0x00 prefix for secpk256k1 Private (2) essentially 0 pads the number\n * and the interpreted number is the same as 32 bytes.\n */\nconst KEY_TYPES: Record<CompositeKey, Algorithm> = {\n [`private_${Prefix.NONE}_32`]: 'ecdsa-secp256k1',\n [`private_${Prefix.SECP256K1_PRIVATE}_33`]: 'ecdsa-secp256k1',\n [`private_${Prefix.ED25519}_33`]: 'ed25519',\n [`public_${Prefix.ED25519}_33`]: 'ed25519',\n [`public_${Prefix.SECP256K1_PUB_X}_33`]: 'ecdsa-secp256k1',\n [`public_${Prefix.SECP256K1_PUB_X_ODD_Y}_33`]: 'ecdsa-secp256k1',\n [`public_${Prefix.SECP256K1_PUB_XY}_65`]: 'ecdsa-secp256k1',\n}\n\nfunction getKeyInfo(key: HexString) {\n return {\n prefix: key.length < 2 ? Prefix.NONE : parseInt(key.slice(0, 2), 16),\n len: key.length / 2,\n }\n}\n\nfunction prefixRepr(prefix: Prefix): string {\n return prefix === Prefix.NONE\n ? 'None'\n : `0x${prefix.toString(16).padStart(2, '0')}`\n}\n\nfunction getValidFormatsTable(type: KeyType) {\n // No need overkill with renderTable method\n const padding = 2\n const colWidth = {\n algorithm: 'ecdsa-secp256k1'.length + padding,\n prefix: '0x00'.length + padding,\n }\n\n return Object.entries(KEY_TYPES)\n .filter(([key]) => key.startsWith(type))\n .map(([key, algorithm]) => {\n const [, prefix, length] = key.split('_')\n const paddedAlgo = algorithm.padEnd(colWidth.algorithm)\n const paddedPrefix = prefixRepr(Number(prefix)).padEnd(colWidth.prefix)\n return `${paddedAlgo} - Prefix: ${paddedPrefix} Length: ${length} bytes`\n })\n .join('\\n')\n}\n\nfunction keyError({\n key,\n type,\n prefix,\n len,\n}: {\n key: string\n type: KeyType\n prefix: number\n len: number\n}) {\n const validFormats = getValidFormatsTable(type)\n\n return `invalid_key:\n\nType: ${type}\nKey: ${key}\nPrefix: ${prefixRepr(prefix)} \nLength: ${len} bytes\n\nAcceptable ${type} formats are:\n${validFormats}\n`\n}\n\n/**\n * Determines the algorithm associated with a given key (public/private).\n *\n * @param key - hexadecimal string representation of the key.\n * @param type - whether expected key is public or private\n * @returns Algorithm algorithm for signing/verifying\n * @throws Error when key is invalid\n */\nexport function getAlgorithmFromKey(key: HexString, type: KeyType): Algorithm {\n const { prefix, len } = getKeyInfo(key)\n // Special case back compat support for no prefix\n const usedPrefix = type === 'private' && len === 32 ? Prefix.NONE : prefix\n const algorithm = KEY_TYPES[`${type}_${usedPrefix}_${len}`]\n\n if (!algorithm) {\n throw new Error(keyError({ key, type, len, prefix: usedPrefix }))\n }\n return algorithm\n}\n\nexport function getAlgorithmFromPublicKey(key: HexString): Algorithm {\n return getAlgorithmFromKey(key, 'public')\n}\n\nexport function getAlgorithmFromPrivateKey(key: HexString): Algorithm {\n return getAlgorithmFromKey(key, 'private')\n}\n","import { numberToBytesBE } from '@noble/curves/abstract/utils'\nimport { secp256k1 as nobleSecp256k1 } from '@noble/curves/secp256k1'\nimport { bytesToHex } from '@xrplf/isomorphic/utils'\n\nimport type {\n DeriveKeyPairOptions,\n HexString,\n SigningScheme,\n} from '../../types'\n\nimport { derivePrivateKey } from './utils'\nimport assert from '../../utils/assert'\nimport Sha512 from '../../utils/Sha512'\n\nconst SECP256K1_PREFIX = '00'\n\nconst secp256k1: SigningScheme = {\n deriveKeypair(\n entropy: Uint8Array,\n options?: DeriveKeyPairOptions,\n ): {\n privateKey: string\n publicKey: string\n } {\n const derived = derivePrivateKey(entropy, options)\n const privateKey =\n SECP256K1_PREFIX + bytesToHex(numberToBytesBE(derived, 32))\n\n const publicKey = bytesToHex(nobleSecp256k1.getPublicKey(derived, true))\n return { privateKey, publicKey }\n },\n\n sign(message: Uint8Array, privateKey: HexString): string {\n // Some callers pass the privateKey with the prefix, others without.\n // @noble/curves will throw if the key is not exactly 32 bytes, so we\n // normalize it before passing to the sign method.\n assert.ok(\n (privateKey.length === 66 && privateKey.startsWith(SECP256K1_PREFIX)) ||\n privateKey.length === 64,\n )\n const normedPrivateKey =\n privateKey.length === 66 ? privateKey.slice(2) : privateKey\n return nobleSecp256k1\n .sign(Sha512.half(message), normedPrivateKey, {\n // \"Canonical\" signatures\n lowS: true,\n // Would fail tests if signatures aren't deterministic\n extraEntropy: undefined,\n })\n .toDERHex(true)\n .toUpperCase()\n },\n\n verify(\n message: Uint8Array,\n signature: HexString,\n publicKey: HexString,\n ): boolean {\n const decoded = nobleSecp256k1.Signature.fromDER(signature)\n return nobleSecp256k1.verify(decoded, Sha512.half(message), publicKey)\n },\n}\n\nexport default secp256k1\n","import { ed25519 as nobleEd25519 } from '@noble/curves/ed25519'\nimport { bytesToHex } from '@xrplf/isomorphic/utils'\n\nimport type { HexString, SigningScheme } from '../../types'\nimport assert from '../../utils/assert'\nimport Sha512 from '../../utils/Sha512'\n\nconst ED_PREFIX = 'ED'\n\nconst ed25519: SigningScheme = {\n deriveKeypair(entropy: Uint8Array): {\n privateKey: string\n publicKey: string\n } {\n const rawPrivateKey = Sha512.half(entropy)\n const privateKey = ED_PREFIX + bytesToHex(rawPrivateKey)\n const publicKey =\n ED_PREFIX + bytesToHex(nobleEd25519.getPublicKey(rawPrivateKey))\n return { privateKey, publicKey }\n },\n\n sign(message: Uint8Array, privateKey: HexString): string {\n assert.ok(message instanceof Uint8Array, 'message must be array of octets')\n assert.ok(\n privateKey.length === 66,\n 'private key must be 33 bytes including prefix',\n )\n return bytesToHex(nobleEd25519.sign(message, privateKey.slice(2)))\n },\n\n verify(\n message: Uint8Array,\n signature: HexString,\n publicKey: string,\n ): boolean {\n // Unlikely to be triggered as these are internal and guarded by getAlgorithmFromKey\n assert.ok(\n publicKey.length === 66,\n 'public key must be 33 bytes including prefix',\n )\n return nobleEd25519.verify(\n signature,\n message,\n // Remove the 0xED prefix\n publicKey.slice(2),\n // By default, set zip215 to false for compatibility reasons.\n // ZIP 215 is a stricter Ed25519 signature verification scheme.\n // However, setting it to false adheres to the more commonly used\n // RFC8032 / NIST186-5 standards, making it compatible with systems\n // like the XRP Ledger.\n { zip215: false },\n )\n },\n}\n\nexport default ed25519\n","import {\n decodeNodePublic,\n decodeSeed,\n encodeAccountID,\n encodeSeed,\n} from 'ripple-address-codec'\nimport { ripemd160 } from '@xrplf/isomorphic/ripemd160'\nimport { sha256 } from '@xrplf/isomorphic/sha256'\nimport { hexToBytes, randomBytes } from '@xrplf/isomorphic/utils'\n\nimport { accountPublicFromPublicGenerator } from './signing-schemes/secp256k1/utils'\nimport Sha512 from './utils/Sha512'\nimport assert from './utils/assert'\nimport type { Algorithm, HexString, KeyPair, SigningScheme } from './types'\nimport {\n getAlgorithmFromPrivateKey,\n getAlgorithmFromPublicKey,\n} from './utils/getAlgorithmFromKey'\n\nimport secp256k1 from './signing-schemes/secp256k1'\nimport ed25519 from './signing-schemes/ed25519'\n\nfunction getSigningScheme(algorithm: Algorithm): SigningScheme {\n const schemes = { 'ecdsa-secp256k1': secp256k1, ed25519 }\n return schemes[algorithm]\n}\n\nfunction generateSeed(\n options: {\n entropy?: Uint8Array\n algorithm?: Algorithm\n } = {},\n): string {\n assert.ok(\n !options.entropy || options.entropy.length >= 16,\n 'entropy too short',\n )\n const entropy = options.entropy\n ? options.entropy.slice(0, 16)\n : randomBytes(16)\n const type = options.algorithm === 'ed25519' ? 'ed25519' : 'secp256k1'\n return encodeSeed(entropy, type)\n}\n\nfunction deriveKeypair(\n seed: string,\n options?: {\n algorithm?: Algorithm\n validator?: boolean\n accountIndex?: number\n },\n): KeyPair {\n const decoded = decodeSeed(seed)\n const proposedAlgorithm = options?.algorithm ?? decoded.type\n const algorithm =\n proposedAlgorithm === 'ed25519' ? 'ed25519' : 'ecdsa-secp256k1'\n const scheme = getSigningScheme(algorithm)\n const keypair = scheme.deriveKeypair(decoded.bytes, options)\n const messageToVerify = Sha512.half('This test message should verify.')\n const signature = scheme.sign(messageToVerify, keypair.privateKey)\n /* istanbul ignore if */\n if (!scheme.verify(messageToVerify, signature, keypair.publicKey)) {\n throw new Error('derived keypair did not generate verifiable signature')\n }\n return keypair\n}\n\nfunction sign(messageHex: HexString, privateKey: HexString): HexString {\n const algorithm = getAlgorithmFromPrivateKey(privateKey)\n return getSigningScheme(algorithm).sign(hexToBytes(messageHex), privateKey)\n}\n\nfunction verify(\n messageHex: HexString,\n signature: HexString,\n publicKey: HexString,\n): boolean {\n const algorithm = getAlgorithmFromPublicKey(publicKey)\n return getSigningScheme(algorithm).verify(\n hexToBytes(messageHex),\n signature,\n publicKey,\n )\n}\n\nfunction computePublicKeyHash(publicKeyBytes: Uint8Array): Uint8Array {\n return ripemd160(sha256(publicKeyBytes))\n}\n\nfunction deriveAddressFromBytes(publicKeyBytes: Uint8Array): string {\n return encodeAccountID(computePublicKeyHash(publicKeyBytes))\n}\n\nfunction deriveAddress(publicKey: string): string {\n return deriveAddressFromBytes(hexToBytes(publicKey))\n}\n\nfunction deriveNodeAddress(publicKey: string): string {\n const generatorBytes = decodeNodePublic(publicKey)\n const accountPublicBytes = accountPublicFromPublicGenerator(generatorBytes)\n return deriveAddressFromBytes(accountPublicBytes)\n}\n\nexport {\n generateSeed,\n deriveKeypair,\n sign,\n verify,\n deriveAddress,\n deriveNodeAddress,\n decodeSeed,\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { AccountTxTransaction, Client } from \"xrpl\";\nimport { verify } from \"ripple-keypairs\";\n\nexport function verifyXRPL(\n message: string,\n publicKey: string,\n proof: string\n): boolean {\n return verify(Buffer.from(message).toString(\"hex\"), proof, publicKey);\n}\n\nexport const xrplTestnetWs = [\n \"wss://s.altnet.rippletest.net:51233\",\n \"wss://testnet.xrpl-labs.com/\",\n];\n\nexport const xrplMainnetWs = [\n \"wss://s1.ripple.com\",\n \"wss://xrplcluster.com/\", // full node\n \"wss://s2.ripple.com/\",\n];\n\n// If the public key is not provided, we need to get it directly\nasync function getPublicKey(\n address: string,\n isTest?: boolean\n): Promise<string | undefined> {\n const servers = isTest ? xrplTestnetWs : xrplMainnetWs;\n\n for (const server of servers) {\n try {\n const client = new Client(server);\n await client.connect();\n\n const response = await client.request({\n command: \"account_tx\",\n account: address,\n binary: false,\n limit: 2,\n forward: false,\n });\n\n await client.disconnect();\n return getSigningPubkeyFromLatestTx(response.result?.transactions);\n } catch (error) {\n let errorMessage = \"Connection to XRPL server failed\";\n if (error instanceof Error) {\n errorMessage += `: ${error.message}`;\n }\n console.error(errorMessage);\n // Continue to next server\n }\n }\n}\n\nfunction getSigningPubkeyFromLatestTx(\n latestTx: AccountTxTransaction[]\n): string {\n for (let i = 0; i < latestTx.length; i++) {\n // Check if the Account in the .tx is the address derived from the pubkey\n const signingPubKey = latestTx[i]?.tx_json?.SigningPubKey ?? \"0x\";\n // TODO: https://github.com/Cypher-Laboratory/xrpl-publickey-getter/blob/main/src/pubKeyGetter.ts#L98\n // Check the public key matches the address properly\n return signingPubKey;\n }\n throw new Error(\"No valid pubkey found in the latest transactions\");\n}\n\nexport async function verifyPersonalSignXRPL(\n proof: SignatureProof,\n publicKey?: string,\n isTest?: boolean\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"xrpl\") return { ...proof, status: ProofStatus.FAILED };\n\n if (!publicKey) {\n publicKey = await getPublicKey(address, isTest);\n }\n\n if (!publicKey) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n const verified = verifyXRPL(proof.attestation, publicKey, proof.proof);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@notabene/verify-proof",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.1-next.1",
|
|
4
4
|
"description": "Verify ownership proofs",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"module": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
9
|
"main": "dist/index.cjs",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/index.cjs"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
10
17
|
"author": "Pelle Braendgaard",
|
|
11
18
|
"license": "Apache-2.0",
|
|
12
19
|
"packageManager": "yarn@4.6.0",
|
|
@@ -19,7 +26,7 @@
|
|
|
19
26
|
"scripts": {
|
|
20
27
|
"build:dev": "yarn build && yarn dev",
|
|
21
28
|
"build:clean": "rm -rf dist",
|
|
22
|
-
"build": "
|
|
29
|
+
"build": "tsup",
|
|
23
30
|
"lint": "eslint ./src",
|
|
24
31
|
"test:unit": "vitest",
|
|
25
32
|
"test:coverage": "vitest --coverage"
|
|
@@ -37,6 +44,7 @@
|
|
|
37
44
|
"microbundle": "^0.15.1",
|
|
38
45
|
"semantic-release": "^24.2.3",
|
|
39
46
|
"tronweb": "^6.0.0",
|
|
47
|
+
"tsup": "^8.0.0",
|
|
40
48
|
"typescript": "^5.5.4",
|
|
41
49
|
"typescript-eslint": "^8.24.1",
|
|
42
50
|
"vite": "^5.4.11",
|
|
@@ -50,6 +58,7 @@
|
|
|
50
58
|
"@scure/base": "^1.2.1",
|
|
51
59
|
"@stellar/stellar-sdk": "^13.1.0",
|
|
52
60
|
"bip322-js": "^2.0.0",
|
|
61
|
+
"buffer": "^6.0.3",
|
|
53
62
|
"ox": "^0.2.2",
|
|
54
63
|
"tweetnacl": "^1.0.3",
|
|
55
64
|
"varuint-bitcoin": "^2.0.0",
|
package/src/bitcoin.ts
CHANGED
|
@@ -48,23 +48,23 @@ const CHAIN_CONFIGS: Record<string, ChainConfig> = {
|
|
|
48
48
|
},
|
|
49
49
|
dogecoin: {
|
|
50
50
|
messagePrefix: "\u0019Dogecoin Signed Message:\n",
|
|
51
|
-
pubKeyHashVersion:
|
|
51
|
+
pubKeyHashVersion: 0x1e, // D...
|
|
52
52
|
scriptHashVersion: 0x16, // A...
|
|
53
53
|
isTestnet: false,
|
|
54
54
|
},
|
|
55
55
|
dash: {
|
|
56
56
|
messagePrefix: "\u0019DarkCoin Signed Message:\n",
|
|
57
|
-
pubKeyHashVersion:
|
|
57
|
+
pubKeyHashVersion: 0x4c, // X...
|
|
58
58
|
scriptHashVersion: 0x10, // 7...
|
|
59
59
|
isTestnet: false,
|
|
60
60
|
},
|
|
61
61
|
zcash: {
|
|
62
62
|
messagePrefix: "\u0018Zcash Signed Message:\n",
|
|
63
|
-
pubKeyHashVersion: Uint8Array.from([
|
|
64
|
-
scriptHashVersion: Uint8Array.from([
|
|
63
|
+
pubKeyHashVersion: Uint8Array.from([0x1c, 0xb8]), // <-- FIXED
|
|
64
|
+
scriptHashVersion: Uint8Array.from([0x1c, 0xbd]),
|
|
65
65
|
isTestnet: false,
|
|
66
66
|
},
|
|
67
|
-
|
|
67
|
+
|
|
68
68
|
testnet: {
|
|
69
69
|
messagePrefix: "\u0018Bitcoin Signed Message:\n",
|
|
70
70
|
pubKeyHashVersion: 0x6f, // m or n
|
|
@@ -88,9 +88,9 @@ enum DerivationMode {
|
|
|
88
88
|
export async function verifyBTCSignature(
|
|
89
89
|
proof: SignatureProof
|
|
90
90
|
): Promise<SignatureProof> {
|
|
91
|
-
const [ns
|
|
91
|
+
const [ns, , address] = proof.address.split(/:/);
|
|
92
92
|
if (ns !== "bip122") return { ...proof, status: ProofStatus.FAILED };
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
// Map chainId to our chain configuration
|
|
95
95
|
const chainConfig = getChainConfig(address);
|
|
96
96
|
if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };
|
|
@@ -104,7 +104,16 @@ export async function verifyBTCSignature(
|
|
|
104
104
|
if (chainConfig.isTestnet) {
|
|
105
105
|
return verifyBIP322(address, proof);
|
|
106
106
|
}
|
|
107
|
-
|
|
107
|
+
|
|
108
|
+
// Check if this is a Taproot address (bc1p or tb1p)
|
|
109
|
+
const isTaproot = address.startsWith("bc1p") || address.startsWith("tb1p");
|
|
110
|
+
|
|
111
|
+
// For Taproot addresses with BIP-137 proof type, use BIP-322 verification
|
|
112
|
+
// since BIP-137 doesn't officially support Taproot
|
|
113
|
+
if (isTaproot && proof.type === ProofTypes.BIP137) {
|
|
114
|
+
return verifyBIP322(address, proof);
|
|
115
|
+
}
|
|
116
|
+
|
|
108
117
|
try {
|
|
109
118
|
switch (proof.type) {
|
|
110
119
|
case ProofTypes.BIP137:
|
|
@@ -117,24 +126,30 @@ export async function verifyBTCSignature(
|
|
|
117
126
|
status: ProofStatus.FAILED,
|
|
118
127
|
};
|
|
119
128
|
}
|
|
120
|
-
} catch
|
|
121
|
-
console.error("error verifying proof", error);
|
|
129
|
+
} catch {
|
|
122
130
|
return {
|
|
123
131
|
...proof,
|
|
124
132
|
status: ProofStatus.FAILED,
|
|
125
|
-
// error: error.message || error,
|
|
126
133
|
};
|
|
127
134
|
}
|
|
128
135
|
}
|
|
129
136
|
|
|
130
137
|
function getChainConfig(address: string): ChainConfig {
|
|
131
|
-
if (
|
|
138
|
+
if (
|
|
139
|
+
address.startsWith("1") ||
|
|
140
|
+
address.startsWith("3") ||
|
|
141
|
+
address.startsWith("bc1")
|
|
142
|
+
) {
|
|
132
143
|
return CHAIN_CONFIGS["bitcoin"];
|
|
133
144
|
}
|
|
134
145
|
if (address.startsWith("t1") || address.startsWith("t3")) {
|
|
135
146
|
return CHAIN_CONFIGS["zcash"];
|
|
136
147
|
}
|
|
137
|
-
if (
|
|
148
|
+
if (
|
|
149
|
+
address.startsWith("L") ||
|
|
150
|
+
address.startsWith("M") ||
|
|
151
|
+
address.startsWith("ltc1")
|
|
152
|
+
) {
|
|
138
153
|
return CHAIN_CONFIGS["litecoin"];
|
|
139
154
|
}
|
|
140
155
|
if (address.startsWith("D") || address.startsWith("A")) {
|
|
@@ -153,7 +168,6 @@ function getChainConfig(address: string): ChainConfig {
|
|
|
153
168
|
return CHAIN_CONFIGS["bitcoin"];
|
|
154
169
|
}
|
|
155
170
|
|
|
156
|
-
|
|
157
171
|
function verifyBIP322(address: string, proof: SignatureProof) {
|
|
158
172
|
const { attestation, proof: signatureProof } = proof;
|
|
159
173
|
const verified = Verifier.verifySignature(
|
|
@@ -167,17 +181,29 @@ function verifyBIP322(address: string, proof: SignatureProof) {
|
|
|
167
181
|
};
|
|
168
182
|
}
|
|
169
183
|
|
|
170
|
-
function verifyBIP137(
|
|
184
|
+
function verifyBIP137(
|
|
185
|
+
address: string,
|
|
186
|
+
proof: SignatureProof,
|
|
187
|
+
chainConfig: ChainConfig
|
|
188
|
+
) {
|
|
171
189
|
const derivationMode = getDerivationMode(address);
|
|
172
|
-
|
|
190
|
+
|
|
173
191
|
// For legacy addresses (starting with "1"), never use SegWit encoding
|
|
174
192
|
// For P2SH addresses (starting with "3"), use SegWit encoding if they have bech32 support
|
|
175
193
|
// For native SegWit addresses (bc1, tb1, ltc1), always use SegWit encoding
|
|
176
|
-
const useSegwitEncoding = Boolean(
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
194
|
+
const useSegwitEncoding = Boolean(
|
|
195
|
+
chainConfig.bech32Prefix &&
|
|
196
|
+
(derivationMode === DerivationMode.NATIVE ||
|
|
197
|
+
(derivationMode === DerivationMode.SEGWIT && !address.startsWith("1")))
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
const verified = verify(
|
|
201
|
+
proof.attestation,
|
|
202
|
+
address,
|
|
203
|
+
proof.proof,
|
|
204
|
+
useSegwitEncoding,
|
|
205
|
+
chainConfig
|
|
206
|
+
);
|
|
181
207
|
|
|
182
208
|
return {
|
|
183
209
|
...proof,
|
|
@@ -257,25 +283,34 @@ function verify(
|
|
|
257
283
|
let actual: string = "";
|
|
258
284
|
|
|
259
285
|
// Special handling for Bitcoin Cash addresses
|
|
260
|
-
if (address.startsWith(
|
|
286
|
+
if (address.startsWith("q")) {
|
|
261
287
|
// For BCH, we'll compare the public key hash directly since we're getting a CashAddr
|
|
262
288
|
// Convert the CashAddr to legacy format for comparison
|
|
263
|
-
actual = encodeBase58AddressFormat(
|
|
289
|
+
actual = encodeBase58AddressFormat(
|
|
290
|
+
chainConfig.pubKeyHashVersion,
|
|
291
|
+
publicKeyHash
|
|
292
|
+
);
|
|
264
293
|
// Legacy P2PKH addresses in BCH start with '1' just like BTC
|
|
265
294
|
// Source: https://reference.cash/protocol/blockchain/encoding/cashaddr#legacy-address-format
|
|
266
|
-
return actual.startsWith(
|
|
295
|
+
return actual.startsWith("1");
|
|
267
296
|
}
|
|
268
297
|
|
|
269
298
|
if (segwitType) {
|
|
270
299
|
if (segwitType === SEGWIT_TYPES.P2SH_P2WPKH) {
|
|
271
|
-
actual = encodeBase58AddressFormat(
|
|
300
|
+
actual = encodeBase58AddressFormat(
|
|
301
|
+
chainConfig.scriptHashVersion,
|
|
302
|
+
publicKeyHash
|
|
303
|
+
);
|
|
272
304
|
} else {
|
|
273
305
|
// parsed.segwitType === SEGWIT_TYPES.P2WPKH
|
|
274
306
|
if (chainConfig.bech32Prefix) {
|
|
275
307
|
actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);
|
|
276
308
|
} else {
|
|
277
309
|
// Fallback to legacy if bech32 not supported
|
|
278
|
-
actual = encodeBase58AddressFormat(
|
|
310
|
+
actual = encodeBase58AddressFormat(
|
|
311
|
+
chainConfig.scriptHashVersion,
|
|
312
|
+
publicKeyHash
|
|
313
|
+
);
|
|
279
314
|
// base58 can be p2pkh or p2sh-p2wpkh
|
|
280
315
|
}
|
|
281
316
|
}
|
|
@@ -288,24 +323,47 @@ function verify(
|
|
|
288
323
|
redeemScript[1] = 0x14; // push 20 bytes
|
|
289
324
|
redeemScript.set(publicKeyHash, 2);
|
|
290
325
|
const redeemScriptHash = hash160(redeemScript);
|
|
291
|
-
const p2shP2wpkh = encodeBase58AddressFormat(
|
|
326
|
+
const p2shP2wpkh = encodeBase58AddressFormat(
|
|
327
|
+
chainConfig.scriptHashVersion,
|
|
328
|
+
redeemScriptHash
|
|
329
|
+
);
|
|
292
330
|
// Legacy P2SH: script hash of the public key
|
|
293
|
-
const legacyP2sh = encodeBase58AddressFormat(
|
|
331
|
+
const legacyP2sh = encodeBase58AddressFormat(
|
|
332
|
+
chainConfig.scriptHashVersion,
|
|
333
|
+
publicKeyHash
|
|
334
|
+
);
|
|
294
335
|
if (address === p2shP2wpkh || address === legacyP2sh) {
|
|
295
336
|
return true;
|
|
296
337
|
}
|
|
297
338
|
actual = legacyP2sh; // fallback for error reporting
|
|
339
|
+
} else if (address.startsWith("bc1q") || address.startsWith("tb1q") || address.startsWith("ltc1q")) {
|
|
340
|
+
// For native SegWit P2WPKH addresses (bc1q/tb1q/ltc1q), always encode as bech32
|
|
341
|
+
// This handles Ledger wallets that sign without segwit flags
|
|
342
|
+
if (chainConfig.bech32Prefix) {
|
|
343
|
+
actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);
|
|
344
|
+
} else {
|
|
345
|
+
actual = encodeBase58AddressFormat(
|
|
346
|
+
chainConfig.pubKeyHashVersion,
|
|
347
|
+
publicKeyHash
|
|
348
|
+
);
|
|
349
|
+
}
|
|
298
350
|
} else if (checkSegwitAlways && chainConfig.bech32Prefix) {
|
|
299
351
|
try {
|
|
300
352
|
actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);
|
|
301
353
|
// if address is bech32 it is not p2sh
|
|
302
354
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
303
355
|
} catch (e) {
|
|
304
|
-
actual = encodeBase58AddressFormat(
|
|
356
|
+
actual = encodeBase58AddressFormat(
|
|
357
|
+
chainConfig.scriptHashVersion,
|
|
358
|
+
publicKeyHash
|
|
359
|
+
);
|
|
305
360
|
// base58 can be p2pkh or p2sh-p2wpkh
|
|
306
361
|
}
|
|
307
362
|
} else {
|
|
308
|
-
actual = encodeBase58AddressFormat(
|
|
363
|
+
actual = encodeBase58AddressFormat(
|
|
364
|
+
chainConfig.pubKeyHashVersion,
|
|
365
|
+
publicKeyHash
|
|
366
|
+
);
|
|
309
367
|
}
|
|
310
368
|
}
|
|
311
369
|
|
|
@@ -314,11 +372,12 @@ function verify(
|
|
|
314
372
|
|
|
315
373
|
const base58check = createBase58check(Hash.sha256);
|
|
316
374
|
|
|
317
|
-
function encodeBase58AddressFormat(
|
|
375
|
+
function encodeBase58AddressFormat(
|
|
376
|
+
version: number | Uint8Array,
|
|
377
|
+
publicKeyHash: Uint8Array
|
|
378
|
+
) {
|
|
318
379
|
const prefixBytes =
|
|
319
|
-
typeof version === "number"
|
|
320
|
-
? Uint8Array.of(version)
|
|
321
|
-
: version; // Accept raw Uint8Array for Zcash
|
|
380
|
+
typeof version === "number" ? Uint8Array.of(version) : version; // Accept raw Uint8Array for Zcash
|
|
322
381
|
|
|
323
382
|
const payload = new Uint8Array(prefixBytes.length + publicKeyHash.length);
|
|
324
383
|
payload.set(prefixBytes);
|
|
@@ -326,7 +385,6 @@ function encodeBase58AddressFormat(version: number | Uint8Array, publicKeyHash:
|
|
|
326
385
|
return base58check.encode(payload);
|
|
327
386
|
}
|
|
328
387
|
|
|
329
|
-
|
|
330
388
|
function magicHash(attestation: string, messagePrefix: string) {
|
|
331
389
|
const prefix = new TextEncoder().encode(messagePrefix);
|
|
332
390
|
const message = new TextEncoder().encode(attestation);
|
|
@@ -340,7 +398,10 @@ function magicHash(attestation: string, messagePrefix: string) {
|
|
|
340
398
|
return hash256(buffer);
|
|
341
399
|
}
|
|
342
400
|
|
|
343
|
-
function encodeBech32Address(
|
|
401
|
+
function encodeBech32Address(
|
|
402
|
+
publicKeyHash: Uint8Array,
|
|
403
|
+
prefix: string = "bc"
|
|
404
|
+
): string {
|
|
344
405
|
const bwords = bech32.toWords(publicKeyHash);
|
|
345
406
|
bwords.unshift(0);
|
|
346
407
|
return bech32.encode(prefix, bwords);
|
|
@@ -352,4 +413,4 @@ function hash256(buffer: Uint8Array): Uint8Array {
|
|
|
352
413
|
|
|
353
414
|
function hash160(buffer: Uint8Array): Uint8Array {
|
|
354
415
|
return Hash.ripemd160(Hash.sha256(buffer));
|
|
355
|
-
}
|
|
416
|
+
}
|
package/src/cardano.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import verifyDataSignature from "@cardano-foundation/cardano-verify-datasignature";
|
|
1
|
+
import * as verifyDataSignature from "@cardano-foundation/cardano-verify-datasignature";
|
|
2
2
|
import { ProofStatus, SignatureProof } from "@notabene/javascript-sdk";
|
|
3
3
|
|
|
4
4
|
export async function verifyCIP8Signature(
|
|
@@ -15,7 +15,7 @@ export async function verifyCIP8Signature(
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
try {
|
|
18
|
-
const verified = verifyDataSignature(
|
|
18
|
+
const verified = verifyDataSignature.default(
|
|
19
19
|
proof.proof,
|
|
20
20
|
key,
|
|
21
21
|
proof.attestation,
|
package/src/index.ts
CHANGED
|
@@ -6,16 +6,8 @@ import {
|
|
|
6
6
|
ProofTypes,
|
|
7
7
|
ProofStatus,
|
|
8
8
|
} from "@notabene/javascript-sdk";
|
|
9
|
-
import { verifyBTCSignature } from "./bitcoin";
|
|
10
|
-
import { verifyPersonalSignEIP191 } from "./eth";
|
|
11
|
-
import { verifySolanaSignature, verifySolanaSIWS } from "./solana";
|
|
12
|
-
import { verifyPersonalSignTIP191 } from "./tron";
|
|
13
|
-
import { verifyCIP8Signature } from "./cardano";
|
|
14
|
-
import { verifyPersonalSignXRPL } from "./xrpl";
|
|
15
|
-
import { verifyStellarSignature } from "./xlm";
|
|
16
|
-
import { verifyConcordiumSignature } from "./concordium";
|
|
17
|
-
import { verifyCosmosSignature } from "./cosmos";
|
|
18
9
|
|
|
10
|
+
// Use dynamic imports to ensure Buffer is available before loading crypto libraries
|
|
19
11
|
export async function verifyProof(
|
|
20
12
|
proof: OwnershipProof,
|
|
21
13
|
publicKey?: string,
|
|
@@ -35,28 +27,48 @@ export async function verifyProof(
|
|
|
35
27
|
? ProofStatus.FLAGGED
|
|
36
28
|
: ProofStatus.FAILED,
|
|
37
29
|
};
|
|
38
|
-
case ProofTypes.CIP8:
|
|
30
|
+
case ProofTypes.CIP8: {
|
|
31
|
+
const { verifyCIP8Signature } = await import("./cardano");
|
|
39
32
|
return verifyCIP8Signature(proof as SignatureProof);
|
|
40
|
-
|
|
33
|
+
}
|
|
34
|
+
case ProofTypes.EIP191: {
|
|
35
|
+
const { verifyPersonalSignEIP191 } = await import("./eth");
|
|
41
36
|
return verifyPersonalSignEIP191(proof as SignatureProof);
|
|
42
|
-
|
|
37
|
+
}
|
|
38
|
+
case ProofTypes.ED25519: {
|
|
39
|
+
const { verifySolanaSignature } = await import("./solana");
|
|
43
40
|
return verifySolanaSignature(proof as SignatureProof);
|
|
44
|
-
|
|
41
|
+
}
|
|
42
|
+
case ProofTypes.SOL_SIWX: {
|
|
43
|
+
const { verifySolanaSIWS } = await import("./solana");
|
|
45
44
|
return verifySolanaSIWS(proof as SignatureProof);
|
|
46
|
-
|
|
45
|
+
}
|
|
46
|
+
case ProofTypes.XRP_ED25519: {
|
|
47
|
+
const { verifyPersonalSignXRPL } = await import("./xrpl");
|
|
47
48
|
return verifyPersonalSignXRPL(proof as SignatureProof, publicKey);
|
|
48
|
-
|
|
49
|
+
}
|
|
50
|
+
case ProofTypes.XLM_ED25519: {
|
|
51
|
+
const { verifyStellarSignature } = await import("./xlm");
|
|
49
52
|
return verifyStellarSignature(proof as SignatureProof);
|
|
50
|
-
|
|
53
|
+
}
|
|
54
|
+
case ProofTypes.CONCORDIUM: {
|
|
55
|
+
const { verifyConcordiumSignature } = await import("./concordium");
|
|
51
56
|
return verifyConcordiumSignature(proof as SignatureProof);
|
|
52
|
-
|
|
57
|
+
}
|
|
58
|
+
case ProofTypes.COSMOS: {
|
|
59
|
+
const { verifyCosmosSignature } = await import("./cosmos");
|
|
53
60
|
return verifyCosmosSignature(proof as SignatureProof);
|
|
61
|
+
}
|
|
54
62
|
case ProofTypes.EIP712:
|
|
55
63
|
case ProofTypes.BIP137:
|
|
56
|
-
case ProofTypes.BIP322:
|
|
64
|
+
case ProofTypes.BIP322: {
|
|
65
|
+
const { verifyBTCSignature } = await import("./bitcoin");
|
|
57
66
|
return verifyBTCSignature(proof as SignatureProof);
|
|
58
|
-
|
|
67
|
+
}
|
|
68
|
+
case ProofTypes.TIP191: {
|
|
69
|
+
const { verifyPersonalSignTIP191 } = await import("./tron");
|
|
59
70
|
return verifyPersonalSignTIP191(proof as SignatureProof);
|
|
71
|
+
}
|
|
60
72
|
case ProofTypes.BIP137_XPUB:
|
|
61
73
|
case ProofTypes.MicroTransfer:
|
|
62
74
|
}
|
package/src/solana.ts
CHANGED