{ "version": 3, "sources": ["../node_modules/rfc4648/lib/index.js", "../node_modules/pvtsutils/build/index.js", "../node_modules/@cloudflare/voprf-ts/src/groupTypes.ts", "../node_modules/@cloudflare/voprf-ts/src/util.ts", "../node_modules/@cloudflare/voprf-ts/src/consts.ts", "../node_modules/@cloudflare/voprf-ts/src/oprf.ts", "../node_modules/@cloudflare/voprf-ts/lib/cjs/src/sjcl/index.js", "../node_modules/@cloudflare/voprf-ts/src/groupSjcl.ts", "../node_modules/@cloudflare/voprf-ts/src/cryptoSjcl.ts", "../node_modules/@cloudflare/voprf-ts/src/buildSettings.ts", "../node_modules/@cloudflare/voprf-ts/src/cryptoImpl.ts", "../node_modules/@cloudflare/voprf-ts/src/dleq.ts", "../node_modules/@cloudflare/voprf-ts/src/client.ts", "../node_modules/@cloudflare/voprf-ts/src/server.ts", "../node_modules/@cloudflare/voprf-ts/src/keys.ts", "../node_modules/@cloudflare/voprf-ts/src/index.ts", "../node_modules/rfc4648/lib/index.mjs", "../node_modules/@cloudflare/privacypass-ts/src/auth_scheme/rfc9110.ts", "../node_modules/asn1js/build/index.es.js", "../node_modules/pvutils/build/utils.es.js", "../node_modules/@cloudflare/privacypass-ts/src/util.ts", "../node_modules/@cloudflare/privacypass-ts/src/auth_scheme/private_token.ts", "../node_modules/@cloudflare/privacypass-ts/src/pub_verif_token.ts", "../node_modules/@cloudflare/blindrsa-ts/lib/src/sjcl/index.js", "../node_modules/@cloudflare/blindrsa-ts/src/util.ts", "../node_modules/@cloudflare/blindrsa-ts/src/blindrsa.ts", "../node_modules/@cloudflare/blindrsa-ts/src/prime.ts", "../node_modules/@cloudflare/blindrsa-ts/src/partially_blindrsa.ts", "../node_modules/@cloudflare/blindrsa-ts/src/index.ts", "../node_modules/@cloudflare/privacypass-ts/src/priv_verif_token.ts", "../node_modules/@cloudflare/privacypass-ts/src/issuance.ts", "../node_modules/@cloudflare/privacypass-ts/src/index.ts", "../src/client/index.ts"], "sourcesContent": ["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/* eslint-disable @typescript-eslint/strict-boolean-expressions */\nfunction parse(string, encoding, opts) {\n var _opts$out;\n\n if (opts === void 0) {\n opts = {};\n }\n\n // Build the character lookup table:\n if (!encoding.codes) {\n encoding.codes = {};\n\n for (var i = 0; i < encoding.chars.length; ++i) {\n encoding.codes[encoding.chars[i]] = i;\n }\n } // The string must have a whole number of bytes:\n\n\n if (!opts.loose && string.length * encoding.bits & 7) {\n throw new SyntaxError('Invalid padding');\n } // Count the padding bytes:\n\n\n var end = string.length;\n\n while (string[end - 1] === '=') {\n --end; // If we get a whole number of bytes, there is too much padding:\n\n if (!opts.loose && !((string.length - end) * encoding.bits & 7)) {\n throw new SyntaxError('Invalid padding');\n }\n } // Allocate the output:\n\n\n var out = new ((_opts$out = opts.out) != null ? _opts$out : Uint8Array)(end * encoding.bits / 8 | 0); // Parse the data:\n\n var bits = 0; // Number of bits currently in the buffer\n\n var buffer = 0; // Bits waiting to be written out, MSB first\n\n var written = 0; // Next byte to write\n\n for (var _i = 0; _i < end; ++_i) {\n // Read one character from the string:\n var value = encoding.codes[string[_i]];\n\n if (value === undefined) {\n throw new SyntaxError('Invalid character ' + string[_i]);\n } // Append the bits to the buffer:\n\n\n buffer = buffer << encoding.bits | value;\n bits += encoding.bits; // Write out some bits if the buffer has a byte's worth:\n\n if (bits >= 8) {\n bits -= 8;\n out[written++] = 0xff & buffer >> bits;\n }\n } // Verify that we have received just enough bits:\n\n\n if (bits >= encoding.bits || 0xff & buffer << 8 - bits) {\n throw new SyntaxError('Unexpected end of data');\n }\n\n return out;\n}\nfunction stringify(data, encoding, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n var _opts = opts,\n _opts$pad = _opts.pad,\n pad = _opts$pad === void 0 ? true : _opts$pad;\n var mask = (1 << encoding.bits) - 1;\n var out = '';\n var bits = 0; // Number of bits currently in the buffer\n\n var buffer = 0; // Bits waiting to be written out, MSB first\n\n for (var i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = buffer << 8 | 0xff & data[i];\n bits += 8; // Write out as much as we can:\n\n while (bits > encoding.bits) {\n bits -= encoding.bits;\n out += encoding.chars[mask & buffer >> bits];\n }\n } // Partial character:\n\n\n if (bits) {\n out += encoding.chars[mask & buffer << encoding.bits - bits];\n } // Add padding characters until we hit a byte boundary:\n\n\n if (pad) {\n while (out.length * encoding.bits & 7) {\n out += '=';\n }\n }\n\n return out;\n}\n\n/* eslint-disable @typescript-eslint/strict-boolean-expressions */\nvar base16Encoding = {\n chars: '0123456789ABCDEF',\n bits: 4\n};\nvar base32Encoding = {\n chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bits: 5\n};\nvar base32HexEncoding = {\n chars: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bits: 5\n};\nvar base64Encoding = {\n chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bits: 6\n};\nvar base64UrlEncoding = {\n chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bits: 6\n};\nvar base16 = {\n parse: function parse$1(string, opts) {\n return parse(string.toUpperCase(), base16Encoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base16Encoding, opts);\n }\n};\nvar base32 = {\n parse: function parse$1(string, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n return parse(opts.loose ? string.toUpperCase().replace(/0/g, 'O').replace(/1/g, 'L').replace(/8/g, 'B') : string, base32Encoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base32Encoding, opts);\n }\n};\nvar base32hex = {\n parse: function parse$1(string, opts) {\n return parse(string, base32HexEncoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base32HexEncoding, opts);\n }\n};\nvar base64 = {\n parse: function parse$1(string, opts) {\n return parse(string, base64Encoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base64Encoding, opts);\n }\n};\nvar base64url = {\n parse: function parse$1(string, opts) {\n return parse(string, base64UrlEncoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base64UrlEncoding, opts);\n }\n};\nvar codec = {\n parse: parse,\n stringify: stringify\n};\n\nexports.base16 = base16;\nexports.base32 = base32;\nexports.base32hex = base32hex;\nexports.base64 = base64;\nexports.base64url = base64url;\nexports.codec = codec;\n", "/*!\n * MIT License\n * \n * Copyright (c) 2017-2022 Peculiar Ventures, LLC\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n */\n\n'use strict';\n\nconst ARRAY_BUFFER_NAME = \"[object ArrayBuffer]\";\nclass BufferSourceConverter {\n static isArrayBuffer(data) {\n return Object.prototype.toString.call(data) === ARRAY_BUFFER_NAME;\n }\n static toArrayBuffer(data) {\n if (this.isArrayBuffer(data)) {\n return data;\n }\n if (data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return this.toUint8Array(data.buffer)\n .slice(data.byteOffset, data.byteOffset + data.byteLength)\n .buffer;\n }\n static toUint8Array(data) {\n return this.toView(data, Uint8Array);\n }\n static toView(data, type) {\n if (data.constructor === type) {\n return data;\n }\n if (this.isArrayBuffer(data)) {\n return new type(data);\n }\n if (this.isArrayBufferView(data)) {\n return new type(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n static isBufferSource(data) {\n return this.isArrayBufferView(data)\n || this.isArrayBuffer(data);\n }\n static isArrayBufferView(data) {\n return ArrayBuffer.isView(data)\n || (data && this.isArrayBuffer(data.buffer));\n }\n static isEqual(a, b) {\n const aView = BufferSourceConverter.toUint8Array(a);\n const bView = BufferSourceConverter.toUint8Array(b);\n if (aView.length !== bView.byteLength) {\n return false;\n }\n for (let i = 0; i < aView.length; i++) {\n if (aView[i] !== bView[i]) {\n return false;\n }\n }\n return true;\n }\n static concat(...args) {\n let buffers;\n if (Array.isArray(args[0]) && !(args[1] instanceof Function)) {\n buffers = args[0];\n }\n else if (Array.isArray(args[0]) && args[1] instanceof Function) {\n buffers = args[0];\n }\n else {\n if (args[args.length - 1] instanceof Function) {\n buffers = args.slice(0, args.length - 1);\n }\n else {\n buffers = args;\n }\n }\n let size = 0;\n for (const buffer of buffers) {\n size += buffer.byteLength;\n }\n const res = new Uint8Array(size);\n let offset = 0;\n for (const buffer of buffers) {\n const view = this.toUint8Array(buffer);\n res.set(view, offset);\n offset += view.length;\n }\n if (args[args.length - 1] instanceof Function) {\n return this.toView(res, args[args.length - 1]);\n }\n return res.buffer;\n }\n}\n\nconst STRING_TYPE = \"string\";\nconst HEX_REGEX = /^[0-9a-f]+$/i;\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[a-zA-Z0-9-_]+$/;\nclass Utf8Converter {\n static fromString(text) {\n const s = unescape(encodeURIComponent(text));\n const uintArray = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) {\n uintArray[i] = s.charCodeAt(i);\n }\n return uintArray.buffer;\n }\n static toString(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let encodedString = \"\";\n for (let i = 0; i < buf.length; i++) {\n encodedString += String.fromCharCode(buf[i]);\n }\n const decodedString = decodeURIComponent(escape(encodedString));\n return decodedString;\n }\n}\nclass Utf16Converter {\n static toString(buffer, littleEndian = false) {\n const arrayBuffer = BufferSourceConverter.toArrayBuffer(buffer);\n const dataView = new DataView(arrayBuffer);\n let res = \"\";\n for (let i = 0; i < arrayBuffer.byteLength; i += 2) {\n const code = dataView.getUint16(i, littleEndian);\n res += String.fromCharCode(code);\n }\n return res;\n }\n static fromString(text, littleEndian = false) {\n const res = new ArrayBuffer(text.length * 2);\n const dataView = new DataView(res);\n for (let i = 0; i < text.length; i++) {\n dataView.setUint16(i * 2, text.charCodeAt(i), littleEndian);\n }\n return res;\n }\n}\nclass Convert {\n static isHex(data) {\n return typeof data === STRING_TYPE\n && HEX_REGEX.test(data);\n }\n static isBase64(data) {\n return typeof data === STRING_TYPE\n && BASE64_REGEX.test(data);\n }\n static isBase64Url(data) {\n return typeof data === STRING_TYPE\n && BASE64URL_REGEX.test(data);\n }\n static ToString(buffer, enc = \"utf8\") {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.ToUtf8String(buf);\n case \"binary\":\n return this.ToBinary(buf);\n case \"hex\":\n return this.ToHex(buf);\n case \"base64\":\n return this.ToBase64(buf);\n case \"base64url\":\n return this.ToBase64Url(buf);\n case \"utf16le\":\n return Utf16Converter.toString(buf, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buf);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static FromString(str, enc = \"utf8\") {\n if (!str) {\n return new ArrayBuffer(0);\n }\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.FromUtf8String(str);\n case \"binary\":\n return this.FromBinary(str);\n case \"hex\":\n return this.FromHex(str);\n case \"base64\":\n return this.FromBase64(str);\n case \"base64url\":\n return this.FromBase64Url(str);\n case \"utf16le\":\n return Utf16Converter.fromString(str, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(str);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static ToBase64(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n if (typeof btoa !== \"undefined\") {\n const binary = this.ToString(buf, \"binary\");\n return btoa(binary);\n }\n else {\n return Buffer.from(buf).toString(\"base64\");\n }\n }\n static FromBase64(base64) {\n const formatted = this.formatString(base64);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64(formatted)) {\n throw new TypeError(\"Argument 'base64Text' is not Base64 encoded\");\n }\n if (typeof atob !== \"undefined\") {\n return this.FromBinary(atob(formatted));\n }\n else {\n return new Uint8Array(Buffer.from(formatted, \"base64\")).buffer;\n }\n }\n static FromBase64Url(base64url) {\n const formatted = this.formatString(base64url);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64Url(formatted)) {\n throw new TypeError(\"Argument 'base64url' is not Base64Url encoded\");\n }\n return this.FromBase64(this.Base64Padding(formatted.replace(/\\-/g, \"+\").replace(/\\_/g, \"/\")));\n }\n static ToBase64Url(data) {\n return this.ToBase64(data).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/\\=/g, \"\");\n }\n static FromUtf8String(text, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.FromBinary(text);\n case \"utf8\":\n return Utf8Converter.fromString(text);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(text);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.fromString(text, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static ToUtf8String(buffer, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.ToBinary(buffer);\n case \"utf8\":\n return Utf8Converter.toString(buffer);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buffer);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.toString(buffer, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static FromBinary(text) {\n const stringLength = text.length;\n const resultView = new Uint8Array(stringLength);\n for (let i = 0; i < stringLength; i++) {\n resultView[i] = text.charCodeAt(i);\n }\n return resultView.buffer;\n }\n static ToBinary(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let res = \"\";\n for (let i = 0; i < buf.length; i++) {\n res += String.fromCharCode(buf[i]);\n }\n return res;\n }\n static ToHex(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let result = \"\";\n const len = buf.length;\n for (let i = 0; i < len; i++) {\n const byte = buf[i];\n if (byte < 16) {\n result += \"0\";\n }\n result += byte.toString(16);\n }\n return result;\n }\n static FromHex(hexString) {\n let formatted = this.formatString(hexString);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isHex(formatted)) {\n throw new TypeError(\"Argument 'hexString' is not HEX encoded\");\n }\n if (formatted.length % 2) {\n formatted = `0${formatted}`;\n }\n const res = new Uint8Array(formatted.length / 2);\n for (let i = 0; i < formatted.length; i = i + 2) {\n const c = formatted.slice(i, i + 2);\n res[i / 2] = parseInt(c, 16);\n }\n return res.buffer;\n }\n static ToUtf16String(buffer, littleEndian = false) {\n return Utf16Converter.toString(buffer, littleEndian);\n }\n static FromUtf16String(text, littleEndian = false) {\n return Utf16Converter.fromString(text, littleEndian);\n }\n static Base64Padding(base64) {\n const padCount = 4 - (base64.length % 4);\n if (padCount < 4) {\n for (let i = 0; i < padCount; i++) {\n base64 += \"=\";\n }\n }\n return base64;\n }\n static formatString(data) {\n return (data === null || data === void 0 ? void 0 : data.replace(/[\\n\\r\\t ]/g, \"\")) || \"\";\n }\n}\nConvert.DEFAULT_UTF8_ENCODING = \"utf8\";\n\nfunction assign(target, ...sources) {\n const res = arguments[0];\n for (let i = 1; i < arguments.length; i++) {\n const obj = arguments[i];\n for (const prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\nfunction combine(...buf) {\n const totalByteLength = buf.map((item) => item.byteLength).reduce((prev, cur) => prev + cur);\n const res = new Uint8Array(totalByteLength);\n let currentPos = 0;\n buf.map((item) => new Uint8Array(item)).forEach((arr) => {\n for (const item2 of arr) {\n res[currentPos++] = item2;\n }\n });\n return res.buffer;\n}\nfunction isEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n\nexports.BufferSourceConverter = BufferSourceConverter;\nexports.Convert = Convert;\nexports.assign = assign;\nexports.combine = combine;\nexports.isEqual = isEqual;\n", null, null, null, null, "/** @fileOverview Javascript cryptography implementation.\n *\n * Crush to remove comments, shorten variable names and\n * generally reduce transmission size.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */\n/*global document, window, escape, unescape, module, require, Uint32Array */\n/**\n * The Stanford Javascript Crypto Library, top-level namespace.\n * @namespace\n */\nvar sjcl = {\n /**\n * Symmetric ciphers.\n * @namespace\n */\n cipher: {},\n /**\n * Hash functions. Right now only SHA256 is implemented.\n * @namespace\n */\n hash: {},\n /**\n * Key exchange functions. Right now only SRP is implemented.\n * @namespace\n */\n keyexchange: {},\n /**\n * Cipher modes of operation.\n * @namespace\n */\n mode: {},\n /**\n * Miscellaneous. HMAC and PBKDF2.\n * @namespace\n */\n misc: {},\n /**\n * Bit array encoders and decoders.\n * @namespace\n *\n * @description\n * The members of this namespace are functions which translate between\n * SJCL's bitArrays and other objects (usually strings). Because it\n * isn't always clear which direction is encoding and which is decoding,\n * the method names are \"fromBits\" and \"toBits\".\n */\n codec: {},\n /**\n * Exceptions.\n * @namespace\n */\n exception: {\n /**\n * Ciphertext is corrupt.\n * @constructor\n */\n corrupt: function (message) {\n this.toString = function () { return \"CORRUPT: \" + this.message; };\n this.message = message;\n },\n /**\n * Invalid parameter.\n * @constructor\n */\n invalid: function (message) {\n this.toString = function () { return \"INVALID: \" + this.message; };\n this.message = message;\n },\n /**\n * Bug or missing feature in SJCL.\n * @constructor\n */\n bug: function (message) {\n this.toString = function () { return \"BUG: \" + this.message; };\n this.message = message;\n },\n /**\n * Something isn't ready.\n * @constructor\n */\n notReady: function (message) {\n this.toString = function () { return \"NOT READY: \" + this.message; };\n this.message = message;\n }\n }\n};\n/** @fileOverview Low-level AES implementation.\n *\n * This file contains a low-level implementation of AES, optimized for\n * size and for efficiency on several browsers. It is based on\n * OpenSSL's aes_core.c, a public-domain implementation by Vincent\n * Rijmen, Antoon Bosselaers and Paulo Barreto.\n *\n * An older version of this implementation is available in the public\n * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,\n * Stanford University 2008-2010 and BSD-licensed for liability\n * reasons.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @constructor\n * @param {Array} key The key as an array of 4, 6 or 8 words.\n */\nsjcl.cipher.aes = function (key) {\n if (!this._tables[0][0][0]) {\n this._precompute();\n }\n var i, j, tmp, encKey, decKey, sbox = this._tables[0][4], decTable = this._tables[1], keyLen = key.length, rcon = 1;\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new sjcl.exception.invalid(\"invalid aes key size\");\n }\n this._key = [encKey = key.slice(0), decKey = []];\n // schedule encryption keys\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1];\n // apply sbox\n if (i % keyLen === 0 || (keyLen === 8 && i % keyLen === 4)) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255];\n // shift rows and add rcon\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n encKey[i] = encKey[i - keyLen] ^ tmp;\n }\n // schedule decryption keys\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n }\n else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^\n decTable[1][sbox[tmp >> 16 & 255]] ^\n decTable[2][sbox[tmp >> 8 & 255]] ^\n decTable[3][sbox[tmp & 255]];\n }\n }\n};\nsjcl.cipher.aes.prototype = {\n // public\n /* Something like this might appear here eventually\n name: \"AES\",\n blockSize: 4,\n keySizes: [4,6,8],\n */\n /**\n * Encrypt an array of 4 big-endian words.\n * @param {Array} data The plaintext.\n * @return {Array} The ciphertext.\n */\n encrypt: function (data) { return this._crypt(data, 0); },\n /**\n * Decrypt an array of 4 big-endian words.\n * @param {Array} data The ciphertext.\n * @return {Array} The plaintext.\n */\n decrypt: function (data) { return this._crypt(data, 1); },\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n _tables: [[[], [], [], [], []], [[], [], [], [], []]],\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n _precompute: function () {\n var encTable = this._tables[0], decTable = this._tables[1], sbox = encTable[4], sboxInv = decTable[4], i, x, xInv, d = [], th = [], x2, x4, x8, s, tEnc, tDec;\n // Compute double and third tables\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n }\n // Compactify. Considerable speedup on Firefox.\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n },\n /**\n * Encryption and decryption core.\n * @param {Array} input Four words to be encrypted or decrypted.\n * @param dir The direction, 0 for encrypt and 1 for decrypt.\n * @return {Array} The four encrypted or decrypted words.\n * @private\n */\n _crypt: function (input, dir) {\n if (input.length !== 4) {\n throw new sjcl.exception.invalid(\"invalid aes block size\");\n }\n var key = this._key[dir], \n // state variables a,b,c,d are loaded with pre-whitened data\n a = input[0] ^ key[0], b = input[dir ? 3 : 1] ^ key[1], c = input[2] ^ key[2], d = input[dir ? 1 : 3] ^ key[3], a2, b2, c2, nInnerRounds = key.length / 4 - 2, i, kIndex = 4, out = [0, 0, 0, 0], table = this._tables[dir], \n // load up the tables\n t0 = table[0], t1 = table[1], t2 = table[2], t3 = table[3], sbox = table[4];\n // Inner rounds. Cribbed from OpenSSL.\n for (i = 0; i < nInnerRounds; i++) {\n a2 = t0[a >>> 24] ^ t1[b >> 16 & 255] ^ t2[c >> 8 & 255] ^ t3[d & 255] ^ key[kIndex];\n b2 = t0[b >>> 24] ^ t1[c >> 16 & 255] ^ t2[d >> 8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];\n c2 = t0[c >>> 24] ^ t1[d >> 16 & 255] ^ t2[a >> 8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];\n d = t0[d >>> 24] ^ t1[a >> 16 & 255] ^ t2[b >> 8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;\n b = b2;\n c = c2;\n }\n // Last round.\n for (i = 0; i < 4; i++) {\n out[dir ? 3 & -i : i] =\n sbox[a >>> 24] << 24 ^\n sbox[b >> 16 & 255] << 16 ^\n sbox[c >> 8 & 255] << 8 ^\n sbox[d & 255] ^\n key[kIndex++];\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n }\n};\n/** @fileOverview Arrays of bits, encoded as arrays of Numbers.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Arrays of bits, encoded as arrays of Numbers.\n * @namespace\n * @description\n *

\n * These objects are the currency accepted by SJCL's crypto functions.\n *

\n *\n *

\n * Most of our crypto primitives operate on arrays of 4-byte words internally,\n * but many of them can take arguments that are not a multiple of 4 bytes.\n * This library encodes arrays of bits (whose size need not be a multiple of 8\n * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an\n * array of words, 32 bits at a time. Since the words are double-precision\n * floating point numbers, they fit some extra data. We use this (in a private,\n * possibly-changing manner) to encode the number of bits actually present\n * in the last word of the array.\n *

\n *\n *

\n * Because bitwise ops clear this out-of-band data, these arrays can be passed\n * to ciphers like AES which want arrays of words.\n *

\n */\nsjcl.bitArray = {\n /**\n * Array slices in units of bits.\n * @param {bitArray} a The array to slice.\n * @param {Number} bstart The offset to the start of the slice, in bits.\n * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,\n * slice until the end of the array.\n * @return {bitArray} The requested slice.\n */\n bitSlice: function (a, bstart, bend) {\n a = sjcl.bitArray._shiftRight(a.slice(bstart / 32), 32 - (bstart & 31)).slice(1);\n return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend - bstart);\n },\n /**\n * Extract a number packed into a bit array.\n * @param {bitArray} a The array to slice.\n * @param {Number} bstart The offset to the start of the slice, in bits.\n * @param {Number} blength The length of the number to extract.\n * @return {Number} The requested slice.\n */\n extract: function (a, bstart, blength) {\n // FIXME: this Math.floor is not necessary at all, but for some reason\n // seems to suppress a bug in the Chromium JIT.\n var x, sh = Math.floor((-bstart - blength) & 31);\n if ((bstart + blength - 1 ^ bstart) & -32) {\n // it crosses a boundary\n x = (a[bstart / 32 | 0] << (32 - sh)) ^ (a[bstart / 32 + 1 | 0] >>> sh);\n }\n else {\n // within a single word\n x = a[bstart / 32 | 0] >>> sh;\n }\n return x & ((1 << blength) - 1);\n },\n /**\n * Concatenate two bit arrays.\n * @param {bitArray} a1 The first array.\n * @param {bitArray} a2 The second array.\n * @return {bitArray} The concatenation of a1 and a2.\n */\n concat: function (a1, a2) {\n if (a1.length === 0 || a2.length === 0) {\n return a1.concat(a2);\n }\n var last = a1[a1.length - 1], shift = sjcl.bitArray.getPartial(last);\n if (shift === 32) {\n return a1.concat(a2);\n }\n else {\n return sjcl.bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));\n }\n },\n /**\n * Find the length of an array of bits.\n * @param {bitArray} a The array.\n * @return {Number} The length of a, in bits.\n */\n bitLength: function (a) {\n var l = a.length, x;\n if (l === 0) {\n return 0;\n }\n x = a[l - 1];\n return (l - 1) * 32 + sjcl.bitArray.getPartial(x);\n },\n /**\n * Truncate an array.\n * @param {bitArray} a The array.\n * @param {Number} len The length to truncate to, in bits.\n * @return {bitArray} A new array, truncated to len bits.\n */\n clamp: function (a, len) {\n if (a.length * 32 < len) {\n return a;\n }\n a = a.slice(0, Math.ceil(len / 32));\n var l = a.length;\n len = len & 31;\n if (l > 0 && len) {\n a[l - 1] = sjcl.bitArray.partial(len, a[l - 1] & 0x80000000 >> (len - 1), 1);\n }\n return a;\n },\n /**\n * Make a partial word for a bit array.\n * @param {Number} len The number of bits in the word.\n * @param {Number} x The bits.\n * @param {Number} [_end=0] Pass 1 if x has already been shifted to the high side.\n * @return {Number} The partial word.\n */\n partial: function (len, x, _end) {\n if (len === 32) {\n return x;\n }\n return (_end ? x | 0 : x << (32 - len)) + len * 0x10000000000;\n },\n /**\n * Get the number of bits used by a partial word.\n * @param {Number} x The partial word.\n * @return {Number} The number of bits used by the partial word.\n */\n getPartial: function (x) {\n return Math.round(x / 0x10000000000) || 32;\n },\n /**\n * Compare two arrays for equality in a predictable amount of time.\n * @param {bitArray} a The first array.\n * @param {bitArray} b The second array.\n * @return {boolean} true if a == b; false otherwise.\n */\n equal: function (a, b) {\n if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {\n return false;\n }\n var x = 0, i;\n for (i = 0; i < a.length; i++) {\n x |= a[i] ^ b[i];\n }\n return (x === 0);\n },\n /** Shift an array right.\n * @param {bitArray} a The array to shift.\n * @param {Number} shift The number of bits to shift.\n * @param {Number} [carry=0] A byte to carry in\n * @param {bitArray} [out=[]] An array to prepend to the output.\n * @private\n */\n _shiftRight: function (a, shift, carry, out) {\n var i, last2 = 0, shift2;\n if (out === undefined) {\n out = [];\n }\n for (; shift >= 32; shift -= 32) {\n out.push(carry);\n carry = 0;\n }\n if (shift === 0) {\n return out.concat(a);\n }\n for (i = 0; i < a.length; i++) {\n out.push(carry | a[i] >>> shift);\n carry = a[i] << (32 - shift);\n }\n last2 = a.length ? a[a.length - 1] : 0;\n shift2 = sjcl.bitArray.getPartial(last2);\n out.push(sjcl.bitArray.partial(shift + shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(), 1));\n return out;\n },\n /** xor a block of 4 words together.\n * @private\n */\n _xor4: function (x, y) {\n return [x[0] ^ y[0], x[1] ^ y[1], x[2] ^ y[2], x[3] ^ y[3]];\n },\n /** byteswap a word array inplace.\n * (does not handle partial words)\n * @param {sjcl.bitArray} a word array\n * @return {sjcl.bitArray} byteswapped array\n */\n byteswapM: function (a) {\n var i, v, m = 0xff00;\n for (i = 0; i < a.length; ++i) {\n v = a[i];\n a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);\n }\n return a;\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * UTF-8 strings\n * @namespace\n */\nsjcl.codec.utf8String = {\n /** Convert from a bitArray to a UTF-8 string. */\n fromBits: function (arr) {\n var out = \"\", bl = sjcl.bitArray.bitLength(arr), i, tmp;\n for (i = 0; i < bl / 8; i++) {\n if ((i & 3) === 0) {\n tmp = arr[i / 4];\n }\n out += String.fromCharCode(tmp >>> 8 >>> 8 >>> 8);\n tmp <<= 8;\n }\n return decodeURIComponent(escape(out));\n },\n /** Convert from a UTF-8 string to a bitArray. */\n toBits: function (str) {\n str = unescape(encodeURIComponent(str));\n var out = [], i, tmp = 0;\n for (i = 0; i < str.length; i++) {\n tmp = tmp << 8 | str.charCodeAt(i);\n if ((i & 3) === 3) {\n out.push(tmp);\n tmp = 0;\n }\n }\n if (i & 3) {\n out.push(sjcl.bitArray.partial(8 * (i & 3), tmp));\n }\n return out;\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Hexadecimal\n * @namespace\n */\nsjcl.codec.hex = {\n /** Convert from a bitArray to a hex string. */\n fromBits: function (arr) {\n var out = \"\", i;\n for (i = 0; i < arr.length; i++) {\n out += ((arr[i] | 0) + 0xF00000000000).toString(16).substr(4);\n }\n return out.substr(0, sjcl.bitArray.bitLength(arr) / 4); //.replace(/(.{8})/g, \"$1 \");\n },\n /** Convert from a hex string to a bitArray. */\n toBits: function (str) {\n var i, out = [], len;\n str = str.replace(/\\s|0x/g, \"\");\n len = str.length;\n str = str + \"00000000\";\n for (i = 0; i < str.length; i += 8) {\n out.push(parseInt(str.substr(i, 8), 16) ^ 0);\n }\n return sjcl.bitArray.clamp(out, len * 4);\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Base64 encoding/decoding\n * @namespace\n */\nsjcl.codec.base64 = {\n /** The base64 alphabet.\n * @private\n */\n _chars: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n /** Convert from a bitArray to a base64 string. */\n fromBits: function (arr, _noEquals, _url) {\n var out = \"\", i, bits = 0, c = sjcl.codec.base64._chars, ta = 0, bl = sjcl.bitArray.bitLength(arr);\n if (_url) {\n c = c.substr(0, 62) + '-_';\n }\n for (i = 0; out.length * 6 < bl;) {\n out += c.charAt((ta ^ arr[i] >>> bits) >>> 26);\n if (bits < 6) {\n ta = arr[i] << (6 - bits);\n bits += 26;\n i++;\n }\n else {\n ta <<= 6;\n bits -= 6;\n }\n }\n while ((out.length & 3) && !_noEquals) {\n out += \"=\";\n }\n return out;\n },\n /** Convert from a base64 string to a bitArray */\n toBits: function (str, _url) {\n str = str.replace(/\\s|=/g, '');\n var out = [], i, bits = 0, c = sjcl.codec.base64._chars, ta = 0, x;\n if (_url) {\n c = c.substr(0, 62) + '-_';\n }\n for (i = 0; i < str.length; i++) {\n x = c.indexOf(str.charAt(i));\n if (x < 0) {\n throw new sjcl.exception.invalid(\"this isn't base64!\");\n }\n if (bits > 26) {\n bits -= 26;\n out.push(ta ^ x >>> bits);\n ta = x << (32 - bits);\n }\n else {\n bits += 6;\n ta ^= x << (32 - bits);\n }\n }\n if (bits & 56) {\n out.push(sjcl.bitArray.partial(bits & 56, ta, 1));\n }\n return out;\n }\n};\nsjcl.codec.base64url = {\n fromBits: function (arr) { return sjcl.codec.base64.fromBits(arr, 1, 1); },\n toBits: function (str) { return sjcl.codec.base64.toBits(str, 1); }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Arrays of bytes\n * @namespace\n */\nsjcl.codec.bytes = {\n /** Convert from a bitArray to an array of bytes. */\n fromBits: function (arr) {\n var out = [], bl = sjcl.bitArray.bitLength(arr), i, tmp;\n for (i = 0; i < bl / 8; i++) {\n if ((i & 3) === 0) {\n tmp = arr[i / 4];\n }\n out.push(tmp >>> 24);\n tmp <<= 8;\n }\n return out;\n },\n /** Convert from an array of bytes to a bitArray. */\n toBits: function (bytes) {\n var out = [], i, tmp = 0;\n for (i = 0; i < bytes.length; i++) {\n tmp = tmp << 8 | bytes[i];\n if ((i & 3) === 3) {\n out.push(tmp);\n tmp = 0;\n }\n }\n if (i & 3) {\n out.push(sjcl.bitArray.partial(8 * (i & 3), tmp));\n }\n return out;\n }\n};\n/** @fileOverview Javascript SHA-256 implementation.\n *\n * An older version of this implementation is available in the public\n * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,\n * Stanford University 2008-2010 and BSD-licensed for liability\n * reasons.\n *\n * Special thanks to Aldo Cortesi for pointing out several bugs in\n * this code.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Context for a SHA-256 operation in progress.\n * @constructor\n */\nsjcl.hash.sha256 = function (hash) {\n if (!this._key[0]) {\n this._precompute();\n }\n if (hash) {\n this._h = hash._h.slice(0);\n this._buffer = hash._buffer.slice(0);\n this._length = hash._length;\n }\n else {\n this.reset();\n }\n};\n/**\n * Hash a string or an array of words.\n * @static\n * @param {bitArray|String} data the data to hash.\n * @return {bitArray} The hash value, an array of 16 big-endian words.\n */\nsjcl.hash.sha256.hash = function (data) {\n return (new sjcl.hash.sha256()).update(data).finalize();\n};\nsjcl.hash.sha256.prototype = {\n /**\n * The hash's block size, in bits.\n * @constant\n */\n blockSize: 512,\n /**\n * Reset the hash state.\n * @return this\n */\n reset: function () {\n this._h = this._init.slice(0);\n this._buffer = [];\n this._length = 0;\n return this;\n },\n /**\n * Input several words to the hash.\n * @param {bitArray|String} data the data to hash.\n * @return this\n */\n update: function (data) {\n if (typeof data === \"string\") {\n data = sjcl.codec.utf8String.toBits(data);\n }\n var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data), ol = this._length, nl = this._length = ol + sjcl.bitArray.bitLength(data);\n if (nl > 9007199254740991) {\n throw new sjcl.exception.invalid(\"Cannot hash more than 2^53 - 1 bits\");\n }\n if (typeof Uint32Array !== 'undefined') {\n var c = new Uint32Array(b);\n var j = 0;\n for (i = 512 + ol - ((512 + ol) & 511); i <= nl; i += 512) {\n this._block(c.subarray(16 * j, 16 * (j + 1)));\n j += 1;\n }\n b.splice(0, 16 * j);\n }\n else {\n for (i = 512 + ol - ((512 + ol) & 511); i <= nl; i += 512) {\n this._block(b.splice(0, 16));\n }\n }\n return this;\n },\n /**\n * Complete hashing and output the hash value.\n * @return {bitArray} The hash value, an array of 8 big-endian words.\n */\n finalize: function () {\n var i, b = this._buffer, h = this._h;\n // Round out and push the buffer\n b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1, 1)]);\n // Round out the buffer to a multiple of 16 words, less the 2 length words.\n for (i = b.length + 2; i & 15; i++) {\n b.push(0);\n }\n // append the length\n b.push(Math.floor(this._length / 0x100000000));\n b.push(this._length | 0);\n while (b.length) {\n this._block(b.splice(0, 16));\n }\n this.reset();\n return h;\n },\n /**\n * The SHA-256 initialization vector, to be precomputed.\n * @private\n */\n _init: [],\n /*\n _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],\n */\n /**\n * The SHA-256 hash key, to be precomputed.\n * @private\n */\n _key: [],\n /*\n _key:\n [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],\n */\n /**\n * Function to precompute _init and _key.\n * @private\n */\n _precompute: function () {\n var i = 0, prime = 2, factor, isPrime;\n function frac(x) { return (x - Math.floor(x)) * 0x100000000 | 0; }\n for (; i < 64; prime++) {\n isPrime = true;\n for (factor = 2; factor * factor <= prime; factor++) {\n if (prime % factor === 0) {\n isPrime = false;\n break;\n }\n }\n if (isPrime) {\n if (i < 8) {\n this._init[i] = frac(Math.pow(prime, 1 / 2));\n }\n this._key[i] = frac(Math.pow(prime, 1 / 3));\n i++;\n }\n }\n },\n /**\n * Perform one cycle of SHA-256.\n * @param {Uint32Array|bitArray} w one block of words.\n * @private\n */\n _block: function (w) {\n var i, tmp, a, b, h = this._h, k = this._key, h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3], h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];\n /* Rationale for placement of |0 :\n * If a value can overflow is original 32 bits by a factor of more than a few\n * million (2^23 ish), there is a possibility that it might overflow the\n * 53-bit mantissa and lose precision.\n *\n * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that\n * propagates around the loop, and on the hash state h[]. I don't believe\n * that the clamps on h4 and on h0 are strictly necessary, but it's close\n * (for h4 anyway), and better safe than sorry.\n *\n * The clamps on h[] are necessary for the output to be correct even in the\n * common case and for short inputs.\n */\n for (i = 0; i < 64; i++) {\n // load up the input word for this round\n if (i < 16) {\n tmp = w[i];\n }\n else {\n a = w[(i + 1) & 15];\n b = w[(i + 14) & 15];\n tmp = w[i & 15] = ((a >>> 7 ^ a >>> 18 ^ a >>> 3 ^ a << 25 ^ a << 14) +\n (b >>> 17 ^ b >>> 19 ^ b >>> 10 ^ b << 15 ^ b << 13) +\n w[i & 15] + w[(i + 9) & 15]) | 0;\n }\n tmp = (tmp + h7 + (h4 >>> 6 ^ h4 >>> 11 ^ h4 >>> 25 ^ h4 << 26 ^ h4 << 21 ^ h4 << 7) + (h6 ^ h4 & (h5 ^ h6)) + k[i]); // | 0;\n // shift register\n h7 = h6;\n h6 = h5;\n h5 = h4;\n h4 = h3 + tmp | 0;\n h3 = h2;\n h2 = h1;\n h1 = h0;\n h0 = (tmp + ((h1 & h2) ^ (h3 & (h1 ^ h2))) + (h1 >>> 2 ^ h1 >>> 13 ^ h1 >>> 22 ^ h1 << 30 ^ h1 << 19 ^ h1 << 10)) | 0;\n }\n h[0] = h[0] + h0 | 0;\n h[1] = h[1] + h1 | 0;\n h[2] = h[2] + h2 | 0;\n h[3] = h[3] + h3 | 0;\n h[4] = h[4] + h4 | 0;\n h[5] = h[5] + h5 | 0;\n h[6] = h[6] + h6 | 0;\n h[7] = h[7] + h7 | 0;\n }\n};\n/** @fileOverview CCM mode implementation.\n *\n * Special thanks to Roy Nicholson for pointing out a bug in our\n * implementation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * CTR mode with CBC MAC.\n * @namespace\n */\nsjcl.mode.ccm = {\n /** The name of the mode.\n * @constant\n */\n name: \"ccm\",\n _progressListeners: [],\n listenProgress: function (cb) {\n sjcl.mode.ccm._progressListeners.push(cb);\n },\n unListenProgress: function (cb) {\n var index = sjcl.mode.ccm._progressListeners.indexOf(cb);\n if (index > -1) {\n sjcl.mode.ccm._progressListeners.splice(index, 1);\n }\n },\n _callProgressListener: function (val) {\n var p = sjcl.mode.ccm._progressListeners.slice(), i;\n for (i = 0; i < p.length; i += 1) {\n p[i](val);\n }\n },\n /** Encrypt in CCM mode.\n * @static\n * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes.\n * @param {bitArray} plaintext The plaintext data.\n * @param {bitArray} iv The initialization value.\n * @param {bitArray} [adata=[]] The authenticated data.\n * @param {Number} [tlen=64] the desired tag length, in bits.\n * @return {bitArray} The encrypted data, an array of bytes.\n */\n encrypt: function (prf, plaintext, iv, adata, tlen) {\n var L, out = plaintext.slice(0), tag, w = sjcl.bitArray, ivl = w.bitLength(iv) / 8, ol = w.bitLength(out) / 8;\n tlen = tlen || 64;\n adata = adata || [];\n if (ivl < 7) {\n throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");\n }\n // compute the length of the length\n for (L = 2; L < 4 && ol >>> 8 * L; L++) { }\n if (L < 15 - ivl) {\n L = 15 - ivl;\n }\n iv = w.clamp(iv, 8 * (15 - L));\n // compute the tag\n tag = sjcl.mode.ccm._computeTag(prf, plaintext, iv, adata, tlen, L);\n // encrypt\n out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L);\n return w.concat(out.data, out.tag);\n },\n /** Decrypt in CCM mode.\n * @static\n * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes.\n * @param {bitArray} ciphertext The ciphertext data.\n * @param {bitArray} iv The initialization value.\n * @param {bitArray} [adata=[]] adata The authenticated data.\n * @param {Number} [tlen=64] tlen the desired tag length, in bits.\n * @return {bitArray} The decrypted data.\n */\n decrypt: function (prf, ciphertext, iv, adata, tlen) {\n tlen = tlen || 64;\n adata = adata || [];\n var L, w = sjcl.bitArray, ivl = w.bitLength(iv) / 8, ol = w.bitLength(ciphertext), out = w.clamp(ciphertext, ol - tlen), tag = w.bitSlice(ciphertext, ol - tlen), tag2;\n ol = (ol - tlen) / 8;\n if (ivl < 7) {\n throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");\n }\n // compute the length of the length\n for (L = 2; L < 4 && ol >>> 8 * L; L++) { }\n if (L < 15 - ivl) {\n L = 15 - ivl;\n }\n iv = w.clamp(iv, 8 * (15 - L));\n // decrypt\n out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L);\n // check the tag\n tag2 = sjcl.mode.ccm._computeTag(prf, out.data, iv, adata, tlen, L);\n if (!w.equal(out.tag, tag2)) {\n throw new sjcl.exception.corrupt(\"ccm: tag doesn't match\");\n }\n return out.data;\n },\n _macAdditionalData: function (prf, adata, iv, tlen, ol, L) {\n var mac, tmp, i, macData = [], w = sjcl.bitArray, xor = w._xor4;\n // mac the flags\n mac = [w.partial(8, (adata.length ? 1 << 6 : 0) | (tlen - 2) << 2 | L - 1)];\n // mac the iv and length\n mac = w.concat(mac, iv);\n mac[3] |= ol;\n mac = prf.encrypt(mac);\n if (adata.length) {\n // mac the associated data. start with its length...\n tmp = w.bitLength(adata) / 8;\n if (tmp <= 0xFEFF) {\n macData = [w.partial(16, tmp)];\n }\n else if (tmp <= 0xFFFFFFFF) {\n macData = w.concat([w.partial(16, 0xFFFE)], [tmp]);\n } // else ...\n // mac the data itself\n macData = w.concat(macData, adata);\n for (i = 0; i < macData.length; i += 4) {\n mac = prf.encrypt(xor(mac, macData.slice(i, i + 4).concat([0, 0, 0])));\n }\n }\n return mac;\n },\n /* Compute the (unencrypted) authentication tag, according to the CCM specification\n * @param {Object} prf The pseudorandom function.\n * @param {bitArray} plaintext The plaintext data.\n * @param {bitArray} iv The initialization value.\n * @param {bitArray} adata The authenticated data.\n * @param {Number} tlen the desired tag length, in bits.\n * @return {bitArray} The tag, but not yet encrypted.\n * @private\n */\n _computeTag: function (prf, plaintext, iv, adata, tlen, L) {\n // compute B[0]\n var mac, i, w = sjcl.bitArray, xor = w._xor4;\n tlen /= 8;\n // check tag length and message length\n if (tlen % 2 || tlen < 4 || tlen > 16) {\n throw new sjcl.exception.invalid(\"ccm: invalid tag length\");\n }\n if (adata.length > 0xFFFFFFFF || plaintext.length > 0xFFFFFFFF) {\n // I don't want to deal with extracting high words from doubles.\n throw new sjcl.exception.bug(\"ccm: can't deal with 4GiB or more data\");\n }\n mac = sjcl.mode.ccm._macAdditionalData(prf, adata, iv, tlen, w.bitLength(plaintext) / 8, L);\n // mac the plaintext\n for (i = 0; i < plaintext.length; i += 4) {\n mac = prf.encrypt(xor(mac, plaintext.slice(i, i + 4).concat([0, 0, 0])));\n }\n return w.clamp(mac, tlen * 8);\n },\n /** CCM CTR mode.\n * Encrypt or decrypt data and tag with the prf in CCM-style CTR mode.\n * May mutate its arguments.\n * @param {Object} prf The PRF.\n * @param {bitArray} data The data to be encrypted or decrypted.\n * @param {bitArray} iv The initialization vector.\n * @param {bitArray} tag The authentication tag.\n * @param {Number} tlen The length of th etag, in bits.\n * @param {Number} L The CCM L value.\n * @return {Object} An object with data and tag, the en/decryption of data and tag values.\n * @private\n */\n _ctrMode: function (prf, data, iv, tag, tlen, L) {\n var enc, i, w = sjcl.bitArray, xor = w._xor4, ctr, l = data.length, bl = w.bitLength(data), n = l / 50, p = n;\n // start the ctr\n ctr = w.concat([w.partial(8, L - 1)], iv).concat([0, 0, 0]).slice(0, 4);\n // en/decrypt the tag\n tag = w.bitSlice(xor(tag, prf.encrypt(ctr)), 0, tlen);\n // en/decrypt the data\n if (!l) {\n return { tag: tag, data: [] };\n }\n for (i = 0; i < l; i += 4) {\n if (i > n) {\n sjcl.mode.ccm._callProgressListener(i / l);\n n += p;\n }\n ctr[3]++;\n enc = prf.encrypt(ctr);\n data[i] ^= enc[0];\n data[i + 1] ^= enc[1];\n data[i + 2] ^= enc[2];\n data[i + 3] ^= enc[3];\n }\n return { tag: tag, data: w.clamp(data, bl) };\n }\n};\n/** @fileOverview HMAC implementation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/** HMAC with the specified hash function.\n * @constructor\n * @param {bitArray} key the key for HMAC.\n * @param {Object} [Hash=sjcl.hash.sha256] The hash function to use.\n */\nsjcl.misc.hmac = function (key, Hash) {\n this._hash = Hash = Hash || sjcl.hash.sha256;\n var exKey = [[], []], i, bs = Hash.prototype.blockSize / 32;\n this._baseHash = [new Hash(), new Hash()];\n if (key.length > bs) {\n key = Hash.hash(key);\n }\n for (i = 0; i < bs; i++) {\n exKey[0][i] = key[i] ^ 0x36363636;\n exKey[1][i] = key[i] ^ 0x5C5C5C5C;\n }\n this._baseHash[0].update(exKey[0]);\n this._baseHash[1].update(exKey[1]);\n this._resultHash = new Hash(this._baseHash[0]);\n};\n/** HMAC with the specified hash function. Also called encrypt since it's a prf.\n * @param {bitArray|String} data The data to mac.\n */\nsjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {\n if (!this._updated) {\n this.update(data);\n return this.digest(data);\n }\n else {\n throw new sjcl.exception.invalid(\"encrypt on already updated hmac called!\");\n }\n};\nsjcl.misc.hmac.prototype.reset = function () {\n this._resultHash = new this._hash(this._baseHash[0]);\n this._updated = false;\n};\nsjcl.misc.hmac.prototype.update = function (data) {\n this._updated = true;\n this._resultHash.update(data);\n};\nsjcl.misc.hmac.prototype.digest = function () {\n var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();\n this.reset();\n return result;\n};\n/** @fileOverview Password-based key-derivation function, version 2.0.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/** Password-Based Key-Derivation Function, version 2.0.\n *\n * Generate keys from passwords using PBKDF2-HMAC-SHA256.\n *\n * This is the method specified by RSA's PKCS #5 standard.\n *\n * @param {bitArray|String} password The password.\n * @param {bitArray|String} salt The salt. Should have lots of entropy.\n * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.\n * @param {Number} [length] The length of the derived key. Defaults to the\n output size of the hash function.\n * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.\n * @return {bitArray} the derived key.\n */\nsjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {\n count = count || 10000;\n if (length < 0 || count < 0) {\n throw new sjcl.exception.invalid(\"invalid params to pbkdf2\");\n }\n if (typeof password === \"string\") {\n password = sjcl.codec.utf8String.toBits(password);\n }\n if (typeof salt === \"string\") {\n salt = sjcl.codec.utf8String.toBits(salt);\n }\n Prff = Prff || sjcl.misc.hmac;\n var prf = new Prff(password), u, ui, i, j, k, out = [], b = sjcl.bitArray;\n for (k = 1; 32 * out.length < (length || 1); k++) {\n u = ui = prf.encrypt(b.concat(salt, [k]));\n for (i = 1; i < count; i++) {\n ui = prf.encrypt(ui);\n for (j = 0; j < ui.length; j++) {\n u[j] ^= ui[j];\n }\n }\n out = out.concat(u);\n }\n if (length) {\n out = b.clamp(out, length);\n }\n return out;\n};\n/** @fileOverview Random number generator.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n * @author Michael Brooks\n * @author Steve Thomas\n */\n/**\n * @class Random number generator\n * @description\n * Use sjcl.random as a singleton for this class!\n *

\n * This random number generator is a derivative of Ferguson and Schneier's\n * generator Fortuna. It collects entropy from various events into several\n * pools, implemented by streaming SHA-256 instances. It differs from\n * ordinary Fortuna in a few ways, though.\n *

\n *\n *

\n * Most importantly, it has an entropy estimator. This is present because\n * there is a strong conflict here between making the generator available\n * as soon as possible, and making sure that it doesn't \"run on empty\".\n * In Fortuna, there is a saved state file, and the system is likely to have\n * time to warm up.\n *

\n *\n *

\n * Second, because users are unlikely to stay on the page for very long,\n * and to speed startup time, the number of pools increases logarithmically:\n * a new pool is created when the previous one is actually used for a reseed.\n * This gives the same asymptotic guarantees as Fortuna, but gives more\n * entropy to early reseeds.\n *

\n *\n *

\n * The entire mechanism here feels pretty klunky. Furthermore, there are\n * several improvements that should be made, including support for\n * dedicated cryptographic functions that may be present in some browsers;\n * state files in local storage; cookies containing randomness; etc. So\n * look for improvements in future versions.\n *

\n * @constructor\n */\nsjcl.prng = function (defaultParanoia) {\n /* private */\n this._pools = [new sjcl.hash.sha256()];\n this._poolEntropy = [0];\n this._reseedCount = 0;\n this._robins = {};\n this._eventId = 0;\n this._collectorIds = {};\n this._collectorIdNext = 0;\n this._strength = 0;\n this._poolStrength = 0;\n this._nextReseed = 0;\n this._key = [0, 0, 0, 0, 0, 0, 0, 0];\n this._counter = [0, 0, 0, 0];\n this._cipher = undefined;\n this._defaultParanoia = defaultParanoia;\n /* event listener stuff */\n this._collectorsStarted = false;\n this._callbacks = { progress: {}, seeded: {} };\n this._callbackI = 0;\n /* constants */\n this._NOT_READY = 0;\n this._READY = 1;\n this._REQUIRES_RESEED = 2;\n this._MAX_WORDS_PER_BURST = 65536;\n this._PARANOIA_LEVELS = [0, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024];\n this._MILLISECONDS_PER_RESEED = 30000;\n this._BITS_PER_RESEED = 80;\n};\nsjcl.prng.prototype = {\n /** Generate several random words, and return them in an array.\n * A word consists of 32 bits (4 bytes)\n * @param {Number} nwords The number of words to generate.\n */\n randomWords: function (nwords, paranoia) {\n var out = [], i, readiness = this.isReady(paranoia), g;\n if (readiness === this._NOT_READY) {\n throw new sjcl.exception.notReady(\"generator isn't seeded\");\n }\n else if (readiness & this._REQUIRES_RESEED) {\n this._reseedFromPools(!(readiness & this._READY));\n }\n for (i = 0; i < nwords; i += 4) {\n if ((i + 1) % this._MAX_WORDS_PER_BURST === 0) {\n this._gate();\n }\n g = this._gen4words();\n out.push(g[0], g[1], g[2], g[3]);\n }\n this._gate();\n return out.slice(0, nwords);\n },\n setDefaultParanoia: function (paranoia, allowZeroParanoia) {\n if (paranoia === 0 && allowZeroParanoia !== \"Setting paranoia=0 will ruin your security; use it only for testing\") {\n throw new sjcl.exception.invalid(\"Setting paranoia=0 will ruin your security; use it only for testing\");\n }\n this._defaultParanoia = paranoia;\n },\n /**\n * Add entropy to the pools.\n * @param data The entropic value. Should be a 32-bit integer, array of 32-bit integers, or string\n * @param {Number} estimatedEntropy The estimated entropy of data, in bits\n * @param {String} source The source of the entropy, eg \"mouse\"\n */\n addEntropy: function (data, estimatedEntropy, source) {\n source = source || \"user\";\n var id, i, tmp, t = (new Date()).valueOf(), robin = this._robins[source], oldReady = this.isReady(), err = 0, objName;\n id = this._collectorIds[source];\n if (id === undefined) {\n id = this._collectorIds[source] = this._collectorIdNext++;\n }\n if (robin === undefined) {\n robin = this._robins[source] = 0;\n }\n this._robins[source] = (this._robins[source] + 1) % this._pools.length;\n switch (typeof (data)) {\n case \"number\":\n if (estimatedEntropy === undefined) {\n estimatedEntropy = 1;\n }\n this._pools[robin].update([id, this._eventId++, 1, estimatedEntropy, t, 1, data | 0]);\n break;\n case \"object\":\n objName = Object.prototype.toString.call(data);\n if (objName === \"[object Uint32Array]\") {\n tmp = [];\n for (i = 0; i < data.length; i++) {\n tmp.push(data[i]);\n }\n data = tmp;\n }\n else {\n if (objName !== \"[object Array]\") {\n err = 1;\n }\n for (i = 0; i < data.length && !err; i++) {\n if (typeof (data[i]) !== \"number\") {\n err = 1;\n }\n }\n }\n if (!err) {\n if (estimatedEntropy === undefined) {\n /* horrible entropy estimator */\n estimatedEntropy = 0;\n for (i = 0; i < data.length; i++) {\n tmp = data[i];\n while (tmp > 0) {\n estimatedEntropy++;\n tmp = tmp >>> 1;\n }\n }\n }\n this._pools[robin].update([id, this._eventId++, 2, estimatedEntropy, t, data.length].concat(data));\n }\n break;\n case \"string\":\n if (estimatedEntropy === undefined) {\n /* English text has just over 1 bit per character of entropy.\n * But this might be HTML or something, and have far less\n * entropy than English... Oh well, let's just say one bit.\n */\n estimatedEntropy = data.length;\n }\n this._pools[robin].update([id, this._eventId++, 3, estimatedEntropy, t, data.length]);\n this._pools[robin].update(data);\n break;\n default:\n err = 1;\n }\n if (err) {\n throw new sjcl.exception.bug(\"random: addEntropy only supports number, array of numbers or string\");\n }\n /* record the new strength */\n this._poolEntropy[robin] += estimatedEntropy;\n this._poolStrength += estimatedEntropy;\n /* fire off events */\n if (oldReady === this._NOT_READY) {\n if (this.isReady() !== this._NOT_READY) {\n this._fireEvent(\"seeded\", Math.max(this._strength, this._poolStrength));\n }\n this._fireEvent(\"progress\", this.getProgress());\n }\n },\n /** Is the generator ready? */\n isReady: function (paranoia) {\n var entropyRequired = this._PARANOIA_LEVELS[(paranoia !== undefined) ? paranoia : this._defaultParanoia];\n if (this._strength && this._strength >= entropyRequired) {\n return (this._poolEntropy[0] > this._BITS_PER_RESEED && (new Date()).valueOf() > this._nextReseed) ?\n this._REQUIRES_RESEED | this._READY :\n this._READY;\n }\n else {\n return (this._poolStrength >= entropyRequired) ?\n this._REQUIRES_RESEED | this._NOT_READY :\n this._NOT_READY;\n }\n },\n /** Get the generator's progress toward readiness, as a fraction */\n getProgress: function (paranoia) {\n var entropyRequired = this._PARANOIA_LEVELS[paranoia ? paranoia : this._defaultParanoia];\n if (this._strength >= entropyRequired) {\n return 1.0;\n }\n else {\n return (this._poolStrength > entropyRequired) ?\n 1.0 :\n this._poolStrength / entropyRequired;\n }\n },\n /** start the built-in entropy collectors */\n startCollectors: function () {\n if (this._collectorsStarted) {\n return;\n }\n this._eventListener = {\n loadTimeCollector: this._bind(this._loadTimeCollector),\n mouseCollector: this._bind(this._mouseCollector),\n keyboardCollector: this._bind(this._keyboardCollector),\n accelerometerCollector: this._bind(this._accelerometerCollector),\n touchCollector: this._bind(this._touchCollector)\n };\n if (window.addEventListener) {\n window.addEventListener(\"load\", this._eventListener.loadTimeCollector, false);\n window.addEventListener(\"mousemove\", this._eventListener.mouseCollector, false);\n window.addEventListener(\"keypress\", this._eventListener.keyboardCollector, false);\n window.addEventListener(\"devicemotion\", this._eventListener.accelerometerCollector, false);\n window.addEventListener(\"touchmove\", this._eventListener.touchCollector, false);\n }\n else if (document.attachEvent) {\n document.attachEvent(\"onload\", this._eventListener.loadTimeCollector);\n document.attachEvent(\"onmousemove\", this._eventListener.mouseCollector);\n document.attachEvent(\"keypress\", this._eventListener.keyboardCollector);\n }\n else {\n throw new sjcl.exception.bug(\"can't attach event\");\n }\n this._collectorsStarted = true;\n },\n /** stop the built-in entropy collectors */\n stopCollectors: function () {\n if (!this._collectorsStarted) {\n return;\n }\n if (window.removeEventListener) {\n window.removeEventListener(\"load\", this._eventListener.loadTimeCollector, false);\n window.removeEventListener(\"mousemove\", this._eventListener.mouseCollector, false);\n window.removeEventListener(\"keypress\", this._eventListener.keyboardCollector, false);\n window.removeEventListener(\"devicemotion\", this._eventListener.accelerometerCollector, false);\n window.removeEventListener(\"touchmove\", this._eventListener.touchCollector, false);\n }\n else if (document.detachEvent) {\n document.detachEvent(\"onload\", this._eventListener.loadTimeCollector);\n document.detachEvent(\"onmousemove\", this._eventListener.mouseCollector);\n document.detachEvent(\"keypress\", this._eventListener.keyboardCollector);\n }\n this._collectorsStarted = false;\n },\n /* use a cookie to store entropy.\n useCookie: function (all_cookies) {\n throw new sjcl.exception.bug(\"random: useCookie is unimplemented\");\n },*/\n /** add an event listener for progress or seeded-ness. */\n addEventListener: function (name, callback) {\n this._callbacks[name][this._callbackI++] = callback;\n },\n /** remove an event listener for progress or seeded-ness */\n removeEventListener: function (name, cb) {\n var i, j, cbs = this._callbacks[name], jsTemp = [];\n /* I'm not sure if this is necessary; in C++, iterating over a\n * collection and modifying it at the same time is a no-no.\n */\n for (j in cbs) {\n if (cbs.hasOwnProperty(j) && cbs[j] === cb) {\n jsTemp.push(j);\n }\n }\n for (i = 0; i < jsTemp.length; i++) {\n j = jsTemp[i];\n delete cbs[j];\n }\n },\n _bind: function (func) {\n var that = this;\n return function () {\n func.apply(that, arguments);\n };\n },\n /** Generate 4 random words, no reseed, no gate.\n * @private\n */\n _gen4words: function () {\n for (var i = 0; i < 4; i++) {\n this._counter[i] = this._counter[i] + 1 | 0;\n if (this._counter[i]) {\n break;\n }\n }\n return this._cipher.encrypt(this._counter);\n },\n /* Rekey the AES instance with itself after a request, or every _MAX_WORDS_PER_BURST words.\n * @private\n */\n _gate: function () {\n this._key = this._gen4words().concat(this._gen4words());\n this._cipher = new sjcl.cipher.aes(this._key);\n },\n /** Reseed the generator with the given words\n * @private\n */\n _reseed: function (seedWords) {\n this._key = sjcl.hash.sha256.hash(this._key.concat(seedWords));\n this._cipher = new sjcl.cipher.aes(this._key);\n for (var i = 0; i < 4; i++) {\n this._counter[i] = this._counter[i] + 1 | 0;\n if (this._counter[i]) {\n break;\n }\n }\n },\n /** reseed the data from the entropy pools\n * @param full If set, use all the entropy pools in the reseed.\n */\n _reseedFromPools: function (full) {\n var reseedData = [], strength = 0, i;\n this._nextReseed = reseedData[0] =\n (new Date()).valueOf() + this._MILLISECONDS_PER_RESEED;\n for (i = 0; i < 16; i++) {\n /* On some browsers, this is cryptographically random. So we might\n * as well toss it in the pot and stir...\n */\n reseedData.push(Math.random() * 0x100000000 | 0);\n }\n for (i = 0; i < this._pools.length; i++) {\n reseedData = reseedData.concat(this._pools[i].finalize());\n strength += this._poolEntropy[i];\n this._poolEntropy[i] = 0;\n if (!full && (this._reseedCount & (1 << i))) {\n break;\n }\n }\n /* if we used the last pool, push a new one onto the stack */\n if (this._reseedCount >= 1 << this._pools.length) {\n this._pools.push(new sjcl.hash.sha256());\n this._poolEntropy.push(0);\n }\n /* how strong was this reseed? */\n this._poolStrength -= strength;\n if (strength > this._strength) {\n this._strength = strength;\n }\n this._reseedCount++;\n this._reseed(reseedData);\n },\n _keyboardCollector: function () {\n this._addCurrentTimeToEntropy(1);\n },\n _mouseCollector: function (ev) {\n var x, y;\n try {\n x = ev.x || ev.clientX || ev.offsetX || 0;\n y = ev.y || ev.clientY || ev.offsetY || 0;\n }\n catch (err) {\n // Event originated from a secure element. No mouse position available.\n x = 0;\n y = 0;\n }\n if (x != 0 && y != 0) {\n this.addEntropy([x, y], 2, \"mouse\");\n }\n this._addCurrentTimeToEntropy(0);\n },\n _touchCollector: function (ev) {\n var touch = ev.touches[0] || ev.changedTouches[0];\n var x = touch.pageX || touch.clientX, y = touch.pageY || touch.clientY;\n this.addEntropy([x, y], 1, \"touch\");\n this._addCurrentTimeToEntropy(0);\n },\n _loadTimeCollector: function () {\n this._addCurrentTimeToEntropy(2);\n },\n _addCurrentTimeToEntropy: function (estimatedEntropy) {\n if (typeof window !== 'undefined' && window.performance && typeof window.performance.now === \"function\") {\n //how much entropy do we want to add here?\n this.addEntropy(window.performance.now(), estimatedEntropy, \"loadtime\");\n }\n else {\n this.addEntropy((new Date()).valueOf(), estimatedEntropy, \"loadtime\");\n }\n },\n _accelerometerCollector: function (ev) {\n var ac = ev.accelerationIncludingGravity.x || ev.accelerationIncludingGravity.y || ev.accelerationIncludingGravity.z;\n if (window.orientation) {\n var or = window.orientation;\n if (typeof or === \"number\") {\n this.addEntropy(or, 1, \"accelerometer\");\n }\n }\n if (ac) {\n this.addEntropy(ac, 2, \"accelerometer\");\n }\n this._addCurrentTimeToEntropy(0);\n },\n _fireEvent: function (name, arg) {\n var j, cbs = sjcl.random._callbacks[name], cbsTemp = [];\n /* TODO: there is a race condition between removing collectors and firing them */\n /* I'm not sure if this is necessary; in C++, iterating over a\n * collection and modifying it at the same time is a no-no.\n */\n for (j in cbs) {\n if (cbs.hasOwnProperty(j)) {\n cbsTemp.push(cbs[j]);\n }\n }\n for (j = 0; j < cbsTemp.length; j++) {\n cbsTemp[j](arg);\n }\n }\n};\n/** an instance for the prng.\n* @see sjcl.prng\n*/\nsjcl.random = new sjcl.prng(6);\n(function () {\n // function for getting nodejs crypto module. catches and ignores errors.\n function getCryptoModule() {\n try {\n return require('crypto');\n }\n catch (e) {\n return null;\n }\n }\n try {\n var buf, crypt, ab;\n // get cryptographically strong entropy depending on runtime environment\n if (typeof module !== 'undefined' && module.exports && (crypt = getCryptoModule()) && crypt.randomBytes) {\n buf = crypt.randomBytes(1024 / 8);\n buf = new Uint32Array(new Uint8Array(buf).buffer);\n sjcl.random.addEntropy(buf, 1024, \"crypto.randomBytes\");\n }\n else if (typeof window !== 'undefined' && typeof Uint32Array !== 'undefined') {\n ab = new Uint32Array(32);\n if (window.crypto && window.crypto.getRandomValues) {\n window.crypto.getRandomValues(ab);\n }\n else if (window.msCrypto && window.msCrypto.getRandomValues) {\n window.msCrypto.getRandomValues(ab);\n }\n else {\n return;\n }\n // get cryptographically strong entropy in Webkit\n sjcl.random.addEntropy(ab, 1024, \"crypto.getRandomValues\");\n }\n else {\n // no getRandomValues :-(\n }\n }\n catch (e) {\n if (typeof window !== 'undefined' && window.console) {\n console.log(\"There was an error collecting entropy from the browser:\");\n console.log(e);\n //we do not want the library to fail due to randomness not being maintained.\n }\n }\n}());\n/** @fileOverview Convenience functions centered around JSON encapsulation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * JSON encapsulation\n * @namespace\n */\nsjcl.json = {\n /** Default values for encryption */\n defaults: { v: 1, iter: 10000, ks: 128, ts: 64, mode: \"ccm\", adata: \"\", cipher: \"aes\" },\n /** Simple encryption function.\n * @param {String|bitArray} password The password or key.\n * @param {String} plaintext The data to encrypt.\n * @param {Object} [params] The parameters including tag, iv and salt.\n * @param {Object} [rp] A returned version with filled-in parameters.\n * @return {Object} The cipher raw data.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n */\n _encrypt: function (password, plaintext, params, rp) {\n params = params || {};\n rp = rp || {};\n var j = sjcl.json, p = j._add({ iv: sjcl.random.randomWords(4, 0) }, j.defaults), tmp, prp, adata;\n j._add(p, params);\n adata = p.adata;\n if (typeof p.salt === \"string\") {\n p.salt = sjcl.codec.base64.toBits(p.salt);\n }\n if (typeof p.iv === \"string\") {\n p.iv = sjcl.codec.base64.toBits(p.iv);\n }\n if (!sjcl.mode[p.mode] ||\n !sjcl.cipher[p.cipher] ||\n (typeof password === \"string\" && p.iter <= 100) ||\n (p.ts !== 64 && p.ts !== 96 && p.ts !== 128) ||\n (p.ks !== 128 && p.ks !== 192 && p.ks !== 256) ||\n (p.iv.length < 2 || p.iv.length > 4)) {\n throw new sjcl.exception.invalid(\"json encrypt: invalid parameters\");\n }\n if (typeof password === \"string\") {\n tmp = sjcl.misc.cachedPbkdf2(password, p);\n password = tmp.key.slice(0, p.ks / 32);\n p.salt = tmp.salt;\n }\n else if (sjcl.ecc && password instanceof sjcl.ecc.elGamal.publicKey) {\n tmp = password.kem();\n p.kemtag = tmp.tag;\n password = tmp.key.slice(0, p.ks / 32);\n }\n if (typeof plaintext === \"string\") {\n plaintext = sjcl.codec.utf8String.toBits(plaintext);\n }\n if (typeof adata === \"string\") {\n p.adata = adata = sjcl.codec.utf8String.toBits(adata);\n }\n prp = new sjcl.cipher[p.cipher](password);\n /* return the json data */\n j._add(rp, p);\n rp.key = password;\n /* do the encryption */\n if (p.mode === \"ccm\" && sjcl.arrayBuffer && sjcl.arrayBuffer.ccm && plaintext instanceof ArrayBuffer) {\n p.ct = sjcl.arrayBuffer.ccm.encrypt(prp, plaintext, p.iv, adata, p.ts);\n }\n else {\n p.ct = sjcl.mode[p.mode].encrypt(prp, plaintext, p.iv, adata, p.ts);\n }\n //return j.encode(j._subtract(p, j.defaults));\n return p;\n },\n /** Simple encryption function.\n * @param {String|bitArray} password The password or key.\n * @param {String} plaintext The data to encrypt.\n * @param {Object} [params] The parameters including tag, iv and salt.\n * @param {Object} [rp] A returned version with filled-in parameters.\n * @return {String} The ciphertext serialized data.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n */\n encrypt: function (password, plaintext, params, rp) {\n var j = sjcl.json, p = j._encrypt.apply(j, arguments);\n return j.encode(p);\n },\n /** Simple decryption function.\n * @param {String|bitArray} password The password or key.\n * @param {Object} ciphertext The cipher raw data to decrypt.\n * @param {Object} [params] Additional non-default parameters.\n * @param {Object} [rp] A returned object with filled parameters.\n * @return {String} The plaintext.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n * @throws {sjcl.exception.corrupt} if the ciphertext is corrupt.\n */\n _decrypt: function (password, ciphertext, params, rp) {\n params = params || {};\n rp = rp || {};\n var j = sjcl.json, p = j._add(j._add(j._add({}, j.defaults), ciphertext), params, true), ct, tmp, prp, adata = p.adata;\n if (typeof p.salt === \"string\") {\n p.salt = sjcl.codec.base64.toBits(p.salt);\n }\n if (typeof p.iv === \"string\") {\n p.iv = sjcl.codec.base64.toBits(p.iv);\n }\n if (!sjcl.mode[p.mode] ||\n !sjcl.cipher[p.cipher] ||\n (typeof password === \"string\" && p.iter <= 100) ||\n (p.ts !== 64 && p.ts !== 96 && p.ts !== 128) ||\n (p.ks !== 128 && p.ks !== 192 && p.ks !== 256) ||\n (!p.iv) ||\n (p.iv.length < 2 || p.iv.length > 4)) {\n throw new sjcl.exception.invalid(\"json decrypt: invalid parameters\");\n }\n if (typeof password === \"string\") {\n tmp = sjcl.misc.cachedPbkdf2(password, p);\n password = tmp.key.slice(0, p.ks / 32);\n p.salt = tmp.salt;\n }\n else if (sjcl.ecc && password instanceof sjcl.ecc.elGamal.secretKey) {\n password = password.unkem(sjcl.codec.base64.toBits(p.kemtag)).slice(0, p.ks / 32);\n }\n if (typeof adata === \"string\") {\n adata = sjcl.codec.utf8String.toBits(adata);\n }\n prp = new sjcl.cipher[p.cipher](password);\n /* do the decryption */\n if (p.mode === \"ccm\" && sjcl.arrayBuffer && sjcl.arrayBuffer.ccm && p.ct instanceof ArrayBuffer) {\n ct = sjcl.arrayBuffer.ccm.decrypt(prp, p.ct, p.iv, p.tag, adata, p.ts);\n }\n else {\n ct = sjcl.mode[p.mode].decrypt(prp, p.ct, p.iv, adata, p.ts);\n }\n /* return the json data */\n j._add(rp, p);\n rp.key = password;\n if (params.raw === 1) {\n return ct;\n }\n else {\n return sjcl.codec.utf8String.fromBits(ct);\n }\n },\n /** Simple decryption function.\n * @param {String|bitArray} password The password or key.\n * @param {String} ciphertext The ciphertext to decrypt.\n * @param {Object} [params] Additional non-default parameters.\n * @param {Object} [rp] A returned object with filled parameters.\n * @return {String} The plaintext.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n * @throws {sjcl.exception.corrupt} if the ciphertext is corrupt.\n */\n decrypt: function (password, ciphertext, params, rp) {\n var j = sjcl.json;\n return j._decrypt(password, j.decode(ciphertext), params, rp);\n },\n /** Encode a flat structure into a JSON string.\n * @param {Object} obj The structure to encode.\n * @return {String} A JSON string.\n * @throws {sjcl.exception.invalid} if obj has a non-alphanumeric property.\n * @throws {sjcl.exception.bug} if a parameter has an unsupported type.\n */\n encode: function (obj) {\n var i, out = '{', comma = '';\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (!i.match(/^[a-z0-9]+$/i)) {\n throw new sjcl.exception.invalid(\"json encode: invalid property name\");\n }\n out += comma + '\"' + i + '\":';\n comma = ',';\n switch (typeof obj[i]) {\n case 'number':\n case 'boolean':\n out += obj[i];\n break;\n case 'string':\n out += '\"' + escape(obj[i]) + '\"';\n break;\n case 'object':\n out += '\"' + sjcl.codec.base64.fromBits(obj[i], 0) + '\"';\n break;\n default:\n throw new sjcl.exception.bug(\"json encode: unsupported type\");\n }\n }\n }\n return out + '}';\n },\n /** Decode a simple (flat) JSON string into a structure. The ciphertext,\n * adata, salt and iv will be base64-decoded.\n * @param {String} str The string.\n * @return {Object} The decoded structure.\n * @throws {sjcl.exception.invalid} if str isn't (simple) JSON.\n */\n decode: function (str) {\n str = str.replace(/\\s/g, '');\n if (!str.match(/^\\{.*\\}$/)) {\n throw new sjcl.exception.invalid(\"json decode: this isn't json!\");\n }\n var a = str.replace(/^\\{|\\}$/g, '').split(/,/), out = {}, i, m;\n for (i = 0; i < a.length; i++) {\n if (!(m = a[i].match(/^\\s*(?:([\"']?)([a-z][a-z0-9]*)\\1)\\s*:\\s*(?:(-?\\d+)|\"([a-z0-9+\\/%*_.@=\\-]*)\"|(true|false))$/i))) {\n throw new sjcl.exception.invalid(\"json decode: this isn't json!\");\n }\n if (m[3] != null) {\n out[m[2]] = parseInt(m[3], 10);\n }\n else if (m[4] != null) {\n out[m[2]] = m[2].match(/^(ct|adata|salt|iv)$/) ? sjcl.codec.base64.toBits(m[4]) : unescape(m[4]);\n }\n else if (m[5] != null) {\n out[m[2]] = m[5] === 'true';\n }\n }\n return out;\n },\n /** Insert all elements of src into target, modifying and returning target.\n * @param {Object} target The object to be modified.\n * @param {Object} src The object to pull data from.\n * @param {boolean} [requireSame=false] If true, throw an exception if any field of target differs from corresponding field of src.\n * @return {Object} target.\n * @private\n */\n _add: function (target, src, requireSame) {\n if (target === undefined) {\n target = {};\n }\n if (src === undefined) {\n return target;\n }\n var i;\n for (i in src) {\n if (src.hasOwnProperty(i)) {\n if (requireSame && target[i] !== undefined && target[i] !== src[i]) {\n throw new sjcl.exception.invalid(\"required parameter overridden\");\n }\n target[i] = src[i];\n }\n }\n return target;\n },\n /** Remove all elements of minus from plus. Does not modify plus.\n * @private\n */\n _subtract: function (plus, minus) {\n var out = {}, i;\n for (i in plus) {\n if (plus.hasOwnProperty(i) && plus[i] !== minus[i]) {\n out[i] = plus[i];\n }\n }\n return out;\n },\n /** Return only the specified elements of src.\n * @private\n */\n _filter: function (src, filter) {\n var out = {}, i;\n for (i = 0; i < filter.length; i++) {\n if (src[filter[i]] !== undefined) {\n out[filter[i]] = src[filter[i]];\n }\n }\n return out;\n }\n};\n/** Simple encryption function; convenient shorthand for sjcl.json.encrypt.\n * @param {String|bitArray} password The password or key.\n * @param {String} plaintext The data to encrypt.\n * @param {Object} [params] The parameters including tag, iv and salt.\n * @param {Object} [rp] A returned version with filled-in parameters.\n * @return {String} The ciphertext.\n */\nsjcl.encrypt = sjcl.json.encrypt;\n/** Simple decryption function; convenient shorthand for sjcl.json.decrypt.\n * @param {String|bitArray} password The password or key.\n * @param {String} ciphertext The ciphertext to decrypt.\n * @param {Object} [params] Additional non-default parameters.\n * @param {Object} [rp] A returned object with filled parameters.\n * @return {String} The plaintext.\n */\nsjcl.decrypt = sjcl.json.decrypt;\n/** The cache for cachedPbkdf2.\n * @private\n */\nsjcl.misc._pbkdf2Cache = {};\n/** Cached PBKDF2 key derivation.\n * @param {String} password The password.\n * @param {Object} [obj] The derivation params (iteration count and optional salt).\n * @return {Object} The derived data in key, the salt in salt.\n */\nsjcl.misc.cachedPbkdf2 = function (password, obj) {\n var cache = sjcl.misc._pbkdf2Cache, c, cp, str, salt, iter;\n obj = obj || {};\n iter = obj.iter || 1000;\n /* open the cache for this password and iteration count */\n cp = cache[password] = cache[password] || {};\n c = cp[iter] = cp[iter] || { firstSalt: (obj.salt && obj.salt.length) ?\n obj.salt.slice(0) : sjcl.random.randomWords(2, 0) };\n salt = (obj.salt === undefined) ? c.firstSalt : obj.salt;\n c[salt] = c[salt] || sjcl.misc.pbkdf2(password, salt, obj.iter);\n return { key: c[salt].slice(0), salt: salt.slice(0) };\n};\n// Thanks to Colin McRae and Jonathan Burns of ionic security\n// for reporting and fixing two bugs in this file!\n/**\n * Constructs a new bignum from another bignum, a number or a hex string.\n * @constructor\n */\nsjcl.bn = function (it) {\n this.initWith(it);\n};\nsjcl.bn.prototype = {\n radix: 24,\n maxMul: 8,\n _class: sjcl.bn,\n copy: function () {\n return new this._class(this);\n },\n /**\n * Initializes this with it, either as a bn, a number, or a hex string.\n */\n initWith: function (it) {\n var i = 0, k;\n switch (typeof it) {\n case \"object\":\n this.limbs = it.limbs.slice(0);\n break;\n case \"number\":\n this.limbs = [it];\n this.normalize();\n break;\n case \"string\":\n it = it.replace(/^0x/, '');\n this.limbs = [];\n // hack\n k = this.radix / 4;\n for (i = 0; i < it.length; i += k) {\n this.limbs.push(parseInt(it.substring(Math.max(it.length - i - k, 0), it.length - i), 16));\n }\n break;\n default:\n this.limbs = [0];\n }\n return this;\n },\n /**\n * Returns true if \"this\" and \"that\" are equal. Calls fullReduce().\n * Equality test is in constant time.\n */\n equals: function (that) {\n if (typeof that === \"number\") {\n that = new this._class(that);\n }\n var difference = 0, i;\n this.fullReduce();\n that.fullReduce();\n for (i = 0; i < this.limbs.length || i < that.limbs.length; i++) {\n difference |= this.getLimb(i) ^ that.getLimb(i);\n }\n return (difference === 0);\n },\n /**\n * Get the i'th limb of this, zero if i is too large.\n */\n getLimb: function (i) {\n return (i >= this.limbs.length) ? 0 : this.limbs[i];\n },\n /**\n * Constant time comparison function.\n * Returns 1 if this >= that, or zero otherwise.\n */\n greaterEquals: function (that) {\n if (typeof that === \"number\") {\n that = new this._class(that);\n }\n var less = 0, greater = 0, i, a, b;\n i = Math.max(this.limbs.length, that.limbs.length) - 1;\n for (; i >= 0; i--) {\n a = this.getLimb(i);\n b = that.getLimb(i);\n greater |= (b - a) & ~less;\n less |= (a - b) & ~greater;\n }\n return (greater | ~less) >>> 31;\n },\n /**\n * Convert to a hex string.\n */\n toString: function () {\n this.fullReduce();\n var out = \"\", i, s, l = this.limbs;\n for (i = 0; i < this.limbs.length; i++) {\n s = l[i].toString(16);\n while (i < this.limbs.length - 1 && s.length < 6) {\n s = \"0\" + s;\n }\n out = s + out;\n }\n return \"0x\" + out;\n },\n /** this += that. Does not normalize. */\n addM: function (that) {\n if (typeof (that) !== \"object\") {\n that = new this._class(that);\n }\n var i, l = this.limbs, ll = that.limbs;\n for (i = l.length; i < ll.length; i++) {\n l[i] = 0;\n }\n for (i = 0; i < ll.length; i++) {\n l[i] += ll[i];\n }\n return this;\n },\n /** this *= 2. Requires normalized; ends up normalized. */\n doubleM: function () {\n var i, carry = 0, tmp, r = this.radix, m = this.radixMask, l = this.limbs;\n for (i = 0; i < l.length; i++) {\n tmp = l[i];\n tmp = tmp + tmp + carry;\n l[i] = tmp & m;\n carry = tmp >> r;\n }\n if (carry) {\n l.push(carry);\n }\n return this;\n },\n /** this /= 2, rounded down. Requires normalized; ends up normalized. */\n halveM: function () {\n var i, carry = 0, tmp, r = this.radix, l = this.limbs;\n for (i = l.length - 1; i >= 0; i--) {\n tmp = l[i];\n l[i] = (tmp + carry) >> 1;\n carry = (tmp & 1) << r;\n }\n if (!l[l.length - 1]) {\n l.pop();\n }\n return this;\n },\n /** this -= that. Does not normalize. */\n subM: function (that) {\n if (typeof (that) !== \"object\") {\n that = new this._class(that);\n }\n var i, l = this.limbs, ll = that.limbs;\n for (i = l.length; i < ll.length; i++) {\n l[i] = 0;\n }\n for (i = 0; i < ll.length; i++) {\n l[i] -= ll[i];\n }\n return this;\n },\n mod: function (that) {\n var neg = !this.greaterEquals(new sjcl.bn(0));\n that = new sjcl.bn(that).normalize(); // copy before we begin\n var out = new sjcl.bn(this).normalize(), ci = 0;\n if (neg)\n out = (new sjcl.bn(0)).subM(out).normalize();\n for (; out.greaterEquals(that); ci++) {\n that.doubleM();\n }\n if (neg)\n out = that.sub(out).normalize();\n for (; ci > 0; ci--) {\n that.halveM();\n if (out.greaterEquals(that)) {\n out.subM(that).normalize();\n }\n }\n return out.trim();\n },\n /** return inverse mod prime p. p must be odd. Binary extended Euclidean algorithm mod p. */\n inverseMod: function (p) {\n var a = new sjcl.bn(1), b = new sjcl.bn(0), x = new sjcl.bn(this), y = new sjcl.bn(p), tmp, i, nz = 1;\n if (!(p.limbs[0] & 1)) {\n throw (new sjcl.exception.invalid(\"inverseMod: p must be odd\"));\n }\n // invariant: y is odd\n do {\n if (x.limbs[0] & 1) {\n if (!x.greaterEquals(y)) {\n // x < y; swap everything\n tmp = x;\n x = y;\n y = tmp;\n tmp = a;\n a = b;\n b = tmp;\n }\n x.subM(y);\n x.normalize();\n if (!a.greaterEquals(b)) {\n a.addM(p);\n }\n a.subM(b);\n }\n // cut everything in half\n x.halveM();\n if (a.limbs[0] & 1) {\n a.addM(p);\n }\n a.normalize();\n a.halveM();\n // check for termination: x ?= 0\n for (i = nz = 0; i < x.limbs.length; i++) {\n nz |= x.limbs[i];\n }\n } while (nz);\n if (!y.equals(1)) {\n throw (new sjcl.exception.invalid(\"inverseMod: p and x must be relatively prime\"));\n }\n return b;\n },\n /** this + that. Does not normalize. */\n add: function (that) {\n return this.copy().addM(that);\n },\n /** this - that. Does not normalize. */\n sub: function (that) {\n return this.copy().subM(that);\n },\n /** this * that. Normalizes and reduces. */\n mul: function (that) {\n if (typeof (that) === \"number\") {\n that = new this._class(that);\n }\n else {\n that.normalize();\n }\n this.normalize();\n var i, j, a = this.limbs, b = that.limbs, al = a.length, bl = b.length, out = new this._class(), c = out.limbs, ai, ii = this.maxMul;\n for (i = 0; i < this.limbs.length + that.limbs.length + 1; i++) {\n c[i] = 0;\n }\n for (i = 0; i < al; i++) {\n ai = a[i];\n for (j = 0; j < bl; j++) {\n c[i + j] += ai * b[j];\n }\n if (!--ii) {\n ii = this.maxMul;\n out.cnormalize();\n }\n }\n return out.cnormalize().reduce();\n },\n /** this ^ 2. Normalizes and reduces. */\n square: function () {\n return this.mul(this);\n },\n /** this ^ n. Uses square-and-multiply. Normalizes and reduces. */\n power: function (l) {\n l = new sjcl.bn(l).normalize().trim().limbs;\n var i, j, out = new this._class(1), pow = this;\n for (i = 0; i < l.length; i++) {\n for (j = 0; j < this.radix; j++) {\n if (l[i] & (1 << j)) {\n out = out.mul(pow);\n }\n if (i == (l.length - 1) && l[i] >> (j + 1) == 0) {\n break;\n }\n pow = pow.square();\n }\n }\n return out;\n },\n /** this * that mod N */\n mulmod: function (that, N) {\n return this.mod(N).mul(that.mod(N)).mod(N);\n },\n /** this ^ x mod N */\n powermod: function (x, N) {\n x = new sjcl.bn(x);\n N = new sjcl.bn(N);\n // Jump to montpowermod if possible.\n if ((N.limbs[0] & 1) == 1) {\n var montOut = this.montpowermod(x, N);\n if (montOut != false) {\n return montOut;\n } // else go to slow powermod\n }\n var i, j, l = x.normalize().trim().limbs, out = new this._class(1), pow = this;\n for (i = 0; i < l.length; i++) {\n for (j = 0; j < this.radix; j++) {\n if (l[i] & (1 << j)) {\n out = out.mulmod(pow, N);\n }\n if (i == (l.length - 1) && l[i] >> (j + 1) == 0) {\n break;\n }\n pow = pow.mulmod(pow, N);\n }\n }\n return out;\n },\n /** this ^ x mod N with Montomery reduction */\n montpowermod: function (x, N) {\n x = new sjcl.bn(x).normalize().trim();\n N = new sjcl.bn(N);\n var i, j, radix = this.radix, out = new this._class(1), pow = this.copy();\n // Generate R as a cap of N.\n var R, s, wind, bitsize = x.bitLength();\n R = new sjcl.bn({\n limbs: N.copy().normalize().trim().limbs.map(function () { return 0; })\n });\n for (s = this.radix; s > 0; s--) {\n if (((N.limbs[N.limbs.length - 1] >> s) & 1) == 1) {\n R.limbs[R.limbs.length - 1] = 1 << s;\n break;\n }\n }\n // Calculate window size as a function of the exponent's size.\n if (bitsize == 0) {\n return this;\n }\n else if (bitsize < 18) {\n wind = 1;\n }\n else if (bitsize < 48) {\n wind = 3;\n }\n else if (bitsize < 144) {\n wind = 4;\n }\n else if (bitsize < 768) {\n wind = 5;\n }\n else {\n wind = 6;\n }\n // Find R' and N' such that R * R' - N * N' = 1.\n var RR = R.copy(), NN = N.copy(), RP = new sjcl.bn(1), NP = new sjcl.bn(0), RT = R.copy();\n while (RT.greaterEquals(1)) {\n RT.halveM();\n if ((RP.limbs[0] & 1) == 0) {\n RP.halveM();\n NP.halveM();\n }\n else {\n RP.addM(NN);\n RP.halveM();\n NP.halveM();\n NP.addM(RR);\n }\n }\n RP = RP.normalize();\n NP = NP.normalize();\n RR.doubleM();\n var R2 = RR.mulmod(RR, N);\n // Check whether the invariant holds.\n // If it doesn't, we can't use Montgomery reduction on this modulus.\n if (!RR.mul(RP).sub(N.mul(NP)).equals(1)) {\n return false;\n }\n var montIn = function (c) { return montMul(c, R2); }, montMul = function (a, b) {\n // Standard Montgomery reduction\n var k, ab, right, abBar, mask = (1 << (s + 1)) - 1;\n ab = a.mul(b);\n right = ab.mul(NP);\n right.limbs = right.limbs.slice(0, R.limbs.length);\n if (right.limbs.length == R.limbs.length) {\n right.limbs[R.limbs.length - 1] &= mask;\n }\n right = right.mul(N);\n abBar = ab.add(right).normalize().trim();\n abBar.limbs = abBar.limbs.slice(R.limbs.length - 1);\n // Division. Equivelent to calling *.halveM() s times.\n for (k = 0; k < abBar.limbs.length; k++) {\n if (k > 0) {\n abBar.limbs[k - 1] |= (abBar.limbs[k] & mask) << (radix - s - 1);\n }\n abBar.limbs[k] = abBar.limbs[k] >> (s + 1);\n }\n if (abBar.greaterEquals(N)) {\n abBar.subM(N);\n }\n return abBar;\n }, montOut = function (c) { return montMul(c, 1); };\n pow = montIn(pow);\n out = montIn(out);\n // Sliding-Window Exponentiation (HAC 14.85)\n var h, precomp = {}, cap = (1 << (wind - 1)) - 1;\n precomp[1] = pow.copy();\n precomp[2] = montMul(pow, pow);\n for (h = 1; h <= cap; h++) {\n precomp[(2 * h) + 1] = montMul(precomp[(2 * h) - 1], precomp[2]);\n }\n var getBit = function (exp, i) {\n var off = i % exp.radix;\n return (exp.limbs[Math.floor(i / exp.radix)] & (1 << off)) >> off;\n };\n for (i = x.bitLength() - 1; i >= 0;) {\n if (getBit(x, i) == 0) {\n // If the next bit is zero:\n // Square, move forward one bit.\n out = montMul(out, out);\n i = i - 1;\n }\n else {\n // If the next bit is one:\n // Find the longest sequence of bits after this one, less than `wind`\n // bits long, that ends with a 1. Convert the sequence into an\n // integer and look up the pre-computed value to add.\n var l = i - wind + 1;\n while (getBit(x, l) == 0) {\n l++;\n }\n var indx = 0;\n for (j = l; j <= i; j++) {\n indx += getBit(x, j) << (j - l);\n out = montMul(out, out);\n }\n out = montMul(out, precomp[indx]);\n i = l - 1;\n }\n }\n return montOut(out);\n },\n trim: function () {\n var l = this.limbs, p;\n do {\n p = l.pop();\n } while (l.length && p === 0);\n l.push(p);\n return this;\n },\n /** Reduce mod a modulus. Stubbed for subclassing. */\n reduce: function () {\n return this;\n },\n /** Reduce and normalize. */\n fullReduce: function () {\n return this.normalize();\n },\n /** Propagate carries. */\n normalize: function () {\n var carry = 0, i, pv = this.placeVal, ipv = this.ipv, l, m, limbs = this.limbs, ll = limbs.length, mask = this.radixMask;\n for (i = 0; i < ll || (carry !== 0 && carry !== -1); i++) {\n l = (limbs[i] || 0) + carry;\n m = limbs[i] = l & mask;\n carry = (l - m) * ipv;\n }\n if (carry === -1) {\n limbs[i - 1] -= pv;\n }\n this.trim();\n return this;\n },\n /** Constant-time normalize. Does not allocate additional space. */\n cnormalize: function () {\n var carry = 0, i, ipv = this.ipv, l, m, limbs = this.limbs, ll = limbs.length, mask = this.radixMask;\n for (i = 0; i < ll - 1; i++) {\n l = limbs[i] + carry;\n m = limbs[i] = l & mask;\n carry = (l - m) * ipv;\n }\n limbs[i] += carry;\n return this;\n },\n /** Serialize to a bit array */\n toBits: function (len) {\n this.fullReduce();\n len = len || this.exponent || this.bitLength();\n var i = Math.floor((len - 1) / 24), w = sjcl.bitArray, e = (len + 7 & -8) % this.radix || this.radix, out = [w.partial(e, this.getLimb(i))];\n for (i--; i >= 0; i--) {\n out = w.concat(out, [w.partial(Math.min(this.radix, len), this.getLimb(i))]);\n len -= this.radix;\n }\n return out;\n },\n /** Return the length in bits, rounded up to the nearest byte. */\n bitLength: function () {\n this.fullReduce();\n var out = this.radix * (this.limbs.length - 1), b = this.limbs[this.limbs.length - 1];\n for (; b; b >>>= 1) {\n out++;\n }\n return out + 7 & -8;\n }\n};\n/** @memberOf sjcl.bn\n* @this { sjcl.bn }\n*/\nsjcl.bn.fromBits = function (bits) {\n var Class = this, out = new Class(), words = [], w = sjcl.bitArray, t = this.prototype, l = Math.min(this.bitLength || 0x100000000, w.bitLength(bits)), e = l % t.radix || t.radix;\n words[0] = w.extract(bits, 0, e);\n for (; e < l; e += t.radix) {\n words.unshift(w.extract(bits, e, t.radix));\n }\n out.limbs = words;\n return out;\n};\nsjcl.bn.prototype.ipv = 1 / (sjcl.bn.prototype.placeVal = Math.pow(2, sjcl.bn.prototype.radix));\nsjcl.bn.prototype.radixMask = (1 << sjcl.bn.prototype.radix) - 1;\n/**\n * Creates a new subclass of bn, based on reduction modulo a pseudo-Mersenne prime,\n * i.e. a prime of the form 2^e + sum(a * 2^b),where the sum is negative and sparse.\n */\nsjcl.bn.pseudoMersennePrime = function (exponent, coeff) {\n /** @constructor\n * @private\n */\n function p(it) {\n this.initWith(it);\n /*if (this.limbs[this.modOffset]) {\n this.reduce();\n }*/\n }\n var ppr = p.prototype = new sjcl.bn(), i, tmp, mo;\n mo = ppr.modOffset = Math.ceil(tmp = exponent / ppr.radix);\n ppr.exponent = exponent;\n ppr.offset = [];\n ppr.factor = [];\n ppr.minOffset = mo;\n ppr.fullMask = 0;\n ppr.fullOffset = [];\n ppr.fullFactor = [];\n ppr.modulus = p.modulus = new sjcl.bn(Math.pow(2, exponent));\n ppr.fullMask = 0 | -Math.pow(2, exponent % ppr.radix);\n for (i = 0; i < coeff.length; i++) {\n ppr.offset[i] = Math.floor(coeff[i][0] / ppr.radix - tmp);\n ppr.fullOffset[i] = Math.floor(coeff[i][0] / ppr.radix) - mo + 1;\n ppr.factor[i] = coeff[i][1] * Math.pow(1 / 2, exponent - coeff[i][0] + ppr.offset[i] * ppr.radix);\n ppr.fullFactor[i] = coeff[i][1] * Math.pow(1 / 2, exponent - coeff[i][0] + ppr.fullOffset[i] * ppr.radix);\n ppr.modulus.addM(new sjcl.bn(Math.pow(2, coeff[i][0]) * coeff[i][1]));\n ppr.minOffset = Math.min(ppr.minOffset, -ppr.offset[i]); // conservative\n }\n ppr._class = p;\n ppr.modulus.cnormalize();\n /** Approximate reduction mod p. May leave a number which is negative or slightly larger than p.\n * @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr.reduce = function () {\n var i, k, l, mo = this.modOffset, limbs = this.limbs, off = this.offset, ol = this.offset.length, fac = this.factor, ll;\n i = this.minOffset;\n while (limbs.length > mo) {\n l = limbs.pop();\n ll = limbs.length;\n for (k = 0; k < ol; k++) {\n limbs[ll + off[k]] -= fac[k] * l;\n }\n i--;\n if (!i) {\n limbs.push(0);\n this.cnormalize();\n i = this.minOffset;\n }\n }\n this.cnormalize();\n return this;\n };\n /** @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr._strongReduce = (ppr.fullMask === -1) ? ppr.reduce : function () {\n var limbs = this.limbs, i = limbs.length - 1, k, l;\n this.reduce();\n if (i === this.modOffset - 1) {\n l = limbs[i] & this.fullMask;\n limbs[i] -= l;\n for (k = 0; k < this.fullOffset.length; k++) {\n limbs[i + this.fullOffset[k]] -= this.fullFactor[k] * l;\n }\n this.normalize();\n }\n };\n /** mostly constant-time, very expensive full reduction.\n * @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr.fullReduce = function () {\n var greater, i;\n // massively above the modulus, may be negative\n this._strongReduce();\n // less than twice the modulus, may be negative\n this.addM(this.modulus);\n this.addM(this.modulus);\n this.normalize();\n // probably 2-3x the modulus\n this._strongReduce();\n // less than the power of 2. still may be more than\n // the modulus\n // HACK: pad out to this length\n for (i = this.limbs.length; i < this.modOffset; i++) {\n this.limbs[i] = 0;\n }\n // constant-time subtract modulus\n greater = this.greaterEquals(this.modulus);\n for (i = 0; i < this.limbs.length; i++) {\n this.limbs[i] -= this.modulus.limbs[i] * greater;\n }\n this.cnormalize();\n return this;\n };\n /** @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr.inverse = function () {\n return (this.power(this.modulus.sub(2)));\n };\n p.fromBits = sjcl.bn.fromBits;\n return p;\n};\n// a small Mersenne prime\nvar sbp = sjcl.bn.pseudoMersennePrime;\nsjcl.bn.prime = {\n p127: sbp(127, [[0, -1]]),\n // Bernstein's prime for Curve25519\n p25519: sbp(255, [[0, -19]]),\n // Koblitz primes\n p192k: sbp(192, [[32, -1], [12, -1], [8, -1], [7, -1], [6, -1], [3, -1], [0, -1]]),\n p224k: sbp(224, [[32, -1], [12, -1], [11, -1], [9, -1], [7, -1], [4, -1], [1, -1], [0, -1]]),\n p256k: sbp(256, [[32, -1], [9, -1], [8, -1], [7, -1], [6, -1], [4, -1], [0, -1]]),\n // NIST primes\n p192: sbp(192, [[0, -1], [64, -1]]),\n p224: sbp(224, [[0, 1], [96, -1]]),\n p256: sbp(256, [[0, -1], [96, 1], [192, 1], [224, -1]]),\n p384: sbp(384, [[0, -1], [32, 1], [96, -1], [128, -1]]),\n p521: sbp(521, [[0, -1]])\n};\nsjcl.bn.random = function (modulus, paranoia) {\n if (typeof modulus !== \"object\") {\n modulus = new sjcl.bn(modulus);\n }\n var words, i, l = modulus.limbs.length, m = modulus.limbs[l - 1] + 1, out = new sjcl.bn();\n while (true) {\n // get a sequence whose first digits make sense\n do {\n words = sjcl.random.randomWords(l, paranoia);\n if (words[l - 1] < 0) {\n words[l - 1] += 0x100000000;\n }\n } while (Math.floor(words[l - 1] / m) === Math.floor(0x100000000 / m));\n words[l - 1] %= m;\n // mask off all the limbs\n for (i = 0; i < l - 1; i++) {\n words[i] &= modulus.radixMask;\n }\n // check the rest of the digitssj\n out.limbs = words;\n if (!out.greaterEquals(modulus)) {\n return out;\n }\n }\n};\n/**\n * base class for all ecc operations.\n * @namespace\n */\nsjcl.ecc = {};\n/**\n * Represents a point on a curve in affine coordinates.\n * @constructor\n * @param {sjcl.ecc.curve} curve The curve that this point lies on.\n * @param {bigInt} x The x coordinate.\n * @param {bigInt} y The y coordinate.\n */\nsjcl.ecc.point = function (curve, x, y) {\n if (x === undefined) {\n this.isIdentity = true;\n }\n else {\n if (x instanceof sjcl.bn) {\n x = new curve.field(x);\n }\n if (y instanceof sjcl.bn) {\n y = new curve.field(y);\n }\n this.x = x;\n this.y = y;\n this.isIdentity = false;\n }\n this.curve = curve;\n};\nsjcl.ecc.point.prototype = {\n toJac: function () {\n return new sjcl.ecc.pointJac(this.curve, this.x, this.y, new this.curve.field(1));\n },\n mult: function (k) {\n return this.toJac().mult(k, this).toAffine();\n },\n /**\n * Multiply this point by k, added to affine2*k2, and return the answer in Jacobian coordinates.\n * @param {bigInt} k The coefficient to multiply this by.\n * @param {bigInt} k2 The coefficient to multiply affine2 this by.\n * @param {sjcl.ecc.point} affine The other point in affine coordinates.\n * @return {sjcl.ecc.pointJac} The result of the multiplication and addition, in Jacobian coordinates.\n */\n mult2: function (k, k2, affine2) {\n return this.toJac().mult2(k, this, k2, affine2).toAffine();\n },\n multiples: function () {\n var m, i, j;\n if (this._multiples === undefined) {\n j = this.toJac().doubl();\n m = this._multiples = [new sjcl.ecc.point(this.curve), this, j.toAffine()];\n for (i = 3; i < 16; i++) {\n j = j.add(this);\n m.push(j.toAffine());\n }\n }\n return this._multiples;\n },\n negate: function () {\n var newY = new this.curve.field(0).sub(this.y).normalize().reduce();\n return new sjcl.ecc.point(this.curve, this.x, newY);\n },\n isValid: function () {\n return this.y.square().equals(this.curve.b.add(this.x.mul(this.curve.a.add(this.x.square()))));\n },\n toBits: function () {\n return sjcl.bitArray.concat(this.x.toBits(), this.y.toBits());\n }\n};\n/**\n * Represents a point on a curve in Jacobian coordinates. Coordinates can be specified as bigInts or strings (which\n * will be converted to bigInts).\n *\n * @constructor\n * @param {bigInt/string} x The x coordinate.\n * @param {bigInt/string} y The y coordinate.\n * @param {bigInt/string} z The z coordinate.\n * @param {sjcl.ecc.curve} curve The curve that this point lies on.\n */\nsjcl.ecc.pointJac = function (curve, x, y, z) {\n if (x === undefined) {\n this.isIdentity = true;\n }\n else {\n this.x = x;\n this.y = y;\n this.z = z;\n this.isIdentity = false;\n }\n this.curve = curve;\n};\nsjcl.ecc.pointJac.prototype = {\n /**\n * Adds S and T and returns the result in Jacobian coordinates. Note that S must be in Jacobian coordinates and T must be in affine coordinates.\n * @param {sjcl.ecc.pointJac} S One of the points to add, in Jacobian coordinates.\n * @param {sjcl.ecc.point} T The other point to add, in affine coordinates.\n * @return {sjcl.ecc.pointJac} The sum of the two points, in Jacobian coordinates.\n */\n add: function (T) {\n var S = this, sz2, c, d, c2, x1, x2, x, y1, y2, y, z;\n if (S.curve !== T.curve) {\n throw new sjcl.exception.invalid(\"sjcl.ecc.add(): Points must be on the same curve to add them!\");\n }\n if (S.isIdentity) {\n return T.toJac();\n }\n else if (T.isIdentity) {\n return S;\n }\n sz2 = S.z.square();\n c = T.x.mul(sz2).subM(S.x);\n if (c.equals(0)) {\n if (S.y.equals(T.y.mul(sz2.mul(S.z)))) {\n // same point\n return S.doubl();\n }\n else {\n // inverses\n return new sjcl.ecc.pointJac(S.curve);\n }\n }\n d = T.y.mul(sz2.mul(S.z)).subM(S.y);\n c2 = c.square();\n x1 = d.square();\n x2 = c.square().mul(c).addM(S.x.add(S.x).mul(c2));\n x = x1.subM(x2);\n y1 = S.x.mul(c2).subM(x).mul(d);\n y2 = S.y.mul(c.square().mul(c));\n y = y1.subM(y2);\n z = S.z.mul(c);\n return new sjcl.ecc.pointJac(this.curve, x, y, z);\n },\n /**\n * doubles this point.\n * @return {sjcl.ecc.pointJac} The doubled point.\n */\n doubl: function () {\n if (this.isIdentity) {\n return this;\n }\n var y2 = this.y.square(), a = y2.mul(this.x.mul(4)), b = y2.square().mul(8), z2 = this.z.square(), c = this.curve.a.toString() == (new sjcl.bn(-3)).toString() ?\n this.x.sub(z2).mul(3).mul(this.x.add(z2)) :\n this.x.square().mul(3).add(z2.square().mul(this.curve.a)), x = c.square().subM(a).subM(a), y = a.sub(x).mul(c).subM(b), z = this.y.add(this.y).mul(this.z);\n return new sjcl.ecc.pointJac(this.curve, x, y, z);\n },\n /**\n * Returns a copy of this point converted to affine coordinates.\n * @return {sjcl.ecc.point} The converted point.\n */\n toAffine: function () {\n if (this.isIdentity || this.z.equals(0)) {\n return new sjcl.ecc.point(this.curve);\n }\n var zi = this.z.inverse(), zi2 = zi.square();\n return new sjcl.ecc.point(this.curve, this.x.mul(zi2).fullReduce(), this.y.mul(zi2.mul(zi)).fullReduce());\n },\n /**\n * Multiply this point by k and return the answer in Jacobian coordinates.\n * @param {bigInt} k The coefficient to multiply by.\n * @param {sjcl.ecc.point} affine This point in affine coordinates.\n * @return {sjcl.ecc.pointJac} The result of the multiplication, in Jacobian coordinates.\n */\n mult: function (k, affine) {\n if (typeof (k) === \"number\") {\n k = [k];\n }\n else if (k.limbs !== undefined) {\n k = k.normalize().limbs;\n }\n var i, j, out = new sjcl.ecc.point(this.curve).toJac(), multiples = affine.multiples();\n for (i = k.length - 1; i >= 0; i--) {\n for (j = sjcl.bn.prototype.radix - 4; j >= 0; j -= 4) {\n out = out.doubl().doubl().doubl().doubl().add(multiples[k[i] >> j & 0xF]);\n }\n }\n return out;\n },\n /**\n * Multiply this point by k, added to affine2*k2, and return the answer in Jacobian coordinates.\n * @param {bigInt} k The coefficient to multiply this by.\n * @param {sjcl.ecc.point} affine This point in affine coordinates.\n * @param {bigInt} k2 The coefficient to multiply affine2 this by.\n * @param {sjcl.ecc.point} affine The other point in affine coordinates.\n * @return {sjcl.ecc.pointJac} The result of the multiplication and addition, in Jacobian coordinates.\n */\n mult2: function (k1, affine, k2, affine2) {\n if (typeof (k1) === \"number\") {\n k1 = [k1];\n }\n else if (k1.limbs !== undefined) {\n k1 = k1.normalize().limbs;\n }\n if (typeof (k2) === \"number\") {\n k2 = [k2];\n }\n else if (k2.limbs !== undefined) {\n k2 = k2.normalize().limbs;\n }\n var i, j, out = new sjcl.ecc.point(this.curve).toJac(), m1 = affine.multiples(), m2 = affine2.multiples(), l1, l2;\n for (i = Math.max(k1.length, k2.length) - 1; i >= 0; i--) {\n l1 = k1[i] | 0;\n l2 = k2[i] | 0;\n for (j = sjcl.bn.prototype.radix - 4; j >= 0; j -= 4) {\n out = out.doubl().doubl().doubl().doubl().add(m1[l1 >> j & 0xF]).add(m2[l2 >> j & 0xF]);\n }\n }\n return out;\n },\n negate: function () {\n return this.toAffine().negate().toJac();\n },\n isValid: function () {\n var z2 = this.z.square(), z4 = z2.square(), z6 = z4.mul(z2);\n return this.y.square().equals(this.curve.b.mul(z6).add(this.x.mul(this.curve.a.mul(z4).add(this.x.square()))));\n }\n};\n/**\n * Construct an elliptic curve. Most users will not use this and instead start with one of the NIST curves defined below.\n *\n * @constructor\n * @param {bigInt} p The prime modulus.\n * @param {bigInt} r The prime order of the curve.\n * @param {bigInt} a The constant a in the equation of the curve y^2 = x^3 + ax + b (for NIST curves, a is always -3).\n * @param {bigInt} x The x coordinate of a base point of the curve.\n * @param {bigInt} y The y coordinate of a base point of the curve.\n */\nsjcl.ecc.curve = function (Field, r, a, b, x, y) {\n this.field = Field;\n this.r = new sjcl.bn(r);\n this.a = new Field(a);\n this.b = new Field(b);\n this.G = new sjcl.ecc.point(this, new Field(x), new Field(y));\n};\nsjcl.ecc.curve.prototype.fromBits = function (bits) {\n var w = sjcl.bitArray, l = this.field.prototype.exponent + 7 & -8, p = new sjcl.ecc.point(this, this.field.fromBits(w.bitSlice(bits, 0, l)), this.field.fromBits(w.bitSlice(bits, l, 2 * l)));\n if (!p.isValid()) {\n throw new sjcl.exception.corrupt(\"not on the curve!\");\n }\n return p;\n};\nsjcl.ecc.curves = {\n c192: new sjcl.ecc.curve(sjcl.bn.prime.p192, \"0xffffffffffffffffffffffff99def836146bc9b1b4d22831\", -3, \"0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1\", \"0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012\", \"0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811\"),\n c224: new sjcl.ecc.curve(sjcl.bn.prime.p224, \"0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\", -3, \"0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4\", \"0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21\", \"0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34\"),\n c256: new sjcl.ecc.curve(sjcl.bn.prime.p256, \"0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\", -3, \"0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b\", \"0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296\", \"0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5\"),\n c384: new sjcl.ecc.curve(sjcl.bn.prime.p384, \"0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\", -3, \"0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef\", \"0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7\", \"0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f\"),\n c521: new sjcl.ecc.curve(sjcl.bn.prime.p521, \"0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409\", -3, \"0x051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00\", \"0xC6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66\", \"0x11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650\"),\n k192: new sjcl.ecc.curve(sjcl.bn.prime.p192k, \"0xfffffffffffffffffffffffe26f2fc170f69466a74defd8d\", 0, 3, \"0xdb4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d\", \"0x9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d\"),\n k224: new sjcl.ecc.curve(sjcl.bn.prime.p224k, \"0x010000000000000000000000000001dce8d2ec6184caf0a971769fb1f7\", 0, 5, \"0xa1455b334df099df30fc28a169a467e9e47075a90f7e650eb6b7a45c\", \"0x7e089fed7fba344282cafbd6f7e319f7c0b0bd59e2ca4bdb556d61a5\"),\n k256: new sjcl.ecc.curve(sjcl.bn.prime.p256k, \"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\", 0, 7, \"0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798\", \"0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8\")\n};\nsjcl.ecc.curveName = function (curve) {\n var curcurve;\n for (curcurve in sjcl.ecc.curves) {\n if (sjcl.ecc.curves.hasOwnProperty(curcurve)) {\n if (sjcl.ecc.curves[curcurve] === curve) {\n return curcurve;\n }\n }\n }\n throw new sjcl.exception.invalid(\"no such curve\");\n};\nsjcl.ecc.deserialize = function (key) {\n var types = [\"elGamal\", \"ecdsa\"];\n if (!key || !key.curve || !sjcl.ecc.curves[key.curve]) {\n throw new sjcl.exception.invalid(\"invalid serialization\");\n }\n if (types.indexOf(key.type) === -1) {\n throw new sjcl.exception.invalid(\"invalid type\");\n }\n var curve = sjcl.ecc.curves[key.curve];\n if (key.secretKey) {\n if (!key.exponent) {\n throw new sjcl.exception.invalid(\"invalid exponent\");\n }\n var exponent = new sjcl.bn(key.exponent);\n return new sjcl.ecc[key.type].secretKey(curve, exponent);\n }\n else {\n if (!key.point) {\n throw new sjcl.exception.invalid(\"invalid point\");\n }\n var point = curve.fromBits(sjcl.codec.hex.toBits(key.point));\n return new sjcl.ecc[key.type].publicKey(curve, point);\n }\n};\n/** our basicKey classes\n*/\nsjcl.ecc.basicKey = {\n /** ecc publicKey.\n * @constructor\n * @param {curve} curve the elliptic curve\n * @param {point} point the point on the curve\n */\n publicKey: function (curve, point) {\n this._curve = curve;\n this._curveBitLength = curve.r.bitLength();\n if (point instanceof Array) {\n this._point = curve.fromBits(point);\n }\n else {\n this._point = point;\n }\n this.serialize = function () {\n var curveName = sjcl.ecc.curveName(curve);\n return {\n type: this.getType(),\n secretKey: false,\n point: sjcl.codec.hex.fromBits(this._point.toBits()),\n curve: curveName\n };\n };\n /** get this keys point data\n * @return x and y as bitArrays\n */\n this.get = function () {\n var pointbits = this._point.toBits();\n var len = sjcl.bitArray.bitLength(pointbits);\n var x = sjcl.bitArray.bitSlice(pointbits, 0, len / 2);\n var y = sjcl.bitArray.bitSlice(pointbits, len / 2);\n return { x: x, y: y };\n };\n },\n /** ecc secretKey\n * @constructor\n * @param {curve} curve the elliptic curve\n * @param exponent\n */\n secretKey: function (curve, exponent) {\n this._curve = curve;\n this._curveBitLength = curve.r.bitLength();\n this._exponent = exponent;\n this.serialize = function () {\n var exponent = this.get();\n var curveName = sjcl.ecc.curveName(curve);\n return {\n type: this.getType(),\n secretKey: true,\n exponent: sjcl.codec.hex.fromBits(exponent),\n curve: curveName\n };\n };\n /** get this keys exponent data\n * @return {bitArray} exponent\n */\n this.get = function () {\n return this._exponent.toBits();\n };\n }\n};\n/** @private */\nsjcl.ecc.basicKey.generateKeys = function (cn) {\n return function generateKeys(curve, paranoia, sec) {\n curve = curve || 256;\n if (typeof curve === \"number\") {\n curve = sjcl.ecc.curves['c' + curve];\n if (curve === undefined) {\n throw new sjcl.exception.invalid(\"no such curve\");\n }\n }\n sec = sec || sjcl.bn.random(curve.r, paranoia);\n var pub = curve.G.mult(sec);\n return { pub: new sjcl.ecc[cn].publicKey(curve, pub),\n sec: new sjcl.ecc[cn].secretKey(curve, sec) };\n };\n};\n/** elGamal keys */\nsjcl.ecc.elGamal = {\n /** generate keys\n * @function\n * @param curve\n * @param {int} paranoia Paranoia for generation (default 6)\n * @param {secretKey} sec secret Key to use. used to get the publicKey for ones secretKey\n */\n generateKeys: sjcl.ecc.basicKey.generateKeys(\"elGamal\"),\n /** elGamal publicKey.\n * @constructor\n * @augments sjcl.ecc.basicKey.publicKey\n */\n publicKey: function (curve, point) {\n sjcl.ecc.basicKey.publicKey.apply(this, arguments);\n },\n /** elGamal secretKey\n * @constructor\n * @augments sjcl.ecc.basicKey.secretKey\n */\n secretKey: function (curve, exponent) {\n sjcl.ecc.basicKey.secretKey.apply(this, arguments);\n }\n};\nsjcl.ecc.elGamal.publicKey.prototype = {\n /** Kem function of elGamal Public Key\n * @param paranoia paranoia to use for randomization.\n * @return {object} key and tag. unkem(tag) with the corresponding secret key results in the key returned.\n */\n kem: function (paranoia) {\n var sec = sjcl.bn.random(this._curve.r, paranoia), tag = this._curve.G.mult(sec).toBits(), key = sjcl.hash.sha256.hash(this._point.mult(sec).toBits());\n return { key: key, tag: tag };\n },\n getType: function () {\n return \"elGamal\";\n }\n};\nsjcl.ecc.elGamal.secretKey.prototype = {\n /** UnKem function of elGamal Secret Key\n * @param {bitArray} tag The Tag to decrypt.\n * @return {bitArray} decrypted key.\n */\n unkem: function (tag) {\n return sjcl.hash.sha256.hash(this._curve.fromBits(tag).mult(this._exponent).toBits());\n },\n /** Diffie-Hellmann function\n * @param {elGamal.publicKey} pk The Public Key to do Diffie-Hellmann with\n * @return {bitArray} diffie-hellmann result for this key combination.\n */\n dh: function (pk) {\n return sjcl.hash.sha256.hash(pk._point.mult(this._exponent).toBits());\n },\n /** Diffie-Hellmann function, compatible with Java generateSecret\n * @param {elGamal.publicKey} pk The Public Key to do Diffie-Hellmann with\n * @return {bitArray} undigested X value, diffie-hellmann result for this key combination,\n * compatible with Java generateSecret().\n */\n dhJavaEc: function (pk) {\n return pk._point.mult(this._exponent).x.toBits();\n },\n getType: function () {\n return \"elGamal\";\n }\n};\n/** ecdsa keys */\nsjcl.ecc.ecdsa = {\n /** generate keys\n * @function\n * @param curve\n * @param {int} paranoia Paranoia for generation (default 6)\n * @param {secretKey} sec secret Key to use. used to get the publicKey for ones secretKey\n */\n generateKeys: sjcl.ecc.basicKey.generateKeys(\"ecdsa\")\n};\n/** ecdsa publicKey.\n* @constructor\n* @augments sjcl.ecc.basicKey.publicKey\n*/\nsjcl.ecc.ecdsa.publicKey = function (curve, point) {\n sjcl.ecc.basicKey.publicKey.apply(this, arguments);\n};\n/** specific functions for ecdsa publicKey. */\nsjcl.ecc.ecdsa.publicKey.prototype = {\n /** Diffie-Hellmann function\n * @param {bitArray} hash hash to verify.\n * @param {bitArray} rs signature bitArray.\n * @param {boolean} fakeLegacyVersion use old legacy version\n */\n verify: function (hash, rs, fakeLegacyVersion) {\n if (sjcl.bitArray.bitLength(hash) > this._curveBitLength) {\n hash = sjcl.bitArray.clamp(hash, this._curveBitLength);\n }\n var w = sjcl.bitArray, R = this._curve.r, l = this._curveBitLength, r = sjcl.bn.fromBits(w.bitSlice(rs, 0, l)), ss = sjcl.bn.fromBits(w.bitSlice(rs, l, 2 * l)), s = fakeLegacyVersion ? ss : ss.inverseMod(R), hG = sjcl.bn.fromBits(hash).mul(s).mod(R), hA = r.mul(s).mod(R), r2 = this._curve.G.mult2(hG, hA, this._point).x;\n if (r.equals(0) || ss.equals(0) || r.greaterEquals(R) || ss.greaterEquals(R) || !r2.equals(r)) {\n if (fakeLegacyVersion === undefined) {\n return this.verify(hash, rs, true);\n }\n else {\n throw (new sjcl.exception.corrupt(\"signature didn't check out\"));\n }\n }\n return true;\n },\n getType: function () {\n return \"ecdsa\";\n }\n};\n/** ecdsa secretKey\n* @constructor\n* @augments sjcl.ecc.basicKey.publicKey\n*/\nsjcl.ecc.ecdsa.secretKey = function (curve, exponent) {\n sjcl.ecc.basicKey.secretKey.apply(this, arguments);\n};\n/** specific functions for ecdsa secretKey. */\nsjcl.ecc.ecdsa.secretKey.prototype = {\n /** Diffie-Hellmann function\n * @param {bitArray} hash hash to sign.\n * @param {int} paranoia paranoia for random number generation\n * @param {boolean} fakeLegacyVersion use old legacy version\n */\n sign: function (hash, paranoia, fakeLegacyVersion, fixedKForTesting) {\n if (sjcl.bitArray.bitLength(hash) > this._curveBitLength) {\n hash = sjcl.bitArray.clamp(hash, this._curveBitLength);\n }\n var R = this._curve.r, l = R.bitLength(), k = fixedKForTesting || sjcl.bn.random(R.sub(1), paranoia).add(1), r = this._curve.G.mult(k).x.mod(R), ss = sjcl.bn.fromBits(hash).add(r.mul(this._exponent)), s = fakeLegacyVersion ? ss.inverseMod(R).mul(k).mod(R)\n : ss.mul(k.inverseMod(R)).mod(R);\n return sjcl.bitArray.concat(r.toBits(l), s.toBits(l));\n },\n getType: function () {\n return \"ecdsa\";\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Marco Munizaga\n */\n//patch arraybuffers if they don't exist\nif (typeof (ArrayBuffer) === 'undefined') {\n (function (globals) {\n \"use strict\";\n globals.ArrayBuffer = function () { };\n globals.DataView = function () { };\n }(this));\n}\n/**\n * ArrayBuffer\n * @namespace\n */\nsjcl.codec.arrayBuffer = {\n /** Convert from a bitArray to an ArrayBuffer.\n * Will default to 8byte padding if padding is undefined*/\n fromBits: function (arr, padding, padding_count) {\n var out, i, ol, tmp, smallest;\n padding = padding == undefined ? true : padding;\n padding_count = padding_count || 8;\n if (arr.length === 0) {\n return new ArrayBuffer(0);\n }\n ol = sjcl.bitArray.bitLength(arr) / 8;\n //check to make sure the bitLength is divisible by 8, if it isn't \n //we can't do anything since arraybuffers work with bytes, not bits\n if (sjcl.bitArray.bitLength(arr) % 8 !== 0) {\n throw new sjcl.exception.invalid(\"Invalid bit size, must be divisble by 8 to fit in an arraybuffer correctly\");\n }\n if (padding && ol % padding_count !== 0) {\n ol += padding_count - (ol % padding_count);\n }\n //padded temp for easy copying\n tmp = new DataView(new ArrayBuffer(arr.length * 4));\n for (i = 0; i < arr.length; i++) {\n tmp.setUint32(i * 4, (arr[i] << 32)); //get rid of the higher bits\n }\n //now copy the final message if we are not going to 0 pad\n out = new DataView(new ArrayBuffer(ol));\n //save a step when the tmp and out bytelength are ===\n if (out.byteLength === tmp.byteLength) {\n return tmp.buffer;\n }\n smallest = tmp.byteLength < out.byteLength ? tmp.byteLength : out.byteLength;\n for (i = 0; i < smallest; i++) {\n out.setUint8(i, tmp.getUint8(i));\n }\n return out.buffer;\n },\n /** Convert from an ArrayBuffer to a bitArray. */\n toBits: function (buffer) {\n var i, out = [], len, inView, tmp;\n if (buffer.byteLength === 0) {\n return [];\n }\n inView = new DataView(buffer);\n len = inView.byteLength - inView.byteLength % 4;\n for (var i = 0; i < len; i += 4) {\n out.push(inView.getUint32(i));\n }\n if (inView.byteLength % 4 != 0) {\n tmp = new DataView(new ArrayBuffer(4));\n for (var i = 0, l = inView.byteLength % 4; i < l; i++) {\n //we want the data to the right, because partial slices off the starting bits\n tmp.setUint8(i + 4 - l, inView.getUint8(len + i)); // big-endian, \n }\n out.push(sjcl.bitArray.partial((inView.byteLength % 4) * 8, tmp.getUint32(0)));\n }\n return out;\n },\n /** Prints a hex output of the buffer contents, akin to hexdump **/\n hexDumpBuffer: function (buffer) {\n var stringBufferView = new DataView(buffer);\n var string = '';\n var pad = function (n, width) {\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;\n };\n for (var i = 0; i < stringBufferView.byteLength; i += 2) {\n if (i % 16 == 0)\n string += ('\\n' + (i).toString(16) + '\\t');\n string += (pad(stringBufferView.getUint16(i).toString(16), 4) + ' ');\n }\n if (typeof console === undefined) {\n console = console || { log: function () { } }; //fix for IE\n }\n console.log(string.toUpperCase());\n }\n};\n// if(typeof module !== 'undefined' && module.exports){\n// module.exports = sjcl;\n// }\n// if (typeof define === \"function\") {\n// define([], function () {\n// return sjcl;\n// });\n// }\nexports.default = sjcl;\n", null, null, null, null, null, null, null, null, null, "// Generated by rollup-plugin-mjs-entry\n\nimport cjs from './index.js';\n\nexport const base16 = cjs.base16;\nexport const base32 = cjs.base32;\nexport const base32hex = cjs.base32hex;\nexport const base64 = cjs.base64;\nexport const base64url = cjs.base64url;\nexport const codec = cjs.codec;\nexport default cjs;\n", null, "/*!\n * Copyright (c) 2014, GMO GlobalSign\n * Copyright (c) 2015-2022, Peculiar Ventures\n * All rights reserved.\n * \n * Author 2014-2019, Yury Strozhevsky\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * \n * * Redistributions in binary form must reproduce the above copyright notice, this\n * list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * \n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n */\n\nimport * as pvtsutils from 'pvtsutils';\nimport * as pvutils from 'pvutils';\n\nfunction assertBigInt() {\r\n if (typeof BigInt === \"undefined\") {\r\n throw new Error(\"BigInt is not defined. Your environment doesn't implement BigInt.\");\r\n }\r\n}\r\nfunction concat(buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (let i = 0; i < buffers.length; i++) {\r\n const buffer = buffers[i];\r\n outputLength += buffer.byteLength;\r\n }\r\n const retView = new Uint8Array(outputLength);\r\n for (let i = 0; i < buffers.length; i++) {\r\n const buffer = buffers[i];\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retView.buffer;\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof Uint8Array)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be 'Uint8Array'\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\n\nclass ViewWriter {\r\n constructor() {\r\n this.items = [];\r\n }\r\n write(buf) {\r\n this.items.push(buf);\r\n }\r\n final() {\r\n return concat(this.items);\r\n }\r\n}\n\nconst powers2 = [new Uint8Array([1])];\r\nconst digitsString = \"0123456789\";\r\nconst NAME = \"name\";\r\nconst VALUE_HEX_VIEW = \"valueHexView\";\r\nconst IS_HEX_ONLY = \"isHexOnly\";\r\nconst ID_BLOCK = \"idBlock\";\r\nconst TAG_CLASS = \"tagClass\";\r\nconst TAG_NUMBER = \"tagNumber\";\r\nconst IS_CONSTRUCTED = \"isConstructed\";\r\nconst FROM_BER = \"fromBER\";\r\nconst TO_BER = \"toBER\";\r\nconst LOCAL = \"local\";\r\nconst EMPTY_STRING = \"\";\r\nconst EMPTY_BUFFER = new ArrayBuffer(0);\r\nconst EMPTY_VIEW = new Uint8Array(0);\r\nconst END_OF_CONTENT_NAME = \"EndOfContent\";\r\nconst OCTET_STRING_NAME = \"OCTET STRING\";\r\nconst BIT_STRING_NAME = \"BIT STRING\";\n\nfunction HexBlock(BaseClass) {\r\n var _a;\r\n return _a = class Some extends BaseClass {\r\n constructor(...args) {\r\n var _a;\r\n super(...args);\r\n const params = args[0] || {};\r\n this.isHexOnly = (_a = params.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n this.valueHexView = params.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(params.valueHex) : EMPTY_VIEW;\r\n }\r\n get valueHex() {\r\n return this.valueHexView.slice().buffer;\r\n }\r\n set valueHex(value) {\r\n this.valueHexView = new Uint8Array(value);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const endLength = inputOffset + inputLength;\r\n this.valueHexView = view.subarray(inputOffset, endLength);\r\n if (!this.valueHexView.length) {\r\n this.warnings.push(\"Zero buffer length\");\r\n return inputOffset;\r\n }\r\n this.blockLength = inputLength;\r\n return endLength;\r\n }\r\n toBER(sizeOnly = false) {\r\n if (!this.isHexOnly) {\r\n this.error = \"Flag 'isHexOnly' is not set, abort\";\r\n return EMPTY_BUFFER;\r\n }\r\n if (sizeOnly) {\r\n return new ArrayBuffer(this.valueHexView.byteLength);\r\n }\r\n return (this.valueHexView.byteLength === this.valueHexView.buffer.byteLength)\r\n ? this.valueHexView.buffer\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isHexOnly: this.isHexOnly,\r\n valueHex: pvtsutils.Convert.ToHex(this.valueHexView),\r\n };\r\n }\r\n },\r\n _a.NAME = \"hexBlock\",\r\n _a;\r\n}\n\nclass LocalBaseBlock {\r\n constructor({ blockLength = 0, error = EMPTY_STRING, warnings = [], valueBeforeDecode = EMPTY_VIEW, } = {}) {\r\n this.blockLength = blockLength;\r\n this.error = error;\r\n this.warnings = warnings;\r\n this.valueBeforeDecodeView = pvtsutils.BufferSourceConverter.toUint8Array(valueBeforeDecode);\r\n }\r\n static blockName() {\r\n return this.NAME;\r\n }\r\n get valueBeforeDecode() {\r\n return this.valueBeforeDecodeView.slice().buffer;\r\n }\r\n set valueBeforeDecode(value) {\r\n this.valueBeforeDecodeView = new Uint8Array(value);\r\n }\r\n toJSON() {\r\n return {\r\n blockName: this.constructor.NAME,\r\n blockLength: this.blockLength,\r\n error: this.error,\r\n warnings: this.warnings,\r\n valueBeforeDecode: pvtsutils.Convert.ToHex(this.valueBeforeDecodeView),\r\n };\r\n }\r\n}\r\nLocalBaseBlock.NAME = \"baseBlock\";\n\nclass ValueBlock extends LocalBaseBlock {\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n }\r\n toBER(sizeOnly, writer) {\r\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n }\r\n}\r\nValueBlock.NAME = \"valueBlock\";\n\nclass LocalIdentificationBlock extends HexBlock(LocalBaseBlock) {\r\n constructor({ idBlock = {}, } = {}) {\r\n var _a, _b, _c, _d;\r\n super();\r\n if (idBlock) {\r\n this.isHexOnly = (_a = idBlock.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n this.valueHexView = idBlock.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(idBlock.valueHex) : EMPTY_VIEW;\r\n this.tagClass = (_b = idBlock.tagClass) !== null && _b !== void 0 ? _b : -1;\r\n this.tagNumber = (_c = idBlock.tagNumber) !== null && _c !== void 0 ? _c : -1;\r\n this.isConstructed = (_d = idBlock.isConstructed) !== null && _d !== void 0 ? _d : false;\r\n }\r\n else {\r\n this.tagClass = -1;\r\n this.tagNumber = -1;\r\n this.isConstructed = false;\r\n }\r\n }\r\n toBER(sizeOnly = false) {\r\n let firstOctet = 0;\r\n switch (this.tagClass) {\r\n case 1:\r\n firstOctet |= 0x00;\r\n break;\r\n case 2:\r\n firstOctet |= 0x40;\r\n break;\r\n case 3:\r\n firstOctet |= 0x80;\r\n break;\r\n case 4:\r\n firstOctet |= 0xC0;\r\n break;\r\n default:\r\n this.error = \"Unknown tag class\";\r\n return EMPTY_BUFFER;\r\n }\r\n if (this.isConstructed)\r\n firstOctet |= 0x20;\r\n if (this.tagNumber < 31 && !this.isHexOnly) {\r\n const retView = new Uint8Array(1);\r\n if (!sizeOnly) {\r\n let number = this.tagNumber;\r\n number &= 0x1F;\r\n firstOctet |= number;\r\n retView[0] = firstOctet;\r\n }\r\n return retView.buffer;\r\n }\r\n if (!this.isHexOnly) {\r\n const encodedBuf = pvutils.utilToBase(this.tagNumber, 7);\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const size = encodedBuf.byteLength;\r\n const retView = new Uint8Array(size + 1);\r\n retView[0] = (firstOctet | 0x1F);\r\n if (!sizeOnly) {\r\n for (let i = 0; i < (size - 1); i++)\r\n retView[i + 1] = encodedView[i] | 0x80;\r\n retView[size] = encodedView[size - 1];\r\n }\r\n return retView.buffer;\r\n }\r\n const retView = new Uint8Array(this.valueHexView.byteLength + 1);\r\n retView[0] = (firstOctet | 0x1F);\r\n if (!sizeOnly) {\r\n const curView = this.valueHexView;\r\n for (let i = 0; i < (curView.length - 1); i++)\r\n retView[i + 1] = curView[i] | 0x80;\r\n retView[this.valueHexView.byteLength] = curView[curView.length - 1];\r\n }\r\n return retView.buffer;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n if (intBuffer.length === 0) {\r\n this.error = \"Zero buffer length\";\r\n return -1;\r\n }\r\n const tagClassMask = intBuffer[0] & 0xC0;\r\n switch (tagClassMask) {\r\n case 0x00:\r\n this.tagClass = (1);\r\n break;\r\n case 0x40:\r\n this.tagClass = (2);\r\n break;\r\n case 0x80:\r\n this.tagClass = (3);\r\n break;\r\n case 0xC0:\r\n this.tagClass = (4);\r\n break;\r\n default:\r\n this.error = \"Unknown tag class\";\r\n return -1;\r\n }\r\n this.isConstructed = (intBuffer[0] & 0x20) === 0x20;\r\n this.isHexOnly = false;\r\n const tagNumberMask = intBuffer[0] & 0x1F;\r\n if (tagNumberMask !== 0x1F) {\r\n this.tagNumber = (tagNumberMask);\r\n this.blockLength = 1;\r\n }\r\n else {\r\n let count = 1;\r\n let intTagNumberBuffer = this.valueHexView = new Uint8Array(255);\r\n let tagNumberBufferMaxLength = 255;\r\n while (intBuffer[count] & 0x80) {\r\n intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n count++;\r\n if (count >= intBuffer.length) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (count === tagNumberBufferMaxLength) {\r\n tagNumberBufferMaxLength += 255;\r\n const tempBufferView = new Uint8Array(tagNumberBufferMaxLength);\r\n for (let i = 0; i < intTagNumberBuffer.length; i++)\r\n tempBufferView[i] = intTagNumberBuffer[i];\r\n intTagNumberBuffer = this.valueHexView = new Uint8Array(tagNumberBufferMaxLength);\r\n }\r\n }\r\n this.blockLength = (count + 1);\r\n intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n const tempBufferView = new Uint8Array(count);\r\n for (let i = 0; i < count; i++)\r\n tempBufferView[i] = intTagNumberBuffer[i];\r\n intTagNumberBuffer = this.valueHexView = new Uint8Array(count);\r\n intTagNumberBuffer.set(tempBufferView);\r\n if (this.blockLength <= 9)\r\n this.tagNumber = pvutils.utilFromBase(intTagNumberBuffer, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Tag too long, represented as hex-coded\");\r\n }\r\n }\r\n if (((this.tagClass === 1)) &&\r\n (this.isConstructed)) {\r\n switch (this.tagNumber) {\r\n case 1:\r\n case 2:\r\n case 5:\r\n case 6:\r\n case 9:\r\n case 13:\r\n case 14:\r\n case 23:\r\n case 24:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n this.error = \"Constructed encoding used for primitive type\";\r\n return -1;\r\n }\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n tagClass: this.tagClass,\r\n tagNumber: this.tagNumber,\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalIdentificationBlock.NAME = \"identificationBlock\";\n\nclass LocalLengthBlock extends LocalBaseBlock {\r\n constructor({ lenBlock = {}, } = {}) {\r\n var _a, _b, _c;\r\n super();\r\n this.isIndefiniteForm = (_a = lenBlock.isIndefiniteForm) !== null && _a !== void 0 ? _a : false;\r\n this.longFormUsed = (_b = lenBlock.longFormUsed) !== null && _b !== void 0 ? _b : false;\r\n this.length = (_c = lenBlock.length) !== null && _c !== void 0 ? _c : 0;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = view.subarray(inputOffset, inputOffset + inputLength);\r\n if (intBuffer.length === 0) {\r\n this.error = \"Zero buffer length\";\r\n return -1;\r\n }\r\n if (intBuffer[0] === 0xFF) {\r\n this.error = \"Length block 0xFF is reserved by standard\";\r\n return -1;\r\n }\r\n this.isIndefiniteForm = intBuffer[0] === 0x80;\r\n if (this.isIndefiniteForm) {\r\n this.blockLength = 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n this.longFormUsed = !!(intBuffer[0] & 0x80);\r\n if (this.longFormUsed === false) {\r\n this.length = (intBuffer[0]);\r\n this.blockLength = 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n const count = intBuffer[0] & 0x7F;\r\n if (count > 8) {\r\n this.error = \"Too big integer\";\r\n return -1;\r\n }\r\n if ((count + 1) > intBuffer.length) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n const lenOffset = inputOffset + 1;\r\n const lengthBufferView = view.subarray(lenOffset, lenOffset + count);\r\n if (lengthBufferView[count - 1] === 0x00)\r\n this.warnings.push(\"Needlessly long encoded length\");\r\n this.length = pvutils.utilFromBase(lengthBufferView, 8);\r\n if (this.longFormUsed && (this.length <= 127))\r\n this.warnings.push(\"Unnecessary usage of long length form\");\r\n this.blockLength = count + 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n toBER(sizeOnly = false) {\r\n let retBuf;\r\n let retView;\r\n if (this.length > 127)\r\n this.longFormUsed = true;\r\n if (this.isIndefiniteForm) {\r\n retBuf = new ArrayBuffer(1);\r\n if (sizeOnly === false) {\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = 0x80;\r\n }\r\n return retBuf;\r\n }\r\n if (this.longFormUsed) {\r\n const encodedBuf = pvutils.utilToBase(this.length, 8);\r\n if (encodedBuf.byteLength > 127) {\r\n this.error = \"Too big length\";\r\n return (EMPTY_BUFFER);\r\n }\r\n retBuf = new ArrayBuffer(encodedBuf.byteLength + 1);\r\n if (sizeOnly)\r\n return retBuf;\r\n const encodedView = new Uint8Array(encodedBuf);\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = encodedBuf.byteLength | 0x80;\r\n for (let i = 0; i < encodedBuf.byteLength; i++)\r\n retView[i + 1] = encodedView[i];\r\n return retBuf;\r\n }\r\n retBuf = new ArrayBuffer(1);\r\n if (sizeOnly === false) {\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = this.length;\r\n }\r\n return retBuf;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isIndefiniteForm: this.isIndefiniteForm,\r\n longFormUsed: this.longFormUsed,\r\n length: this.length,\r\n };\r\n }\r\n}\r\nLocalLengthBlock.NAME = \"lengthBlock\";\n\nconst typeStore = {};\n\nclass BaseBlock extends LocalBaseBlock {\r\n constructor({ name = EMPTY_STRING, optional = false, primitiveSchema, ...parameters } = {}, valueBlockType) {\r\n super(parameters);\r\n this.name = name;\r\n this.optional = optional;\r\n if (primitiveSchema) {\r\n this.primitiveSchema = primitiveSchema;\r\n }\r\n this.idBlock = new LocalIdentificationBlock(parameters);\r\n this.lenBlock = new LocalLengthBlock(parameters);\r\n this.valueBlock = valueBlockType ? new valueBlockType(parameters) : new ValueBlock(parameters);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const _writer = writer || new ViewWriter();\r\n if (!writer) {\r\n prepareIndefiniteForm(this);\r\n }\r\n const idBlockBuf = this.idBlock.toBER(sizeOnly);\r\n _writer.write(idBlockBuf);\r\n if (this.lenBlock.isIndefiniteForm) {\r\n _writer.write(new Uint8Array([0x80]).buffer);\r\n this.valueBlock.toBER(sizeOnly, _writer);\r\n _writer.write(new ArrayBuffer(2));\r\n }\r\n else {\r\n const valueBlockBuf = this.valueBlock.toBER(sizeOnly);\r\n this.lenBlock.length = valueBlockBuf.byteLength;\r\n const lenBlockBuf = this.lenBlock.toBER(sizeOnly);\r\n _writer.write(lenBlockBuf);\r\n _writer.write(valueBlockBuf);\r\n }\r\n if (!writer) {\r\n return _writer.final();\r\n }\r\n return EMPTY_BUFFER;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n idBlock: this.idBlock.toJSON(),\r\n lenBlock: this.lenBlock.toJSON(),\r\n valueBlock: this.valueBlock.toJSON(),\r\n name: this.name,\r\n optional: this.optional,\r\n };\r\n if (this.primitiveSchema)\r\n object.primitiveSchema = this.primitiveSchema.toJSON();\r\n return object;\r\n }\r\n toString(encoding = \"ascii\") {\r\n if (encoding === \"ascii\") {\r\n return this.onAsciiEncoding();\r\n }\r\n return pvtsutils.Convert.ToHex(this.toBER());\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${pvtsutils.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`;\r\n }\r\n isEqual(other) {\r\n if (this === other) {\r\n return true;\r\n }\r\n if (!(other instanceof this.constructor)) {\r\n return false;\r\n }\r\n const thisRaw = this.toBER();\r\n const otherRaw = other.toBER();\r\n return pvutils.isEqualBuffer(thisRaw, otherRaw);\r\n }\r\n}\r\nBaseBlock.NAME = \"BaseBlock\";\r\nfunction prepareIndefiniteForm(baseBlock) {\r\n if (baseBlock instanceof typeStore.Constructed) {\r\n for (const value of baseBlock.valueBlock.value) {\r\n if (prepareIndefiniteForm(value)) {\r\n baseBlock.lenBlock.isIndefiniteForm = true;\r\n }\r\n }\r\n }\r\n return !!baseBlock.lenBlock.isIndefiniteForm;\r\n}\n\nclass BaseStringBlock extends BaseBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}, stringValueBlockType) {\r\n super(parameters, stringValueBlockType);\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n getValue() {\r\n return this.valueBlock.value;\r\n }\r\n setValue(value) {\r\n this.valueBlock.value = value;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n this.fromBuffer(this.valueBlock.valueHexView);\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : '${this.valueBlock.value}'`;\r\n }\r\n}\r\nBaseStringBlock.NAME = \"BaseStringBlock\";\n\nclass LocalPrimitiveValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ isHexOnly = true, ...parameters } = {}) {\r\n super(parameters);\r\n this.isHexOnly = isHexOnly;\r\n }\r\n}\r\nLocalPrimitiveValueBlock.NAME = \"PrimitiveValueBlock\";\n\nvar _a$w;\r\nclass Primitive extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalPrimitiveValueBlock);\r\n this.idBlock.isConstructed = false;\r\n }\r\n}\r\n_a$w = Primitive;\r\n(() => {\r\n typeStore.Primitive = _a$w;\r\n})();\r\nPrimitive.NAME = \"PRIMITIVE\";\n\nfunction localChangeType(inputObject, newType) {\r\n if (inputObject instanceof newType) {\r\n return inputObject;\r\n }\r\n const newObject = new newType();\r\n newObject.idBlock = inputObject.idBlock;\r\n newObject.lenBlock = inputObject.lenBlock;\r\n newObject.warnings = inputObject.warnings;\r\n newObject.valueBeforeDecodeView = inputObject.valueBeforeDecodeView;\r\n return newObject;\r\n}\r\nfunction localFromBER(inputBuffer, inputOffset = 0, inputLength = inputBuffer.length) {\r\n const incomingOffset = inputOffset;\r\n let returnObject = new BaseBlock({}, ValueBlock);\r\n const baseBlock = new LocalBaseBlock();\r\n if (!checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength)) {\r\n returnObject.error = baseBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n const intBuffer = inputBuffer.subarray(inputOffset, inputOffset + inputLength);\r\n if (!intBuffer.length) {\r\n returnObject.error = \"Zero buffer length\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n let resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (returnObject.idBlock.warnings.length) {\r\n returnObject.warnings.concat(returnObject.idBlock.warnings);\r\n }\r\n if (resultOffset === -1) {\r\n returnObject.error = returnObject.idBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n inputOffset = resultOffset;\r\n inputLength -= returnObject.idBlock.blockLength;\r\n resultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (returnObject.lenBlock.warnings.length) {\r\n returnObject.warnings.concat(returnObject.lenBlock.warnings);\r\n }\r\n if (resultOffset === -1) {\r\n returnObject.error = returnObject.lenBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n inputOffset = resultOffset;\r\n inputLength -= returnObject.lenBlock.blockLength;\r\n if (!returnObject.idBlock.isConstructed &&\r\n returnObject.lenBlock.isIndefiniteForm) {\r\n returnObject.error = \"Indefinite length form used for primitive encoding form\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n let newASN1Type = BaseBlock;\r\n switch (returnObject.idBlock.tagClass) {\r\n case 1:\r\n if ((returnObject.idBlock.tagNumber >= 37) &&\r\n (returnObject.idBlock.isHexOnly === false)) {\r\n returnObject.error = \"UNIVERSAL 37 and upper tags are reserved by ASN.1 standard\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n switch (returnObject.idBlock.tagNumber) {\r\n case 0:\r\n if ((returnObject.idBlock.isConstructed) &&\r\n (returnObject.lenBlock.length > 0)) {\r\n returnObject.error = \"Type [UNIVERSAL 0] is reserved\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n newASN1Type = typeStore.EndOfContent;\r\n break;\r\n case 1:\r\n newASN1Type = typeStore.Boolean;\r\n break;\r\n case 2:\r\n newASN1Type = typeStore.Integer;\r\n break;\r\n case 3:\r\n newASN1Type = typeStore.BitString;\r\n break;\r\n case 4:\r\n newASN1Type = typeStore.OctetString;\r\n break;\r\n case 5:\r\n newASN1Type = typeStore.Null;\r\n break;\r\n case 6:\r\n newASN1Type = typeStore.ObjectIdentifier;\r\n break;\r\n case 10:\r\n newASN1Type = typeStore.Enumerated;\r\n break;\r\n case 12:\r\n newASN1Type = typeStore.Utf8String;\r\n break;\r\n case 13:\r\n newASN1Type = typeStore.RelativeObjectIdentifier;\r\n break;\r\n case 14:\r\n newASN1Type = typeStore.TIME;\r\n break;\r\n case 15:\r\n returnObject.error = \"[UNIVERSAL 15] is reserved by ASN.1 standard\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n case 16:\r\n newASN1Type = typeStore.Sequence;\r\n break;\r\n case 17:\r\n newASN1Type = typeStore.Set;\r\n break;\r\n case 18:\r\n newASN1Type = typeStore.NumericString;\r\n break;\r\n case 19:\r\n newASN1Type = typeStore.PrintableString;\r\n break;\r\n case 20:\r\n newASN1Type = typeStore.TeletexString;\r\n break;\r\n case 21:\r\n newASN1Type = typeStore.VideotexString;\r\n break;\r\n case 22:\r\n newASN1Type = typeStore.IA5String;\r\n break;\r\n case 23:\r\n newASN1Type = typeStore.UTCTime;\r\n break;\r\n case 24:\r\n newASN1Type = typeStore.GeneralizedTime;\r\n break;\r\n case 25:\r\n newASN1Type = typeStore.GraphicString;\r\n break;\r\n case 26:\r\n newASN1Type = typeStore.VisibleString;\r\n break;\r\n case 27:\r\n newASN1Type = typeStore.GeneralString;\r\n break;\r\n case 28:\r\n newASN1Type = typeStore.UniversalString;\r\n break;\r\n case 29:\r\n newASN1Type = typeStore.CharacterString;\r\n break;\r\n case 30:\r\n newASN1Type = typeStore.BmpString;\r\n break;\r\n case 31:\r\n newASN1Type = typeStore.DATE;\r\n break;\r\n case 32:\r\n newASN1Type = typeStore.TimeOfDay;\r\n break;\r\n case 33:\r\n newASN1Type = typeStore.DateTime;\r\n break;\r\n case 34:\r\n newASN1Type = typeStore.Duration;\r\n break;\r\n default: {\r\n const newObject = returnObject.idBlock.isConstructed\r\n ? new typeStore.Constructed()\r\n : new typeStore.Primitive();\r\n newObject.idBlock = returnObject.idBlock;\r\n newObject.lenBlock = returnObject.lenBlock;\r\n newObject.warnings = returnObject.warnings;\r\n returnObject = newObject;\r\n }\r\n }\r\n break;\r\n case 2:\r\n case 3:\r\n case 4:\r\n default: {\r\n newASN1Type = returnObject.idBlock.isConstructed\r\n ? typeStore.Constructed\r\n : typeStore.Primitive;\r\n }\r\n }\r\n returnObject = localChangeType(returnObject, newASN1Type);\r\n resultOffset = returnObject.fromBER(inputBuffer, inputOffset, returnObject.lenBlock.isIndefiniteForm ? inputLength : returnObject.lenBlock.length);\r\n returnObject.valueBeforeDecodeView = inputBuffer.subarray(incomingOffset, incomingOffset + returnObject.blockLength);\r\n return {\r\n offset: resultOffset,\r\n result: returnObject\r\n };\r\n}\r\nfunction fromBER(inputBuffer) {\r\n if (!inputBuffer.byteLength) {\r\n const result = new BaseBlock({}, ValueBlock);\r\n result.error = \"Input buffer has zero length\";\r\n return {\r\n offset: -1,\r\n result\r\n };\r\n }\r\n return localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).slice(), 0, inputBuffer.byteLength);\r\n}\n\nfunction checkLen(indefiniteLength, length) {\r\n if (indefiniteLength) {\r\n return 1;\r\n }\r\n return length;\r\n}\r\nclass LocalConstructedValueBlock extends ValueBlock {\r\n constructor({ value = [], isIndefiniteForm = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n this.isIndefiniteForm = isIndefiniteForm;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n this.valueBeforeDecodeView = view.subarray(inputOffset, inputOffset + inputLength);\r\n if (this.valueBeforeDecodeView.length === 0) {\r\n this.warnings.push(\"Zero buffer length\");\r\n return inputOffset;\r\n }\r\n let currentOffset = inputOffset;\r\n while (checkLen(this.isIndefiniteForm, inputLength) > 0) {\r\n const returnObject = localFromBER(view, currentOffset, inputLength);\r\n if (returnObject.offset === -1) {\r\n this.error = returnObject.result.error;\r\n this.warnings.concat(returnObject.result.warnings);\r\n return -1;\r\n }\r\n currentOffset = returnObject.offset;\r\n this.blockLength += returnObject.result.blockLength;\r\n inputLength -= returnObject.result.blockLength;\r\n this.value.push(returnObject.result);\r\n if (this.isIndefiniteForm && returnObject.result.constructor.NAME === END_OF_CONTENT_NAME) {\r\n break;\r\n }\r\n }\r\n if (this.isIndefiniteForm) {\r\n if (this.value[this.value.length - 1].constructor.NAME === END_OF_CONTENT_NAME) {\r\n this.value.pop();\r\n }\r\n else {\r\n this.warnings.push(\"No EndOfContent block encoded\");\r\n }\r\n }\r\n return currentOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const _writer = writer || new ViewWriter();\r\n for (let i = 0; i < this.value.length; i++) {\r\n this.value[i].toBER(sizeOnly, _writer);\r\n }\r\n if (!writer) {\r\n return _writer.final();\r\n }\r\n return EMPTY_BUFFER;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n isIndefiniteForm: this.isIndefiniteForm,\r\n value: [],\r\n };\r\n for (const value of this.value) {\r\n object.value.push(value.toJSON());\r\n }\r\n return object;\r\n }\r\n}\r\nLocalConstructedValueBlock.NAME = \"ConstructedValueBlock\";\n\nvar _a$v;\r\nclass Constructed extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalConstructedValueBlock);\r\n this.idBlock.isConstructed = true;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n onAsciiEncoding() {\r\n const values = [];\r\n for (const value of this.valueBlock.value) {\r\n values.push(value.toString(\"ascii\").split(\"\\n\").map(o => ` ${o}`).join(\"\\n\"));\r\n }\r\n const blockName = this.idBlock.tagClass === 3\r\n ? `[${this.idBlock.tagNumber}]`\r\n : this.constructor.NAME;\r\n return values.length\r\n ? `${blockName} :\\n${values.join(\"\\n\")}`\r\n : `${blockName} :`;\r\n }\r\n}\r\n_a$v = Constructed;\r\n(() => {\r\n typeStore.Constructed = _a$v;\r\n})();\r\nConstructed.NAME = \"CONSTRUCTED\";\n\nclass LocalEndOfContentValueBlock extends ValueBlock {\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n return inputOffset;\r\n }\r\n toBER(sizeOnly) {\r\n return EMPTY_BUFFER;\r\n }\r\n}\r\nLocalEndOfContentValueBlock.override = \"EndOfContentValueBlock\";\n\nvar _a$u;\r\nclass EndOfContent extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalEndOfContentValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 0;\r\n }\r\n}\r\n_a$u = EndOfContent;\r\n(() => {\r\n typeStore.EndOfContent = _a$u;\r\n})();\r\nEndOfContent.NAME = END_OF_CONTENT_NAME;\n\nvar _a$t;\r\nclass Null extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, ValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 5;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (this.lenBlock.length > 0)\r\n this.warnings.push(\"Non-zero length of value block for Null type\");\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n this.blockLength += inputLength;\r\n if ((inputOffset + inputLength) > inputBuffer.byteLength) {\r\n this.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return -1;\r\n }\r\n return (inputOffset + inputLength);\r\n }\r\n toBER(sizeOnly, writer) {\r\n const retBuf = new ArrayBuffer(2);\r\n if (!sizeOnly) {\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] = 0x05;\r\n retView[1] = 0x00;\r\n }\r\n if (writer) {\r\n writer.write(retBuf);\r\n }\r\n return retBuf;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME}`;\r\n }\r\n}\r\n_a$t = Null;\r\n(() => {\r\n typeStore.Null = _a$t;\r\n})();\r\nNull.NAME = \"NULL\";\n\nclass LocalBooleanValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ value, ...parameters } = {}) {\r\n super(parameters);\r\n if (parameters.valueHex) {\r\n this.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(parameters.valueHex);\r\n }\r\n else {\r\n this.valueHexView = new Uint8Array(1);\r\n }\r\n if (value) {\r\n this.value = value;\r\n }\r\n }\r\n get value() {\r\n for (const octet of this.valueHexView) {\r\n if (octet > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n set value(value) {\r\n this.valueHexView[0] = value ? 0xFF : 0x00;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n this.valueHexView = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n if (inputLength > 1)\r\n this.warnings.push(\"Boolean value encoded in more then 1 octet\");\r\n this.isHexOnly = true;\r\n pvutils.utilDecodeTC.call(this);\r\n this.blockLength = inputLength;\r\n return (inputOffset + inputLength);\r\n }\r\n toBER() {\r\n return this.valueHexView.slice();\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.value,\r\n };\r\n }\r\n}\r\nLocalBooleanValueBlock.NAME = \"BooleanValueBlock\";\n\nvar _a$s;\r\nclass Boolean extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalBooleanValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 1;\r\n }\r\n getValue() {\r\n return this.valueBlock.value;\r\n }\r\n setValue(value) {\r\n this.valueBlock.value = value;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.getValue}`;\r\n }\r\n}\r\n_a$s = Boolean;\r\n(() => {\r\n typeStore.Boolean = _a$s;\r\n})();\r\nBoolean.NAME = \"BOOLEAN\";\n\nclass LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n constructor({ isConstructed = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.isConstructed = isConstructed;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = 0;\r\n if (this.isConstructed) {\r\n this.isHexOnly = false;\r\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1)\r\n return resultOffset;\r\n for (let i = 0; i < this.value.length; i++) {\r\n const currentBlockName = this.value[i].constructor.NAME;\r\n if (currentBlockName === END_OF_CONTENT_NAME) {\r\n if (this.isIndefiniteForm)\r\n break;\r\n else {\r\n this.error = \"EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n if (currentBlockName !== OCTET_STRING_NAME) {\r\n this.error = \"OCTET STRING may consists of OCTET STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n }\r\n else {\r\n this.isHexOnly = true;\r\n resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n this.blockLength = inputLength;\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n if (this.isConstructed)\r\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n return sizeOnly\r\n ? new ArrayBuffer(this.valueHexView.byteLength)\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalOctetStringValueBlock.NAME = \"OctetStringValueBlock\";\n\nvar _a$r;\r\nclass OctetString extends BaseBlock {\r\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n var _b, _c;\r\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n super({\r\n idBlock: {\r\n isConstructed: parameters.isConstructed,\r\n ...idBlock,\r\n },\r\n lenBlock: {\r\n ...lenBlock,\r\n isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n },\r\n ...parameters,\r\n }, LocalOctetStringValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 4;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n if (inputLength === 0) {\r\n if (this.idBlock.error.length === 0)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (this.lenBlock.error.length === 0)\r\n this.blockLength += this.lenBlock.blockLength;\r\n return inputOffset;\r\n }\r\n if (!this.valueBlock.isConstructed) {\r\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n const buf = view.subarray(inputOffset, inputOffset + inputLength);\r\n try {\r\n if (buf.byteLength) {\r\n const asn = localFromBER(buf, 0, buf.byteLength);\r\n if (asn.offset !== -1 && asn.offset === inputLength) {\r\n this.valueBlock.value = [asn.result];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n }\r\n onAsciiEncoding() {\r\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n return Constructed.prototype.onAsciiEncoding.call(this);\r\n }\r\n return `${this.constructor.NAME} : ${pvtsutils.Convert.ToHex(this.valueBlock.valueHexView)}`;\r\n }\r\n getValue() {\r\n if (!this.idBlock.isConstructed) {\r\n return this.valueBlock.valueHexView.slice().buffer;\r\n }\r\n const array = [];\r\n for (const content of this.valueBlock.value) {\r\n if (content instanceof OctetString) {\r\n array.push(content.valueBlock.valueHexView);\r\n }\r\n }\r\n return pvtsutils.BufferSourceConverter.concat(array);\r\n }\r\n}\r\n_a$r = OctetString;\r\n(() => {\r\n typeStore.OctetString = _a$r;\r\n})();\r\nOctetString.NAME = OCTET_STRING_NAME;\n\nclass LocalBitStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n constructor({ unusedBits = 0, isConstructed = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.unusedBits = unusedBits;\r\n this.isConstructed = isConstructed;\r\n this.blockLength = this.valueHexView.byteLength;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (!inputLength) {\r\n return inputOffset;\r\n }\r\n let resultOffset = -1;\r\n if (this.isConstructed) {\r\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1)\r\n return resultOffset;\r\n for (const value of this.value) {\r\n const currentBlockName = value.constructor.NAME;\r\n if (currentBlockName === END_OF_CONTENT_NAME) {\r\n if (this.isIndefiniteForm)\r\n break;\r\n else {\r\n this.error = \"EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n if (currentBlockName !== BIT_STRING_NAME) {\r\n this.error = \"BIT STRING may consists of BIT STRINGs only\";\r\n return -1;\r\n }\r\n const valueBlock = value.valueBlock;\r\n if ((this.unusedBits > 0) && (valueBlock.unusedBits > 0)) {\r\n this.error = \"Using of \\\"unused bits\\\" inside constructive BIT STRING allowed for least one only\";\r\n return -1;\r\n }\r\n this.unusedBits = valueBlock.unusedBits;\r\n }\r\n return resultOffset;\r\n }\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.unusedBits = intBuffer[0];\r\n if (this.unusedBits > 7) {\r\n this.error = \"Unused bits for BitString must be in range 0-7\";\r\n return -1;\r\n }\r\n if (!this.unusedBits) {\r\n const buf = intBuffer.subarray(1);\r\n try {\r\n if (buf.byteLength) {\r\n const asn = localFromBER(buf, 0, buf.byteLength);\r\n if (asn.offset !== -1 && asn.offset === (inputLength - 1)) {\r\n this.value = [asn.result];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n this.valueHexView = intBuffer.subarray(1);\r\n this.blockLength = intBuffer.length;\r\n return (inputOffset + inputLength);\r\n }\r\n toBER(sizeOnly, writer) {\r\n if (this.isConstructed) {\r\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n }\r\n if (sizeOnly) {\r\n return new ArrayBuffer(this.valueHexView.byteLength + 1);\r\n }\r\n if (!this.valueHexView.byteLength) {\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(this.valueHexView.length + 1);\r\n retView[0] = this.unusedBits;\r\n retView.set(this.valueHexView, 1);\r\n return retView.buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n unusedBits: this.unusedBits,\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalBitStringValueBlock.NAME = \"BitStringValueBlock\";\n\nvar _a$q;\r\nclass BitString extends BaseBlock {\r\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n var _b, _c;\r\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n super({\r\n idBlock: {\r\n isConstructed: parameters.isConstructed,\r\n ...idBlock,\r\n },\r\n lenBlock: {\r\n ...lenBlock,\r\n isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n },\r\n ...parameters,\r\n }, LocalBitStringValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 3;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n }\r\n onAsciiEncoding() {\r\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n return Constructed.prototype.onAsciiEncoding.call(this);\r\n }\r\n else {\r\n const bits = [];\r\n const valueHex = this.valueBlock.valueHexView;\r\n for (const byte of valueHex) {\r\n bits.push(byte.toString(2).padStart(8, \"0\"));\r\n }\r\n const bitsStr = bits.join(\"\");\r\n return `${this.constructor.NAME} : ${bitsStr.substring(0, bitsStr.length - this.valueBlock.unusedBits)}`;\r\n }\r\n }\r\n}\r\n_a$q = BitString;\r\n(() => {\r\n typeStore.BitString = _a$q;\r\n})();\r\nBitString.NAME = BIT_STRING_NAME;\n\nvar _a$p;\r\nfunction viewAdd(first, second) {\r\n const c = new Uint8Array([0]);\r\n const firstView = new Uint8Array(first);\r\n const secondView = new Uint8Array(second);\r\n let firstViewCopy = firstView.slice(0);\r\n const firstViewCopyLength = firstViewCopy.length - 1;\r\n const secondViewCopy = secondView.slice(0);\r\n const secondViewCopyLength = secondViewCopy.length - 1;\r\n let value = 0;\r\n const max = (secondViewCopyLength < firstViewCopyLength) ? firstViewCopyLength : secondViewCopyLength;\r\n let counter = 0;\r\n for (let i = max; i >= 0; i--, counter++) {\r\n switch (true) {\r\n case (counter < secondViewCopy.length):\r\n value = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0];\r\n break;\r\n default:\r\n value = firstViewCopy[firstViewCopyLength - counter] + c[0];\r\n }\r\n c[0] = value / 10;\r\n switch (true) {\r\n case (counter >= firstViewCopy.length):\r\n firstViewCopy = pvutils.utilConcatView(new Uint8Array([value % 10]), firstViewCopy);\r\n break;\r\n default:\r\n firstViewCopy[firstViewCopyLength - counter] = value % 10;\r\n }\r\n }\r\n if (c[0] > 0)\r\n firstViewCopy = pvutils.utilConcatView(c, firstViewCopy);\r\n return firstViewCopy;\r\n}\r\nfunction power2(n) {\r\n if (n >= powers2.length) {\r\n for (let p = powers2.length; p <= n; p++) {\r\n const c = new Uint8Array([0]);\r\n let digits = (powers2[p - 1]).slice(0);\r\n for (let i = (digits.length - 1); i >= 0; i--) {\r\n const newValue = new Uint8Array([(digits[i] << 1) + c[0]]);\r\n c[0] = newValue[0] / 10;\r\n digits[i] = newValue[0] % 10;\r\n }\r\n if (c[0] > 0)\r\n digits = pvutils.utilConcatView(c, digits);\r\n powers2.push(digits);\r\n }\r\n }\r\n return powers2[n];\r\n}\r\nfunction viewSub(first, second) {\r\n let b = 0;\r\n const firstView = new Uint8Array(first);\r\n const secondView = new Uint8Array(second);\r\n const firstViewCopy = firstView.slice(0);\r\n const firstViewCopyLength = firstViewCopy.length - 1;\r\n const secondViewCopy = secondView.slice(0);\r\n const secondViewCopyLength = secondViewCopy.length - 1;\r\n let value;\r\n let counter = 0;\r\n for (let i = secondViewCopyLength; i >= 0; i--, counter++) {\r\n value = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b;\r\n switch (true) {\r\n case (value < 0):\r\n b = 1;\r\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n break;\r\n default:\r\n b = 0;\r\n firstViewCopy[firstViewCopyLength - counter] = value;\r\n }\r\n }\r\n if (b > 0) {\r\n for (let i = (firstViewCopyLength - secondViewCopyLength + 1); i >= 0; i--, counter++) {\r\n value = firstViewCopy[firstViewCopyLength - counter] - b;\r\n if (value < 0) {\r\n b = 1;\r\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n }\r\n else {\r\n b = 0;\r\n firstViewCopy[firstViewCopyLength - counter] = value;\r\n break;\r\n }\r\n }\r\n }\r\n return firstViewCopy.slice();\r\n}\r\nclass LocalIntegerValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ value, ...parameters } = {}) {\r\n super(parameters);\r\n this._valueDec = 0;\r\n if (parameters.valueHex) {\r\n this.setValueHex();\r\n }\r\n if (value !== undefined) {\r\n this.valueDec = value;\r\n }\r\n }\r\n setValueHex() {\r\n if (this.valueHexView.length >= 4) {\r\n this.warnings.push(\"Too big Integer for decoding, hex only\");\r\n this.isHexOnly = true;\r\n this._valueDec = 0;\r\n }\r\n else {\r\n this.isHexOnly = false;\r\n if (this.valueHexView.length > 0) {\r\n this._valueDec = pvutils.utilDecodeTC.call(this);\r\n }\r\n }\r\n }\r\n set valueDec(v) {\r\n this._valueDec = v;\r\n this.isHexOnly = false;\r\n this.valueHexView = new Uint8Array(pvutils.utilEncodeTC(v));\r\n }\r\n get valueDec() {\r\n return this._valueDec;\r\n }\r\n fromDER(inputBuffer, inputOffset, inputLength, expectedLength = 0) {\r\n const offset = this.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (offset === -1)\r\n return offset;\r\n const view = this.valueHexView;\r\n if ((view[0] === 0x00) && ((view[1] & 0x80) !== 0)) {\r\n this.valueHexView = view.subarray(1);\r\n }\r\n else {\r\n if (expectedLength !== 0) {\r\n if (view.length < expectedLength) {\r\n if ((expectedLength - view.length) > 1)\r\n expectedLength = view.length + 1;\r\n this.valueHexView = view.subarray(expectedLength - view.length);\r\n }\r\n }\r\n }\r\n return offset;\r\n }\r\n toDER(sizeOnly = false) {\r\n const view = this.valueHexView;\r\n switch (true) {\r\n case ((view[0] & 0x80) !== 0):\r\n {\r\n const updatedView = new Uint8Array(this.valueHexView.length + 1);\r\n updatedView[0] = 0x00;\r\n updatedView.set(view, 1);\r\n this.valueHexView = updatedView;\r\n }\r\n break;\r\n case ((view[0] === 0x00) && ((view[1] & 0x80) === 0)):\r\n {\r\n this.valueHexView = this.valueHexView.subarray(1);\r\n }\r\n break;\r\n }\r\n return this.toBER(sizeOnly);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1) {\r\n return resultOffset;\r\n }\r\n this.setValueHex();\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly) {\r\n return sizeOnly\r\n ? new ArrayBuffer(this.valueHexView.length)\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n };\r\n }\r\n toString() {\r\n const firstBit = (this.valueHexView.length * 8) - 1;\r\n let digits = new Uint8Array((this.valueHexView.length * 8) / 3);\r\n let bitNumber = 0;\r\n let currentByte;\r\n const asn1View = this.valueHexView;\r\n let result = \"\";\r\n let flag = false;\r\n for (let byteNumber = (asn1View.byteLength - 1); byteNumber >= 0; byteNumber--) {\r\n currentByte = asn1View[byteNumber];\r\n for (let i = 0; i < 8; i++) {\r\n if ((currentByte & 1) === 1) {\r\n switch (bitNumber) {\r\n case firstBit:\r\n digits = viewSub(power2(bitNumber), digits);\r\n result = \"-\";\r\n break;\r\n default:\r\n digits = viewAdd(digits, power2(bitNumber));\r\n }\r\n }\r\n bitNumber++;\r\n currentByte >>= 1;\r\n }\r\n }\r\n for (let i = 0; i < digits.length; i++) {\r\n if (digits[i])\r\n flag = true;\r\n if (flag)\r\n result += digitsString.charAt(digits[i]);\r\n }\r\n if (flag === false)\r\n result += digitsString.charAt(0);\r\n return result;\r\n }\r\n}\r\n_a$p = LocalIntegerValueBlock;\r\nLocalIntegerValueBlock.NAME = \"IntegerValueBlock\";\r\n(() => {\r\n Object.defineProperty(_a$p.prototype, \"valueHex\", {\r\n set: function (v) {\r\n this.valueHexView = new Uint8Array(v);\r\n this.setValueHex();\r\n },\r\n get: function () {\r\n return this.valueHexView.slice().buffer;\r\n },\r\n });\r\n})();\n\nvar _a$o;\r\nclass Integer extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalIntegerValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 2;\r\n }\r\n toBigInt() {\r\n assertBigInt();\r\n return BigInt(this.valueBlock.toString());\r\n }\r\n static fromBigInt(value) {\r\n assertBigInt();\r\n const bigIntValue = BigInt(value);\r\n const writer = new ViewWriter();\r\n const hex = bigIntValue.toString(16).replace(/^-/, \"\");\r\n const view = new Uint8Array(pvtsutils.Convert.FromHex(hex));\r\n if (bigIntValue < 0) {\r\n const first = new Uint8Array(view.length + (view[0] & 0x80 ? 1 : 0));\r\n first[0] |= 0x80;\r\n const firstInt = BigInt(`0x${pvtsutils.Convert.ToHex(first)}`);\r\n const secondInt = firstInt + bigIntValue;\r\n const second = pvtsutils.BufferSourceConverter.toUint8Array(pvtsutils.Convert.FromHex(secondInt.toString(16)));\r\n second[0] |= 0x80;\r\n writer.write(second);\r\n }\r\n else {\r\n if (view[0] & 0x80) {\r\n writer.write(new Uint8Array([0]));\r\n }\r\n writer.write(view);\r\n }\r\n const res = new Integer({\r\n valueHex: writer.final(),\r\n });\r\n return res;\r\n }\r\n convertToDER() {\r\n const integer = new Integer({ valueHex: this.valueBlock.valueHexView });\r\n integer.valueBlock.toDER();\r\n return integer;\r\n }\r\n convertFromDER() {\r\n return new Integer({\r\n valueHex: this.valueBlock.valueHexView[0] === 0\r\n ? this.valueBlock.valueHexView.subarray(1)\r\n : this.valueBlock.valueHexView,\r\n });\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString()}`;\r\n }\r\n}\r\n_a$o = Integer;\r\n(() => {\r\n typeStore.Integer = _a$o;\r\n})();\r\nInteger.NAME = \"INTEGER\";\n\nvar _a$n;\r\nclass Enumerated extends Integer {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 10;\r\n }\r\n}\r\n_a$n = Enumerated;\r\n(() => {\r\n typeStore.Enumerated = _a$n;\r\n})();\r\nEnumerated.NAME = \"ENUMERATED\";\n\nclass LocalSidValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ valueDec = -1, isFirstSid = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.valueDec = valueDec;\r\n this.isFirstSid = isFirstSid;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (!inputLength) {\r\n return inputOffset;\r\n }\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.valueHexView = new Uint8Array(inputLength);\r\n for (let i = 0; i < inputLength; i++) {\r\n this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n this.blockLength++;\r\n if ((intBuffer[i] & 0x80) === 0x00)\r\n break;\r\n }\r\n const tempView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < this.blockLength; i++) {\r\n tempView[i] = this.valueHexView[i];\r\n }\r\n this.valueHexView = tempView;\r\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (this.valueHexView[0] === 0x00)\r\n this.warnings.push(\"Needlessly long format of SID encoding\");\r\n if (this.blockLength <= 8)\r\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Too big SID for decoding, hex only\");\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n set valueBigInt(value) {\r\n assertBigInt();\r\n let bits = BigInt(value).toString(2);\r\n while (bits.length % 7) {\r\n bits = \"0\" + bits;\r\n }\r\n const bytes = new Uint8Array(bits.length / 7);\r\n for (let i = 0; i < bytes.length; i++) {\r\n bytes[i] = parseInt(bits.slice(i * 7, i * 7 + 7), 2) + (i + 1 < bytes.length ? 0x80 : 0);\r\n }\r\n this.fromBER(bytes.buffer, 0, bytes.length);\r\n }\r\n toBER(sizeOnly) {\r\n if (this.isHexOnly) {\r\n if (sizeOnly)\r\n return (new ArrayBuffer(this.valueHexView.byteLength));\r\n const curView = this.valueHexView;\r\n const retView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < (this.blockLength - 1); i++)\r\n retView[i] = curView[i] | 0x80;\r\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n return retView.buffer;\r\n }\r\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\r\n if (encodedBuf.byteLength === 0) {\r\n this.error = \"Error during encoding SID value\";\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(encodedBuf.byteLength);\r\n if (!sizeOnly) {\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const len = encodedBuf.byteLength - 1;\r\n for (let i = 0; i < len; i++)\r\n retView[i] = encodedView[i] | 0x80;\r\n retView[len] = encodedView[len];\r\n }\r\n return retView;\r\n }\r\n toString() {\r\n let result = \"\";\r\n if (this.isHexOnly)\r\n result = pvtsutils.Convert.ToHex(this.valueHexView);\r\n else {\r\n if (this.isFirstSid) {\r\n let sidValue = this.valueDec;\r\n if (this.valueDec <= 39)\r\n result = \"0.\";\r\n else {\r\n if (this.valueDec <= 79) {\r\n result = \"1.\";\r\n sidValue -= 40;\r\n }\r\n else {\r\n result = \"2.\";\r\n sidValue -= 80;\r\n }\r\n }\r\n result += sidValue.toString();\r\n }\r\n else\r\n result = this.valueDec.toString();\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n isFirstSid: this.isFirstSid,\r\n };\r\n }\r\n}\r\nLocalSidValueBlock.NAME = \"sidBlock\";\n\nclass LocalObjectIdentifierValueBlock extends ValueBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = [];\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = inputOffset;\r\n while (inputLength > 0) {\r\n const sidBlock = new LocalSidValueBlock();\r\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n if (resultOffset === -1) {\r\n this.blockLength = 0;\r\n this.error = sidBlock.error;\r\n return resultOffset;\r\n }\r\n if (this.value.length === 0)\r\n sidBlock.isFirstSid = true;\r\n this.blockLength += sidBlock.blockLength;\r\n inputLength -= sidBlock.blockLength;\r\n this.value.push(sidBlock);\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly) {\r\n const retBuffers = [];\r\n for (let i = 0; i < this.value.length; i++) {\r\n const valueBuf = this.value[i].toBER(sizeOnly);\r\n if (valueBuf.byteLength === 0) {\r\n this.error = this.value[i].error;\r\n return EMPTY_BUFFER;\r\n }\r\n retBuffers.push(valueBuf);\r\n }\r\n return concat(retBuffers);\r\n }\r\n fromString(string) {\r\n this.value = [];\r\n let pos1 = 0;\r\n let pos2 = 0;\r\n let sid = \"\";\r\n let flag = false;\r\n do {\r\n pos2 = string.indexOf(\".\", pos1);\r\n if (pos2 === -1)\r\n sid = string.substring(pos1);\r\n else\r\n sid = string.substring(pos1, pos2);\r\n pos1 = pos2 + 1;\r\n if (flag) {\r\n const sidBlock = this.value[0];\r\n let plus = 0;\r\n switch (sidBlock.valueDec) {\r\n case 0:\r\n break;\r\n case 1:\r\n plus = 40;\r\n break;\r\n case 2:\r\n plus = 80;\r\n break;\r\n default:\r\n this.value = [];\r\n return;\r\n }\r\n const parsedSID = parseInt(sid, 10);\r\n if (isNaN(parsedSID))\r\n return;\r\n sidBlock.valueDec = parsedSID + plus;\r\n flag = false;\r\n }\r\n else {\r\n const sidBlock = new LocalSidValueBlock();\r\n if (sid > Number.MAX_SAFE_INTEGER) {\r\n assertBigInt();\r\n const sidValue = BigInt(sid);\r\n sidBlock.valueBigInt = sidValue;\r\n }\r\n else {\r\n sidBlock.valueDec = parseInt(sid, 10);\r\n if (isNaN(sidBlock.valueDec))\r\n return;\r\n }\r\n if (!this.value.length) {\r\n sidBlock.isFirstSid = true;\r\n flag = true;\r\n }\r\n this.value.push(sidBlock);\r\n }\r\n } while (pos2 !== -1);\r\n }\r\n toString() {\r\n let result = \"\";\r\n let isHexOnly = false;\r\n for (let i = 0; i < this.value.length; i++) {\r\n isHexOnly = this.value[i].isHexOnly;\r\n let sidStr = this.value[i].toString();\r\n if (i !== 0)\r\n result = `${result}.`;\r\n if (isHexOnly) {\r\n sidStr = `{${sidStr}}`;\r\n if (this.value[i].isFirstSid)\r\n result = `2.{${sidStr} - 80}`;\r\n else\r\n result += sidStr;\r\n }\r\n else\r\n result += sidStr;\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n value: this.toString(),\r\n sidArray: [],\r\n };\r\n for (let i = 0; i < this.value.length; i++) {\r\n object.sidArray.push(this.value[i].toJSON());\r\n }\r\n return object;\r\n }\r\n}\r\nLocalObjectIdentifierValueBlock.NAME = \"ObjectIdentifierValueBlock\";\n\nvar _a$m;\r\nclass ObjectIdentifier extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalObjectIdentifierValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 6;\r\n }\r\n getValue() {\r\n return this.valueBlock.toString();\r\n }\r\n setValue(value) {\r\n this.valueBlock.fromString(value);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.getValue(),\r\n };\r\n }\r\n}\r\n_a$m = ObjectIdentifier;\r\n(() => {\r\n typeStore.ObjectIdentifier = _a$m;\r\n})();\r\nObjectIdentifier.NAME = \"OBJECT IDENTIFIER\";\n\nclass LocalRelativeSidValueBlock extends HexBlock(LocalBaseBlock) {\r\n constructor({ valueDec = 0, ...parameters } = {}) {\r\n super(parameters);\r\n this.valueDec = valueDec;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (inputLength === 0)\r\n return inputOffset;\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength))\r\n return -1;\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.valueHexView = new Uint8Array(inputLength);\r\n for (let i = 0; i < inputLength; i++) {\r\n this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n this.blockLength++;\r\n if ((intBuffer[i] & 0x80) === 0x00)\r\n break;\r\n }\r\n const tempView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < this.blockLength; i++)\r\n tempView[i] = this.valueHexView[i];\r\n this.valueHexView = tempView;\r\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (this.valueHexView[0] === 0x00)\r\n this.warnings.push(\"Needlessly long format of SID encoding\");\r\n if (this.blockLength <= 8)\r\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Too big SID for decoding, hex only\");\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n toBER(sizeOnly) {\r\n if (this.isHexOnly) {\r\n if (sizeOnly)\r\n return (new ArrayBuffer(this.valueHexView.byteLength));\r\n const curView = this.valueHexView;\r\n const retView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < (this.blockLength - 1); i++)\r\n retView[i] = curView[i] | 0x80;\r\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n return retView.buffer;\r\n }\r\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\r\n if (encodedBuf.byteLength === 0) {\r\n this.error = \"Error during encoding SID value\";\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(encodedBuf.byteLength);\r\n if (!sizeOnly) {\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const len = encodedBuf.byteLength - 1;\r\n for (let i = 0; i < len; i++)\r\n retView[i] = encodedView[i] | 0x80;\r\n retView[len] = encodedView[len];\r\n }\r\n return retView.buffer;\r\n }\r\n toString() {\r\n let result = \"\";\r\n if (this.isHexOnly)\r\n result = pvtsutils.Convert.ToHex(this.valueHexView);\r\n else {\r\n result = this.valueDec.toString();\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n };\r\n }\r\n}\r\nLocalRelativeSidValueBlock.NAME = \"relativeSidBlock\";\n\nclass LocalRelativeObjectIdentifierValueBlock extends ValueBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = [];\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = inputOffset;\r\n while (inputLength > 0) {\r\n const sidBlock = new LocalRelativeSidValueBlock();\r\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n if (resultOffset === -1) {\r\n this.blockLength = 0;\r\n this.error = sidBlock.error;\r\n return resultOffset;\r\n }\r\n this.blockLength += sidBlock.blockLength;\r\n inputLength -= sidBlock.blockLength;\r\n this.value.push(sidBlock);\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const retBuffers = [];\r\n for (let i = 0; i < this.value.length; i++) {\r\n const valueBuf = this.value[i].toBER(sizeOnly);\r\n if (valueBuf.byteLength === 0) {\r\n this.error = this.value[i].error;\r\n return EMPTY_BUFFER;\r\n }\r\n retBuffers.push(valueBuf);\r\n }\r\n return concat(retBuffers);\r\n }\r\n fromString(string) {\r\n this.value = [];\r\n let pos1 = 0;\r\n let pos2 = 0;\r\n let sid = \"\";\r\n do {\r\n pos2 = string.indexOf(\".\", pos1);\r\n if (pos2 === -1)\r\n sid = string.substring(pos1);\r\n else\r\n sid = string.substring(pos1, pos2);\r\n pos1 = pos2 + 1;\r\n const sidBlock = new LocalRelativeSidValueBlock();\r\n sidBlock.valueDec = parseInt(sid, 10);\r\n if (isNaN(sidBlock.valueDec))\r\n return true;\r\n this.value.push(sidBlock);\r\n } while (pos2 !== -1);\r\n return true;\r\n }\r\n toString() {\r\n let result = \"\";\r\n let isHexOnly = false;\r\n for (let i = 0; i < this.value.length; i++) {\r\n isHexOnly = this.value[i].isHexOnly;\r\n let sidStr = this.value[i].toString();\r\n if (i !== 0)\r\n result = `${result}.`;\r\n if (isHexOnly) {\r\n sidStr = `{${sidStr}}`;\r\n result += sidStr;\r\n }\r\n else\r\n result += sidStr;\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n value: this.toString(),\r\n sidArray: [],\r\n };\r\n for (let i = 0; i < this.value.length; i++)\r\n object.sidArray.push(this.value[i].toJSON());\r\n return object;\r\n }\r\n}\r\nLocalRelativeObjectIdentifierValueBlock.NAME = \"RelativeObjectIdentifierValueBlock\";\n\nvar _a$l;\r\nclass RelativeObjectIdentifier extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalRelativeObjectIdentifierValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 13;\r\n }\r\n getValue() {\r\n return this.valueBlock.toString();\r\n }\r\n setValue(value) {\r\n this.valueBlock.fromString(value);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.getValue(),\r\n };\r\n }\r\n}\r\n_a$l = RelativeObjectIdentifier;\r\n(() => {\r\n typeStore.RelativeObjectIdentifier = _a$l;\r\n})();\r\nRelativeObjectIdentifier.NAME = \"RelativeObjectIdentifier\";\n\nvar _a$k;\r\nclass Sequence extends Constructed {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 16;\r\n }\r\n}\r\n_a$k = Sequence;\r\n(() => {\r\n typeStore.Sequence = _a$k;\r\n})();\r\nSequence.NAME = \"SEQUENCE\";\n\nvar _a$j;\r\nclass Set extends Constructed {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 17;\r\n }\r\n}\r\n_a$j = Set;\r\n(() => {\r\n typeStore.Set = _a$j;\r\n})();\r\nSet.NAME = \"SET\";\n\nclass LocalStringValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.isHexOnly = true;\r\n this.value = EMPTY_STRING;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.value,\r\n };\r\n }\r\n}\r\nLocalStringValueBlock.NAME = \"StringValueBlock\";\n\nclass LocalSimpleStringValueBlock extends LocalStringValueBlock {\r\n}\r\nLocalSimpleStringValueBlock.NAME = \"SimpleStringValueBlock\";\n\nclass LocalSimpleStringBlock extends BaseStringBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters, LocalSimpleStringValueBlock);\r\n }\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.value = String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\r\n }\r\n fromString(inputString) {\r\n const strLen = inputString.length;\r\n const view = this.valueBlock.valueHexView = new Uint8Array(strLen);\r\n for (let i = 0; i < strLen; i++)\r\n view[i] = inputString.charCodeAt(i);\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalSimpleStringBlock.NAME = \"SIMPLE STRING\";\n\nclass LocalUtf8StringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n try {\r\n this.valueBlock.value = pvtsutils.Convert.ToUtf8String(inputBuffer);\r\n }\r\n catch (ex) {\r\n this.warnings.push(`Error during \"decodeURIComponent\": ${ex}, using raw string`);\r\n this.valueBlock.value = pvtsutils.Convert.ToBinary(inputBuffer);\r\n }\r\n }\r\n fromString(inputString) {\r\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf8String(inputString));\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalUtf8StringValueBlock.NAME = \"Utf8StringValueBlock\";\n\nvar _a$i;\r\nclass Utf8String extends LocalUtf8StringValueBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 12;\r\n }\r\n}\r\n_a$i = Utf8String;\r\n(() => {\r\n typeStore.Utf8String = _a$i;\r\n})();\r\nUtf8String.NAME = \"UTF8String\";\n\nclass LocalBmpStringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.value = pvtsutils.Convert.ToUtf16String(inputBuffer);\r\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n }\r\n fromString(inputString) {\r\n this.valueBlock.value = inputString;\r\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf16String(inputString));\r\n }\r\n}\r\nLocalBmpStringValueBlock.NAME = \"BmpStringValueBlock\";\n\nvar _a$h;\r\nclass BmpString extends LocalBmpStringValueBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 30;\r\n }\r\n}\r\n_a$h = BmpString;\r\n(() => {\r\n typeStore.BmpString = _a$h;\r\n})();\r\nBmpString.NAME = \"BMPString\";\n\nclass LocalUniversalStringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n const copyBuffer = ArrayBuffer.isView(inputBuffer) ? inputBuffer.slice().buffer : inputBuffer.slice(0);\r\n const valueView = new Uint8Array(copyBuffer);\r\n for (let i = 0; i < valueView.length; i += 4) {\r\n valueView[i] = valueView[i + 3];\r\n valueView[i + 1] = valueView[i + 2];\r\n valueView[i + 2] = 0x00;\r\n valueView[i + 3] = 0x00;\r\n }\r\n this.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer));\r\n }\r\n fromString(inputString) {\r\n const strLength = inputString.length;\r\n const valueHexView = this.valueBlock.valueHexView = new Uint8Array(strLength * 4);\r\n for (let i = 0; i < strLength; i++) {\r\n const codeBuf = pvutils.utilToBase(inputString.charCodeAt(i), 8);\r\n const codeView = new Uint8Array(codeBuf);\r\n if (codeView.length > 4)\r\n continue;\r\n const dif = 4 - codeView.length;\r\n for (let j = (codeView.length - 1); j >= 0; j--)\r\n valueHexView[i * 4 + j + dif] = codeView[j];\r\n }\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalUniversalStringValueBlock.NAME = \"UniversalStringValueBlock\";\n\nvar _a$g;\r\nclass UniversalString extends LocalUniversalStringValueBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 28;\r\n }\r\n}\r\n_a$g = UniversalString;\r\n(() => {\r\n typeStore.UniversalString = _a$g;\r\n})();\r\nUniversalString.NAME = \"UniversalString\";\n\nvar _a$f;\r\nclass NumericString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 18;\r\n }\r\n}\r\n_a$f = NumericString;\r\n(() => {\r\n typeStore.NumericString = _a$f;\r\n})();\r\nNumericString.NAME = \"NumericString\";\n\nvar _a$e;\r\nclass PrintableString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 19;\r\n }\r\n}\r\n_a$e = PrintableString;\r\n(() => {\r\n typeStore.PrintableString = _a$e;\r\n})();\r\nPrintableString.NAME = \"PrintableString\";\n\nvar _a$d;\r\nclass TeletexString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 20;\r\n }\r\n}\r\n_a$d = TeletexString;\r\n(() => {\r\n typeStore.TeletexString = _a$d;\r\n})();\r\nTeletexString.NAME = \"TeletexString\";\n\nvar _a$c;\r\nclass VideotexString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 21;\r\n }\r\n}\r\n_a$c = VideotexString;\r\n(() => {\r\n typeStore.VideotexString = _a$c;\r\n})();\r\nVideotexString.NAME = \"VideotexString\";\n\nvar _a$b;\r\nclass IA5String extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 22;\r\n }\r\n}\r\n_a$b = IA5String;\r\n(() => {\r\n typeStore.IA5String = _a$b;\r\n})();\r\nIA5String.NAME = \"IA5String\";\n\nvar _a$a;\r\nclass GraphicString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 25;\r\n }\r\n}\r\n_a$a = GraphicString;\r\n(() => {\r\n typeStore.GraphicString = _a$a;\r\n})();\r\nGraphicString.NAME = \"GraphicString\";\n\nvar _a$9;\r\nclass VisibleString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 26;\r\n }\r\n}\r\n_a$9 = VisibleString;\r\n(() => {\r\n typeStore.VisibleString = _a$9;\r\n})();\r\nVisibleString.NAME = \"VisibleString\";\n\nvar _a$8;\r\nclass GeneralString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 27;\r\n }\r\n}\r\n_a$8 = GeneralString;\r\n(() => {\r\n typeStore.GeneralString = _a$8;\r\n})();\r\nGeneralString.NAME = \"GeneralString\";\n\nvar _a$7;\r\nclass CharacterString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 29;\r\n }\r\n}\r\n_a$7 = CharacterString;\r\n(() => {\r\n typeStore.CharacterString = _a$7;\r\n})();\r\nCharacterString.NAME = \"CharacterString\";\n\nvar _a$6;\r\nclass UTCTime extends VisibleString {\r\n constructor({ value, valueDate, ...parameters } = {}) {\r\n super(parameters);\r\n this.year = 0;\r\n this.month = 0;\r\n this.day = 0;\r\n this.hour = 0;\r\n this.minute = 0;\r\n this.second = 0;\r\n if (value) {\r\n this.fromString(value);\r\n this.valueBlock.valueHexView = new Uint8Array(value.length);\r\n for (let i = 0; i < value.length; i++)\r\n this.valueBlock.valueHexView[i] = value.charCodeAt(i);\r\n }\r\n if (valueDate) {\r\n this.fromDate(valueDate);\r\n this.valueBlock.valueHexView = new Uint8Array(this.toBuffer());\r\n }\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 23;\r\n }\r\n fromBuffer(inputBuffer) {\r\n this.fromString(String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer)));\r\n }\r\n toBuffer() {\r\n const str = this.toString();\r\n const buffer = new ArrayBuffer(str.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < str.length; i++)\r\n view[i] = str.charCodeAt(i);\r\n return buffer;\r\n }\r\n fromDate(inputDate) {\r\n this.year = inputDate.getUTCFullYear();\r\n this.month = inputDate.getUTCMonth() + 1;\r\n this.day = inputDate.getUTCDate();\r\n this.hour = inputDate.getUTCHours();\r\n this.minute = inputDate.getUTCMinutes();\r\n this.second = inputDate.getUTCSeconds();\r\n }\r\n toDate() {\r\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)));\r\n }\r\n fromString(inputString) {\r\n const parser = /(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})Z/ig;\r\n const parserArray = parser.exec(inputString);\r\n if (parserArray === null) {\r\n this.error = \"Wrong input string for conversion\";\r\n return;\r\n }\r\n const year = parseInt(parserArray[1], 10);\r\n if (year >= 50)\r\n this.year = 1900 + year;\r\n else\r\n this.year = 2000 + year;\r\n this.month = parseInt(parserArray[2], 10);\r\n this.day = parseInt(parserArray[3], 10);\r\n this.hour = parseInt(parserArray[4], 10);\r\n this.minute = parseInt(parserArray[5], 10);\r\n this.second = parseInt(parserArray[6], 10);\r\n }\r\n toString(encoding = \"iso\") {\r\n if (encoding === \"iso\") {\r\n const outputArray = new Array(7);\r\n outputArray[0] = pvutils.padNumber(((this.year < 2000) ? (this.year - 1900) : (this.year - 2000)), 2);\r\n outputArray[1] = pvutils.padNumber(this.month, 2);\r\n outputArray[2] = pvutils.padNumber(this.day, 2);\r\n outputArray[3] = pvutils.padNumber(this.hour, 2);\r\n outputArray[4] = pvutils.padNumber(this.minute, 2);\r\n outputArray[5] = pvutils.padNumber(this.second, 2);\r\n outputArray[6] = \"Z\";\r\n return outputArray.join(\"\");\r\n }\r\n return super.toString(encoding);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.toDate().toISOString()}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n year: this.year,\r\n month: this.month,\r\n day: this.day,\r\n hour: this.hour,\r\n minute: this.minute,\r\n second: this.second,\r\n };\r\n }\r\n}\r\n_a$6 = UTCTime;\r\n(() => {\r\n typeStore.UTCTime = _a$6;\r\n})();\r\nUTCTime.NAME = \"UTCTime\";\n\nvar _a$5;\r\nclass GeneralizedTime extends UTCTime {\r\n constructor(parameters = {}) {\r\n var _b;\r\n super(parameters);\r\n (_b = this.millisecond) !== null && _b !== void 0 ? _b : (this.millisecond = 0);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 24;\r\n }\r\n fromDate(inputDate) {\r\n super.fromDate(inputDate);\r\n this.millisecond = inputDate.getUTCMilliseconds();\r\n }\r\n toDate() {\r\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond)));\r\n }\r\n fromString(inputString) {\r\n let isUTC = false;\r\n let timeString = \"\";\r\n let dateTimeString = \"\";\r\n let fractionPart = 0;\r\n let parser;\r\n let hourDifference = 0;\r\n let minuteDifference = 0;\r\n if (inputString[inputString.length - 1] === \"Z\") {\r\n timeString = inputString.substring(0, inputString.length - 1);\r\n isUTC = true;\r\n }\r\n else {\r\n const number = new Number(inputString[inputString.length - 1]);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n timeString = inputString;\r\n }\r\n if (isUTC) {\r\n if (timeString.indexOf(\"+\") !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n if (timeString.indexOf(\"-\") !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n else {\r\n let multiplier = 1;\r\n let differencePosition = timeString.indexOf(\"+\");\r\n let differenceString = \"\";\r\n if (differencePosition === -1) {\r\n differencePosition = timeString.indexOf(\"-\");\r\n multiplier = -1;\r\n }\r\n if (differencePosition !== -1) {\r\n differenceString = timeString.substring(differencePosition + 1);\r\n timeString = timeString.substring(0, differencePosition);\r\n if ((differenceString.length !== 2) && (differenceString.length !== 4))\r\n throw new Error(\"Wrong input string for conversion\");\r\n let number = parseInt(differenceString.substring(0, 2), 10);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n hourDifference = multiplier * number;\r\n if (differenceString.length === 4) {\r\n number = parseInt(differenceString.substring(2, 4), 10);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n minuteDifference = multiplier * number;\r\n }\r\n }\r\n }\r\n let fractionPointPosition = timeString.indexOf(\".\");\r\n if (fractionPointPosition === -1)\r\n fractionPointPosition = timeString.indexOf(\",\");\r\n if (fractionPointPosition !== -1) {\r\n const fractionPartCheck = new Number(`0${timeString.substring(fractionPointPosition)}`);\r\n if (isNaN(fractionPartCheck.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n fractionPart = fractionPartCheck.valueOf();\r\n dateTimeString = timeString.substring(0, fractionPointPosition);\r\n }\r\n else\r\n dateTimeString = timeString;\r\n switch (true) {\r\n case (dateTimeString.length === 8):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n break;\r\n case (dateTimeString.length === 10):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n let fractionResult = 60 * fractionPart;\r\n this.minute = Math.floor(fractionResult);\r\n fractionResult = 60 * (fractionResult - this.minute);\r\n this.second = Math.floor(fractionResult);\r\n fractionResult = 1000 * (fractionResult - this.second);\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n case (dateTimeString.length === 12):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n let fractionResult = 60 * fractionPart;\r\n this.second = Math.floor(fractionResult);\r\n fractionResult = 1000 * (fractionResult - this.second);\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n case (dateTimeString.length === 14):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n const fractionResult = 1000 * fractionPart;\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n default:\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n const parserArray = parser.exec(dateTimeString);\r\n if (parserArray === null)\r\n throw new Error(\"Wrong input string for conversion\");\r\n for (let j = 1; j < parserArray.length; j++) {\r\n switch (j) {\r\n case 1:\r\n this.year = parseInt(parserArray[j], 10);\r\n break;\r\n case 2:\r\n this.month = parseInt(parserArray[j], 10);\r\n break;\r\n case 3:\r\n this.day = parseInt(parserArray[j], 10);\r\n break;\r\n case 4:\r\n this.hour = parseInt(parserArray[j], 10) + hourDifference;\r\n break;\r\n case 5:\r\n this.minute = parseInt(parserArray[j], 10) + minuteDifference;\r\n break;\r\n case 6:\r\n this.second = parseInt(parserArray[j], 10);\r\n break;\r\n default:\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n }\r\n if (isUTC === false) {\r\n const tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\r\n this.year = tempDate.getUTCFullYear();\r\n this.month = tempDate.getUTCMonth();\r\n this.day = tempDate.getUTCDay();\r\n this.hour = tempDate.getUTCHours();\r\n this.minute = tempDate.getUTCMinutes();\r\n this.second = tempDate.getUTCSeconds();\r\n this.millisecond = tempDate.getUTCMilliseconds();\r\n }\r\n }\r\n toString(encoding = \"iso\") {\r\n if (encoding === \"iso\") {\r\n const outputArray = [];\r\n outputArray.push(pvutils.padNumber(this.year, 4));\r\n outputArray.push(pvutils.padNumber(this.month, 2));\r\n outputArray.push(pvutils.padNumber(this.day, 2));\r\n outputArray.push(pvutils.padNumber(this.hour, 2));\r\n outputArray.push(pvutils.padNumber(this.minute, 2));\r\n outputArray.push(pvutils.padNumber(this.second, 2));\r\n if (this.millisecond !== 0) {\r\n outputArray.push(\".\");\r\n outputArray.push(pvutils.padNumber(this.millisecond, 3));\r\n }\r\n outputArray.push(\"Z\");\r\n return outputArray.join(\"\");\r\n }\r\n return super.toString(encoding);\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n millisecond: this.millisecond,\r\n };\r\n }\r\n}\r\n_a$5 = GeneralizedTime;\r\n(() => {\r\n typeStore.GeneralizedTime = _a$5;\r\n})();\r\nGeneralizedTime.NAME = \"GeneralizedTime\";\n\nvar _a$4;\r\nclass DATE extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 31;\r\n }\r\n}\r\n_a$4 = DATE;\r\n(() => {\r\n typeStore.DATE = _a$4;\r\n})();\r\nDATE.NAME = \"DATE\";\n\nvar _a$3;\r\nclass TimeOfDay extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 32;\r\n }\r\n}\r\n_a$3 = TimeOfDay;\r\n(() => {\r\n typeStore.TimeOfDay = _a$3;\r\n})();\r\nTimeOfDay.NAME = \"TimeOfDay\";\n\nvar _a$2;\r\nclass DateTime extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 33;\r\n }\r\n}\r\n_a$2 = DateTime;\r\n(() => {\r\n typeStore.DateTime = _a$2;\r\n})();\r\nDateTime.NAME = \"DateTime\";\n\nvar _a$1;\r\nclass Duration extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 34;\r\n }\r\n}\r\n_a$1 = Duration;\r\n(() => {\r\n typeStore.Duration = _a$1;\r\n})();\r\nDuration.NAME = \"Duration\";\n\nvar _a;\r\nclass TIME extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 14;\r\n }\r\n}\r\n_a = TIME;\r\n(() => {\r\n typeStore.TIME = _a;\r\n})();\r\nTIME.NAME = \"TIME\";\n\nclass Any {\r\n constructor({ name = EMPTY_STRING, optional = false, } = {}) {\r\n this.name = name;\r\n this.optional = optional;\r\n }\r\n}\n\nclass Choice extends Any {\r\n constructor({ value = [], ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n }\r\n}\n\nclass Repeated extends Any {\r\n constructor({ value = new Any(), local = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n this.local = local;\r\n }\r\n}\n\nclass RawData {\r\n constructor({ data = EMPTY_VIEW } = {}) {\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(data);\r\n }\r\n get data() {\r\n return this.dataView.slice().buffer;\r\n }\r\n set data(value) {\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(value);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const endLength = inputOffset + inputLength;\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).subarray(inputOffset, endLength);\r\n return endLength;\r\n }\r\n toBER(sizeOnly) {\r\n return this.dataView.slice().buffer;\r\n }\r\n}\n\nfunction compareSchema(root, inputData, inputSchema) {\r\n if (inputSchema instanceof Choice) {\r\n for (let j = 0; j < inputSchema.value.length; j++) {\r\n const result = compareSchema(root, inputData, inputSchema.value[j]);\r\n if (result.verified) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n }\r\n {\r\n const _result = {\r\n verified: false,\r\n result: {\r\n error: \"Wrong values for Choice type\"\r\n },\r\n };\r\n if (inputSchema.hasOwnProperty(NAME))\r\n _result.name = inputSchema.name;\r\n return _result;\r\n }\r\n }\r\n if (inputSchema instanceof Any) {\r\n if (inputSchema.hasOwnProperty(NAME))\r\n root[inputSchema.name] = inputData;\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if ((root instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong root object\" }\r\n };\r\n }\r\n if ((inputData instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 data\" }\r\n };\r\n }\r\n if ((inputSchema instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((ID_BLOCK in inputSchema) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((FROM_BER in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((TO_BER in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n const encodedId = inputSchema.idBlock.toBER(false);\r\n if (encodedId.byteLength === 0) {\r\n return {\r\n verified: false,\r\n result: { error: \"Error encoding idBlock for ASN.1 schema\" }\r\n };\r\n }\r\n const decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength);\r\n if (decodedOffset === -1) {\r\n return {\r\n verified: false,\r\n result: { error: \"Error decoding idBlock for ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(TAG_CLASS) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(TAG_NUMBER) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(IS_CONSTRUCTED) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (!(IS_HEX_ONLY in inputSchema.idBlock)) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.isHexOnly) {\r\n if ((VALUE_HEX_VIEW in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n const schemaView = inputSchema.idBlock.valueHexView;\r\n const asn1View = inputData.idBlock.valueHexView;\r\n if (schemaView.length !== asn1View.length) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n for (let i = 0; i < schemaView.length; i++) {\r\n if (schemaView[i] !== asn1View[1]) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n }\r\n }\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n root[inputSchema.name] = inputData;\r\n }\r\n if (inputSchema instanceof typeStore.Constructed) {\r\n let admission = 0;\r\n let result = {\r\n verified: false,\r\n result: {\r\n error: \"Unknown error\",\r\n }\r\n };\r\n let maxLength = inputSchema.valueBlock.value.length;\r\n if (maxLength > 0) {\r\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n maxLength = inputData.valueBlock.value.length;\r\n }\r\n }\r\n if (maxLength === 0) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if ((inputData.valueBlock.value.length === 0) &&\r\n (inputSchema.valueBlock.value.length !== 0)) {\r\n let _optional = true;\r\n for (let i = 0; i < inputSchema.valueBlock.value.length; i++)\r\n _optional = _optional && (inputSchema.valueBlock.value[i].optional || false);\r\n if (_optional) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n root.error = \"Inconsistent object length\";\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n for (let i = 0; i < maxLength; i++) {\r\n if ((i - admission) >= inputData.valueBlock.value.length) {\r\n if (inputSchema.valueBlock.value[i].optional === false) {\r\n const _result = {\r\n verified: false,\r\n result: root\r\n };\r\n root.error = \"Inconsistent length between ASN.1 data and schema\";\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n }\r\n else {\r\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n result = compareSchema(root, inputData.valueBlock.value[i], inputSchema.valueBlock.value[0].value);\r\n if (result.verified === false) {\r\n if (inputSchema.valueBlock.value[0].optional)\r\n admission++;\r\n else {\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n return result;\r\n }\r\n }\r\n if ((NAME in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].name.length > 0)) {\r\n let arrayRoot = {};\r\n if ((LOCAL in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].local))\r\n arrayRoot = inputData;\r\n else\r\n arrayRoot = root;\r\n if (typeof arrayRoot[inputSchema.valueBlock.value[0].name] === \"undefined\")\r\n arrayRoot[inputSchema.valueBlock.value[0].name] = [];\r\n arrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[i]);\r\n }\r\n }\r\n else {\r\n result = compareSchema(root, inputData.valueBlock.value[i - admission], inputSchema.valueBlock.value[i]);\r\n if (result.verified === false) {\r\n if (inputSchema.valueBlock.value[i].optional)\r\n admission++;\r\n else {\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (result.verified === false) {\r\n const _result = {\r\n verified: false,\r\n result: root\r\n };\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.primitiveSchema &&\r\n (VALUE_HEX_VIEW in inputData.valueBlock)) {\r\n const asn1 = localFromBER(inputData.valueBlock.valueHexView);\r\n if (asn1.offset === -1) {\r\n const _result = {\r\n verified: false,\r\n result: asn1.result\r\n };\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n return compareSchema(root, asn1.result, inputSchema.primitiveSchema);\r\n }\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n}\r\nfunction verifySchema(inputBuffer, inputSchema) {\r\n if ((inputSchema instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema type\" }\r\n };\r\n }\r\n const asn1 = localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\r\n if (asn1.offset === -1) {\r\n return {\r\n verified: false,\r\n result: asn1.result\r\n };\r\n }\r\n return compareSchema(asn1.result, asn1.result, inputSchema);\r\n}\n\nexport { Any, BaseBlock, BaseStringBlock, BitString, BmpString, Boolean, CharacterString, Choice, Constructed, DATE, DateTime, Duration, EndOfContent, Enumerated, GeneralString, GeneralizedTime, GraphicString, HexBlock, IA5String, Integer, Null, NumericString, ObjectIdentifier, OctetString, Primitive, PrintableString, RawData, RelativeObjectIdentifier, Repeated, Sequence, Set, TIME, TeletexString, TimeOfDay, UTCTime, UniversalString, Utf8String, ValueBlock, VideotexString, ViewWriter, VisibleString, compareSchema, fromBER, verifySchema };\n", "/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\nfunction getUTCDate(date) {\r\n return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));\r\n}\r\nfunction getParametersValue(parameters, name, defaultValue) {\r\n var _a;\r\n if ((parameters instanceof Object) === false) {\r\n return defaultValue;\r\n }\r\n return (_a = parameters[name]) !== null && _a !== void 0 ? _a : defaultValue;\r\n}\r\nfunction bufferToHexCodes(inputBuffer, inputOffset = 0, inputLength = (inputBuffer.byteLength - inputOffset), insertSpace = false) {\r\n let result = \"\";\r\n for (const item of (new Uint8Array(inputBuffer, inputOffset, inputLength))) {\r\n const str = item.toString(16).toUpperCase();\r\n if (str.length === 1) {\r\n result += \"0\";\r\n }\r\n result += str;\r\n if (insertSpace) {\r\n result += \" \";\r\n }\r\n }\r\n return result.trim();\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof ArrayBuffer)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be \\\"ArrayBuffer\\\"\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction utilFromBase(inputBuffer, inputBase) {\r\n let result = 0;\r\n if (inputBuffer.length === 1) {\r\n return inputBuffer[0];\r\n }\r\n for (let i = (inputBuffer.length - 1); i >= 0; i--) {\r\n result += inputBuffer[(inputBuffer.length - 1) - i] * Math.pow(2, inputBase * i);\r\n }\r\n return result;\r\n}\r\nfunction utilToBase(value, base, reserved = (-1)) {\r\n const internalReserved = reserved;\r\n let internalValue = value;\r\n let result = 0;\r\n let biggest = Math.pow(2, base);\r\n for (let i = 1; i < 8; i++) {\r\n if (value < biggest) {\r\n let retBuf;\r\n if (internalReserved < 0) {\r\n retBuf = new ArrayBuffer(i);\r\n result = i;\r\n }\r\n else {\r\n if (internalReserved < i) {\r\n return (new ArrayBuffer(0));\r\n }\r\n retBuf = new ArrayBuffer(internalReserved);\r\n result = internalReserved;\r\n }\r\n const retView = new Uint8Array(retBuf);\r\n for (let j = (i - 1); j >= 0; j--) {\r\n const basis = Math.pow(2, j * base);\r\n retView[result - j - 1] = Math.floor(internalValue / basis);\r\n internalValue -= (retView[result - j - 1]) * basis;\r\n }\r\n return retBuf;\r\n }\r\n biggest *= Math.pow(2, base);\r\n }\r\n return new ArrayBuffer(0);\r\n}\r\nfunction utilConcatBuf(...buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const buffer of buffers) {\r\n outputLength += buffer.byteLength;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const buffer of buffers) {\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retBuf;\r\n}\r\nfunction utilConcatView(...views) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const view of views) {\r\n outputLength += view.length;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const view of views) {\r\n retView.set(view, prevLength);\r\n prevLength += view.length;\r\n }\r\n return retView;\r\n}\r\nfunction utilDecodeTC() {\r\n const buf = new Uint8Array(this.valueHex);\r\n if (this.valueHex.byteLength >= 2) {\r\n const condition1 = (buf[0] === 0xFF) && (buf[1] & 0x80);\r\n const condition2 = (buf[0] === 0x00) && ((buf[1] & 0x80) === 0x00);\r\n if (condition1 || condition2) {\r\n this.warnings.push(\"Needlessly long format\");\r\n }\r\n }\r\n const bigIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const bigIntView = new Uint8Array(bigIntBuffer);\r\n for (let i = 0; i < this.valueHex.byteLength; i++) {\r\n bigIntView[i] = 0;\r\n }\r\n bigIntView[0] = (buf[0] & 0x80);\r\n const bigInt = utilFromBase(bigIntView, 8);\r\n const smallIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const smallIntView = new Uint8Array(smallIntBuffer);\r\n for (let j = 0; j < this.valueHex.byteLength; j++) {\r\n smallIntView[j] = buf[j];\r\n }\r\n smallIntView[0] &= 0x7F;\r\n const smallInt = utilFromBase(smallIntView, 8);\r\n return (smallInt - bigInt);\r\n}\r\nfunction utilEncodeTC(value) {\r\n const modValue = (value < 0) ? (value * (-1)) : value;\r\n let bigInt = 128;\r\n for (let i = 1; i < 8; i++) {\r\n if (modValue <= bigInt) {\r\n if (value < 0) {\r\n const smallInt = bigInt - modValue;\r\n const retBuf = utilToBase(smallInt, 8, i);\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] |= 0x80;\r\n return retBuf;\r\n }\r\n let retBuf = utilToBase(modValue, 8, i);\r\n let retView = new Uint8Array(retBuf);\r\n if (retView[0] & 0x80) {\r\n const tempBuf = retBuf.slice(0);\r\n const tempView = new Uint8Array(tempBuf);\r\n retBuf = new ArrayBuffer(retBuf.byteLength + 1);\r\n retView = new Uint8Array(retBuf);\r\n for (let k = 0; k < tempBuf.byteLength; k++) {\r\n retView[k + 1] = tempView[k];\r\n }\r\n retView[0] = 0x00;\r\n }\r\n return retBuf;\r\n }\r\n bigInt *= Math.pow(2, 8);\r\n }\r\n return (new ArrayBuffer(0));\r\n}\r\nfunction isEqualBuffer(inputBuffer1, inputBuffer2) {\r\n if (inputBuffer1.byteLength !== inputBuffer2.byteLength) {\r\n return false;\r\n }\r\n const view1 = new Uint8Array(inputBuffer1);\r\n const view2 = new Uint8Array(inputBuffer2);\r\n for (let i = 0; i < view1.length; i++) {\r\n if (view1[i] !== view2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction padNumber(inputNumber, fullLength) {\r\n const str = inputNumber.toString(10);\r\n if (fullLength < str.length) {\r\n return \"\";\r\n }\r\n const dif = fullLength - str.length;\r\n const padding = new Array(dif);\r\n for (let i = 0; i < dif; i++) {\r\n padding[i] = \"0\";\r\n }\r\n const paddingString = padding.join(\"\");\r\n return paddingString.concat(str);\r\n}\r\nconst base64Template = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\nconst base64UrlTemplate = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=\";\r\nfunction toBase64(input, useUrlTemplate = false, skipPadding = false, skipLeadingZeros = false) {\r\n let i = 0;\r\n let flag1 = 0;\r\n let flag2 = 0;\r\n let output = \"\";\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n if (skipLeadingZeros) {\r\n let nonZeroPosition = 0;\r\n for (let i = 0; i < input.length; i++) {\r\n if (input.charCodeAt(i) !== 0) {\r\n nonZeroPosition = i;\r\n break;\r\n }\r\n }\r\n input = input.slice(nonZeroPosition);\r\n }\r\n while (i < input.length) {\r\n const chr1 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag1 = 1;\r\n }\r\n const chr2 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag2 = 1;\r\n }\r\n const chr3 = input.charCodeAt(i++);\r\n const enc1 = chr1 >> 2;\r\n const enc2 = ((chr1 & 0x03) << 4) | (chr2 >> 4);\r\n let enc3 = ((chr2 & 0x0F) << 2) | (chr3 >> 6);\r\n let enc4 = chr3 & 0x3F;\r\n if (flag1 === 1) {\r\n enc3 = enc4 = 64;\r\n }\r\n else {\r\n if (flag2 === 1) {\r\n enc4 = 64;\r\n }\r\n }\r\n if (skipPadding) {\r\n if (enc3 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}`;\r\n }\r\n else {\r\n if (enc4 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}`;\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n return output;\r\n}\r\nfunction fromBase64(input, useUrlTemplate = false, cutTailZeros = false) {\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n function indexOf(toSearch) {\r\n for (let i = 0; i < 64; i++) {\r\n if (template.charAt(i) === toSearch)\r\n return i;\r\n }\r\n return 64;\r\n }\r\n function test(incoming) {\r\n return ((incoming === 64) ? 0x00 : incoming);\r\n }\r\n let i = 0;\r\n let output = \"\";\r\n while (i < input.length) {\r\n const enc1 = indexOf(input.charAt(i++));\r\n const enc2 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc3 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc4 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const chr1 = (test(enc1) << 2) | (test(enc2) >> 4);\r\n const chr2 = ((test(enc2) & 0x0F) << 4) | (test(enc3) >> 2);\r\n const chr3 = ((test(enc3) & 0x03) << 6) | test(enc4);\r\n output += String.fromCharCode(chr1);\r\n if (enc3 !== 64) {\r\n output += String.fromCharCode(chr2);\r\n }\r\n if (enc4 !== 64) {\r\n output += String.fromCharCode(chr3);\r\n }\r\n }\r\n if (cutTailZeros) {\r\n const outputLength = output.length;\r\n let nonZeroStart = (-1);\r\n for (let i = (outputLength - 1); i >= 0; i--) {\r\n if (output.charCodeAt(i) !== 0) {\r\n nonZeroStart = i;\r\n break;\r\n }\r\n }\r\n if (nonZeroStart !== (-1)) {\r\n output = output.slice(0, nonZeroStart + 1);\r\n }\r\n else {\r\n output = \"\";\r\n }\r\n }\r\n return output;\r\n}\r\nfunction arrayBufferToString(buffer) {\r\n let resultString = \"\";\r\n const view = new Uint8Array(buffer);\r\n for (const element of view) {\r\n resultString += String.fromCharCode(element);\r\n }\r\n return resultString;\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n const stringLength = str.length;\r\n const resultBuffer = new ArrayBuffer(stringLength);\r\n const resultView = new Uint8Array(resultBuffer);\r\n for (let i = 0; i < stringLength; i++) {\r\n resultView[i] = str.charCodeAt(i);\r\n }\r\n return resultBuffer;\r\n}\r\nconst log2 = Math.log(2);\r\nfunction nearestPowerOf2(length) {\r\n const base = (Math.log(length) / log2);\r\n const floor = Math.floor(base);\r\n const round = Math.round(base);\r\n return ((floor === round) ? floor : round);\r\n}\r\nfunction clearProps(object, propsArray) {\r\n for (const prop of propsArray) {\r\n delete object[prop];\r\n }\r\n}\n\nexport { arrayBufferToString, bufferToHexCodes, checkBufferParams, clearProps, fromBase64, getParametersValue, getUTCDate, isEqualBuffer, nearestPowerOf2, padNumber, stringToArrayBuffer, toBase64, utilConcatBuf, utilConcatView, utilDecodeTC, utilEncodeTC, utilFromBase, utilToBase };\n", null, null, null, "/** @fileOverview Javascript cryptography implementation.\n *\n * Crush to remove comments, shorten variable names and\n * generally reduce transmission size.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\"use strict\";\n/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */\n/*global document, window, escape, unescape, module, require, Uint32Array */\n/**\n * The Stanford Javascript Crypto Library, top-level namespace.\n * @namespace\n */\nvar sjcl = {\n /**\n * Symmetric ciphers.\n * @namespace\n */\n cipher: {},\n /**\n * Hash functions. Right now only SHA256 is implemented.\n * @namespace\n */\n hash: {},\n /**\n * Key exchange functions. Right now only SRP is implemented.\n * @namespace\n */\n keyexchange: {},\n /**\n * Cipher modes of operation.\n * @namespace\n */\n mode: {},\n /**\n * Miscellaneous. HMAC and PBKDF2.\n * @namespace\n */\n misc: {},\n /**\n * Bit array encoders and decoders.\n * @namespace\n *\n * @description\n * The members of this namespace are functions which translate between\n * SJCL's bitArrays and other objects (usually strings). Because it\n * isn't always clear which direction is encoding and which is decoding,\n * the method names are \"fromBits\" and \"toBits\".\n */\n codec: {},\n /**\n * Exceptions.\n * @namespace\n */\n exception: {\n /**\n * Ciphertext is corrupt.\n * @constructor\n */\n corrupt: function (message) {\n this.toString = function () { return \"CORRUPT: \" + this.message; };\n this.message = message;\n },\n /**\n * Invalid parameter.\n * @constructor\n */\n invalid: function (message) {\n this.toString = function () { return \"INVALID: \" + this.message; };\n this.message = message;\n },\n /**\n * Bug or missing feature in SJCL.\n * @constructor\n */\n bug: function (message) {\n this.toString = function () { return \"BUG: \" + this.message; };\n this.message = message;\n },\n /**\n * Something isn't ready.\n * @constructor\n */\n notReady: function (message) {\n this.toString = function () { return \"NOT READY: \" + this.message; };\n this.message = message;\n }\n }\n};\n/** @fileOverview Low-level AES implementation.\n *\n * This file contains a low-level implementation of AES, optimized for\n * size and for efficiency on several browsers. It is based on\n * OpenSSL's aes_core.c, a public-domain implementation by Vincent\n * Rijmen, Antoon Bosselaers and Paulo Barreto.\n *\n * An older version of this implementation is available in the public\n * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,\n * Stanford University 2008-2010 and BSD-licensed for liability\n * reasons.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @constructor\n * @param {Array} key The key as an array of 4, 6 or 8 words.\n */\nsjcl.cipher.aes = function (key) {\n if (!this._tables[0][0][0]) {\n this._precompute();\n }\n var i, j, tmp, encKey, decKey, sbox = this._tables[0][4], decTable = this._tables[1], keyLen = key.length, rcon = 1;\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new sjcl.exception.invalid(\"invalid aes key size\");\n }\n this._key = [encKey = key.slice(0), decKey = []];\n // schedule encryption keys\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1];\n // apply sbox\n if (i % keyLen === 0 || (keyLen === 8 && i % keyLen === 4)) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255];\n // shift rows and add rcon\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n encKey[i] = encKey[i - keyLen] ^ tmp;\n }\n // schedule decryption keys\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n }\n else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^\n decTable[1][sbox[tmp >> 16 & 255]] ^\n decTable[2][sbox[tmp >> 8 & 255]] ^\n decTable[3][sbox[tmp & 255]];\n }\n }\n};\nsjcl.cipher.aes.prototype = {\n // public\n /* Something like this might appear here eventually\n name: \"AES\",\n blockSize: 4,\n keySizes: [4,6,8],\n */\n /**\n * Encrypt an array of 4 big-endian words.\n * @param {Array} data The plaintext.\n * @return {Array} The ciphertext.\n */\n encrypt: function (data) { return this._crypt(data, 0); },\n /**\n * Decrypt an array of 4 big-endian words.\n * @param {Array} data The ciphertext.\n * @return {Array} The plaintext.\n */\n decrypt: function (data) { return this._crypt(data, 1); },\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n _tables: [[[], [], [], [], []], [[], [], [], [], []]],\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n _precompute: function () {\n var encTable = this._tables[0], decTable = this._tables[1], sbox = encTable[4], sboxInv = decTable[4], i, x, xInv, d = [], th = [], x2, x4, x8, s, tEnc, tDec;\n // Compute double and third tables\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n }\n // Compactify. Considerable speedup on Firefox.\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n },\n /**\n * Encryption and decryption core.\n * @param {Array} input Four words to be encrypted or decrypted.\n * @param dir The direction, 0 for encrypt and 1 for decrypt.\n * @return {Array} The four encrypted or decrypted words.\n * @private\n */\n _crypt: function (input, dir) {\n if (input.length !== 4) {\n throw new sjcl.exception.invalid(\"invalid aes block size\");\n }\n var key = this._key[dir], \n // state variables a,b,c,d are loaded with pre-whitened data\n a = input[0] ^ key[0], b = input[dir ? 3 : 1] ^ key[1], c = input[2] ^ key[2], d = input[dir ? 1 : 3] ^ key[3], a2, b2, c2, nInnerRounds = key.length / 4 - 2, i, kIndex = 4, out = [0, 0, 0, 0], table = this._tables[dir], \n // load up the tables\n t0 = table[0], t1 = table[1], t2 = table[2], t3 = table[3], sbox = table[4];\n // Inner rounds. Cribbed from OpenSSL.\n for (i = 0; i < nInnerRounds; i++) {\n a2 = t0[a >>> 24] ^ t1[b >> 16 & 255] ^ t2[c >> 8 & 255] ^ t3[d & 255] ^ key[kIndex];\n b2 = t0[b >>> 24] ^ t1[c >> 16 & 255] ^ t2[d >> 8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];\n c2 = t0[c >>> 24] ^ t1[d >> 16 & 255] ^ t2[a >> 8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];\n d = t0[d >>> 24] ^ t1[a >> 16 & 255] ^ t2[b >> 8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;\n b = b2;\n c = c2;\n }\n // Last round.\n for (i = 0; i < 4; i++) {\n out[dir ? 3 & -i : i] =\n sbox[a >>> 24] << 24 ^\n sbox[b >> 16 & 255] << 16 ^\n sbox[c >> 8 & 255] << 8 ^\n sbox[d & 255] ^\n key[kIndex++];\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n }\n};\n/** @fileOverview Arrays of bits, encoded as arrays of Numbers.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Arrays of bits, encoded as arrays of Numbers.\n * @namespace\n * @description\n *

\n * These objects are the currency accepted by SJCL's crypto functions.\n *

\n *\n *

\n * Most of our crypto primitives operate on arrays of 4-byte words internally,\n * but many of them can take arguments that are not a multiple of 4 bytes.\n * This library encodes arrays of bits (whose size need not be a multiple of 8\n * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an\n * array of words, 32 bits at a time. Since the words are double-precision\n * floating point numbers, they fit some extra data. We use this (in a private,\n * possibly-changing manner) to encode the number of bits actually present\n * in the last word of the array.\n *

\n *\n *

\n * Because bitwise ops clear this out-of-band data, these arrays can be passed\n * to ciphers like AES which want arrays of words.\n *

\n */\nsjcl.bitArray = {\n /**\n * Array slices in units of bits.\n * @param {bitArray} a The array to slice.\n * @param {Number} bstart The offset to the start of the slice, in bits.\n * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,\n * slice until the end of the array.\n * @return {bitArray} The requested slice.\n */\n bitSlice: function (a, bstart, bend) {\n a = sjcl.bitArray._shiftRight(a.slice(bstart / 32), 32 - (bstart & 31)).slice(1);\n return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend - bstart);\n },\n /**\n * Extract a number packed into a bit array.\n * @param {bitArray} a The array to slice.\n * @param {Number} bstart The offset to the start of the slice, in bits.\n * @param {Number} blength The length of the number to extract.\n * @return {Number} The requested slice.\n */\n extract: function (a, bstart, blength) {\n // FIXME: this Math.floor is not necessary at all, but for some reason\n // seems to suppress a bug in the Chromium JIT.\n var x, sh = Math.floor((-bstart - blength) & 31);\n if ((bstart + blength - 1 ^ bstart) & -32) {\n // it crosses a boundary\n x = (a[bstart / 32 | 0] << (32 - sh)) ^ (a[bstart / 32 + 1 | 0] >>> sh);\n }\n else {\n // within a single word\n x = a[bstart / 32 | 0] >>> sh;\n }\n return x & ((1 << blength) - 1);\n },\n /**\n * Concatenate two bit arrays.\n * @param {bitArray} a1 The first array.\n * @param {bitArray} a2 The second array.\n * @return {bitArray} The concatenation of a1 and a2.\n */\n concat: function (a1, a2) {\n if (a1.length === 0 || a2.length === 0) {\n return a1.concat(a2);\n }\n var last = a1[a1.length - 1], shift = sjcl.bitArray.getPartial(last);\n if (shift === 32) {\n return a1.concat(a2);\n }\n else {\n return sjcl.bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));\n }\n },\n /**\n * Find the length of an array of bits.\n * @param {bitArray} a The array.\n * @return {Number} The length of a, in bits.\n */\n bitLength: function (a) {\n var l = a.length, x;\n if (l === 0) {\n return 0;\n }\n x = a[l - 1];\n return (l - 1) * 32 + sjcl.bitArray.getPartial(x);\n },\n /**\n * Truncate an array.\n * @param {bitArray} a The array.\n * @param {Number} len The length to truncate to, in bits.\n * @return {bitArray} A new array, truncated to len bits.\n */\n clamp: function (a, len) {\n if (a.length * 32 < len) {\n return a;\n }\n a = a.slice(0, Math.ceil(len / 32));\n var l = a.length;\n len = len & 31;\n if (l > 0 && len) {\n a[l - 1] = sjcl.bitArray.partial(len, a[l - 1] & 0x80000000 >> (len - 1), 1);\n }\n return a;\n },\n /**\n * Make a partial word for a bit array.\n * @param {Number} len The number of bits in the word.\n * @param {Number} x The bits.\n * @param {Number} [_end=0] Pass 1 if x has already been shifted to the high side.\n * @return {Number} The partial word.\n */\n partial: function (len, x, _end) {\n if (len === 32) {\n return x;\n }\n return (_end ? x | 0 : x << (32 - len)) + len * 0x10000000000;\n },\n /**\n * Get the number of bits used by a partial word.\n * @param {Number} x The partial word.\n * @return {Number} The number of bits used by the partial word.\n */\n getPartial: function (x) {\n return Math.round(x / 0x10000000000) || 32;\n },\n /**\n * Compare two arrays for equality in a predictable amount of time.\n * @param {bitArray} a The first array.\n * @param {bitArray} b The second array.\n * @return {boolean} true if a == b; false otherwise.\n */\n equal: function (a, b) {\n if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {\n return false;\n }\n var x = 0, i;\n for (i = 0; i < a.length; i++) {\n x |= a[i] ^ b[i];\n }\n return (x === 0);\n },\n /** Shift an array right.\n * @param {bitArray} a The array to shift.\n * @param {Number} shift The number of bits to shift.\n * @param {Number} [carry=0] A byte to carry in\n * @param {bitArray} [out=[]] An array to prepend to the output.\n * @private\n */\n _shiftRight: function (a, shift, carry, out) {\n var i, last2 = 0, shift2;\n if (out === undefined) {\n out = [];\n }\n for (; shift >= 32; shift -= 32) {\n out.push(carry);\n carry = 0;\n }\n if (shift === 0) {\n return out.concat(a);\n }\n for (i = 0; i < a.length; i++) {\n out.push(carry | a[i] >>> shift);\n carry = a[i] << (32 - shift);\n }\n last2 = a.length ? a[a.length - 1] : 0;\n shift2 = sjcl.bitArray.getPartial(last2);\n out.push(sjcl.bitArray.partial(shift + shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(), 1));\n return out;\n },\n /** xor a block of 4 words together.\n * @private\n */\n _xor4: function (x, y) {\n return [x[0] ^ y[0], x[1] ^ y[1], x[2] ^ y[2], x[3] ^ y[3]];\n },\n /** byteswap a word array inplace.\n * (does not handle partial words)\n * @param {sjcl.bitArray} a word array\n * @return {sjcl.bitArray} byteswapped array\n */\n byteswapM: function (a) {\n var i, v, m = 0xff00;\n for (i = 0; i < a.length; ++i) {\n v = a[i];\n a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);\n }\n return a;\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * UTF-8 strings\n * @namespace\n */\nsjcl.codec.utf8String = {\n /** Convert from a bitArray to a UTF-8 string. */\n fromBits: function (arr) {\n var out = \"\", bl = sjcl.bitArray.bitLength(arr), i, tmp;\n for (i = 0; i < bl / 8; i++) {\n if ((i & 3) === 0) {\n tmp = arr[i / 4];\n }\n out += String.fromCharCode(tmp >>> 8 >>> 8 >>> 8);\n tmp <<= 8;\n }\n return decodeURIComponent(escape(out));\n },\n /** Convert from a UTF-8 string to a bitArray. */\n toBits: function (str) {\n str = unescape(encodeURIComponent(str));\n var out = [], i, tmp = 0;\n for (i = 0; i < str.length; i++) {\n tmp = tmp << 8 | str.charCodeAt(i);\n if ((i & 3) === 3) {\n out.push(tmp);\n tmp = 0;\n }\n }\n if (i & 3) {\n out.push(sjcl.bitArray.partial(8 * (i & 3), tmp));\n }\n return out;\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Hexadecimal\n * @namespace\n */\nsjcl.codec.hex = {\n /** Convert from a bitArray to a hex string. */\n fromBits: function (arr) {\n var out = \"\", i;\n for (i = 0; i < arr.length; i++) {\n out += ((arr[i] | 0) + 0xF00000000000).toString(16).substr(4);\n }\n return out.substr(0, sjcl.bitArray.bitLength(arr) / 4); //.replace(/(.{8})/g, \"$1 \");\n },\n /** Convert from a hex string to a bitArray. */\n toBits: function (str) {\n var i, out = [], len;\n str = str.replace(/\\s|0x/g, \"\");\n len = str.length;\n str = str + \"00000000\";\n for (i = 0; i < str.length; i += 8) {\n out.push(parseInt(str.substr(i, 8), 16) ^ 0);\n }\n return sjcl.bitArray.clamp(out, len * 4);\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Base64 encoding/decoding\n * @namespace\n */\nsjcl.codec.base64 = {\n /** The base64 alphabet.\n * @private\n */\n _chars: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n /** Convert from a bitArray to a base64 string. */\n fromBits: function (arr, _noEquals, _url) {\n var out = \"\", i, bits = 0, c = sjcl.codec.base64._chars, ta = 0, bl = sjcl.bitArray.bitLength(arr);\n if (_url) {\n c = c.substr(0, 62) + '-_';\n }\n for (i = 0; out.length * 6 < bl;) {\n out += c.charAt((ta ^ arr[i] >>> bits) >>> 26);\n if (bits < 6) {\n ta = arr[i] << (6 - bits);\n bits += 26;\n i++;\n }\n else {\n ta <<= 6;\n bits -= 6;\n }\n }\n while ((out.length & 3) && !_noEquals) {\n out += \"=\";\n }\n return out;\n },\n /** Convert from a base64 string to a bitArray */\n toBits: function (str, _url) {\n str = str.replace(/\\s|=/g, '');\n var out = [], i, bits = 0, c = sjcl.codec.base64._chars, ta = 0, x;\n if (_url) {\n c = c.substr(0, 62) + '-_';\n }\n for (i = 0; i < str.length; i++) {\n x = c.indexOf(str.charAt(i));\n if (x < 0) {\n throw new sjcl.exception.invalid(\"this isn't base64!\");\n }\n if (bits > 26) {\n bits -= 26;\n out.push(ta ^ x >>> bits);\n ta = x << (32 - bits);\n }\n else {\n bits += 6;\n ta ^= x << (32 - bits);\n }\n }\n if (bits & 56) {\n out.push(sjcl.bitArray.partial(bits & 56, ta, 1));\n }\n return out;\n }\n};\nsjcl.codec.base64url = {\n fromBits: function (arr) { return sjcl.codec.base64.fromBits(arr, 1, 1); },\n toBits: function (str) { return sjcl.codec.base64.toBits(str, 1); }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Arrays of bytes\n * @namespace\n */\nsjcl.codec.bytes = {\n /** Convert from a bitArray to an array of bytes. */\n fromBits: function (arr) {\n var out = [], bl = sjcl.bitArray.bitLength(arr), i, tmp;\n for (i = 0; i < bl / 8; i++) {\n if ((i & 3) === 0) {\n tmp = arr[i / 4];\n }\n out.push(tmp >>> 24);\n tmp <<= 8;\n }\n return out;\n },\n /** Convert from an array of bytes to a bitArray. */\n toBits: function (bytes) {\n var out = [], i, tmp = 0;\n for (i = 0; i < bytes.length; i++) {\n tmp = tmp << 8 | bytes[i];\n if ((i & 3) === 3) {\n out.push(tmp);\n tmp = 0;\n }\n }\n if (i & 3) {\n out.push(sjcl.bitArray.partial(8 * (i & 3), tmp));\n }\n return out;\n }\n};\n/** @fileOverview Javascript SHA-256 implementation.\n *\n * An older version of this implementation is available in the public\n * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,\n * Stanford University 2008-2010 and BSD-licensed for liability\n * reasons.\n *\n * Special thanks to Aldo Cortesi for pointing out several bugs in\n * this code.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * Context for a SHA-256 operation in progress.\n * @constructor\n */\nsjcl.hash.sha256 = function (hash) {\n if (!this._key[0]) {\n this._precompute();\n }\n if (hash) {\n this._h = hash._h.slice(0);\n this._buffer = hash._buffer.slice(0);\n this._length = hash._length;\n }\n else {\n this.reset();\n }\n};\n/**\n * Hash a string or an array of words.\n * @static\n * @param {bitArray|String} data the data to hash.\n * @return {bitArray} The hash value, an array of 16 big-endian words.\n */\nsjcl.hash.sha256.hash = function (data) {\n return (new sjcl.hash.sha256()).update(data).finalize();\n};\nsjcl.hash.sha256.prototype = {\n /**\n * The hash's block size, in bits.\n * @constant\n */\n blockSize: 512,\n /**\n * Reset the hash state.\n * @return this\n */\n reset: function () {\n this._h = this._init.slice(0);\n this._buffer = [];\n this._length = 0;\n return this;\n },\n /**\n * Input several words to the hash.\n * @param {bitArray|String} data the data to hash.\n * @return this\n */\n update: function (data) {\n if (typeof data === \"string\") {\n data = sjcl.codec.utf8String.toBits(data);\n }\n var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data), ol = this._length, nl = this._length = ol + sjcl.bitArray.bitLength(data);\n if (nl > 9007199254740991) {\n throw new sjcl.exception.invalid(\"Cannot hash more than 2^53 - 1 bits\");\n }\n if (typeof Uint32Array !== 'undefined') {\n var c = new Uint32Array(b);\n var j = 0;\n for (i = 512 + ol - ((512 + ol) & 511); i <= nl; i += 512) {\n this._block(c.subarray(16 * j, 16 * (j + 1)));\n j += 1;\n }\n b.splice(0, 16 * j);\n }\n else {\n for (i = 512 + ol - ((512 + ol) & 511); i <= nl; i += 512) {\n this._block(b.splice(0, 16));\n }\n }\n return this;\n },\n /**\n * Complete hashing and output the hash value.\n * @return {bitArray} The hash value, an array of 8 big-endian words.\n */\n finalize: function () {\n var i, b = this._buffer, h = this._h;\n // Round out and push the buffer\n b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1, 1)]);\n // Round out the buffer to a multiple of 16 words, less the 2 length words.\n for (i = b.length + 2; i & 15; i++) {\n b.push(0);\n }\n // append the length\n b.push(Math.floor(this._length / 0x100000000));\n b.push(this._length | 0);\n while (b.length) {\n this._block(b.splice(0, 16));\n }\n this.reset();\n return h;\n },\n /**\n * The SHA-256 initialization vector, to be precomputed.\n * @private\n */\n _init: [],\n /*\n _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],\n */\n /**\n * The SHA-256 hash key, to be precomputed.\n * @private\n */\n _key: [],\n /*\n _key:\n [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],\n */\n /**\n * Function to precompute _init and _key.\n * @private\n */\n _precompute: function () {\n var i = 0, prime = 2, factor, isPrime;\n function frac(x) { return (x - Math.floor(x)) * 0x100000000 | 0; }\n for (; i < 64; prime++) {\n isPrime = true;\n for (factor = 2; factor * factor <= prime; factor++) {\n if (prime % factor === 0) {\n isPrime = false;\n break;\n }\n }\n if (isPrime) {\n if (i < 8) {\n this._init[i] = frac(Math.pow(prime, 1 / 2));\n }\n this._key[i] = frac(Math.pow(prime, 1 / 3));\n i++;\n }\n }\n },\n /**\n * Perform one cycle of SHA-256.\n * @param {Uint32Array|bitArray} w one block of words.\n * @private\n */\n _block: function (w) {\n var i, tmp, a, b, h = this._h, k = this._key, h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3], h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];\n /* Rationale for placement of |0 :\n * If a value can overflow is original 32 bits by a factor of more than a few\n * million (2^23 ish), there is a possibility that it might overflow the\n * 53-bit mantissa and lose precision.\n *\n * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that\n * propagates around the loop, and on the hash state h[]. I don't believe\n * that the clamps on h4 and on h0 are strictly necessary, but it's close\n * (for h4 anyway), and better safe than sorry.\n *\n * The clamps on h[] are necessary for the output to be correct even in the\n * common case and for short inputs.\n */\n for (i = 0; i < 64; i++) {\n // load up the input word for this round\n if (i < 16) {\n tmp = w[i];\n }\n else {\n a = w[(i + 1) & 15];\n b = w[(i + 14) & 15];\n tmp = w[i & 15] = ((a >>> 7 ^ a >>> 18 ^ a >>> 3 ^ a << 25 ^ a << 14) +\n (b >>> 17 ^ b >>> 19 ^ b >>> 10 ^ b << 15 ^ b << 13) +\n w[i & 15] + w[(i + 9) & 15]) | 0;\n }\n tmp = (tmp + h7 + (h4 >>> 6 ^ h4 >>> 11 ^ h4 >>> 25 ^ h4 << 26 ^ h4 << 21 ^ h4 << 7) + (h6 ^ h4 & (h5 ^ h6)) + k[i]); // | 0;\n // shift register\n h7 = h6;\n h6 = h5;\n h5 = h4;\n h4 = h3 + tmp | 0;\n h3 = h2;\n h2 = h1;\n h1 = h0;\n h0 = (tmp + ((h1 & h2) ^ (h3 & (h1 ^ h2))) + (h1 >>> 2 ^ h1 >>> 13 ^ h1 >>> 22 ^ h1 << 30 ^ h1 << 19 ^ h1 << 10)) | 0;\n }\n h[0] = h[0] + h0 | 0;\n h[1] = h[1] + h1 | 0;\n h[2] = h[2] + h2 | 0;\n h[3] = h[3] + h3 | 0;\n h[4] = h[4] + h4 | 0;\n h[5] = h[5] + h5 | 0;\n h[6] = h[6] + h6 | 0;\n h[7] = h[7] + h7 | 0;\n }\n};\n/** @fileOverview CCM mode implementation.\n *\n * Special thanks to Roy Nicholson for pointing out a bug in our\n * implementation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * CTR mode with CBC MAC.\n * @namespace\n */\nsjcl.mode.ccm = {\n /** The name of the mode.\n * @constant\n */\n name: \"ccm\",\n _progressListeners: [],\n listenProgress: function (cb) {\n sjcl.mode.ccm._progressListeners.push(cb);\n },\n unListenProgress: function (cb) {\n var index = sjcl.mode.ccm._progressListeners.indexOf(cb);\n if (index > -1) {\n sjcl.mode.ccm._progressListeners.splice(index, 1);\n }\n },\n _callProgressListener: function (val) {\n var p = sjcl.mode.ccm._progressListeners.slice(), i;\n for (i = 0; i < p.length; i += 1) {\n p[i](val);\n }\n },\n /** Encrypt in CCM mode.\n * @static\n * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes.\n * @param {bitArray} plaintext The plaintext data.\n * @param {bitArray} iv The initialization value.\n * @param {bitArray} [adata=[]] The authenticated data.\n * @param {Number} [tlen=64] the desired tag length, in bits.\n * @return {bitArray} The encrypted data, an array of bytes.\n */\n encrypt: function (prf, plaintext, iv, adata, tlen) {\n var L, out = plaintext.slice(0), tag, w = sjcl.bitArray, ivl = w.bitLength(iv) / 8, ol = w.bitLength(out) / 8;\n tlen = tlen || 64;\n adata = adata || [];\n if (ivl < 7) {\n throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");\n }\n // compute the length of the length\n for (L = 2; L < 4 && ol >>> 8 * L; L++) { }\n if (L < 15 - ivl) {\n L = 15 - ivl;\n }\n iv = w.clamp(iv, 8 * (15 - L));\n // compute the tag\n tag = sjcl.mode.ccm._computeTag(prf, plaintext, iv, adata, tlen, L);\n // encrypt\n out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L);\n return w.concat(out.data, out.tag);\n },\n /** Decrypt in CCM mode.\n * @static\n * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes.\n * @param {bitArray} ciphertext The ciphertext data.\n * @param {bitArray} iv The initialization value.\n * @param {bitArray} [adata=[]] adata The authenticated data.\n * @param {Number} [tlen=64] tlen the desired tag length, in bits.\n * @return {bitArray} The decrypted data.\n */\n decrypt: function (prf, ciphertext, iv, adata, tlen) {\n tlen = tlen || 64;\n adata = adata || [];\n var L, w = sjcl.bitArray, ivl = w.bitLength(iv) / 8, ol = w.bitLength(ciphertext), out = w.clamp(ciphertext, ol - tlen), tag = w.bitSlice(ciphertext, ol - tlen), tag2;\n ol = (ol - tlen) / 8;\n if (ivl < 7) {\n throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");\n }\n // compute the length of the length\n for (L = 2; L < 4 && ol >>> 8 * L; L++) { }\n if (L < 15 - ivl) {\n L = 15 - ivl;\n }\n iv = w.clamp(iv, 8 * (15 - L));\n // decrypt\n out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L);\n // check the tag\n tag2 = sjcl.mode.ccm._computeTag(prf, out.data, iv, adata, tlen, L);\n if (!w.equal(out.tag, tag2)) {\n throw new sjcl.exception.corrupt(\"ccm: tag doesn't match\");\n }\n return out.data;\n },\n _macAdditionalData: function (prf, adata, iv, tlen, ol, L) {\n var mac, tmp, i, macData = [], w = sjcl.bitArray, xor = w._xor4;\n // mac the flags\n mac = [w.partial(8, (adata.length ? 1 << 6 : 0) | (tlen - 2) << 2 | L - 1)];\n // mac the iv and length\n mac = w.concat(mac, iv);\n mac[3] |= ol;\n mac = prf.encrypt(mac);\n if (adata.length) {\n // mac the associated data. start with its length...\n tmp = w.bitLength(adata) / 8;\n if (tmp <= 0xFEFF) {\n macData = [w.partial(16, tmp)];\n }\n else if (tmp <= 0xFFFFFFFF) {\n macData = w.concat([w.partial(16, 0xFFFE)], [tmp]);\n } // else ...\n // mac the data itself\n macData = w.concat(macData, adata);\n for (i = 0; i < macData.length; i += 4) {\n mac = prf.encrypt(xor(mac, macData.slice(i, i + 4).concat([0, 0, 0])));\n }\n }\n return mac;\n },\n /* Compute the (unencrypted) authentication tag, according to the CCM specification\n * @param {Object} prf The pseudorandom function.\n * @param {bitArray} plaintext The plaintext data.\n * @param {bitArray} iv The initialization value.\n * @param {bitArray} adata The authenticated data.\n * @param {Number} tlen the desired tag length, in bits.\n * @return {bitArray} The tag, but not yet encrypted.\n * @private\n */\n _computeTag: function (prf, plaintext, iv, adata, tlen, L) {\n // compute B[0]\n var mac, i, w = sjcl.bitArray, xor = w._xor4;\n tlen /= 8;\n // check tag length and message length\n if (tlen % 2 || tlen < 4 || tlen > 16) {\n throw new sjcl.exception.invalid(\"ccm: invalid tag length\");\n }\n if (adata.length > 0xFFFFFFFF || plaintext.length > 0xFFFFFFFF) {\n // I don't want to deal with extracting high words from doubles.\n throw new sjcl.exception.bug(\"ccm: can't deal with 4GiB or more data\");\n }\n mac = sjcl.mode.ccm._macAdditionalData(prf, adata, iv, tlen, w.bitLength(plaintext) / 8, L);\n // mac the plaintext\n for (i = 0; i < plaintext.length; i += 4) {\n mac = prf.encrypt(xor(mac, plaintext.slice(i, i + 4).concat([0, 0, 0])));\n }\n return w.clamp(mac, tlen * 8);\n },\n /** CCM CTR mode.\n * Encrypt or decrypt data and tag with the prf in CCM-style CTR mode.\n * May mutate its arguments.\n * @param {Object} prf The PRF.\n * @param {bitArray} data The data to be encrypted or decrypted.\n * @param {bitArray} iv The initialization vector.\n * @param {bitArray} tag The authentication tag.\n * @param {Number} tlen The length of th etag, in bits.\n * @param {Number} L The CCM L value.\n * @return {Object} An object with data and tag, the en/decryption of data and tag values.\n * @private\n */\n _ctrMode: function (prf, data, iv, tag, tlen, L) {\n var enc, i, w = sjcl.bitArray, xor = w._xor4, ctr, l = data.length, bl = w.bitLength(data), n = l / 50, p = n;\n // start the ctr\n ctr = w.concat([w.partial(8, L - 1)], iv).concat([0, 0, 0]).slice(0, 4);\n // en/decrypt the tag\n tag = w.bitSlice(xor(tag, prf.encrypt(ctr)), 0, tlen);\n // en/decrypt the data\n if (!l) {\n return { tag: tag, data: [] };\n }\n for (i = 0; i < l; i += 4) {\n if (i > n) {\n sjcl.mode.ccm._callProgressListener(i / l);\n n += p;\n }\n ctr[3]++;\n enc = prf.encrypt(ctr);\n data[i] ^= enc[0];\n data[i + 1] ^= enc[1];\n data[i + 2] ^= enc[2];\n data[i + 3] ^= enc[3];\n }\n return { tag: tag, data: w.clamp(data, bl) };\n }\n};\n/** @fileOverview HMAC implementation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/** HMAC with the specified hash function.\n * @constructor\n * @param {bitArray} key the key for HMAC.\n * @param {Object} [Hash=sjcl.hash.sha256] The hash function to use.\n */\nsjcl.misc.hmac = function (key, Hash) {\n this._hash = Hash = Hash || sjcl.hash.sha256;\n var exKey = [[], []], i, bs = Hash.prototype.blockSize / 32;\n this._baseHash = [new Hash(), new Hash()];\n if (key.length > bs) {\n key = Hash.hash(key);\n }\n for (i = 0; i < bs; i++) {\n exKey[0][i] = key[i] ^ 0x36363636;\n exKey[1][i] = key[i] ^ 0x5C5C5C5C;\n }\n this._baseHash[0].update(exKey[0]);\n this._baseHash[1].update(exKey[1]);\n this._resultHash = new Hash(this._baseHash[0]);\n};\n/** HMAC with the specified hash function. Also called encrypt since it's a prf.\n * @param {bitArray|String} data The data to mac.\n */\nsjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {\n if (!this._updated) {\n this.update(data);\n return this.digest(data);\n }\n else {\n throw new sjcl.exception.invalid(\"encrypt on already updated hmac called!\");\n }\n};\nsjcl.misc.hmac.prototype.reset = function () {\n this._resultHash = new this._hash(this._baseHash[0]);\n this._updated = false;\n};\nsjcl.misc.hmac.prototype.update = function (data) {\n this._updated = true;\n this._resultHash.update(data);\n};\nsjcl.misc.hmac.prototype.digest = function () {\n var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();\n this.reset();\n return result;\n};\n/** @fileOverview Password-based key-derivation function, version 2.0.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/** Password-Based Key-Derivation Function, version 2.0.\n *\n * Generate keys from passwords using PBKDF2-HMAC-SHA256.\n *\n * This is the method specified by RSA's PKCS #5 standard.\n *\n * @param {bitArray|String} password The password.\n * @param {bitArray|String} salt The salt. Should have lots of entropy.\n * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.\n * @param {Number} [length] The length of the derived key. Defaults to the\n output size of the hash function.\n * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.\n * @return {bitArray} the derived key.\n */\nsjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {\n count = count || 10000;\n if (length < 0 || count < 0) {\n throw new sjcl.exception.invalid(\"invalid params to pbkdf2\");\n }\n if (typeof password === \"string\") {\n password = sjcl.codec.utf8String.toBits(password);\n }\n if (typeof salt === \"string\") {\n salt = sjcl.codec.utf8String.toBits(salt);\n }\n Prff = Prff || sjcl.misc.hmac;\n var prf = new Prff(password), u, ui, i, j, k, out = [], b = sjcl.bitArray;\n for (k = 1; 32 * out.length < (length || 1); k++) {\n u = ui = prf.encrypt(b.concat(salt, [k]));\n for (i = 1; i < count; i++) {\n ui = prf.encrypt(ui);\n for (j = 0; j < ui.length; j++) {\n u[j] ^= ui[j];\n }\n }\n out = out.concat(u);\n }\n if (length) {\n out = b.clamp(out, length);\n }\n return out;\n};\n/** @fileOverview Random number generator.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n * @author Michael Brooks\n * @author Steve Thomas\n */\n/**\n * @class Random number generator\n * @description\n * Use sjcl.random as a singleton for this class!\n *

\n * This random number generator is a derivative of Ferguson and Schneier's\n * generator Fortuna. It collects entropy from various events into several\n * pools, implemented by streaming SHA-256 instances. It differs from\n * ordinary Fortuna in a few ways, though.\n *

\n *\n *

\n * Most importantly, it has an entropy estimator. This is present because\n * there is a strong conflict here between making the generator available\n * as soon as possible, and making sure that it doesn't \"run on empty\".\n * In Fortuna, there is a saved state file, and the system is likely to have\n * time to warm up.\n *

\n *\n *

\n * Second, because users are unlikely to stay on the page for very long,\n * and to speed startup time, the number of pools increases logarithmically:\n * a new pool is created when the previous one is actually used for a reseed.\n * This gives the same asymptotic guarantees as Fortuna, but gives more\n * entropy to early reseeds.\n *

\n *\n *

\n * The entire mechanism here feels pretty klunky. Furthermore, there are\n * several improvements that should be made, including support for\n * dedicated cryptographic functions that may be present in some browsers;\n * state files in local storage; cookies containing randomness; etc. So\n * look for improvements in future versions.\n *

\n * @constructor\n */\nsjcl.prng = function (defaultParanoia) {\n /* private */\n this._pools = [new sjcl.hash.sha256()];\n this._poolEntropy = [0];\n this._reseedCount = 0;\n this._robins = {};\n this._eventId = 0;\n this._collectorIds = {};\n this._collectorIdNext = 0;\n this._strength = 0;\n this._poolStrength = 0;\n this._nextReseed = 0;\n this._key = [0, 0, 0, 0, 0, 0, 0, 0];\n this._counter = [0, 0, 0, 0];\n this._cipher = undefined;\n this._defaultParanoia = defaultParanoia;\n /* event listener stuff */\n this._collectorsStarted = false;\n this._callbacks = { progress: {}, seeded: {} };\n this._callbackI = 0;\n /* constants */\n this._NOT_READY = 0;\n this._READY = 1;\n this._REQUIRES_RESEED = 2;\n this._MAX_WORDS_PER_BURST = 65536;\n this._PARANOIA_LEVELS = [0, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024];\n this._MILLISECONDS_PER_RESEED = 30000;\n this._BITS_PER_RESEED = 80;\n};\nsjcl.prng.prototype = {\n /** Generate several random words, and return them in an array.\n * A word consists of 32 bits (4 bytes)\n * @param {Number} nwords The number of words to generate.\n */\n randomWords: function (nwords, paranoia) {\n var out = [], i, readiness = this.isReady(paranoia), g;\n if (readiness === this._NOT_READY) {\n throw new sjcl.exception.notReady(\"generator isn't seeded\");\n }\n else if (readiness & this._REQUIRES_RESEED) {\n this._reseedFromPools(!(readiness & this._READY));\n }\n for (i = 0; i < nwords; i += 4) {\n if ((i + 1) % this._MAX_WORDS_PER_BURST === 0) {\n this._gate();\n }\n g = this._gen4words();\n out.push(g[0], g[1], g[2], g[3]);\n }\n this._gate();\n return out.slice(0, nwords);\n },\n setDefaultParanoia: function (paranoia, allowZeroParanoia) {\n if (paranoia === 0 && allowZeroParanoia !== \"Setting paranoia=0 will ruin your security; use it only for testing\") {\n throw new sjcl.exception.invalid(\"Setting paranoia=0 will ruin your security; use it only for testing\");\n }\n this._defaultParanoia = paranoia;\n },\n /**\n * Add entropy to the pools.\n * @param data The entropic value. Should be a 32-bit integer, array of 32-bit integers, or string\n * @param {Number} estimatedEntropy The estimated entropy of data, in bits\n * @param {String} source The source of the entropy, eg \"mouse\"\n */\n addEntropy: function (data, estimatedEntropy, source) {\n source = source || \"user\";\n var id, i, tmp, t = (new Date()).valueOf(), robin = this._robins[source], oldReady = this.isReady(), err = 0, objName;\n id = this._collectorIds[source];\n if (id === undefined) {\n id = this._collectorIds[source] = this._collectorIdNext++;\n }\n if (robin === undefined) {\n robin = this._robins[source] = 0;\n }\n this._robins[source] = (this._robins[source] + 1) % this._pools.length;\n switch (typeof (data)) {\n case \"number\":\n if (estimatedEntropy === undefined) {\n estimatedEntropy = 1;\n }\n this._pools[robin].update([id, this._eventId++, 1, estimatedEntropy, t, 1, data | 0]);\n break;\n case \"object\":\n objName = Object.prototype.toString.call(data);\n if (objName === \"[object Uint32Array]\") {\n tmp = [];\n for (i = 0; i < data.length; i++) {\n tmp.push(data[i]);\n }\n data = tmp;\n }\n else {\n if (objName !== \"[object Array]\") {\n err = 1;\n }\n for (i = 0; i < data.length && !err; i++) {\n if (typeof (data[i]) !== \"number\") {\n err = 1;\n }\n }\n }\n if (!err) {\n if (estimatedEntropy === undefined) {\n /* horrible entropy estimator */\n estimatedEntropy = 0;\n for (i = 0; i < data.length; i++) {\n tmp = data[i];\n while (tmp > 0) {\n estimatedEntropy++;\n tmp = tmp >>> 1;\n }\n }\n }\n this._pools[robin].update([id, this._eventId++, 2, estimatedEntropy, t, data.length].concat(data));\n }\n break;\n case \"string\":\n if (estimatedEntropy === undefined) {\n /* English text has just over 1 bit per character of entropy.\n * But this might be HTML or something, and have far less\n * entropy than English... Oh well, let's just say one bit.\n */\n estimatedEntropy = data.length;\n }\n this._pools[robin].update([id, this._eventId++, 3, estimatedEntropy, t, data.length]);\n this._pools[robin].update(data);\n break;\n default:\n err = 1;\n }\n if (err) {\n throw new sjcl.exception.bug(\"random: addEntropy only supports number, array of numbers or string\");\n }\n /* record the new strength */\n this._poolEntropy[robin] += estimatedEntropy;\n this._poolStrength += estimatedEntropy;\n /* fire off events */\n if (oldReady === this._NOT_READY) {\n if (this.isReady() !== this._NOT_READY) {\n this._fireEvent(\"seeded\", Math.max(this._strength, this._poolStrength));\n }\n this._fireEvent(\"progress\", this.getProgress());\n }\n },\n /** Is the generator ready? */\n isReady: function (paranoia) {\n var entropyRequired = this._PARANOIA_LEVELS[(paranoia !== undefined) ? paranoia : this._defaultParanoia];\n if (this._strength && this._strength >= entropyRequired) {\n return (this._poolEntropy[0] > this._BITS_PER_RESEED && (new Date()).valueOf() > this._nextReseed) ?\n this._REQUIRES_RESEED | this._READY :\n this._READY;\n }\n else {\n return (this._poolStrength >= entropyRequired) ?\n this._REQUIRES_RESEED | this._NOT_READY :\n this._NOT_READY;\n }\n },\n /** Get the generator's progress toward readiness, as a fraction */\n getProgress: function (paranoia) {\n var entropyRequired = this._PARANOIA_LEVELS[paranoia ? paranoia : this._defaultParanoia];\n if (this._strength >= entropyRequired) {\n return 1.0;\n }\n else {\n return (this._poolStrength > entropyRequired) ?\n 1.0 :\n this._poolStrength / entropyRequired;\n }\n },\n /** start the built-in entropy collectors */\n startCollectors: function () {\n if (this._collectorsStarted) {\n return;\n }\n this._eventListener = {\n loadTimeCollector: this._bind(this._loadTimeCollector),\n mouseCollector: this._bind(this._mouseCollector),\n keyboardCollector: this._bind(this._keyboardCollector),\n accelerometerCollector: this._bind(this._accelerometerCollector),\n touchCollector: this._bind(this._touchCollector)\n };\n if (window.addEventListener) {\n window.addEventListener(\"load\", this._eventListener.loadTimeCollector, false);\n window.addEventListener(\"mousemove\", this._eventListener.mouseCollector, false);\n window.addEventListener(\"keypress\", this._eventListener.keyboardCollector, false);\n window.addEventListener(\"devicemotion\", this._eventListener.accelerometerCollector, false);\n window.addEventListener(\"touchmove\", this._eventListener.touchCollector, false);\n }\n else if (document.attachEvent) {\n document.attachEvent(\"onload\", this._eventListener.loadTimeCollector);\n document.attachEvent(\"onmousemove\", this._eventListener.mouseCollector);\n document.attachEvent(\"keypress\", this._eventListener.keyboardCollector);\n }\n else {\n throw new sjcl.exception.bug(\"can't attach event\");\n }\n this._collectorsStarted = true;\n },\n /** stop the built-in entropy collectors */\n stopCollectors: function () {\n if (!this._collectorsStarted) {\n return;\n }\n if (window.removeEventListener) {\n window.removeEventListener(\"load\", this._eventListener.loadTimeCollector, false);\n window.removeEventListener(\"mousemove\", this._eventListener.mouseCollector, false);\n window.removeEventListener(\"keypress\", this._eventListener.keyboardCollector, false);\n window.removeEventListener(\"devicemotion\", this._eventListener.accelerometerCollector, false);\n window.removeEventListener(\"touchmove\", this._eventListener.touchCollector, false);\n }\n else if (document.detachEvent) {\n document.detachEvent(\"onload\", this._eventListener.loadTimeCollector);\n document.detachEvent(\"onmousemove\", this._eventListener.mouseCollector);\n document.detachEvent(\"keypress\", this._eventListener.keyboardCollector);\n }\n this._collectorsStarted = false;\n },\n /* use a cookie to store entropy.\n useCookie: function (all_cookies) {\n throw new sjcl.exception.bug(\"random: useCookie is unimplemented\");\n },*/\n /** add an event listener for progress or seeded-ness. */\n addEventListener: function (name, callback) {\n this._callbacks[name][this._callbackI++] = callback;\n },\n /** remove an event listener for progress or seeded-ness */\n removeEventListener: function (name, cb) {\n var i, j, cbs = this._callbacks[name], jsTemp = [];\n /* I'm not sure if this is necessary; in C++, iterating over a\n * collection and modifying it at the same time is a no-no.\n */\n for (j in cbs) {\n if (cbs.hasOwnProperty(j) && cbs[j] === cb) {\n jsTemp.push(j);\n }\n }\n for (i = 0; i < jsTemp.length; i++) {\n j = jsTemp[i];\n delete cbs[j];\n }\n },\n _bind: function (func) {\n var that = this;\n return function () {\n func.apply(that, arguments);\n };\n },\n /** Generate 4 random words, no reseed, no gate.\n * @private\n */\n _gen4words: function () {\n for (var i = 0; i < 4; i++) {\n this._counter[i] = this._counter[i] + 1 | 0;\n if (this._counter[i]) {\n break;\n }\n }\n return this._cipher.encrypt(this._counter);\n },\n /* Rekey the AES instance with itself after a request, or every _MAX_WORDS_PER_BURST words.\n * @private\n */\n _gate: function () {\n this._key = this._gen4words().concat(this._gen4words());\n this._cipher = new sjcl.cipher.aes(this._key);\n },\n /** Reseed the generator with the given words\n * @private\n */\n _reseed: function (seedWords) {\n this._key = sjcl.hash.sha256.hash(this._key.concat(seedWords));\n this._cipher = new sjcl.cipher.aes(this._key);\n for (var i = 0; i < 4; i++) {\n this._counter[i] = this._counter[i] + 1 | 0;\n if (this._counter[i]) {\n break;\n }\n }\n },\n /** reseed the data from the entropy pools\n * @param full If set, use all the entropy pools in the reseed.\n */\n _reseedFromPools: function (full) {\n var reseedData = [], strength = 0, i;\n this._nextReseed = reseedData[0] =\n (new Date()).valueOf() + this._MILLISECONDS_PER_RESEED;\n for (i = 0; i < 16; i++) {\n /* On some browsers, this is cryptographically random. So we might\n * as well toss it in the pot and stir...\n */\n reseedData.push(Math.random() * 0x100000000 | 0);\n }\n for (i = 0; i < this._pools.length; i++) {\n reseedData = reseedData.concat(this._pools[i].finalize());\n strength += this._poolEntropy[i];\n this._poolEntropy[i] = 0;\n if (!full && (this._reseedCount & (1 << i))) {\n break;\n }\n }\n /* if we used the last pool, push a new one onto the stack */\n if (this._reseedCount >= 1 << this._pools.length) {\n this._pools.push(new sjcl.hash.sha256());\n this._poolEntropy.push(0);\n }\n /* how strong was this reseed? */\n this._poolStrength -= strength;\n if (strength > this._strength) {\n this._strength = strength;\n }\n this._reseedCount++;\n this._reseed(reseedData);\n },\n _keyboardCollector: function () {\n this._addCurrentTimeToEntropy(1);\n },\n _mouseCollector: function (ev) {\n var x, y;\n try {\n x = ev.x || ev.clientX || ev.offsetX || 0;\n y = ev.y || ev.clientY || ev.offsetY || 0;\n }\n catch (err) {\n // Event originated from a secure element. No mouse position available.\n x = 0;\n y = 0;\n }\n if (x != 0 && y != 0) {\n this.addEntropy([x, y], 2, \"mouse\");\n }\n this._addCurrentTimeToEntropy(0);\n },\n _touchCollector: function (ev) {\n var touch = ev.touches[0] || ev.changedTouches[0];\n var x = touch.pageX || touch.clientX, y = touch.pageY || touch.clientY;\n this.addEntropy([x, y], 1, \"touch\");\n this._addCurrentTimeToEntropy(0);\n },\n _loadTimeCollector: function () {\n this._addCurrentTimeToEntropy(2);\n },\n _addCurrentTimeToEntropy: function (estimatedEntropy) {\n if (typeof window !== 'undefined' && window.performance && typeof window.performance.now === \"function\") {\n //how much entropy do we want to add here?\n this.addEntropy(window.performance.now(), estimatedEntropy, \"loadtime\");\n }\n else {\n this.addEntropy((new Date()).valueOf(), estimatedEntropy, \"loadtime\");\n }\n },\n _accelerometerCollector: function (ev) {\n var ac = ev.accelerationIncludingGravity.x || ev.accelerationIncludingGravity.y || ev.accelerationIncludingGravity.z;\n if (window.orientation) {\n var or = window.orientation;\n if (typeof or === \"number\") {\n this.addEntropy(or, 1, \"accelerometer\");\n }\n }\n if (ac) {\n this.addEntropy(ac, 2, \"accelerometer\");\n }\n this._addCurrentTimeToEntropy(0);\n },\n _fireEvent: function (name, arg) {\n var j, cbs = sjcl.random._callbacks[name], cbsTemp = [];\n /* TODO: there is a race condition between removing collectors and firing them */\n /* I'm not sure if this is necessary; in C++, iterating over a\n * collection and modifying it at the same time is a no-no.\n */\n for (j in cbs) {\n if (cbs.hasOwnProperty(j)) {\n cbsTemp.push(cbs[j]);\n }\n }\n for (j = 0; j < cbsTemp.length; j++) {\n cbsTemp[j](arg);\n }\n }\n};\n/** an instance for the prng.\n* @see sjcl.prng\n*/\nsjcl.random = new sjcl.prng(6);\n(function () {\n // function for getting nodejs crypto module. catches and ignores errors.\n function getCryptoModule() {\n try {\n return require('crypto');\n }\n catch (e) {\n return null;\n }\n }\n try {\n var buf, crypt, ab;\n // get cryptographically strong entropy depending on runtime environment\n if (typeof module !== 'undefined' && module.exports && (crypt = getCryptoModule()) && crypt.randomBytes) {\n buf = crypt.randomBytes(1024 / 8);\n buf = new Uint32Array(new Uint8Array(buf).buffer);\n sjcl.random.addEntropy(buf, 1024, \"crypto.randomBytes\");\n }\n else if (typeof window !== 'undefined' && typeof Uint32Array !== 'undefined') {\n ab = new Uint32Array(32);\n if (window.crypto && window.crypto.getRandomValues) {\n window.crypto.getRandomValues(ab);\n }\n else if (window.msCrypto && window.msCrypto.getRandomValues) {\n window.msCrypto.getRandomValues(ab);\n }\n else {\n return;\n }\n // get cryptographically strong entropy in Webkit\n sjcl.random.addEntropy(ab, 1024, \"crypto.getRandomValues\");\n }\n else {\n // no getRandomValues :-(\n }\n }\n catch (e) {\n if (typeof window !== 'undefined' && window.console) {\n console.log(\"There was an error collecting entropy from the browser:\");\n console.log(e);\n //we do not want the library to fail due to randomness not being maintained.\n }\n }\n}());\n/** @fileOverview Convenience functions centered around JSON encapsulation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n/**\n * JSON encapsulation\n * @namespace\n */\nsjcl.json = {\n /** Default values for encryption */\n defaults: { v: 1, iter: 10000, ks: 128, ts: 64, mode: \"ccm\", adata: \"\", cipher: \"aes\" },\n /** Simple encryption function.\n * @param {String|bitArray} password The password or key.\n * @param {String} plaintext The data to encrypt.\n * @param {Object} [params] The parameters including tag, iv and salt.\n * @param {Object} [rp] A returned version with filled-in parameters.\n * @return {Object} The cipher raw data.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n */\n _encrypt: function (password, plaintext, params, rp) {\n params = params || {};\n rp = rp || {};\n var j = sjcl.json, p = j._add({ iv: sjcl.random.randomWords(4, 0) }, j.defaults), tmp, prp, adata;\n j._add(p, params);\n adata = p.adata;\n if (typeof p.salt === \"string\") {\n p.salt = sjcl.codec.base64.toBits(p.salt);\n }\n if (typeof p.iv === \"string\") {\n p.iv = sjcl.codec.base64.toBits(p.iv);\n }\n if (!sjcl.mode[p.mode] ||\n !sjcl.cipher[p.cipher] ||\n (typeof password === \"string\" && p.iter <= 100) ||\n (p.ts !== 64 && p.ts !== 96 && p.ts !== 128) ||\n (p.ks !== 128 && p.ks !== 192 && p.ks !== 256) ||\n (p.iv.length < 2 || p.iv.length > 4)) {\n throw new sjcl.exception.invalid(\"json encrypt: invalid parameters\");\n }\n if (typeof password === \"string\") {\n tmp = sjcl.misc.cachedPbkdf2(password, p);\n password = tmp.key.slice(0, p.ks / 32);\n p.salt = tmp.salt;\n }\n else if (sjcl.ecc && password instanceof sjcl.ecc.elGamal.publicKey) {\n tmp = password.kem();\n p.kemtag = tmp.tag;\n password = tmp.key.slice(0, p.ks / 32);\n }\n if (typeof plaintext === \"string\") {\n plaintext = sjcl.codec.utf8String.toBits(plaintext);\n }\n if (typeof adata === \"string\") {\n p.adata = adata = sjcl.codec.utf8String.toBits(adata);\n }\n prp = new sjcl.cipher[p.cipher](password);\n /* return the json data */\n j._add(rp, p);\n rp.key = password;\n /* do the encryption */\n if (p.mode === \"ccm\" && sjcl.arrayBuffer && sjcl.arrayBuffer.ccm && plaintext instanceof ArrayBuffer) {\n p.ct = sjcl.arrayBuffer.ccm.encrypt(prp, plaintext, p.iv, adata, p.ts);\n }\n else {\n p.ct = sjcl.mode[p.mode].encrypt(prp, plaintext, p.iv, adata, p.ts);\n }\n //return j.encode(j._subtract(p, j.defaults));\n return p;\n },\n /** Simple encryption function.\n * @param {String|bitArray} password The password or key.\n * @param {String} plaintext The data to encrypt.\n * @param {Object} [params] The parameters including tag, iv and salt.\n * @param {Object} [rp] A returned version with filled-in parameters.\n * @return {String} The ciphertext serialized data.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n */\n encrypt: function (password, plaintext, params, rp) {\n var j = sjcl.json, p = j._encrypt.apply(j, arguments);\n return j.encode(p);\n },\n /** Simple decryption function.\n * @param {String|bitArray} password The password or key.\n * @param {Object} ciphertext The cipher raw data to decrypt.\n * @param {Object} [params] Additional non-default parameters.\n * @param {Object} [rp] A returned object with filled parameters.\n * @return {String} The plaintext.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n * @throws {sjcl.exception.corrupt} if the ciphertext is corrupt.\n */\n _decrypt: function (password, ciphertext, params, rp) {\n params = params || {};\n rp = rp || {};\n var j = sjcl.json, p = j._add(j._add(j._add({}, j.defaults), ciphertext), params, true), ct, tmp, prp, adata = p.adata;\n if (typeof p.salt === \"string\") {\n p.salt = sjcl.codec.base64.toBits(p.salt);\n }\n if (typeof p.iv === \"string\") {\n p.iv = sjcl.codec.base64.toBits(p.iv);\n }\n if (!sjcl.mode[p.mode] ||\n !sjcl.cipher[p.cipher] ||\n (typeof password === \"string\" && p.iter <= 100) ||\n (p.ts !== 64 && p.ts !== 96 && p.ts !== 128) ||\n (p.ks !== 128 && p.ks !== 192 && p.ks !== 256) ||\n (!p.iv) ||\n (p.iv.length < 2 || p.iv.length > 4)) {\n throw new sjcl.exception.invalid(\"json decrypt: invalid parameters\");\n }\n if (typeof password === \"string\") {\n tmp = sjcl.misc.cachedPbkdf2(password, p);\n password = tmp.key.slice(0, p.ks / 32);\n p.salt = tmp.salt;\n }\n else if (sjcl.ecc && password instanceof sjcl.ecc.elGamal.secretKey) {\n password = password.unkem(sjcl.codec.base64.toBits(p.kemtag)).slice(0, p.ks / 32);\n }\n if (typeof adata === \"string\") {\n adata = sjcl.codec.utf8String.toBits(adata);\n }\n prp = new sjcl.cipher[p.cipher](password);\n /* do the decryption */\n if (p.mode === \"ccm\" && sjcl.arrayBuffer && sjcl.arrayBuffer.ccm && p.ct instanceof ArrayBuffer) {\n ct = sjcl.arrayBuffer.ccm.decrypt(prp, p.ct, p.iv, p.tag, adata, p.ts);\n }\n else {\n ct = sjcl.mode[p.mode].decrypt(prp, p.ct, p.iv, adata, p.ts);\n }\n /* return the json data */\n j._add(rp, p);\n rp.key = password;\n if (params.raw === 1) {\n return ct;\n }\n else {\n return sjcl.codec.utf8String.fromBits(ct);\n }\n },\n /** Simple decryption function.\n * @param {String|bitArray} password The password or key.\n * @param {String} ciphertext The ciphertext to decrypt.\n * @param {Object} [params] Additional non-default parameters.\n * @param {Object} [rp] A returned object with filled parameters.\n * @return {String} The plaintext.\n * @throws {sjcl.exception.invalid} if a parameter is invalid.\n * @throws {sjcl.exception.corrupt} if the ciphertext is corrupt.\n */\n decrypt: function (password, ciphertext, params, rp) {\n var j = sjcl.json;\n return j._decrypt(password, j.decode(ciphertext), params, rp);\n },\n /** Encode a flat structure into a JSON string.\n * @param {Object} obj The structure to encode.\n * @return {String} A JSON string.\n * @throws {sjcl.exception.invalid} if obj has a non-alphanumeric property.\n * @throws {sjcl.exception.bug} if a parameter has an unsupported type.\n */\n encode: function (obj) {\n var i, out = '{', comma = '';\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (!i.match(/^[a-z0-9]+$/i)) {\n throw new sjcl.exception.invalid(\"json encode: invalid property name\");\n }\n out += comma + '\"' + i + '\":';\n comma = ',';\n switch (typeof obj[i]) {\n case 'number':\n case 'boolean':\n out += obj[i];\n break;\n case 'string':\n out += '\"' + escape(obj[i]) + '\"';\n break;\n case 'object':\n out += '\"' + sjcl.codec.base64.fromBits(obj[i], 0) + '\"';\n break;\n default:\n throw new sjcl.exception.bug(\"json encode: unsupported type\");\n }\n }\n }\n return out + '}';\n },\n /** Decode a simple (flat) JSON string into a structure. The ciphertext,\n * adata, salt and iv will be base64-decoded.\n * @param {String} str The string.\n * @return {Object} The decoded structure.\n * @throws {sjcl.exception.invalid} if str isn't (simple) JSON.\n */\n decode: function (str) {\n str = str.replace(/\\s/g, '');\n if (!str.match(/^\\{.*\\}$/)) {\n throw new sjcl.exception.invalid(\"json decode: this isn't json!\");\n }\n var a = str.replace(/^\\{|\\}$/g, '').split(/,/), out = {}, i, m;\n for (i = 0; i < a.length; i++) {\n if (!(m = a[i].match(/^\\s*(?:([\"']?)([a-z][a-z0-9]*)\\1)\\s*:\\s*(?:(-?\\d+)|\"([a-z0-9+\\/%*_.@=\\-]*)\"|(true|false))$/i))) {\n throw new sjcl.exception.invalid(\"json decode: this isn't json!\");\n }\n if (m[3] != null) {\n out[m[2]] = parseInt(m[3], 10);\n }\n else if (m[4] != null) {\n out[m[2]] = m[2].match(/^(ct|adata|salt|iv)$/) ? sjcl.codec.base64.toBits(m[4]) : unescape(m[4]);\n }\n else if (m[5] != null) {\n out[m[2]] = m[5] === 'true';\n }\n }\n return out;\n },\n /** Insert all elements of src into target, modifying and returning target.\n * @param {Object} target The object to be modified.\n * @param {Object} src The object to pull data from.\n * @param {boolean} [requireSame=false] If true, throw an exception if any field of target differs from corresponding field of src.\n * @return {Object} target.\n * @private\n */\n _add: function (target, src, requireSame) {\n if (target === undefined) {\n target = {};\n }\n if (src === undefined) {\n return target;\n }\n var i;\n for (i in src) {\n if (src.hasOwnProperty(i)) {\n if (requireSame && target[i] !== undefined && target[i] !== src[i]) {\n throw new sjcl.exception.invalid(\"required parameter overridden\");\n }\n target[i] = src[i];\n }\n }\n return target;\n },\n /** Remove all elements of minus from plus. Does not modify plus.\n * @private\n */\n _subtract: function (plus, minus) {\n var out = {}, i;\n for (i in plus) {\n if (plus.hasOwnProperty(i) && plus[i] !== minus[i]) {\n out[i] = plus[i];\n }\n }\n return out;\n },\n /** Return only the specified elements of src.\n * @private\n */\n _filter: function (src, filter) {\n var out = {}, i;\n for (i = 0; i < filter.length; i++) {\n if (src[filter[i]] !== undefined) {\n out[filter[i]] = src[filter[i]];\n }\n }\n return out;\n }\n};\n/** Simple encryption function; convenient shorthand for sjcl.json.encrypt.\n * @param {String|bitArray} password The password or key.\n * @param {String} plaintext The data to encrypt.\n * @param {Object} [params] The parameters including tag, iv and salt.\n * @param {Object} [rp] A returned version with filled-in parameters.\n * @return {String} The ciphertext.\n */\nsjcl.encrypt = sjcl.json.encrypt;\n/** Simple decryption function; convenient shorthand for sjcl.json.decrypt.\n * @param {String|bitArray} password The password or key.\n * @param {String} ciphertext The ciphertext to decrypt.\n * @param {Object} [params] Additional non-default parameters.\n * @param {Object} [rp] A returned object with filled parameters.\n * @return {String} The plaintext.\n */\nsjcl.decrypt = sjcl.json.decrypt;\n/** The cache for cachedPbkdf2.\n * @private\n */\nsjcl.misc._pbkdf2Cache = {};\n/** Cached PBKDF2 key derivation.\n * @param {String} password The password.\n * @param {Object} [obj] The derivation params (iteration count and optional salt).\n * @return {Object} The derived data in key, the salt in salt.\n */\nsjcl.misc.cachedPbkdf2 = function (password, obj) {\n var cache = sjcl.misc._pbkdf2Cache, c, cp, str, salt, iter;\n obj = obj || {};\n iter = obj.iter || 1000;\n /* open the cache for this password and iteration count */\n cp = cache[password] = cache[password] || {};\n c = cp[iter] = cp[iter] || { firstSalt: (obj.salt && obj.salt.length) ?\n obj.salt.slice(0) : sjcl.random.randomWords(2, 0) };\n salt = (obj.salt === undefined) ? c.firstSalt : obj.salt;\n c[salt] = c[salt] || sjcl.misc.pbkdf2(password, salt, obj.iter);\n return { key: c[salt].slice(0), salt: salt.slice(0) };\n};\n// Thanks to Colin McRae and Jonathan Burns of ionic security\n// for reporting and fixing two bugs in this file!\n/**\n * Constructs a new bignum from another bignum, a number or a hex string.\n * @constructor\n */\nsjcl.bn = function (it) {\n this.initWith(it);\n};\nsjcl.bn.prototype = {\n radix: 24,\n maxMul: 8,\n _class: sjcl.bn,\n copy: function () {\n return new this._class(this);\n },\n /**\n * Initializes this with it, either as a bn, a number, or a hex string.\n */\n initWith: function (it) {\n var i = 0, k;\n switch (typeof it) {\n case \"object\":\n this.limbs = it.limbs.slice(0);\n break;\n case \"number\":\n this.limbs = [it];\n this.normalize();\n break;\n case \"string\":\n it = it.replace(/^0x/, '');\n this.limbs = [];\n // hack\n k = this.radix / 4;\n for (i = 0; i < it.length; i += k) {\n this.limbs.push(parseInt(it.substring(Math.max(it.length - i - k, 0), it.length - i), 16));\n }\n break;\n default:\n this.limbs = [0];\n }\n return this;\n },\n /**\n * Returns true if \"this\" and \"that\" are equal. Calls fullReduce().\n * Equality test is in constant time.\n */\n equals: function (that) {\n if (typeof that === \"number\") {\n that = new this._class(that);\n }\n var difference = 0, i;\n this.fullReduce();\n that.fullReduce();\n for (i = 0; i < this.limbs.length || i < that.limbs.length; i++) {\n difference |= this.getLimb(i) ^ that.getLimb(i);\n }\n return (difference === 0);\n },\n /**\n * Get the i'th limb of this, zero if i is too large.\n */\n getLimb: function (i) {\n return (i >= this.limbs.length) ? 0 : this.limbs[i];\n },\n /**\n * Constant time comparison function.\n * Returns 1 if this >= that, or zero otherwise.\n */\n greaterEquals: function (that) {\n if (typeof that === \"number\") {\n that = new this._class(that);\n }\n var less = 0, greater = 0, i, a, b;\n i = Math.max(this.limbs.length, that.limbs.length) - 1;\n for (; i >= 0; i--) {\n a = this.getLimb(i);\n b = that.getLimb(i);\n greater |= (b - a) & ~less;\n less |= (a - b) & ~greater;\n }\n return (greater | ~less) >>> 31;\n },\n /**\n * Convert to a hex string.\n */\n toString: function () {\n this.fullReduce();\n var out = \"\", i, s, l = this.limbs;\n for (i = 0; i < this.limbs.length; i++) {\n s = l[i].toString(16);\n while (i < this.limbs.length - 1 && s.length < 6) {\n s = \"0\" + s;\n }\n out = s + out;\n }\n return \"0x\" + out;\n },\n /** this += that. Does not normalize. */\n addM: function (that) {\n if (typeof (that) !== \"object\") {\n that = new this._class(that);\n }\n var i, l = this.limbs, ll = that.limbs;\n for (i = l.length; i < ll.length; i++) {\n l[i] = 0;\n }\n for (i = 0; i < ll.length; i++) {\n l[i] += ll[i];\n }\n return this;\n },\n /** this *= 2. Requires normalized; ends up normalized. */\n doubleM: function () {\n var i, carry = 0, tmp, r = this.radix, m = this.radixMask, l = this.limbs;\n for (i = 0; i < l.length; i++) {\n tmp = l[i];\n tmp = tmp + tmp + carry;\n l[i] = tmp & m;\n carry = tmp >> r;\n }\n if (carry) {\n l.push(carry);\n }\n return this;\n },\n /** this /= 2, rounded down. Requires normalized; ends up normalized. */\n halveM: function () {\n var i, carry = 0, tmp, r = this.radix, l = this.limbs;\n for (i = l.length - 1; i >= 0; i--) {\n tmp = l[i];\n l[i] = (tmp + carry) >> 1;\n carry = (tmp & 1) << r;\n }\n if (!l[l.length - 1]) {\n l.pop();\n }\n return this;\n },\n /** this -= that. Does not normalize. */\n subM: function (that) {\n if (typeof (that) !== \"object\") {\n that = new this._class(that);\n }\n var i, l = this.limbs, ll = that.limbs;\n for (i = l.length; i < ll.length; i++) {\n l[i] = 0;\n }\n for (i = 0; i < ll.length; i++) {\n l[i] -= ll[i];\n }\n return this;\n },\n mod: function (that) {\n var neg = !this.greaterEquals(new sjcl.bn(0));\n that = new sjcl.bn(that).normalize(); // copy before we begin\n var out = new sjcl.bn(this).normalize(), ci = 0;\n if (neg)\n out = (new sjcl.bn(0)).subM(out).normalize();\n for (; out.greaterEquals(that); ci++) {\n that.doubleM();\n }\n if (neg)\n out = that.sub(out).normalize();\n for (; ci > 0; ci--) {\n that.halveM();\n if (out.greaterEquals(that)) {\n out.subM(that).normalize();\n }\n }\n return out.trim();\n },\n /** return inverse mod prime p. p must be odd. Binary extended Euclidean algorithm mod p. */\n inverseMod: function (p) {\n var a = new sjcl.bn(1), b = new sjcl.bn(0), x = new sjcl.bn(this), y = new sjcl.bn(p), tmp, i, nz = 1;\n if (!(p.limbs[0] & 1)) {\n throw (new sjcl.exception.invalid(\"inverseMod: p must be odd\"));\n }\n // invariant: y is odd\n do {\n if (x.limbs[0] & 1) {\n if (!x.greaterEquals(y)) {\n // x < y; swap everything\n tmp = x;\n x = y;\n y = tmp;\n tmp = a;\n a = b;\n b = tmp;\n }\n x.subM(y);\n x.normalize();\n if (!a.greaterEquals(b)) {\n a.addM(p);\n }\n a.subM(b);\n }\n // cut everything in half\n x.halveM();\n if (a.limbs[0] & 1) {\n a.addM(p);\n }\n a.normalize();\n a.halveM();\n // check for termination: x ?= 0\n for (i = nz = 0; i < x.limbs.length; i++) {\n nz |= x.limbs[i];\n }\n } while (nz);\n if (!y.equals(1)) {\n throw (new sjcl.exception.invalid(\"inverseMod: p and x must be relatively prime\"));\n }\n return b;\n },\n /** this + that. Does not normalize. */\n add: function (that) {\n return this.copy().addM(that);\n },\n /** this - that. Does not normalize. */\n sub: function (that) {\n return this.copy().subM(that);\n },\n /** this * that. Normalizes and reduces. */\n mul: function (that) {\n if (typeof (that) === \"number\") {\n that = new this._class(that);\n }\n else {\n that.normalize();\n }\n this.normalize();\n var i, j, a = this.limbs, b = that.limbs, al = a.length, bl = b.length, out = new this._class(), c = out.limbs, ai, ii = this.maxMul;\n for (i = 0; i < this.limbs.length + that.limbs.length + 1; i++) {\n c[i] = 0;\n }\n for (i = 0; i < al; i++) {\n ai = a[i];\n for (j = 0; j < bl; j++) {\n c[i + j] += ai * b[j];\n }\n if (!--ii) {\n ii = this.maxMul;\n out.cnormalize();\n }\n }\n return out.cnormalize().reduce();\n },\n /** this ^ 2. Normalizes and reduces. */\n square: function () {\n return this.mul(this);\n },\n /** this ^ n. Uses square-and-multiply. Normalizes and reduces. */\n power: function (l) {\n l = new sjcl.bn(l).normalize().trim().limbs;\n var i, j, out = new this._class(1), pow = this;\n for (i = 0; i < l.length; i++) {\n for (j = 0; j < this.radix; j++) {\n if (l[i] & (1 << j)) {\n out = out.mul(pow);\n }\n if (i == (l.length - 1) && l[i] >> (j + 1) == 0) {\n break;\n }\n pow = pow.square();\n }\n }\n return out;\n },\n /** this * that mod N */\n mulmod: function (that, N) {\n return this.mod(N).mul(that.mod(N)).mod(N);\n },\n /** this ^ x mod N */\n powermod: function (x, N) {\n x = new sjcl.bn(x);\n N = new sjcl.bn(N);\n // Jump to montpowermod if possible.\n if ((N.limbs[0] & 1) == 1) {\n var montOut = this.montpowermod(x, N);\n if (montOut != false) {\n return montOut;\n } // else go to slow powermod\n }\n var i, j, l = x.normalize().trim().limbs, out = new this._class(1), pow = this;\n for (i = 0; i < l.length; i++) {\n for (j = 0; j < this.radix; j++) {\n if (l[i] & (1 << j)) {\n out = out.mulmod(pow, N);\n }\n if (i == (l.length - 1) && l[i] >> (j + 1) == 0) {\n break;\n }\n pow = pow.mulmod(pow, N);\n }\n }\n return out;\n },\n /** this ^ x mod N with Montomery reduction */\n montpowermod: function (x, N) {\n x = new sjcl.bn(x).normalize().trim();\n N = new sjcl.bn(N);\n var i, j, radix = this.radix, out = new this._class(1), pow = this.copy();\n // Generate R as a cap of N.\n var R, s, wind, bitsize = x.bitLength();\n R = new sjcl.bn({\n limbs: N.copy().normalize().trim().limbs.map(function () { return 0; })\n });\n for (s = this.radix; s > 0; s--) {\n if (((N.limbs[N.limbs.length - 1] >> s) & 1) == 1) {\n R.limbs[R.limbs.length - 1] = 1 << s;\n break;\n }\n }\n // Calculate window size as a function of the exponent's size.\n if (bitsize == 0) {\n return this;\n }\n else if (bitsize < 18) {\n wind = 1;\n }\n else if (bitsize < 48) {\n wind = 3;\n }\n else if (bitsize < 144) {\n wind = 4;\n }\n else if (bitsize < 768) {\n wind = 5;\n }\n else {\n wind = 6;\n }\n // Find R' and N' such that R * R' - N * N' = 1.\n var RR = R.copy(), NN = N.copy(), RP = new sjcl.bn(1), NP = new sjcl.bn(0), RT = R.copy();\n while (RT.greaterEquals(1)) {\n RT.halveM();\n if ((RP.limbs[0] & 1) == 0) {\n RP.halveM();\n NP.halveM();\n }\n else {\n RP.addM(NN);\n RP.halveM();\n NP.halveM();\n NP.addM(RR);\n }\n }\n RP = RP.normalize();\n NP = NP.normalize();\n RR.doubleM();\n var R2 = RR.mulmod(RR, N);\n // Check whether the invariant holds.\n // If it doesn't, we can't use Montgomery reduction on this modulus.\n if (!RR.mul(RP).sub(N.mul(NP)).equals(1)) {\n return false;\n }\n var montIn = function (c) { return montMul(c, R2); }, montMul = function (a, b) {\n // Standard Montgomery reduction\n var k, ab, right, abBar, mask = (1 << (s + 1)) - 1;\n ab = a.mul(b);\n right = ab.mul(NP);\n right.limbs = right.limbs.slice(0, R.limbs.length);\n if (right.limbs.length == R.limbs.length) {\n right.limbs[R.limbs.length - 1] &= mask;\n }\n right = right.mul(N);\n abBar = ab.add(right).normalize().trim();\n abBar.limbs = abBar.limbs.slice(R.limbs.length - 1);\n // Division. Equivelent to calling *.halveM() s times.\n for (k = 0; k < abBar.limbs.length; k++) {\n if (k > 0) {\n abBar.limbs[k - 1] |= (abBar.limbs[k] & mask) << (radix - s - 1);\n }\n abBar.limbs[k] = abBar.limbs[k] >> (s + 1);\n }\n if (abBar.greaterEquals(N)) {\n abBar.subM(N);\n }\n return abBar;\n }, montOut = function (c) { return montMul(c, 1); };\n pow = montIn(pow);\n out = montIn(out);\n // Sliding-Window Exponentiation (HAC 14.85)\n var h, precomp = {}, cap = (1 << (wind - 1)) - 1;\n precomp[1] = pow.copy();\n precomp[2] = montMul(pow, pow);\n for (h = 1; h <= cap; h++) {\n precomp[(2 * h) + 1] = montMul(precomp[(2 * h) - 1], precomp[2]);\n }\n var getBit = function (exp, i) {\n var off = i % exp.radix;\n return (exp.limbs[Math.floor(i / exp.radix)] & (1 << off)) >> off;\n };\n for (i = x.bitLength() - 1; i >= 0;) {\n if (getBit(x, i) == 0) {\n // If the next bit is zero:\n // Square, move forward one bit.\n out = montMul(out, out);\n i = i - 1;\n }\n else {\n // If the next bit is one:\n // Find the longest sequence of bits after this one, less than `wind`\n // bits long, that ends with a 1. Convert the sequence into an\n // integer and look up the pre-computed value to add.\n var l = i - wind + 1;\n while (getBit(x, l) == 0) {\n l++;\n }\n var indx = 0;\n for (j = l; j <= i; j++) {\n indx += getBit(x, j) << (j - l);\n out = montMul(out, out);\n }\n out = montMul(out, precomp[indx]);\n i = l - 1;\n }\n }\n return montOut(out);\n },\n trim: function () {\n var l = this.limbs, p;\n do {\n p = l.pop();\n } while (l.length && p === 0);\n l.push(p);\n return this;\n },\n /** Reduce mod a modulus. Stubbed for subclassing. */\n reduce: function () {\n return this;\n },\n /** Reduce and normalize. */\n fullReduce: function () {\n return this.normalize();\n },\n /** Propagate carries. */\n normalize: function () {\n var carry = 0, i, pv = this.placeVal, ipv = this.ipv, l, m, limbs = this.limbs, ll = limbs.length, mask = this.radixMask;\n for (i = 0; i < ll || (carry !== 0 && carry !== -1); i++) {\n l = (limbs[i] || 0) + carry;\n m = limbs[i] = l & mask;\n carry = (l - m) * ipv;\n }\n if (carry === -1) {\n limbs[i - 1] -= pv;\n }\n this.trim();\n return this;\n },\n /** Constant-time normalize. Does not allocate additional space. */\n cnormalize: function () {\n var carry = 0, i, ipv = this.ipv, l, m, limbs = this.limbs, ll = limbs.length, mask = this.radixMask;\n for (i = 0; i < ll - 1; i++) {\n l = limbs[i] + carry;\n m = limbs[i] = l & mask;\n carry = (l - m) * ipv;\n }\n limbs[i] += carry;\n return this;\n },\n /** Serialize to a bit array */\n toBits: function (len) {\n this.fullReduce();\n len = len || this.exponent || this.bitLength();\n var i = Math.floor((len - 1) / 24), w = sjcl.bitArray, e = (len + 7 & -8) % this.radix || this.radix, out = [w.partial(e, this.getLimb(i))];\n for (i--; i >= 0; i--) {\n out = w.concat(out, [w.partial(Math.min(this.radix, len), this.getLimb(i))]);\n len -= this.radix;\n }\n return out;\n },\n /** Return the length in bits, rounded up to the nearest byte. */\n bitLength: function () {\n this.fullReduce();\n var out = this.radix * (this.limbs.length - 1), b = this.limbs[this.limbs.length - 1];\n for (; b; b >>>= 1) {\n out++;\n }\n return out + 7 & -8;\n }\n};\n/** @memberOf sjcl.bn\n* @this { sjcl.bn }\n*/\nsjcl.bn.fromBits = function (bits) {\n var Class = this, out = new Class(), words = [], w = sjcl.bitArray, t = this.prototype, l = Math.min(this.bitLength || 0x100000000, w.bitLength(bits)), e = l % t.radix || t.radix;\n words[0] = w.extract(bits, 0, e);\n for (; e < l; e += t.radix) {\n words.unshift(w.extract(bits, e, t.radix));\n }\n out.limbs = words;\n return out;\n};\nsjcl.bn.prototype.ipv = 1 / (sjcl.bn.prototype.placeVal = Math.pow(2, sjcl.bn.prototype.radix));\nsjcl.bn.prototype.radixMask = (1 << sjcl.bn.prototype.radix) - 1;\n/**\n * Creates a new subclass of bn, based on reduction modulo a pseudo-Mersenne prime,\n * i.e. a prime of the form 2^e + sum(a * 2^b),where the sum is negative and sparse.\n */\nsjcl.bn.pseudoMersennePrime = function (exponent, coeff) {\n /** @constructor\n * @private\n */\n function p(it) {\n this.initWith(it);\n /*if (this.limbs[this.modOffset]) {\n this.reduce();\n }*/\n }\n var ppr = p.prototype = new sjcl.bn(), i, tmp, mo;\n mo = ppr.modOffset = Math.ceil(tmp = exponent / ppr.radix);\n ppr.exponent = exponent;\n ppr.offset = [];\n ppr.factor = [];\n ppr.minOffset = mo;\n ppr.fullMask = 0;\n ppr.fullOffset = [];\n ppr.fullFactor = [];\n ppr.modulus = p.modulus = new sjcl.bn(Math.pow(2, exponent));\n ppr.fullMask = 0 | -Math.pow(2, exponent % ppr.radix);\n for (i = 0; i < coeff.length; i++) {\n ppr.offset[i] = Math.floor(coeff[i][0] / ppr.radix - tmp);\n ppr.fullOffset[i] = Math.floor(coeff[i][0] / ppr.radix) - mo + 1;\n ppr.factor[i] = coeff[i][1] * Math.pow(1 / 2, exponent - coeff[i][0] + ppr.offset[i] * ppr.radix);\n ppr.fullFactor[i] = coeff[i][1] * Math.pow(1 / 2, exponent - coeff[i][0] + ppr.fullOffset[i] * ppr.radix);\n ppr.modulus.addM(new sjcl.bn(Math.pow(2, coeff[i][0]) * coeff[i][1]));\n ppr.minOffset = Math.min(ppr.minOffset, -ppr.offset[i]); // conservative\n }\n ppr._class = p;\n ppr.modulus.cnormalize();\n /** Approximate reduction mod p. May leave a number which is negative or slightly larger than p.\n * @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr.reduce = function () {\n var i, k, l, mo = this.modOffset, limbs = this.limbs, off = this.offset, ol = this.offset.length, fac = this.factor, ll;\n i = this.minOffset;\n while (limbs.length > mo) {\n l = limbs.pop();\n ll = limbs.length;\n for (k = 0; k < ol; k++) {\n limbs[ll + off[k]] -= fac[k] * l;\n }\n i--;\n if (!i) {\n limbs.push(0);\n this.cnormalize();\n i = this.minOffset;\n }\n }\n this.cnormalize();\n return this;\n };\n /** @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr._strongReduce = (ppr.fullMask === -1) ? ppr.reduce : function () {\n var limbs = this.limbs, i = limbs.length - 1, k, l;\n this.reduce();\n if (i === this.modOffset - 1) {\n l = limbs[i] & this.fullMask;\n limbs[i] -= l;\n for (k = 0; k < this.fullOffset.length; k++) {\n limbs[i + this.fullOffset[k]] -= this.fullFactor[k] * l;\n }\n this.normalize();\n }\n };\n /** mostly constant-time, very expensive full reduction.\n * @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr.fullReduce = function () {\n var greater, i;\n // massively above the modulus, may be negative\n this._strongReduce();\n // less than twice the modulus, may be negative\n this.addM(this.modulus);\n this.addM(this.modulus);\n this.normalize();\n // probably 2-3x the modulus\n this._strongReduce();\n // less than the power of 2. still may be more than\n // the modulus\n // HACK: pad out to this length\n for (i = this.limbs.length; i < this.modOffset; i++) {\n this.limbs[i] = 0;\n }\n // constant-time subtract modulus\n greater = this.greaterEquals(this.modulus);\n for (i = 0; i < this.limbs.length; i++) {\n this.limbs[i] -= this.modulus.limbs[i] * greater;\n }\n this.cnormalize();\n return this;\n };\n /** @memberof sjcl.bn\n * @this { sjcl.bn }\n */\n ppr.inverse = function () {\n return (this.power(this.modulus.sub(2)));\n };\n p.fromBits = sjcl.bn.fromBits;\n return p;\n};\n// a small Mersenne prime\nvar sbp = sjcl.bn.pseudoMersennePrime;\nsjcl.bn.prime = {\n p127: sbp(127, [[0, -1]]),\n // Bernstein's prime for Curve25519\n p25519: sbp(255, [[0, -19]]),\n // Koblitz primes\n p192k: sbp(192, [[32, -1], [12, -1], [8, -1], [7, -1], [6, -1], [3, -1], [0, -1]]),\n p224k: sbp(224, [[32, -1], [12, -1], [11, -1], [9, -1], [7, -1], [4, -1], [1, -1], [0, -1]]),\n p256k: sbp(256, [[32, -1], [9, -1], [8, -1], [7, -1], [6, -1], [4, -1], [0, -1]]),\n // NIST primes\n p192: sbp(192, [[0, -1], [64, -1]]),\n p224: sbp(224, [[0, 1], [96, -1]]),\n p256: sbp(256, [[0, -1], [96, 1], [192, 1], [224, -1]]),\n p384: sbp(384, [[0, -1], [32, 1], [96, -1], [128, -1]]),\n p521: sbp(521, [[0, -1]])\n};\nsjcl.bn.random = function (modulus, paranoia) {\n if (typeof modulus !== \"object\") {\n modulus = new sjcl.bn(modulus);\n }\n var words, i, l = modulus.limbs.length, m = modulus.limbs[l - 1] + 1, out = new sjcl.bn();\n while (true) {\n // get a sequence whose first digits make sense\n do {\n words = sjcl.random.randomWords(l, paranoia);\n if (words[l - 1] < 0) {\n words[l - 1] += 0x100000000;\n }\n } while (Math.floor(words[l - 1] / m) === Math.floor(0x100000000 / m));\n words[l - 1] %= m;\n // mask off all the limbs\n for (i = 0; i < l - 1; i++) {\n words[i] &= modulus.radixMask;\n }\n // check the rest of the digitssj\n out.limbs = words;\n if (!out.greaterEquals(modulus)) {\n return out;\n }\n }\n};\n/** @fileOverview Bit array codec implementations.\n *\n * @author Marco Munizaga\n */\n//patch arraybuffers if they don't exist\nif (typeof (ArrayBuffer) === 'undefined') {\n (function (globals) {\n \"use strict\";\n globals.ArrayBuffer = function () { };\n globals.DataView = function () { };\n }(this));\n}\n/**\n * ArrayBuffer\n * @namespace\n */\nsjcl.codec.arrayBuffer = {\n /** Convert from a bitArray to an ArrayBuffer.\n * Will default to 8byte padding if padding is undefined*/\n fromBits: function (arr, padding, padding_count) {\n var out, i, ol, tmp, smallest;\n padding = padding == undefined ? true : padding;\n padding_count = padding_count || 8;\n if (arr.length === 0) {\n return new ArrayBuffer(0);\n }\n ol = sjcl.bitArray.bitLength(arr) / 8;\n //check to make sure the bitLength is divisible by 8, if it isn't \n //we can't do anything since arraybuffers work with bytes, not bits\n if (sjcl.bitArray.bitLength(arr) % 8 !== 0) {\n throw new sjcl.exception.invalid(\"Invalid bit size, must be divisble by 8 to fit in an arraybuffer correctly\");\n }\n if (padding && ol % padding_count !== 0) {\n ol += padding_count - (ol % padding_count);\n }\n //padded temp for easy copying\n tmp = new DataView(new ArrayBuffer(arr.length * 4));\n for (i = 0; i < arr.length; i++) {\n tmp.setUint32(i * 4, (arr[i] << 32)); //get rid of the higher bits\n }\n //now copy the final message if we are not going to 0 pad\n out = new DataView(new ArrayBuffer(ol));\n //save a step when the tmp and out bytelength are ===\n if (out.byteLength === tmp.byteLength) {\n return tmp.buffer;\n }\n smallest = tmp.byteLength < out.byteLength ? tmp.byteLength : out.byteLength;\n for (i = 0; i < smallest; i++) {\n out.setUint8(i, tmp.getUint8(i));\n }\n return out.buffer;\n },\n /** Convert from an ArrayBuffer to a bitArray. */\n toBits: function (buffer) {\n var i, out = [], len, inView, tmp;\n if (buffer.byteLength === 0) {\n return [];\n }\n inView = new DataView(buffer);\n len = inView.byteLength - inView.byteLength % 4;\n for (var i = 0; i < len; i += 4) {\n out.push(inView.getUint32(i));\n }\n if (inView.byteLength % 4 != 0) {\n tmp = new DataView(new ArrayBuffer(4));\n for (var i = 0, l = inView.byteLength % 4; i < l; i++) {\n //we want the data to the right, because partial slices off the starting bits\n tmp.setUint8(i + 4 - l, inView.getUint8(len + i)); // big-endian, \n }\n out.push(sjcl.bitArray.partial((inView.byteLength % 4) * 8, tmp.getUint32(0)));\n }\n return out;\n },\n /** Prints a hex output of the buffer contents, akin to hexdump **/\n hexDumpBuffer: function (buffer) {\n var stringBufferView = new DataView(buffer);\n var string = '';\n var pad = function (n, width) {\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;\n };\n for (var i = 0; i < stringBufferView.byteLength; i += 2) {\n if (i % 16 == 0)\n string += ('\\n' + (i).toString(16) + '\\t');\n string += (pad(stringBufferView.getUint16(i).toString(16), 4) + ' ');\n }\n if (typeof console === undefined) {\n console = console || { log: function () { } }; //fix for IE\n }\n console.log(string.toUpperCase());\n }\n};\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = sjcl;\n}\nif (typeof define === \"function\") {\n define([], function () {\n return sjcl;\n });\n}\nexport default sjcl;\n", null, null, null, null, null, null, null, null, "import {\n AuthorizationHeader,\n IssuerConfig,\n MediaType,\n TOKEN_TYPES,\n Token,\n TokenChallenge,\n WWWAuthenticateHeader,\n header_to_token,\n publicVerif,\n util,\n} from \"@cloudflare/privacypass-ts\";\nimport * as asn1 from \"asn1js\";\n\nconst u8ToB64 = (u: Uint8Array): string => btoa(String.fromCharCode(...u));\n\nconst b64Tou8 = (b: string): Uint8Array =>\n Uint8Array.from(atob(b), (c) => c.charCodeAt(0));\n\nconst b64ToB64URL = (s: string): string =>\n s.replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n\nconst b64URLtoB64 = (s: string): string =>\n s.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\nconst LOCAL_URL = window.origin;\nconst ECHO_URL = `${LOCAL_URL}/echo-authentication`;\nconst PROXY_URL = `${LOCAL_URL}/proxy`;\n\nconst SUPPORTED_TOKEN_TYPES = Object.values(TOKEN_TYPES).map(\n (tokenType) => tokenType.value,\n);\n\nclass TransformResult {\n private _string: string;\n private _fill: Record;\n\n constructor(s: string, fill: Record = {}) {\n this._string = s;\n this._fill = fill;\n }\n\n toString() {\n return this._string;\n }\n toFill() {\n return this._fill;\n }\n}\n\nconst proxyFetch = (url: string, init?: RequestInit) => {\n const request = new URL(PROXY_URL);\n request.searchParams.append(\"target\", url);\n\n const params = init ?? {};\n\n return fetch(request, params);\n};\n\nconst originInfo = () => [new URL(window.origin).host];\n\nconst parsePublicKey = async (pk: string): Promise => {\n const pkEnc = b64Tou8(b64URLtoB64(pk));\n const spkiEncoded = util.convertRSASSAPSSToEnc(pkEnc);\n return crypto.subtle.importKey(\n \"spki\",\n spkiEncoded,\n { name: \"RSA-PSS\", hash: \"SHA-384\" },\n true,\n [\"verify\"],\n );\n};\n\nconst validatePublicKey = async ({\n type,\n key: pk,\n}: {\n type: string;\n key: string;\n}): Promise => {\n const tokenType = Number.parseInt(type);\n if (!SUPPORTED_TOKEN_TYPES.includes(tokenType)) {\n return new TransformResult(\n `Token type 0x${tokenType.toString(16)} is not supported.`,\n );\n }\n\n try {\n const _ = await parsePublicKey(pk);\n const debugASN1 = (\n asn1.fromBER(b64Tou8(b64URLtoB64(pk))).result.valueBlock as any\n ).value.toString();\n return new TransformResult(debugASN1);\n } catch (e) {\n return new TransformResult(e.message);\n }\n};\n\nconst fetchIssuers = async ({ \"issuer-directory-uri\": url, turnstileResponse }: { \"issuer-directory-uri\": string, turnstileResponse: string }): Promise => {\n let response: Response;\n try {\n response = await proxyFetch(url, {\n headers: { \"cf-turnstile-response\": turnstileResponse },\n });\n } catch (e) {\n return e.message;\n }\n const out: string[] = [];\n if (\n response.headers.get(\"content-type\") !==\n MediaType.PRIVATE_TOKEN_ISSUER_DIRECTORY\n ) {\n out.push(\n `Response content type ${response.headers.get(\n \"content-type\",\n )} does not match protocol ${MediaType.PRIVATE_TOKEN_ISSUER_DIRECTORY}`,\n );\n }\n const issuers: IssuerConfig = await response.json();\n issuers[\"token-keys\"] = issuers[\"token-keys\"].map((key) =>\n Object.assign({}, key, {\n // the convertion is here to ensure there are no formatting issue\n // keys need to be encoded as RSAPSS\n \"token-key\": b64ToB64URL(\n u8ToB64(\n util.convertEncToRSASSAPSS(b64Tou8(b64URLtoB64(key[\"token-key\"]))),\n ),\n ),\n }),\n );\n out.push(JSON.stringify(issuers, null, 2));\n return new TransformResult(out.join(\"\\n\"), {\n type: issuers[\"token-keys\"].map((key) => key[\"token-type\"].toString()),\n key: issuers[\"token-keys\"].map((key) => key[\"token-key\"]),\n \"issuer-name\": issuers[\"token-keys\"].map(() => new URL(url).host),\n \"issuer-request-uri\": issuers[\"token-keys\"].map(\n () => `${new URL(url).origin}${issuers[\"issuer-request-uri\"]}`,\n ), // note this won't work if issuer-request-uri is absolute\n });\n};\n\nconst createChallenge = async ({\n type: types,\n key: keys,\n \"issuer-name\": names,\n}: {\n type: string[];\n key: string[];\n \"issuer-name\": string[];\n}): Promise => {\n let issuers: { tokenType: number; name: string; publicKey: Uint8Array }[] =\n [];\n for (let i = 0; i < keys.length; i += 1) {\n const tokenType = Number.parseInt(types[i]);\n const publicKey = keys[i];\n const name = names[i];\n if (publicKey === \"\") {\n continue;\n }\n issuers.push({\n tokenType,\n name,\n publicKey: b64Tou8(b64URLtoB64(publicKey)),\n });\n }\n\n let out: string[] = [];\n for (const issuer of issuers) {\n const redemptionContext = crypto.getRandomValues(new Uint8Array(32));\n const tokChl = new TokenChallenge(\n issuer.tokenType,\n issuer.name,\n redemptionContext,\n originInfo(),\n );\n const privateToken = new WWWAuthenticateHeader(tokChl, issuer.publicKey);\n out.push(privateToken.toString(true));\n }\n const challenge = out.join(\", \");\n return new TransformResult(challenge, { challenge });\n};\n\nconst challengeParse = async ({\n challenge,\n}: {\n challenge: string;\n}): Promise => {\n const tokens = WWWAuthenticateHeader.parse(challenge);\n const infos = await Promise.all(\n tokens.map(async (token) => {\n const tokenKeyId = new Uint8Array(\n await crypto.subtle.digest(\"SHA-256\", token.tokenKey),\n );\n return {\n challenge: {\n tokenType: token.challenge.tokenType,\n name: token.challenge.issuerName,\n origin: token.challenge.originInfo,\n redemptionContext: b64ToB64URL(\n u8ToB64(token.challenge.redemptionContext),\n ),\n },\n tokenKey: b64ToB64URL(u8ToB64(token.tokenKey)),\n tokenKeyId: b64ToB64URL(u8ToB64(tokenKeyId)),\n truncatedTokenKeyId: tokenKeyId[tokenKeyId.length - 1],\n maxAge: token.maxAge,\n };\n }),\n );\n return new TransformResult(JSON.stringify(infos, null, 2));\n};\n\nconst challengeTrigger = async ({\n challenge,\n}: {\n challenge: string;\n}): Promise => {\n try {\n const API_REPLAY_DELAY_IN_MS = 100;\n const API_REPLAY_HEADER = \"private-token-client-replay\";\n const API_REPLAY_URL =\n \"https://no-reply.private-token.research.cloudflare.com\";\n\n let response = await fetch(ECHO_URL, {\n headers: { \"WWW-Authenticate\": challenge },\n });\n // Client replay API when not supported by the platform\n const requestID = response.headers.get(API_REPLAY_HEADER);\n if (requestID) {\n const wait = () =>\n fetch(`${API_REPLAY_URL}/requestID/${requestID}`).then(\n async (response) => {\n const state = await response.text();\n return state === \"pending\";\n },\n );\n do {\n await new Promise((resolve) =>\n setTimeout(resolve, API_REPLAY_DELAY_IN_MS),\n );\n } while (await wait())\n response = await fetch(ECHO_URL);\n }\n if (!response.ok && response.headers.get(\"WWW-Authenticate\")) {\n throw new Error(\n `Challenge has been triggered, but the platform failed to return an Authorization header. Status: ${response.status} ${response.statusText}`,\n );\n }\n const token = await response.text();\n return new TransformResult(token, { token });\n } catch (e) {\n return new TransformResult(e.message);\n }\n};\n\nconst tokenRequest = async ({\n key: pk,\n \"issuer-request-uri\": url,\n challenge,\n turnstileResponse,\n}: {\n key: string;\n \"issuer-request-uri\": string;\n challenge: string;\n turnstileResponse: string;\n}) => {\n const origin = new publicVerif.Origin(\n publicVerif.BlindRSAMode.PSS,\n originInfo(),\n );\n const tokens = WWWAuthenticateHeader.parse(challenge);\n const publicKey = await parsePublicKey(pk); // always the public key of the first token\n for (const token of tokens) {\n const result: string[] = [];\n const client = new publicVerif.Client(publicVerif.BlindRSAMode.PSS);\n let validToken: Token;\n try {\n const request = await client.createTokenRequest(\n token.challenge,\n token.tokenKey,\n );\n const response = await proxyFetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": MediaType.PRIVATE_TOKEN_REQUEST,\n Accept: MediaType.PRIVATE_TOKEN_RESPONSE,\n \"cf-turnstile-response\": turnstileResponse,\n },\n body: request.serialize(),\n });\n\n const tokenResponse = publicVerif.TokenResponse.deserialize(\n new Uint8Array(await response.arrayBuffer()),\n );\n validToken = await client.finalize(tokenResponse);\n result.push(\n `Draft 16 Valid: ${\n (await origin.verify(validToken, publicKey)) &&\n response.headers.get(\"Content-Type\") ===\n MediaType.PRIVATE_TOKEN_RESPONSE\n }`,\n );\n result.push(new AuthorizationHeader(validToken).toString(true));\n } catch (e) {\n return new TransformResult(e.message);\n }\n\n // Test old protocol which has not been standardised\n try {\n const request = await client.createTokenRequest(\n token.challenge,\n token.tokenKey,\n );\n const oldProtocolResponse = await proxyFetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"message/token-request\",\n Accept: \"message/token-response\",\n \"cf-turnstile-response\": turnstileResponse,\n },\n body: request.serialize(),\n });\n\n const tokenResponse = publicVerif.TokenResponse.deserialize(\n new Uint8Array(await oldProtocolResponse.arrayBuffer()),\n );\n const validOldToken = await client.finalize(tokenResponse);\n result.push(\n `Draft 2 Valid: ${\n (await origin.verify(validOldToken, publicKey)) &&\n oldProtocolResponse.headers.get(\"Content-Type\") ===\n \"message/token-response\"\n }`,\n );\n } catch (e) {\n console.log(e);\n // ignore if the old protocol is not supported\n }\n\n return new TransformResult(result.join(\"\\n\"), {\n token: new AuthorizationHeader(validToken).toString(true),\n });\n }\n};\n\nconst tokenParse = async ({ token }: { token: string }) => {\n const t = AuthorizationHeader.parse(TOKEN_TYPES.BLIND_RSA, token)[0].token;\n if (!t) {\n return new TransformResult(\"Cannot parse token.\");\n }\n return new TransformResult(\n JSON.stringify(\n {\n \"token-type\": t.authInput.tokenType,\n \"token-key-id\": b64ToB64URL(u8ToB64(t.authInput.tokenKeyId)),\n nonce: b64ToB64URL(u8ToB64(t.authInput.nonce)),\n challengeDigest: b64ToB64URL(u8ToB64(t.authInput.challengeDigest)),\n authenticator: b64ToB64URL(u8ToB64(t.authenticator)),\n },\n null,\n 2,\n ),\n );\n};\n\nconst tokenVerify = async ({\n key: pk,\n token,\n}: {\n key: string;\n token: string;\n}) => {\n const publicKey = await parsePublicKey(pk);\n const responseToken = AuthorizationHeader.parse(\n TOKEN_TYPES.BLIND_RSA,\n token,\n )[0].token;\n\n const origin = new publicVerif.Origin(\n publicVerif.BlindRSAMode.PSS,\n originInfo(),\n );\n\n if (await origin.verify(responseToken, publicKey)) {\n return new TransformResult(\"Token matches the public key.\");\n }\n return new TransformResult(\"Token does not match the public key.\");\n};\n\nconst challengeDebug = async ({ challenge }: { challenge: string }) => {\n return header_to_token(challenge);\n};\n\nconst notImplemented = async () => \"not implemented\";\n\nconst onload = () => {\n Object.assign(window, {\n validatePublicKey,\n fetchIssuers,\n createChallenge,\n challengeParse,\n challengeTrigger,\n tokenRequest,\n tokenParse,\n tokenVerify,\n challengeDebug,\n notImplemented,\n });\n};\n\nwindow.addEventListener(\"load\", onload);\n"], "mappings": "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", "names": ["require_lib", "__commonJSMin", "exports", "parse", "string", "encoding", "opts", "_opts$out", "i", "end", "out", "bits", "buffer", "written", "_i", "value", "stringify", "data", "_opts", "_opts$pad", "pad", "mask", "base16Encoding", "base32Encoding", "base32HexEncoding", "base64Encoding", "base64UrlEncoding", "base16", "base32", "base32hex", "base64", "base64url", "codec", "require_build", "__commonJSMin", "exports", "ARRAY_BUFFER_NAME", "BufferSourceConverter", "_BufferSourceConverter", "data", "type", "a", "b", "aView", "bView", "i", "args", "buffers", "size", "buffer", "res", "offset", "view", "STRING_TYPE", "HEX_REGEX", "BASE64_REGEX", "BASE64URL_REGEX", "Utf8Converter", "text", "s", "uintArray", "buf", "encodedString", "Utf16Converter", "littleEndian", "arrayBuffer", "dataView", "code", "Convert", "_Convert", "enc", "str", "binary", "base64", "formatted", "base64url", "encoding", "stringLength", "resultView", "result", "len", "byte", "hexString", "c", "padCount", "assign", "target", "sources", "obj", "prop", "combine", "totalByteLength", "item", "prev", "cur", "currentPos", "arr", "item2", "isEqual", "bytes1", "bytes2", "b1", "b2", "exports", "errBadGroup", "X", "exports", "joinAll", "xor", "ctEqual", "zip", "to16bits", "toU16LenPrefix", "toU16LenPrefixUint8Array", "toU16LenPrefixClass", "fromU16LenPrefix", "fromU16LenPrefixDes", "fromU16LenPrefixUint8Array", "checkSize", "errDeserialization", "errGroup", "compat", "a", "size", "ai", "ret", "offset", "b", "n", "c", "i", "x", "y", "xi", "head", "tail", "run", "output", "T", "u", "X", "Y", "exports", "exports", "getOprfParams", "getSupportedSuites", "dleq_js_1", "groupTypes_js_1", "util_js_1", "consts_js_1", "cryptoImpl_js_1", "assertNever", "name", "x", "id", "Oprf", "g", "v", "_Oprf", "provider", "m", "suite", "arg", "mode", "te", "ID", "gid", "hash", "EMPTY_DST", "input", "issuedElement", "info", "hasInfo", "hashInput", "framedInfo", "Evaluation", "_Evaluation", "evaluated", "proof", "proofBytes", "res", "i", "bytes", "group", "evalList", "tail", "proofSize", "EvaluationRequest", "_EvaluationRequest", "blinded", "blindedList", "FinalizeData", "_FinalizeData", "inputs", "blinds", "evalReq", "f", "t0", "t1", "require_sjcl", "__commonJSMin", "exports", "module", "sjcl", "message", "key", "i", "j", "tmp", "encKey", "decKey", "sbox", "decTable", "keyLen", "rcon", "data", "encTable", "sboxInv", "x", "xInv", "d", "th", "x2", "x4", "x8", "s", "tEnc", "tDec", "input", "dir", "a", "b", "c", "a2", "b2", "c2", "nInnerRounds", "kIndex", "out", "table", "t0", "t1", "t2", "t3", "bstart", "bend", "blength", "sh", "a1", "last", "shift", "l", "len", "_end", "carry", "last2", "shift2", "y", "v", "m", "arr", "bl", "str", "_noEquals", "_url", "bits", "ta", "bytes", "hash", "ol", "nl", "h", "prime", "factor", "isPrime", "frac", "w", "k", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "cb", "index", "val", "p", "prf", "plaintext", "iv", "adata", "tlen", "L", "tag", "ivl", "ciphertext", "tag2", "mac", "macData", "xor", "enc", "ctr", "n", "Hash", "exKey", "bs", "result", "password", "salt", "count", "length", "Prff", "u", "ui", "defaultParanoia", "nwords", "paranoia", "readiness", "g", "allowZeroParanoia", "estimatedEntropy", "source", "id", "t", "robin", "oldReady", "err", "objName", "entropyRequired", "name", "callback", "cbs", "jsTemp", "func", "that", "seedWords", "full", "reseedData", "strength", "ev", "touch", "ac", "or", "arg", "cbsTemp", "getCryptoModule", "buf", "crypt", "ab", "e", "params", "rp", "prp", "ct", "obj", "comma", "target", "src", "requireSame", "plus", "minus", "filter", "cache", "cp", "iter", "it", "difference", "less", "greater", "ll", "r", "neg", "ci", "nz", "al", "ai", "ii", "pow", "N", "montOut", "radix", "R", "wind", "bitsize", "RR", "NN", "RP", "NP", "RT", "R2", "montIn", "montMul", "right", "abBar", "mask", "precomp", "cap", "getBit", "exp", "off", "indx", "pv", "ipv", "limbs", "Class", "words", "exponent", "coeff", "ppr", "mo", "fac", "sbp", "modulus", "curve", "k2", "affine2", "newY", "z", "T", "S", "sz2", "x1", "y1", "y2", "z2", "zi", "zi2", "affine", "multiples", "k1", "m1", "m2", "l1", "l2", "z4", "z6", "Field", "curcurve", "types", "point", "curveName", "pointbits", "cn", "sec", "pub", "pk", "rs", "fakeLegacyVersion", "ss", "hG", "hA", "r2", "fixedKForTesting", "globals", "padding", "padding_count", "smallest", "buffer", "inView", "stringBufferView", "string", "pad", "width", "util_js_1", "index_js_1", "__importDefault", "groupTypes_js_1", "hashParams", "hash", "expandXMD", "msg", "dst", "numBytes", "outLenBytes", "blockLenBytes", "ell", "dstPrime", "te", "input", "zPad", "libStr", "b0Input", "b0", "b1Input", "bi", "pseudo", "i", "biInput", "getCurve", "gid", "ScalarSj", "_ScalarSj", "g", "k", "s", "c", "ab", "unpaded", "serScalar", "bytes", "array", "L", "getHashParams", "bitArr", "getSSWUParams", "curve", "Z", "c2", "c1", "EltSj", "_EltSj", "p", "a", "x1", "y1", "x2", "y2", "k1", "k2", "xy", "serElt", "x", "compressed", "bits", "exp", "y", "point", "b", "len", "count", "u", "j", "A", "B", "zero", "one", "sgn", "cmov", "sqrt_ratio_3mod4", "v", "tv1", "tv2", "tv3", "isQR", "tv4", "tv6", "tv5", "e1", "z", "Q0", "Q1", "GroupSj", "_b", "__classPrivateFieldGet", "_a", "_GroupSj_cache", "_c", "exports", "groupSjcl_js_1", "exports", "hashID", "input", "cryptoSjcl_js_1", "exports", "exports", "getCrypto", "getGroup", "getSuiteGroup", "setCryptoProvider", "getCryptoProvider", "oprf_js_1", "buildSettings_js_1", "REQUIRED", "configured", "arg", "provider", "groupID", "suite", "util_js_1", "cryptoImpl_js_1", "LABELS", "computeComposites", "params", "b", "cd", "key", "arg", "crypto", "group", "te", "Bm", "seedDST", "h1Input", "seed", "compositeLabel", "h2sDST", "M", "Z", "i", "c", "d", "Ci", "Di", "h2Input", "di", "challenge", "points", "p", "P", "DLEQProof", "_DLEQProof", "s", "groupID", "bytes", "n", "exports", "DLEQVerifier", "p0", "p1", "proof", "p1s", "t2", "t3", "DLEQProver", "k", "r", "rnd", "oprf_js_1", "util_js_1", "dleq_js_1", "baseClient", "inputs", "eltList", "blinds", "input", "scalar", "inputElement", "evalReq", "finData", "evaluation", "info", "outputList", "i", "blindInv", "unblinded", "OPRFClient", "suite", "arg", "exports", "VOPRFClient", "pubKeyServer", "pkS", "POPRFClient", "m", "T", "tw", "n", "dleq_js_1", "oprf_js_1", "util_js_1", "baseServer", "mode", "suite", "privateKey", "arg", "blinded", "key", "crKey", "compressed", "evalBytes", "info", "m", "skS", "t", "tInv", "input", "secret", "evalSecret", "P", "evaluated", "OPRFServer", "req", "b", "output", "exports", "VOPRFServer", "evalList", "pkS", "proof", "POPRFServer", "keyProof", "kG", "exports", "getKeySizes", "validatePrivateKey", "validatePublicKey", "randomPrivateKey", "derivePrivateKey", "generatePublicKey", "generateKeyPair", "deriveKeyPair", "oprf_js_1", "util_js_1", "cryptoImpl_js_1", "id", "arg", "gg", "privateKey", "publicKey", "priv", "mode", "seed", "info", "deriveInput", "counter", "hashInput", "__exportStar", "exports", "import_index", "base16", "cjs", "base32", "base32hex", "base64", "base64url", "codec", "parseWWWAuthenticateInternal", "header", "includeNonCompliantToken", "tokenChar", "tchar", "OWS", "BWS", "quotedString", "token", "authParam", "challenge", "challenges", "challengesRegex", "first", "everythingConsumed", "matches", "m", "data", "parseWWWAuthenticate", "parseWWWAuthenticateWithNonCompliantTokens", "authParamToString", "param", "value", "quote", "toStringWWWAuthenticate", "authScheme", "authParams", "params", "pvtsutils", "utilFromBase", "inputBuffer", "inputBase", "result", "utilToBase", "value", "base", "reserved", "internalReserved", "internalValue", "biggest", "i", "retBuf", "retView", "j", "basis", "utilConcatView", "views", "outputLength", "prevLength", "view", "retBuf", "retView", "utilDecodeTC", "buf", "condition1", "condition2", "bigIntBuffer", "bigIntView", "i", "bigInt", "utilFromBase", "smallIntBuffer", "smallIntView", "j", "utilEncodeTC", "value", "modValue", "smallInt", "utilToBase", "tempBuf", "tempView", "k", "isEqualBuffer", "inputBuffer1", "inputBuffer2", "view1", "view2", "padNumber", "inputNumber", "fullLength", "str", "dif", "padding", "log2", "assertBigInt", "concat", "buffers", "outputLength", "prevLength", "i", "buffer", "retView", "checkBufferParams", "baseBlock", "inputBuffer", "inputOffset", "inputLength", "ViewWriter", "buf", "powers2", "digitsString", "NAME", "VALUE_HEX_VIEW", "IS_HEX_ONLY", "ID_BLOCK", "TAG_CLASS", "TAG_NUMBER", "IS_CONSTRUCTED", "FROM_BER", "TO_BER", "LOCAL", "EMPTY_STRING", "EMPTY_BUFFER", "EMPTY_VIEW", "END_OF_CONTENT_NAME", "OCTET_STRING_NAME", "BIT_STRING_NAME", "HexBlock", "BaseClass", "_a", "args", "params", "value", "view", "endLength", "sizeOnly", "LocalBaseBlock", "blockLength", "error", "warnings", "valueBeforeDecode", "ValueBlock", "writer", "LocalIdentificationBlock", "idBlock", "_b", "_c", "_d", "firstOctet", "number", "encodedBuf", "utilToBase", "encodedView", "size", "curView", "inputView", "intBuffer", "tagNumberMask", "count", "intTagNumberBuffer", "tagNumberBufferMaxLength", "tempBufferView", "utilFromBase", "LocalLengthBlock", "lenBlock", "lenOffset", "lengthBufferView", "retBuf", "typeStore", "BaseBlock", "name", "optional", "primitiveSchema", "parameters", "valueBlockType", "resultOffset", "_writer", "prepareIndefiniteForm", "idBlockBuf", "valueBlockBuf", "lenBlockBuf", "object", "encoding", "other", "thisRaw", "otherRaw", "isEqualBuffer", "BaseStringBlock", "stringValueBlockType", "LocalPrimitiveValueBlock", "isHexOnly", "_a$w", "Primitive", "localChangeType", "inputObject", "newType", "newObject", "localFromBER", "incomingOffset", "returnObject", "newASN1Type", "fromBER", "result", "checkLen", "indefiniteLength", "length", "LocalConstructedValueBlock", "isIndefiniteForm", "currentOffset", "_a$v", "Constructed", "values", "o", "blockName", "LocalEndOfContentValueBlock", "_a$u", "EndOfContent", "_a$t", "Null", "LocalBooleanValueBlock", "octet", "utilDecodeTC", "_a$s", "Boolean", "LocalOctetStringValueBlock", "isConstructed", "currentBlockName", "_a$r", "OctetString", "_OctetString", "asn", "array", "content", "LocalBitStringValueBlock", "unusedBits", "valueBlock", "_a$q", "BitString", "bits", "valueHex", "byte", "bitsStr", "_a$p", "viewAdd", "first", "second", "c", "firstView", "secondView", "firstViewCopy", "firstViewCopyLength", "secondViewCopy", "secondViewCopyLength", "max", "counter", "utilConcatView", "power2", "n", "p", "digits", "newValue", "viewSub", "b", "LocalIntegerValueBlock", "v", "utilEncodeTC", "expectedLength", "offset", "updatedView", "firstBit", "bitNumber", "currentByte", "asn1View", "flag", "byteNumber", "_a$o", "Integer", "_Integer", "bigIntValue", "hex", "secondInt", "integer", "_a$n", "Enumerated", "LocalSidValueBlock", "valueDec", "isFirstSid", "tempView", "bytes", "len", "sidValue", "LocalObjectIdentifierValueBlock", "sidBlock", "retBuffers", "valueBuf", "string", "pos1", "pos2", "sid", "plus", "parsedSID", "sidStr", "_a$m", "ObjectIdentifier", "LocalRelativeSidValueBlock", "LocalRelativeObjectIdentifierValueBlock", "_a$l", "RelativeObjectIdentifier", "_a$k", "Sequence", "_a$j", "Set", "LocalStringValueBlock", "LocalSimpleStringValueBlock", "LocalSimpleStringBlock", "inputString", "strLen", "LocalUtf8StringValueBlock", "ex", "_a$i", "Utf8String", "LocalBmpStringValueBlock", "_a$h", "BmpString", "LocalUniversalStringValueBlock", "copyBuffer", "valueView", "strLength", "valueHexView", "codeBuf", "codeView", "dif", "j", "_a$g", "UniversalString", "_a$f", "NumericString", "_a$e", "PrintableString", "_a$d", "TeletexString", "_a$c", "VideotexString", "_a$b", "IA5String", "_a$a", "GraphicString", "_a$9", "VisibleString", "_a$8", "GeneralString", "_a$7", "CharacterString", "_a$6", "UTCTime", "valueDate", "str", "inputDate", "parserArray", "year", "outputArray", "padNumber", "_a$5", "GeneralizedTime", "isUTC", "timeString", "dateTimeString", "fractionPart", "parser", "hourDifference", "minuteDifference", "multiplier", "differencePosition", "differenceString", "fractionPointPosition", "fractionPartCheck", "fractionResult", "tempDate", "_a$4", "DATE", "_a$3", "TimeOfDay", "_a$2", "DateTime", "_a$1", "Duration", "TIME", "Any", "Choice", "Repeated", "local", "compareSchema", "root", "inputData", "inputSchema", "Choice", "j", "_result", "NAME", "Any", "ID_BLOCK", "FROM_BER", "TO_BER", "encodedId", "TAG_CLASS", "TAG_NUMBER", "IS_CONSTRUCTED", "IS_HEX_ONLY", "VALUE_HEX_VIEW", "schemaView", "asn1View", "i", "EMPTY_STRING", "typeStore", "admission", "result", "maxLength", "Repeated", "_optional", "arrayRoot", "LOCAL", "asn1", "localFromBER", "verifySchema", "inputBuffer", "convertRSASSAPSSToEnc", "keyRSAPSSEncSpki", "RSAEncryptionAlgID", "schema", "Sequence", "BitString", "cmp", "verifySchema", "keyASN", "ObjectIdentifier", "Null", "algorithm", "RSAPSSAlgID", "publicKeyParams", "Constructed", "Integer", "convertEncToRSASSAPSS", "keyEncRSAPSSSpki", "algorithmID", "spki", "fromBER", "asn", "joinAll", "a", "size", "ai", "buffer", "view", "offset", "MAX_UINT16", "AUTH_SCHEME_NAME", "TokenChallenge", "_TokenChallenge", "tokenType", "issuerName", "redemptionContext", "originInfo", "bytes", "offset", "input", "type", "len", "issuerNameBytes", "td", "allOriginInfoBytes", "output", "b", "te", "allOriginInfo", "joinAll", "AuthenticatorInput", "_AuthenticatorInput", "tokenTypeEntry", "nonce", "challengeDigest", "tokenKeyId", "ops", "Token", "_Token", "authInput", "authenticator", "payload", "Extension", "_Extension", "extensionType", "extensionData", "Extensions", "_Extensions", "extensions", "lastExtensionType", "extension", "lenNext", "nextBytes", "bytesRead", "ext", "length", "serialized", "lengthEnc", "WWWAuthenticateHeader", "_WWWAuthenticateHeader", "challenge", "tokenKey", "maxAge", "data", "attributes", "challengeSerialized", "attr", "idx", "attrKey", "attrValue", "base64url", "header", "parseWWWAuthenticate", "challenges", "listTokens", "chl", "privToken", "tokens", "parseWWWAuthenticateWithNonCompliantTokens", "quotedString", "authParams", "toStringWWWAuthenticate", "AuthorizationHeader", "_AuthorizationHeader", "token", "ppToken", "extentions", "tokenEnc", "extEnc", "pub_verif_token_exports", "__export", "BLIND_RSA", "BlindRSAMode", "Client", "ClientWithMetadata", "ExtendedTokenRequest", "Issuer", "IssuerWithMetadata", "Origin", "OriginWithMetadata", "PARTIALLY_BLIND_RSA", "PartiallyBlindRSAMode", "TokenRequest", "TokenResponse", "getPublicKeyBytes", "sjcl", "message", "key", "i", "j", "tmp", "encKey", "decKey", "sbox", "decTable", "keyLen", "rcon", "data", "encTable", "sboxInv", "x", "xInv", "d", "th", "x2", "x4", "x8", "s", "tEnc", "tDec", "input", "dir", "a", "b", "c", "a2", "b2", "c2", "nInnerRounds", "kIndex", "out", "table", "t0", "t1", "t2", "t3", "bstart", "bend", "blength", "sh", "a1", "last", "shift", "l", "len", "_end", "carry", "last2", "shift2", "y", "v", "m", "arr", "bl", "str", "_noEquals", "_url", "bits", "ta", "bytes", "hash", "ol", "nl", "h", "prime", "factor", "isPrime", "frac", "w", "k", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "cb", "index", "val", "p", "prf", "plaintext", "iv", "adata", "tlen", "L", "tag", "ivl", "ciphertext", "tag2", "mac", "macData", "xor", "enc", "ctr", "n", "Hash", "exKey", "bs", "result", "password", "salt", "count", "length", "Prff", "u", "ui", "defaultParanoia", "nwords", "paranoia", "readiness", "g", "allowZeroParanoia", "estimatedEntropy", "source", "id", "t", "robin", "oldReady", "err", "objName", "entropyRequired", "name", "callback", "cbs", "jsTemp", "func", "that", "seedWords", "full", "reseedData", "strength", "ev", "touch", "ac", "or", "arg", "cbsTemp", "getCryptoModule", "buf", "crypt", "ab", "e", "params", "rp", "prp", "ct", "obj", "comma", "target", "src", "requireSame", "plus", "minus", "filter", "cache", "cp", "iter", "it", "difference", "less", "greater", "ll", "r", "neg", "ci", "nz", "al", "ai", "ii", "pow", "N", "montOut", "radix", "R", "wind", "bitsize", "RR", "NN", "RP", "NP", "RT", "R2", "montIn", "montMul", "right", "abBar", "mask", "precomp", "cap", "getBit", "exp", "off", "indx", "pv", "ipv", "limbs", "Class", "words", "exponent", "coeff", "ppr", "mo", "fac", "sbp", "modulus", "globals", "padding", "padding_count", "smallest", "buffer", "inView", "stringBufferView", "string", "pad", "width", "sjcl_default", "assertNever", "name", "x", "getHashParams", "hash", "os2ip", "bytes", "sjcl_default", "i2osp", "num", "byteLength", "unpadded", "int_to_bytes", "joinAll", "a", "size", "ret", "offset", "xor", "b", "n", "c", "i", "incCounter", "mgf1", "h", "seed", "mLen", "T", "counter", "emsa_pss_encode", "msg", "emBits", "opts", "mgf", "sLen", "hashParams", "hLen", "emLen", "mHash", "salt", "mPrime", "ps", "db", "dbMask", "maskedDB", "rsavp1", "pkS", "s", "rsasp1", "skS", "m", "is_coprime", "random_integer_uniform", "kLen", "r", "inverseMod", "p", "old_r", "old_s", "quotient", "NATIVE_SUPPORT_NAME", "rsaRawBlingSign", "privateKey", "blindMsg", "signature", "PrepareType", "BlindRSA", "_BlindRSA", "params", "assertNever", "hash", "pssType", "prepare", "msg", "msg_prefix_len", "msg_prefix", "joinAll", "key", "type", "modulusLengthBits", "hashFn", "modulusLengthBytes", "publicKey", "jwkKey", "modulusLength", "kLen", "n", "sjcl_default", "pk", "opts", "encoded_msg", "emsa_pss_encode", "m", "os2ip", "is_coprime", "r", "random_integer_uniform", "inv", "i2osp", "e", "x", "rsavp1", "z", "privateKey", "blindMsg", "d", "sk", "s", "rsaRawBlingSign", "rsasp1", "mp", "blindSig", "rInv", "sig", "algorithm", "signature", "message", "SJCL_PARANOIA", "millerRabinTest", "n", "SEC_PARAM", "nMinusOne", "sjcl_default", "r", "s", "i", "y", "j", "generatePrime", "bitLength", "NUM_TRIES_PRIMALITY", "MAX_NUM_TRIES", "twoToN", "sjcl_default", "i", "prime", "SJCL_PARANOIA", "millerRabinTest", "generateSafePrime", "ONE", "PrepareType", "PartiallyBlindRSA", "_PartiallyBlindRSA", "params", "assertNever", "hash", "pssType", "prepare", "msg", "msg_prefix_len", "msg_prefix", "joinAll", "key", "type", "modulusLengthBits", "hashFn", "modulusLengthBytes", "publicKey", "info", "jwkKey", "modulusLength", "kLen", "n", "sjcl_default", "pk", "msg_prime", "int_to_bytes", "opts", "encoded_msg", "emsa_pss_encode", "m", "os2ip", "is_coprime", "r", "random_integer_uniform", "inv", "i2osp", "e", "pk_derived", "x", "rsavp1", "z", "privateKey", "blindMsg", "d", "p", "q", "sk", "sk_derived", "s", "rsaRawBlingSign", "rsasp1", "mp", "blindSig", "rInv", "sig", "pk_derived_key", "algorithm", "generateSafePrimeSync", "generateSafePrime", "buffer", "p_tmp", "q_tmp", "phi", "inverseMod", "signature", "message", "hkdf_input", "hkdf_salt", "lambda_len", "hkdf_len", "expanded_bytes", "d_prime", "secretKey", "extractable", "dp", "dq", "qi", "Params", "PrepareType", "RSABSSA", "algorithm", "BlindRSA", "params", "RSAPBSSA", "PartiallyBlindRSA", "BlindRSAMode", "PartiallyBlindRSAMode", "BLINDRSA_EXTRA_PARAMS", "RSABSSA", "PARTIALLY_BLINDRSA_EXTRA_PARAMS", "RSAPBSSA", "BLIND_RSA", "PARTIALLY_BLIND_RSA", "getCryptoKey", "publicKey", "spkiEncoded", "convertRSASSAPSSToEnc", "getPublicKeyBytes", "getTokenKeyID", "TokenRequest", "_TokenRequest", "truncatedTokenKeyId", "blindedMsg", "tokenType", "bytes", "offset", "input", "type", "tokenKeyId", "len", "output", "b", "joinAll", "ExtendedTokenRequest", "_ExtendedTokenRequest", "request", "extensions", "Extensions", "TokenResponse", "_TokenResponse", "blindSig", "PubliclyVerifiableIssuer", "mode", "name", "privateKey", "params", "suite", "serializedExtensions", "blindMsg", "signature", "message", "tokReq", "token", "Issuer", "algorithm", "IssuerWithMetadata", "generateSafePrimeSync", "PubliclyVerifiableClient", "msg", "inv", "tokChl", "issuerPublicKey", "nonce", "challengeDigest", "authInput", "AuthenticatorInput", "tokenInput", "pkIssuer", "tokenRequest", "tokRes", "authenticator", "Token", "Client", "ClientWithMetadata", "PubliclyVerifiableOrigin", "originInfo", "publicKeyIssuer", "issuerName", "redemptionContext", "TokenChallenge", "Origin", "OriginWithMetadata", "import_voprf_ts", "VOPRF_SUITE", "VOPRF_GROUP", "VOPRF_HASH", "VOPRF_EXTRA_PARAMS", "VOPRF", "getTokenKeyID", "publicKey", "TokenRequest", "_TokenRequest", "truncatedTokenKeyId", "blindedMsg", "VOPRF", "bytes", "offset", "input", "type", "len", "output", "b", "joinAll", "TokenResponse", "_TokenResponse", "evaluateMsg", "evaluateProof", "Client", "tokChl", "issuerPublicKey", "nonce", "challengeDigest", "tokenKeyId", "getTokenKeyID", "authInput", "AuthenticatorInput", "VOPRF", "tokenInput", "vClient", "finData", "evalReq", "blindedMsg", "truncatedTokenKeyId", "tokenRequest", "TokenRequest", "bytes", "TokenResponse", "tokRes", "proof", "evaluateMsg", "evaluation", "authenticator", "token", "Token", "PRIVATE_TOKEN_ISSUER_DIRECTORY", "MediaType", "getIssuerUrl", "issuerName", "baseURL", "configURI", "res", "uri", "sendTokenRequest", "tokReqBytes", "issuerUrl", "headers", "issuerResponse", "body", "contentType", "fetchToken", "client", "header", "tokReq", "tokResBytes", "tokRes", "token", "AuthorizationHeader", "util", "convertEncToRSASSAPSS", "convertRSASSAPSSToEnc", "TOKEN_TYPES", "BLIND_RSA", "PARTIALLY_BLIND_RSA", "VOPRF", "header_to_token", "header", "privateTokens", "WWWAuthenticateHeader", "pt", "client", "Client", "BlindRSAMode", "te", "authHeader", "fetchToken", "base64url", "u8ToB64", "u", "b64Tou8", "b", "c", "b64ToB64URL", "s", "b64URLtoB64", "LOCAL_URL", "ECHO_URL", "PROXY_URL", "SUPPORTED_TOKEN_TYPES", "TOKEN_TYPES", "tokenType", "TransformResult", "fill", "proxyFetch", "url", "init", "request", "originInfo", "parsePublicKey", "pk", "pkEnc", "spkiEncoded", "util", "validatePublicKey", "type", "_", "debugASN1", "fromBER", "e", "fetchIssuers", "turnstileResponse", "response", "out", "MediaType", "issuers", "key", "createChallenge", "types", "keys", "names", "i", "publicKey", "name", "issuer", "redemptionContext", "tokChl", "TokenChallenge", "privateToken", "WWWAuthenticateHeader", "challenge", "challengeParse", "tokens", "infos", "token", "tokenKeyId", "challengeTrigger", "API_REPLAY_HEADER", "API_REPLAY_URL", "requestID", "wait", "resolve", "tokenRequest", "origin", "pub_verif_token_exports", "result", "client", "validToken", "tokenResponse", "AuthorizationHeader", "oldProtocolResponse", "validOldToken", "tokenParse", "t", "tokenVerify", "responseToken", "challengeDebug", "header_to_token", "notImplemented", "onload"] }