@notabene/verify-proof 1.12.0-next.6 → 1.12.0-next.8

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.
Files changed (71) hide show
  1. package/dist/{bitcoin-EUO57CWB.cjs → cjs/bitcoin-6D3KI2GL.cjs} +93 -12
  2. package/dist/cjs/bitcoin-6D3KI2GL.cjs.map +1 -0
  3. package/dist/{cardano-DYBYEAAF.cjs → cjs/cardano-I4TIXDXN.cjs} +5 -21
  4. package/dist/cjs/cardano-I4TIXDXN.cjs.map +1 -0
  5. package/dist/{concordium-5FMO6ONK.cjs → cjs/concordium-Y2CDDEFN.cjs} +2 -2
  6. package/dist/cjs/concordium-Y2CDDEFN.cjs.map +1 -0
  7. package/dist/{cosmos-64MKE5FJ.cjs → cjs/cosmos-S4V4EGEW.cjs} +2 -2
  8. package/dist/cjs/cosmos-S4V4EGEW.cjs.map +1 -0
  9. package/dist/{eth-3DX3PXDU.cjs → cjs/eth-V2XIDQ5K.cjs} +2 -2
  10. package/dist/cjs/eth-V2XIDQ5K.cjs.map +1 -0
  11. package/dist/{index.cjs → cjs/index.cjs} +10 -10
  12. package/dist/cjs/index.cjs.map +1 -0
  13. package/dist/{solana-PQ5K4NGO.cjs → cjs/solana-34EDY5SS.cjs} +6 -22
  14. package/dist/cjs/solana-34EDY5SS.cjs.map +1 -0
  15. package/dist/{tron-F5AARBY4.cjs → cjs/tron-EVR3X3SN.cjs} +2 -2
  16. package/dist/cjs/tron-EVR3X3SN.cjs.map +1 -0
  17. package/dist/{xlm-5GODWWL2.cjs → cjs/xlm-NLK5LUTE.cjs} +2 -2
  18. package/dist/cjs/xlm-NLK5LUTE.cjs.map +1 -0
  19. package/dist/{xrpl-7HQLIDAK.cjs → cjs/xrpl-ANNWPM6W.cjs} +2 -2
  20. package/dist/cjs/xrpl-ANNWPM6W.cjs.map +1 -0
  21. package/dist/{bitcoin-2BFQZA2L.js → esm/bitcoin-QNH3XKWQ.js} +93 -12
  22. package/dist/esm/bitcoin-QNH3XKWQ.js.map +1 -0
  23. package/dist/{cardano-WE6YXYLW.js → esm/cardano-PRKJ672B.js} +4 -4
  24. package/dist/esm/cardano-PRKJ672B.js.map +1 -0
  25. package/dist/{concordium-55YCWLCX.js → esm/concordium-WPUFXEMG.js} +2 -2
  26. package/dist/esm/concordium-WPUFXEMG.js.map +1 -0
  27. package/dist/{cosmos-QMH7BK7S.js → esm/cosmos-72GGSOW5.js} +2 -2
  28. package/dist/esm/cosmos-72GGSOW5.js.map +1 -0
  29. package/dist/{eth-ICLGRJE5.js → esm/eth-O6PU6LLD.js} +2 -2
  30. package/dist/esm/eth-O6PU6LLD.js.map +1 -0
  31. package/dist/{index.js → esm/index.js} +10 -10
  32. package/dist/{index.cjs.map → esm/index.js.map} +1 -1
  33. package/dist/{solana-4KQFLZUC.js → esm/solana-SBGOQBKM.js} +3 -3
  34. package/dist/esm/solana-SBGOQBKM.js.map +1 -0
  35. package/dist/{tron-OBLPB2LN.js → esm/tron-OZWJ7KBW.js} +2 -2
  36. package/dist/esm/tron-OZWJ7KBW.js.map +1 -0
  37. package/dist/{xlm-GX2QGFLI.js → esm/xlm-WD63A2O3.js} +2 -2
  38. package/dist/esm/xlm-WD63A2O3.js.map +1 -0
  39. package/dist/{xrpl-YCDFXBGQ.js → esm/xrpl-XMNIEWXL.js} +2 -2
  40. package/dist/esm/xrpl-XMNIEWXL.js.map +1 -0
  41. package/package.json +13 -8
  42. package/src/bitcoin.ts +23 -15
  43. package/src/cardano.ts +2 -2
  44. package/src/cashaddr.ts +157 -0
  45. package/src/solana.ts +1 -1
  46. package/src/tests/bitcoin.test.ts +104 -0
  47. package/dist/bitcoin-2BFQZA2L.js.map +0 -1
  48. package/dist/bitcoin-EUO57CWB.cjs.map +0 -1
  49. package/dist/cardano-DYBYEAAF.cjs.map +0 -1
  50. package/dist/cardano-WE6YXYLW.js.map +0 -1
  51. package/dist/concordium-55YCWLCX.js.map +0 -1
  52. package/dist/concordium-5FMO6ONK.cjs.map +0 -1
  53. package/dist/cosmos-64MKE5FJ.cjs.map +0 -1
  54. package/dist/cosmos-QMH7BK7S.js.map +0 -1
  55. package/dist/eth-3DX3PXDU.cjs.map +0 -1
  56. package/dist/eth-ICLGRJE5.js.map +0 -1
  57. package/dist/index.js.map +0 -1
  58. package/dist/solana-4KQFLZUC.js.map +0 -1
  59. package/dist/solana-PQ5K4NGO.cjs.map +0 -1
  60. package/dist/tron-F5AARBY4.cjs.map +0 -1
  61. package/dist/tron-OBLPB2LN.js.map +0 -1
  62. package/dist/xlm-5GODWWL2.cjs.map +0 -1
  63. package/dist/xlm-GX2QGFLI.js.map +0 -1
  64. package/dist/xrpl-7HQLIDAK.cjs.map +0 -1
  65. package/dist/xrpl-YCDFXBGQ.js.map +0 -1
  66. /package/dist/{chunk-OAXNH5XR.cjs → cjs/chunk-OAXNH5XR.cjs} +0 -0
  67. /package/dist/{chunk-OAXNH5XR.cjs.map → cjs/chunk-OAXNH5XR.cjs.map} +0 -0
  68. /package/dist/{index.d.cts → cjs/index.d.cts} +0 -0
  69. /package/dist/{chunk-E3V5ATTC.js → esm/chunk-E3V5ATTC.js} +0 -0
  70. /package/dist/{chunk-E3V5ATTC.js.map → esm/chunk-E3V5ATTC.js.map} +0 -0
  71. /package/dist/{index.d.ts → esm/index.d.ts} +0 -0
