@wovin/connect-nftstorage 0.0.9-RC3 → 0.0.10

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/@stablelib+random@1.0.2/node_modules/@stablelib/random/source/browser.ts","../../../../node_modules/.pnpm/@stablelib+wipe@1.0.1/node_modules/@stablelib/wipe/wipe.ts","../../../../node_modules/.pnpm/@stablelib+random@1.0.2/node_modules/@stablelib/random/source/node.ts","../../../../node_modules/.pnpm/@stablelib+random@1.0.2/node_modules/@stablelib/random/source/system.ts","../../../../node_modules/.pnpm/@stablelib+int@1.0.1/node_modules/@stablelib/int/int.ts","../../../../node_modules/.pnpm/@stablelib+binary@1.0.1/node_modules/@stablelib/binary/binary.ts","../../../../node_modules/.pnpm/@stablelib+random@1.0.2/node_modules/@stablelib/random/random.ts","../../../../node_modules/.pnpm/@stablelib+sha512@1.0.1/node_modules/@stablelib/sha512/sha512.ts","../../../../node_modules/.pnpm/@stablelib+ed25519@1.0.3/node_modules/@stablelib/ed25519/ed25519.ts","../../../../node_modules/.pnpm/big-integer@1.6.51/node_modules/big-integer/BigInteger.js","../../../../node_modules/.pnpm/uint8arrays@3.0.0/node_modules/uint8arrays/esm/src/concat.js","../../../../node_modules/.pnpm/uint8arrays@3.0.0/node_modules/uint8arrays/esm/src/equals.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/identity.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/vendor/base-x.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bytes.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base2.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base8.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base10.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base16.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base32.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base36.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base58.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base64.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/bases/base256emoji.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/hashes/sha2-browser.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/vendor/varint.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/varint.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/hashes/digest.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/hashes/hasher.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/hashes/identity.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/codecs/json.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/cid.js","../../../../node_modules/.pnpm/multiformats@9.9.0/node_modules/multiformats/esm/src/basics.js","../../../../node_modules/.pnpm/uint8arrays@3.0.0/node_modules/uint8arrays/esm/src/util/bases.js","../../../../node_modules/.pnpm/uint8arrays@3.0.0/node_modules/uint8arrays/esm/src/from-string.js","../../../../node_modules/.pnpm/uint8arrays@3.0.0/node_modules/uint8arrays/esm/src/to-string.js","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/ed25519/keypair.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/prefixes.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/util.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/ed25519/crypto.ts","../../../../node_modules/.pnpm/one-webcrypto@1.0.3/node_modules/one-webcrypto/browser.mjs","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/rsa/crypto.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/p256/crypto.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/ed25519/plugin.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/rsa/plugin.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/p256/plugin.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/util.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/semver.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/capability/super-user.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/capability/ability.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/capability/resource-pointer.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/capability/index.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/types.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/compatibility.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/token.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/attenuation.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/verify.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/builder.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/store.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/plugins.ts","../../../../node_modules/.pnpm/@ucans+core@0.12.0/node_modules/@ucans/core/dist/src/index.ts","../../../../node_modules/.pnpm/@ucans+default-plugins@0.12.0/node_modules/@ucans/default-plugins/dist/src/default-plugins.ts","../../../../node_modules/.pnpm/@ucans+ucans@0.12.0/node_modules/@ucans/ucans/dist/src/index.ts","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/bytes.ts","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/vendor/base-x.js","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/bases/base.ts","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/bases/base32.ts","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/bases/base58.ts","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/vendor/varint.js","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/varint.ts","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/hashes/digest.ts","../../../../node_modules/.pnpm/multiformats@13.0.1/node_modules/multiformats/src/cid.ts","../src/store.ts"],"sourcesContent":["// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\nimport { RandomSource } from \"./\";\n\nconst QUOTA = 65536;\n\nexport class BrowserRandomSource implements RandomSource {\n isAvailable = false;\n isInstantiated = false;\n\n private _crypto?: { getRandomValues: typeof window.crypto.getRandomValues };\n\n constructor() {\n const browserCrypto = typeof self !== 'undefined'\n ? (self.crypto || (self as { msCrypto?: any }).msCrypto) // IE11 has msCrypto\n : null;\n\n if (browserCrypto && browserCrypto.getRandomValues !== undefined) {\n this._crypto = browserCrypto;\n this.isAvailable = true;\n this.isInstantiated = true;\n }\n }\n\n randomBytes(length: number): Uint8Array {\n if (!this.isAvailable || !this._crypto) {\n throw new Error(\"Browser random byte generator is not available.\");\n }\n const out = new Uint8Array(length);\n for (let i = 0; i < out.length; i += QUOTA) {\n this._crypto.getRandomValues(out.subarray(i, i + Math.min(out.length - i, QUOTA)));\n }\n return out;\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package wipe implements functions for zeroing arrays.\n */\n\nexport type NumericArray = number[] | Uint8Array | Int8Array | Uint16Array\n | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array;\n\n/**\n * Sets all values in the given array to zero and returns it.\n *\n * The fact that it sets bytes to zero can be relied on.\n *\n * There is no guarantee that this function makes data disappear from memory,\n * as runtime implementation can, for example, have copying garbage collector\n * that will make copies of sensitive data before we wipe it. Or that an\n * operating system will write our data to swap or sleep image. Another thing\n * is that an optimizing compiler can remove calls to this function or make it\n * no-op. There's nothing we can do with it, so we just do our best and hope\n * that everything will be okay and good will triumph over evil.\n */\nexport function wipe(array: NumericArray): NumericArray {\n // Right now it's similar to array.fill(0). If it turns\n // out that runtimes optimize this call away, maybe\n // we can try something else.\n for (let i = 0; i < array.length; i++) {\n array[i] = 0;\n }\n return array;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\nimport { RandomSource } from \"./\";\nimport { wipe } from \"@stablelib/wipe\";\n\ndeclare function require(name: string): any;\n\nexport class NodeRandomSource implements RandomSource {\n isAvailable = false;\n isInstantiated = false;\n\n private _crypto: { randomBytes(n: number): Uint8Array } | undefined;\n\n constructor() {\n if (typeof require !== \"undefined\") {\n const nodeCrypto = require(\"crypto\");\n if (nodeCrypto && nodeCrypto.randomBytes) {\n this._crypto = nodeCrypto;\n this.isAvailable = true;\n this.isInstantiated = true;\n }\n }\n }\n\n randomBytes(length: number): Uint8Array {\n if (!this.isAvailable || !this._crypto) {\n throw new Error(\"Node.js random byte generator is not available.\");\n }\n\n // Get random bytes (result is Buffer).\n let buffer = this._crypto.randomBytes(length);\n\n // Make sure we got the length that we requested.\n if (buffer.length !== length) {\n throw new Error(\"NodeRandomSource: got fewer bytes than requested\");\n }\n\n // Allocate output array.\n const out = new Uint8Array(length);\n\n // Copy bytes from buffer to output.\n for (let i = 0; i < out.length; i++) {\n out[i] = buffer[i];\n }\n\n // Cleanup.\n wipe(buffer);\n\n return out;\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\nimport { RandomSource } from \"./\";\nimport { BrowserRandomSource } from \"./browser\";\nimport { NodeRandomSource } from \"./node\";\n\nexport class SystemRandomSource implements RandomSource {\n isAvailable = false;\n name = \"\";\n private _source: RandomSource;\n\n constructor() {\n // Try browser.\n this._source = new BrowserRandomSource();\n if (this._source.isAvailable) {\n this.isAvailable = true;\n this.name = \"Browser\";\n return;\n }\n\n // If no browser source, try Node.\n this._source = new NodeRandomSource();\n if (this._source.isAvailable) {\n this.isAvailable = true;\n this.name = \"Node\";\n return;\n }\n\n // No sources, we're out of options.\n }\n\n randomBytes(length: number): Uint8Array {\n if (!this.isAvailable) {\n throw new Error(\"System random byte generator is not available.\");\n }\n return this._source.randomBytes(length);\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package int provides helper functions for integerss.\n */\n\n// Shim using 16-bit pieces.\nfunction imulShim(a: number, b: number): number {\n const ah = (a >>> 16) & 0xffff, al = a & 0xffff;\n const bh = (b >>> 16) & 0xffff, bl = b & 0xffff;\n return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0) | 0);\n}\n\n/** 32-bit integer multiplication. */\n// Use system Math.imul if available, otherwise use our shim.\nexport const mul = (Math as { imul?(a: number, b: number): number }).imul || imulShim;\n\n/** 32-bit integer addition. */\nexport function add(a: number, b: number): number {\n return (a + b) | 0;\n}\n\n/** 32-bit integer subtraction. */\nexport function sub(a: number, b: number): number {\n return (a - b) | 0;\n}\n\n/** 32-bit integer left rotation */\nexport function rotl(x: number, n: number): number {\n return x << n | x >>> (32 - n);\n}\n\n/** 32-bit integer left rotation */\nexport function rotr(x: number, n: number): number {\n return x << (32 - n) | x >>> n;\n}\n\nfunction isIntegerShim(n: number): boolean {\n return typeof n === \"number\" && isFinite(n) && Math.floor(n) === n;\n}\n\n/**\n * Returns true if the argument is an integer number.\n *\n * In ES2015, Number.isInteger.\n */\nexport const isInteger = (Number as { isInteger?(n: number): boolean }).isInteger || isIntegerShim;\n\n/**\n * Math.pow(2, 53) - 1\n *\n * In ES2015 Number.MAX_SAFE_INTEGER.\n */\nexport const MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Returns true if the argument is a safe integer number\n * (-MIN_SAFE_INTEGER < number <= MAX_SAFE_INTEGER)\n *\n * In ES2015, Number.isSafeInteger.\n */\nexport const isSafeInteger = (n: number): boolean =>\n isInteger(n) && (n >= -MAX_SAFE_INTEGER && n <= MAX_SAFE_INTEGER);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package binary provides functions for encoding and decoding numbers in byte arrays.\n */\n\nimport { isSafeInteger } from \"@stablelib/int\";\n\n// TODO(dchest): add asserts for correct value ranges and array offsets.\n\n/**\n * Reads 2 bytes from array starting at offset as big-endian\n * signed 16-bit integer and returns it.\n */\nexport function readInt16BE(array: Uint8Array, offset = 0): number {\n return (((array[offset + 0] << 8) | array[offset + 1]) << 16) >> 16;\n}\n\n/**\n * Reads 2 bytes from array starting at offset as big-endian\n * unsigned 16-bit integer and returns it.\n */\nexport function readUint16BE(array: Uint8Array, offset = 0): number {\n return ((array[offset + 0] << 8) | array[offset + 1]) >>> 0;\n}\n\n/**\n * Reads 2 bytes from array starting at offset as little-endian\n * signed 16-bit integer and returns it.\n */\nexport function readInt16LE(array: Uint8Array, offset = 0): number {\n return (((array[offset + 1] << 8) | array[offset]) << 16) >> 16;\n}\n\n/**\n * Reads 2 bytes from array starting at offset as little-endian\n * unsigned 16-bit integer and returns it.\n */\nexport function readUint16LE(array: Uint8Array, offset = 0): number {\n return ((array[offset + 1] << 8) | array[offset]) >>> 0;\n}\n\n/**\n * Writes 2-byte big-endian representation of 16-bit unsigned\n * value to byte array starting at offset.\n *\n * If byte array is not given, creates a new 2-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint16BE(value: number, out = new Uint8Array(2), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 8;\n out[offset + 1] = value >>> 0;\n return out;\n}\n\nexport const writeInt16BE = writeUint16BE;\n\n/**\n * Writes 2-byte little-endian representation of 16-bit unsigned\n * value to array starting at offset.\n *\n * If byte array is not given, creates a new 2-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint16LE(value: number, out = new Uint8Array(2), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 0;\n out[offset + 1] = value >>> 8;\n return out;\n}\n\nexport const writeInt16LE = writeUint16LE;\n\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * signed 32-bit integer and returns it.\n */\nexport function readInt32BE(array: Uint8Array, offset = 0): number {\n return (array[offset] << 24) |\n (array[offset + 1] << 16) |\n (array[offset + 2] << 8) |\n array[offset + 3];\n}\n\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * unsigned 32-bit integer and returns it.\n */\nexport function readUint32BE(array: Uint8Array, offset = 0): number {\n return ((array[offset] << 24) |\n (array[offset + 1] << 16) |\n (array[offset + 2] << 8) |\n array[offset + 3]) >>> 0;\n}\n\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * signed 32-bit integer and returns it.\n */\nexport function readInt32LE(array: Uint8Array, offset = 0): number {\n return (array[offset + 3] << 24) |\n (array[offset + 2] << 16) |\n (array[offset + 1] << 8) |\n array[offset];\n}\n\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * unsigned 32-bit integer and returns it.\n */\nexport function readUint32LE(array: Uint8Array, offset = 0): number {\n return ((array[offset + 3] << 24) |\n (array[offset + 2] << 16) |\n (array[offset + 1] << 8) |\n array[offset]) >>> 0;\n}\n\n/**\n * Writes 4-byte big-endian representation of 32-bit unsigned\n * value to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint32BE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 24;\n out[offset + 1] = value >>> 16;\n out[offset + 2] = value >>> 8;\n out[offset + 3] = value >>> 0;\n return out;\n}\n\nexport const writeInt32BE = writeUint32BE;\n\n/**\n * Writes 4-byte little-endian representation of 32-bit unsigned\n * value to array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint32LE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 0;\n out[offset + 1] = value >>> 8;\n out[offset + 2] = value >>> 16;\n out[offset + 3] = value >>> 24;\n return out;\n}\n\n\nexport const writeInt32LE = writeUint32LE;\n\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * signed 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports exact\n * numbers in range -9007199254740991 to 9007199254740991.\n * If the number stored in the byte array is outside this range,\n * the result is not exact.\n */\nexport function readInt64BE(array: Uint8Array, offset = 0): number {\n const hi = readInt32BE(array, offset);\n const lo = readInt32BE(array, offset + 4);\n return hi * 0x100000000 + lo - ((lo>>31) * 0x100000000);\n}\n\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * unsigned 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports values up to 2^53-1.\n */\nexport function readUint64BE(array: Uint8Array, offset = 0): number {\n const hi = readUint32BE(array, offset);\n const lo = readUint32BE(array, offset + 4);\n return hi * 0x100000000 + lo;\n}\n\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * signed 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports exact\n * numbers in range -9007199254740991 to 9007199254740991.\n * If the number stored in the byte array is outside this range,\n * the result is not exact.\n */\nexport function readInt64LE(array: Uint8Array, offset = 0): number {\n const lo = readInt32LE(array, offset);\n const hi = readInt32LE(array, offset + 4);\n return hi * 0x100000000 + lo - ((lo>>31) * 0x100000000);\n}\n\n\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * unsigned 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports values up to 2^53-1.\n */\nexport function readUint64LE(array: Uint8Array, offset = 0): number {\n const lo = readUint32LE(array, offset);\n const hi = readUint32LE(array, offset + 4);\n return hi * 0x100000000 + lo;\n}\n\n/**\n * Writes 8-byte big-endian representation of 64-bit unsigned\n * value to byte array starting at offset.\n *\n * Due to JavaScript limitation, supports values up to 2^53-1.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint64BE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n writeUint32BE(value / 0x100000000 >>> 0, out, offset);\n writeUint32BE(value >>> 0, out, offset + 4);\n return out;\n}\n\nexport const writeInt64BE = writeUint64BE;\n\n/**\n * Writes 8-byte little-endian representation of 64-bit unsigned\n * value to byte array starting at offset.\n *\n * Due to JavaScript limitation, supports values up to 2^53-1.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint64LE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n writeUint32LE(value >>> 0, out, offset);\n writeUint32LE(value / 0x100000000 >>> 0, out, offset + 4);\n return out;\n}\n\nexport const writeInt64LE = writeUint64LE;\n\n/**\n * Reads bytes from array starting at offset as big-endian\n * unsigned bitLen-bit integer and returns it.\n *\n * Supports bit lengths divisible by 8, up to 48.\n */\nexport function readUintBE(bitLength: number, array: Uint8Array, offset = 0): number {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"readUintBE supports only bitLengths divisible by 8\");\n }\n if (bitLength / 8 > array.length - offset) {\n throw new Error(\"readUintBE: array is too short for the given bitLength\");\n }\n let result = 0;\n let mul = 1;\n for (let i = bitLength / 8 + offset - 1; i >= offset; i--) {\n result += array[i] * mul;\n mul *= 256;\n }\n return result;\n}\n\n/**\n * Reads bytes from array starting at offset as little-endian\n * unsigned bitLen-bit integer and returns it.\n *\n * Supports bit lengths divisible by 8, up to 48.\n */\nexport function readUintLE(bitLength: number, array: Uint8Array, offset = 0): number {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"readUintLE supports only bitLengths divisible by 8\");\n }\n if (bitLength / 8 > array.length - offset) {\n throw new Error(\"readUintLE: array is too short for the given bitLength\");\n }\n let result = 0;\n let mul = 1;\n for (let i = offset; i < offset + bitLength / 8; i++) {\n result += array[i] * mul;\n mul *= 256;\n }\n return result;\n}\n\n/**\n * Writes a big-endian representation of bitLen-bit unsigned\n * value to array starting at offset.\n *\n * Supports bit lengths divisible by 8, up to 48.\n *\n * If byte array is not given, creates a new one.\n *\n * Returns the output byte array.\n */\nexport function writeUintBE(bitLength: number, value: number,\n out = new Uint8Array(bitLength / 8), offset = 0): Uint8Array {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"writeUintBE supports only bitLengths divisible by 8\");\n }\n if (!isSafeInteger(value)) {\n throw new Error(\"writeUintBE value must be an integer\");\n }\n let div = 1;\n for (let i = bitLength / 8 + offset - 1; i >= offset; i--) {\n out[i] = (value / div) & 0xff;\n div *= 256;\n }\n return out;\n}\n\n/**\n * Writes a little-endian representation of bitLen-bit unsigned\n * value to array starting at offset.\n *\n * Supports bit lengths divisible by 8, up to 48.\n *\n * If byte array is not given, creates a new one.\n *\n * Returns the output byte array.\n */\nexport function writeUintLE(bitLength: number, value: number,\n out = new Uint8Array(bitLength / 8), offset = 0): Uint8Array {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"writeUintLE supports only bitLengths divisible by 8\");\n }\n if (!isSafeInteger(value)) {\n throw new Error(\"writeUintLE value must be an integer\");\n }\n let div = 1;\n for (let i = offset; i < offset + bitLength / 8; i++) {\n out[i] = (value / div) & 0xff;\n div *= 256;\n }\n return out;\n}\n\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * 32-bit floating-point number and returns it.\n */\nexport function readFloat32BE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat32(offset);\n}\n\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * 32-bit floating-point number and returns it.\n */\nexport function readFloat32LE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat32(offset, true);\n}\n\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * 64-bit floating-point number (\"double\") and returns it.\n */\nexport function readFloat64BE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat64(offset);\n}\n\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * 64-bit floating-point number (\"double\") and returns it.\n */\nexport function readFloat64LE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat64(offset, true);\n}\n\n/**\n * Writes 4-byte big-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat32BE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat32(offset, value);\n return out;\n}\n\n/**\n * Writes 4-byte little-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat32LE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat32(offset, value, true);\n return out;\n}\n\n/**\n * Writes 8-byte big-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat64BE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat64(offset, value);\n return out;\n}\n\n/**\n * Writes 8-byte little-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat64LE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat64(offset, value, true);\n return out;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package random provides functions to access system's\n * cryptographically secure random byte generator.\n */\n\nimport { RandomSource } from \"./source\";\nimport { SystemRandomSource } from \"./source/system\";\nimport { readUint32LE } from \"@stablelib/binary\";\nimport { wipe } from \"@stablelib/wipe\";\n\nexport { RandomSource } from \"./source\";\n\nexport const defaultRandomSource = new SystemRandomSource();\n\nexport function randomBytes(length: number, prng: RandomSource = defaultRandomSource): Uint8Array {\n return prng.randomBytes(length);\n}\n\n/**\n * Returns a uniformly random unsigned 32-bit integer.\n */\nexport function randomUint32(prng: RandomSource = defaultRandomSource): number {\n // Generate 4-byte random buffer.\n const buf = randomBytes(4, prng);\n\n // Convert bytes from buffer into a 32-bit integer.\n // It's not important which byte order to use, since\n // the result is random.\n const result = readUint32LE(buf);\n\n // Clean the buffer.\n wipe(buf);\n\n return result;\n}\n\n/** 62 alphanumeric characters for default charset of randomString() */\nconst ALPHANUMERIC = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n/**\n * Returns a uniform random string of the given length\n * with characters from the given charset.\n *\n * Charset must not have more than 256 characters.\n *\n * Default charset generates case-sensitive alphanumeric\n * strings (0-9, A-Z, a-z).\n */\nexport function randomString(\n length: number,\n charset = ALPHANUMERIC,\n prng: RandomSource = defaultRandomSource\n): string {\n if (charset.length < 2) {\n throw new Error(\"randomString charset is too short\");\n }\n if (charset.length > 256) {\n throw new Error(\"randomString charset is too long\");\n }\n let out = '';\n const charsLen = charset.length;\n const maxByte = 256 - (256 % charsLen);\n while (length > 0) {\n const buf = randomBytes(Math.ceil(length * 256 / maxByte), prng);\n for (let i = 0; i < buf.length && length > 0; i++) {\n const randomByte = buf[i];\n if (randomByte < maxByte) {\n out += charset.charAt(randomByte % charsLen);\n length--;\n }\n }\n wipe(buf);\n }\n return out;\n}\n\n/**\n * Returns uniform random string containing at least the given\n * number of bits of entropy.\n *\n * For example, randomStringForEntropy(128) will return a 22-character\n * alphanumeric string, while randomStringForEntropy(128, \"0123456789\")\n * will return a 39-character numeric string, both will contain at\n * least 128 bits of entropy.\n *\n * Default charset generates case-sensitive alphanumeric\n * strings (0-9, A-Z, a-z).\n */\nexport function randomStringForEntropy(\n bits: number,\n charset = ALPHANUMERIC,\n prng: RandomSource = defaultRandomSource\n): string {\n const length = Math.ceil(bits / (Math.log(charset.length) / Math.LN2));\n return randomString(length, charset, prng);\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package sha512 implements SHA-2-512 cryptographic hash function.\n */\n\nimport { SerializableHash } from \"@stablelib/hash\";\nimport { readUint32BE, writeUint32BE } from \"@stablelib/binary\";\nimport { wipe } from \"@stablelib/wipe\";\n\nexport const DIGEST_LENGTH = 64;\nexport const BLOCK_SIZE = 128;\n\n/**\n * SHA-2-512 cryptographic hash algorithm.\n */\nexport class SHA512 implements SerializableHash {\n /** Length of hash output */\n readonly digestLength: number = DIGEST_LENGTH;\n\n /** Block size */\n readonly blockSize: number = BLOCK_SIZE;\n\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n protected _stateHi = new Int32Array(8); // hash state, high bytes\n protected _stateLo = new Int32Array(8); // hash state, low bytes\n private _tempHi = new Int32Array(16); // temporary state, high bytes\n private _tempLo = new Int32Array(16); // temporary state, low bytes\n private _buffer = new Uint8Array(256); // buffer for data to hash\n private _bufferLength = 0; // number of bytes in buffer\n private _bytesHashed = 0; // number of total bytes hashed\n private _finished = false; // indicates whether the hash was finalized\n\n constructor() {\n this.reset();\n }\n\n protected _initState() {\n this._stateHi[0] = 0x6a09e667;\n this._stateHi[1] = 0xbb67ae85;\n this._stateHi[2] = 0x3c6ef372;\n this._stateHi[3] = 0xa54ff53a;\n this._stateHi[4] = 0x510e527f;\n this._stateHi[5] = 0x9b05688c;\n this._stateHi[6] = 0x1f83d9ab;\n this._stateHi[7] = 0x5be0cd19;\n\n this._stateLo[0] = 0xf3bcc908;\n this._stateLo[1] = 0x84caa73b;\n this._stateLo[2] = 0xfe94f82b;\n this._stateLo[3] = 0x5f1d36f1;\n this._stateLo[4] = 0xade682d1;\n this._stateLo[5] = 0x2b3e6c1f;\n this._stateLo[6] = 0xfb41bd6b;\n this._stateLo[7] = 0x137e2179;\n }\n\n /**\n * Resets hash state making it possible\n * to re-use this instance to hash other data.\n */\n reset(): this {\n this._initState();\n this._bufferLength = 0;\n this._bytesHashed = 0;\n this._finished = false;\n return this;\n }\n\n /**\n * Cleans internal buffers and resets hash state.\n */\n clean() {\n wipe(this._buffer);\n wipe(this._tempHi);\n wipe(this._tempLo);\n this.reset();\n }\n\n /**\n * Updates hash state with the given data.\n *\n * Throws error when trying to update already finalized hash:\n * instance must be reset to update it again.\n */\n update(data: Uint8Array, dataLength: number = data.length): this {\n if (this._finished) {\n throw new Error(\"SHA512: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this._bytesHashed += dataLength;\n if (this._bufferLength > 0) {\n while (this._bufferLength < BLOCK_SIZE && dataLength > 0) {\n this._buffer[this._bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this._bufferLength === this.blockSize) {\n hashBlocks(this._tempHi, this._tempLo, this._stateHi, this._stateLo,\n this._buffer, 0, this.blockSize);\n this._bufferLength = 0;\n }\n }\n if (dataLength >= this.blockSize) {\n dataPos = hashBlocks(this._tempHi, this._tempLo, this._stateHi, this._stateLo,\n data, dataPos, dataLength);\n dataLength %= this.blockSize;\n }\n while (dataLength > 0) {\n this._buffer[this._bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n }\n\n /**\n * Finalizes hash state and puts hash into out.\n * If hash was already finalized, puts the same value.\n */\n finish(out: Uint8Array): this {\n if (!this._finished) {\n const bytesHashed = this._bytesHashed;\n const left = this._bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 128 < 112) ? 128 : 256;\n\n this._buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this._buffer[i] = 0;\n }\n writeUint32BE(bitLenHi, this._buffer, padLength - 8);\n writeUint32BE(bitLenLo, this._buffer, padLength - 4);\n\n hashBlocks(this._tempHi, this._tempLo, this._stateHi, this._stateLo, this._buffer, 0, padLength);\n\n this._finished = true;\n }\n\n for (let i = 0; i < this.digestLength / 8; i++) {\n writeUint32BE(this._stateHi[i], out, i * 8);\n writeUint32BE(this._stateLo[i], out, i * 8 + 4);\n }\n\n return this;\n }\n\n /**\n * Returns the final hash digest.\n */\n digest(): Uint8Array {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n\n /**\n * Function useful for HMAC/PBKDF2 optimization. Returns hash state to be\n * used with restoreState(). Only chain value is saved, not buffers or\n * other state variables.\n */\n saveState(): SavedState {\n if (this._finished) {\n throw new Error(\"SHA256: cannot save finished state\");\n }\n return {\n stateHi: new Int32Array(this._stateHi),\n stateLo: new Int32Array(this._stateLo),\n buffer: this._bufferLength > 0 ? new Uint8Array(this._buffer) : undefined,\n bufferLength: this._bufferLength,\n bytesHashed: this._bytesHashed\n };\n }\n\n /**\n * Function useful for HMAC/PBKDF2 optimization. Restores state saved by\n * saveState() and sets bytesHashed to the given value.\n */\n restoreState(savedState: SavedState): this {\n this._stateHi.set(savedState.stateHi);\n this._stateLo.set(savedState.stateLo);\n this._bufferLength = savedState.bufferLength;\n if (savedState.buffer) {\n this._buffer.set(savedState.buffer);\n }\n this._bytesHashed = savedState.bytesHashed;\n this._finished = false;\n return this;\n }\n\n /**\n * Cleans state returned by saveState().\n */\n cleanSavedState(savedState: SavedState) {\n wipe(savedState.stateHi);\n wipe(savedState.stateLo);\n if (savedState.buffer) {\n wipe(savedState.buffer);\n }\n savedState.bufferLength = 0;\n savedState.bytesHashed = 0;\n }\n}\n\nexport type SavedState = {\n stateHi: Int32Array;\n stateLo: Int32Array;\n buffer: Uint8Array | undefined;\n bufferLength: number;\n bytesHashed: number;\n};\n\n// Constants\nconst K = new Int32Array([\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]);\n\n\nfunction hashBlocks(wh: Int32Array, wl: Int32Array, hh: Int32Array, hl: Int32Array,\n m: Uint8Array, pos: number, len: number): number {\n\n let ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n let h: number, l: number;\n let th: number, tl: number;\n let a: number, b: number, c: number, d: number;\n\n while (len >= 128) {\n for (let i = 0; i < 16; i++) {\n const j = 8 * i + pos;\n wh[i] = readUint32BE(m, j);\n wl[i] = readUint32BE(m, j + 4);\n }\n for (let i = 0; i < 80; i++) {\n let bh0 = ah0;\n let bh1 = ah1;\n let bh2 = ah2;\n let bh3 = ah3;\n let bh4 = ah4;\n let bh5 = ah5;\n let bh6 = ah6;\n let bh7 = ah7;\n\n let bl0 = al0;\n let bl1 = al1;\n let bl2 = al2;\n let bl3 = al3;\n let bl4 = al4;\n let bl5 = al5;\n let bl6 = al6;\n let bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32 - 14))) ^ ((ah4 >>> 18) |\n (al4 << (32 - 18))) ^ ((al4 >>> (41 - 32)) | (ah4 << (32 - (41 - 32))));\n l = ((al4 >>> 14) | (ah4 << (32 - 14))) ^ ((al4 >>> 18) |\n (ah4 << (32 - 18))) ^ ((ah4 >>> (41 - 32)) | (al4 << (32 - (41 - 32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i * 2];\n l = K[i * 2 + 1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i % 16];\n l = wl[i % 16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32 - 28))) ^ ((al0 >>> (34 - 32)) |\n (ah0 << (32 - (34 - 32)))) ^ ((al0 >>> (39 - 32)) | (ah0 << (32 - (39 - 32))));\n l = ((al0 >>> 28) | (ah0 << (32 - 28))) ^ ((ah0 >>> (34 - 32)) |\n (al0 << (32 - (34 - 32)))) ^ ((ah0 >>> (39 - 32)) | (al0 << (32 - (39 - 32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i % 16 === 15) {\n for (let j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j + 9) % 16];\n l = wl[(j + 9) % 16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j + 1) % 16];\n tl = wl[(j + 1) % 16];\n h = ((th >>> 1) | (tl << (32 - 1))) ^ ((th >>> 8) |\n (tl << (32 - 8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32 - 1))) ^ ((tl >>> 8) |\n (th << (32 - 8))) ^ ((tl >>> 7) | (th << (32 - 7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j + 14) % 16];\n tl = wl[(j + 14) % 16];\n h = ((th >>> 19) | (tl << (32 - 19))) ^ ((tl >>> (61 - 32)) |\n (th << (32 - (61 - 32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32 - 19))) ^ ((th >>> (61 - 32)) |\n (tl << (32 - (61 - 32)))) ^ ((tl >>> 6) | (th << (32 - 6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n len -= 128;\n }\n\n return pos;\n}\n\nexport function hash(data: Uint8Array): Uint8Array {\n const h = new SHA512();\n h.update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package ed25519 implements Ed25519 public-key signature algorithm.\n */\n\nimport { randomBytes, RandomSource } from \"@stablelib/random\";\nimport { hash, SHA512 } from \"@stablelib/sha512\";\nimport { wipe } from \"@stablelib/wipe\";\n\nexport const SIGNATURE_LENGTH = 64;\nexport const PUBLIC_KEY_LENGTH = 32;\nexport const SECRET_KEY_LENGTH = 64;\nexport const SEED_LENGTH = 32;\n\n// TODO(dchest): some functions are copies of ../kex/x25519.\n// Find a way to combine them without opening up to public.\n\n// Ported from TweetNaCl.js, which was ported from TweetNaCl\n// by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n// https://tweetnacl.js.org\n\n// TweetNaCl contributors:\n// Daniel J. Bernstein, Bernard van Gastel, Wesley Janssen,\n// Tanja Lange, Peter Schwabe, Sjaak Smetsers.\n// Public domain.\n// https://tweetnacl.cr.yp.to/\n\ntype GF = Float64Array;\n\n// Returns new zero-filled 16-element GF (Float64Array).\n// If passed an array of numbers, prefills the returned\n// array with them.\n//\n// We use Float64Array, because we need 48-bit numbers\n// for this implementation.\nfunction gf(init?: number[]): GF {\n const r = new Float64Array(16);\n if (init) {\n for (let i = 0; i < init.length; i++) {\n r[i] = init[i];\n }\n }\n return r;\n}\n\n// Base point.\nconst _9 = new Uint8Array(32); _9[0] = 9;\n\nconst gf0 = gf();\n\nconst gf1 = gf([1]);\n\nconst D = gf([\n 0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070,\n 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203\n]);\n\nconst D2 = gf([\n 0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0,\n 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406\n]);\n\nconst X = gf([\n 0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c,\n 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169\n]);\n\nconst Y = gf([\n 0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,\n 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666\n]);\n\nconst I = gf([\n 0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43,\n 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83\n]);\n\nfunction set25519(r: GF, a: GF) {\n for (let i = 0; i < 16; i++) {\n r[i] = a[i] | 0;\n }\n}\n\nfunction car25519(o: GF) {\n let c = 1;\n for (let i = 0; i < 16; i++) {\n let v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c - 1 + 37 * (c - 1);\n}\n\nfunction sel25519(p: GF, q: GF, b: number) {\n const c = ~(b - 1);\n for (let i = 0; i < 16; i++) {\n const t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o: Uint8Array, n: GF) {\n const m = gf();\n const t = gf();\n for (let i = 0; i < 16; i++) {\n t[i] = n[i];\n }\n car25519(t);\n car25519(t);\n car25519(t);\n for (let j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (let i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);\n m[i - 1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);\n const b = (m[15] >> 16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1 - b);\n }\n for (let i = 0; i < 16; i++) {\n o[2 * i] = t[i] & 0xff;\n o[2 * i + 1] = t[i] >> 8;\n }\n}\n\nfunction verify32(x: Uint8Array, y: Uint8Array) {\n let d = 0;\n for (let i = 0; i < 32; i++) {\n d |= x[i] ^ y[i];\n }\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\n\nfunction neq25519(a: GF, b: GF) {\n const c = new Uint8Array(32);\n const d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return verify32(c, d);\n}\n\nfunction par25519(a: GF) {\n const d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o: GF, n: Uint8Array) {\n for (let i = 0; i < 16; i++) {\n o[i] = n[2 * i] + (n[2 * i + 1] << 8);\n }\n o[15] &= 0x7fff;\n}\n\nfunction add(o: GF, a: GF, b: GF) {\n for (let i = 0; i < 16; i++) {\n o[i] = a[i] + b[i];\n }\n}\n\nfunction sub(o: GF, a: GF, b: GF) {\n for (let i = 0; i < 16; i++) {\n o[i] = a[i] - b[i];\n }\n}\n\nfunction mul(o: GF, a: GF, b: GF) {\n let v: number, c: number,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n o[0] = t0;\n o[1] = t1;\n o[2] = t2;\n o[3] = t3;\n o[4] = t4;\n o[5] = t5;\n o[6] = t6;\n o[7] = t7;\n o[8] = t8;\n o[9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction square(o: GF, a: GF) {\n mul(o, a, a);\n}\n\nfunction inv25519(o: GF, i: GF) {\n const c = gf();\n let a: number;\n for (a = 0; a < 16; a++) {\n c[a] = i[a];\n }\n for (a = 253; a >= 0; a--) {\n square(c, c);\n if (a !== 2 && a !== 4) {\n mul(c, c, i);\n }\n }\n for (a = 0; a < 16; a++) {\n o[a] = c[a];\n }\n}\n\nfunction pow2523(o: GF, i: GF) {\n const c = gf();\n let a: number;\n for (a = 0; a < 16; a++) {\n c[a] = i[a];\n }\n for (a = 250; a >= 0; a--) {\n square(c, c);\n if (a !== 1) {\n mul(c, c, i);\n }\n }\n for (a = 0; a < 16; a++) {\n o[a] = c[a];\n }\n}\n\n\nfunction edadd(p: GF[], q: GF[]) {\n const a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n sub(a, p[1], p[0]);\n sub(t, q[1], q[0]);\n mul(a, a, t);\n add(b, p[0], p[1]);\n add(t, q[0], q[1]);\n mul(b, b, t);\n mul(c, p[3], q[3]);\n mul(c, c, D2);\n mul(d, p[2], q[2]);\n add(d, d, d);\n sub(e, b, a);\n sub(f, d, c);\n add(g, d, c);\n add(h, b, a);\n\n mul(p[0], e, f);\n mul(p[1], h, g);\n mul(p[2], g, f);\n mul(p[3], e, h);\n}\n\nfunction cswap(p: GF[], q: GF[], b: number) {\n for (let i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r: Uint8Array, p: GF[]) {\n const tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n mul(tx, p[0], zi);\n mul(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p: GF[], q: GF[], s: Uint8Array) {\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (let i = 255; i >= 0; --i) {\n const b = (s[(i / 8) | 0] >> (i & 7)) & 1;\n cswap(p, q, b);\n edadd(q, p);\n edadd(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p: GF[], s: Uint8Array) {\n const q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n mul(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nexport interface KeyPair {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n}\n\n// Generates key pair from secret 32-byte seed.\nexport function generateKeyPairFromSeed(seed: Uint8Array): KeyPair {\n if (seed.length !== SEED_LENGTH) {\n throw new Error(`ed25519: seed must be ${SEED_LENGTH} bytes`);\n }\n\n const d = hash(seed);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n const publicKey = new Uint8Array(32);\n const p = [gf(), gf(), gf(), gf()];\n scalarbase(p, d);\n pack(publicKey, p);\n\n const secretKey = new Uint8Array(64);\n secretKey.set(seed);\n secretKey.set(publicKey, 32);\n\n return {\n publicKey,\n secretKey\n };\n}\n\nexport function generateKeyPair(prng?: RandomSource): KeyPair {\n const seed = randomBytes(32, prng);\n const result = generateKeyPairFromSeed(seed);\n wipe(seed);\n return result;\n}\n\nexport function extractPublicKeyFromSecretKey(secretKey: Uint8Array): Uint8Array {\n if (secretKey.length !== SECRET_KEY_LENGTH) {\n throw new Error(`ed25519: secret key must be ${SECRET_KEY_LENGTH} bytes`);\n }\n return new Uint8Array(secretKey.subarray(32));\n}\n\nconst L = new Float64Array([\n 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2,\n 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10\n]);\n\nfunction modL(r: Uint8Array, x: Float64Array) {\n let carry: number;\n let i: number;\n let j: number;\n let k: number;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) {\n x[j] -= carry * L[j];\n }\n for (i = 0; i < 32; i++) {\n x[i + 1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r: Uint8Array) {\n const x = new Float64Array(64);\n for (let i = 0; i < 64; i++) {\n x[i] = r[i];\n }\n for (let i = 0; i < 64; i++) {\n r[i] = 0;\n }\n modL(r, x);\n}\n\n// Returns 64-byte signature of the message under the 64-byte secret key.\nexport function sign(secretKey: Uint8Array, message: Uint8Array): Uint8Array {\n const x = new Float64Array(64);\n const p = [gf(), gf(), gf(), gf()];\n\n const d = hash(secretKey.subarray(0, 32));\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n const signature = new Uint8Array(64);\n signature.set(d.subarray(32), 32);\n\n const hs = new SHA512();\n hs.update(signature.subarray(32));\n hs.update(message);\n const r = hs.digest();\n hs.clean();\n reduce(r);\n scalarbase(p, r);\n pack(signature, p);\n\n hs.reset();\n hs.update(signature.subarray(0, 32));\n hs.update(secretKey.subarray(32));\n hs.update(message);\n const h = hs.digest();\n reduce(h);\n\n for (let i = 0; i < 32; i++) {\n x[i] = r[i];\n }\n for (let i = 0; i < 32; i++) {\n for (let j = 0; j < 32; j++) {\n x[i + j] += h[i] * d[j];\n }\n }\n modL(signature.subarray(32), x);\n\n return signature;\n}\n\nfunction unpackneg(r: GF[], p: Uint8Array) {\n const t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n square(num, r[1]);\n mul(den, num, D);\n sub(num, num, r[2]);\n add(den, r[2], den);\n\n square(den2, den);\n square(den4, den2);\n mul(den6, den4, den2);\n mul(t, den6, num);\n mul(t, t, den);\n\n pow2523(t, t);\n mul(t, t, num);\n mul(t, t, den);\n mul(t, t, den);\n mul(r[0], t, den);\n\n square(chk, r[0]);\n mul(chk, chk, den);\n if (neq25519(chk, num)) {\n mul(r[0], r[0], I);\n }\n\n square(chk, r[0]);\n mul(chk, chk, den);\n if (neq25519(chk, num)) {\n return -1;\n }\n\n if (par25519(r[0]) === (p[31] >> 7)) {\n sub(r[0], gf0, r[0]);\n }\n\n mul(r[3], r[0], r[1]);\n return 0;\n}\n\nexport function verify(publicKey: Uint8Array, message: Uint8Array, signature: Uint8Array): boolean {\n const t = new Uint8Array(32);\n const p = [gf(), gf(), gf(), gf()];\n const q = [gf(), gf(), gf(), gf()];\n\n if (signature.length !== SIGNATURE_LENGTH) {\n throw new Error(`ed25519: signature must be ${SIGNATURE_LENGTH} bytes`);\n }\n\n if (unpackneg(q, publicKey)) {\n return false;\n }\n\n const hs = new SHA512();\n hs.update(signature.subarray(0, 32));\n hs.update(publicKey);\n hs.update(message);\n const h = hs.digest();\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, signature.subarray(32));\n edadd(p, q);\n pack(t, p);\n\n if (verify32(signature, t)) {\n return false;\n }\n return true;\n}\n\n/**\n * Convert Ed25519 public key to X25519 public key.\n *\n * Throws if given an invalid public key.\n */\nexport function convertPublicKeyToX25519(publicKey: Uint8Array): Uint8Array {\n let q = [gf(), gf(), gf(), gf()];\n\n if (unpackneg(q, publicKey)) {\n throw new Error(\"Ed25519: invalid public key\");\n }\n\n // Formula: montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p\n let a = gf();\n let b = gf();\n let y = q[1];\n add(a, gf1, y);\n sub(b, gf1, y);\n inv25519(b, b);\n mul(a, a, b);\n\n let z = new Uint8Array(32);\n pack25519(z, a);\n return z;\n}\n\n/**\n * Convert Ed25519 secret (private) key to X25519 secret key.\n */\nexport function convertSecretKeyToX25519(secretKey: Uint8Array): Uint8Array {\n const d = hash(secretKey.subarray(0, 32));\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n const o = new Uint8Array(d.subarray(0, 32));\n wipe(d);\n return o;\n}\n","var bigInt = (function (undefined) {\r\n \"use strict\";\r\n\r\n var BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_INT = 9007199254740992,\r\n MAX_INT_ARR = smallToArray(MAX_INT),\r\n DEFAULT_ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n\r\n var supportsNativeBigInt = typeof BigInt === \"function\";\r\n\r\n function Integer(v, radix, alphabet, caseSensitive) {\r\n if (typeof v === \"undefined\") return Integer[0];\r\n if (typeof radix !== \"undefined\") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);\r\n return parseValue(v);\r\n }\r\n\r\n function BigInteger(value, sign) {\r\n this.value = value;\r\n this.sign = sign;\r\n this.isSmall = false;\r\n }\r\n BigInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function SmallInteger(value) {\r\n this.value = value;\r\n this.sign = value < 0;\r\n this.isSmall = true;\r\n }\r\n SmallInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function NativeBigInt(value) {\r\n this.value = value;\r\n }\r\n NativeBigInt.prototype = Object.create(Integer.prototype);\r\n\r\n function isPrecise(n) {\r\n return -MAX_INT < n && n < MAX_INT;\r\n }\r\n\r\n function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes\r\n if (n < 1e7)\r\n return [n];\r\n if (n < 1e14)\r\n return [n % 1e7, Math.floor(n / 1e7)];\r\n return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];\r\n }\r\n\r\n function arrayToSmall(arr) { // If BASE changes this function may need to change\r\n trim(arr);\r\n var length = arr.length;\r\n if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {\r\n switch (length) {\r\n case 0: return 0;\r\n case 1: return arr[0];\r\n case 2: return arr[0] + arr[1] * BASE;\r\n default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n function trim(v) {\r\n var i = v.length;\r\n while (v[--i] === 0);\r\n v.length = i + 1;\r\n }\r\n\r\n function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger\r\n var x = new Array(length);\r\n var i = -1;\r\n while (++i < length) {\r\n x[i] = 0;\r\n }\r\n return x;\r\n }\r\n\r\n function truncate(n) {\r\n if (n > 0) return Math.floor(n);\r\n return Math.ceil(n);\r\n }\r\n\r\n function add(a, b) { // assumes a and b are arrays with a.length >= b.length\r\n var l_a = a.length,\r\n l_b = b.length,\r\n r = new Array(l_a),\r\n carry = 0,\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l_b; i++) {\r\n sum = a[i] + b[i] + carry;\r\n carry = sum >= base ? 1 : 0;\r\n r[i] = sum - carry * base;\r\n }\r\n while (i < l_a) {\r\n sum = a[i] + carry;\r\n carry = sum === base ? 1 : 0;\r\n r[i++] = sum - carry * base;\r\n }\r\n if (carry > 0) r.push(carry);\r\n return r;\r\n }\r\n\r\n function addAny(a, b) {\r\n if (a.length >= b.length) return add(a, b);\r\n return add(b, a);\r\n }\r\n\r\n function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l; i++) {\r\n sum = a[i] - base + carry;\r\n carry = Math.floor(sum / base);\r\n r[i] = sum - carry * base;\r\n carry += 1;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall) {\r\n return new BigInteger(addSmall(a, Math.abs(b)), this.sign);\r\n }\r\n return new BigInteger(addAny(a, b), this.sign);\r\n };\r\n BigInteger.prototype.plus = BigInteger.prototype.add;\r\n\r\n SmallInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n if (isPrecise(a + b)) return new SmallInteger(a + b);\r\n b = smallToArray(Math.abs(b));\r\n }\r\n return new BigInteger(addSmall(b, Math.abs(a)), a < 0);\r\n };\r\n SmallInteger.prototype.plus = SmallInteger.prototype.add;\r\n\r\n NativeBigInt.prototype.add = function (v) {\r\n return new NativeBigInt(this.value + parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.plus = NativeBigInt.prototype.add;\r\n\r\n function subtract(a, b) { // assumes a and b are arrays with a >= b\r\n var a_l = a.length,\r\n b_l = b.length,\r\n r = new Array(a_l),\r\n borrow = 0,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < b_l; i++) {\r\n difference = a[i] - borrow - b[i];\r\n if (difference < 0) {\r\n difference += base;\r\n borrow = 1;\r\n } else borrow = 0;\r\n r[i] = difference;\r\n }\r\n for (i = b_l; i < a_l; i++) {\r\n difference = a[i] - borrow;\r\n if (difference < 0) difference += base;\r\n else {\r\n r[i++] = difference;\r\n break;\r\n }\r\n r[i] = difference;\r\n }\r\n for (; i < a_l; i++) {\r\n r[i] = a[i];\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function subtractAny(a, b, sign) {\r\n var value;\r\n if (compareAbs(a, b) >= 0) {\r\n value = subtract(a, b);\r\n } else {\r\n value = subtract(b, a);\r\n sign = !sign;\r\n }\r\n value = arrayToSmall(value);\r\n if (typeof value === \"number\") {\r\n if (sign) value = -value;\r\n return new SmallInteger(value);\r\n }\r\n return new BigInteger(value, sign);\r\n }\r\n\r\n function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n carry = -b,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < l; i++) {\r\n difference = a[i] + carry;\r\n carry = Math.floor(difference / base);\r\n difference %= base;\r\n r[i] = difference < 0 ? difference + base : difference;\r\n }\r\n r = arrayToSmall(r);\r\n if (typeof r === \"number\") {\r\n if (sign) r = -r;\r\n return new SmallInteger(r);\r\n } return new BigInteger(r, sign);\r\n }\r\n\r\n BigInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall)\r\n return subtractSmall(a, Math.abs(b), this.sign);\r\n return subtractAny(a, b, this.sign);\r\n };\r\n BigInteger.prototype.minus = BigInteger.prototype.subtract;\r\n\r\n SmallInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n return new SmallInteger(a - b);\r\n }\r\n return subtractSmall(b, Math.abs(a), a >= 0);\r\n };\r\n SmallInteger.prototype.minus = SmallInteger.prototype.subtract;\r\n\r\n NativeBigInt.prototype.subtract = function (v) {\r\n return new NativeBigInt(this.value - parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;\r\n\r\n BigInteger.prototype.negate = function () {\r\n return new BigInteger(this.value, !this.sign);\r\n };\r\n SmallInteger.prototype.negate = function () {\r\n var sign = this.sign;\r\n var small = new SmallInteger(-this.value);\r\n small.sign = !sign;\r\n return small;\r\n };\r\n NativeBigInt.prototype.negate = function () {\r\n return new NativeBigInt(-this.value);\r\n }\r\n\r\n BigInteger.prototype.abs = function () {\r\n return new BigInteger(this.value, false);\r\n };\r\n SmallInteger.prototype.abs = function () {\r\n return new SmallInteger(Math.abs(this.value));\r\n };\r\n NativeBigInt.prototype.abs = function () {\r\n return new NativeBigInt(this.value >= 0 ? this.value : -this.value);\r\n }\r\n\r\n\r\n function multiplyLong(a, b) {\r\n var a_l = a.length,\r\n b_l = b.length,\r\n l = a_l + b_l,\r\n r = createArray(l),\r\n base = BASE,\r\n product, carry, i, a_i, b_j;\r\n for (i = 0; i < a_l; ++i) {\r\n a_i = a[i];\r\n for (var j = 0; j < b_l; ++j) {\r\n b_j = b[j];\r\n product = a_i * b_j + r[i + j];\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n r[i + j + 1] += carry;\r\n }\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n carry = 0,\r\n product, i;\r\n for (i = 0; i < l; i++) {\r\n product = a[i] * b + carry;\r\n carry = Math.floor(product / base);\r\n r[i] = product - carry * base;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n function shiftLeft(x, n) {\r\n var r = [];\r\n while (n-- > 0) r.push(0);\r\n return r.concat(x);\r\n }\r\n\r\n function multiplyKaratsuba(x, y) {\r\n var n = Math.max(x.length, y.length);\r\n\r\n if (n <= 30) return multiplyLong(x, y);\r\n n = Math.ceil(n / 2);\r\n\r\n var b = x.slice(n),\r\n a = x.slice(0, n),\r\n d = y.slice(n),\r\n c = y.slice(0, n);\r\n\r\n var ac = multiplyKaratsuba(a, c),\r\n bd = multiplyKaratsuba(b, d),\r\n abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));\r\n\r\n var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));\r\n trim(product);\r\n return product;\r\n }\r\n\r\n // The following function is derived from a surface fit of a graph plotting the performance difference\r\n // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.\r\n function useKaratsuba(l1, l2) {\r\n return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;\r\n }\r\n\r\n BigInteger.prototype.multiply = function (v) {\r\n var n = parseValue(v),\r\n a = this.value, b = n.value,\r\n sign = this.sign !== n.sign,\r\n abs;\r\n if (n.isSmall) {\r\n if (b === 0) return Integer[0];\r\n if (b === 1) return this;\r\n if (b === -1) return this.negate();\r\n abs = Math.abs(b);\r\n if (abs < BASE) {\r\n return new BigInteger(multiplySmall(a, abs), sign);\r\n }\r\n b = smallToArray(abs);\r\n }\r\n if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes\r\n return new BigInteger(multiplyKaratsuba(a, b), sign);\r\n return new BigInteger(multiplyLong(a, b), sign);\r\n };\r\n\r\n BigInteger.prototype.times = BigInteger.prototype.multiply;\r\n\r\n function multiplySmallAndArray(a, b, sign) { // a >= 0\r\n if (a < BASE) {\r\n return new BigInteger(multiplySmall(b, a), sign);\r\n }\r\n return new BigInteger(multiplyLong(b, smallToArray(a)), sign);\r\n }\r\n SmallInteger.prototype._multiplyBySmall = function (a) {\r\n if (isPrecise(a.value * this.value)) {\r\n return new SmallInteger(a.value * this.value);\r\n }\r\n return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);\r\n };\r\n BigInteger.prototype._multiplyBySmall = function (a) {\r\n if (a.value === 0) return Integer[0];\r\n if (a.value === 1) return this;\r\n if (a.value === -1) return this.negate();\r\n return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);\r\n };\r\n SmallInteger.prototype.multiply = function (v) {\r\n return parseValue(v)._multiplyBySmall(this);\r\n };\r\n SmallInteger.prototype.times = SmallInteger.prototype.multiply;\r\n\r\n NativeBigInt.prototype.multiply = function (v) {\r\n return new NativeBigInt(this.value * parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;\r\n\r\n function square(a) {\r\n //console.assert(2 * BASE * BASE < MAX_INT);\r\n var l = a.length,\r\n r = createArray(l + l),\r\n base = BASE,\r\n product, carry, i, a_i, a_j;\r\n for (i = 0; i < l; i++) {\r\n a_i = a[i];\r\n carry = 0 - a_i * a_i;\r\n for (var j = i; j < l; j++) {\r\n a_j = a[j];\r\n product = 2 * (a_i * a_j) + r[i + j] + carry;\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n }\r\n r[i + l] = carry;\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.square = function () {\r\n return new BigInteger(square(this.value), false);\r\n };\r\n\r\n SmallInteger.prototype.square = function () {\r\n var value = this.value * this.value;\r\n if (isPrecise(value)) return new SmallInteger(value);\r\n return new BigInteger(square(smallToArray(Math.abs(this.value))), false);\r\n };\r\n\r\n NativeBigInt.prototype.square = function (v) {\r\n return new NativeBigInt(this.value * this.value);\r\n }\r\n\r\n function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n base = BASE,\r\n result = createArray(b.length),\r\n divisorMostSignificantDigit = b[b_l - 1],\r\n // normalization\r\n lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),\r\n remainder = multiplySmall(a, lambda),\r\n divisor = multiplySmall(b, lambda),\r\n quotientDigit, shift, carry, borrow, i, l, q;\r\n if (remainder.length <= a_l) remainder.push(0);\r\n divisor.push(0);\r\n divisorMostSignificantDigit = divisor[b_l - 1];\r\n for (shift = a_l - b_l; shift >= 0; shift--) {\r\n quotientDigit = base - 1;\r\n if (remainder[shift + b_l] !== divisorMostSignificantDigit) {\r\n quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);\r\n }\r\n // quotientDigit <= base - 1\r\n carry = 0;\r\n borrow = 0;\r\n l = divisor.length;\r\n for (i = 0; i < l; i++) {\r\n carry += quotientDigit * divisor[i];\r\n q = Math.floor(carry / base);\r\n borrow += remainder[shift + i] - (carry - q * base);\r\n carry = q;\r\n if (borrow < 0) {\r\n remainder[shift + i] = borrow + base;\r\n borrow = -1;\r\n } else {\r\n remainder[shift + i] = borrow;\r\n borrow = 0;\r\n }\r\n }\r\n while (borrow !== 0) {\r\n quotientDigit -= 1;\r\n carry = 0;\r\n for (i = 0; i < l; i++) {\r\n carry += remainder[shift + i] - base + divisor[i];\r\n if (carry < 0) {\r\n remainder[shift + i] = carry + base;\r\n carry = 0;\r\n } else {\r\n remainder[shift + i] = carry;\r\n carry = 1;\r\n }\r\n }\r\n borrow += carry;\r\n }\r\n result[shift] = quotientDigit;\r\n }\r\n // denormalization\r\n remainder = divModSmall(remainder, lambda)[0];\r\n return [arrayToSmall(result), arrayToSmall(remainder)];\r\n }\r\n\r\n function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/\r\n // Performs faster than divMod1 on larger input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n result = [],\r\n part = [],\r\n base = BASE,\r\n guess, xlen, highx, highy, check;\r\n while (a_l) {\r\n part.unshift(a[--a_l]);\r\n trim(part);\r\n if (compareAbs(part, b) < 0) {\r\n result.push(0);\r\n continue;\r\n }\r\n xlen = part.length;\r\n highx = part[xlen - 1] * base + part[xlen - 2];\r\n highy = b[b_l - 1] * base + b[b_l - 2];\r\n if (xlen > b_l) {\r\n highx = (highx + 1) * base;\r\n }\r\n guess = Math.ceil(highx / highy);\r\n do {\r\n check = multiplySmall(b, guess);\r\n if (compareAbs(check, part) <= 0) break;\r\n guess--;\r\n } while (guess);\r\n result.push(guess);\r\n part = subtract(part, check);\r\n }\r\n result.reverse();\r\n return [arrayToSmall(result), arrayToSmall(part)];\r\n }\r\n\r\n function divModSmall(value, lambda) {\r\n var length = value.length,\r\n quotient = createArray(length),\r\n base = BASE,\r\n i, q, remainder, divisor;\r\n remainder = 0;\r\n for (i = length - 1; i >= 0; --i) {\r\n divisor = remainder * base + value[i];\r\n q = truncate(divisor / lambda);\r\n remainder = divisor - q * lambda;\r\n quotient[i] = q | 0;\r\n }\r\n return [quotient, remainder | 0];\r\n }\r\n\r\n function divModAny(self, v) {\r\n var value, n = parseValue(v);\r\n if (supportsNativeBigInt) {\r\n return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];\r\n }\r\n var a = self.value, b = n.value;\r\n var quotient;\r\n if (b === 0) throw new Error(\"Cannot divide by zero\");\r\n if (self.isSmall) {\r\n if (n.isSmall) {\r\n return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];\r\n }\r\n return [Integer[0], self];\r\n }\r\n if (n.isSmall) {\r\n if (b === 1) return [self, Integer[0]];\r\n if (b == -1) return [self.negate(), Integer[0]];\r\n var abs = Math.abs(b);\r\n if (abs < BASE) {\r\n value = divModSmall(a, abs);\r\n quotient = arrayToSmall(value[0]);\r\n var remainder = value[1];\r\n if (self.sign) remainder = -remainder;\r\n if (typeof quotient === \"number\") {\r\n if (self.sign !== n.sign) quotient = -quotient;\r\n return [new SmallInteger(quotient), new SmallInteger(remainder)];\r\n }\r\n return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];\r\n }\r\n b = smallToArray(abs);\r\n }\r\n var comparison = compareAbs(a, b);\r\n if (comparison === -1) return [Integer[0], self];\r\n if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];\r\n\r\n // divMod1 is faster on smaller input sizes\r\n if (a.length + b.length <= 200)\r\n value = divMod1(a, b);\r\n else value = divMod2(a, b);\r\n\r\n quotient = value[0];\r\n var qSign = self.sign !== n.sign,\r\n mod = value[1],\r\n mSign = self.sign;\r\n if (typeof quotient === \"number\") {\r\n if (qSign) quotient = -quotient;\r\n quotient = new SmallInteger(quotient);\r\n } else quotient = new BigInteger(quotient, qSign);\r\n if (typeof mod === \"number\") {\r\n if (mSign) mod = -mod;\r\n mod = new SmallInteger(mod);\r\n } else mod = new BigInteger(mod, mSign);\r\n return [quotient, mod];\r\n }\r\n\r\n BigInteger.prototype.divmod = function (v) {\r\n var result = divModAny(this, v);\r\n return {\r\n quotient: result[0],\r\n remainder: result[1]\r\n };\r\n };\r\n NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;\r\n\r\n\r\n BigInteger.prototype.divide = function (v) {\r\n return divModAny(this, v)[0];\r\n };\r\n NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {\r\n return new NativeBigInt(this.value / parseValue(v).value);\r\n };\r\n SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;\r\n\r\n BigInteger.prototype.mod = function (v) {\r\n return divModAny(this, v)[1];\r\n };\r\n NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {\r\n return new NativeBigInt(this.value % parseValue(v).value);\r\n };\r\n SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;\r\n\r\n BigInteger.prototype.pow = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value,\r\n value, x, y;\r\n if (b === 0) return Integer[1];\r\n if (a === 0) return Integer[0];\r\n if (a === 1) return Integer[1];\r\n if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.sign) {\r\n return Integer[0];\r\n }\r\n if (!n.isSmall) throw new Error(\"The exponent \" + n.toString() + \" is too large.\");\r\n if (this.isSmall) {\r\n if (isPrecise(value = Math.pow(a, b)))\r\n return new SmallInteger(truncate(value));\r\n }\r\n x = this;\r\n y = Integer[1];\r\n while (true) {\r\n if (b & 1 === 1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === 0) break;\r\n b /= 2;\r\n x = x.square();\r\n }\r\n return y;\r\n };\r\n SmallInteger.prototype.pow = BigInteger.prototype.pow;\r\n\r\n NativeBigInt.prototype.pow = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value, b = n.value;\r\n var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);\r\n if (b === _0) return Integer[1];\r\n if (a === _0) return Integer[0];\r\n if (a === _1) return Integer[1];\r\n if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.isNegative()) return new NativeBigInt(_0);\r\n var x = this;\r\n var y = Integer[1];\r\n while (true) {\r\n if ((b & _1) === _1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === _0) break;\r\n b /= _2;\r\n x = x.square();\r\n }\r\n return y;\r\n }\r\n\r\n BigInteger.prototype.modPow = function (exp, mod) {\r\n exp = parseValue(exp);\r\n mod = parseValue(mod);\r\n if (mod.isZero()) throw new Error(\"Cannot take modPow with modulus 0\");\r\n var r = Integer[1],\r\n base = this.mod(mod);\r\n if (exp.isNegative()) {\r\n exp = exp.multiply(Integer[-1]);\r\n base = base.modInv(mod);\r\n }\r\n while (exp.isPositive()) {\r\n if (base.isZero()) return Integer[0];\r\n if (exp.isOdd()) r = r.multiply(base).mod(mod);\r\n exp = exp.divide(2);\r\n base = base.square().mod(mod);\r\n }\r\n return r;\r\n };\r\n NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;\r\n\r\n function compareAbs(a, b) {\r\n if (a.length !== b.length) {\r\n return a.length > b.length ? 1 : -1;\r\n }\r\n for (var i = a.length - 1; i >= 0; i--) {\r\n if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n\r\n BigInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) return 1;\r\n return compareAbs(a, b);\r\n };\r\n SmallInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = Math.abs(this.value),\r\n b = n.value;\r\n if (n.isSmall) {\r\n b = Math.abs(b);\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n return -1;\r\n };\r\n NativeBigInt.prototype.compareAbs = function (v) {\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n a = a >= 0 ? a : -a;\r\n b = b >= 0 ? b : -b;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n\r\n BigInteger.prototype.compare = function (v) {\r\n // See discussion about comparison with Infinity:\r\n // https://github.com/peterolson/BigInteger.js/issues/61\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (this.sign !== n.sign) {\r\n return n.sign ? 1 : -1;\r\n }\r\n if (n.isSmall) {\r\n return this.sign ? -1 : 1;\r\n }\r\n return compareAbs(a, b) * (this.sign ? -1 : 1);\r\n };\r\n BigInteger.prototype.compareTo = BigInteger.prototype.compare;\r\n\r\n SmallInteger.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) {\r\n return a == b ? 0 : a > b ? 1 : -1;\r\n }\r\n if (a < 0 !== n.sign) {\r\n return a < 0 ? -1 : 1;\r\n }\r\n return a < 0 ? 1 : -1;\r\n };\r\n SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;\r\n\r\n NativeBigInt.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;\r\n\r\n BigInteger.prototype.equals = function (v) {\r\n return this.compare(v) === 0;\r\n };\r\n NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;\r\n\r\n BigInteger.prototype.notEquals = function (v) {\r\n return this.compare(v) !== 0;\r\n };\r\n NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;\r\n\r\n BigInteger.prototype.greater = function (v) {\r\n return this.compare(v) > 0;\r\n };\r\n NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;\r\n\r\n BigInteger.prototype.lesser = function (v) {\r\n return this.compare(v) < 0;\r\n };\r\n NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;\r\n\r\n BigInteger.prototype.greaterOrEquals = function (v) {\r\n return this.compare(v) >= 0;\r\n };\r\n NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;\r\n\r\n BigInteger.prototype.lesserOrEquals = function (v) {\r\n return this.compare(v) <= 0;\r\n };\r\n NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;\r\n\r\n BigInteger.prototype.isEven = function () {\r\n return (this.value[0] & 1) === 0;\r\n };\r\n SmallInteger.prototype.isEven = function () {\r\n return (this.value & 1) === 0;\r\n };\r\n NativeBigInt.prototype.isEven = function () {\r\n return (this.value & BigInt(1)) === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isOdd = function () {\r\n return (this.value[0] & 1) === 1;\r\n };\r\n SmallInteger.prototype.isOdd = function () {\r\n return (this.value & 1) === 1;\r\n };\r\n NativeBigInt.prototype.isOdd = function () {\r\n return (this.value & BigInt(1)) === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isPositive = function () {\r\n return !this.sign;\r\n };\r\n SmallInteger.prototype.isPositive = function () {\r\n return this.value > 0;\r\n };\r\n NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;\r\n\r\n BigInteger.prototype.isNegative = function () {\r\n return this.sign;\r\n };\r\n SmallInteger.prototype.isNegative = function () {\r\n return this.value < 0;\r\n };\r\n NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;\r\n\r\n BigInteger.prototype.isUnit = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isUnit = function () {\r\n return Math.abs(this.value) === 1;\r\n };\r\n NativeBigInt.prototype.isUnit = function () {\r\n return this.abs().value === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isZero = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isZero = function () {\r\n return this.value === 0;\r\n };\r\n NativeBigInt.prototype.isZero = function () {\r\n return this.value === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isDivisibleBy = function (v) {\r\n var n = parseValue(v);\r\n if (n.isZero()) return false;\r\n if (n.isUnit()) return true;\r\n if (n.compareAbs(2) === 0) return this.isEven();\r\n return this.mod(n).isZero();\r\n };\r\n NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;\r\n\r\n function isBasicPrime(v) {\r\n var n = v.abs();\r\n if (n.isUnit()) return false;\r\n if (n.equals(2) || n.equals(3) || n.equals(5)) return true;\r\n if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;\r\n if (n.lesser(49)) return true;\r\n // we don't know if it's prime: let the other functions figure it out\r\n }\r\n\r\n function millerRabinTest(n, a) {\r\n var nPrev = n.prev(),\r\n b = nPrev,\r\n r = 0,\r\n d, t, i, x;\r\n while (b.isEven()) b = b.divide(2), r++;\r\n next: for (i = 0; i < a.length; i++) {\r\n if (n.lesser(a[i])) continue;\r\n x = bigInt(a[i]).modPow(b, n);\r\n if (x.isUnit() || x.equals(nPrev)) continue;\r\n for (d = r - 1; d != 0; d--) {\r\n x = x.square().mod(n);\r\n if (x.isUnit()) return false;\r\n if (x.equals(nPrev)) continue next;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Set \"strict\" to true to force GRH-supported lower bound of 2*log(N)^2\r\n BigInteger.prototype.isPrime = function (strict) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var bits = n.bitLength();\r\n if (bits <= 64)\r\n return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);\r\n var logN = Math.log(2) * bits.toJSNumber();\r\n var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt(i + 2));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;\r\n\r\n BigInteger.prototype.isProbablePrime = function (iterations, rng) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var t = iterations === undefined ? 5 : iterations;\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt.randBetween(2, n.minus(2), rng));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;\r\n\r\n BigInteger.prototype.modInv = function (n) {\r\n var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;\r\n while (!newR.isZero()) {\r\n q = r.divide(newR);\r\n lastT = t;\r\n lastR = r;\r\n t = newT;\r\n r = newR;\r\n newT = lastT.subtract(q.multiply(newT));\r\n newR = lastR.subtract(q.multiply(newR));\r\n }\r\n if (!r.isUnit()) throw new Error(this.toString() + \" and \" + n.toString() + \" are not co-prime\");\r\n if (t.compare(0) === -1) {\r\n t = t.add(n);\r\n }\r\n if (this.isNegative()) {\r\n return t.negate();\r\n }\r\n return t;\r\n };\r\n\r\n NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;\r\n\r\n BigInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return subtractSmall(value, 1, this.sign);\r\n }\r\n return new BigInteger(addSmall(value, 1), this.sign);\r\n };\r\n SmallInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (value + 1 < MAX_INT) return new SmallInteger(value + 1);\r\n return new BigInteger(MAX_INT_ARR, false);\r\n };\r\n NativeBigInt.prototype.next = function () {\r\n return new NativeBigInt(this.value + BigInt(1));\r\n }\r\n\r\n BigInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return new BigInteger(addSmall(value, 1), true);\r\n }\r\n return subtractSmall(value, 1, this.sign);\r\n };\r\n SmallInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);\r\n return new BigInteger(MAX_INT_ARR, true);\r\n };\r\n NativeBigInt.prototype.prev = function () {\r\n return new NativeBigInt(this.value - BigInt(1));\r\n }\r\n\r\n var powersOfTwo = [1];\r\n while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);\r\n var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];\r\n\r\n function shift_isSmall(n) {\r\n return Math.abs(n) <= BASE;\r\n }\r\n\r\n BigInteger.prototype.shiftLeft = function (v) {\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftRight(-n);\r\n var result = this;\r\n if (result.isZero()) return result;\r\n while (n >= powers2Length) {\r\n result = result.multiply(highestPower2);\r\n n -= powers2Length - 1;\r\n }\r\n return result.multiply(powersOfTwo[n]);\r\n };\r\n NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;\r\n\r\n BigInteger.prototype.shiftRight = function (v) {\r\n var remQuo;\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftLeft(-n);\r\n var result = this;\r\n while (n >= powers2Length) {\r\n if (result.isZero() || (result.isNegative() && result.isUnit())) return result;\r\n remQuo = divModAny(result, highestPower2);\r\n result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n n -= powers2Length - 1;\r\n }\r\n remQuo = divModAny(result, powersOfTwo[n]);\r\n return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n };\r\n NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;\r\n\r\n function bitwise(x, y, fn) {\r\n y = parseValue(y);\r\n var xSign = x.isNegative(), ySign = y.isNegative();\r\n var xRem = xSign ? x.not() : x,\r\n yRem = ySign ? y.not() : y;\r\n var xDigit = 0, yDigit = 0;\r\n var xDivMod = null, yDivMod = null;\r\n var result = [];\r\n while (!xRem.isZero() || !yRem.isZero()) {\r\n xDivMod = divModAny(xRem, highestPower2);\r\n xDigit = xDivMod[1].toJSNumber();\r\n if (xSign) {\r\n xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers\r\n }\r\n\r\n yDivMod = divModAny(yRem, highestPower2);\r\n yDigit = yDivMod[1].toJSNumber();\r\n if (ySign) {\r\n yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers\r\n }\r\n\r\n xRem = xDivMod[0];\r\n yRem = yDivMod[0];\r\n result.push(fn(xDigit, yDigit));\r\n }\r\n var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);\r\n for (var i = result.length - 1; i >= 0; i -= 1) {\r\n sum = sum.multiply(highestPower2).add(bigInt(result[i]));\r\n }\r\n return sum;\r\n }\r\n\r\n BigInteger.prototype.not = function () {\r\n return this.negate().prev();\r\n };\r\n NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;\r\n\r\n BigInteger.prototype.and = function (n) {\r\n return bitwise(this, n, function (a, b) { return a & b; });\r\n };\r\n NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;\r\n\r\n BigInteger.prototype.or = function (n) {\r\n return bitwise(this, n, function (a, b) { return a | b; });\r\n };\r\n NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;\r\n\r\n BigInteger.prototype.xor = function (n) {\r\n return bitwise(this, n, function (a, b) { return a ^ b; });\r\n };\r\n NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;\r\n\r\n var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;\r\n function roughLOB(n) { // get lowestOneBit (rough)\r\n // SmallInteger: return Min(lowestOneBit(n), 1 << 30)\r\n // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]\r\n var v = n.value,\r\n x = typeof v === \"number\" ? v | LOBMASK_I :\r\n typeof v === \"bigint\" ? v | BigInt(LOBMASK_I) :\r\n v[0] + v[1] * BASE | LOBMASK_BI;\r\n return x & -x;\r\n }\r\n\r\n function integerLogarithm(value, base) {\r\n if (base.compareTo(value) <= 0) {\r\n var tmp = integerLogarithm(value, base.square(base));\r\n var p = tmp.p;\r\n var e = tmp.e;\r\n var t = p.multiply(base);\r\n return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };\r\n }\r\n return { p: bigInt(1), e: 0 };\r\n }\r\n\r\n BigInteger.prototype.bitLength = function () {\r\n var n = this;\r\n if (n.compareTo(bigInt(0)) < 0) {\r\n n = n.negate().subtract(bigInt(1));\r\n }\r\n if (n.compareTo(bigInt(0)) === 0) {\r\n return bigInt(0);\r\n }\r\n return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));\r\n }\r\n NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;\r\n\r\n function max(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.greater(b) ? a : b;\r\n }\r\n function min(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.lesser(b) ? a : b;\r\n }\r\n function gcd(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n if (a.equals(b)) return a;\r\n if (a.isZero()) return b;\r\n if (b.isZero()) return a;\r\n var c = Integer[1], d, t;\r\n while (a.isEven() && b.isEven()) {\r\n d = min(roughLOB(a), roughLOB(b));\r\n a = a.divide(d);\r\n b = b.divide(d);\r\n c = c.multiply(d);\r\n }\r\n while (a.isEven()) {\r\n a = a.divide(roughLOB(a));\r\n }\r\n do {\r\n while (b.isEven()) {\r\n b = b.divide(roughLOB(b));\r\n }\r\n if (a.greater(b)) {\r\n t = b; b = a; a = t;\r\n }\r\n b = b.subtract(a);\r\n } while (!b.isZero());\r\n return c.isUnit() ? a : a.multiply(c);\r\n }\r\n function lcm(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n return a.divide(gcd(a, b)).multiply(b);\r\n }\r\n function randBetween(a, b, rng) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n var usedRNG = rng || Math.random;\r\n var low = min(a, b), high = max(a, b);\r\n var range = high.subtract(low).add(1);\r\n if (range.isSmall) return low.add(Math.floor(usedRNG() * range));\r\n var digits = toBase(range, BASE).value;\r\n var result = [], restricted = true;\r\n for (var i = 0; i < digits.length; i++) {\r\n var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE;\r\n var digit = truncate(usedRNG() * top);\r\n result.push(digit);\r\n if (digit < digits[i]) restricted = false;\r\n }\r\n return low.add(Integer.fromArray(result, BASE, false));\r\n }\r\n\r\n var parseBase = function (text, base, alphabet, caseSensitive) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n text = String(text);\r\n if (!caseSensitive) {\r\n text = text.toLowerCase();\r\n alphabet = alphabet.toLowerCase();\r\n }\r\n var length = text.length;\r\n var i;\r\n var absBase = Math.abs(base);\r\n var alphabetValues = {};\r\n for (i = 0; i < alphabet.length; i++) {\r\n alphabetValues[alphabet[i]] = i;\r\n }\r\n for (i = 0; i < length; i++) {\r\n var c = text[i];\r\n if (c === \"-\") continue;\r\n if (c in alphabetValues) {\r\n if (alphabetValues[c] >= absBase) {\r\n if (c === \"1\" && absBase === 1) continue;\r\n throw new Error(c + \" is not a valid digit in base \" + base + \".\");\r\n }\r\n }\r\n }\r\n base = parseValue(base);\r\n var digits = [];\r\n var isNegative = text[0] === \"-\";\r\n for (i = isNegative ? 1 : 0; i < text.length; i++) {\r\n var c = text[i];\r\n if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));\r\n else if (c === \"<\") {\r\n var start = i;\r\n do { i++; } while (text[i] !== \">\" && i < text.length);\r\n digits.push(parseValue(text.slice(start + 1, i)));\r\n }\r\n else throw new Error(c + \" is not a valid character\");\r\n }\r\n return parseBaseFromArray(digits, base, isNegative);\r\n };\r\n\r\n function parseBaseFromArray(digits, base, isNegative) {\r\n var val = Integer[0], pow = Integer[1], i;\r\n for (i = digits.length - 1; i >= 0; i--) {\r\n val = val.add(digits[i].times(pow));\r\n pow = pow.times(base);\r\n }\r\n return isNegative ? val.negate() : val;\r\n }\r\n\r\n function stringify(digit, alphabet) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n if (digit < alphabet.length) {\r\n return alphabet[digit];\r\n }\r\n return \"<\" + digit + \">\";\r\n }\r\n\r\n function toBase(n, base) {\r\n base = bigInt(base);\r\n if (base.isZero()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n throw new Error(\"Cannot convert nonzero numbers to base 0.\");\r\n }\r\n if (base.equals(-1)) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n if (n.isNegative())\r\n return {\r\n value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))\r\n .map(Array.prototype.valueOf, [1, 0])\r\n ),\r\n isNegative: false\r\n };\r\n\r\n var arr = Array.apply(null, Array(n.toJSNumber() - 1))\r\n .map(Array.prototype.valueOf, [0, 1]);\r\n arr.unshift([1]);\r\n return {\r\n value: [].concat.apply([], arr),\r\n isNegative: false\r\n };\r\n }\r\n\r\n var neg = false;\r\n if (n.isNegative() && base.isPositive()) {\r\n neg = true;\r\n n = n.abs();\r\n }\r\n if (base.isUnit()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n\r\n return {\r\n value: Array.apply(null, Array(n.toJSNumber()))\r\n .map(Number.prototype.valueOf, 1),\r\n isNegative: neg\r\n };\r\n }\r\n var out = [];\r\n var left = n, divmod;\r\n while (left.isNegative() || left.compareAbs(base) >= 0) {\r\n divmod = left.divmod(base);\r\n left = divmod.quotient;\r\n var digit = divmod.remainder;\r\n if (digit.isNegative()) {\r\n digit = base.minus(digit).abs();\r\n left = left.next();\r\n }\r\n out.push(digit.toJSNumber());\r\n }\r\n out.push(left.toJSNumber());\r\n return { value: out.reverse(), isNegative: neg };\r\n }\r\n\r\n function toBaseString(n, base, alphabet) {\r\n var arr = toBase(n, base);\r\n return (arr.isNegative ? \"-\" : \"\") + arr.value.map(function (x) {\r\n return stringify(x, alphabet);\r\n }).join('');\r\n }\r\n\r\n BigInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n SmallInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n NativeBigInt.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n BigInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix !== 10) return toBaseString(this, radix, alphabet);\r\n var v = this.value, l = v.length, str = String(v[--l]), zeros = \"0000000\", digit;\r\n while (--l >= 0) {\r\n digit = String(v[l]);\r\n str += zeros.slice(digit.length) + digit;\r\n }\r\n var sign = this.sign ? \"-\" : \"\";\r\n return sign + str;\r\n };\r\n\r\n SmallInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix != 10) return toBaseString(this, radix, alphabet);\r\n return String(this.value);\r\n };\r\n\r\n NativeBigInt.prototype.toString = SmallInteger.prototype.toString;\r\n\r\n NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }\r\n\r\n BigInteger.prototype.valueOf = function () {\r\n return parseInt(this.toString(), 10);\r\n };\r\n BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;\r\n\r\n SmallInteger.prototype.valueOf = function () {\r\n return this.value;\r\n };\r\n SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;\r\n NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {\r\n return parseInt(this.toString(), 10);\r\n }\r\n\r\n function parseStringValue(v) {\r\n if (isPrecise(+v)) {\r\n var x = +v;\r\n if (x === truncate(x))\r\n return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);\r\n throw new Error(\"Invalid integer: \" + v);\r\n }\r\n var sign = v[0] === \"-\";\r\n if (sign) v = v.slice(1);\r\n var split = v.split(/e/i);\r\n if (split.length > 2) throw new Error(\"Invalid integer: \" + split.join(\"e\"));\r\n if (split.length === 2) {\r\n var exp = split[1];\r\n if (exp[0] === \"+\") exp = exp.slice(1);\r\n exp = +exp;\r\n if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error(\"Invalid integer: \" + exp + \" is not a valid exponent.\");\r\n var text = split[0];\r\n var decimalPlace = text.indexOf(\".\");\r\n if (decimalPlace >= 0) {\r\n exp -= text.length - decimalPlace - 1;\r\n text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);\r\n }\r\n if (exp < 0) throw new Error(\"Cannot include negative exponent part for integers\");\r\n text += (new Array(exp + 1)).join(\"0\");\r\n v = text;\r\n }\r\n var isValid = /^([0-9][0-9]*)$/.test(v);\r\n if (!isValid) throw new Error(\"Invalid integer: \" + v);\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(sign ? \"-\" + v : v));\r\n }\r\n var r = [], max = v.length, l = LOG_BASE, min = max - l;\r\n while (max > 0) {\r\n r.push(+v.slice(min, max));\r\n min -= l;\r\n if (min < 0) min = 0;\r\n max -= l;\r\n }\r\n trim(r);\r\n return new BigInteger(r, sign);\r\n }\r\n\r\n function parseNumberValue(v) {\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(v));\r\n }\r\n if (isPrecise(v)) {\r\n if (v !== truncate(v)) throw new Error(v + \" is not an integer.\");\r\n return new SmallInteger(v);\r\n }\r\n return parseStringValue(v.toString());\r\n }\r\n\r\n function parseValue(v) {\r\n if (typeof v === \"number\") {\r\n return parseNumberValue(v);\r\n }\r\n if (typeof v === \"string\") {\r\n return parseStringValue(v);\r\n }\r\n if (typeof v === \"bigint\") {\r\n return new NativeBigInt(v);\r\n }\r\n return v;\r\n }\r\n // Pre-define numbers in range [-999,999]\r\n for (var i = 0; i < 1000; i++) {\r\n Integer[i] = parseValue(i);\r\n if (i > 0) Integer[-i] = parseValue(-i);\r\n }\r\n // Backwards compatibility\r\n Integer.one = Integer[1];\r\n Integer.zero = Integer[0];\r\n Integer.minusOne = Integer[-1];\r\n Integer.max = max;\r\n Integer.min = min;\r\n Integer.gcd = gcd;\r\n Integer.lcm = lcm;\r\n Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };\r\n Integer.randBetween = randBetween;\r\n\r\n Integer.fromArray = function (digits, base, isNegative) {\r\n return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);\r\n };\r\n\r\n return Integer;\r\n})();\r\n\r\n// Node.js check\r\nif (typeof module !== \"undefined\" && module.hasOwnProperty(\"exports\")) {\r\n module.exports = bigInt;\r\n}\r\n\r\n//amd check\r\nif (typeof define === \"function\" && define.amd) {\r\n define( function () {\r\n return bigInt;\r\n });\r\n}\r\n","export function concat(arrays, length) {\n if (!length) {\n length = arrays.reduce((acc, curr) => acc + curr.length, 0);\n }\n const output = new Uint8Array(length);\n let offset = 0;\n for (const arr of arrays) {\n output.set(arr, offset);\n offset += arr.length;\n }\n return output;\n}","export function equals(a, b) {\n if (a === b) {\n return true;\n }\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}","import { from } from './base.js';\nimport {\n fromString,\n toString\n} from '../bytes.js';\nexport const identity = from({\n prefix: '\\0',\n name: 'identity',\n encode: buf => toString(buf),\n decode: str => fromString(str)\n});","function base(ALPHABET, name) {\n if (ALPHABET.length >= 255) {\n throw new TypeError('Alphabet too long');\n }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) {\n throw new TypeError(x + ' is ambiguous');\n }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256);\n var iFACTOR = Math.log(256) / Math.log(BASE);\n function encode(source) {\n if (source instanceof Uint8Array);\n else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) {\n throw new TypeError('Expected Uint8Array');\n }\n if (source.length === 0) {\n return '';\n }\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n var size = (pend - pbegin) * iFACTOR + 1 >>> 0;\n var b58 = new Uint8Array(size);\n while (pbegin !== pend) {\n var carry = source[pbegin];\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n carry += 256 * b58[it1] >>> 0;\n b58[it1] = carry % BASE >>> 0;\n carry = carry / BASE >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n pbegin++;\n }\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) {\n str += ALPHABET.charAt(b58[it2]);\n }\n return str;\n }\n function decodeUnsafe(source) {\n if (typeof source !== 'string') {\n throw new TypeError('Expected String');\n }\n if (source.length === 0) {\n return new Uint8Array();\n }\n var psz = 0;\n if (source[psz] === ' ') {\n return;\n }\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n var size = (source.length - psz) * FACTOR + 1 >>> 0;\n var b256 = new Uint8Array(size);\n while (source[psz]) {\n var carry = BASE_MAP[source.charCodeAt(psz)];\n if (carry === 255) {\n return;\n }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n carry += BASE * b256[it3] >>> 0;\n b256[it3] = carry % 256 >>> 0;\n carry = carry / 256 >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n psz++;\n }\n if (source[psz] === ' ') {\n return;\n }\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch;\n }\n function decode(string) {\n var buffer = decodeUnsafe(string);\n if (buffer) {\n return buffer;\n }\n throw new Error(`Non-${ name } character`);\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n };\n}\nvar src = base;\nvar _brrp__multiformats_scope_baseX = src;\nexport default _brrp__multiformats_scope_baseX;","const empty = new Uint8Array(0);\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');\nconst fromHex = hex => {\n const hexes = hex.match(/../g);\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty;\n};\nconst equals = (aa, bb) => {\n if (aa === bb)\n return true;\n if (aa.byteLength !== bb.byteLength) {\n return false;\n }\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false;\n }\n }\n return true;\n};\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array')\n return o;\n if (o instanceof ArrayBuffer)\n return new Uint8Array(o);\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);\n }\n throw new Error('Unknown type, must be binary type');\n};\nconst isBinary = o => o instanceof ArrayBuffer || ArrayBuffer.isView(o);\nconst fromString = str => new TextEncoder().encode(str);\nconst toString = b => new TextDecoder().decode(b);\nexport {\n equals,\n coerce,\n isBinary,\n fromHex,\n toHex,\n fromString,\n toString,\n empty\n};","import basex from '../../vendor/base-x.js';\nimport { coerce } from '../bytes.js';\nclass Encoder {\n constructor(name, prefix, baseEncode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n }\n encode(bytes) {\n if (bytes instanceof Uint8Array) {\n return `${ this.prefix }${ this.baseEncode(bytes) }`;\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}\nclass Decoder {\n constructor(name, prefix, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character');\n }\n this.prefixCodePoint = prefix.codePointAt(0);\n this.baseDecode = baseDecode;\n }\n decode(text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${ JSON.stringify(text) }, ${ this.name } decoder only supports inputs prefixed with ${ this.prefix }`);\n }\n return this.baseDecode(text.slice(this.prefix.length));\n } else {\n throw Error('Can only multibase decode strings');\n }\n }\n or(decoder) {\n return or(this, decoder);\n }\n}\nclass ComposedDecoder {\n constructor(decoders) {\n this.decoders = decoders;\n }\n or(decoder) {\n return or(this, decoder);\n }\n decode(input) {\n const prefix = input[0];\n const decoder = this.decoders[prefix];\n if (decoder) {\n return decoder.decode(input);\n } else {\n throw RangeError(`Unable to decode multibase string ${ JSON.stringify(input) }, only inputs prefixed with ${ Object.keys(this.decoders) } are supported`);\n }\n }\n}\nexport const or = (left, right) => new ComposedDecoder({\n ...left.decoders || { [left.prefix]: left },\n ...right.decoders || { [right.prefix]: right }\n});\nexport class Codec {\n constructor(name, prefix, baseEncode, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n this.baseDecode = baseDecode;\n this.encoder = new Encoder(name, prefix, baseEncode);\n this.decoder = new Decoder(name, prefix, baseDecode);\n }\n encode(input) {\n return this.encoder.encode(input);\n }\n decode(input) {\n return this.decoder.decode(input);\n }\n}\nexport const from = ({name, prefix, encode, decode}) => new Codec(name, prefix, encode, decode);\nexport const baseX = ({prefix, name, alphabet}) => {\n const {encode, decode} = basex(alphabet, name);\n return from({\n prefix,\n name,\n encode,\n decode: text => coerce(decode(text))\n });\n};\nconst decode = (string, alphabet, bitsPerChar, name) => {\n const codes = {};\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i;\n }\n let end = string.length;\n while (string[end - 1] === '=') {\n --end;\n }\n const out = new Uint8Array(end * bitsPerChar / 8 | 0);\n let bits = 0;\n let buffer = 0;\n let written = 0;\n for (let i = 0; i < end; ++i) {\n const value = codes[string[i]];\n if (value === undefined) {\n throw new SyntaxError(`Non-${ name } character`);\n }\n buffer = buffer << bitsPerChar | value;\n bits += bitsPerChar;\n if (bits >= 8) {\n bits -= 8;\n out[written++] = 255 & buffer >> bits;\n }\n }\n if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {\n throw new SyntaxError('Unexpected end of data');\n }\n return out;\n};\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '=';\n const mask = (1 << bitsPerChar) - 1;\n let out = '';\n let bits = 0;\n let buffer = 0;\n for (let i = 0; i < data.length; ++i) {\n buffer = buffer << 8 | data[i];\n bits += 8;\n while (bits > bitsPerChar) {\n bits -= bitsPerChar;\n out += alphabet[mask & buffer >> bits];\n }\n }\n if (bits) {\n out += alphabet[mask & buffer << bitsPerChar - bits];\n }\n if (pad) {\n while (out.length * bitsPerChar & 7) {\n out += '=';\n }\n }\n return out;\n};\nexport const rfc4648 = ({name, prefix, bitsPerChar, alphabet}) => {\n return from({\n prefix,\n name,\n encode(input) {\n return encode(input, alphabet, bitsPerChar);\n },\n decode(input) {\n return decode(input, alphabet, bitsPerChar, name);\n }\n });\n};","import { rfc4648 } from './base.js';\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n});","import { rfc4648 } from './base.js';\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n});","import { baseX } from './base.js';\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n});","import { rfc4648 } from './base.js';\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n});\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n});","import { rfc4648 } from './base.js';\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n});\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n});\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n});\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n});\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n});\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n});\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n});\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n});\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n});","import { baseX } from './base.js';\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n});\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n});","import { baseX } from './base.js';\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n});\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n});","import { rfc4648 } from './base.js';\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n});\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n});\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n});\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n});","import { from } from './base.js';\nconst alphabet = Array.from('\\uD83D\\uDE80\\uD83E\\uDE90\\u2604\\uD83D\\uDEF0\\uD83C\\uDF0C\\uD83C\\uDF11\\uD83C\\uDF12\\uD83C\\uDF13\\uD83C\\uDF14\\uD83C\\uDF15\\uD83C\\uDF16\\uD83C\\uDF17\\uD83C\\uDF18\\uD83C\\uDF0D\\uD83C\\uDF0F\\uD83C\\uDF0E\\uD83D\\uDC09\\u2600\\uD83D\\uDCBB\\uD83D\\uDDA5\\uD83D\\uDCBE\\uD83D\\uDCBF\\uD83D\\uDE02\\u2764\\uD83D\\uDE0D\\uD83E\\uDD23\\uD83D\\uDE0A\\uD83D\\uDE4F\\uD83D\\uDC95\\uD83D\\uDE2D\\uD83D\\uDE18\\uD83D\\uDC4D\\uD83D\\uDE05\\uD83D\\uDC4F\\uD83D\\uDE01\\uD83D\\uDD25\\uD83E\\uDD70\\uD83D\\uDC94\\uD83D\\uDC96\\uD83D\\uDC99\\uD83D\\uDE22\\uD83E\\uDD14\\uD83D\\uDE06\\uD83D\\uDE44\\uD83D\\uDCAA\\uD83D\\uDE09\\u263A\\uD83D\\uDC4C\\uD83E\\uDD17\\uD83D\\uDC9C\\uD83D\\uDE14\\uD83D\\uDE0E\\uD83D\\uDE07\\uD83C\\uDF39\\uD83E\\uDD26\\uD83C\\uDF89\\uD83D\\uDC9E\\u270C\\u2728\\uD83E\\uDD37\\uD83D\\uDE31\\uD83D\\uDE0C\\uD83C\\uDF38\\uD83D\\uDE4C\\uD83D\\uDE0B\\uD83D\\uDC97\\uD83D\\uDC9A\\uD83D\\uDE0F\\uD83D\\uDC9B\\uD83D\\uDE42\\uD83D\\uDC93\\uD83E\\uDD29\\uD83D\\uDE04\\uD83D\\uDE00\\uD83D\\uDDA4\\uD83D\\uDE03\\uD83D\\uDCAF\\uD83D\\uDE48\\uD83D\\uDC47\\uD83C\\uDFB6\\uD83D\\uDE12\\uD83E\\uDD2D\\u2763\\uD83D\\uDE1C\\uD83D\\uDC8B\\uD83D\\uDC40\\uD83D\\uDE2A\\uD83D\\uDE11\\uD83D\\uDCA5\\uD83D\\uDE4B\\uD83D\\uDE1E\\uD83D\\uDE29\\uD83D\\uDE21\\uD83E\\uDD2A\\uD83D\\uDC4A\\uD83E\\uDD73\\uD83D\\uDE25\\uD83E\\uDD24\\uD83D\\uDC49\\uD83D\\uDC83\\uD83D\\uDE33\\u270B\\uD83D\\uDE1A\\uD83D\\uDE1D\\uD83D\\uDE34\\uD83C\\uDF1F\\uD83D\\uDE2C\\uD83D\\uDE43\\uD83C\\uDF40\\uD83C\\uDF37\\uD83D\\uDE3B\\uD83D\\uDE13\\u2B50\\u2705\\uD83E\\uDD7A\\uD83C\\uDF08\\uD83D\\uDE08\\uD83E\\uDD18\\uD83D\\uDCA6\\u2714\\uD83D\\uDE23\\uD83C\\uDFC3\\uD83D\\uDC90\\u2639\\uD83C\\uDF8A\\uD83D\\uDC98\\uD83D\\uDE20\\u261D\\uD83D\\uDE15\\uD83C\\uDF3A\\uD83C\\uDF82\\uD83C\\uDF3B\\uD83D\\uDE10\\uD83D\\uDD95\\uD83D\\uDC9D\\uD83D\\uDE4A\\uD83D\\uDE39\\uD83D\\uDDE3\\uD83D\\uDCAB\\uD83D\\uDC80\\uD83D\\uDC51\\uD83C\\uDFB5\\uD83E\\uDD1E\\uD83D\\uDE1B\\uD83D\\uDD34\\uD83D\\uDE24\\uD83C\\uDF3C\\uD83D\\uDE2B\\u26BD\\uD83E\\uDD19\\u2615\\uD83C\\uDFC6\\uD83E\\uDD2B\\uD83D\\uDC48\\uD83D\\uDE2E\\uD83D\\uDE46\\uD83C\\uDF7B\\uD83C\\uDF43\\uD83D\\uDC36\\uD83D\\uDC81\\uD83D\\uDE32\\uD83C\\uDF3F\\uD83E\\uDDE1\\uD83C\\uDF81\\u26A1\\uD83C\\uDF1E\\uD83C\\uDF88\\u274C\\u270A\\uD83D\\uDC4B\\uD83D\\uDE30\\uD83E\\uDD28\\uD83D\\uDE36\\uD83E\\uDD1D\\uD83D\\uDEB6\\uD83D\\uDCB0\\uD83C\\uDF53\\uD83D\\uDCA2\\uD83E\\uDD1F\\uD83D\\uDE41\\uD83D\\uDEA8\\uD83D\\uDCA8\\uD83E\\uDD2C\\u2708\\uD83C\\uDF80\\uD83C\\uDF7A\\uD83E\\uDD13\\uD83D\\uDE19\\uD83D\\uDC9F\\uD83C\\uDF31\\uD83D\\uDE16\\uD83D\\uDC76\\uD83E\\uDD74\\u25B6\\u27A1\\u2753\\uD83D\\uDC8E\\uD83D\\uDCB8\\u2B07\\uD83D\\uDE28\\uD83C\\uDF1A\\uD83E\\uDD8B\\uD83D\\uDE37\\uD83D\\uDD7A\\u26A0\\uD83D\\uDE45\\uD83D\\uDE1F\\uD83D\\uDE35\\uD83D\\uDC4E\\uD83E\\uDD32\\uD83E\\uDD20\\uD83E\\uDD27\\uD83D\\uDCCC\\uD83D\\uDD35\\uD83D\\uDC85\\uD83E\\uDDD0\\uD83D\\uDC3E\\uD83C\\uDF52\\uD83D\\uDE17\\uD83E\\uDD11\\uD83C\\uDF0A\\uD83E\\uDD2F\\uD83D\\uDC37\\u260E\\uD83D\\uDCA7\\uD83D\\uDE2F\\uD83D\\uDC86\\uD83D\\uDC46\\uD83C\\uDFA4\\uD83D\\uDE47\\uD83C\\uDF51\\u2744\\uD83C\\uDF34\\uD83D\\uDCA3\\uD83D\\uDC38\\uD83D\\uDC8C\\uD83D\\uDCCD\\uD83E\\uDD40\\uD83E\\uDD22\\uD83D\\uDC45\\uD83D\\uDCA1\\uD83D\\uDCA9\\uD83D\\uDC50\\uD83D\\uDCF8\\uD83D\\uDC7B\\uD83E\\uDD10\\uD83E\\uDD2E\\uD83C\\uDFBC\\uD83E\\uDD75\\uD83D\\uDEA9\\uD83C\\uDF4E\\uD83C\\uDF4A\\uD83D\\uDC7C\\uD83D\\uDC8D\\uD83D\\uDCE3\\uD83E\\uDD42');\nconst alphabetBytesToChars = alphabet.reduce((p, c, i) => {\n p[i] = c;\n return p;\n}, []);\nconst alphabetCharsToBytes = alphabet.reduce((p, c, i) => {\n p[c.codePointAt(0)] = i;\n return p;\n}, []);\nfunction encode(data) {\n return data.reduce((p, c) => {\n p += alphabetBytesToChars[c];\n return p;\n }, '');\n}\nfunction decode(str) {\n const byts = [];\n for (const char of str) {\n const byt = alphabetCharsToBytes[char.codePointAt(0)];\n if (byt === undefined) {\n throw new Error(`Non-base256emoji character: ${ char }`);\n }\n byts.push(byt);\n }\n return new Uint8Array(byts);\n}\nexport const base256emoji = from({\n prefix: '\\uD83D\\uDE80',\n name: 'base256emoji',\n encode,\n decode\n});","import { from } from './hasher.js';\nconst sha = name => async data => new Uint8Array(await crypto.subtle.digest(name, data));\nexport const sha256 = from({\n name: 'sha2-256',\n code: 18,\n encode: sha('SHA-256')\n});\nexport const sha512 = from({\n name: 'sha2-512',\n code: 19,\n encode: sha('SHA-512')\n});","var encode_1 = encode;\nvar MSB = 128, REST = 127, MSBALL = ~REST, INT = Math.pow(2, 31);\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n while (num >= INT) {\n out[offset++] = num & 255 | MSB;\n num /= 128;\n }\n while (num & MSBALL) {\n out[offset++] = num & 255 | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n encode.bytes = offset - oldOffset + 1;\n return out;\n}\nvar decode = read;\nvar MSB$1 = 128, REST$1 = 127;\nfunction read(buf, offset) {\n var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;\n do {\n if (counter >= l) {\n read.bytes = 0;\n throw new RangeError('Could not decode varint');\n }\n b = buf[counter++];\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1);\n read.bytes = counter - offset;\n return res;\n}\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\nvar length = function (value) {\n return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;\n};\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length\n};\nvar _brrp_varint = varint;\nexport default _brrp_varint;","import varint from '../vendor/varint.js';\nexport const decode = (data, offset = 0) => {\n const code = varint.decode(data, offset);\n return [\n code,\n varint.decode.bytes\n ];\n};\nexport const encodeTo = (int, target, offset = 0) => {\n varint.encode(int, target, offset);\n return target;\n};\nexport const encodingLength = int => {\n return varint.encodingLength(int);\n};","import {\n coerce,\n equals as equalBytes\n} from '../bytes.js';\nimport * as varint from '../varint.js';\nexport const create = (code, digest) => {\n const size = digest.byteLength;\n const sizeOffset = varint.encodingLength(code);\n const digestOffset = sizeOffset + varint.encodingLength(size);\n const bytes = new Uint8Array(digestOffset + size);\n varint.encodeTo(code, bytes, 0);\n varint.encodeTo(size, bytes, sizeOffset);\n bytes.set(digest, digestOffset);\n return new Digest(code, size, digest, bytes);\n};\nexport const decode = multihash => {\n const bytes = coerce(multihash);\n const [code, sizeOffset] = varint.decode(bytes);\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset));\n const digest = bytes.subarray(sizeOffset + digestOffset);\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length');\n }\n return new Digest(code, size, digest, bytes);\n};\nexport const equals = (a, b) => {\n if (a === b) {\n return true;\n } else {\n return a.code === b.code && a.size === b.size && equalBytes(a.bytes, b.bytes);\n }\n};\nexport class Digest {\n constructor(code, size, digest, bytes) {\n this.code = code;\n this.size = size;\n this.digest = digest;\n this.bytes = bytes;\n }\n}","import * as Digest from './digest.js';\nexport const from = ({name, code, encode}) => new Hasher(name, code, encode);\nexport class Hasher {\n constructor(name, code, encode) {\n this.name = name;\n this.code = code;\n this.encode = encode;\n }\n digest(input) {\n if (input instanceof Uint8Array) {\n const result = this.encode(input);\n return result instanceof Uint8Array ? Digest.create(this.code, result) : result.then(digest => Digest.create(this.code, digest));\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}","import { coerce } from '../bytes.js';\nimport * as Digest from './digest.js';\nconst code = 0;\nconst name = 'identity';\nconst encode = coerce;\nconst digest = input => Digest.create(code, encode(input));\nexport const identity = {\n code,\n name,\n encode,\n digest\n};","const textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\nexport const name = 'json';\nexport const code = 512;\nexport const encode = node => textEncoder.encode(JSON.stringify(node));\nexport const decode = data => JSON.parse(textDecoder.decode(data));","import * as varint from './varint.js';\nimport * as Digest from './hashes/digest.js';\nimport { base58btc } from './bases/base58.js';\nimport { base32 } from './bases/base32.js';\nimport { coerce } from './bytes.js';\nexport class CID {\n constructor(version, code, multihash, bytes) {\n this.code = code;\n this.version = version;\n this.multihash = multihash;\n this.bytes = bytes;\n this.byteOffset = bytes.byteOffset;\n this.byteLength = bytes.byteLength;\n this.asCID = this;\n this._baseCache = new Map();\n Object.defineProperties(this, {\n byteOffset: hidden,\n byteLength: hidden,\n code: readonly,\n version: readonly,\n multihash: readonly,\n bytes: readonly,\n _baseCache: hidden,\n asCID: hidden\n });\n }\n toV0() {\n switch (this.version) {\n case 0: {\n return this;\n }\n default: {\n const {code, multihash} = this;\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0');\n }\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0');\n }\n return CID.createV0(multihash);\n }\n }\n }\n toV1() {\n switch (this.version) {\n case 0: {\n const {code, digest} = this.multihash;\n const multihash = Digest.create(code, digest);\n return CID.createV1(this.code, multihash);\n }\n case 1: {\n return this;\n }\n default: {\n throw Error(`Can not convert CID version ${ this.version } to version 0. This is a bug please report`);\n }\n }\n }\n equals(other) {\n return other && this.code === other.code && this.version === other.version && Digest.equals(this.multihash, other.multihash);\n }\n toString(base) {\n const {bytes, version, _baseCache} = this;\n switch (version) {\n case 0:\n return toStringV0(bytes, _baseCache, base || base58btc.encoder);\n default:\n return toStringV1(bytes, _baseCache, base || base32.encoder);\n }\n }\n toJSON() {\n return {\n code: this.code,\n version: this.version,\n hash: this.multihash.bytes\n };\n }\n get [Symbol.toStringTag]() {\n return 'CID';\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return 'CID(' + this.toString() + ')';\n }\n static isCID(value) {\n deprecate(/^0\\.0/, IS_CID_DEPRECATION);\n return !!(value && (value[cidSymbol] || value.asCID === value));\n }\n get toBaseEncodedString() {\n throw new Error('Deprecated, use .toString()');\n }\n get codec() {\n throw new Error('\"codec\" property is deprecated, use integer \"code\" property instead');\n }\n get buffer() {\n throw new Error('Deprecated .buffer property, use .bytes to get Uint8Array instead');\n }\n get multibaseName() {\n throw new Error('\"multibaseName\" property is deprecated');\n }\n get prefix() {\n throw new Error('\"prefix\" property is deprecated');\n }\n static asCID(value) {\n if (value instanceof CID) {\n return value;\n } else if (value != null && value.asCID === value) {\n const {version, code, multihash, bytes} = value;\n return new CID(version, code, multihash, bytes || encodeCID(version, code, multihash.bytes));\n } else if (value != null && value[cidSymbol] === true) {\n const {version, multihash, code} = value;\n const digest = Digest.decode(multihash);\n return CID.create(version, code, digest);\n } else {\n return null;\n }\n }\n static create(version, code, digest) {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported');\n }\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(`Version 0 CID must use dag-pb (code: ${ DAG_PB_CODE }) block encoding`);\n } else {\n return new CID(version, code, digest, digest.bytes);\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes);\n return new CID(version, code, digest, bytes);\n }\n default: {\n throw new Error('Invalid version');\n }\n }\n }\n static createV0(digest) {\n return CID.create(0, DAG_PB_CODE, digest);\n }\n static createV1(code, digest) {\n return CID.create(1, code, digest);\n }\n static decode(bytes) {\n const [cid, remainder] = CID.decodeFirst(bytes);\n if (remainder.length) {\n throw new Error('Incorrect length');\n }\n return cid;\n }\n static decodeFirst(bytes) {\n const specs = CID.inspectBytes(bytes);\n const prefixSize = specs.size - specs.multihashSize;\n const multihashBytes = coerce(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length');\n }\n const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);\n const digest = new Digest.Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);\n const cid = specs.version === 0 ? CID.createV0(digest) : CID.createV1(specs.codec, digest);\n return [\n cid,\n bytes.subarray(specs.size)\n ];\n }\n static inspectBytes(initialBytes) {\n let offset = 0;\n const next = () => {\n const [i, length] = varint.decode(initialBytes.subarray(offset));\n offset += length;\n return i;\n };\n let version = next();\n let codec = DAG_PB_CODE;\n if (version === 18) {\n version = 0;\n offset = 0;\n } else if (version === 1) {\n codec = next();\n }\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${ version }`);\n }\n const prefixSize = offset;\n const multihashCode = next();\n const digestSize = next();\n const size = offset + digestSize;\n const multihashSize = size - prefixSize;\n return {\n version,\n codec,\n multihashCode,\n digestSize,\n multihashSize,\n size\n };\n }\n static parse(source, base) {\n const [prefix, bytes] = parseCIDtoBytes(source, base);\n const cid = CID.decode(bytes);\n cid._baseCache.set(prefix, source);\n return cid;\n }\n}\nconst parseCIDtoBytes = (source, base) => {\n switch (source[0]) {\n case 'Q': {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(`${ base58btc.prefix }${ source }`)\n ];\n }\n case base58btc.prefix: {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(source)\n ];\n }\n case base32.prefix: {\n const decoder = base || base32;\n return [\n base32.prefix,\n decoder.decode(source)\n ];\n }\n default: {\n if (base == null) {\n throw Error('To parse non base32 or base58btc encoded CID multibase decoder must be provided');\n }\n return [\n source[0],\n base.decode(source)\n ];\n }\n }\n};\nconst toStringV0 = (bytes, cache, base) => {\n const {prefix} = base;\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${ base.name } encoding`);\n }\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes).slice(1);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst toStringV1 = (bytes, cache, base) => {\n const {prefix} = base;\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst DAG_PB_CODE = 112;\nconst SHA_256_CODE = 18;\nconst encodeCID = (version, code, multihash) => {\n const codeOffset = varint.encodingLength(version);\n const hashOffset = codeOffset + varint.encodingLength(code);\n const bytes = new Uint8Array(hashOffset + multihash.byteLength);\n varint.encodeTo(version, bytes, 0);\n varint.encodeTo(code, bytes, codeOffset);\n bytes.set(multihash, hashOffset);\n return bytes;\n};\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID');\nconst readonly = {\n writable: false,\n configurable: false,\n enumerable: true\n};\nconst hidden = {\n writable: false,\n enumerable: false,\n configurable: false\n};\nconst version = '0.0.0-dev';\nconst deprecate = (range, message) => {\n if (range.test(version)) {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n};\nconst IS_CID_DEPRECATION = `CID.isCID(v) is deprecated and will be removed in the next major release.\nFollowing code pattern:\n\nif (CID.isCID(value)) {\n doSomethingWithCID(value)\n}\n\nIs replaced with:\n\nconst cid = CID.asCID(value)\nif (cid) {\n // Make sure to use cid instead of value\n doSomethingWithCID(cid)\n}\n`;","import * as identityBase from './bases/identity.js';\nimport * as base2 from './bases/base2.js';\nimport * as base8 from './bases/base8.js';\nimport * as base10 from './bases/base10.js';\nimport * as base16 from './bases/base16.js';\nimport * as base32 from './bases/base32.js';\nimport * as base36 from './bases/base36.js';\nimport * as base58 from './bases/base58.js';\nimport * as base64 from './bases/base64.js';\nimport * as base256emoji from './bases/base256emoji.js';\nimport * as sha2 from './hashes/sha2.js';\nimport * as identity from './hashes/identity.js';\nimport * as raw from './codecs/raw.js';\nimport * as json from './codecs/json.js';\nimport {\n CID,\n hasher,\n digest,\n varint,\n bytes\n} from './index.js';\nconst bases = {\n ...identityBase,\n ...base2,\n ...base8,\n ...base10,\n ...base16,\n ...base32,\n ...base36,\n ...base58,\n ...base64,\n ...base256emoji\n};\nconst hashes = {\n ...sha2,\n ...identity\n};\nconst codecs = {\n raw,\n json\n};\nexport {\n CID,\n hasher,\n digest,\n varint,\n bytes,\n hashes,\n bases,\n codecs\n};","import { bases } from 'multiformats/basics';\nfunction createCodec(name, prefix, encode, decode) {\n return {\n name,\n prefix,\n encoder: {\n name,\n prefix,\n encode\n },\n decoder: { decode }\n };\n}\nconst string = createCodec('utf8', 'u', buf => {\n const decoder = new TextDecoder('utf8');\n return 'u' + decoder.decode(buf);\n}, str => {\n const encoder = new TextEncoder();\n return encoder.encode(str.substring(1));\n});\nconst ascii = createCodec('ascii', 'a', buf => {\n let string = 'a';\n for (let i = 0; i < buf.length; i++) {\n string += String.fromCharCode(buf[i]);\n }\n return string;\n}, str => {\n str = str.substring(1);\n const buf = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n});\nconst BASES = {\n utf8: string,\n 'utf-8': string,\n hex: bases.base16,\n latin1: ascii,\n ascii: ascii,\n binary: ascii,\n ...bases\n};\nexport default BASES;","import bases from './util/bases.js';\nexport function fromString(string, encoding = 'utf8') {\n const base = bases[encoding];\n if (!base) {\n throw new Error(`Unsupported encoding \"${ encoding }\"`);\n }\n return base.decoder.decode(`${ base.prefix }${ string }`);\n}","import bases from './util/bases.js';\nexport function toString(array, encoding = 'utf8') {\n const base = bases[encoding];\n if (!base) {\n throw new Error(`Unsupported encoding \"${ encoding }\"`);\n }\n return base.encoder.encode(array).substring(1);\n}","import * as uint8arrays from \"uint8arrays\"\nimport * as ed25519 from \"@stablelib/ed25519\"\nimport * as crypto from \"./crypto.js\"\n\nimport { DidableKey, Encodings, ExportableKey } from \"@ucans/core\"\n\n\nexport class EdKeypair implements DidableKey, ExportableKey {\n\n public jwtAlg = \"EdDSA\"\n\n private secretKey: Uint8Array\n private publicKey: Uint8Array\n private exportable: boolean\n\n constructor(secretKey: Uint8Array, publicKey: Uint8Array, exportable: boolean) {\n this.secretKey = secretKey\n this.publicKey = publicKey\n this.exportable = exportable\n }\n\n static async create(params?: {\n exportable: boolean\n }): Promise<EdKeypair> {\n const { exportable } = params || {}\n const keypair = ed25519.generateKeyPair()\n return new EdKeypair(keypair.secretKey, keypair.publicKey, exportable ?? false)\n }\n\n static fromSecretKey(key: string, params?: {\n format?: Encodings\n exportable?: boolean\n }): EdKeypair {\n const { format = \"base64pad\", exportable = false } = params || {}\n const secretKey = uint8arrays.fromString(key, format)\n const publicKey = ed25519.extractPublicKeyFromSecretKey(secretKey)\n return new EdKeypair(secretKey, publicKey, exportable)\n }\n\n did(): string {\n return crypto.publicKeyToDid(this.publicKey)\n }\n\n async sign(msg: Uint8Array): Promise<Uint8Array> {\n return ed25519.sign(this.secretKey, msg)\n }\n\n async export(format: Encodings = \"base64pad\"): Promise<string> {\n if (!this.exportable) {\n throw new Error(\"Key is not exportable\")\n }\n return uint8arrays.toString(this.secretKey, format)\n }\n\n}\n\n\nexport default EdKeypair\n","// Each prefix is varint-encoded. So e.g. 0x1205 gets varint-encoded to 0x8524\n// The varint encoding is described here: https://github.com/multiformats/unsigned-varint\n// These varints are encoded big-endian in 7-bit pieces.\n// So 0x1205 is split up into 0x12 and 0x05\n// Because there's another byte to be read, the MSB of 0x05 is set: 0x85\n// The next 7 bits encode as 0x24 (instead of 0x12) => 0x8524\n\n/** https://github.com/multiformats/multicodec/blob/e9ecf587558964715054a0afcc01f7ace220952c/table.csv#L94 */\nexport const EDWARDS_DID_PREFIX = new Uint8Array([ 0xed, 0x01 ])\n/** https://github.com/multiformats/multicodec/blob/e9ecf587558964715054a0afcc01f7ace220952c/table.csv#L91 */\nexport const BLS_DID_PREFIX = new Uint8Array([ 0xea, 0x01 ])\n/** https://github.com/multiformats/multicodec/blob/e9ecf587558964715054a0afcc01f7ace220952c/table.csv#L141 */\nexport const P256_DID_PREFIX = new Uint8Array([ 0x80, 0x24 ])\n/** https://github.com/multiformats/multicodec/blob/e9ecf587558964715054a0afcc01f7ace220952c/table.csv#L142 */\nexport const P384_DID_PREFIX = new Uint8Array([ 0x81, 0x24 ])\n/** https://github.com/multiformats/multicodec/blob/e9ecf587558964715054a0afcc01f7ace220952c/table.csv#L143 */\nexport const P521_DID_PREFIX = new Uint8Array([ 0x82, 0x24 ])\n/** https://github.com/multiformats/multicodec/blob/e9ecf587558964715054a0afcc01f7ace220952c/table.csv#L146 */\nexport const RSA_DID_PREFIX = new Uint8Array([ 0x85, 0x24 ])\n/** Old RSA DID prefix, used pre-standardisation */\nexport const RSA_DID_PREFIX_OLD = new Uint8Array([ 0x00, 0xf5, 0x02 ])\n\nexport const BASE58_DID_PREFIX = \"did:key:z\" // z is the multibase prefix for base58btc byte encoding\n\n","import * as uint8arrays from \"uint8arrays\"\nimport { BASE58_DID_PREFIX } from \"./prefixes.js\"\n\nexport function keyBytesFromDid(did: string, expectedPrefix: Uint8Array): Uint8Array {\n if (!did.startsWith(BASE58_DID_PREFIX)) {\n throw new Error(\"Please use a base58-encoded DID formatted `did:key:z...`\")\n }\n const didWithoutPrefix = did.slice(BASE58_DID_PREFIX.length)\n const bytes = uint8arrays.fromString(didWithoutPrefix, \"base58btc\")\n if(!hasPrefix(bytes, expectedPrefix)) {\n throw new Error(`Expected prefix: ${expectedPrefix}`)\n }\n return bytes.slice(expectedPrefix.length)\n}\n\nexport function didFromKeyBytes(publicKeyBytes: Uint8Array, prefix: Uint8Array): string {\n const bytes = uint8arrays.concat([prefix, publicKeyBytes])\n const base58Key = uint8arrays.toString(bytes, \"base58btc\")\n return BASE58_DID_PREFIX + base58Key\n}\n\n\n\n/**\n * Determines if a Uint8Array has a given indeterminate length-prefix.\n */\nexport const hasPrefix = (\n prefixedKey: Uint8Array,\n prefix: Uint8Array\n): boolean => {\n return uint8arrays.equals(prefix, prefixedKey.subarray(0, prefix.byteLength))\n}","import { EDWARDS_DID_PREFIX } from \"../prefixes.js\"\nimport { didFromKeyBytes, keyBytesFromDid } from \"../util.js\"\n\nexport const didToPublicKey = (did: string): Uint8Array => {\n return keyBytesFromDid(did, EDWARDS_DID_PREFIX)\n}\n\nexport const publicKeyToDid = (pubkey: Uint8Array): string => {\n return didFromKeyBytes(pubkey, EDWARDS_DID_PREFIX)\n}\n","const _globalReference = globalThis || window || self\n\nexport const webcrypto = _globalReference.crypto\n","import { webcrypto } from \"one-webcrypto\"\nimport * as uint8arrays from \"uint8arrays\"\nimport { RSA_DID_PREFIX, RSA_DID_PREFIX_OLD } from \"../prefixes.js\"\nimport { didFromKeyBytes, keyBytesFromDid } from \"../util.js\"\n\nexport const RSA_ALG = \"RSASSA-PKCS1-v1_5\"\nexport const DEFAULT_KEY_SIZE = 2048\nexport const DEFAULT_HASH_ALG = \"SHA-256\"\nexport const SALT_LEGNTH = 128\n\n\nexport const generateKeypair = async (size: number = DEFAULT_KEY_SIZE): Promise<CryptoKeyPair> => {\n return await webcrypto.subtle.generateKey(\n {\n name: RSA_ALG,\n modulusLength: size,\n publicExponent: new Uint8Array([ 0x01, 0x00, 0x01 ]),\n hash: { name: DEFAULT_HASH_ALG }\n },\n false,\n [ \"sign\", \"verify\" ]\n )\n}\n\nexport const exportKey = async (key: CryptoKey): Promise<Uint8Array> => {\n const buf = await webcrypto.subtle.exportKey(\"spki\", key)\n return new Uint8Array(buf)\n}\n\nexport const importKey = async (key: Uint8Array): Promise<CryptoKey> => {\n return await webcrypto.subtle.importKey(\n \"spki\",\n key,\n { name: RSA_ALG, hash: { name: DEFAULT_HASH_ALG } },\n true,\n [ \"verify\" ]\n )\n}\n\nexport const sign = async (msg: Uint8Array, privateKey: CryptoKey): Promise<Uint8Array> => {\n const buf = await webcrypto.subtle.sign(\n { name: RSA_ALG, saltLength: SALT_LEGNTH },\n privateKey,\n msg\n )\n return new Uint8Array(buf)\n}\n\nexport const verify = async (pubKey: Uint8Array, msg: Uint8Array, sig: Uint8Array): Promise<boolean> => {\n return await webcrypto.subtle.verify(\n { name: RSA_ALG, saltLength: SALT_LEGNTH },\n await importKey(pubKey),\n sig,\n msg\n )\n}\n\nexport const didToPublicKey = (did: string): Uint8Array => {\n // DID RSA keys are ASN.1 DER encoded \"RSAPublicKeys\" (PKCS #1).\n // But the WebCrypto API mostly works with \"SubjectPublicKeyInfo\" (SPKI),\n // which wraps RSAPublicKey with some metadata.\n // In an unofficial RSA multiformat we were using, we used SPKI,\n // so we have to be careful not to transform *every* RSA DID to SPKI, but\n // only newer DIDs.\n const keyBytes = keyBytesFromDid(did, RSA_DID_PREFIX)\n return convertRSAPublicKeyToSubjectPublicKeyInfo(keyBytes)\n}\n\nexport const oldDidToPublicKey = (did: string): Uint8Array => {\n return keyBytesFromDid(did, RSA_DID_PREFIX_OLD)\n}\n\nexport const publicKeyToDid = (pubkey: Uint8Array): string => {\n // See also the comment in rsaDidToPublicKeyBytes\n // In this library, we're assuming a single byte encoding for all types of keys.\n // For RSA that is \"SubjectPublicKeyInfo\", because that's what the WebCrypto API understands.\n // But DIDs assume that all public keys are encoded as \"RSAPublicKey\".\n const convertedBytes = convertSubjectPublicKeyInfoToRSAPublicKey(pubkey)\n return didFromKeyBytes(convertedBytes, RSA_DID_PREFIX)\n}\n\nexport const publicKeyToOldDid = (pubkey: Uint8Array): string => {\n return didFromKeyBytes(pubkey, RSA_DID_PREFIX_OLD)\n}\n\n\n\n/**\n * The ASN.1 DER encoded header that needs to be added to an\n * ASN.1 DER encoded RSAPublicKey to make it a SubjectPublicKeyInfo.\n *\n * This byte sequence is always the same.\n *\n * A human-readable version of this as part of a dumpasn1 dump:\n *\n * SEQUENCE {\n * OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)\n * NULL\n * }\n *\n * See https://github.com/ucan-wg/ts-ucan/issues/30\n */\nconst SPKI_PARAMS_ENCODED = new Uint8Array([ 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0 ])\nconst ASN_SEQUENCE_TAG = new Uint8Array([ 0x30 ])\nconst ASN_BITSTRING_TAG = new Uint8Array([ 0x03 ])\n\nexport const convertRSAPublicKeyToSubjectPublicKeyInfo = (rsaPublicKey: Uint8Array): Uint8Array => {\n // More info on bitstring encoding: https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-bit-string\n const bitStringEncoded = uint8arrays.concat([\n ASN_BITSTRING_TAG,\n asn1DERLengthEncode(rsaPublicKey.length + 1),\n new Uint8Array([ 0x00 ]), // amount of unused bits at the end of our bitstring (counts into length?!)\n rsaPublicKey\n ])\n return uint8arrays.concat([\n ASN_SEQUENCE_TAG,\n asn1DERLengthEncode(SPKI_PARAMS_ENCODED.length + bitStringEncoded.length),\n SPKI_PARAMS_ENCODED,\n bitStringEncoded,\n ])\n}\n\nexport const convertSubjectPublicKeyInfoToRSAPublicKey = (subjectPublicKeyInfo: Uint8Array): Uint8Array => {\n let position = 0\n // go into the top-level SEQUENCE\n position = asn1Into(subjectPublicKeyInfo, ASN_SEQUENCE_TAG, position).position\n // skip the header we expect (SKPI_PARAMS_ENCODED)\n position = asn1Skip(subjectPublicKeyInfo, ASN_SEQUENCE_TAG, position)\n // we expect the bitstring next\n const bitstringParams = asn1Into(subjectPublicKeyInfo, ASN_BITSTRING_TAG, position)\n const bitstring = subjectPublicKeyInfo.subarray(bitstringParams.position, bitstringParams.position + bitstringParams.length)\n const unusedBitPadding = bitstring[ 0 ]\n if (unusedBitPadding !== 0) {\n throw new Error(`Can't convert SPKI to PKCS: Expected bitstring length to be multiple of 8, but got ${unusedBitPadding} unused bits in last byte.`)\n }\n return bitstring.slice(1)\n}\n\n// ㊙️\n// but some exposed for testing :/\n\nexport function asn1DERLengthEncode(length: number): Uint8Array {\n if (length < 0 || !isFinite(length)) {\n throw new TypeError(`Expected non-negative number. Got ${length}`)\n }\n\n if (length <= 127) {\n return new Uint8Array([ length ])\n }\n\n const octets: number[] = []\n while (length !== 0) {\n octets.push(length & 0xFF)\n length = length >>> 8\n }\n octets.reverse()\n return new Uint8Array([ 0x80 | (octets.length & 0xFF), ...octets ])\n}\n\nfunction asn1DERLengthDecodeWithConsumed(bytes: Uint8Array): { number: number; consumed: number } {\n if ((bytes[ 0 ] & 0x80) === 0) {\n return { number: bytes[ 0 ], consumed: 1 }\n }\n\n const numberBytes = bytes[ 0 ] & 0x7F\n if (bytes.length < numberBytes + 1) {\n throw new Error(`ASN parsing error: Too few bytes. Expected encoded length's length to be at least ${numberBytes}`)\n }\n\n let length = 0\n for (let i = 0; i < numberBytes; i++) {\n length = length << 8\n length = length | bytes[ i + 1 ]\n }\n return { number: length, consumed: numberBytes + 1 }\n}\n\nexport function asn1DERLengthDecode(bytes: Uint8Array): number {\n return asn1DERLengthDecodeWithConsumed(bytes).number\n}\n\nfunction asn1Skip(input: Uint8Array, expectedTag: Uint8Array, position: number): number {\n const parsed = asn1Into(input, expectedTag, position)\n return parsed.position + parsed.length\n}\n\nfunction asn1Into(input: Uint8Array, expectedTag: Uint8Array, position: number): { position: number; length: number } {\n // tag\n const lengthPos = position + expectedTag.length\n const actualTag = input.subarray(position, lengthPos)\n if (!uint8arrays.equals(actualTag, expectedTag)) {\n throw new Error(`ASN parsing error: Expected tag 0x${uint8arrays.toString(expectedTag, \"hex\")} at position ${position}, but got ${uint8arrays.toString(actualTag, \"hex\")}.`)\n }\n\n // length\n const length = asn1DERLengthDecodeWithConsumed(input.subarray(lengthPos/*, we don't know the end */))\n const contentPos = position + 1 + length.consumed\n\n // content\n return { position: contentPos, length: length.number }\n}\n","import bigInt from \"big-integer\"\nimport * as uint8arrays from \"uint8arrays\"\nimport { webcrypto } from \"one-webcrypto\"\nimport { AvailableCryptoKeyPair, PrivateKeyJwk } from \"../types.js\"\nimport { didFromKeyBytes, keyBytesFromDid } from \"../util.js\"\nimport { P256_DID_PREFIX } from \"../prefixes.js\"\n\nexport const ALG = \"ECDSA\"\nexport const DEFAULT_CURVE = \"P-256\"\nexport const DEFAULT_HASH_ALG = \"SHA-256\"\n\nexport const generateKeypair = async (): Promise<AvailableCryptoKeyPair> => {\n return await webcrypto.subtle.generateKey(\n {\n name: ALG,\n namedCurve: DEFAULT_CURVE,\n },\n false,\n [ \"sign\", \"verify\" ]\n )\n}\n\nexport const importKeypairJwk = async (\n privKeyJwk: PrivateKeyJwk,\n exportable = false\n): Promise<AvailableCryptoKeyPair> => {\n const privateKey = await webcrypto.subtle.importKey(\n \"jwk\",\n privKeyJwk,\n {\n name: ALG,\n namedCurve: DEFAULT_CURVE,\n },\n exportable,\n [\"sign\" ]\n )\n const { kty, crv, x, y} = privKeyJwk\n const pubKeyJwk = { kty, crv, x, y}\n const publicKey = await webcrypto.subtle.importKey(\n \"jwk\",\n pubKeyJwk,\n {\n name: ALG,\n namedCurve: DEFAULT_CURVE,\n },\n true,\n [ \"verify\" ]\n )\n return { privateKey, publicKey }\n}\n\nexport const exportKey = async (key: CryptoKey): Promise<Uint8Array> => {\n const buf = await webcrypto.subtle.exportKey(\"raw\", key)\n return new Uint8Array(buf)\n}\n\nexport const importKey = async (\n key: Uint8Array\n): Promise<CryptoKey> => {\n return await webcrypto.subtle.importKey(\n \"raw\",\n key,\n { name: ALG, namedCurve: DEFAULT_CURVE },\n true,\n [ \"verify\" ]\n )\n}\n\nexport const sign = async (\n msg: Uint8Array,\n privateKey: CryptoKey\n): Promise<Uint8Array> => {\n const buf = await webcrypto.subtle.sign(\n { name: ALG, hash: { name: DEFAULT_HASH_ALG } },\n privateKey,\n msg\n )\n return new Uint8Array(buf)\n}\n\nexport const verify = async (\n pubKey: Uint8Array,\n msg: Uint8Array,\n sig: Uint8Array\n): Promise<boolean> => {\n return await webcrypto.subtle.verify(\n { name: ALG, hash: { name: DEFAULT_HASH_ALG } },\n await importKey(pubKey),\n sig,\n msg\n )\n}\n\n\nexport const didToPublicKey = (did: string): Uint8Array => {\n // The multiformats space (used by did:key) specifies that NIST P-256\n // keys should be encoded as the 33-byte compressed public key,\n // instead of the 65-byte raw public key\n const keyBytes = keyBytesFromDid(did, P256_DID_PREFIX)\n return decompressP256Pubkey(keyBytes)\n}\n\nexport const publicKeyToDid = (publicKey: Uint8Array): string => {\n const compressed = compressP256Pubkey(publicKey)\n return didFromKeyBytes(compressed, P256_DID_PREFIX)\n}\n\n\n\n// PUBLIC KEY COMPRESSION\n// -------------------------\n\n// Compression & Decompression algos from:\n// https://stackoverflow.com/questions/48521840/biginteger-to-a-uint8array-of-bytes\n\n// Public key compression for NIST P-256\nexport const compressP256Pubkey = (pubkeyBytes: Uint8Array): Uint8Array => {\n if (pubkeyBytes.length !== 65) {\n throw new Error(\"Expected 65 byte pubkey\")\n } else if (pubkeyBytes[0] !== 0x04) {\n throw new Error(\"Expected first byte to be 0x04\")\n }\n // first byte is a prefix\n const x = pubkeyBytes.slice(1, 33)\n const y = pubkeyBytes.slice(33, 65)\n const out = new Uint8Array(x.length + 1)\n\n out[0] = 2 + (y[y.length - 1] & 1)\n out.set(x, 1)\n\n return out\n}\n\n// Public key decompression for NIST P-256\nexport const decompressP256Pubkey = (compressed: Uint8Array): Uint8Array => {\n if (compressed.length !== 33) {\n throw new Error(\"Expected 33 byte compress pubkey\")\n } else if (compressed[0] !== 0x02 && compressed[0] !== 0x03) {\n throw new Error(\"Expected first byte to be 0x02 or 0x03\")\n }\n // Consts for P256 curve\n const two = bigInt(2)\n // 115792089210356248762697446949407573530086143415290314195533631308867097853951\n const prime = two\n .pow(256)\n .subtract(two.pow(224))\n .add(two.pow(192))\n .add(two.pow(96))\n .subtract(1)\n const b = bigInt(\n \"41058363725152142129326129780047268409114441015993725554835256314039467401291\",\n )\n\n // Pre-computed value, or literal\n const pIdent = prime.add(1).divide(4) // 28948022302589062190674361737351893382521535853822578548883407827216774463488\n\n // This value must be 2 or 3. 4 indicates an uncompressed key, and anything else is invalid.\n const signY = bigInt(compressed[0] - 2)\n const x = compressed.slice(1)\n const xBig = bigInt(uint8arrays.toString(x, \"base10\"))\n\n // y^2 = x^3 - 3x + b\n const maybeY = xBig\n .pow(3)\n .subtract(xBig.multiply(3))\n .add(b)\n .modPow(pIdent, prime)\n\n let yBig\n // If the parity matches, we found our root, otherwise it's the other root\n if (maybeY.mod(2).equals(signY)) {\n yBig = maybeY\n } else {\n // y = prime - y\n yBig = prime.subtract(maybeY)\n }\n const y = uint8arrays.fromString(yBig.toString(10), \"base10\")\n\n // left-pad for smaller than 32 byte y\n const offset = 32 - y.length\n const yPadded = new Uint8Array(32)\n yPadded.set(y, offset)\n\n // concat coords & prepend P-256 prefix\n const publicKey = uint8arrays.concat([[0x04], x, yPadded])\n return publicKey\n}\n","import { DidKeyPlugin } from \"@ucans/core\"\nimport * as ed25519 from \"@stablelib/ed25519\"\nimport * as crypto from \"./crypto.js\"\n\nimport { EDWARDS_DID_PREFIX } from \"../prefixes.js\"\n\nexport const ed25519Plugin: DidKeyPlugin = {\n prefix: EDWARDS_DID_PREFIX,\n jwtAlg: \"EdDSA\",\n verifySignature: async (did: string, data: Uint8Array, sig: Uint8Array) => {\n const publicKey = crypto.didToPublicKey(did)\n return ed25519.verify(publicKey, data, sig)\n }\n}","import { DidKeyPlugin } from \"@ucans/core\"\nimport * as crypto from \"./crypto.js\"\nimport { RSA_DID_PREFIX, RSA_DID_PREFIX_OLD } from \"../prefixes.js\"\n\nexport const rsaPlugin: DidKeyPlugin = {\n prefix: RSA_DID_PREFIX,\n jwtAlg: \"RS256\",\n verifySignature: async (did: string, data: Uint8Array, sig: Uint8Array) => {\n const publicKey = crypto.didToPublicKey(did)\n return crypto.verify(publicKey, data, sig)\n }\n}\n\nexport const rsaOldPlugin: DidKeyPlugin = {\n prefix: RSA_DID_PREFIX_OLD,\n jwtAlg: \"RS256\",\n verifySignature: async (did: string, data: Uint8Array, sig: Uint8Array) => {\n const publicKey = crypto.oldDidToPublicKey(did)\n return crypto.verify(publicKey, data, sig)\n }\n}\n\n","import { DidKeyPlugin } from \"@ucans/core\"\nimport * as crypto from \"./crypto.js\"\nimport { P256_DID_PREFIX } from \"../prefixes.js\"\n\nexport const p256Plugin: DidKeyPlugin = {\n prefix: P256_DID_PREFIX,\n jwtAlg: \"ES256\",\n verifySignature: async (did: string, data: Uint8Array, sig: Uint8Array) => {\n const publicKey = crypto.didToPublicKey(did)\n return crypto.verify(publicKey, data, sig)\n }\n}","const CHARS = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n\nexport const generateNonce = (len = 6): string => {\n let nonce = \"\"\n for (let i = 0; i < len; i++) {\n nonce += CHARS[ Math.floor(Math.random() * CHARS.length) ]\n }\n return nonce\n}\n\nexport function hasProp<K extends PropertyKey>(data: unknown, prop: K): data is Record<K, unknown> {\n return typeof data === \"object\" && data != null && prop in data\n}\n\nexport function isRecord(data: unknown): data is Record<PropertyKey, unknown> {\n return typeof data === \"object\" && data != null\n}\n\nexport function isIterable<T>(obj: unknown): obj is Iterable<T> {\n return typeof obj === \"object\" && obj != null && Symbol.iterator in obj\n}\n\nexport function isAsyncIterable<T>(obj: unknown): obj is AsyncIterable<T> {\n return typeof obj === \"object\" && obj != null && Symbol.asyncIterator in obj\n}\n\n\nexport function all<T>(it: Iterable<T>): T[]\nexport function all<T>(it: AsyncIterable<T>): Promise<T[]>\nexport function all<T>(it: Iterable<T> | AsyncIterable<T>): T[] | Promise<T[]> {\n if (isIterable(it)) {\n const arr = []\n for (const elem of it) {\n arr.push(elem)\n }\n return arr\n } else if (isAsyncIterable(it)) {\n return (async () => {\n const arr = []\n for await (const elem of it) {\n arr.push(elem)\n }\n return arr\n })()\n } else {\n throw new TypeError(`Expected either Iterable or AsyncIterable, but got ${it}`)\n }\n}\n\nexport function first<T>(it: Iterable<T>): T | undefined\nexport function first<T>(it: AsyncIterable<T>): Promise<T | undefined>\nexport function first<T>(it: Iterable<T> | AsyncIterable<T>): T | undefined | Promise<T | undefined> {\n if (isIterable(it)) {\n for (const elem of it) {\n return elem\n }\n return undefined\n } else if (isAsyncIterable(it)) {\n return (async () => {\n for await (const elem of it) {\n return elem\n }\n return undefined\n })()\n } else {\n throw new TypeError(`Expected either Iterable or AsyncIterable, but got ${it}`)\n }\n}\n\n","import { hasProp, isRecord } from \"./util.js\"\n\n\n// Types\n\nexport interface SemVer {\n major: number\n minor: number\n patch: number\n}\n\nexport function isSemVer(obj: unknown): obj is SemVer {\n return isRecord(obj)\n && hasProp(obj, \"major\") && typeof obj.major === \"number\"\n && hasProp(obj, \"minor\") && typeof obj.minor === \"number\"\n && hasProp(obj, \"patch\") && typeof obj.patch === \"number\"\n}\n\n\n// Parsing\n\nconst NUM_REGEX = /^0|[1-9]\\d*/\n\nconst matchesRegex = (regex: RegExp) => (str: string) => {\n const m = str.match(regex)\n if (!m) return false\n return m[0].length === str.length\n}\n\nexport function parse(version: string): SemVer | null {\n const sv = version.match(\n /^(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/\n )\n\n if (sv === null) {\n return null\n }\n\n const parts =\n `${sv.groups?.major}.${sv.groups?.minor}.${sv.groups?.patch}`.split(\".\")\n\n if (parts.length !== 3) {\n return null\n }\n\n if (!parts.every(matchesRegex(NUM_REGEX))) {\n return null\n }\n\n const [major, minor, patch] = parts.map(part => parseInt(part, 10))\n\n if (!Number.isSafeInteger(major) || !Number.isSafeInteger(minor) || !Number.isSafeInteger(patch)) {\n return null\n }\n if (major < 0 || minor < 0 || patch < 0) {\n return null\n }\n\n return { major, minor, patch }\n}\n\n\n// Formatting/Prettyprinting\n\nexport function format(semver: SemVer): string {\n return `${semver.major}.${semver.minor}.${semver.patch}`\n}\n\n\n// Comparison\n\nexport const GT = 1\nexport const EQ = 0\nexport const LT = -1\nexport type GT = typeof GT\nexport type EQ = typeof EQ\nexport type LT = typeof LT\n\nfunction comparePart(left?: number, right?: number): GT | EQ | LT {\n // when at least one of them is null\n if (left == null) {\n if (right == null) return EQ\n return LT\n } else if (right == null) {\n return GT\n }\n\n // when none of them are null\n if (left > right) return GT\n if (left < right) return LT\n return EQ\n}\n\nexport function compare(left: SemVer | string, right: SemVer | string): GT | EQ | LT {\n const l = typeof left === \"string\" ? parse(left) : left\n const r = typeof right === \"string\" ? parse(right) : right\n return (\n comparePart(l?.major, r?.major) ||\n comparePart(l?.minor, r?.minor) ||\n comparePart(l?.patch, r?.patch)\n )\n}\n\nexport function lt(left: SemVer | string, right: SemVer | string): boolean {\n return compare(left, right) === LT\n}\n\nexport function gte(left: SemVer | string, right: SemVer | string): boolean {\n return !lt(left, right)\n}\n\nexport function gt(left: SemVer | string, right: SemVer | string): boolean {\n return compare(left, right) === GT\n}\n\nexport function lte(left: SemVer | string, right: SemVer | string): boolean {\n return !gt(left, right)\n}\n\nexport function eq(left: SemVer | string, right: SemVer | string): boolean {\n return compare(left, right) === EQ\n}\n\nexport function neq(left: SemVer | string, right: SemVer | string): boolean {\n return !eq(left, right)\n}\n","export const SUPERUSER: Superuser = \"*\"\nexport type Superuser = \"*\" // maximum ability\n\n\n// TYPE CHECKS\n\n\nexport function isSuperuser(obj: unknown): obj is Superuser {\n return obj === SUPERUSER\n}","import { Superuser, SUPERUSER } from \"./super-user.js\"\nimport * as util from \"../util.js\"\n\n// RE-EXPORTS\n\n\nexport { Superuser, SUPERUSER }\n\n\n// 💎\n\n\nexport type Ability\n = Superuser\n | { namespace: string; segments: string[] }\n\n\n/**\n * Separator for an ability's segments.\n */\nexport const SEPARATOR: string = \"/\"\n\n\n/**\n * Ability that can be used with a `prf` resource-pointer.\n * This redelegates all capabilities of the proof(s).\n */\nexport const REDELEGATE: Ability = { namespace: \"ucan\", segments: [ \"DELEGATE\" ] }\n\n\n\n// TYPE CHECKS\n\n\nexport function isAbility(obj: unknown): obj is Ability {\n return obj === SUPERUSER\n || (\n util.isRecord(obj)\n && util.hasProp(obj, \"namespace\") && typeof obj.namespace === \"string\"\n && util.hasProp(obj, \"segments\") && Array.isArray(obj.segments) && obj.segments.every(s => typeof s === \"string\")\n )\n}\n\n\n\n// 🛠\n\n\nexport function isEqual(a: Ability, b: Ability): boolean {\n if (a === SUPERUSER && b === SUPERUSER) return true\n if (a === SUPERUSER || b === SUPERUSER) return false\n\n return (\n a.namespace.toLowerCase() ===\n b.namespace.toLowerCase()\n ) &&\n (\n joinSegments(a.segments).toLowerCase() ===\n joinSegments(b.segments).toLowerCase()\n )\n}\n\n\nexport function joinSegments(segments: string[]): string {\n return segments.join(SEPARATOR)\n}\n\n\n\n// ENCODING\n\n\n/**\n * Encode an ability.\n *\n * @param ability The ability to encode\n */\nexport function encode(ability: Ability): string {\n switch (ability) {\n case SUPERUSER: return ability\n default: return joinSegments([ ability.namespace, ...ability.segments ])\n }\n}\n\n/**\n * Parse an encoded ability.\n *\n * @param ability The encoded ability\n */\nexport function parse(ability: string): Ability {\n switch (ability) {\n case SUPERUSER:\n return SUPERUSER\n default: {\n const [ namespace, ...segments ] = ability.split(SEPARATOR)\n return { namespace, segments }\n }\n }\n}","import { Superuser, SUPERUSER } from \"./super-user.js\"\nimport * as util from \"../util.js\"\n\n\n// 💎\n\n\nexport type ResourcePointer = {\n scheme: string\n hierPart: Superuser | string\n}\n\n\n/**\n * Separator for pieces of a URI.\n */\nexport const SEPARATOR: string = \":\"\n\n\n\n// TYPE CHECKS\n\n\nexport function isResourcePointer(obj: unknown): obj is ResourcePointer {\n return util.isRecord(obj)\n && util.hasProp(obj, \"scheme\") && typeof obj.scheme === \"string\"\n && util.hasProp(obj, \"hierPart\") && (obj.hierPart === SUPERUSER || typeof obj.hierPart === \"string\")\n}\n\n\n\n// 🌸\n\n\nexport function as(did: string, resource: Superuser | string): ResourcePointer {\n return {\n scheme: \"as\",\n hierPart: `${did}:${resource}`\n }\n}\n\n\nexport function my(resource: Superuser | string): ResourcePointer {\n return {\n scheme: \"my\",\n hierPart: resource\n }\n}\n\n\nexport function prf(selector: Superuser | number): ResourcePointer {\n return {\n scheme: \"prf\",\n hierPart: selector.toString()\n }\n}\n\n\n\n// 🛠\n\n\nexport function isEqual(a: ResourcePointer, b: ResourcePointer): boolean {\n return a.scheme.toLowerCase() === a.scheme.toLowerCase() && a.hierPart === b.hierPart\n}\n\n\n\n// ENCODING\n\n\n/**\n * Encode a resource pointer.\n *\n * @param pointer The resource pointer to encode\n */\nexport function encode(pointer: ResourcePointer): string {\n return `${pointer.scheme}${SEPARATOR}${pointer.hierPart}`\n}\n\n/**\n * Parse an encoded resource pointer.\n *\n * @param pointer The encoded resource pointer\n */\nexport function parse(pointer: string): ResourcePointer {\n const [ scheme, ...hierPart ] = pointer.split(SEPARATOR)\n return { scheme, hierPart: hierPart.join(SEPARATOR) }\n}","import * as ability from \"./ability.js\"\nimport * as resourcePointer from \"./resource-pointer.js\"\nimport * as util from \"../util.js\"\n\nimport { Ability, isAbility } from \"./ability.js\"\nimport { ResourcePointer, isResourcePointer } from \"./resource-pointer.js\"\nimport { Superuser } from \"./super-user.js\"\n\n\n// RE-EXPORTS\n\n\nexport { ability, resourcePointer, Ability, isAbility }\n\n\n\n// 💎\n\n\nexport type Capability = {\n with: ResourcePointer\n can: Ability\n}\n\nexport type EncodedCapability = {\n with: string\n can: string\n}\n\n\n\n// TYPE CHECKS\n\n\nexport function isCapability(obj: unknown): obj is Capability {\n return util.isRecord(obj)\n && util.hasProp(obj, \"with\") && isResourcePointer(obj.with)\n && util.hasProp(obj, \"can\") && isAbility(obj.can)\n}\n\nexport function isEncodedCapability(obj: unknown): obj is EncodedCapability {\n return util.isRecord(obj)\n && util.hasProp(obj, \"with\") && typeof obj.with === \"string\"\n && util.hasProp(obj, \"can\") && typeof obj.can === \"string\"\n}\n\n\n\n// 🌸\n\n\nexport function as(did: string, resource: Superuser | string): Capability {\n return {\n with: resourcePointer.as(did, resource),\n can: ability.SUPERUSER\n }\n}\n\n\nexport function my(resource: Superuser | string): Capability {\n return {\n with: resourcePointer.my(resource),\n can: ability.SUPERUSER\n }\n}\n\n\nexport function prf(selector: Superuser | number, ability: Ability): Capability {\n return {\n with: resourcePointer.prf(selector),\n can: ability\n }\n}\n\n\n\n// 🛠\n\n\n/**\n * Check if two capabilities are equal.\n *\n * This is not the same as `JSON.stringify(capA) === JSON.stringify(capB)`.\n * Specifically:\n * - For resource pointers, it does case-insensitive matching of the `scheme`.\n * - For abilities, it does case-insensitive matching of the namespace and segments.\n */\nexport function isEqual(a: Capability, b: Capability): boolean {\n return resourcePointer.isEqual(a.with, b.with) && ability.isEqual(a.can, b.can)\n}\n\n\n\n// ENCODING\n\n\n/**\n * Encode the individual parts of a capability.\n *\n * @param cap The capability to encode\n */\nexport function encode(cap: Capability): EncodedCapability {\n return {\n with: resourcePointer.encode(cap.with),\n can: ability.encode(cap.can)\n }\n}\n\n/**\n * Parse an encoded capability.\n *\n * @param cap The encoded capability\n */\nexport function parse(cap: EncodedCapability): Capability {\n return {\n with: resourcePointer.parse(cap.with),\n can: ability.parse(cap.can)\n }\n}","import * as semver from \"./semver.js\"\nimport { SemVer } from \"./semver.js\"\nimport { SupportedEncodings } from \"uint8arrays/util/bases.js\" // @IMPORT\nimport { Capability, isCapability, isEncodedCapability } from \"./capability/index.js\"\nimport * as util from \"./util.js\"\nimport { DelegationChain, DelegationSemantics } from \"./attenuation.js\"\n\n\n// 💎\n\n\nexport type Ucan<Prf = string> = {\n header: UcanHeader\n payload: UcanPayload<Prf>\n // We need to keep the encoded version around to preserve the signature\n signedData: string\n signature: string\n}\n\n\n\n// CHUNKS\n\n\nexport interface UcanParts<Prf = string> {\n header: UcanHeader\n payload: UcanPayload<Prf>\n}\n\nexport type UcanHeader = {\n alg: string\n typ: string\n ucv: SemVer\n}\n\nexport type UcanPayload<Prf = string> = {\n iss: string\n aud: string\n exp: number\n nbf?: number\n nnc?: string\n att: Array<Capability>\n fct?: Array<Fact>\n prf: Array<Prf>\n}\n\n\n\n// FRAGMENTS\n\n\nexport type Fact = Record<string, unknown>\n\n\n\n// CRYPTOGRAPHY\n\nexport interface Didable {\n did: () => string\n}\n\nexport interface ExportableKey {\n export: (format?: Encodings) => Promise<string>\n}\n\nexport interface Keypair {\n jwtAlg: string\n sign: (msg: Uint8Array) => Promise<Uint8Array>\n}\n\nexport interface DidableKey extends Didable, Keypair {}\n\n// MISC\n\n\nexport type Encodings = SupportedEncodings\n\n\n// STORE\n\n\nexport interface IndexByAudience {\n [ audienceDID: string ]: Array<{\n processedUcan: Ucan\n capabilities: DelegationChain[]\n }>\n}\n\nexport interface StoreI {\n add(ucan: Ucan): Promise<void> \n getByAudience(audience: string): Ucan[] \n findByAudience(audience: string, predicate: (ucan: Ucan) => boolean): Ucan | null \n findWithCapability(\n audience: string,\n requiredCapability: Capability,\n requiredIssuer: string,\n ): Iterable<DelegationChain> \n}\n\n// BUILDER\n\nexport interface BuildableState {\n issuer: DidableKey\n audience: string\n expiration: number\n}\n\n\nexport interface DefaultableState {\n capabilities: Capability[]\n facts: Fact[]\n proofs: Ucan[]\n addNonce: boolean\n notBefore?: number\n}\n\n// the state neccessary for being able to lookup fitting capabilities in the UCAN store\nexport interface CapabilityLookupCapableState {\n issuer: Keypair\n expiration: number\n}\n\nexport interface BuilderI<State extends Partial<BuildableState>> {\n issuedBy(issuer: DidableKey): BuilderI<State & { issuer: DidableKey }>\n toAudience(audience: string): BuilderI<State & { audience: string }>\n withLifetimeInSeconds(seconds: number): BuilderI<State & { expiration: number }>\n withExpiration(expiration: number): BuilderI<State & { expiration: number }>\n withNotBefore(notBeforeTimestamp: number): BuilderI<State>\n withFact(fact: Fact): BuilderI<State>\n withFact(fact: Fact, ...facts: Fact[]): BuilderI<State>\n withFact(fact: Fact, ...facts: Fact[]): BuilderI<State>\n withNonce(): BuilderI<State>\n claimCapability(capability: Capability): BuilderI<State>\n claimCapability(capability: Capability, ...capabilities: Capability[]): BuilderI<State>\n claimCapability(capability: Capability, ...capabilities: Capability[]): BuilderI<State>\n delegateCapability(requiredCapability: Capability, store: StoreI): State extends CapabilityLookupCapableState ? BuilderI<State> : never\n delegateCapability(requiredCapability: Capability, proof: DelegationChain, semantics: DelegationSemantics): State extends CapabilityLookupCapableState ? BuilderI<State> : never\n delegateCapability(requiredCapability: Capability, storeOrProof: StoreI | DelegationChain, semantics?: DelegationSemantics): BuilderI<State>\n buildPayload(): State extends BuildableState ? UcanPayload : never\n buildPayload(): UcanPayload\n build(): Promise<State extends BuildableState ? Ucan : never>\n build(): Promise<Ucan>\n}\n\n\n// TYPE CHECKS\n\n\nexport function isKeypair(obj: unknown): obj is Keypair {\n return util.isRecord(obj)\n && util.hasProp(obj, \"jwtAlg\") && typeof obj.jwtAlg === \"string\"\n && util.hasProp(obj, \"sign\") && typeof obj.sign === \"function\"\n}\n\nexport function isUcanHeader(obj: unknown): obj is UcanHeader {\n return util.isRecord(obj)\n && util.hasProp(obj, \"alg\") && typeof obj.alg === \"string\"\n && util.hasProp(obj, \"typ\") && typeof obj.typ === \"string\"\n && util.hasProp(obj, \"ucv\") && semver.isSemVer(obj.ucv)\n}\n\nexport function isUcanPayload(obj: unknown): obj is UcanPayload {\n return util.isRecord(obj)\n && util.hasProp(obj, \"iss\") && typeof obj.iss === \"string\"\n && util.hasProp(obj, \"aud\") && typeof obj.aud === \"string\"\n && util.hasProp(obj, \"exp\") && typeof obj.exp === \"number\"\n && (!util.hasProp(obj, \"nbf\") || typeof obj.nbf === \"number\")\n && (!util.hasProp(obj, \"nnc\") || typeof obj.nnc === \"string\")\n && util.hasProp(obj, \"att\") && Array.isArray(obj.att) && obj.att.every(a => isCapability(a) || isEncodedCapability(a))\n && (!util.hasProp(obj, \"fct\") || Array.isArray(obj.fct) && obj.fct.every(util.isRecord))\n && util.hasProp(obj, \"prf\") && Array.isArray(obj.prf) && obj.prf.every(str => typeof str === \"string\")\n}","// A module to hold all the ugly compatibility logic\n// for getting from old UCANs to newer version UCANs.\n\nimport * as semver from \"./semver.js\"\n\nimport * as util from \"./util.js\"\nimport { SUPERUSER } from \"./capability/super-user.js\"\nimport { UcanParts, isUcanHeader, isUcanPayload } from \"./types.js\"\nimport { my } from \"./capability/index.js\"\n\n\nconst VERSION_0_3 = { major: 0, minor: 3, patch: 0 }\n\ntype UcanHeader_0_3_0 = {\n alg: string\n typ: string\n uav: string\n}\n\ntype UcanPayload_0_3_0 = {\n iss: string\n aud: string\n nbf?: number\n exp: number\n rsc: string | Record<string, string>\n ptc: string\n prf?: string\n}\n\nfunction isUcanHeader_0_3_0(obj: unknown): obj is UcanHeader_0_3_0 {\n return util.isRecord(obj)\n && util.hasProp(obj, \"alg\") && typeof obj.alg === \"string\"\n && util.hasProp(obj, \"typ\") && typeof obj.typ === \"string\"\n && util.hasProp(obj, \"uav\") && typeof obj.uav === \"string\"\n}\n\nfunction isUcanPayload_0_3_0(obj: unknown): obj is UcanPayload_0_3_0 {\n return util.isRecord(obj)\n && util.hasProp(obj, \"iss\") && typeof obj.iss === \"string\"\n && util.hasProp(obj, \"aud\") && typeof obj.aud === \"string\"\n && (!util.hasProp(obj, \"nbf\") || typeof obj.nbf === \"number\")\n && util.hasProp(obj, \"exp\") && typeof obj.exp === \"number\"\n && util.hasProp(obj, \"rsc\") && (typeof obj.rsc === \"string\" || util.isRecord(obj))\n && util.hasProp(obj, \"ptc\") && typeof obj.ptc === \"string\"\n && (!util.hasProp(obj, \"prf\") || typeof obj.prf === \"string\")\n}\n\n\nexport function handleCompatibility(header: unknown, payload: unknown): UcanParts {\n const fail = (place: string, reason: string) => new Error(`Can't parse UCAN ${place}: ${reason}`)\n\n if (!util.isRecord(header)) throw fail(\"header\", \"Invalid format: Expected a record\")\n\n // parse either the \"ucv\" or \"uav\" as a version in the header\n // we translate 'uav: 1.0.0' into 'ucv: 0.3.0'\n let version: \"0.9.1\" | \"0.3.0\" = \"0.9.1\"\n if (!util.hasProp(header, \"ucv\") || typeof header.ucv !== \"string\") {\n if (!util.hasProp(header, \"uav\") || typeof header.uav !== \"string\") {\n throw fail(\"header\", \"Invalid format: Missing version indicator\")\n } else if (header.uav !== \"1.0.0\") {\n throw fail(\"header\", `Unsupported version 'uav: ${header.uav}'`)\n }\n version = \"0.3.0\"\n } else if (semver.lt(header.ucv, \"0.8.0\")) {\n throw fail(\"header\", `Unsupported version 'ucv: ${header.ucv}'`)\n }\n\n if (semver.gte(version, \"0.8.0\")) {\n if (typeof header.ucv !== \"string\") {\n throw fail(\"header\", \"Invalid format: Missing 'ucv' key or 'ucv' is not a string\")\n }\n header.ucv = semver.parse(header.ucv)\n if (header.ucv == null) {\n throw fail(\"header\", \"Invalid format: 'ucv' string cannot be parsed into a semantic version\")\n }\n if (!isUcanHeader(header)) throw fail(\"header\", \"Invalid format\")\n if (!isUcanPayload(payload)) throw fail(\"payload\", \"Invalid format\")\n return { header, payload }\n }\n\n // we know it's version 0.3.0\n if (!isUcanHeader_0_3_0(header)) throw fail(\"header\", \"Invalid version 0.3.0 format\")\n if (!isUcanPayload_0_3_0(payload)) throw fail(\"payload\", \"Invalid version 0.3.0 format\")\n\n return {\n header: {\n alg: header.alg,\n typ: header.typ,\n ucv: VERSION_0_3,\n },\n payload: {\n iss: payload.iss,\n aud: payload.aud,\n nbf: payload.nbf,\n exp: payload.exp,\n att: (() => {\n if (payload.rsc === SUPERUSER || typeof payload.rsc === \"string\") return [\n my(SUPERUSER)\n ]\n\n const resources: Record<string, string> = payload.rsc\n return Object.keys(resources).map(rscKey => {\n return {\n with: { scheme: rscKey, hierPart: resources[ rscKey ] },\n can: payload.ptc === SUPERUSER\n ? SUPERUSER\n : { namespace: rscKey, segments: [ payload.ptc ] }\n }\n })\n })(),\n prf: payload.prf != null ? [ payload.prf ] : []\n },\n }\n}\n","import * as uint8arrays from \"uint8arrays\" // @IMPORT\n\nimport * as semver from \"./semver.js\"\nimport * as capability from \"./capability/index.js\"\nimport * as util from \"./util.js\"\nimport Plugins from \"./plugins.js\"\n\nimport { Capability, isCapability, isEncodedCapability } from \"./capability/index.js\"\nimport { Fact, Keypair, DidableKey } from \"./types.js\"\nimport { Ucan, UcanHeader, UcanParts, UcanPayload } from \"./types.js\"\nimport { handleCompatibility } from \"./compatibility.js\"\n\n\n// CONSTANTS\n\n\nconst TYPE = \"JWT\"\nconst VERSION = { major: 0, minor: 8, patch: 1 }\n\n\n\n// COMPOSING\n\n\n/**\n * Create a UCAN, User Controlled Authorization Networks, JWT.\n *\n * ### Header\n *\n * `alg`, Algorithm, the type of signature.\n * `typ`, Type, the type of this data structure, JWT.\n * `ucv`, UCAN version.\n *\n * ### Payload\n *\n * `att`, Attenuation, a list of resources and capabilities that the ucan grants.\n * `aud`, Audience, the ID of who it's intended for.\n * `exp`, Expiry, unix timestamp of when the jwt is no longer valid.\n * `fct`, Facts, an array of extra facts or information to attach to the jwt.\n * `iss`, Issuer, the ID of who sent this.\n * `nbf`, Not Before, unix timestamp of when the jwt becomes valid.\n * `nnc`, Nonce, a randomly generated string, used to ensure the uniqueness of the jwt.\n * `prf`, Proofs, nested tokens with equal or greater privileges.\n *\n */\nexport const build = (plugins: Plugins) =>\n ( params: {\n // from/to\n issuer: DidableKey\n audience: string\n\n // capabilities\n capabilities?: Array<Capability>\n\n // time bounds\n lifetimeInSeconds?: number // expiration overrides lifetimeInSeconds\n expiration?: number\n notBefore?: number\n\n // proofs / other info\n facts?: Array<Fact>\n proofs?: Array<string>\n addNonce?: boolean\n }): Promise<Ucan> => {\n const keypair = params.issuer\n const payload = buildPayload({ ...params, issuer: keypair.did() })\n return signWithKeypair(plugins)(payload, keypair)\n}\n\n/**\n * Construct the payload for a UCAN.\n */\nexport function buildPayload(params: {\n // from/to\n issuer: string\n audience: string\n\n // capabilities\n capabilities?: Array<Capability>\n\n // time bounds\n lifetimeInSeconds?: number // expiration overrides lifetimeInSeconds\n expiration?: number\n notBefore?: number\n\n // proofs / other info\n facts?: Array<Fact>\n proofs?: Array<string>\n addNonce?: boolean\n}): UcanPayload {\n const {\n issuer,\n audience,\n capabilities = [],\n lifetimeInSeconds = 30,\n expiration,\n notBefore,\n facts,\n proofs = [],\n addNonce = false\n } = params\n\n // Validate\n if (!issuer.startsWith(\"did:\")) throw new Error(\"The issuer must be a DID\")\n if (!audience.startsWith(\"did:\")) throw new Error(\"The audience must be a DID\")\n\n // Timestamps\n const currentTimeInSeconds = Math.floor(Date.now() / 1000)\n const exp = expiration || (currentTimeInSeconds + lifetimeInSeconds)\n\n // 📦\n return {\n aud: audience,\n att: capabilities,\n exp,\n fct: facts,\n iss: issuer,\n nbf: notBefore,\n nnc: addNonce ? util.generateNonce() : undefined,\n prf: proofs,\n }\n}\n\n/**\n * Encloses a UCAN payload as to form a finalised UCAN.\n */\nexport const sign = (plugins: Plugins) =>\n async (payload: UcanPayload,\n jwtAlg: string,\n signFn: (data: Uint8Array) => Promise<Uint8Array>,\n ): Promise<Ucan> => {\n const header: UcanHeader = {\n alg: jwtAlg,\n typ: TYPE,\n ucv: VERSION,\n }\n\n // Issuer key type must match UCAN algorithm\n if (!plugins.verifyIssuerAlg(payload.iss, jwtAlg)) {\n throw new Error(\"The issuer's key type must match the given key type.\")\n }\n\n // Encode parts\n const encodedHeader = encodeHeader(header)\n const encodedPayload = encodePayload(payload)\n\n // Sign\n const signedData = `${encodedHeader}.${encodedPayload}`\n const toSign = uint8arrays.fromString(signedData, \"utf8\")\n const sig = await signFn(toSign)\n\n // 📦\n // we freeze the object to make it more unlikely\n // for signedData & header/payload to get out of sync\n return Object.freeze({\n header,\n payload,\n signedData,\n signature: uint8arrays.toString(sig, \"base64url\")\n })\n}\n\n/**\n * `sign` with a `Keypair`.\n */\nexport const signWithKeypair = (plugins: Plugins) =>\n ( payload: UcanPayload,\n keypair: Keypair,\n ): Promise<Ucan> => {\n return sign(plugins)(\n payload,\n keypair.jwtAlg,\n data => keypair.sign(data),\n )\n}\n\n\n\n// ENCODING\n\n\n/**\n * Encode a UCAN.\n *\n * @param ucan The UCAN to encode\n */\nexport function encode(ucan: Ucan<unknown>): string {\n return `${ucan.signedData}.${ucan.signature}`\n}\n\n/**\n * Encode the header of a UCAN.\n *\n * @param header The UcanHeader to encode\n * @returns The header of a UCAN encoded as url-safe base64 JSON\n */\nexport function encodeHeader(header: UcanHeader): string {\n const headerFormatted = {\n ...header,\n ucv: semver.format(header.ucv)\n }\n return uint8arrays.toString(\n uint8arrays.fromString(JSON.stringify(headerFormatted), \"utf8\"),\n \"base64url\"\n )\n}\n\n/**\n * Encode the payload of a UCAN.\n *\n * NOTE: This will encode capabilities as well, so that it matches the UCAN spec.\n * In other words, `{ with: { scheme, hierPart }, can: { namespace, segments } }`\n * becomes `{ with: \"${scheme}:${hierPart}\", can: \"${namespace}/${segment}\" }`\n *\n * @param payload The UcanPayload to encode\n */\nexport function encodePayload(payload: UcanPayload): string {\n const payloadWithEncodedCaps = {\n ...payload,\n att: payload.att.map(capability.encode)\n }\n\n return uint8arrays.toString(\n uint8arrays.fromString(JSON.stringify(payloadWithEncodedCaps), \"utf8\"),\n \"base64url\"\n )\n}\n\n/**\n * Parse an encoded UCAN.\n *\n * @param encodedUcan The encoded UCAN.\n */\nexport function parse(encodedUcan: string): UcanParts {\n const [ encodedHeader, encodedPayload, signature ] = encodedUcan.split(\".\")\n\n if (encodedHeader == null || encodedPayload == null || signature == null) {\n throw new Error(`Can't parse UCAN: ${encodedUcan}: Expected JWT format: 3 dot-separated base64url-encoded values.`)\n }\n\n // Header\n let headerJson: string\n let headerObject: unknown\n\n try {\n headerJson = uint8arrays.toString(\n uint8arrays.fromString(encodedHeader, \"base64url\"),\n \"utf8\"\n )\n } catch {\n throw new Error(`Can't parse UCAN header: ${encodedHeader}: Can't parse as base64url.`)\n }\n\n try {\n headerObject = JSON.parse(headerJson)\n } catch {\n throw new Error(`Can't parse UCAN header: ${encodedHeader}: Can't parse encoded JSON inside.`)\n }\n\n // Payload\n let payloadJson: string\n let payloadObject: unknown\n\n try {\n payloadJson = uint8arrays.toString(\n uint8arrays.fromString(encodedPayload, \"base64url\"),\n \"utf8\"\n )\n } catch {\n throw new Error(`Can't parse UCAN payload: ${encodedPayload}: Can't parse as base64url.`)\n }\n\n try {\n payloadObject = JSON.parse(payloadJson)\n } catch {\n throw new Error(`Can't parse UCAN payload: ${encodedPayload}: Can't parse encoded JSON inside.`)\n }\n\n // Compatibility layer\n const { header, payload } = handleCompatibility(headerObject, payloadObject)\n\n // Ensure proper types/structure\n const parsedAttenuations = payload.att.reduce((acc: Capability[], cap: unknown): Capability[] => {\n return isEncodedCapability(cap)\n ? [ ...acc, capability.parse(cap) ]\n : isCapability(cap) ? [ ...acc, cap ] : acc\n }, [])\n\n // Fin\n return {\n header: header,\n payload: { ...payload, att: parsedAttenuations }\n }\n}\n\n\n\n// VALIDATION\n\n/**\n * Validation options\n */\nexport interface ValidateOptions {\n checkIssuer?: boolean\n checkSignature?: boolean\n checkIsExpired?: boolean\n checkIsTooEarly?: boolean\n}\n\n/**\n * Parse & Validate **one layer** of a UCAN.\n * This doesn't validate attenutations and doesn't validate the whole UCAN chain.\n *\n * By default, this will check the signature and time bounds.\n *\n * @param encodedUcan the JWT-encoded UCAN to validate\n * @param options an optional parameter to configure turning off some validation options\n * @returns the parsed & validated UCAN (one layer)\n * @throws Error if the UCAN is invalid\n */\nexport const validate = (plugins: Plugins) => \n async (encodedUcan: string, opts?: Partial<ValidateOptions>): Promise<Ucan> => {\n const { checkIssuer = true, checkSignature = true, checkIsExpired = true, checkIsTooEarly = true } = opts ?? {}\n\n const { header, payload } = parse(encodedUcan)\n const [ encodedHeader, encodedPayload, signature ] = encodedUcan.split(\".\")\n\n if (checkIssuer) {\n const validIssuer = plugins.verifyIssuerAlg(payload.iss, header.alg)\n if (!validIssuer) {\n throw new Error(`Invalid UCAN: ${encodedUcan}: Issuer key type does not match UCAN's \\`alg\\` property.`)\n }\n }\n\n if (checkSignature) {\n const sigBytes = uint8arrays.fromString(signature, \"base64url\")\n const data = uint8arrays.fromString(`${encodedHeader}.${encodedPayload}`, \"utf8\")\n const validSig = await plugins.verifySignature(payload.iss, data, sigBytes)\n if (!validSig) {\n throw new Error(`Invalid UCAN: ${encodedUcan}: Signature invalid.`)\n }\n }\n\n const signedData = `${encodedHeader}.${encodedPayload}`\n const ucan: Ucan = { header, payload, signedData, signature }\n\n if (checkIsExpired && isExpired(ucan)) {\n throw new Error(`Invalid UCAN: ${encodedUcan}: Expired.`)\n }\n\n if (checkIsTooEarly && isTooEarly(ucan)) {\n throw new Error(`Invalid UCAN: ${encodedUcan}: Not active yet (too early).`)\n }\n\n return ucan\n}\n\n/**\n * Proof validation options.\n */\nexport interface ValidateProofsOptions extends ValidateOptions {\n /**\n * Whether to check if the ucan's issuer matches its proofs audiences.\n */\n checkAddressing?: boolean\n /**\n * Whether to check if a ucan's time bounds are a subset of its proofs time bounds.\n */\n checkTimeBoundsSubset?: boolean\n /**\n * Whether to check if a ucan's version is bigger or equal to its proofs version.\n */\n checkVersionMonotonic?: boolean\n}\n\n/**\n * Iterates over all proofs and parses & validates them at the same time.\n * \n * If there's an audience/issuer mismatch, the iterated item will contain an `Error`.\n * Otherwise the iterated out will contain a `Ucan`.\n * \n * @param ucan a parsed UCAN\n * @param options optional ValidateOptions to use for validating each proof\n * @return an async iterator of the given ucan's proofs parsed & validated, or an `Error`\n * for each proof that couldn't be validated or parsed.\n */\n\nexport const validateProofs = (plugins: Plugins) => \n async function* ( ucan: Ucan,\n opts?: Partial<ValidateProofsOptions>\n ): AsyncIterable<Ucan | Error> {\n const { checkAddressing = true, checkTimeBoundsSubset = true, checkVersionMonotonic = true } = opts || {}\n\n for (const prf of ucan.payload.prf) {\n try {\n const proof = await validate(plugins)(prf, opts)\n\n if (checkAddressing && ucan.payload.iss !== proof.payload.aud) {\n throw new Error(`Invalid Proof: Issuer ${ucan.payload.iss} doesn't match parent's audience ${proof.payload.aud}`)\n }\n\n if (checkTimeBoundsSubset && proof.payload.nbf != null && ucan.payload.exp > proof.payload.nbf) {\n throw new Error(`Invalid Proof: 'Not before' (${proof.payload.nbf}) is after parent's expiration (${ucan.payload.exp})`)\n }\n\n if (checkTimeBoundsSubset && ucan.payload.nbf != null && ucan.payload.nbf > proof.payload.exp) {\n throw new Error(`Invalid Proof: Expiration (${proof.payload.exp}) is before parent's 'not before' (${ucan.payload.nbf})`)\n }\n\n if (checkVersionMonotonic && semver.lt(ucan.header.ucv, proof.header.ucv)) {\n throw new Error(`Invalid Proof: Version (${proof.header.ucv}) is higher than parent's version (${ucan.header.ucv})`)\n }\n\n yield proof\n } catch (e) {\n if (e instanceof Error) {\n yield e\n } else {\n yield new Error(`Error when trying to parse UCAN proof: ${e}`)\n }\n }\n }\n}\n\n/**\n * Check if a UCAN is expired.\n *\n * @param ucan The UCAN to validate\n */\nexport function isExpired(ucan: Ucan): boolean {\n return ucan.payload.exp <= Math.floor(Date.now() / 1000)\n}\n\n/**\n * Check if a UCAN is not active yet.\n *\n * @param ucan The UCAN to validate\n */\nexport const isTooEarly = (ucan: Ucan): boolean => {\n if (ucan.payload.nbf == null) return false\n return ucan.payload.nbf > Math.floor(Date.now() / 1000)\n}","import * as token from \"./token.js\"\nimport Plugins from \"./plugins.js\"\nimport { Capability } from \"./capability/index.js\"\nimport { Ucan } from \"./types.js\"\nimport { ResourcePointer } from \"./capability/resource-pointer.js\"\nimport { Ability } from \"./capability/ability.js\"\nimport { SUPERUSER, Superuser } from \"./capability/super-user.js\"\n\n\n// TYPES\n\n\n/**\n * UCAN capabilities can have arbitrary semantics for delegation.\n * These semantics can be configured via this record of functions.\n * \n * In most cases you may just want to use `equalCanDelegate` as your semantics,\n * but sometimes you want e.g. path behavior for a file-system-like resource:\n * `path:/parent/` should be able to delegate access to `path:/parent/child/`.\n */\nexport interface DelegationSemantics {\n /**\n * Whether a parent resource can delegate a child resource.\n * \n * An implementation may for example decide to return true for\n * `canDelegateResource(resourcePointer.parse(\"path:/parent/\"), resourcePointer.parse(\"path:/parent/child/\"))`\n */\n canDelegateResource(parentResource: ResourcePointer, childResource: ResourcePointer): boolean\n /**\n * Whether a parent ability can delegate a child ability.\n * \n * An implementation may for example decide to return true for\n * `canDelegateAbility(ability.parse(\"crud/UPDATE\"), ability.parse(\"crud/CREATE\"))`\n */\n canDelegateAbility(parentAbility: Ability, childAbility: Ability): boolean\n}\n\n\n/**\n * A delegation chain for a delegated capability or delegated ownership.\n * \n * This type represents a valid path of delegations through a UCAN.\n * \n * It can be cached as a sort of \"witness\" that a UCAN actually delegates a particular capability.\n *\n * Or it can be scanned to look for UCANs that may have become invalid due to revocation.\n */\nexport type DelegationChain\n = DelegatedCapability\n | DelegatedOwnership\n\n\n/**\n * A delegation chain that ends with a concrete capability.\n */\nexport interface DelegatedCapability {\n /**\n * The capability that the end of the chain grants.\n */\n capability: Capability\n /**\n * The specific UCAN in the chain witnessing the delegated capability.\n */\n ucan: Ucan\n // will probably become an array in the future due to rights amplification\n /**\n * The rest of the delegation chain. This may include entries\n * for `DelegatedOwnership`.\n */\n chainStep?: DelegationChain\n}\n\n/**\n * A delegation chain that ends with delegated ownership.\n * \n * This is ownership over a specific DID at a certain resource and ability scope.\n */\nexport interface DelegatedOwnership {\n /**\n * The DID that ownership is delegated for.\n */\n ownershipDID: string\n /**\n * The kinds of capabilites that can be delegated from the ownership.\n */\n scope: OwnershipScope\n /**\n * The specific UCAN in the chain witnessing the delegated ownership.\n */\n ucan: Ucan\n /**\n * The rest of the ownership delegation chain.\n */\n chainStep?: DelegatedOwnership\n}\n\n\n/**\n * This describes the scope of capabilities that are allowed to be delegated\n * from delegated ownership.\n */\nexport type OwnershipScope\n = Superuser\n | { scheme: string; ability: Ability }\n\n\n\n// FUNCTIONS\n\n\n/**\n * This computes all possible delegations from given UCAN with given\n * capability delegation semantics.\n * \n * For each entry in the attenuations array of the UCAN there will be at least\n * one delegation chain.\n * \n * These delegation chains are computed lazily, so that if parts of the UCAN have\n * been revoked or can't be loaded, this doesn't keep this function from figuring\n * out different ways of delegating a capability from the attenuations.\n * It also makes it possible to return early if a valid delegation chain has been found.\n */\nexport const delegationChains = (plugins: Plugins) =>\n async function* ( \n semantics: DelegationSemantics,\n ucan: Ucan,\n isRevoked: (ucan: Ucan) => Promise<boolean> = async () => false,\n ): AsyncIterable<DelegationChain | Error> {\n\n if (await isRevoked(ucan)) {\n yield new Error(`UCAN Revoked: ${token.encode(ucan)}`)\n return\n }\n\n yield* capabilitiesFromParenthood(ucan)\n yield* capabilitiesFromDelegation(plugins, semantics, ucan, isRevoked)\n}\n\n\n/**\n * Figures out the implied root issuer from a delegation chain.\n * \n * For a given delegation chain this will give you the DID of who\n * \"started\" the chain, so who claims to be the \"owner\" of said capability.\n */\nexport function rootIssuer(delegationChain: DelegationChain): string {\n if (\"capability\" in delegationChain) {\n return delegationChain.chainStep == null\n ? delegationChain.ucan.payload.iss\n : rootIssuer(delegationChain.chainStep)\n }\n return delegationChain.ownershipDID\n}\n\n\n/**\n * The default delegation semantics.\n * This will just allow equal capabilities to be delegated,\n * except that it also accounts for superuser abilities.\n */\nexport const equalCanDelegate: DelegationSemantics = {\n canDelegateResource(parentResource, childResource) {\n if (parentResource.scheme !== childResource.scheme) {\n return false\n }\n\n return parentResource.hierPart === childResource.hierPart\n },\n\n canDelegateAbility(parentAbility, childAbility) {\n if (parentAbility === SUPERUSER) {\n return true\n }\n if (childAbility === SUPERUSER) {\n return false\n }\n\n if (parentAbility.namespace !== childAbility.namespace) {\n return false\n }\n\n // Array equality\n if (parentAbility.segments.length !== childAbility.segments.length) {\n return false\n }\n return parentAbility.segments.reduce(\n (acc, v, i) => acc && childAbility.segments[ i ] === v,\n true as boolean\n )\n },\n}\n\n\nexport function capabilityCanBeDelegated(\n semantics: DelegationSemantics,\n capability: Capability,\n fromDelegationChain: DelegationChain,\n): boolean {\n if (\"capability\" in fromDelegationChain) {\n return canDelegate(semantics, fromDelegationChain.capability, capability)\n }\n const ownershipScope = fromDelegationChain.scope\n if (ownershipScope === SUPERUSER) {\n return true\n }\n return ownershipScope.scheme == capability.with.scheme\n && semantics.canDelegateAbility(ownershipScope.ability, capability.can)\n}\n\n\nexport function ownershipCanBeDelegated(\n semantics: DelegationSemantics,\n did: string,\n scope: OwnershipScope,\n fromDelegationChain: DelegatedOwnership\n): boolean {\n if (did !== fromDelegationChain.ownershipDID) {\n return false\n }\n\n const parentScope = fromDelegationChain.scope\n\n // parent OwnershipScope can delegate child OwnershipScope\n\n if (parentScope === SUPERUSER) {\n return true\n }\n if (scope === SUPERUSER) {\n return false\n }\n return parentScope.scheme === scope.scheme\n && semantics.canDelegateAbility(parentScope.ability, scope.ability)\n}\n\n\n\n// ㊙️ Internal\n\n\nfunction* capabilitiesFromParenthood(ucan: Ucan): Iterable<DelegationChain> {\n for (const capability of ucan.payload.att) {\n switch (capability.with.scheme.toLowerCase()) {\n // If it's a \"my\" capability, it'll indicate an ownership delegation\n case \"my\": {\n const scope = capability.with.hierPart === SUPERUSER\n ? SUPERUSER\n : { scheme: capability.with.hierPart, ability: capability.can }\n\n yield {\n ownershipDID: ucan.payload.iss,\n scope,\n ucan,\n }\n break\n }\n // if it's another known capability, we can ignore them\n // (they're not introduced by parenthood)\n case \"as\":\n case \"prf\":\n break\n // otherwise we assume it's a normal parenthood capability introduction\n default:\n yield { capability, ucan }\n }\n }\n}\n\n\nasync function* capabilitiesFromDelegation(\n plugins: Plugins,\n semantics: DelegationSemantics,\n ucan: Ucan,\n isRevoked: (ucan: Ucan) => Promise<boolean>,\n): AsyncIterable<DelegationChain | Error> {\n\n let proofIndex = 0\n\n for await (const proof of token.validateProofs(plugins)(ucan)) {\n if (proof instanceof Error) {\n yield proof\n continue\n }\n\n for (const capability of ucan.payload.att) {\n try {\n switch (capability.with.scheme.toLowerCase()) {\n case \"my\": continue // cannot be delegated, only introduced by parenthood.\n case \"as\": {\n yield* handleAsDelegation(plugins, semantics, capability, ucan, proof, isRevoked)\n break\n }\n case \"prf\": {\n yield* handlePrfDelegation(plugins, semantics, capability, ucan, proof, proofIndex, isRevoked)\n break\n }\n default: {\n yield* handleNormalDelegation(plugins, semantics, capability, ucan, proof, isRevoked)\n }\n }\n } catch (e) {\n yield error(e)\n }\n }\n\n proofIndex++\n }\n\n function error(e: unknown): Error {\n if (e instanceof Error) {\n return e\n } else {\n return new Error(`Error during capability delegation checking: ${e}`)\n }\n }\n}\n\n\nasync function* handleAsDelegation(\n plugins: Plugins,\n semantics: DelegationSemantics,\n capability: Capability,\n ucan: Ucan,\n proof: Ucan,\n isRevoked: (ucan: Ucan) => Promise<boolean>,\n): AsyncIterable<DelegatedOwnership | Error> {\n const split = capability.with.hierPart.split(\":\")\n const scheme = split[ split.length - 1 ]\n const ownershipDID = split.slice(0, -1).join(\":\")\n const scope = scheme === SUPERUSER\n ? SUPERUSER\n : { scheme, ability: capability.can }\n\n for await (const delegationChain of delegationChains(plugins)(semantics, proof, isRevoked)) {\n if (delegationChain instanceof Error) {\n yield delegationChain\n continue\n }\n if (!(\"ownershipDID\" in delegationChain)) {\n continue\n }\n if (ownershipCanBeDelegated(\n semantics,\n ownershipDID,\n scope,\n delegationChain\n )) {\n yield {\n ownershipDID,\n scope,\n ucan,\n chainStep: delegationChain\n }\n }\n }\n}\n\n\nasync function* handlePrfDelegation(\n plugins: Plugins,\n semantics: DelegationSemantics,\n capability: Capability,\n ucan: Ucan,\n proof: Ucan,\n proofIndex: number,\n isRevoked: (ucan: Ucan) => Promise<boolean>,\n): AsyncIterable<DelegatedCapability | Error> {\n if (\n capability.with.hierPart !== SUPERUSER\n && parseInt(capability.with.hierPart, 10) !== proofIndex\n ) {\n // if it's something like prf:2, we need to make sure that\n // we only process the delegation if proofIndex === 2\n return\n }\n for await (const delegationChain of delegationChains(plugins)(semantics, proof, isRevoked)) {\n if (delegationChain instanceof Error) {\n yield delegationChain\n continue\n }\n if (!(\"capability\" in delegationChain)) {\n continue\n }\n yield {\n capability: delegationChain.capability,\n ucan,\n chainStep: delegationChain\n }\n }\n}\n\n\nasync function* handleNormalDelegation(\n plugins: Plugins,\n semantics: DelegationSemantics,\n capability: Capability,\n ucan: Ucan,\n proof: Ucan,\n isRevoked: (ucan: Ucan) => Promise<boolean>,\n): AsyncIterable<DelegatedCapability | Error> {\n for await (const delegationChain of delegationChains(plugins)(semantics, proof, isRevoked)) {\n if (delegationChain instanceof Error) {\n yield delegationChain\n continue\n }\n if (!capabilityCanBeDelegated(semantics, capability, delegationChain)) {\n continue\n }\n yield {\n capability,\n ucan,\n chainStep: delegationChain\n }\n }\n}\n\n\nfunction canDelegate(\n semantics: DelegationSemantics,\n parentCapability: Capability,\n childCapability: Capability,\n): boolean {\n return semantics.canDelegateResource(parentCapability.with, childCapability.with)\n && semantics.canDelegateAbility(parentCapability.can, childCapability.can)\n}\n\n","import * as token from \"./token.js\"\nimport Plugins from \"./plugins.js\"\nimport { capabilityCanBeDelegated, DelegationSemantics, DelegationChain, delegationChains, equalCanDelegate, rootIssuer } from \"./attenuation.js\"\nimport { Capability, isCapability } from \"./capability/index.js\"\nimport { Fact, Ucan } from \"./types.js\"\n\n\nexport type Result<Ok, Err = Error>\n = { ok: true; value: Ok }\n | { ok: false; error: Err }\n\nconst ok: <T, E>(k: T) => Result<T, E> = k => ({ ok: true, value: k })\nconst err: <T, E>(e: E) => Result<T, E> = e => ({ ok: false, error: e })\n\n\nexport interface VerifyOptions {\n /**\n * the DID of the callee of this function. The expected audience of the outermost level of the UCAN.\n * NOTE: This DID should not be hardcoded in production calls to this function.\n */\n audience: string\n /**\n * a non-empty list of capabilities required for this UCAN invocation. The root issuer and capability\n * should be derived from something like your HTTP request parameters. They identify the resource\n * that's access-controlled.\n */\n requiredCapabilities: { capability: Capability; rootIssuer: string }[]\n /**\n * an optional record of functions that specify what the rules for delegating capabilities are.\n * If not provided, the default semantics will be `equalCanDelegate`.\n */\n semantics?: DelegationSemantics\n /**\n * an async predicate on UCANs to figure out whether they've been revoked or not.\n * Usually that means checking whether the hash of the UCAN is in a list of revoked UCANs.\n * If not provided, it will assume no UCAN to be revoked.\n */\n isRevoked?: (ucan: Ucan) => Promise<boolean>\n /**\n * an optional function that's given the list of facts in the root UCAN and returns a boolean indicating\n * whether the facts include everything you expect for the UCAN invocation to check.\n * By default this will ignore all facts in the UCAN and just return true.\n */\n checkFacts?: (facts: Fact[]) => boolean\n}\n\n\n/**\n * Verify a UCAN for an invocation.\n *\n * @param ucan a UCAN to verify for invocation in JWT format. (starts with 'eyJ...' and has two '.' in it)\n *\n * @param options required and optional verification options see {@link VerifyOptions}\n *\n * @throws TypeError if the passed arguments don't match what is expected\n */\nexport const verify = (plugins: Plugins) => \n async (ucan: string, options: VerifyOptions): Promise<Result<Verification[], Error[]>> => {\n const { audience, requiredCapabilities } = options\n const semantics = options.semantics ?? equalCanDelegate\n const isRevoked = options.isRevoked ?? (async () => false)\n const checkFacts = options.checkFacts ?? (() => true)\n // type-check arguments\n if (typeof ucan !== \"string\") {\n throw new TypeError(`Expected an encoded UCAN string as first argument, but got ${ucan}`)\n }\n if (typeof audience !== \"string\" || !audience.startsWith(\"did:\")) {\n throw new TypeError(`Expected a DID string as second argument, but got ${audience}`)\n }\n if (typeof isRevoked !== \"function\") {\n throw new TypeError(`Expected a function returning a promise as third argument, but got ${isRevoked}`)\n }\n if (!Array.isArray(requiredCapabilities)) {\n throw new TypeError(`Expected an array as fourth argument, but got ${requiredCapabilities}`)\n }\n if (requiredCapabilities.length < 1) {\n throw new TypeError(`Expected a non-empty list of required capabilities as 4th argument.`)\n }\n if (requiredCapabilities.some(req => !isCapability(req.capability) || typeof req.rootIssuer !== \"string\" || !req.rootIssuer.startsWith(\"did:\"))) {\n throw new TypeError(`Expected an array of records of capabilities and rootIssuers as DID strings as 4th argument, but got ${requiredCapabilities}`)\n }\n if (typeof semantics.canDelegateResource !== \"function\" || typeof semantics.canDelegateAbility !== \"function\") {\n throw new TypeError(`Expected a record with two functions 'canDelegateResource' and 'canDelegateAbility' as 5th argument, but got ${semantics}`)\n }\n if (typeof checkFacts !== \"function\") {\n throw new TypeError(`Expected a function as 6th argument, but got ${checkFacts}`)\n }\n\n try {\n // Verify the UCAN\n const decoded = await token.validate(plugins)(ucan)\n\n // Check that it's addressed to us\n if (decoded.payload.aud !== audience) {\n return err([ new Error(`Invalid UCAN: Expected audience to be ${audience}, but it's ${decoded.payload.aud}`) ])\n }\n\n const errors: Error[] = []\n const remaining = new Set(requiredCapabilities)\n const proven: Verification[] = []\n\n // Check that all required capabilities are verified\n loop: for await (const delegationChain of delegationChains(plugins)(semantics, decoded, isRevoked)) {\n if (delegationChain instanceof Error) {\n errors.push(delegationChain)\n continue\n }\n\n // Try to look for capabilities from given delegation chain\n for (const expected of remaining) {\n if (\n capabilityCanBeDelegated(semantics, expected.capability, delegationChain)\n && rootIssuer(delegationChain) === expected.rootIssuer\n ) {\n remaining.delete(expected)\n proven.push({\n ...expected,\n proof: delegationChain\n })\n }\n }\n\n // If we've already verified all, we don't need to keep looking\n if (remaining.size === 0) {\n break loop\n }\n }\n\n return remaining.size > 0 ? err(errors) : ok(proven)\n\n } catch (e) {\n return err([ e instanceof Error ? e : new Error(`Unknown error during UCAN verification: ${e}`) ])\n }\n}\n\nexport interface Verification {\n capability: Capability\n rootIssuer: string\n proof: DelegationChain\n}\n","import * as token from \"./token.js\"\nimport * as util from \"./util.js\"\nimport Plugins from \"./plugins.js\"\n\nimport { Fact, UcanPayload, isKeypair, Ucan, DidableKey, StoreI, BuilderI, BuildableState, CapabilityLookupCapableState, DefaultableState } from \"./types.js\"\nimport { Capability, isCapability } from \"./capability/index.js\"\nimport { capabilityCanBeDelegated, DelegationSemantics, DelegationChain } from \"./attenuation.js\"\n\n\n\nfunction isBuildableState(obj: unknown): obj is BuildableState {\n return util.isRecord(obj)\n && util.hasProp(obj, \"issuer\") && isKeypair(obj.issuer)\n && util.hasProp(obj, \"audience\") && typeof obj.audience === \"string\"\n && util.hasProp(obj, \"expiration\") && typeof obj.expiration === \"number\"\n}\n\nfunction isCapabilityLookupCapableState(obj: unknown): obj is CapabilityLookupCapableState {\n return util.isRecord(obj)\n && util.hasProp(obj, \"issuer\") && isKeypair(obj.issuer)\n && util.hasProp(obj, \"expiration\") && typeof obj.expiration === \"number\"\n}\n\n// type BuilderConstructor = new <State extends Partial<BuildableState>>(state: State, defaultable: DefaultableState) => BuilderI<State>\ntype BuilderConstructor = { \n new <State extends Partial<BuildableState>>(state: State, defaultable: DefaultableState): BuilderI<State> \n create(): BuilderI<Record<string, never>> \n}\n\n/**\n * A builder API for UCANs.\n *\n * Supports grabbing UCANs from a UCAN `Store` for proofs (see `delegateCapability`).\n *\n * Example usage:\n *\n * ```ts\n * const ucan = await Builder.create()\n * .issuedBy(aliceKeypair)\n * .toAudience(bobDID)\n * .withLifetimeInSeconds(30)\n * .claimCapability({ email: \"my@email.com\", cap: \"SEND\" })\n * .delegateCapability(emailSemantics, { email: \"my-friends@email.com\", cap: \"SEND\" }, proof)\n * .build()\n * ```\n */\nconst mkBuilderClass = (plugins: Plugins): BuilderConstructor => {\n\n return class Builder<State extends Partial<BuildableState>> implements BuilderI<State> {\n\n private state: State // portion of the state that's required to be set before building\n private defaultable: DefaultableState // portion of the state that has sensible defaults\n\n constructor(state: State, defaultable: DefaultableState) {\n this.state = state\n this.defaultable = defaultable\n }\n\n /**\n * Create an empty builder.\n * Before finalising the builder, you need to at least call\n * - `issuedBy`\n * - `toAudience` and\n * - `withLifetimeInSeconds` or `withExpiration`.\n * To finalise the builder, call its `build` or `buildPayload` method.\n */\n static create(): Builder<Record<string, never>> {\n return new Builder({}, { capabilities: [], facts: [], proofs: [], addNonce: false })\n }\n\n /**\n * @param issuer The issuer as a DID string (\"did:key:...\").\n *\n * The UCAN must be signed with the private key of the issuer to be valid.\n */\n issuedBy(issuer: DidableKey): Builder<State & { issuer: DidableKey }> {\n if (!isKeypair(issuer)) {\n throw new TypeError(`Expected a Keypair, but got ${issuer}`)\n }\n return new Builder({ ...this.state, issuer }, this.defaultable)\n }\n\n /**\n * @param audience The audience as a DID string (\"did:key:...\").\n *\n * This is the identity this UCAN transfers rights to.\n * It could e.g. be the DID of a service you're posting this UCAN as a JWT to,\n * or it could be the DID of something that'll use this UCAN as a proof to\n * continue the UCAN chain as an issuer.\n */\n toAudience(audience: string): Builder<State & { audience: string }> {\n if (typeof audience !== \"string\") {\n throw new TypeError(`Expected audience DID as string, but got ${audience}`)\n }\n return new Builder({ ...this.state, audience }, this.defaultable)\n }\n\n /**\n * @param seconds The number of seconds from the calltime of this function\n * to set the expiry timestamp to.\n */\n withLifetimeInSeconds(seconds: number): Builder<State & { expiration: number }> {\n if (typeof seconds !== \"number\") {\n throw new TypeError(`Expected seconds as number, but got ${seconds}`)\n }\n if (!isFinite(seconds) || seconds <= 0) {\n throw new TypeError(`Expected seconds to be a positive number, but got ${seconds}`)\n }\n return this.withExpiration(Math.floor(Date.now() / 1000) + seconds)\n }\n\n /**\n * @param expiration The UTCTime timestamp (in seconds) for when the UCAN should expire.\n */\n withExpiration(expiration: number): Builder<State & { expiration: number }> {\n if (typeof expiration !== \"number\" || !isFinite(expiration)) {\n throw new TypeError(`Expected expiration as number, but got ${expiration}`)\n }\n if (this.defaultable.notBefore != null && expiration < this.defaultable.notBefore) {\n throw new Error(`Can't set expiration to ${expiration} which is before 'notBefore': ${this.defaultable.notBefore}`)\n }\n return new Builder({ ...this.state, expiration }, this.defaultable)\n }\n\n /**\n * @param notBeforeTimestamp The UTCTime timestamp (in seconds) of when the UCAN becomes active.\n */\n withNotBefore(notBeforeTimestamp: number): Builder<State> {\n if (typeof notBeforeTimestamp !== \"number\" || !isFinite(notBeforeTimestamp)) {\n throw new TypeError(`Expected notBeforeTimestamp as number, but got ${notBeforeTimestamp}`)\n }\n if (util.hasProp(this.state, \"expiration\") && typeof this.state.expiration === \"number\" && this.state.expiration < notBeforeTimestamp) {\n throw new Error(`Can't set 'notBefore' to ${notBeforeTimestamp} which is after expiration: ${this.state.expiration}`)\n }\n return new Builder(this.state, { ...this.defaultable, notBefore: notBeforeTimestamp })\n }\n\n /**\n * @param fact Any fact or proof of knowledge in this UCAN as a record.\n * @param facts Arbitrary more facts or proofs of knowledge.\n */\n withFact(fact: Fact): Builder<State>\n withFact(fact: Fact, ...facts: Fact[]): Builder<State>\n withFact(fact: Fact, ...facts: Fact[]): Builder<State> {\n if (!util.isRecord(fact) || facts.some(fct => !util.isRecord(fct))) {\n throw new TypeError(`Expected fact(s) to be a record, but got ${fact}`)\n }\n return new Builder(this.state, {\n ...this.defaultable,\n facts: [ ...this.defaultable.facts, fact, ...facts ]\n })\n }\n\n /**\n * Will ensure that the built UCAN includes a number used once.\n */\n withNonce(): Builder<State> {\n return new Builder(this.state, { ...this.defaultable, addNonce: true })\n }\n\n /**\n * Claim capabilities 'by parenthood'.\n */\n claimCapability(capability: Capability): Builder<State>\n claimCapability(capability: Capability, ...capabilities: Capability[]): Builder<State>\n claimCapability(capability: Capability, ...capabilities: Capability[]): Builder<State> {\n if (!isCapability(capability)) {\n throw new TypeError(`Expected capability, but got ${JSON.stringify(capability, null, \" \")}`)\n }\n return new Builder(this.state, {\n ...this.defaultable,\n capabilities: [ ...this.defaultable.capabilities, capability, ...capabilities ]\n })\n }\n\n /**\n * Delegate capabilities from a given proof to the audience of the UCAN you're building.\n *\n * @param semantics The rules for which delegations of capabilities are allowed.\n * @param requiredCapability The capability you want to delegate.\n *\n * Then, one of\n * @param proof The proof chain that grants the issuer of this UCAN at least the capabilities you want to delegate, or\n * @param store The UCAN store in which to try to find a UCAN granting you enough capabilities to delegate given capabilities.\n *\n * @throws If given store can't provide a UCAN for delegating given capability\n * @throws If given proof can't be used to delegate given capability\n * @throws If the builder hasn't set an issuer and expiration yet\n */\n delegateCapability(requiredCapability: Capability, store: StoreI): State extends CapabilityLookupCapableState ? Builder<State> : never\n delegateCapability(requiredCapability: Capability, proof: DelegationChain, semantics: DelegationSemantics): State extends CapabilityLookupCapableState ? Builder<State> : never\n delegateCapability(requiredCapability: Capability, storeOrProof: StoreI | DelegationChain, semantics?: DelegationSemantics): Builder<State> {\n if (!isCapability(requiredCapability)) {\n throw new TypeError(`Expected 'requiredCapability' as a second argument, but got ${requiredCapability}`)\n }\n if (!isCapabilityLookupCapableState(this.state)) {\n throw new Error(`Can't delegate capabilities without having these paramenters set in the builder: issuer and expiration.`)\n }\n\n function isProof(proof: StoreI | DelegationChain): proof is DelegationChain {\n return util.hasProp(proof, \"capability\") || util.hasProp(proof, \"ownershipDID\")\n }\n\n if (isProof(storeOrProof)) {\n if (semantics == null) {\n throw new TypeError(`Expected 'semantics' as third argument if a 'proof' DelegationChain was passed as second.`)\n }\n const proof: DelegationChain = storeOrProof\n const ucan = proof.ucan\n if (!capabilityCanBeDelegated(semantics, requiredCapability, proof)) {\n throw new Error(`Can't add capability to UCAN: Given proof doesn't give required rights to delegate.`)\n }\n return new Builder(this.state, {\n ...this.defaultable,\n capabilities: [ ...this.defaultable.capabilities, requiredCapability ],\n proofs: this.defaultable.proofs.find(p => token.encode(p) === token.encode(ucan)) == null\n ? [ ...this.defaultable.proofs, ucan ]\n : this.defaultable.proofs\n })\n } else {\n const store: StoreI = storeOrProof\n const issuer = this.state.issuer.did()\n // we look up a proof that has our issuer as an audience\n const result = util.first(store.findWithCapability(issuer, requiredCapability, issuer))\n if (result != null) {\n const ucan = result.ucan\n const ucanEncoded = token.encode(ucan)\n return new Builder(this.state, {\n ...this.defaultable,\n capabilities: [ ...this.defaultable.capabilities, requiredCapability ],\n proofs: this.defaultable.proofs.find(proof => token.encode(proof) === ucanEncoded) == null\n ? [ ...this.defaultable.proofs, ucan ]\n : this.defaultable.proofs\n })\n } else {\n throw new Error(`Couldn't add capability to UCAN. Couldn't find anything providing this capability in given store.`)\n }\n }\n }\n\n /**\n * Build the UCAN body. This can be used if you want to sign the UCAN yourself afterwards.\n */\n buildPayload(): State extends BuildableState ? UcanPayload : never\n buildPayload(): UcanPayload {\n if (!isBuildableState(this.state)) {\n throw new Error(`Builder is missing one of the required properties before it can be built: issuer, audience and expiration.`)\n }\n return token.buildPayload({\n issuer: this.state.issuer.did(),\n audience: this.state.audience,\n\n expiration: this.state.expiration,\n notBefore: this.defaultable.notBefore,\n addNonce: this.defaultable.addNonce,\n\n capabilities: this.defaultable.capabilities,\n facts: this.defaultable.facts,\n proofs: this.defaultable.proofs.map(proof => token.encode(proof)),\n })\n }\n\n /**\n * Finalize: Build and sign the UCAN.\n *\n * @throws If the builder hasn't yet been set an issuer, audience and expiration.\n */\n async build(): Promise<State extends BuildableState ? Ucan : never>\n async build(): Promise<Ucan> {\n if (!isBuildableState(this.state)) {\n throw new Error(`Builder is missing one of the required properties before it can be built: issuer, audience and expiration.`)\n }\n const payload = this.buildPayload()\n return await token.signWithKeypair(plugins)(payload, this.state.issuer)\n }\n\n }\n\n}\n\nexport default mkBuilderClass","import * as token from \"./token.js\"\nimport Plugins from \"./plugins.js\"\nimport { capabilityCanBeDelegated, DelegationSemantics, DelegationChain, delegationChains, rootIssuer } from \"./attenuation.js\"\nimport { IndexByAudience, StoreI, Ucan } from \"./types.js\"\nimport { Capability } from \"./capability/index.js\"\n\ntype StoreConstructor = {\n new (knownSemantics: DelegationSemantics, index: IndexByAudience): StoreI\n empty(knownSemantics: DelegationSemantics): StoreI\n fromTokens(knownSemantics: DelegationSemantics, tokens: Iterable<string> | AsyncIterable<string>): Promise<StoreI>\n}\n\nconst mkStoreClass = (plugins: Plugins): StoreConstructor => {\n return class Store implements StoreI{\n\n private index: IndexByAudience\n private knownSemantics: DelegationSemantics\n\n constructor(knownSemantics: DelegationSemantics, index: IndexByAudience) {\n this.index = index\n this.knownSemantics = knownSemantics\n }\n\n static empty(knownSemantics: DelegationSemantics): Store {\n return new Store(knownSemantics, {})\n }\n\n static async fromTokens( \n knownSemantics: DelegationSemantics,\n tokens: Iterable<string> | AsyncIterable<string>,\n ): Promise<Store> {\n const store = Store.empty(knownSemantics)\n for await (const encodedUcan of tokens) {\n const ucan = await token.validate(plugins)(encodedUcan)\n await store.add(ucan)\n }\n return store\n }\n\n async add(ucan: Ucan): Promise<void> {\n const audience = ucan.payload.aud\n const byAudience = this.index[ audience ] ?? []\n const encoded = token.encode(ucan)\n \n if (byAudience.find(stored => token.encode(stored.processedUcan) === encoded) != null) {\n return\n }\n\n const chains = []\n for await (const delegationChain of delegationChains(plugins)(this.knownSemantics, ucan)) {\n if (delegationChain instanceof Error) {\n console.warn(`Delegation chain error while storing UCAN:`, delegationChain)\n continue\n }\n chains.push(delegationChain)\n }\n\n // Also do this *after* the all awaits to prevent races.\n if (byAudience.find(stored => token.encode(stored.processedUcan) === encoded) != null) {\n return\n }\n\n byAudience.push({\n processedUcan: ucan,\n capabilities: chains\n })\n this.index[ audience ] = byAudience\n }\n\n getByAudience(audience: string): Ucan[] {\n return (this.index[ audience ] ?? []).map(elem => elem.processedUcan)\n }\n\n findByAudience(audience: string, predicate: (ucan: Ucan) => boolean): Ucan | null {\n return this.index[ audience ]?.find(elem => predicate(elem.processedUcan))?.processedUcan ?? null\n }\n\n *findWithCapability(\n audience: string,\n requiredCapability: Capability,\n requiredIssuer: string,\n ): Iterable<DelegationChain> {\n const cache = this.index[ audience ]\n\n if (cache == null) {\n return\n }\n\n for (const cacheElement of cache) {\n for (const delegationChain of cacheElement.capabilities) {\n if (capabilityCanBeDelegated(this.knownSemantics, requiredCapability, delegationChain)\n && rootIssuer(delegationChain) === requiredIssuer) {\n yield delegationChain\n }\n }\n }\n }\n\n }\n}\n\nexport default mkStoreClass","import * as uint8arrays from \"uint8arrays\"\n\nexport type DidKeyPlugin = {\n prefix: Uint8Array\n jwtAlg: string\n verifySignature: (did: string, data: Uint8Array, sig: Uint8Array) => Promise<boolean>\n}\n\nexport type DidMethodPlugin = {\n checkJwtAlg: (did: string, jwtAlg: string) => boolean\n verifySignature: (did: string, data: Uint8Array, sig: Uint8Array) => Promise<boolean>\n}\n\nexport class Plugins {\n\n constructor(\n public keys: DidKeyPlugin[],\n public methods: Record<string, DidMethodPlugin>\n ) {}\n\n verifyIssuerAlg(did: string, jwtAlg: string): boolean {\n const didMethod = parseDidMethod(did)\n if(didMethod === \"key\") {\n const bytes = parsePrefixedBytes(did)\n for (const keyPlugin of this.keys) {\n if(hasPrefix(bytes, keyPlugin.prefix)) {\n return jwtAlg === keyPlugin.jwtAlg\n }\n }\n } else {\n const maybePlugin = this.methods[didMethod]\n if(maybePlugin) {\n return maybePlugin.checkJwtAlg(did, jwtAlg)\n }\n }\n throw new Error(`DID method not supported by plugins: ${did}`)\n }\n\n async verifySignature(did: string, data: Uint8Array, sig: Uint8Array): Promise<boolean> {\n const didMethod = parseDidMethod(did)\n if(didMethod === \"key\") {\n const bytes = parsePrefixedBytes(did)\n for (const keyPlugin of this.keys) {\n if(hasPrefix(bytes, keyPlugin.prefix)) {\n return keyPlugin.verifySignature(did, data, sig)\n }\n }\n } else {\n const maybePlugin = this.methods[didMethod]\n if (maybePlugin) {\n return maybePlugin.verifySignature(did, data, sig)\n }\n }\n throw new Error(`DID method not supported by plugins: ${did}`)\n }\n}\n\nexport default Plugins\n\nconst hasPrefix = (\n prefixedKey: Uint8Array,\n prefix: Uint8Array\n): boolean => {\n return uint8arrays.equals(prefix, prefixedKey.subarray(0, prefix.byteLength))\n}\n\nconst BASE58_DID_PREFIX = \"did:key:z\"\n\n// @TODO would be better to follow the actual varint spec here (instead of guess & check):\n// https://github.com/multiformats/unsigned-varint \nconst parsePrefixedBytes = (did: string): Uint8Array => {\n if(!did.startsWith(BASE58_DID_PREFIX)) {\n throw new Error(`Not a valid base58 formatted did:key: ${did}`)\n } \n return uint8arrays.fromString(\n did.slice(BASE58_DID_PREFIX.length),\n \"base58btc\"\n )\n}\n\nconst parseDidMethod = (did: string) => {\n const parts = did.split(\":\")\n if(parts[0] !== \"did\") {\n throw new Error(`Not a DID: ${did}`)\n }\n if(parts[1].length < 1) {\n throw new Error(`No DID method included: ${did}`)\n }\n return parts[1]\n}","import Plugins from \"./plugins.js\"\nimport * as token from \"./token.js\"\nimport * as verifyLib from \"./verify.js\"\nimport * as attenuation from \"./attenuation.js\"\nimport mkBuilderClass from \"./builder.js\"\nimport mkStoreClass from \"./store.js\"\n\nexport * from \"./attenuation.js\"\nexport * from \"./builder.js\"\nexport * from \"./store.js\"\nexport * from \"./token.js\"\nexport * from \"./types.js\"\nexport * from \"./verify.js\"\nexport * from \"./plugins.js\"\nexport * from \"./util.js\"\n\nexport * as capability from \"./capability/index.js\"\nexport * as ability from \"./capability/ability.js\"\n\nexport { ResourcePointer, isResourcePointer } from \"./capability/resource-pointer.js\"\nexport { Ability, isAbility, Superuser, SUPERUSER } from \"./capability/ability.js\"\nexport { Capability, EncodedCapability, isCapability } from \"./capability/index.js\"\n\nexport const getPluginInjectedApi = (plugins: Plugins) => {\n const build = token.build(plugins)\n const sign = token.sign(plugins)\n const signWithKeypair = token.signWithKeypair(plugins)\n const validate = token.validate(plugins)\n const validateProofs = token.validateProofs(plugins)\n const verify = verifyLib.verify(plugins)\n const delegationChains = attenuation.delegationChains(plugins)\n const Builder = mkBuilderClass(plugins)\n const Store = mkStoreClass(plugins)\n\n return {\n build,\n sign,\n signWithKeypair,\n validate,\n validateProofs,\n verify,\n delegationChains,\n Builder,\n Store\n }\n}","import { Plugins } from \"@ucans/core\"\nimport { ed25519Plugin } from \"./ed25519/plugin.js\"\nimport { p256Plugin } from \"./p256/plugin.js\"\nimport { rsaPlugin, rsaOldPlugin } from \"./rsa/plugin.js\"\n\nexport const defaults = new Plugins(\n [ed25519Plugin, p256Plugin, rsaPlugin, rsaOldPlugin],\n {},\n)","import * as plugins from \"@ucans/default-plugins\"\nimport * as core from \"@ucans/core\"\n\nexport * from \"@ucans/core\"\nexport * from \"@ucans/default-plugins\"\n\nconst injected = core.getPluginInjectedApi(plugins.defaults)\n\nexport const build = injected.build\nexport const sign = injected.sign\nexport const signWithKeypair = injected.signWithKeypair\nexport const validate = injected.validate\nexport const validateProofs = injected.validateProofs\nexport const verify = injected.verify\nexport const Builder = injected.Builder\nexport const Store = injected.Store\nexport const delegationChains = injected.delegationChains\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefix.codePointAt(0) as number\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n // Build the character lookup table:\n const codes: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n","import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import * as ucans from '@ucans/ucans'\nimport { Logger } from 'besonders-logger'\nimport { CID } from 'multiformats'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.DEBUG) // eslint-disable-line no-unused-vars\n\nexport async function storeCar(car: Blob, token: ucans.Ucan | string): Promise<CID> {\n\t// const ucanInfo = await ucans.validate(ucanToken)\n\tconst isUcan = typeof token !== 'string'\n\n\t// Docs: https://nft.storage/api-docs/#operations-NFT_Storage-upload\n\tconst result = await (await fetch('https://api.nft.storage/upload', {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\t'Authorization': `Bearer ${isUcan ? ucans.encode(token) : token}`,\n\t\t\t'Content-Type': `application/car`,\n\t\t\t'x-agent-did': isUcan ? token.payload.iss : undefined,\n\t\t},\n\t\tbody: car,\n\t})).json()\n\tLOG('[storeCar] result', { result, isUcan })\n\tif (!result.ok) throw new Error(`Failed to upload` + JSON.stringify(result.error))\n\treturn CID.parse(result.value.cid)\n}\n\nexport async function createRequestToken(\n\tkeypair: ucans.DidableKey,\n\tserviceDID: string,\n\tucanToken: ucans.Ucan,\n) {\n\tDEBUG(`[createRequestToken] `, { keypair, ucanToken })\n\t// we want to include the capabilities of the parent token in our request token\n\t// so we validate the parent token to extract the payload and copy over the capabilities\n\t// // the `att` field contains the capabilities we need for uploading\n\tconst payload = ucanToken.payload\n\treturn ucans.build({\n\t\tissuer: keypair,\n\t\taudience: serviceDID,\n\t\tcapabilities: (payload as any).att, // .map(att => ucans.capability.parse(att)),\n\t\tproofs: [ucans.encode(ucanToken)],\n\t})\n}\nexport async function registerDid(apiKey: string, did: string) {\n\tDEBUG(`Registering`, { did })\n\tconst result = await (await fetch('https://api.nft.storage/user/did', {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\t'Authorization': `Bearer ${apiKey}`,\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tdid,\n\t\t}),\n\t})).json()\n\tDEBUG(`Register DID result`, result)\n\tif (!result.ok) throw new Error(`Failed to register DID ` + JSON.stringify(result.error))\n}\nexport async function getRootUcan(apiKey: string) {\n\tDEBUG(`Get root UCAN`, { apiKey })\n\tconst result = await (await fetch('https://api.nft.storage/ucan/token', {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\t'Authorization': `Bearer ${apiKey}`,\n\t\t},\n\t})).json()\n\tDEBUG(`Get root UCAN result`, result)\n\tif (!result.ok) throw new Error(`Failed get root UCAN ` + JSON.stringify(result.error))\n\treturn ucans.validate(result.value)\n}\n\n// import { build } from 'ucan-storage/ucan-storage'\n\n// // The DID for the storage service. In real code, you should obtain this from the service you're targetting.\n// const serviceDID = 'did:key:a-fake-service-did'\n\n// async function createRequestToken(parentUCAN, issuerKeyPair) {\n// \t// we want to include the capabilities of the parent token in our request token\n// \t// so we validate the parent token to extract the payload and copy over the capabilities\n// \tconst { payload } = await validate(parentUCAN)\n\n// \t// the `att` field contains the capabilities we need for uploading\n// \tconst { att } = payload\n\n// \treturn build({\n// \t\tissuer: issuerKeyPair,\n// \t\taudience: serviceDID,\n// \t\tcapabilities: att,\n// \t\tproofs: [parentUcan],\n// \t})\n// }\n"],"mappings":"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","names":["QUOTA","BrowserRandomSource","browserCrypto","length","out","i","exports","wipe","array","i","exports","wipe_1","NodeRandomSource","__require","nodeCrypto","length","buffer","out","exports","browser_1","node_1","SystemRandomSource","length","exports","imulShim","a","b","ah","al","bh","bl","exports","add","sub","rotl","x","n","rotr","isIntegerShim","int_1","readInt16BE","array","offset","exports","readUint16BE","readInt16LE","readUint16LE","writeUint16BE","value","out","writeUint16LE","readInt32BE","readUint32BE","readInt32LE","readUint32LE","writeUint32BE","writeUint32LE","readInt64BE","hi","lo","readUint64BE","readInt64LE","readUint64LE","writeUint64BE","writeUint64LE","readUintBE","bitLength","result","mul","i","readUintLE","writeUintBE","div","writeUintLE","readFloat32BE","view","readFloat32LE","readFloat64BE","readFloat64LE","writeFloat32BE","writeFloat32LE","writeFloat64BE","writeFloat64LE","system_1","binary_1","wipe_1","exports","randomBytes","length","prng","randomUint32","buf","result","ALPHANUMERIC","randomString","charset","out","charsLen","maxByte","i","randomByte","randomStringForEntropy","bits","binary_1","wipe_1","exports","SHA512","data","dataLength","dataPos","hashBlocks","out","bytesHashed","left","bitLenHi","bitLenLo","padLength","i","savedState","K","wh","wl","hh","hl","m","pos","len","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","h","l","th","tl","a","b","c","d","j","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","hash","digest","random_1","sha512_1","wipe_1","exports","gf","init","r","i","_9","gf0","gf1","D","D2","X","Y","I","set25519","a","car25519","o","c","v","sel25519","p","q","b","t","pack25519","n","m","j","verify32","x","y","d","neq25519","par25519","unpack25519","add","sub","mul","t0","t1","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","square","inv25519","pow2523","edadd","e","f","g","h","cswap","pack","tx","ty","zi","scalarmult","s","scalarbase","generateKeyPairFromSeed","seed","publicKey","secretKey","generateKeyPair","prng","result","extractPublicKeyFromSecretKey","L","modL","carry","k","reduce","sign","message","signature","hs","unpackneg","chk","num","den","den2","den4","den6","verify","convertPublicKeyToX25519","z","convertSecretKeyToX25519","require_BigInteger","__commonJSMin","exports","module","bigInt","undefined","BASE","LOG_BASE","MAX_INT","MAX_INT_ARR","smallToArray","DEFAULT_ALPHABET","supportsNativeBigInt","Integer","v","radix","alphabet","caseSensitive","parseValue","parseBase","BigInteger","value","sign","SmallInteger","NativeBigInt","isPrecise","n","arrayToSmall","arr","trim","length","compareAbs","i","createArray","x","truncate","add","a","b","l_a","l_b","r","carry","base","sum","addAny","addSmall","l","subtract","a_l","b_l","borrow","difference","subtractAny","subtractSmall","small","multiplyLong","product","a_i","b_j","j","multiplySmall","shiftLeft","multiplyKaratsuba","y","d","c","ac","bd","abcd","useKaratsuba","l1","l2","abs","multiplySmallAndArray","square","a_j","divMod1","result","divisorMostSignificantDigit","lambda","remainder","divisor","quotientDigit","shift","q","divModSmall","divMod2","part","guess","xlen","highx","highy","check","quotient","divModAny","self","comparison","qSign","mod","mSign","_0","_1","_2","exp","isBasicPrime","millerRabinTest","nPrev","t","next","strict","isPrime","bits","logN","iterations","rng","newT","newR","lastT","lastR","powersOfTwo","powers2Length","highestPower2","shift_isSmall","remQuo","bitwise","fn","xSign","ySign","xRem","yRem","xDigit","yDigit","xDivMod","yDivMod","LOBMASK_I","LOBMASK_BI","roughLOB","integerLogarithm","tmp","p","e","max","min","gcd","lcm","randBetween","usedRNG","low","high","range","digits","toBase","restricted","top","digit","text","absBase","alphabetValues","isNegative","start","parseBaseFromArray","val","pow","stringify","neg","out","left","divmod","toBaseString","str","zeros","parseStringValue","split","decimalPlace","isValid","parseNumberValue","concat","arrays","length","acc","curr","output","offset","arr","equals","a","b","i","identity_exports","__export","identity","base","ALPHABET","name","BASE_MAP","j","x","xc","BASE","LEADER","FACTOR","iFACTOR","encode","source","zeroes","length","pbegin","pend","size","b58","carry","i","it1","it2","str","decodeUnsafe","psz","b256","it3","it4","vch","decode","string","buffer","src","_brrp__multiformats_scope_baseX","base_x_default","empty","equals","aa","bb","ii","coerce","o","fromString","str","toString","b","Encoder","name","prefix","baseEncode","bytes","Decoder","baseDecode","text","decoder","or","ComposedDecoder","decoders","input","left","right","Codec","from","encode","decode","baseX","alphabet","base_x_default","coerce","string","bitsPerChar","codes","i","end","out","bits","buffer","written","value","data","pad","mask","rfc4648","identity","from","buf","toString","str","fromString","base2_exports","__export","base2","base2","rfc4648","base8_exports","__export","base8","base8","rfc4648","base10_exports","__export","base10","base10","baseX","base16_exports","__export","base16","base16upper","base16","rfc4648","base16upper","base32_exports","__export","base32","base32hex","base32hexpad","base32hexpadupper","base32hexupper","base32pad","base32padupper","base32upper","base32z","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36_exports","__export","base36","base36upper","base36","baseX","base36upper","base58_exports","__export","base58btc","base58flickr","base58btc","baseX","base58flickr","base64_exports","__export","base64","base64pad","base64url","base64urlpad","base64","rfc4648","base64pad","base64url","base64urlpad","base256emoji_exports","__export","base256emoji","alphabet","alphabetBytesToChars","p","c","i","alphabetCharsToBytes","encode","data","decode","str","byts","char","byt","base256emoji","from","sha2_browser_exports","__export","sha256","sha512","encode_1","encode","MSB","REST","MSBALL","INT","num","out","offset","oldOffset","decode","read","MSB$1","REST$1","buf","res","shift","counter","b","l","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","value","varint","_brrp_varint","varint_default","decode","data","offset","varint_default","encodeTo","int","target","encodingLength","create","code","digest","size","sizeOffset","encodingLength","digestOffset","bytes","encodeTo","Digest","decode","multihash","coerce","equals","a","b","from","name","code","encode","Hasher","input","result","create","digest","sha","name","data","sha256","from","sha512","identity_exports","__export","identity","code","name","encode","coerce","digest","input","create","identity","textEncoder","textDecoder","CID","_CID","version","code","multihash","bytes","hidden","readonly","DAG_PB_CODE","SHA_256_CODE","digest","create","other","equals","base","_baseCache","toStringV0","base58btc","toStringV1","base32","value","deprecate","IS_CID_DEPRECATION","cidSymbol","encodeCID","decode","cid","remainder","specs","prefixSize","multihashBytes","coerce","digestBytes","Digest","initialBytes","offset","next","i","length","codec","multihashCode","digestSize","size","multihashSize","source","prefix","parseCIDtoBytes","decoder","cache","codeOffset","encodingLength","hashOffset","encodeTo","range","message","bases","identity_exports","base2_exports","base8_exports","base10_exports","base16_exports","base32_exports","base36_exports","base58_exports","base64_exports","base256emoji_exports","hashes","sha2_browser_exports","createCodec","name","prefix","encode","decode","string","buf","str","ascii","i","BASES","bases","bases_default","fromString","string","encoding","base","bases_default","toString","array","encoding","base","bases_default","ed25519","EDWARDS_DID_PREFIX","BLS_DID_PREFIX","P256_DID_PREFIX","P384_DID_PREFIX","P521_DID_PREFIX","RSA_DID_PREFIX","RSA_DID_PREFIX_OLD","BASE58_DID_PREFIX","keyBytesFromDid","did","expectedPrefix","BASE58_DID_PREFIX","didWithoutPrefix","bytes","fromString","hasPrefix","hasPrefix","prefixedKey","prefix","equals","didToPublicKey","did","keyBytesFromDid","EDWARDS_DID_PREFIX","_globalReference","webcrypto","RSA_ALG","DEFAULT_HASH_ALG","SALT_LEGNTH","importKey","key","__awaiter","webcrypto","RSA_ALG","DEFAULT_HASH_ALG","verify","pubKey","msg","sig","__awaiter","webcrypto","RSA_ALG","SALT_LEGNTH","importKey","didToPublicKey","did","keyBytes","keyBytesFromDid","RSA_DID_PREFIX","convertRSAPublicKeyToSubjectPublicKeyInfo","oldDidToPublicKey","RSA_DID_PREFIX_OLD","SPKI_PARAMS_ENCODED","ASN_SEQUENCE_TAG","ASN_BITSTRING_TAG","convertRSAPublicKeyToSubjectPublicKeyInfo","rsaPublicKey","bitStringEncoded","concat","asn1DERLengthEncode","asn1DERLengthEncode","length","octets","import_big_integer","ALG","DEFAULT_CURVE","DEFAULT_HASH_ALG","importKey","key","__awaiter","webcrypto","ALG","DEFAULT_CURVE","verify","pubKey","msg","sig","__awaiter","webcrypto","ALG","DEFAULT_HASH_ALG","importKey","didToPublicKey","did","keyBytes","keyBytesFromDid","P256_DID_PREFIX","decompressP256Pubkey","decompressP256Pubkey","compressed","two","bigInt","prime","b","pIdent","signY","x","xBig","toString","maybeY","yBig","y","fromString","offset","yPadded","concat","ed25519","ed25519Plugin","EDWARDS_DID_PREFIX","did","data","sig","__awaiter","publicKey","didToPublicKey","rsaPlugin","RSA_DID_PREFIX","did","data","sig","__awaiter","publicKey","didToPublicKey","verify","rsaOldPlugin","RSA_DID_PREFIX_OLD","oldDidToPublicKey","p256Plugin","P256_DID_PREFIX","did","data","sig","__awaiter","publicKey","didToPublicKey","verify","CHARS","generateNonce","len","nonce","i","hasProp","data","prop","isRecord","isIterable","obj","isAsyncIterable","first","it","isIterable","elem","isAsyncIterable","__awaiter","it_2","__asyncValues","it_2_1","isSemVer","obj","isRecord","hasProp","NUM_REGEX","matchesRegex","regex","str","m","parse","version","sv","parts","_a","_b","_c","major","minor","patch","part","format","semver","GT","EQ","LT","comparePart","left","right","compare","l","lt","gte","SUPERUSER","SEPARATOR","isAbility","obj","SUPERUSER","isRecord","hasProp","s","joinSegments","segments","SEPARATOR","encode","ability","SUPERUSER","parse","namespace","SEPARATOR","isResourcePointer","obj","isRecord","hasProp","SUPERUSER","my","resource","encode","pointer","SEPARATOR","parse","scheme","hierPart","isCapability","obj","isRecord","hasProp","isResourcePointer","isAbility","isEncodedCapability","my","resource","SUPERUSER","encode","cap","parse","isKeypair","obj","isRecord","hasProp","isUcanHeader","isSemVer","isUcanPayload","a","isCapability","isEncodedCapability","str","VERSION_0_3","isUcanHeader_0_3_0","obj","isRecord","hasProp","isUcanPayload_0_3_0","handleCompatibility","header","payload","fail","place","reason","version","lt","gte","parse","isUcanHeader","isUcanPayload","SUPERUSER","my","resources","rscKey","TYPE","VERSION","build","plugins","params","keypair","payload","buildPayload","signWithKeypair","issuer","audience","capabilities","lifetimeInSeconds","expiration","notBefore","facts","proofs","addNonce","currentTimeInSeconds","exp","generateNonce","sign","jwtAlg","signFn","__awaiter","header","encodedHeader","encodeHeader","encodedPayload","encodePayload","signedData","toSign","fromString","sig","toString","data","encode","ucan","headerFormatted","format","payloadWithEncodedCaps","parse","encodedUcan","signature","headerJson","headerObject","payloadJson","payloadObject","handleCompatibility","parsedAttenuations","acc","cap","isEncodedCapability","isCapability","validate","opts","checkIssuer","checkSignature","checkIsExpired","checkIsTooEarly","sigBytes","isExpired","isTooEarly","validateProofs","checkAddressing","checkTimeBoundsSubset","checkVersionMonotonic","prf","proof","__await","lt","e","delegationChains","plugins","semantics","ucan","isRevoked","__awaiter","__await","encode","__asyncDelegator","__asyncValues","capabilitiesFromParenthood","capabilitiesFromDelegation","rootIssuer","delegationChain","equalCanDelegate","parentResource","childResource","parentAbility","childAbility","SUPERUSER","acc","v","capabilityCanBeDelegated","capability","fromDelegationChain","canDelegate","ownershipScope","ownershipCanBeDelegated","did","scope","parentScope","proofIndex","_b","validateProofs","_c","proof","handleAsDelegation","handlePrfDelegation","handleNormalDelegation","e","error","split","scheme","ownershipDID","parentCapability","childCapability","ok","k","err","e","verify","plugins","ucan","options","__awaiter","audience","requiredCapabilities","semantics","_b","equalCanDelegate","isRevoked","_c","checkFacts","_d","req","isCapability","decoded","validate","errors","remaining","proven","loop","_e","__asyncValues","delegationChains","_f","delegationChain","expected","capabilityCanBeDelegated","rootIssuer","isBuildableState","obj","isRecord","hasProp","isKeypair","isCapabilityLookupCapableState","mkBuilderClass","plugins","Builder","state","defaultable","issuer","audience","seconds","expiration","notBeforeTimestamp","fact","facts","fct","capability","capabilities","isCapability","requiredCapability","storeOrProof","semantics","isProof","proof","ucan","capabilityCanBeDelegated","p","encode","store","result","first","ucanEncoded","buildPayload","payload","signWithKeypair","builder_default","mkStoreClass","plugins","Store","knownSemantics","index","tokens","store","tokens_1","__asyncValues","tokens_1_1","encodedUcan","ucan","validate","audience","byAudience","_b","encoded","encode","stored","chains","_c","delegationChains","_d","delegationChain","_a","elem","predicate","requiredCapability","requiredIssuer","cache","cacheElement","capabilityCanBeDelegated","rootIssuer","store_default","Plugins","keys","methods","did","jwtAlg","didMethod","parseDidMethod","bytes","parsePrefixedBytes","keyPlugin","hasPrefix","maybePlugin","data","sig","hasPrefix","prefixedKey","prefix","equals","BASE58_DID_PREFIX","parsePrefixedBytes","did","fromString","parseDidMethod","parts","getPluginInjectedApi","plugins","build","sign","signWithKeypair","validate","validateProofs","verify","delegationChains","Builder","builder_default","Store","store_default","defaults","Plugins","ed25519Plugin","p256Plugin","rsaPlugin","rsaOldPlugin","injected","getPluginInjectedApi","defaults","build","sign","signWithKeypair","validate","validateProofs","verify","Builder","Store","delegationChains","empty","equals","aa","bb","ii","coerce","o","base","ALPHABET","name","BASE_MAP","j","x","xc","BASE","LEADER","FACTOR","iFACTOR","encode","source","zeroes","length","pbegin","pend","size","b58","carry","i","it1","it2","str","decodeUnsafe","psz","b256","it3","it4","vch","decode","string","buffer","src","_brrp__multiformats_scope_baseX","base_x_default","Encoder","name","prefix","baseEncode","bytes","Decoder","baseDecode","text","decoder","or","ComposedDecoder","decoders","input","left","right","Codec","from","encode","decode","baseX","alphabet","base_x_default","coerce","string","bitsPerChar","codes","i","end","out","bits","buffer","written","value","data","pad","mask","rfc4648","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base58btc","baseX","base58flickr","encode_1","encode","MSB","REST","MSBALL","INT","num","out","offset","oldOffset","decode","read","MSB$1","REST$1","buf","res","shift","counter","b","l","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","value","varint","_brrp_varint","varint_default","decode","data","offset","varint_default","encodeTo","int","target","encodingLength","create","code","digest","size","sizeOffset","encodingLength","digestOffset","bytes","encodeTo","Digest","decode","multihash","coerce","equals","a","b","data","format","link","base","bytes","version","toStringV0","baseCache","base58btc","toStringV1","base32","cache","baseCache","cid","CID","_CID","version","code","multihash","bytes","DAG_PB_CODE","SHA_256_CODE","digest","create","other","self","unknown","equals","base","format","input","value","encodeCID","cidSymbol","decode","remainder","specs","prefixSize","multihashBytes","coerce","digestBytes","Digest","initialBytes","offset","next","i","length","codec","multihashCode","digestSize","size","multihashSize","source","prefix","parseCIDtoBytes","decoder","base58btc","base32","toStringV0","toStringV1","codeOffset","encodingLength","hashOffset","encodeTo","WARN","LOG","DEBUG","VERBOSE","ERROR","E","storeCar","car","token","isUcan","result","encode","CID","createRequestToken","keypair","serviceDID","ucanToken","payload","build","registerDid","apiKey","did","getRootUcan","validate"]}