{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["// TODO: Web assembly is more advantageous for large inputs. Creating a web\n// assembly version.\n//\n// benchmark with 4B input, 300000 iterations:\n//   xsalsa20: 98.654ms\n//   wasm: 139.835ms\n//\n// benchmark with 4096B input, 30000 iterations:\n//   xsalsa20: 804.314ms\n//   wasm: 325.942ms\n//\n// benchmark with 41943040B input, 3 iterations:\n//   xsalsa20: 828.65ms\n//   wasm: 332.185ms\n\n// IE11 support\ndeclare global {\n  interface WindowOrWorkerGlobalScope {\n    readonly msCrypto: Crypto;\n  }\n}\n\nexport default class XSalsa20CSPRNG {\n  private xsalsa: XSalsa20GeneratorInt32;\n\n  constructor() {\n    const buf = new Uint8Array(24 + 32);\n\n    // IE11 does support web workers but Web Crypto API is not available inside\n    // Web Workers. So we just use window.crypto instead of globalThis.crypto\n    //\n    // IE11 does not support `globalThis`. So `window.msCrypto` should come\n    // first.\n    const crypto =\n      typeof window !== \"undefined\" ? window.msCrypto || window.crypto : globalThis.crypto;\n    crypto.getRandomValues(buf);\n\n    const nonce = buf.slice(0, 24);\n    const key = buf.slice(24);\n    this.xsalsa = xsalsa20GeneratorInt32(nonce, key);\n  }\n\n  static of(nonce: Uint8Array, key: Uint8Array): XSalsa20CSPRNG {\n    const self = Object.create(XSalsa20CSPRNG.prototype);\n    self.xsalsa = xsalsa20GeneratorInt32(nonce, key);\n    return self;\n  }\n\n  randomInt32(): number {\n    return this.xsalsa.next().value;\n  }\n\n  randomUint32(): number {\n    return this.xsalsa.next().value + 2 ** 31;\n  }\n\n  uniformInt(exclusive_upper_bound: number): number {\n    if (exclusive_upper_bound < 2) return 0;\n\n    const min = 2 ** 32 % exclusive_upper_bound;\n    let r: number;\n    do {\n      r = this.randomUint32();\n    } while (r < min);\n    return r % exclusive_upper_bound;\n  }\n}\n\ntype XSalsa20Generator = Generator<Uint8Array, never, undefined>;\nfunction* xsalsa20Generator(nonce: Uint8Array, key: Uint8Array): XSalsa20Generator {\n  const s = new Uint8Array(32);\n  const z = new Uint8Array(16);\n  // prettier-ignore\n  const SIGMA = new Uint8Array([\n    0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x20, 0x33,\n    0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6b,\n  ])\n\n  core_hsalsa20(s, nonce, key, SIGMA);\n  for (let i = 0; i < 8; i++) z[i] = nonce[i + 16];\n\n  while (true) {\n    const output = new Uint8Array(64);\n    core_salsa20(output, z, s, SIGMA);\n    yield output;\n\n    let u = 1;\n    for (let i = 8; i < 16; i++) {\n      u += (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n  }\n}\n\ntype XSalsa20GeneratorInt32 = Generator<number, never, undefined>;\nfunction* xsalsa20GeneratorInt32(nonce: Uint8Array, key: Uint8Array): XSalsa20GeneratorInt32 {\n  const generator = xsalsa20Generator(nonce, key);\n\n  while (true) {\n    const b = generator.next().value;\n    // prettier-ignore\n    yield* [\n      b[ 0] | b[ 1] << 8 | b[ 2] << 16 | b[ 3] << 24,\n      b[ 4] | b[ 5] << 8 | b[ 6] << 16 | b[ 7] << 24,\n      b[ 8] | b[ 9] << 8 | b[10] << 16 | b[11] << 24,\n      b[12] | b[13] << 8 | b[14] << 16 | b[15] << 24,\n      b[16] | b[17] << 8 | b[18] << 16 | b[19] << 24,\n      b[20] | b[21] << 8 | b[22] << 16 | b[23] << 24,\n      b[24] | b[25] << 8 | b[26] << 16 | b[27] << 24,\n      b[28] | b[29] << 8 | b[30] << 16 | b[31] << 24,\n      b[32] | b[33] << 8 | b[34] << 16 | b[35] << 24,\n      b[36] | b[37] << 8 | b[38] << 16 | b[39] << 24,\n      b[40] | b[41] << 8 | b[42] << 16 | b[43] << 24,\n      b[44] | b[45] << 8 | b[46] << 16 | b[47] << 24,\n      b[48] | b[49] << 8 | b[50] << 16 | b[51] << 24,\n      b[52] | b[53] << 8 | b[54] << 16 | b[55] << 24,\n      b[56] | b[57] << 8 | b[58] << 16 | b[59] << 24,\n      b[60] | b[61] << 8 | b[62] << 16 | b[63] << 24,\n    ]\n  }\n}\n\nexport class XSalsa20 {\n  private xsalsa: XSalsa20Generator;\n  private buffer: Uint8Array;\n\n  constructor(nonce: Uint8Array, key: Uint8Array) {\n    // Check parameter\n    if (nonce.length !== 24) throw new Error(\"nonce must be 24 bytes\");\n    if (key.length !== 32) throw new Error(\"key must be 32 bytes\");\n\n    // Initialize\n    this.xsalsa = xsalsa20Generator(nonce, key);\n    this.buffer = new Uint8Array(0);\n  }\n\n  stream(length: number): Uint8Array {\n    let output: Uint8Array;\n    let counter: number;\n\n    const bufLength = this.buffer.length;\n    if (bufLength > 0) {\n      if (length < bufLength) {\n        output = this.buffer.slice(0, length);\n        this.buffer = this.buffer.slice(length);\n        return output;\n      } else if (length === bufLength) {\n        output = this.buffer;\n        this.buffer = new Uint8Array(0);\n        return output;\n      } else {\n        output = new Uint8Array(length);\n        output.set(this.buffer);\n        counter = bufLength;\n\n        this.buffer = new Uint8Array(0);\n      }\n    } else {\n      output = new Uint8Array(length);\n      counter = 0;\n    }\n\n    while (length - counter >= 64) {\n      output.set(this.xsalsa.next().value, counter);\n      counter += 64;\n    }\n    const remain = length - counter;\n    if (remain > 0) {\n      const buffer = this.xsalsa.next().value;\n      output.set(buffer.slice(0, remain), counter);\n      this.buffer = buffer.slice(remain);\n    }\n\n    return output;\n  }\n\n  update(input: Uint8Array, output: Uint8Array = new Uint8Array(input.length)): Uint8Array {\n    const stream = this.stream(input.length);\n    for (let i = 0; i < input.length; ++i) output[i] = input[i] ^ stream[i];\n\n    // Return\n    return output;\n  }\n}\n\n// below methods are ported from tweet nacl\nfunction core_salsa20(o: Uint8Array, p: Uint8Array, k: Uint8Array, c: Uint8Array): void {\n  // prettier-ignore\n  const\n    j0  = c[ 0] | (c[ 1] << 8) | (c[ 2] << 16) | (c[ 3] << 24),\n    j1  = k[ 0] | (k[ 1] << 8) | (k[ 2] << 16) | (k[ 3] << 24),\n    j2  = k[ 4] | (k[ 5] << 8) | (k[ 6] << 16) | (k[ 7] << 24),\n    j3  = k[ 8] | (k[ 9] << 8) | (k[10] << 16) | (k[11] << 24),\n    j4  = k[12] | (k[13] << 8) | (k[14] << 16) | (k[15] << 24),\n    j5  = c[ 4] | (c[ 5] << 8) | (c[ 6] << 16) | (c[ 7] << 24),\n    j6  = p[ 0] | (p[ 1] << 8) | (p[ 2] << 16) | (p[ 3] << 24),\n    j7  = p[ 4] | (p[ 5] << 8) | (p[ 6] << 16) | (p[ 7] << 24),\n    j8  = p[ 8] | (p[ 9] << 8) | (p[10] << 16) | (p[11] << 24),\n    j9  = p[12] | (p[13] << 8) | (p[14] << 16) | (p[15] << 24),\n    j10 = c[ 8] | (c[ 9] << 8) | (c[10] << 16) | (c[11] << 24),\n    j11 = k[16] | (k[17] << 8) | (k[18] << 16) | (k[19] << 24),\n    j12 = k[20] | (k[21] << 8) | (k[22] << 16) | (k[23] << 24),\n    j13 = k[24] | (k[25] << 8) | (k[26] << 16) | (k[27] << 24),\n    j14 = k[28] | (k[29] << 8) | (k[30] << 16) | (k[31] << 24),\n    j15 = c[12] | (c[13] << 8) | (c[14] << 16) | (c[15] << 24)\n\n  // prettier-ignore\n  let x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u: number\n\n  for (let i = 0; i < 20; i += 2) {\n    u = (x0 + x12) | 0;\n    x4 ^= (u << 7) | (u >>> 25);\n    u = (x4 + x0) | 0;\n    x8 ^= (u << 9) | (u >>> 23);\n    u = (x8 + x4) | 0;\n    x12 ^= (u << 13) | (u >>> 19);\n    u = (x12 + x8) | 0;\n    x0 ^= (u << 18) | (u >>> 14);\n\n    u = (x5 + x1) | 0;\n    x9 ^= (u << 7) | (u >>> 25);\n    u = (x9 + x5) | 0;\n    x13 ^= (u << 9) | (u >>> 23);\n    u = (x13 + x9) | 0;\n    x1 ^= (u << 13) | (u >>> 19);\n    u = (x1 + x13) | 0;\n    x5 ^= (u << 18) | (u >>> 14);\n\n    u = (x10 + x6) | 0;\n    x14 ^= (u << 7) | (u >>> 25);\n    u = (x14 + x10) | 0;\n    x2 ^= (u << 9) | (u >>> 23);\n    u = (x2 + x14) | 0;\n    x6 ^= (u << 13) | (u >>> 19);\n    u = (x6 + x2) | 0;\n    x10 ^= (u << 18) | (u >>> 14);\n\n    u = (x15 + x11) | 0;\n    x3 ^= (u << 7) | (u >>> 25);\n    u = (x3 + x15) | 0;\n    x7 ^= (u << 9) | (u >>> 23);\n    u = (x7 + x3) | 0;\n    x11 ^= (u << 13) | (u >>> 19);\n    u = (x11 + x7) | 0;\n    x15 ^= (u << 18) | (u >>> 14);\n\n    u = (x0 + x3) | 0;\n    x1 ^= (u << 7) | (u >>> 25);\n    u = (x1 + x0) | 0;\n    x2 ^= (u << 9) | (u >>> 23);\n    u = (x2 + x1) | 0;\n    x3 ^= (u << 13) | (u >>> 19);\n    u = (x3 + x2) | 0;\n    x0 ^= (u << 18) | (u >>> 14);\n\n    u = (x5 + x4) | 0;\n    x6 ^= (u << 7) | (u >>> 25);\n    u = (x6 + x5) | 0;\n    x7 ^= (u << 9) | (u >>> 23);\n    u = (x7 + x6) | 0;\n    x4 ^= (u << 13) | (u >>> 19);\n    u = (x4 + x7) | 0;\n    x5 ^= (u << 18) | (u >>> 14);\n\n    u = (x10 + x9) | 0;\n    x11 ^= (u << 7) | (u >>> 25);\n    u = (x11 + x10) | 0;\n    x8 ^= (u << 9) | (u >>> 23);\n    u = (x8 + x11) | 0;\n    x9 ^= (u << 13) | (u >>> 19);\n    u = (x9 + x8) | 0;\n    x10 ^= (u << 18) | (u >>> 14);\n\n    u = (x15 + x14) | 0;\n    x12 ^= (u << 7) | (u >>> 25);\n    u = (x12 + x15) | 0;\n    x13 ^= (u << 9) | (u >>> 23);\n    u = (x13 + x12) | 0;\n    x14 ^= (u << 13) | (u >>> 19);\n    u = (x14 + x13) | 0;\n    x15 ^= (u << 18) | (u >>> 14);\n  }\n  x0 = (x0 + j0) | 0;\n  x1 = (x1 + j1) | 0;\n  x2 = (x2 + j2) | 0;\n  x3 = (x3 + j3) | 0;\n  x4 = (x4 + j4) | 0;\n  x5 = (x5 + j5) | 0;\n  x6 = (x6 + j6) | 0;\n  x7 = (x7 + j7) | 0;\n  x8 = (x8 + j8) | 0;\n  x9 = (x9 + j9) | 0;\n  x10 = (x10 + j10) | 0;\n  x11 = (x11 + j11) | 0;\n  x12 = (x12 + j12) | 0;\n  x13 = (x13 + j13) | 0;\n  x14 = (x14 + j14) | 0;\n  x15 = (x15 + j15) | 0;\n\n  o[0] = (x0 >>> 0) & 0xff;\n  o[1] = (x0 >>> 8) & 0xff;\n  o[2] = (x0 >>> 16) & 0xff;\n  o[3] = (x0 >>> 24) & 0xff;\n\n  o[4] = (x1 >>> 0) & 0xff;\n  o[5] = (x1 >>> 8) & 0xff;\n  o[6] = (x1 >>> 16) & 0xff;\n  o[7] = (x1 >>> 24) & 0xff;\n\n  o[8] = (x2 >>> 0) & 0xff;\n  o[9] = (x2 >>> 8) & 0xff;\n  o[10] = (x2 >>> 16) & 0xff;\n  o[11] = (x2 >>> 24) & 0xff;\n\n  o[12] = (x3 >>> 0) & 0xff;\n  o[13] = (x3 >>> 8) & 0xff;\n  o[14] = (x3 >>> 16) & 0xff;\n  o[15] = (x3 >>> 24) & 0xff;\n\n  o[16] = (x4 >>> 0) & 0xff;\n  o[17] = (x4 >>> 8) & 0xff;\n  o[18] = (x4 >>> 16) & 0xff;\n  o[19] = (x4 >>> 24) & 0xff;\n\n  o[20] = (x5 >>> 0) & 0xff;\n  o[21] = (x5 >>> 8) & 0xff;\n  o[22] = (x5 >>> 16) & 0xff;\n  o[23] = (x5 >>> 24) & 0xff;\n\n  o[24] = (x6 >>> 0) & 0xff;\n  o[25] = (x6 >>> 8) & 0xff;\n  o[26] = (x6 >>> 16) & 0xff;\n  o[27] = (x6 >>> 24) & 0xff;\n\n  o[28] = (x7 >>> 0) & 0xff;\n  o[29] = (x7 >>> 8) & 0xff;\n  o[30] = (x7 >>> 16) & 0xff;\n  o[31] = (x7 >>> 24) & 0xff;\n\n  o[32] = (x8 >>> 0) & 0xff;\n  o[33] = (x8 >>> 8) & 0xff;\n  o[34] = (x8 >>> 16) & 0xff;\n  o[35] = (x8 >>> 24) & 0xff;\n\n  o[36] = (x9 >>> 0) & 0xff;\n  o[37] = (x9 >>> 8) & 0xff;\n  o[38] = (x9 >>> 16) & 0xff;\n  o[39] = (x9 >>> 24) & 0xff;\n\n  o[40] = (x10 >>> 0) & 0xff;\n  o[41] = (x10 >>> 8) & 0xff;\n  o[42] = (x10 >>> 16) & 0xff;\n  o[43] = (x10 >>> 24) & 0xff;\n\n  o[44] = (x11 >>> 0) & 0xff;\n  o[45] = (x11 >>> 8) & 0xff;\n  o[46] = (x11 >>> 16) & 0xff;\n  o[47] = (x11 >>> 24) & 0xff;\n\n  o[48] = (x12 >>> 0) & 0xff;\n  o[49] = (x12 >>> 8) & 0xff;\n  o[50] = (x12 >>> 16) & 0xff;\n  o[51] = (x12 >>> 24) & 0xff;\n\n  o[52] = (x13 >>> 0) & 0xff;\n  o[53] = (x13 >>> 8) & 0xff;\n  o[54] = (x13 >>> 16) & 0xff;\n  o[55] = (x13 >>> 24) & 0xff;\n\n  o[56] = (x14 >>> 0) & 0xff;\n  o[57] = (x14 >>> 8) & 0xff;\n  o[58] = (x14 >>> 16) & 0xff;\n  o[59] = (x14 >>> 24) & 0xff;\n\n  o[60] = (x15 >>> 0) & 0xff;\n  o[61] = (x15 >>> 8) & 0xff;\n  o[62] = (x15 >>> 16) & 0xff;\n  o[63] = (x15 >>> 24) & 0xff;\n}\n\nfunction core_hsalsa20(o: Uint8Array, p: Uint8Array, k: Uint8Array, c: Uint8Array): void {\n  // prettier-ignore\n  const\n    j0  = c[ 0] | (c[ 1] << 8) | (c[ 2] << 16) | (c[ 3] << 24),\n    j1  = k[ 0] | (k[ 1] << 8) | (k[ 2] << 16) | (k[ 3] << 24),\n    j2  = k[ 4] | (k[ 5] << 8) | (k[ 6] << 16) | (k[ 7] << 24),\n    j3  = k[ 8] | (k[ 9] << 8) | (k[10] << 16) | (k[11] << 24),\n    j4  = k[12] | (k[13] << 8) | (k[14] << 16) | (k[15] << 24),\n    j5  = c[ 4] | (c[ 5] << 8) | (c[ 6] << 16) | (c[ 7] << 24),\n    j6  = p[ 0] | (p[ 1] << 8) | (p[ 2] << 16) | (p[ 3] << 24),\n    j7  = p[ 4] | (p[ 5] << 8) | (p[ 6] << 16) | (p[ 7] << 24),\n    j8  = p[ 8] | (p[ 9] << 8) | (p[10] << 16) | (p[11] << 24),\n    j9  = p[12] | (p[13] << 8) | (p[14] << 16) | (p[15] << 24),\n    j10 = c[ 8] | (c[ 9] << 8) | (c[10] << 16) | (c[11] << 24),\n    j11 = k[16] | (k[17] << 8) | (k[18] << 16) | (k[19] << 24),\n    j12 = k[20] | (k[21] << 8) | (k[22] << 16) | (k[23] << 24),\n    j13 = k[24] | (k[25] << 8) | (k[26] << 16) | (k[27] << 24),\n    j14 = k[28] | (k[29] << 8) | (k[30] << 16) | (k[31] << 24),\n    j15 = c[12] | (c[13] << 8) | (c[14] << 16) | (c[15] << 24)\n\n  // prettier-ignore\n  let x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u: number\n\n  for (let i = 0; i < 20; i += 2) {\n    u = (x0 + x12) | 0;\n    x4 ^= (u << 7) | (u >>> 25);\n    u = (x4 + x0) | 0;\n    x8 ^= (u << 9) | (u >>> 23);\n    u = (x8 + x4) | 0;\n    x12 ^= (u << 13) | (u >>> 19);\n    u = (x12 + x8) | 0;\n    x0 ^= (u << 18) | (u >>> 14);\n\n    u = (x5 + x1) | 0;\n    x9 ^= (u << 7) | (u >>> 25);\n    u = (x9 + x5) | 0;\n    x13 ^= (u << 9) | (u >>> 23);\n    u = (x13 + x9) | 0;\n    x1 ^= (u << 13) | (u >>> 19);\n    u = (x1 + x13) | 0;\n    x5 ^= (u << 18) | (u >>> 14);\n\n    u = (x10 + x6) | 0;\n    x14 ^= (u << 7) | (u >>> 25);\n    u = (x14 + x10) | 0;\n    x2 ^= (u << 9) | (u >>> 23);\n    u = (x2 + x14) | 0;\n    x6 ^= (u << 13) | (u >>> 19);\n    u = (x6 + x2) | 0;\n    x10 ^= (u << 18) | (u >>> 14);\n\n    u = (x15 + x11) | 0;\n    x3 ^= (u << 7) | (u >>> 25);\n    u = (x3 + x15) | 0;\n    x7 ^= (u << 9) | (u >>> 23);\n    u = (x7 + x3) | 0;\n    x11 ^= (u << 13) | (u >>> 19);\n    u = (x11 + x7) | 0;\n    x15 ^= (u << 18) | (u >>> 14);\n\n    u = (x0 + x3) | 0;\n    x1 ^= (u << 7) | (u >>> 25);\n    u = (x1 + x0) | 0;\n    x2 ^= (u << 9) | (u >>> 23);\n    u = (x2 + x1) | 0;\n    x3 ^= (u << 13) | (u >>> 19);\n    u = (x3 + x2) | 0;\n    x0 ^= (u << 18) | (u >>> 14);\n\n    u = (x5 + x4) | 0;\n    x6 ^= (u << 7) | (u >>> 25);\n    u = (x6 + x5) | 0;\n    x7 ^= (u << 9) | (u >>> 23);\n    u = (x7 + x6) | 0;\n    x4 ^= (u << 13) | (u >>> 19);\n    u = (x4 + x7) | 0;\n    x5 ^= (u << 18) | (u >>> 14);\n\n    u = (x10 + x9) | 0;\n    x11 ^= (u << 7) | (u >>> 25);\n    u = (x11 + x10) | 0;\n    x8 ^= (u << 9) | (u >>> 23);\n    u = (x8 + x11) | 0;\n    x9 ^= (u << 13) | (u >>> 19);\n    u = (x9 + x8) | 0;\n    x10 ^= (u << 18) | (u >>> 14);\n\n    u = (x15 + x14) | 0;\n    x12 ^= (u << 7) | (u >>> 25);\n    u = (x12 + x15) | 0;\n    x13 ^= (u << 9) | (u >>> 23);\n    u = (x13 + x12) | 0;\n    x14 ^= (u << 13) | (u >>> 19);\n    u = (x14 + x13) | 0;\n    x15 ^= (u << 18) | (u >>> 14);\n  }\n\n  o[0] = (x0 >>> 0) & 0xff;\n  o[1] = (x0 >>> 8) & 0xff;\n  o[2] = (x0 >>> 16) & 0xff;\n  o[3] = (x0 >>> 24) & 0xff;\n\n  o[4] = (x5 >>> 0) & 0xff;\n  o[5] = (x5 >>> 8) & 0xff;\n  o[6] = (x5 >>> 16) & 0xff;\n  o[7] = (x5 >>> 24) & 0xff;\n\n  o[8] = (x10 >>> 0) & 0xff;\n  o[9] = (x10 >>> 8) & 0xff;\n  o[10] = (x10 >>> 16) & 0xff;\n  o[11] = (x10 >>> 24) & 0xff;\n\n  o[12] = (x15 >>> 0) & 0xff;\n  o[13] = (x15 >>> 8) & 0xff;\n  o[14] = (x15 >>> 16) & 0xff;\n  o[15] = (x15 >>> 24) & 0xff;\n\n  o[16] = (x6 >>> 0) & 0xff;\n  o[17] = (x6 >>> 8) & 0xff;\n  o[18] = (x6 >>> 16) & 0xff;\n  o[19] = (x6 >>> 24) & 0xff;\n\n  o[20] = (x7 >>> 0) & 0xff;\n  o[21] = (x7 >>> 8) & 0xff;\n  o[22] = (x7 >>> 16) & 0xff;\n  o[23] = (x7 >>> 24) & 0xff;\n\n  o[24] = (x8 >>> 0) & 0xff;\n  o[25] = (x8 >>> 8) & 0xff;\n  o[26] = (x8 >>> 16) & 0xff;\n  o[27] = (x8 >>> 24) & 0xff;\n\n  o[28] = (x9 >>> 0) & 0xff;\n  o[29] = (x9 >>> 8) & 0xff;\n  o[30] = (x9 >>> 16) & 0xff;\n  o[31] = (x9 >>> 24) & 0xff;\n}\n"],"mappings":"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"}