@@ -6,25 +6,9 @@ var nacl = require('tweetnacl');
6
6
  var javascriptSdk = require('@notabene/javascript-sdk');
7
7
  var base = require('@scure/base');
8
8
 
9
- function _interopNamespace(e) {
10
- if (e && e.__esModule) return e;
11
- var n = Object.create(null);
12
- if (e) {
13
- Object.keys(e).forEach(function (k) {
14
- if (k !== 'default') {
15
- var d = Object.getOwnPropertyDescriptor(e, k);
16
- Object.defineProperty(n, k, d.get ? d : {
17
- enumerable: true,
18
- get: function () { return e[k]; }
19
- });
20
- }
21
- });
22
- }
23
- n.default = e;
24
- return Object.freeze(n);
25
- }
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
10
 
27
- var nacl__namespace = /*#__PURE__*/_interopNamespace(nacl);
11
+ var nacl__default = /*#__PURE__*/_interopDefault(nacl);
28
12
 
29
13
  if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = buffer.Buffer; }
30
14
  async function verifySolanaSignature(proof) {
@@ -34,7 +18,7 @@ async function verifySolanaSignature(proof) {
34
18
  const publicKey = base.base58.decode(address);
35
19
  const messageBytes = new TextEncoder().encode(proof.attestation);
36
20
  const signatureBytes = base.base64.decode(proof.proof);
37
- const verified = nacl__namespace.sign.detached.verify(
21
+ const verified = nacl__default.default.sign.detached.verify(
38
22
  messageBytes,
39
23
  signatureBytes,
40
24
  publicKey
@@ -142,7 +126,7 @@ async function verifySolanaSIWS(proof) {
142
126
  if (reconstructedMessage !== signedMessageText) {
143
127
  return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
144
128
  }
145
- const verified = nacl__namespace.sign.detached.verify(
129
+ const verified = nacl__default.default.sign.detached.verify(
146
130
  metadata.signedMessage,
147
131
  metadata.signature,
148
132
  metadata.account.publicKey
@@ -361,5 +345,5 @@ function buildFieldLines(input) {
361
345
 
362
346
  exports.verifySolanaSIWS = verifySolanaSIWS;
363
347
  exports.verifySolanaSignature = verifySolanaSignature;
364
- //# sourceMappingURL=solana-PQ5K4NGO.cjs.map
365
- //# sourceMappingURL=solana-PQ5K4NGO.cjs.map
348
+ //# sourceMappingURL=solana-34EDY5SS.cjs.map
349
+ //# sourceMappingURL=solana-34EDY5SS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/solana.ts"],"names":["ProofStatus","base58","base64","nacl"],"mappings":"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","file":"solana-34EDY5SS.cjs","sourcesContent":["import nacl from \"tweetnacl\";\nimport { ProofStatus, SignatureProof, type SIWXInput, type SolanaMetadata } from \"@notabene/javascript-sdk\";\nimport { base64, base58 } from \"@scure/base\";\n\ninterface ParsedSIWSMessage {\n domain: string;\n address: string;\n statement?: string;\n uri?: string;\n version?: string;\n chainId?: string;\n nonce?: string;\n issuedAt?: string;\n expirationTime?: string;\n notBefore?: string;\n requestId?: string;\n resources?: string[];\n}\n\n\n\n/**\n * Verifies a Solana signature proof.\n * \n * This function can verify two types of Solana signatures:\n * 1. Standard Solana signatures\n * \n * @param proof - The signature proof containing the address, attestation, and signature\n * @returns Promise that resolves to a SignatureProof with updated status (VERIFIED or FAILED)\n * \n * @example\n * // Standard Solana signature verification\n * const result = await verifySolanaSignature(proof);\n * \n */\nexport async function verifySolanaSignature(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"solana\") return { ...proof, status: ProofStatus.FAILED };\n\n try {\n const publicKey = base58.decode(address);\n const messageBytes = new TextEncoder().encode(proof.attestation);\n const signatureBytes = base64.decode(proof.proof);\n const verified = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n publicKey,\n );\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\nfunction isSolanaSignInInput(obj: unknown): obj is SIWXInput {\n if (!obj || typeof obj !== 'object') return false;\n \n const input = obj as Record<string, unknown>;\n \n // Check for required properties\n return (\n typeof input.domain === 'string' &&\n typeof input.address === 'string' &&\n (input.statement === undefined || typeof input.statement === 'string') &&\n (input.uri === undefined || typeof input.uri === 'string') &&\n (input.version === undefined || typeof input.version === 'string') &&\n (input.chainId === undefined || typeof input.chainId === 'string') &&\n (input.nonce === undefined || typeof input.nonce === 'string') &&\n (input.issuedAt === undefined || typeof input.issuedAt === 'string') &&\n (input.expirationTime === undefined || typeof input.expirationTime === 'string') &&\n (input.notBefore === undefined || typeof input.notBefore === 'string') &&\n (input.requestId === undefined || typeof input.requestId === 'string') &&\n (input.resources === undefined || Array.isArray(input.resources))\n );\n}\n\nfunction isSolanaSignInMetadata(obj: unknown): obj is SolanaMetadata {\n if (!obj || typeof obj !== 'object') return false;\n \n const metadata = obj as Record<string, unknown>;\n \n // Check account object\n if (!metadata.account || typeof metadata.account !== 'object') return false;\n const account = metadata.account as Record<string, unknown>;\n if (typeof account.address !== 'string') return false;\n \n // Handle publicKey - could be Uint8Array or serialized object with numeric keys\n if (!account.publicKey) return false;\n if (!(account.publicKey instanceof Uint8Array)) {\n // Try to convert from serialized format\n const pkObj = account.publicKey as Record<string, unknown>;\n if (typeof pkObj === 'object') {\n // Convert object with numeric keys to Uint8Array\n const keys = Object.keys(pkObj).filter(key => !isNaN(Number(key))).sort((a, b) => Number(a) - Number(b));\n if (keys.length === 32) { // Solana public keys are 32 bytes\n const bytes = keys.map(key => Number(pkObj[key]));\n if (bytes.every(b => typeof b === 'number' && b >= 0 && b <= 255)) {\n account.publicKey = new Uint8Array(bytes);\n } else {\n return false;\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n \n // Handle signedMessage - could be Uint8Array or Buffer-like object\n if (!metadata.signedMessage) return false;\n if (!(metadata.signedMessage instanceof Uint8Array)) {\n const smObj = metadata.signedMessage as Record<string, unknown>;\n if (smObj.type === 'Buffer' && Array.isArray(smObj.data)) {\n metadata.signedMessage = new Uint8Array(smObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Handle signature - could be Uint8Array or Buffer-like object\n if (!metadata.signature) return false;\n if (!(metadata.signature instanceof Uint8Array)) {\n const sigObj = metadata.signature as Record<string, unknown>;\n if (sigObj.type === 'Buffer' && Array.isArray(sigObj.data)) {\n metadata.signature = new Uint8Array(sigObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Check message field contains valid SolanaSignInInput\n if (!metadata.message || typeof metadata.message !== 'object') {\n return false;\n }\n \n const message = metadata.message as unknown;\n \n // If address is missing from message, try to extract it from signedMessage\n if (typeof message === 'object' && message !== null) {\n const messageObj = message as Record<string, unknown>;\n if (!messageObj.address && metadata.signedMessage instanceof Uint8Array) {\n try {\n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const lines = signedMessageText.split('\\n');\n if (lines.length >= 2) {\n const address = lines[1].trim();\n if (address && /^[a-zA-Z0-9]{32,44}$/.test(address)) {\n messageObj.address = address;\n }\n }\n } catch {\n // Ignore errors in address extraction\n }\n }\n }\n \n if (!isSolanaSignInInput(metadata.message)) {\n return false;\n }\n \n return true;\n}\n\nexport async function verifySolanaSIWS(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns] = proof.address.split(/:/);\n if (ns !== \"solana\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n // Validate that metadata conforms to SolanaSignInMetadata\n if (!proof.chainSpecificData || !isSolanaSignInMetadata(proof.chainSpecificData)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n // Now we can safely cast to SolanaMetadata since we validated it\n const metadata = proof.chainSpecificData as SolanaMetadata;\n \n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const parsedMessage = parseSIWSMessage(signedMessageText);\n \n if (!parsedMessage) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Validate the parsed message against the input\n if (!validateSIWSMessage(parsedMessage, metadata.message as SIWXInput)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Reconstruct the message to ensure it matches the signed message\n const reconstructedMessage = createSIWSMessage(parsedMessage);\n if (reconstructedMessage !== signedMessageText) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Verify the signature against the message\n const verified = nacl.sign.detached.verify(\n metadata.signedMessage,\n metadata.signature,\n metadata.account.publicKey as Uint8Array\n );\n \n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\n// Parse SIWS message according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#message-construction\nfunction parseSIWSMessage(message: string): ParsedSIWSMessage | null {\n try {\n const lines = message.split('\\n');\n \n // Parse header (domain and address)\n const header = parseHeader(lines);\n if (!header) return null;\n \n const result: ParsedSIWSMessage = { ...header };\n \n let lineIndex = 2;\n \n // Parse statement if present\n const statementResult = parseStatement(lines, lineIndex);\n if (statementResult.statement !== undefined) {\n result.statement = statementResult.statement;\n lineIndex = statementResult.nextIndex;\n }\n \n // Parse advanced fields\n const advancedFields = parseAdvancedFields(lines, lineIndex);\n Object.assign(result, advancedFields);\n \n return result;\n } catch {\n return null;\n }\n}\n\nfunction parseHeader(lines: string[]): { domain: string; address: string } | null {\n // First line: domain + \" wants you to sign in with your Solana account:\"\n const domainMatch = lines[0]?.match(/^(.+) wants you to sign in with your Solana account:$/);\n if (!domainMatch) return null;\n \n const domain = domainMatch[1];\n \n // Second line: address\n const address = lines[1];\n if (!address || !/^[a-zA-Z0-9]{32,44}$/.test(address)) return null;\n \n return { domain, address };\n}\n\nfunction parseStatement(lines: string[], startIndex: number): { statement?: string; nextIndex: number } {\n let lineIndex = startIndex;\n \n // Check for statement (after empty line)\n if (lines[lineIndex] === '' && lines[lineIndex + 1] && !lines[lineIndex + 1].includes(':')) {\n lineIndex++; // Skip empty line\n const statement = lines[lineIndex];\n lineIndex++;\n \n // Skip another empty line after statement\n if (lines[lineIndex] === '') {\n lineIndex++;\n }\n \n return { statement, nextIndex: lineIndex };\n }\n \n return { nextIndex: lineIndex };\n}\n\nfunction parseAdvancedFields(lines: string[], startIndex: number): Partial<ParsedSIWSMessage> {\n const result: Partial<ParsedSIWSMessage> = {};\n \n // Define field parsers for string fields only\n const fieldParsers: Array<{\n prefix: string;\n key: keyof Omit<ParsedSIWSMessage, 'resources'>;\n }> = [\n { prefix: 'URI: ', key: 'uri' },\n { prefix: 'Version: ', key: 'version' },\n { prefix: 'Chain ID: ', key: 'chainId' },\n { prefix: 'Nonce: ', key: 'nonce' },\n { prefix: 'Issued At: ', key: 'issuedAt' },\n { prefix: 'Expiration Time: ', key: 'expirationTime' },\n { prefix: 'Not Before: ', key: 'notBefore' },\n { prefix: 'Request ID: ', key: 'requestId' }\n ];\n \n let lineIndex = startIndex;\n \n while (lineIndex < lines.length) {\n const line = lines[lineIndex];\n if (!line) {\n lineIndex++;\n continue;\n }\n \n // Check for resources (special case)\n if (line.startsWith('Resources:')) {\n const resources = parseResources(lines, lineIndex + 1);\n if (resources.length > 0) {\n result.resources = resources;\n lineIndex += resources.length + 1; // +1 for the \"Resources:\" line\n continue;\n }\n }\n \n // Check for other fields\n let fieldFound = false;\n for (const { prefix, key } of fieldParsers) {\n if (line.startsWith(prefix)) {\n const value = line.substring(prefix.length);\n result[key] = value;\n fieldFound = true;\n break;\n }\n }\n \n if (!fieldFound) {\n // Unknown field, skip it\n }\n \n lineIndex++;\n }\n \n return result;\n}\n\nfunction parseResources(lines: string[], startIndex: number): string[] {\n const resources: string[] = [];\n let lineIndex = startIndex;\n \n while (lineIndex < lines.length && lines[lineIndex]?.startsWith('- ')) {\n resources.push(lines[lineIndex].substring(2));\n lineIndex++;\n }\n \n return resources;\n}\n\n// Validate parsed SIWS message against input\nfunction validateSIWSMessage(parsed: ParsedSIWSMessage, input: SIWXInput): boolean {\n // Required fields validation\n if (parsed.domain !== input.domain || parsed.address !== input.address) {\n return false;\n }\n \n // Define validation rules for optional fields\n const fieldValidations: Array<{\n inputKey: keyof SIWXInput;\n parsedKey: keyof ParsedSIWSMessage;\n validator?: (inputValue: unknown, parsedValue: unknown) => boolean;\n }> = [\n { inputKey: 'statement', parsedKey: 'statement' },\n { inputKey: 'uri', parsedKey: 'uri' },\n { inputKey: 'version', parsedKey: 'version' },\n { inputKey: 'chainId', parsedKey: 'chainId' },\n { inputKey: 'nonce', parsedKey: 'nonce' },\n { inputKey: 'issuedAt', parsedKey: 'issuedAt' },\n { inputKey: 'expirationTime', parsedKey: 'expirationTime' },\n { inputKey: 'notBefore', parsedKey: 'notBefore' },\n { inputKey: 'requestId', parsedKey: 'requestId' },\n {\n inputKey: 'resources',\n parsedKey: 'resources',\n validator: (inputValue, parsedValue) => {\n if (!Array.isArray(inputValue) || !Array.isArray(parsedValue)) {\n return false;\n }\n return inputValue.length === parsedValue.length && \n inputValue.every((item, index) => item === parsedValue[index]);\n }\n }\n ];\n \n // Validate optional fields\n for (const { inputKey, parsedKey, validator } of fieldValidations) {\n const inputValue = input[inputKey];\n const parsedValue = parsed[parsedKey];\n \n if (inputValue !== undefined) {\n if (validator) {\n if (!validator(inputValue, parsedValue)) {\n return false;\n }\n } else if (inputValue !== parsedValue) {\n return false;\n }\n }\n }\n \n // Validate timestamps\n return validateTimestamps(parsed);\n}\n\n// Separate timestamp validation for better testability and clarity\nfunction validateTimestamps(parsed: ParsedSIWSMessage): boolean {\n const now = Date.now();\n \n // Validate issuedAt (allow 24 hour threshold for testing)\n if (parsed.issuedAt) {\n const issuedAt = new Date(parsed.issuedAt);\n const threshold = 24 * 60 * 60 * 1000; // 24 hours in milliseconds\n const timeDiff = Math.abs(issuedAt.getTime() - now);\n if (timeDiff > threshold) {\n return false;\n }\n }\n \n // Validate expirationTime\n if (parsed.expirationTime) {\n const expirationTime = new Date(parsed.expirationTime);\n if (expirationTime.getTime() <= now) {\n return false; // Message has expired\n }\n }\n \n // Validate notBefore\n if (parsed.notBefore) {\n const notBefore = new Date(parsed.notBefore);\n if (notBefore.getTime() > now) {\n return false; // Message not yet valid\n }\n }\n \n return true;\n}\n\n// Create SIWS message string according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#abnf-message-format\nfunction createSIWSMessage(input: ParsedSIWSMessage): string {\n let message = `${input.domain} wants you to sign in with your Solana account:\\n`;\n message += `${input.address}`;\n\n if (input.statement) {\n message += `\\n\\n${input.statement}`;\n }\n\n const fields = buildFieldLines(input);\n \n if (fields.length) {\n message += `\\n\\n${fields.join('\\n')}`;\n }\n\n return message;\n}\n\nfunction buildFieldLines(input: ParsedSIWSMessage): string[] {\n const fields: string[] = [];\n \n // Define field mappings\n const fieldMappings: Array<{\n key: keyof ParsedSIWSMessage;\n prefix: string;\n formatter?: (value: unknown) => string[];\n }> = [\n { key: 'uri', prefix: 'URI: ' },\n { key: 'version', prefix: 'Version: ' },\n { key: 'chainId', prefix: 'Chain ID: ' },\n { key: 'nonce', prefix: 'Nonce: ' },\n { key: 'issuedAt', prefix: 'Issued At: ' },\n { key: 'expirationTime', prefix: 'Expiration Time: ' },\n { key: 'notBefore', prefix: 'Not Before: ' },\n { key: 'requestId', prefix: 'Request ID: ' },\n {\n key: 'resources',\n prefix: 'Resources:',\n formatter: (value) => {\n if (Array.isArray(value) && value.length > 0) {\n return ['Resources:', ...value.map(resource => `- ${resource}`)];\n }\n return [];\n }\n }\n ];\n \n for (const { key, prefix, formatter } of fieldMappings) {\n const value = input[key];\n if (value !== undefined) {\n if (formatter) {\n const formatted = formatter(value);\n fields.push(...formatted);\n } else if (typeof value === 'string') {\n fields.push(`${prefix}${value}`);\n }\n }\n }\n \n return fields;\n}\n"]}
@@ -54,5 +54,5 @@ exports.encode = encode;
54
54
  exports.getSignPayload = getSignPayload;
55
55
  exports.verifyPersonalSignTIP191 = verifyPersonalSignTIP191;
56
56
  exports.verifyTIP191 = verifyTIP191;
57
- //# sourceMappingURL=tron-F5AARBY4.cjs.map
58
- //# sourceMappingURL=tron-F5AARBY4.cjs.map
57
+ //# sourceMappingURL=tron-EVR3X3SN.cjs.map
58
+ //# sourceMappingURL=tron-EVR3X3SN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tron.ts"],"names":["Hex","Signature","Secp256k1","Hash","PublicKey","Bytes","base58","ProofStatus"],"mappings":";;;;;;;;;AAIO,SAAS,YAAA,CACd,OAAA,EACA,OAAA,EACA,KAAA,EACS;AACT,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,cAAA,CAAeA,MAAA,CAAI,UAAA,CAAW,OAAO,CAAC,CAAA;AACtD,IAAA,MAAM,SAAA,GAAYC,YAAA,CAAU,OAAA,CAAQ,KAAK,CAAA;AACzC,IAAA,MAAM,YAAYC,YAAA,CAAU,gBAAA,CAAiB,EAAE,OAAA,EAAS,WAAW,CAAA;AACnE,IAAA,MAAM,GAAA,GAAe,OAAOC,OAAA,CAAK,SAAA;AAAA,MAC/B,KAAKC,YAAA,CAAU,KAAA,CAAM,SAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,KAC1C,CAAE,SAAA,CAAU,EAAE,CAAC,CAAA,CAAA;AACf,IAAA,MAAM,KAAA,GAAQC,QAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAC5B,IAAA,MAAM,QAAA,GAAWA,QAAA,CAAM,IAAA,CAAKF,OAAA,CAAK,MAAA,CAAOA,OAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AACrE,IAAA,MAAM,OAAA,GAAUE,QAAA,CAAM,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA;AAC5C,IAAA,MAAM,GAAA,GAAMC,WAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AACjC,IAAA,OAAO,GAAA,KAAQ,OAAA;AAAA,EAEjB,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAsB,yBACpB,KAAA,EACyB;AACzB,EAAA,MAAM,CAAC,MAAM,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/C,EAAA,IAAI,EAAA,KAAO,QAAQ,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQC,0BAAY,MAAA,EAAO;AAEjE,EAAA,MAAM,QAAA,GAAW,YAAA;AAAA,IACf,OAAA;AAAA,IACA,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AACA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAA,EAAQ,QAAA,GAAWA,yBAAA,CAAY,QAAA,GAAWA,yBAAA,CAAY;AAAA,GACxD;AACF;AAEO,SAAS,OAAO,IAAA,EAAsC;AAC3D,EAAA,MAAM,OAAA,GAAUP,MAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC7B,EAAA,OAAOA,MAAA,CAAI,MAAA;AAAA;AAAA,IAET,MAAA;AAAA,IACAA,OAAI,UAAA,CAAW,wBAAA,GAA2BA,MAAA,CAAI,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IAC3D;AAAA,GACF;AACF;AACO,SAAS,eAAe,IAAA,EAAsC;AACnE,EAAA,OAAOG,OAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA;AACpC","file":"tron-EVR3X3SN.cjs","sourcesContent":["import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Secp256k1, Hex, Signature, Hash, Bytes, PublicKey } from \"ox\";\nimport { base58 } from \"@scure/base\";\n\nexport function verifyTIP191(\n address: string,\n message: string,\n proof: Hex.Hex,\n): boolean {\n try {\n const payload = getSignPayload(Hex.fromString(message));\n const signature = Signature.fromHex(proof);\n const publicKey = Secp256k1.recoverPublicKey({ payload, signature });\n const hex: Hex.Hex = `0x41${Hash.keccak256(\n `0x${PublicKey.toHex(publicKey).slice(4)}`,\n ).substring(26)}`;\n const bytes = Bytes.from(hex);\n const checksum = Bytes.from(Hash.sha256(Hash.sha256(hex))).slice(0, 4);\n const checked = Bytes.concat(bytes, checksum);\n const b58 = base58.encode(checked);\n return b58 === address;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n }\n}\n\nexport async function verifyPersonalSignTIP191(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"tron\") return { ...proof, status: ProofStatus.FAILED };\n\n const verified = verifyTIP191(\n address as Hex.Hex,\n proof.attestation,\n proof.proof as Hex.Hex,\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nexport function encode(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n const message = Hex.from(data);\n return Hex.concat(\n // Personal Sign Format: `0x19 ‖ \"Ethereum Signed Message:\\n\" ‖ message.length ‖ message`\n \"0x19\",\n Hex.fromString(\"TRON Signed Message:\\n\" + Hex.size(message)),\n message,\n );\n}\nexport function getSignPayload(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n return Hash.keccak256(encode(data));\n}\n"]}
@@ -24,5 +24,5 @@ function verifyStellarSignature(proof) {
24
24
  }
25
25
 
26
26
  exports.verifyStellarSignature = verifyStellarSignature;
27
- //# sourceMappingURL=xlm-5GODWWL2.cjs.map
28
- //# sourceMappingURL=xlm-5GODWWL2.cjs.map
27
+ //# sourceMappingURL=xlm-NLK5LUTE.cjs.map
28
+ //# sourceMappingURL=xlm-NLK5LUTE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/xlm.ts"],"names":["ProofStatus","Keypair","Buffer"],"mappings":";;;;;;;;AAGO,SAAS,uBACd,KAAA,EACgB;AAChB,EAAA,MAAM,CAAC,MAAM,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/C,EAAA,IAAI,EAAA,KAAO,WAAW,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAEpE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAUC,kBAAA,CAAQ,aAAA,CAAc,OAAO,CAAA;AAC7C,IAAA,MAAM,aAAA,GAAgBC,aAAA,CAAO,IAAA,CAAK,KAAA,CAAM,aAAa,OAAO,CAAA;AAC5D,IAAA,MAAM,eAAA,GAAkBA,aAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAEzD,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,aAAA,EAAe,eAAe,CAAA;AAE9D,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,QAAA,GAAWF,yBAAA,CAAY,QAAA,GAAWA,yBAAA,CAAY;AAAA,KACxD;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AACF","file":"xlm-NLK5LUTE.cjs","sourcesContent":["import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Keypair } from \"@stellar/stellar-sdk\";\n\nexport function verifyStellarSignature(\n proof: SignatureProof,\n): SignatureProof {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"stellar\") return { ...proof, status: ProofStatus.FAILED };\n\n try {\n const keypair = Keypair.fromPublicKey(address);\n const messageBuffer = Buffer.from(proof.attestation, \"utf-8\");\n const signatureBuffer = Buffer.from(proof.proof, \"base64\");\n\n const verified = keypair.verify(messageBuffer, signatureBuffer);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n"]}
@@ -1170,5 +1170,5 @@ exports.verifyPersonalSignXRPL = verifyPersonalSignXRPL;
1170
1170
  exports.verifyXRPL = verifyXRPL;
1171
1171
  exports.xrplMainnetWs = xrplMainnetWs;
1172
1172
  exports.xrplTestnetWs = xrplTestnetWs;
1173
- //# sourceMappingURL=xrpl-7HQLIDAK.cjs.map
1174
- //# sourceMappingURL=xrpl-7HQLIDAK.cjs.map
1173
+ //# sourceMappingURL=xrpl-ANNWPM6W.cjs.map
1174
+ //# sourceMappingURL=xrpl-ANNWPM6W.cjs.map
@@ -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":["__require","Buffer","Prefix","verify","__toESM","Client","ProofStatus"],"mappings":"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","file":"xrpl-ANNWPM6W.cjs","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"]}
@@ -8,6 +8,79 @@ import { secp256k1 } from '@noble/curves/secp256k1';
8
8
  import { Verifier } from 'bip322-js';
9
9
 
10
10
  if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = Buffer; }
11
+ var CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
12
+ var GENERATOR = [
13
+ BigInt("0x98f2bc8e61"),
14
+ BigInt("0x79b76d99e2"),
15
+ BigInt("0xf33e5fb3c4"),
16
+ BigInt("0xae2eabe2a8"),
17
+ BigInt("0x1e4f43e470")
18
+ ];
19
+ function polymod(values) {
20
+ let c = BigInt(1);
21
+ for (const d of values) {
22
+ const c0 = c >> BigInt(35);
23
+ c = (c & BigInt("0x07ffffffff")) << BigInt(5) ^ BigInt(d);
24
+ for (let i = 0; i < 5; i++) {
25
+ if (c0 >> BigInt(i) & BigInt(1)) {
26
+ c ^= GENERATOR[i];
27
+ }
28
+ }
29
+ }
30
+ return c ^ BigInt(1);
31
+ }
32
+ function prefixExpand(prefix) {
33
+ const result = [];
34
+ for (let i = 0; i < prefix.length; i++) {
35
+ result.push(prefix.charCodeAt(i) & 31);
36
+ }
37
+ result.push(0);
38
+ return result;
39
+ }
40
+ function decodeCashAddr(address, defaultPrefix = "bitcoincash") {
41
+ let prefix;
42
+ const colonIndex = address.indexOf(":");
43
+ if (colonIndex !== -1) {
44
+ prefix = address.slice(0, colonIndex).toLowerCase();
45
+ } else {
46
+ prefix = defaultPrefix;
47
+ }
48
+ const rawPayload = colonIndex !== -1 ? address.slice(colonIndex + 1) : address;
49
+ if (/[A-Z]/.test(rawPayload) && /[a-z]/.test(rawPayload)) {
50
+ throw new Error("Invalid CashAddr: mixed case");
51
+ }
52
+ const payload = rawPayload.toLowerCase();
53
+ const words = [];
54
+ for (const ch of payload) {
55
+ const idx = CHARSET.indexOf(ch);
56
+ if (idx === -1) throw new Error("Invalid CashAddr character: " + ch);
57
+ words.push(idx);
58
+ }
59
+ if (words.length < 8) throw new Error("CashAddr too short");
60
+ const checksumData = [...prefixExpand(prefix), ...words];
61
+ if (polymod(checksumData) !== BigInt(0)) {
62
+ throw new Error("Invalid CashAddr checksum");
63
+ }
64
+ const dataWords = words.slice(0, -8);
65
+ const payloadBytes = bech32.fromWords(dataWords);
66
+ if (payloadBytes.length === 0) {
67
+ throw new Error("Invalid CashAddr padding");
68
+ }
69
+ const versionByte = payloadBytes[0];
70
+ const type = versionByte >> 3 & 15;
71
+ const hashSizeBits = versionByte & 7;
72
+ const expectedSizes = [20, 24, 28, 32, 40, 48, 56, 64];
73
+ const expectedSize = expectedSizes[hashSizeBits];
74
+ const hashBytes = payloadBytes.slice(1);
75
+ if (hashBytes.length !== expectedSize) {
76
+ throw new Error(
77
+ `Hash length mismatch: expected ${expectedSize}, got ${hashBytes.length}`
78
+ );
79
+ }
80
+ return { prefix, type, hash: Uint8Array.from(hashBytes) };
81
+ }
82
+
83
+ // src/bitcoin.ts
11
84
  var CHAIN_CONFIGS = {
12
85
  bitcoin: {
13
86
  messagePrefix: "Bitcoin Signed Message:\n",
@@ -70,7 +143,9 @@ var CHAIN_CONFIGS = {
70
143
  }
71
144
  };
72
145
  async function verifyBTCSignature(proof) {
73
- const [ns, , address] = proof.address.split(/:/);
146
+ const parts = proof.address.split(":");
147
+ const ns = parts[0];
148
+ const address = parts.slice(2).join(":");
74
149
  if (ns !== "bip122") return { ...proof, status: ProofStatus.FAILED };
75
150
  const chainConfig = getChainConfig(address);
76
151
  if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };
@@ -124,7 +199,7 @@ function getChainConfig(address) {
124
199
  if (address.startsWith("X") || address.startsWith("7")) {
125
200
  return CHAIN_CONFIGS["dash"];
126
201
  }
127
- if (address.startsWith("q")) {
202
+ if (address.startsWith("q") || address.startsWith("bitcoincash:")) {
128
203
  return CHAIN_CONFIGS["bitcoincash"];
129
204
  }
130
205
  if (address.startsWith("m") || address.startsWith("n") || address.startsWith("2") || address.startsWith("tb1")) {
@@ -170,7 +245,7 @@ function getDerivationMode(address) {
170
245
  return "Legacy" /* LEGACY */;
171
246
  } else if (address.match("^(D).*")) {
172
247
  return "Dogecoin" /* DOGECOIN */;
173
- } else if (address.match("^(q).*")) {
248
+ } else if (address.match("^(q).*") || address.startsWith("bitcoincash:")) {
174
249
  return "Bitcoin Cash" /* BCH */;
175
250
  } else if (address.match("^(t1|t3).*")) {
176
251
  return "Legacy" /* LEGACY */;
@@ -209,14 +284,20 @@ function verify(attestation, address, proof, checkSegwitAlways, chainConfig) {
209
284
  const publicKey = signature.recoverPublicKey(hash);
210
285
  const publicKeyBytes = publicKey.toRawBytes(compressed);
211
286
  const publicKeyHash = hash160(publicKeyBytes);
212
- let actual = "";
213
- if (address.startsWith("q")) {
214
- actual = encodeBase58AddressFormat(
215
- chainConfig.pubKeyHashVersion,
216
- publicKeyHash
217
- );
218
- return actual.startsWith("1");
287
+ if (address.startsWith("q") || address.startsWith("bitcoincash:")) {
288
+ try {
289
+ const decoded = decodeCashAddr(address);
290
+ if (decoded.type !== 0) return false;
291
+ if (decoded.hash.length !== publicKeyHash.length) return false;
292
+ for (let i = 0; i < decoded.hash.length; i++) {
293
+ if (decoded.hash[i] !== publicKeyHash[i]) return false;
294
+ }
295
+ return true;
296
+ } catch {
297
+ return false;
298
+ }
219
299
  }
300
+ let actual = "";
220
301
  if (segwitType) {
221
302
  if (segwitType === "p2sh(p2wpkh)" /* P2SH_P2WPKH */) {
222
303
  const redeemScript = new Uint8Array(22);
@@ -317,5 +398,5 @@ function hash160(buffer) {
317
398
  }
318
399
 
319
400
  export { verifyBTCSignature };
320
- //# sourceMappingURL=bitcoin-2BFQZA2L.js.map
321
- //# sourceMappingURL=bitcoin-2BFQZA2L.js.map
401
+ //# sourceMappingURL=bitcoin-QNH3XKWQ.js.map
402
+ //# sourceMappingURL=bitcoin-QNH3XKWQ.js.map