diff --git a/.eslintrc.json b/.eslintrc.json index 0468028..f1aa5f8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,7 +2,8 @@ "env": { "browser": true, "es6": true, - "node": true + "node": true, + "jest/globals": true }, "extends": [ "standard" @@ -17,5 +18,6 @@ }, "rules": { "semi": ["error", "always"] - } + }, + "plugins": ["jest"] } diff --git a/Gruntfile.js b/Gruntfile.js index c488c80..8aca223 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -6,6 +6,12 @@ module.exports = function(grunt) { var config = { pkg: grunt.file.readJSON('package.json'), + run: { + jest: { + cmd: 'jest', + } + }, + eslint: { options: { fix: true @@ -89,6 +95,7 @@ module.exports = function(grunt) { grunt.initConfig(config); + grunt.loadNpmTasks('grunt-run'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-eslint'); grunt.loadNpmTasks('grunt-contrib-uglify'); @@ -96,6 +103,6 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-karma-coveralls'); grunt.loadNpmTasks('grunt-webpack'); - grunt.registerTask('default', ['eslint', 'webpack', 'karma:without_coverage']); - grunt.registerTask('with_coverage', ['eslint', 'webpack', 'karma:with_coverage']); + grunt.registerTask('default', ['eslint', 'run:jest', 'webpack', 'karma:without_coverage']); + grunt.registerTask('with_coverage', ['eslint', 'run:jest', 'webpack', 'karma:with_coverage']); }; diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..88443c4 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,6 @@ +// babel.config.js +module.exports = { + presets: [ + ['@babel/preset-env', { targets: { node: 'current' } }], + ], +}; diff --git a/dist/jose.js b/dist/jose.js index 41e3c4c..425682c 100644 --- a/dist/jose.js +++ b/dist/jose.js @@ -91,13 +91,14 @@ var Jose = /*!**************************!*\ !*** ./lib/jose-core.js ***! \**************************/ -/*! exports provided: crypto, Utils, WebCryptographer, JoseJWE, JoseJWS, setCrypto, caniuse */ +/*! exports provided: crypto, Utils, WebCryptographer, default, Jose, JoseJWE, JoseJWS, setCrypto, caniuse */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* WEBPACK VAR INJECTION */(function(Buffer, global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "crypto", function() { return crypto; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Utils", function() { return Utils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Jose", function() { return Jose; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "JoseJWE", function() { return JoseJWE; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "JoseJWS", function() { return JoseJWS; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCrypto", function() { return setCrypto; }); @@ -157,6 +158,14 @@ var JoseJWS = { Signer: _jose_jws_sign__WEBPACK_IMPORTED_MODULE_3__["Signer"], Verifier: _jose_jws_verify__WEBPACK_IMPORTED_MODULE_4__["Verifier"] }; +var Jose = { + JoseJWS: JoseJWS, + JoseJWE: JoseJWE +}; +/* harmony default export */ __webpack_exports__["default"] = ({ + Jose: Jose +}); + /** * Set crypto provider to use (window.crypto, node-webcrypto-ossl, node-webcrypto-pkcs11 etc.). */ @@ -4576,4 +4585,4 @@ module.exports = g; /***/ }) /******/ }); -//# sourceMappingURL=jose.js.map +//# sourceMappingURL=jose.js.map \ No newline at end of file diff --git a/dist/jose.js.map b/dist/jose.js.map index 62815f1..2b03956 100644 --- a/dist/jose.js.map +++ b/dist/jose.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Jose/webpack/bootstrap","webpack://Jose/./lib/jose-core.js","webpack://Jose/./lib/jose-jwe-decrypt.js","webpack://Jose/./lib/jose-jwe-encrypt.js","webpack://Jose/./lib/jose-jwe-webcryptographer.js","webpack://Jose/./lib/jose-jws-sign.js","webpack://Jose/./lib/jose-jws-verify.js","webpack://Jose/./lib/jose-utils.js","webpack://Jose/./node_modules/base64-js/index.js","webpack://Jose/./node_modules/buffer/index.js","webpack://Jose/./node_modules/ieee754/index.js","webpack://Jose/./node_modules/isarray/index.js","webpack://Jose/(webpack)/buildin/global.js"],"names":["crypto","Utils","JoseUtils","JoseJWE","Encrypter","Decrypter","JoseJWS","Signer","Verifier","setCrypto","cp","window","subtle","webkitSubtle","atob","str","Buffer","from","toString","btoa","buffer","caniuse","r","Promise","reject","prototype","then","all","globalObject","global","getRandomValues","importKey","generateKey","exportKey","wrapKey","unwrapKey","encrypt","decrypt","sign","ArrayBuffer","Uint8Array","Uint32Array","JSON","parse","stringify","cryptographer","keyPromise","headers","base64UrlEncoder","cipherText","parts","split","length","Error","decode","alg","enc","setKeyEncryptionAlgorithm","setContentEncryptionAlgorithm","crit","cekPromise","resolve","encryptedCek","decodeArray","key","unwrapCek","bind","plainTextPromise","userHeaders","k","v","plainText","encryptPlainText","i","getKeyEncryptionAlgorithm","getContentEncryptionAlgorithm","jweProtectedHeader","encode","iv","createIV","aad","header","createCek","cek","wrapCek","encPromise","data","encodeArray","cipher","tag","WebCryptographer","setContentSignAlgorithm","keyEncryption","getCryptoConfig","jweName","content_encryption","content_sign","getSignConfig","jwa_name","Array","iv_bytes","Jose","hack","getCekWorkaround","id","enc_op","extractable","specific_cekBytes","dec_op","len","name","hash","assert","config","auth","aead","tagBytes","additionalData","tagLength","offset","byteLength","slice","keys","splitKey","macKeyPromise","encKeyPromise","cipherTextPromise","encKey","macPromise","truncatedMac","mac","arr1","arr2","macKey","hash1","hash2","dec","buf","compare","payload","signature","keyId","verify","res","kid","verified","rsaKey","n","d","purpose","cekBytesPromise","cekBytes","key_bytes","bytes","truncated_bytes","al","alFull","set","saltLength","namedCurve","publicKey","privateKey","expr","msg","keyPromises","waiting_kid","signer_aads","signer_headers","that","getContentSignAlgorithm","kidPromise","jws","Object","JWS","fromObject","kids","message","protectedHeader","unprotectedHeader","toBeSigned","typ","e","signatures","push","doSign","pl","ph","uh","kps","shift","rv","hasOwnProperty","obj","keyfinder","jwt","jwtRx","exec","forEach","unshift","console","log","promises","check","sig","vr","webCryptographer","importPublicKey","importRsaPublicKey","importEcPublicKey","importPrivateKey","importRsaPrivateKey","importEcPrivateKey","ecKey","usage","getKeyUsageByAlg","jwk","convertRsaKey","rk","ext","isString","String","arrayish","arr","parameters","missing","map","p","join","kty","err","er","intFromHex","parseInt","Base64Url","stripLeadingZeros","arrayFromInt32","test","arrayFromString","c","charCodeAt","arrayFromUtf8String","unescape","encodeURIComponent","stringFromArray","fromCharCode","utf8StringFromArray","decodeURIComponent","escape","isLeadingZero","j","arrayBufferConcat","args","total","arguments","sha256","digest","isCryptoKey","constructor","replace","exports","toByteArray","fromByteArray","lookup","revLookup","Arr","code","getLens","b64","validLen","indexOf","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","maxChunkLength","len2","base64","require","ieee754","isArray","SlowBuffer","INSPECT_MAX_BYTES","TYPED_ARRAY_SUPPORT","undefined","typedArraySupport","kMaxLength","__proto__","foo","subarray","createBuffer","RangeError","arg","encodingOrOffset","allocUnsafe","poolSize","_augment","value","TypeError","fromArrayBuffer","fromString","Symbol","species","defineProperty","configurable","assertSize","size","alloc","fill","encoding","checked","allocUnsafeSlow","string","isEncoding","actual","write","fromArrayLike","array","byteOffset","isBuffer","copy","isnan","type","b","_isBuffer","a","x","y","Math","min","toLowerCase","concat","list","pos","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","swap16","swap32","swap64","apply","equals","inspect","max","match","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","isNaN","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","includes","hexWrite","Number","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","toHex","newBuf","sliceLen","checkOffset","readUIntLE","noAssert","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","floor","objectWriteUInt16","littleEndian","writeUInt16LE","writeUInt16BE","objectWriteUInt32","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","trim","units","Infinity","leadSurrogate","byteArray","hi","lo","src","dst","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","s","NaN","rt","abs","LN2","module","g","Function"],"mappings":"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","file":"jose.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./lib/jose-core.js\");\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as JoseUtils from './jose-utils';\nimport { Encrypter } from './jose-jwe-encrypt';\nimport { Decrypter } from './jose-jwe-decrypt';\nimport { Signer } from './jose-jws-sign';\nimport { Verifier } from './jose-jws-verify';\n\nexport var crypto;\n/**\n * Javascript Object Signing and Encryption library.\n *\n * @author Alok Menghrajani \n */\n\nexport var Utils = JoseUtils;\n\nexport { WebCryptographer } from './jose-jwe-webcryptographer';\n\n/**\n * Initializes a JoseJWE object.\n */\nexport var JoseJWE = {\n Encrypter,\n Decrypter\n};\n\n/**\n * Initializes a JoseJWS object.\n */\nexport var JoseJWS = {\n Signer,\n Verifier\n};\n\n/**\n * Set crypto provider to use (window.crypto, node-webcrypto-ossl, node-webcrypto-pkcs11 etc.).\n */\nexport var setCrypto = function (cp) {\n crypto = cp;\n};\n\n/**\n * Default to the global \"crypto\" variable\n */\nif (typeof window !== 'undefined') {\n if (typeof window.crypto !== 'undefined') {\n setCrypto(window.crypto);\n if (!crypto.subtle) {\n crypto.subtle = crypto.webkitSubtle;\n }\n }\n}\n\n/**\n * Use Node versions of atob, btoa functions outside the browser\n */\nif (typeof atob !== 'function') {\n // eslint-disable-next-line no-global-assign\n atob = (str) => {\n return Buffer.from(str, 'base64').toString('binary');\n };\n}\n\nif (typeof btoa !== 'function') {\n // eslint-disable-next-line no-global-assign\n btoa = (str) => {\n var buffer;\n if (str instanceof Buffer) {\n buffer = str;\n } else {\n buffer = Buffer.from(str.toString(), 'binary');\n }\n return buffer.toString('base64');\n };\n}\n\n/**\n * Checks if we have all the required APIs.\n *\n * It might make sense to take a Cryptographer and delegate some of the checks\n * to the cryptographer. I however wanted to keep things simple, so I put all\n * the checks here for now.\n *\n * This list is generated manually and needs to be kept up-to-date.\n *\n * Casual testing shows that:\n * - things work in Chrome 40.0.2214.115\n * - things work in Firefox 35.0.1\n * - Safari 7.1.3 doesn't support JWK keys.\n * - Internet Explorer doesn't support Promises.\n *\n * Note: We don't check if the browser supports specific crypto operations.\n * I.e. it's possible for this function to return true, but encryption or\n * decryption to subsequently fail because the browser does not support a\n * given encryption, decryption, key wrapping, key unwrapping or hmac\n * operation.\n *\n * @return bool\n */\nexport const caniuse = () => {\n var r = true;\n\n // Promises/A+ (https://promisesaplus.com/)\n r = r && (typeof Promise === 'function');\n r = r && (typeof Promise.reject === 'function');\n r = r && (typeof Promise.prototype.then === 'function');\n r = r && (typeof Promise.all === 'function');\n\n const globalObject = window || global;\n\n // Crypto (http://www.w3.org/TR/WebCryptoAPI/)\n r = r && (typeof globalObject.crypto === 'object');\n r = r && (typeof globalObject.crypto.subtle === 'object');\n r = r && (typeof globalObject.crypto.getRandomValues === 'function');\n r = r && (typeof globalObject.crypto.subtle.importKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.generateKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.exportKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.wrapKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.unwrapKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.encrypt === 'function');\n r = r && (typeof globalObject.crypto.subtle.decrypt === 'function');\n r = r && (typeof globalObject.crypto.subtle.sign === 'function');\n\n // ArrayBuffer (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-arraybuffer-constructor)\n r = r && (typeof ArrayBuffer === 'function');\n r = r && (typeof Uint8Array === 'function' || typeof Uint8Array === 'object'); // Safari uses \"object\"\n r = r && (typeof Uint32Array === 'function' || typeof Uint32Array === 'object'); // Safari uses \"object\"\n // skipping Uint32Array.prototype.buffer because https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-%typedarrayprototype%-object\n\n // JSON (http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3)\n r = r && (typeof JSON === 'object');\n r = r && (typeof JSON.parse === 'function');\n r = r && (typeof JSON.stringify === 'function');\n\n // Base64 (http://www.w3.org/TR/html5/webappapis.html#dom-windowbase64-atob)\n r = r && (typeof atob === 'function');\n r = r && (typeof btoa === 'function');\n\n // skipping Array functions (map, join, push, length, etc.)\n // skipping String functions (split, charCodeAt, fromCharCode, replace, etc.)\n // skipping regexp.test and parseInt\n\n return r;\n};\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Utils from './jose-utils';\n\n/**\n * Handles decryption.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent). Keep\n * in mind that decryption mutates the cryptographer.\n * @param keyPromise Promise, either RSA or shared key\n */\nexport class Decrypter {\n constructor (cryptographer, keyPromise) {\n this.cryptographer = cryptographer;\n this.keyPromise = keyPromise;\n this.headers = {};\n this.base64UrlEncoder = new Utils.Base64Url();\n }\n\n getHeaders () {\n return this.headers;\n }\n\n /**\n * Performs decryption.\n *\n * @param cipherText String\n * @return Promise\n */\n decrypt (cipherText) {\n // Split cipherText in 5 parts\n var parts = cipherText.split('.');\n if (parts.length !== 5) {\n return Promise.reject(Error('decrypt: invalid input'));\n }\n\n // part 1: header\n this.headers = JSON.parse(this.base64UrlEncoder.decode(parts[0]));\n if (!this.headers.alg) {\n return Promise.reject(Error('decrypt: missing alg'));\n }\n if (!this.headers.enc) {\n return Promise.reject(Error('decrypt: missing enc'));\n }\n this.cryptographer.setKeyEncryptionAlgorithm(this.headers.alg);\n this.cryptographer.setContentEncryptionAlgorithm(this.headers.enc);\n\n if (this.headers.crit) {\n // We don't support the crit header\n return Promise.reject(Error('decrypt: crit is not supported'));\n }\n\n var cekPromise;\n\n if (this.headers.alg === 'dir') {\n // with direct mode, we already have the cek\n cekPromise = Promise.resolve(this.keyPromise);\n } else {\n // part 2: decrypt the CEK\n // In some modes (e.g. RSA-PKCS1v1.5), you must take precautions to prevent\n // chosen-ciphertext attacks as described in RFC 3218, \"Preventing\n // the Million Message Attack on Cryptographic Message Syntax\". We currently\n // only support RSA-OAEP, so we don't generate a key if unwrapping fails.\n var encryptedCek = this.base64UrlEncoder.decodeArray(parts[1]);\n cekPromise = this.keyPromise.then(function (key) {\n return this.cryptographer.unwrapCek(encryptedCek, key);\n }.bind(this));\n }\n\n // part 3: decrypt the cipher text\n var plainTextPromise = this.cryptographer.decrypt(\n cekPromise,\n Utils.arrayFromString(parts[0]),\n this.base64UrlEncoder.decodeArray(parts[2]),\n this.base64UrlEncoder.decodeArray(parts[3]),\n this.base64UrlEncoder.decodeArray(parts[4]));\n\n return plainTextPromise.then(Utils.utf8StringFromArray);\n }\n}\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as Utils from './jose-utils';\n\n/**\n * Handles encryption.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent).\n * @param keyPromise Promise, either RSA or shared key\n */\nexport class Encrypter {\n constructor (cryptographer, keyPromise) {\n this.cryptographer = cryptographer;\n this.keyPromise = keyPromise;\n this.userHeaders = {};\n }\n\n /**\n * Adds a key/value pair which will be included in the header.\n *\n * The data lives in plaintext (an attacker can read the header) but is tamper\n * proof (an attacker cannot modify the header).\n *\n * Note: some headers have semantic implications. E.g. if you set the \"zip\"\n * header, you are responsible for properly compressing plainText before\n * calling encrypt().\n *\n * @param k String\n * @param v String\n */\n addHeader (k, v) {\n this.userHeaders[k] = v;\n }\n\n /**\n * Performs encryption.\n *\n * @param plainText utf-8 string\n * @return Promise\n */\n encrypt (plainText) {\n /**\n * Encrypts plainText with CEK.\n *\n * @param cekPromise Promise\n * @param plainText string\n * @return Promise\n */\n var encryptPlainText = function (cekPromise, plainText) {\n // Create header\n var headers = {};\n for (var i in this.userHeaders) {\n headers[i] = this.userHeaders[i];\n }\n headers.alg = this.cryptographer.getKeyEncryptionAlgorithm();\n headers.enc = this.cryptographer.getContentEncryptionAlgorithm();\n var jweProtectedHeader = new Utils.Base64Url().encode(JSON.stringify(headers));\n\n // Create the IV\n var iv = this.cryptographer.createIV();\n\n // Create the AAD\n var aad = Utils.arrayFromString(jweProtectedHeader);\n plainText = Utils.arrayFromUtf8String(plainText);\n\n return this.cryptographer.encrypt(iv, aad, cekPromise, plainText).then(function (r) {\n r.header = jweProtectedHeader;\n r.iv = iv;\n return r;\n });\n };\n\n var cekPromise, encryptedCek;\n\n if (this.cryptographer.getKeyEncryptionAlgorithm() === 'dir') {\n // with direct encryption, this.keyPromise provides the cek\n // and encryptedCek is empty\n cekPromise = Promise.resolve(this.keyPromise);\n encryptedCek = [];\n } else {\n // Create a CEK key\n cekPromise = this.cryptographer.createCek();\n\n // Key & Cek allows us to create the encryptedCek\n encryptedCek = Promise.all([this.keyPromise, cekPromise]).then(function (all) {\n var key = all[0];\n var cek = all[1];\n return this.cryptographer.wrapCek(cek, key);\n }.bind(this));\n }\n\n // Cek allows us to encrypy the plain text\n var encPromise = encryptPlainText.bind(this, cekPromise, plainText)();\n\n // Once we have all the promises, we can base64 encode all the pieces.\n return Promise.all([encryptedCek, encPromise]).then(function (all) {\n var encryptedCek = all[0];\n var data = all[1];\n var base64UrlEncoder = new Utils.Base64Url();\n return data.header + '.' +\n base64UrlEncoder.encodeArray(encryptedCek) + '.' +\n base64UrlEncoder.encodeArray(data.iv) + '.' +\n base64UrlEncoder.encodeArray(data.cipher) + '.' +\n base64UrlEncoder.encodeArray(data.tag);\n });\n }\n}\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// TODO(eslint): figure out how to properly include Jose or expose crypto object\n/* global Jose */\n\nimport * as Utils from './jose-utils';\n\n/**\n * The WebCryptographer uses http://www.w3.org/TR/WebCryptoAPI/ to perform\n * various crypto operations. In theory, this should help build the library with\n * different underlying crypto APIs. I'm however unclear if we'll run into code\n * duplication or callback vs Promise based API issues.\n */\nexport class WebCryptographer {\n constructor () {\n this.setKeyEncryptionAlgorithm('RSA-OAEP');\n this.setContentEncryptionAlgorithm('A256GCM');\n this.setContentSignAlgorithm('RS256');\n }\n\n /**\n * Overrides the default key encryption algorithm\n * @param alg string\n */\n setKeyEncryptionAlgorithm (alg) {\n this.keyEncryption = this.getCryptoConfig(alg);\n }\n\n getKeyEncryptionAlgorithm () {\n return this.keyEncryption.jweName;\n }\n\n /**\n * Overrides the default content encryption algorithm\n * @param alg string\n */\n setContentEncryptionAlgorithm (alg) {\n this.content_encryption = this.getCryptoConfig(alg);\n }\n\n getContentEncryptionAlgorithm () {\n return this.content_encryption.jweName;\n }\n\n /**\n * Overrides the default content sign algorithm\n * @param alg string\n */\n setContentSignAlgorithm (alg) {\n this.content_sign = this.getSignConfig(alg);\n }\n\n getContentSignAlgorithm () {\n return this.content_sign.jwa_name;\n }\n\n /**\n * Generates an IV.\n * This function mainly exists so that it can be mocked for testing purpose.\n *\n * @return Uint8Array with random bytes\n */\n createIV () {\n var iv = new Uint8Array(new Array(this.content_encryption.iv_bytes));\n return Jose.crypto.getRandomValues(iv);\n }\n\n /**\n * Creates a random content encryption key.\n * This function mainly exists so that it can be mocked for testing purpose.\n *\n * @return Promise\n */\n createCek () {\n var hack = this.getCekWorkaround(this.content_encryption);\n return Jose.crypto.subtle.generateKey(hack.id, true, hack.enc_op);\n }\n\n wrapCek (cek, key) {\n return Jose.crypto.subtle.wrapKey('raw', cek, key, this.keyEncryption.id);\n }\n\n unwrapCek (cek, key) {\n var hack = this.getCekWorkaround(this.content_encryption);\n var extractable = (this.content_encryption.specific_cekBytes > 0);\n var keyEncryption = this.keyEncryption.id;\n\n return Jose.crypto.subtle.unwrapKey('raw', cek, key, keyEncryption, hack.id, extractable, hack.dec_op);\n }\n\n /**\n * Returns algorithm and operation needed to create a CEK.\n *\n * In some cases, e.g. A128CBC-HS256, the CEK gets split into two keys. The Web\n * Crypto API does not allow us to generate an arbitrary number of bytes and\n * then create a CryptoKey without any associated algorithm. We therefore piggy\n * back on AES-CBS and HMAC which allows the creation of CEKs of size 16, 32, 64\n * and 128 bytes.\n */\n getCekWorkaround (alg) {\n var len = alg.specific_cekBytes;\n if (len) {\n if (len === 16) {\n return { id: { name: 'AES-CBC', length: 128 }, enc_op: ['encrypt'], dec_op: ['decrypt'] };\n } else if (len === 32) {\n return { id: { name: 'AES-CBC', length: 256 }, enc_op: ['encrypt'], dec_op: ['decrypt'] };\n } else if (len === 64) {\n return { id: { name: 'HMAC', hash: { name: 'SHA-256' } }, enc_op: ['sign'], dec_op: ['verify'] };\n } else if (len === 128) {\n return { id: { name: 'HMAC', hash: { name: 'SHA-384' } }, enc_op: ['sign'], dec_op: ['verify'] };\n } else {\n this.assert(false, 'getCekWorkaround: invalid len');\n }\n }\n return { id: alg.id, enc_op: ['encrypt'], dec_op: ['decrypt'] };\n }\n\n /**\n * Encrypts plainText with cek.\n *\n * @param iv Uint8Array\n * @param aad Uint8Array\n * @param cekPromise Promise\n * @param plainText Uint8Array\n * @return Promise\n */\n encrypt (iv, aad, cekPromise, plainText) {\n var config = this.content_encryption;\n if (iv.length !== config.iv_bytes) {\n return Promise.reject(Error('invalid IV length'));\n }\n if (config.auth.aead) {\n var tagBytes = config.auth.tagBytes;\n\n var enc = {\n name: config.id.name,\n iv: iv,\n additionalData: aad,\n tagLength: tagBytes * 8\n };\n\n return cekPromise.then(function (cek) {\n return Jose.crypto.subtle.encrypt(enc, cek, plainText).then(function (cipherText) {\n var offset = cipherText.byteLength - tagBytes;\n return {\n cipher: cipherText.slice(0, offset),\n tag: cipherText.slice(offset)\n };\n });\n });\n } else {\n var keys = this.splitKey(config, cekPromise, ['encrypt']);\n var macKeyPromise = keys[0];\n var encKeyPromise = keys[1];\n\n // Encrypt the plain text\n var cipherTextPromise = encKeyPromise.then(function (encKey) {\n var enc = {\n name: config.id.name,\n iv: iv\n };\n return Jose.crypto.subtle.encrypt(enc, encKey, plainText);\n });\n\n // compute MAC\n var macPromise = cipherTextPromise.then((cipherText) => {\n return this.truncatedMac(\n config,\n macKeyPromise,\n aad,\n iv,\n cipherText);\n });\n\n return Promise.all([cipherTextPromise, macPromise]).then(function (all) {\n var cipherText = all[0];\n var mac = all[1];\n return {\n cipher: cipherText,\n tag: mac\n };\n });\n }\n }\n\n /**\n * Compares two Uint8Arrays in constant time.\n *\n * @return Promise\n */\n compare (config, macKeyPromise, arr1, arr2) {\n this.assert(arr1 instanceof Uint8Array, 'compare: invalid input');\n this.assert(arr2 instanceof Uint8Array, 'compare: invalid input');\n\n return macKeyPromise.then(function (macKey) {\n var hash1 = Jose.crypto.subtle.sign(config.auth.id, macKey, arr1);\n var hash2 = Jose.crypto.subtle.sign(config.auth.id, macKey, arr2);\n return Promise.all([hash1, hash2]).then(function (all) {\n var hash1 = new Uint8Array(all[0]);\n var hash2 = new Uint8Array(all[1]);\n if (hash1.length !== hash2.length) {\n throw new Error('compare failed');\n }\n for (var i = 0; i < hash1.length; i++) {\n if (hash1[i] !== hash2[i]) {\n throw new Error('compare failed');\n }\n }\n return Promise.resolve(null);\n });\n });\n }\n\n /**\n * Decrypts cipherText with cek. Validates the tag.\n *\n * @param cekPromise Promise\n * @param aad protected header\n * @param iv IV\n * @param cipherText text to be decrypted\n * @param tag to be verified\n * @return Promise\n */\n decrypt (cekPromise, aad, iv, cipherText, tag) {\n if (iv.length !== this.content_encryption.iv_bytes) {\n return Promise.reject(Error('decryptCiphertext: invalid IV'));\n }\n\n var config = this.content_encryption;\n if (config.auth.aead) {\n var dec = {\n name: config.id.name,\n iv: iv,\n additionalData: aad,\n tagLength: config.auth.tagBytes * 8\n };\n\n return cekPromise.then(function (cek) {\n var buf = Utils.arrayBufferConcat(cipherText, tag);\n return Jose.crypto.subtle.decrypt(dec, cek, buf);\n });\n } else {\n var keys = this.splitKey(config, cekPromise, ['decrypt']);\n var macKeyPromise = keys[0];\n var encKeyPromise = keys[1];\n\n // Validate the MAC\n var macPromise = this.truncatedMac(\n config,\n macKeyPromise,\n aad,\n iv,\n cipherText);\n\n return Promise.all([encKeyPromise, macPromise]).then((all) => {\n var encKey = all[0];\n var mac = all[1];\n\n return this.compare(config, macKeyPromise, new Uint8Array(mac), tag).then(() => {\n var dec = {\n name: config.id.name,\n iv: iv\n };\n return Jose.crypto.subtle.decrypt(dec, encKey, cipherText);\n }).catch(() => {\n return Promise.reject(Error('decryptCiphertext: MAC failed.'));\n });\n });\n }\n }\n\n /**\n * Signs plainText.\n *\n * @param aad json\n * @param payload String or json\n * @param keyPromise Promise\n * @return Promise\n */\n sign (aad, payload, keyPromise) {\n var config = this.content_sign;\n\n if (aad.alg) {\n config = this.getSignConfig(aad.alg);\n }\n\n // Encrypt the plain text\n return keyPromise.then(function (key) {\n var base64UrlEncoder = new Utils.Base64Url();\n return Jose.crypto.subtle.sign(config.id, key, Utils.arrayFromString(base64UrlEncoder.encode(JSON.stringify(aad)) + '.' + base64UrlEncoder.encodeArray(payload)));\n });\n }\n\n /**\n * Verify JWS.\n *\n * @param payload Base64Url encoded payload\n * @param aad String Base64Url encoded JSON representation of the protected JWS header\n * @param signature Uint8Array containing the signature\n * @param keyPromise Promise\n * @param keyId value of the kid JoseHeader, it'll be passed as part of the result to the returned promise\n * @return Promise\n */\n verify (aad, payload, signature, keyPromise, keyId) {\n var config = this.content_sign;\n\n return keyPromise.then(function (key) {\n return Jose.crypto.subtle.verify(config.id, key, signature, Utils.arrayFromString(aad + '.' + payload)).then(function (res) {\n return { kid: keyId, verified: res };\n });\n });\n }\n\n keyId (rsaKey) {\n return Utils.sha256(rsaKey.n + '+' + rsaKey.d);\n }\n\n /**\n * Splits a CEK into two pieces: a MAC key and an ENC key.\n *\n * This code is structured around the fact that the crypto API does not provide\n * a way to validate truncated MACs. The MAC key is therefore always imported to\n * sign data.\n *\n * @param config (used for key lengths & algorithms)\n * @param cekPromise Promise CEK key to split\n * @param purpose Array usages of the imported key\n * @return [Promise, Promise]\n */\n splitKey (config, cekPromise, purpose) {\n // We need to split the CEK key into a MAC and ENC keys\n var cekBytesPromise = cekPromise.then(function (cek) {\n return Jose.crypto.subtle.exportKey('raw', cek);\n });\n var macKeyPromise = cekBytesPromise.then(function (cekBytes) {\n if (cekBytes.byteLength * 8 !== config.id.length + config.auth.key_bytes * 8) {\n return Promise.reject(Error('encryptPlainText: incorrect cek length'));\n }\n var bytes = cekBytes.slice(0, config.auth.key_bytes);\n return Jose.crypto.subtle.importKey('raw', bytes, config.auth.id, false, ['sign']);\n });\n var encKeyPromise = cekBytesPromise.then(function (cekBytes) {\n if (cekBytes.byteLength * 8 !== config.id.length + config.auth.key_bytes * 8) {\n return Promise.reject(Error('encryptPlainText: incorrect cek length'));\n }\n var bytes = cekBytes.slice(config.auth.key_bytes);\n return Jose.crypto.subtle.importKey('raw', bytes, config.id, false, purpose);\n });\n return [macKeyPromise, encKeyPromise];\n }\n\n /**\n * Converts the Jose web algorithms into data which is\n * useful for the Web Crypto API.\n *\n * length = in bits\n * bytes = in bytes\n */\n getCryptoConfig (alg) {\n switch (alg) {\n // Key encryption\n case 'RSA-OAEP':\n return {\n jweName: 'RSA-OAEP',\n id: { name: 'RSA-OAEP', hash: { name: 'SHA-1' } }\n };\n case 'RSA-OAEP-256':\n return {\n jweName: 'RSA-OAEP-256',\n id: { name: 'RSA-OAEP', hash: { name: 'SHA-256' } }\n };\n case 'A128KW':\n return {\n jweName: 'A128KW',\n id: { name: 'AES-KW', length: 128 }\n };\n case 'A256KW':\n return {\n jweName: 'A256KW',\n id: { name: 'AES-KW', length: 256 }\n };\n case 'dir':\n return {\n jweName: 'dir'\n };\n\n // Content encryption\n case 'A128CBC-HS256':\n return {\n jweName: 'A128CBC-HS256',\n id: { name: 'AES-CBC', length: 128 },\n iv_bytes: 16,\n specific_cekBytes: 32,\n auth: {\n key_bytes: 16,\n id: { name: 'HMAC', hash: { name: 'SHA-256' } },\n truncated_bytes: 16\n }\n };\n case 'A256CBC-HS512':\n return {\n jweName: 'A256CBC-HS512',\n id: { name: 'AES-CBC', length: 256 },\n iv_bytes: 16,\n specific_cekBytes: 64,\n auth: {\n key_bytes: 32,\n id: { name: 'HMAC', hash: { name: 'SHA-512' } },\n truncated_bytes: 32\n }\n };\n case 'A128GCM':\n return {\n jweName: 'A128GCM',\n id: { name: 'AES-GCM', length: 128 },\n iv_bytes: 12,\n auth: {\n aead: true,\n tagBytes: 16\n }\n };\n case 'A256GCM':\n return {\n jweName: 'A256GCM',\n id: { name: 'AES-GCM', length: 256 },\n iv_bytes: 12,\n auth: {\n aead: true,\n tagBytes: 16\n }\n };\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n }\n\n /**\n * Computes a truncated MAC.\n *\n * @param config configuration\n * @param macKeyPromise Promise mac key\n * @param aad Uint8Array\n * @param iv Uint8Array\n * @param cipherText Uint8Array\n * @return Promise truncated MAC\n */\n truncatedMac (config, macKeyPromise, aad, iv, cipherText) {\n return macKeyPromise.then(function (macKey) {\n var al = new Uint8Array(Utils.arrayFromInt32(aad.length * 8));\n var alFull = new Uint8Array(8);\n alFull.set(al, 4);\n var buf = Utils.arrayBufferConcat(aad, iv, cipherText, alFull);\n return Jose.crypto.subtle.sign(config.auth.id, macKey, buf).then(function (bytes) {\n return bytes.slice(0, config.auth.truncated_bytes);\n });\n });\n }\n\n /**\n * Converts the Jose web algorithms into data which is\n * useful for the Web Crypto API.\n */\n getSignConfig (alg) {\n switch (alg) {\n case 'RS256':\n return {\n jwa_name: 'RS256',\n id: { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-256' } }\n };\n case 'RS384':\n return {\n jwa_name: 'RS384',\n id: { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-384' } }\n };\n case 'RS512':\n return {\n jwa_name: 'RS512',\n id: { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-512' } }\n };\n case 'PS256':\n return {\n jwa_name: 'PS256',\n id: { name: 'RSA-PSS', hash: { name: 'SHA-256' }, saltLength: 20 }\n };\n case 'PS384':\n return {\n jwa_name: 'PS384',\n id: { name: 'RSA-PSS', hash: { name: 'SHA-384' }, saltLength: 20 }\n };\n case 'PS512':\n return {\n jwa_name: 'PS512',\n id: { name: 'RSA-PSS', hash: { name: 'SHA-512' }, saltLength: 20 }\n };\n case 'HS256':\n return {\n jwa_name: 'HS256',\n id: { name: 'HMAC', hash: { name: 'SHA-256' } }\n };\n case 'HS384':\n return {\n jwa_name: 'HS384',\n id: { name: 'HMAC', hash: { name: 'SHA-384' } }\n };\n case 'HS512':\n return {\n jwa_name: 'HS512',\n id: { name: 'HMAC', hash: { name: 'SHA-512' } }\n };\n case 'ES256':\n return {\n jwa_name: 'ES256',\n id: { name: 'ECDSA', namedCurve: 'P-256', hash: { name: 'SHA-256' } }\n };\n case 'ES384':\n return {\n jwa_name: 'ES384',\n id: { name: 'ECDSA', namedCurve: 'P-384', hash: { name: 'SHA-384' } }\n };\n case 'ES512':\n return {\n jwa_name: 'ES512',\n id: { name: 'ECDSA', namedCurve: 'P-521', hash: { name: 'SHA-512' } }\n };\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n }\n\n /**\n * Derives key usage from algorithm's name\n *\n * @param alg String algorithm name\n * @returns {*}\n */\n getKeyUsageByAlg (alg) {\n switch (alg) {\n // signature\n case 'RS256':\n case 'RS384':\n case 'RS512':\n case 'PS256':\n case 'PS384':\n case 'PS512':\n case 'HS256':\n case 'HS384':\n case 'HS512':\n case 'ES256':\n case 'ES384':\n case 'ES512':\n case 'ES256K':\n return {\n publicKey: 'verify',\n privateKey: 'sign'\n };\n // key encryption\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'A128KW':\n case 'A256KW':\n return {\n publicKey: 'wrapKey',\n privateKey: 'unwrapKey'\n };\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n }\n\n /**\n * Feel free to override this function.\n */\n assert (expr, msg) {\n if (!expr) {\n throw new Error(msg);\n }\n }\n}\n","/* -\n * Copyright 2015 Peculiar Ventures\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Utils from './jose-utils';\n\n/**\n * Handles decryption.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent). Keep\n * in mind that decryption mutates the cryptographer.\n *\n * @author Patrizio Bruno \n */\nexport class Signer {\n constructor (cryptographer) {\n this.cryptographer = cryptographer;\n\n this.keyPromises = {};\n this.waiting_kid = 0;\n this.headers = {};\n this.signer_aads = {};\n this.signer_headers = {};\n }\n\n /**\n * Adds a signer to JoseJWS instance.\n *\n * @param key private key in json format. Parameters can be base64\n * encoded, strings or number (for e.g. 'e'), or CryptoKey.\n * @param keyId a string identifying the key. OPTIONAL\n * @param aad Object protected header\n * @param header Object unprotected header\n */\n addSigner (key, keyId, aad, header) {\n var that = this;\n var keyPromise;\n if (Utils.isCryptoKey(key)) {\n keyPromise = new Promise(function (resolve) {\n resolve(key);\n });\n } else {\n var alg;\n if (aad && aad.alg) {\n alg = aad.alg;\n } else {\n alg = that.cryptographer.getContentSignAlgorithm();\n }\n keyPromise = Utils.importPrivateKey(key, alg, 'sign');\n }\n\n var kidPromise;\n if (keyId) {\n kidPromise = new Promise(function (resolve) {\n resolve(keyId);\n });\n } else if (Utils.isCryptoKey(key)) {\n throw new Error('keyId is a mandatory argument when the key is a CryptoKey');\n } else {\n kidPromise = this.cryptographer.keyId(key);\n }\n\n that.waiting_kid++;\n\n return kidPromise.then(function (kid) {\n that.keyPromises[kid] = keyPromise;\n that.waiting_kid--;\n if (aad) {\n that.signer_aads[kid] = aad;\n }\n if (header) {\n that.signer_headers[kid] = header;\n }\n return kid;\n });\n }\n\n /**\n * Adds a signature to a JWS object\n * @param jws JWS Object to be signed or its representation\n * @param aad Object protected header\n * @param header Object unprotected header\n * @return Promise\n */\n addSignature (jws, aad, header) {\n if (Utils.isString(jws)) {\n jws = JSON.parse(jws);\n }\n\n if (jws.payload && Utils.isString(jws.payload) &&\n jws.protected && Utils.isString(jws.protected) &&\n jws.header && jws.header instanceof Object &&\n jws.signature && Utils.isString(jws.signature)) {\n return this.sign(JWS.fromObject(jws), aad, header);\n } else {\n throw new Error('JWS is not a valid JWS object');\n }\n }\n\n /**\n * Computes signature.\n *\n * @param payload JWS Object or utf-8 string to be signed\n * @param aad Object protected header\n * @param header Object unprotected header\n * @return Promise\n */\n sign (payload, aad, header) {\n var that = this;\n var kids = [];\n\n if (Object.keys(that.keyPromises).length === 0) {\n throw new Error('No signers defined. At least one is required to sign the JWS.');\n }\n\n if (that.waiting_kid) {\n throw new Error('still generating key IDs');\n }\n\n function sign (message, protectedHeader, unprotectedHeader, keyPromise, kid) {\n var toBeSigned;\n\n if (!protectedHeader) {\n protectedHeader = {};\n }\n\n if (!protectedHeader.alg) {\n protectedHeader.alg = that.cryptographer.getContentSignAlgorithm();\n protectedHeader.typ = 'JWT';\n }\n\n if (!protectedHeader.kid) {\n protectedHeader.kid = kid;\n }\n\n if (Utils.isString(message)) {\n toBeSigned = Utils.arrayFromUtf8String(message);\n } else {\n try {\n toBeSigned = Utils.arrayish(message);\n } catch (e) {\n if (message instanceof JWS) {\n toBeSigned = Utils.arrayFromString(new Utils.Base64Url().decode(message.payload));\n } else if (message instanceof Object) {\n toBeSigned = Utils.arrayFromUtf8String(JSON.stringify(message));\n } else {\n throw new Error('cannot sign this message');\n }\n }\n }\n\n return that.cryptographer.sign(protectedHeader, toBeSigned, keyPromise).then(function (signature) {\n var jws = new JWS(protectedHeader, unprotectedHeader, toBeSigned, signature);\n if (message instanceof JWS) {\n delete jws.payload;\n if (!message.signatures) {\n message.signatures = [jws];\n } else {\n message.signatures.push(jws);\n }\n return message;\n }\n return jws;\n });\n }\n\n function doSign (pl, ph, uh, kps, kids) {\n if (kids.length) {\n var kid = kids.shift();\n var rv = sign(pl, that.signer_aads[kid] || ph, that.signer_headers[kid] || uh, kps[kid], kid);\n if (kids.length) {\n rv = rv.then(function (jws) {\n return doSign(jws, null, null, kps, kids);\n });\n }\n return rv;\n }\n }\n\n for (var kid in that.keyPromises) {\n if (that.keyPromises.hasOwnProperty(kid)) {\n kids.push(kid);\n }\n }\n return doSign(payload, aad, header, that.keyPromises, kids);\n }\n}\n\n/**\n * Initialize a JWS object.\n *\n * @param protectedHeader protected header (JS object)\n * @param payload Uint8Array payload to be signed\n * @param signature ArrayBuffer signature of the payload\n * @param header unprotected header (JS object)\n *\n * @constructor\n */\nexport class JWS {\n constructor (protectedHeader, header, payload, signature) {\n this.header = header;\n var base64UrlEncoder = new Utils.Base64Url();\n this.payload = base64UrlEncoder.encodeArray(payload);\n if (signature) {\n this.signature = base64UrlEncoder.encodeArray(signature);\n }\n this.protected = base64UrlEncoder.encode(JSON.stringify(protectedHeader));\n }\n\n fromObject (obj) {\n var rv = new JWS(obj.protected, obj.header, obj.payload, null);\n rv.signature = obj.signature;\n rv.signatures = obj.signatures;\n return rv;\n }\n\n /**\n * Serialize a JWS object using the JSON serialization format\n *\n * @returns {Object} a copy of this\n */\n JsonSerialize () {\n return JSON.stringify(this);\n }\n\n /**\n * Serialize a JWS object using the Compact Serialization Format\n *\n * @returns {string} BASE64URL(UTF8(PROTECTED HEADER)).BASE64URL(PAYLOAD).BASE64URL(SIGNATURE)\n */\n CompactSerialize () {\n return this.protected + '.' + this.payload + '.' + this.signature;\n }\n}\n","/* -\n * Copyright 2015 Peculiar Ventures\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Utils from './jose-utils';\n\n/**\n * Handles signature verification.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent). Keep\n * in mind that decryption mutates the cryptographer.\n * @param message a JWS message\n * @param keyfinder (optional) a function returning a Promise given\n * a key id\n *\n * @author Patrizio Bruno \n */\nexport class Verifier {\n constructor (cryptographer, message, keyfinder) {\n var that = this;\n var alg;\n var jwt;\n var aad;\n var header;\n var payload;\n var signatures;\n var protectedHeader;\n var jwtRx = /^([0-9a-z_-]+)\\.([0-9a-z_-]+)\\.([0-9a-z_-]+)$/i;\n\n that.cryptographer = cryptographer;\n\n alg = cryptographer.getContentSignAlgorithm();\n\n if (Utils.isString(message)) {\n if ((jwt = jwtRx.exec(message))) {\n if (jwt.length !== 4) {\n throw new Error('wrong JWS compact serialization format');\n }\n\n message = {\n protected: jwt[1],\n payload: jwt[2],\n signature: jwt[3]\n };\n } else {\n message = JSON.parse(message);\n }\n } else if (typeof message !== 'object') {\n throw new Error('data format not supported');\n }\n\n aad = message.protected;\n header = message.header;\n payload = message.payload;\n signatures = message.signatures instanceof Array ? message.signatures.slice(0) : [];\n\n signatures.forEach(function (sign) {\n sign.aad = sign.protected;\n sign.protected = JSON.parse(new Utils.Base64Url().decode(sign.protected));\n });\n\n that.aad = aad;\n protectedHeader = new Utils.Base64Url().decode(aad);\n try {\n protectedHeader = JSON.parse(protectedHeader);\n } catch (e) {\n }\n\n if (!protectedHeader && !header) {\n throw new Error('at least one header is required');\n }\n\n if (!protectedHeader.alg) {\n throw new Error(\"'alg' is a mandatory header\");\n }\n\n if (protectedHeader.alg !== alg) {\n throw new Error(\"the alg header '\" + protectedHeader.alg + \"' doesn't match the requested algorithm '\" + alg + \"'\");\n }\n\n if (protectedHeader && protectedHeader.typ && protectedHeader.typ !== 'JWT') {\n throw new Error(\"typ '\" + protectedHeader.typ + \"' not supported\");\n }\n\n if (message.signature) {\n signatures.unshift({\n aad: aad,\n protected: protectedHeader,\n header: header,\n signature: message.signature\n });\n }\n\n that.signatures = [];\n for (var i = 0; i < signatures.length; i++) {\n that.signatures[i] = JSON.parse(JSON.stringify(signatures[i]));\n that.signatures[i].signature = Utils.arrayFromString(new Utils.Base64Url().decode(signatures[i].signature));\n }\n\n that.payload = payload;\n\n that.keyPromises = {};\n that.waiting_kid = 0;\n\n if (keyfinder) {\n that.keyfinder = keyfinder;\n }\n }\n\n /**\n * Add supported recipients to verify multiple signatures\n *\n * @param key public key in json format. Parameters can be base64\n * encoded, strings or number (for 'e'), or CryptoKey.\n * @param keyId a string identifying the key. OPTIONAL\n * @param alg String signature algorithm. OPTIONAL\n * @returns Promise a Promise of a key id\n */\n addRecipient (key, keyId, alg) {\n var that = this;\n var kidPromise;\n var keyPromise;\n if (Utils.isCryptoKey(key)) {\n keyPromise = new Promise(function (resolve) { resolve(key); });\n } else {\n keyPromise = Utils.importPublicKey(key, alg || that.cryptographer.getContentSignAlgorithm(), 'verify');\n }\n\n if (keyId) {\n kidPromise = new Promise(function (resolve) {\n resolve(keyId);\n });\n } else if (Utils.isCryptoKey(key)) {\n throw new Error('keyId is a mandatory argument when the key is a CryptoKey');\n } else {\n console.log(\"it's unsafe to omit a keyId\");\n kidPromise = this.cryptographer.keyId(key);\n }\n\n that.waiting_kid++;\n\n return kidPromise.then(function (kid) {\n that.keyPromises[kid] = keyPromise;\n that.waiting_kid--;\n return kid;\n });\n }\n\n /**\n * Verifies a JWS signature\n *\n * @returns Promise a Promise of an array of objects { kid: string, verified: bool, payload?: string }\n *\n * payload is only populated and usable if verified is true\n */\n verify () {\n var that = this;\n var signatures = that.signatures;\n var keyPromises = that.keyPromises;\n var keyfinder = that.keyfinder;\n var promises = [];\n var check = !!keyfinder || Object.keys(that.keyPromises).length > 0;\n\n if (!check) {\n throw new Error('No recipients defined. At least one is required to verify the JWS.');\n }\n\n if (that.waiting_kid) {\n throw new Error('still generating key IDs');\n }\n\n signatures.forEach(function (sig) {\n var kid = sig.protected.kid;\n if (keyfinder) {\n keyPromises[kid] = keyfinder(kid);\n }\n promises.push(that.cryptographer.verify(sig.aad, that.payload, sig.signature, keyPromises[kid], kid)\n .then(function (vr) {\n if (vr.verified) {\n vr.payload = new Utils.Base64Url().decode(that.payload);\n }\n return vr;\n }));\n });\n return Promise.all(promises);\n }\n}\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// TODO(eslint): figure out how to properly include Jose or expose crypto object\n/* global Jose */\n\nimport { WebCryptographer } from './jose-jwe-webcryptographer';\nconst webCryptographer = new WebCryptographer();\n\n/**\n * Import a public key in JWK format, either RSA or ECDSA.\n *\n * @param key JWK public key\n * @param alg Name of the JWA signing algorithm (e.g. RS256)\n * @return Promise\n */\nexport const importPublicKey = (key, alg) => {\n switch (alg) {\n case 'RS256':\n case 'RS384':\n case 'RS512':\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return importRsaPublicKey(key, alg);\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return importEcPublicKey(key, alg);\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n};\n\n/**\n * Import a private key in JWK format, either RSA or EC.\n *\n * @param key JWK private key\n * @param alg Name of the JWA signing algorithm (e.g. RS256)\n * @return Promise\n */\nexport const importPrivateKey = (key, alg) => {\n switch (alg) {\n case 'RS256':\n case 'RS384':\n case 'RS512':\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return importRsaPrivateKey(key, alg);\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return importEcPrivateKey(key, alg);\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n};\n\n/**\n * Import a public EC key in JWK format.\n *\n * @param ecKey JWK public key\n * @param alg Name of the JWA signing algorithm (e.g. ES256)\n * @return Promise\n */\nexport const importEcPublicKey = (ecKey, alg) => {\n var config = webCryptographer.getSignConfig(alg);\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n return Jose.crypto.subtle.importKey('jwk', ecKey, config.id, false, [usage.publicKey]);\n};\n\n/**\n * Import a private EC key in JWK format.\n *\n * @param ecKey JWK private key\n * @param alg Name of the JWA signing algorithm (e.g. ES256)\n * @return Promise\n */\nexport const importEcPrivateKey = (ecKey, alg) => {\n var config = webCryptographer.getSignConfig(alg);\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n return Jose.crypto.subtle.importKey('jwk', ecKey, config.id, false, [usage.privateKey]);\n};\n\n/**\n * Converts the output from `openssl x509 -text` or `openssl rsa -text` into a\n * CryptoKey which can then be used with RSA-OAEP. Also accepts (and validates)\n * JWK keys.\n *\n * TODO: this code probably belongs in the webcryptographer.\n *\n * @param rsaKey public RSA key in json format. Parameters can be base64\n * encoded, strings or number (for 'e').\n * @param alg String, name of the algorithm\n * @return Promise\n */\nexport const importRsaPublicKey = (rsaKey, alg) => {\n var jwk;\n var config;\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n if (usage.publicKey === 'wrapKey') {\n if (!rsaKey.alg) {\n rsaKey.alg = alg;\n }\n jwk = convertRsaKey(rsaKey, ['n', 'e']);\n config = webCryptographer.getCryptoConfig(alg);\n } else {\n var rk = {};\n for (var name in rsaKey) {\n if (rsaKey.hasOwnProperty(name)) {\n rk[name] = rsaKey[name];\n }\n }\n\n if (!rk.alg && alg) {\n rk.alg = alg;\n }\n config = webCryptographer.getSignConfig(rk.alg);\n jwk = convertRsaKey(rk, ['n', 'e']);\n jwk.ext = true;\n }\n return Jose.crypto.subtle.importKey('jwk', jwk, config.id, false, [usage.publicKey]);\n};\n\n/**\n * Converts the output from `openssl x509 -text` or `openssl rsa -text` into a\n * CryptoKey which can then be used with RSA-OAEP and RSA. Also accepts (and validates)\n * JWK keys.\n *\n * TODO: this code probably belongs in the webcryptographer.\n *\n * @param rsaKey private RSA key in json format. Parameters can be base64\n * encoded, strings or number (for 'e').\n * @param alg String, name of the algorithm\n * @return Promise\n */\nexport const importRsaPrivateKey = (rsaKey, alg) => {\n var jwk;\n var config;\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n if (usage.privateKey === 'unwrapKey') {\n if (!rsaKey.alg) {\n rsaKey.alg = alg;\n }\n jwk = convertRsaKey(rsaKey, ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi']);\n config = webCryptographer.getCryptoConfig(alg);\n } else {\n var rk = {};\n for (var name in rsaKey) {\n if (rsaKey.hasOwnProperty(name)) {\n rk[name] = rsaKey[name];\n }\n }\n config = webCryptographer.getSignConfig(alg);\n if (!rk.alg && alg) {\n rk.alg = alg;\n }\n jwk = convertRsaKey(rk, ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi']);\n jwk.ext = true;\n }\n return Jose.crypto.subtle.importKey('jwk', jwk, config.id, false, [usage.privateKey]);\n};\n\n// Private functions\n\nexport const isString = (str) => {\n return ((typeof (str) === 'string') || (str instanceof String));\n};\n\n/**\n * Takes an arrayish (an array, ArrayBuffer or Uint8Array)\n * and returns an array or a Uint8Array.\n *\n * @param arr arrayish\n * @return array or Uint8Array\n */\nexport const arrayish = (arr) => {\n if (arr instanceof Array) {\n return arr;\n }\n if (arr instanceof Uint8Array) {\n return arr;\n }\n if (arr instanceof ArrayBuffer) {\n return new Uint8Array(arr);\n }\n webCryptographer.assert(false, 'arrayish: invalid input');\n};\n\n/**\n * Checks if an RSA key contains all the expected parameters. Also checks their\n * types. Converts hex encoded strings (or numbers) to base64.\n *\n * @param rsaKey RSA key in json format. Parameters can be base64 encoded,\n * strings or number (for 'e').\n * @param parameters array\n * @return json\n */\nexport const convertRsaKey = (rsaKey, parameters) => {\n var r = {};\n var alg;\n\n // Check that we have all the parameters\n var missing = [];\n parameters.map(function (p) { if (typeof (rsaKey[p]) === 'undefined') { missing.push(p); } });\n\n if (missing.length > 0) {\n webCryptographer.assert(false, 'convertRsaKey: Was expecting ' + missing.join());\n }\n\n // kty is either missing or is set to \"RSA\"\n if (typeof (rsaKey.kty) !== 'undefined') {\n webCryptographer.assert(rsaKey.kty === 'RSA', \"convertRsaKey: expecting rsaKey['kty'] to be 'RSA'\");\n }\n r.kty = 'RSA';\n\n try {\n webCryptographer.getSignConfig(rsaKey.alg);\n alg = rsaKey.alg;\n } catch (err) {\n try {\n webCryptographer.getCryptoConfig(rsaKey.alg);\n alg = rsaKey.alg;\n } catch (er) {\n webCryptographer.assert(alg, \"convertRsaKey: expecting rsaKey['alg'] to have a valid value\");\n }\n }\n r.alg = alg;\n\n // note: we punt on checking key_ops\n\n var intFromHex = (e) => {\n return parseInt(e, 16);\n };\n for (var i = 0; i < parameters.length; i++) {\n var p = parameters[i];\n var v = rsaKey[p];\n var base64UrlEncoder = new Base64Url();\n if (p === 'e') {\n if (typeof (v) === 'number') {\n v = base64UrlEncoder.encodeArray(stripLeadingZeros(arrayFromInt32(v)));\n }\n } else if (/^([0-9a-fA-F]{2}:)+[0-9a-fA-F]{2}$/.test(v)) {\n var arr = v.split(':').map(intFromHex);\n v = base64UrlEncoder.encodeArray(stripLeadingZeros(arr));\n } else if (typeof (v) !== 'string') {\n webCryptographer.assert(false, \"convertRsaKey: expecting rsaKey['\" + p + \"'] to be a string\");\n }\n r[p] = v;\n }\n\n return r;\n};\n\n/**\n * Converts a string into an array of ascii codes.\n *\n * @param str ascii string\n * @return Uint8Array\n */\nexport const arrayFromString = (str) => {\n webCryptographer.assert(isString(str), 'arrayFromString: invalid input');\n var arr = str.split('').map(function (c) {\n return c.charCodeAt(0);\n });\n return new Uint8Array(arr);\n};\n\n/**\n * Converts a string into an array of utf-8 codes.\n *\n* @param str utf-8 string\n * @return Uint8Array\n */\nexport const arrayFromUtf8String = (str) => {\n webCryptographer.assert(isString(str), 'arrayFromUtf8String: invalid input');\n // javascript represents strings as utf-16. Jose imposes the use of\n // utf-8, so we need to convert from one representation to the other.\n str = unescape(encodeURIComponent(str));\n return arrayFromString(str);\n};\n\n/**\n * Converts an array of ascii bytes into a string.\n *\n * @param arr arrayish\n * @return ascii string\n */\nexport const stringFromArray = (arr) => {\n arr = arrayish(arr);\n var r = '';\n for (var i = 0; i < arr.length; i++) {\n r += String.fromCharCode(arr[i]);\n }\n\n return r;\n};\n\n/**\n * Converts an array of ascii bytes into a string.\n *\n * @param arr ArrayBuffer\n * @return ascii string\n */\nexport const utf8StringFromArray = (arr) => {\n webCryptographer.assert(arr instanceof ArrayBuffer, 'utf8StringFromArray: invalid input');\n\n // javascript represents strings as utf-16. Jose imposes the use of\n // utf-8, so we need to convert from one representation to the other.\n var r = stringFromArray(arr);\n return decodeURIComponent(escape(r));\n};\n\n/**\n * Strips leading zero in an array.\n *\n * @param arr arrayish\n * @return array\n */\nexport const stripLeadingZeros = (arr) => {\n if (arr instanceof ArrayBuffer) {\n arr = new Uint8Array(arr);\n }\n var isLeadingZero = true;\n var r = [];\n for (var i = 0; i < arr.length; i++) {\n if (isLeadingZero && arr[i] === 0) {\n continue;\n }\n isLeadingZero = false;\n r.push(arr[i]);\n }\n return r;\n};\n\n/**\n * Converts a number into an array of 4 bytes (big endian).\n *\n * @param i number\n * @return ArrayBuffer\n */\nexport const arrayFromInt32 = (i) => {\n webCryptographer.assert(typeof (i) === 'number', 'arrayFromInt32: invalid input');\n // TODO(eslint): figure out if there's a better way to validate i\n // eslint-disable-next-line eqeqeq, no-self-compare\n webCryptographer.assert(i == i | 0, 'arrayFromInt32: out of range');\n\n var buf = new Uint8Array(new Uint32Array([i]).buffer);\n var r = new Uint8Array(4);\n for (var j = 0; j < 4; j++) {\n r[j] = buf[3 - j];\n }\n return r.buffer;\n};\n\n/**\n * Concatenates arrayishes.\n *\n * note: cannot be a Arrow function, because Arrow functions do not expose 'arguments' object\n * and Rest parameters are not supported in Babel yet.\n *\n * @param arguments two or more arrayishes\n * @return Uint8Array\n */\nexport function arrayBufferConcat (/* ... */) {\n // Compute total size\n var args = [];\n var total = 0;\n for (var i = 0; i < arguments.length; i++) {\n args.push(arrayish(arguments[i]));\n total += args[i].length;\n }\n var r = new Uint8Array(total);\n var offset = 0;\n for (i = 0; i < arguments.length; i++) {\n for (var j = 0; j < args[i].length; j++) {\n r[offset++] = args[i][j];\n }\n }\n webCryptographer.assert(offset === total, 'arrayBufferConcat: unexpected offset');\n return r;\n}\n\nexport const sha256 = (str) => {\n // Browser docs indicate the first parameter to crypto.subtle.digest to be a\n // DOMString. This was initially implemented as an object and continues to be\n // supported, so we favor the older form for backwards compatibility.\n return Jose.crypto.subtle.digest({ name: 'SHA-256' }, arrayFromString(str)).then(function (hash) {\n return new Base64Url().encodeArray(hash);\n });\n};\n\nexport const isCryptoKey = (rsaKey) => {\n // Some browsers don't expose the CryptoKey as an object, so we need to check\n // the constructor's name.\n if (rsaKey.constructor.name === 'CryptoKey') {\n return true;\n }\n\n // In the presence of minifiers, relying on class names can be problematic,\n // so let's also allow objects that have an 'algorithm' property.\n if (rsaKey.hasOwnProperty('algorithm')) {\n return true;\n }\n\n return false;\n};\nexport class Base64Url {\n /**\n * Base64Url encodes a string (no trailing '=')\n *\n * @param str string\n * @return string\n */\n encode (str) {\n webCryptographer.assert(isString(str), 'Base64Url.encode: invalid input');\n return btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n }\n\n /**\n * Base64Url encodes an array\n *\n * @param arr array or ArrayBuffer\n * @return string\n */\n encodeArray (arr) {\n return this.encode(stringFromArray(arr));\n }\n\n /**\n * Base64Url decodes a string\n *\n * @param str string\n * @return string\n */\n decode (str) {\n webCryptographer.assert(isString(str), 'Base64Url.decode: invalid input');\n // atob is nice and ignores missing '='\n return atob(str.replace(/-/g, '+').replace(/_/g, '/'));\n }\n\n decodeArray (str) {\n webCryptographer.assert(isString(str), 'Base64Url.decodeArray: invalid input');\n return arrayFromString(this.decode(str));\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Jose/webpack/bootstrap","webpack://Jose/./lib/jose-core.js","webpack://Jose/./lib/jose-jwe-decrypt.js","webpack://Jose/./lib/jose-jwe-encrypt.js","webpack://Jose/./lib/jose-jwe-webcryptographer.js","webpack://Jose/./lib/jose-jws-sign.js","webpack://Jose/./lib/jose-jws-verify.js","webpack://Jose/./lib/jose-utils.js","webpack://Jose/./node_modules/base64-js/index.js","webpack://Jose/./node_modules/buffer/index.js","webpack://Jose/./node_modules/ieee754/index.js","webpack://Jose/./node_modules/isarray/index.js","webpack://Jose/(webpack)/buildin/global.js"],"names":["crypto","Utils","JoseUtils","JoseJWE","Encrypter","Decrypter","JoseJWS","Signer","Verifier","Jose","setCrypto","cp","window","subtle","webkitSubtle","atob","str","Buffer","from","toString","btoa","buffer","caniuse","r","Promise","reject","prototype","then","all","globalObject","global","getRandomValues","importKey","generateKey","exportKey","wrapKey","unwrapKey","encrypt","decrypt","sign","ArrayBuffer","Uint8Array","Uint32Array","JSON","parse","stringify","cryptographer","keyPromise","headers","base64UrlEncoder","cipherText","parts","split","length","Error","decode","alg","enc","setKeyEncryptionAlgorithm","setContentEncryptionAlgorithm","crit","cekPromise","resolve","encryptedCek","decodeArray","key","unwrapCek","bind","plainTextPromise","userHeaders","k","v","plainText","encryptPlainText","i","getKeyEncryptionAlgorithm","getContentEncryptionAlgorithm","jweProtectedHeader","encode","iv","createIV","aad","header","createCek","cek","wrapCek","encPromise","data","encodeArray","cipher","tag","WebCryptographer","setContentSignAlgorithm","keyEncryption","getCryptoConfig","jweName","content_encryption","content_sign","getSignConfig","jwa_name","Array","iv_bytes","hack","getCekWorkaround","id","enc_op","extractable","specific_cekBytes","dec_op","len","name","hash","assert","config","auth","aead","tagBytes","additionalData","tagLength","offset","byteLength","slice","keys","splitKey","macKeyPromise","encKeyPromise","cipherTextPromise","encKey","macPromise","truncatedMac","mac","arr1","arr2","macKey","hash1","hash2","dec","buf","compare","payload","signature","keyId","verify","res","kid","verified","rsaKey","n","d","purpose","cekBytesPromise","cekBytes","key_bytes","bytes","truncated_bytes","al","alFull","set","saltLength","namedCurve","publicKey","privateKey","expr","msg","keyPromises","waiting_kid","signer_aads","signer_headers","that","getContentSignAlgorithm","kidPromise","jws","Object","JWS","fromObject","kids","message","protectedHeader","unprotectedHeader","toBeSigned","typ","e","signatures","push","doSign","pl","ph","uh","kps","shift","rv","hasOwnProperty","obj","keyfinder","jwt","jwtRx","exec","forEach","unshift","console","log","promises","check","sig","vr","webCryptographer","importPublicKey","importRsaPublicKey","importEcPublicKey","importPrivateKey","importRsaPrivateKey","importEcPrivateKey","ecKey","usage","getKeyUsageByAlg","jwk","convertRsaKey","rk","ext","isString","String","arrayish","arr","parameters","missing","map","p","join","kty","err","er","intFromHex","parseInt","Base64Url","stripLeadingZeros","arrayFromInt32","test","arrayFromString","c","charCodeAt","arrayFromUtf8String","unescape","encodeURIComponent","stringFromArray","fromCharCode","utf8StringFromArray","decodeURIComponent","escape","isLeadingZero","j","arrayBufferConcat","args","total","arguments","sha256","digest","isCryptoKey","constructor","replace","exports","toByteArray","fromByteArray","lookup","revLookup","Arr","code","getLens","b64","validLen","indexOf","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","maxChunkLength","len2","base64","require","ieee754","isArray","SlowBuffer","INSPECT_MAX_BYTES","TYPED_ARRAY_SUPPORT","undefined","typedArraySupport","kMaxLength","__proto__","foo","subarray","createBuffer","RangeError","arg","encodingOrOffset","allocUnsafe","poolSize","_augment","value","TypeError","fromArrayBuffer","fromString","Symbol","species","defineProperty","configurable","assertSize","size","alloc","fill","encoding","checked","allocUnsafeSlow","string","isEncoding","actual","write","fromArrayLike","array","byteOffset","isBuffer","copy","isnan","type","b","_isBuffer","a","x","y","Math","min","toLowerCase","concat","list","pos","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","swap16","swap32","swap64","apply","equals","inspect","max","match","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","isNaN","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","includes","hexWrite","Number","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","toHex","newBuf","sliceLen","checkOffset","readUIntLE","noAssert","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","floor","objectWriteUInt16","littleEndian","writeUInt16LE","writeUInt16BE","objectWriteUInt32","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","trim","units","Infinity","leadSurrogate","byteArray","hi","lo","src","dst","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","s","NaN","rt","abs","LN2","module","g","Function"],"mappings":"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","file":"jose.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./lib/jose-core.js\");\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as JoseUtils from './jose-utils';\nimport { Encrypter } from './jose-jwe-encrypt';\nimport { Decrypter } from './jose-jwe-decrypt';\nimport { Signer } from './jose-jws-sign';\nimport { Verifier } from './jose-jws-verify';\n\nexport var crypto;\n/**\n * Javascript Object Signing and Encryption library.\n *\n * @author Alok Menghrajani \n */\n\nexport var Utils = JoseUtils;\n\nexport { WebCryptographer } from './jose-jwe-webcryptographer';\n\n/**\n * Initializes a JoseJWE object.\n */\nconst JoseJWE = {\n Encrypter,\n Decrypter\n};\n\n/**\n * Initializes a JoseJWS object.\n */\nconst JoseJWS = {\n Signer,\n Verifier\n};\n\nconst Jose = { JoseJWS, JoseJWE };\n\nexport default { Jose };\nexport { Jose, JoseJWE, JoseJWS };\n\n/**\n * Set crypto provider to use (window.crypto, node-webcrypto-ossl, node-webcrypto-pkcs11 etc.).\n */\nexport var setCrypto = function (cp) {\n crypto = cp;\n};\n\n/**\n * Default to the global \"crypto\" variable\n */\nif (typeof window !== 'undefined') {\n if (typeof window.crypto !== 'undefined') {\n setCrypto(window.crypto);\n if (!crypto.subtle) {\n crypto.subtle = crypto.webkitSubtle;\n }\n }\n}\n\n/**\n * Use Node versions of atob, btoa functions outside the browser\n */\nif (typeof atob !== 'function') {\n // eslint-disable-next-line no-global-assign\n atob = (str) => {\n return Buffer.from(str, 'base64').toString('binary');\n };\n}\n\nif (typeof btoa !== 'function') {\n // eslint-disable-next-line no-global-assign\n btoa = (str) => {\n var buffer;\n if (str instanceof Buffer) {\n buffer = str;\n } else {\n buffer = Buffer.from(str.toString(), 'binary');\n }\n return buffer.toString('base64');\n };\n}\n\n/**\n * Checks if we have all the required APIs.\n *\n * It might make sense to take a Cryptographer and delegate some of the checks\n * to the cryptographer. I however wanted to keep things simple, so I put all\n * the checks here for now.\n *\n * This list is generated manually and needs to be kept up-to-date.\n *\n * Casual testing shows that:\n * - things work in Chrome 40.0.2214.115\n * - things work in Firefox 35.0.1\n * - Safari 7.1.3 doesn't support JWK keys.\n * - Internet Explorer doesn't support Promises.\n *\n * Note: We don't check if the browser supports specific crypto operations.\n * I.e. it's possible for this function to return true, but encryption or\n * decryption to subsequently fail because the browser does not support a\n * given encryption, decryption, key wrapping, key unwrapping or hmac\n * operation.\n *\n * @return bool\n */\nexport const caniuse = () => {\n var r = true;\n\n // Promises/A+ (https://promisesaplus.com/)\n r = r && (typeof Promise === 'function');\n r = r && (typeof Promise.reject === 'function');\n r = r && (typeof Promise.prototype.then === 'function');\n r = r && (typeof Promise.all === 'function');\n\n const globalObject = window || global;\n\n // Crypto (http://www.w3.org/TR/WebCryptoAPI/)\n r = r && (typeof globalObject.crypto === 'object');\n r = r && (typeof globalObject.crypto.subtle === 'object');\n r = r && (typeof globalObject.crypto.getRandomValues === 'function');\n r = r && (typeof globalObject.crypto.subtle.importKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.generateKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.exportKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.wrapKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.unwrapKey === 'function');\n r = r && (typeof globalObject.crypto.subtle.encrypt === 'function');\n r = r && (typeof globalObject.crypto.subtle.decrypt === 'function');\n r = r && (typeof globalObject.crypto.subtle.sign === 'function');\n\n // ArrayBuffer (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-arraybuffer-constructor)\n r = r && (typeof ArrayBuffer === 'function');\n r = r && (typeof Uint8Array === 'function' || typeof Uint8Array === 'object'); // Safari uses \"object\"\n r = r && (typeof Uint32Array === 'function' || typeof Uint32Array === 'object'); // Safari uses \"object\"\n // skipping Uint32Array.prototype.buffer because https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-%typedarrayprototype%-object\n\n // JSON (http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3)\n r = r && (typeof JSON === 'object');\n r = r && (typeof JSON.parse === 'function');\n r = r && (typeof JSON.stringify === 'function');\n\n // Base64 (http://www.w3.org/TR/html5/webappapis.html#dom-windowbase64-atob)\n r = r && (typeof atob === 'function');\n r = r && (typeof btoa === 'function');\n\n // skipping Array functions (map, join, push, length, etc.)\n // skipping String functions (split, charCodeAt, fromCharCode, replace, etc.)\n // skipping regexp.test and parseInt\n\n return r;\n};\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Utils from './jose-utils';\n\n/**\n * Handles decryption.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent). Keep\n * in mind that decryption mutates the cryptographer.\n * @param keyPromise Promise, either RSA or shared key\n */\nexport class Decrypter {\n constructor (cryptographer, keyPromise) {\n this.cryptographer = cryptographer;\n this.keyPromise = keyPromise;\n this.headers = {};\n this.base64UrlEncoder = new Utils.Base64Url();\n }\n\n getHeaders () {\n return this.headers;\n }\n\n /**\n * Performs decryption.\n *\n * @param cipherText String\n * @return Promise\n */\n decrypt (cipherText) {\n // Split cipherText in 5 parts\n var parts = cipherText.split('.');\n if (parts.length !== 5) {\n return Promise.reject(Error('decrypt: invalid input'));\n }\n\n // part 1: header\n this.headers = JSON.parse(this.base64UrlEncoder.decode(parts[0]));\n if (!this.headers.alg) {\n return Promise.reject(Error('decrypt: missing alg'));\n }\n if (!this.headers.enc) {\n return Promise.reject(Error('decrypt: missing enc'));\n }\n this.cryptographer.setKeyEncryptionAlgorithm(this.headers.alg);\n this.cryptographer.setContentEncryptionAlgorithm(this.headers.enc);\n\n if (this.headers.crit) {\n // We don't support the crit header\n return Promise.reject(Error('decrypt: crit is not supported'));\n }\n\n var cekPromise;\n\n if (this.headers.alg === 'dir') {\n // with direct mode, we already have the cek\n cekPromise = Promise.resolve(this.keyPromise);\n } else {\n // part 2: decrypt the CEK\n // In some modes (e.g. RSA-PKCS1v1.5), you must take precautions to prevent\n // chosen-ciphertext attacks as described in RFC 3218, \"Preventing\n // the Million Message Attack on Cryptographic Message Syntax\". We currently\n // only support RSA-OAEP, so we don't generate a key if unwrapping fails.\n var encryptedCek = this.base64UrlEncoder.decodeArray(parts[1]);\n cekPromise = this.keyPromise.then(function (key) {\n return this.cryptographer.unwrapCek(encryptedCek, key);\n }.bind(this));\n }\n\n // part 3: decrypt the cipher text\n var plainTextPromise = this.cryptographer.decrypt(\n cekPromise,\n Utils.arrayFromString(parts[0]),\n this.base64UrlEncoder.decodeArray(parts[2]),\n this.base64UrlEncoder.decodeArray(parts[3]),\n this.base64UrlEncoder.decodeArray(parts[4]));\n\n return plainTextPromise.then(Utils.utf8StringFromArray);\n }\n}\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as Utils from './jose-utils';\n\n/**\n * Handles encryption.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent).\n * @param keyPromise Promise, either RSA or shared key\n */\nexport class Encrypter {\n constructor (cryptographer, keyPromise) {\n this.cryptographer = cryptographer;\n this.keyPromise = keyPromise;\n this.userHeaders = {};\n }\n\n /**\n * Adds a key/value pair which will be included in the header.\n *\n * The data lives in plaintext (an attacker can read the header) but is tamper\n * proof (an attacker cannot modify the header).\n *\n * Note: some headers have semantic implications. E.g. if you set the \"zip\"\n * header, you are responsible for properly compressing plainText before\n * calling encrypt().\n *\n * @param k String\n * @param v String\n */\n addHeader (k, v) {\n this.userHeaders[k] = v;\n }\n\n /**\n * Performs encryption.\n *\n * @param plainText utf-8 string\n * @return Promise\n */\n encrypt (plainText) {\n /**\n * Encrypts plainText with CEK.\n *\n * @param cekPromise Promise\n * @param plainText string\n * @return Promise\n */\n var encryptPlainText = function (cekPromise, plainText) {\n // Create header\n var headers = {};\n for (var i in this.userHeaders) {\n headers[i] = this.userHeaders[i];\n }\n headers.alg = this.cryptographer.getKeyEncryptionAlgorithm();\n headers.enc = this.cryptographer.getContentEncryptionAlgorithm();\n var jweProtectedHeader = new Utils.Base64Url().encode(JSON.stringify(headers));\n\n // Create the IV\n var iv = this.cryptographer.createIV();\n\n // Create the AAD\n var aad = Utils.arrayFromString(jweProtectedHeader);\n plainText = Utils.arrayFromUtf8String(plainText);\n\n return this.cryptographer.encrypt(iv, aad, cekPromise, plainText).then(function (r) {\n r.header = jweProtectedHeader;\n r.iv = iv;\n return r;\n });\n };\n\n var cekPromise, encryptedCek;\n\n if (this.cryptographer.getKeyEncryptionAlgorithm() === 'dir') {\n // with direct encryption, this.keyPromise provides the cek\n // and encryptedCek is empty\n cekPromise = Promise.resolve(this.keyPromise);\n encryptedCek = [];\n } else {\n // Create a CEK key\n cekPromise = this.cryptographer.createCek();\n\n // Key & Cek allows us to create the encryptedCek\n encryptedCek = Promise.all([this.keyPromise, cekPromise]).then(function (all) {\n var key = all[0];\n var cek = all[1];\n return this.cryptographer.wrapCek(cek, key);\n }.bind(this));\n }\n\n // Cek allows us to encrypy the plain text\n var encPromise = encryptPlainText.bind(this, cekPromise, plainText)();\n\n // Once we have all the promises, we can base64 encode all the pieces.\n return Promise.all([encryptedCek, encPromise]).then(function (all) {\n var encryptedCek = all[0];\n var data = all[1];\n var base64UrlEncoder = new Utils.Base64Url();\n return data.header + '.' +\n base64UrlEncoder.encodeArray(encryptedCek) + '.' +\n base64UrlEncoder.encodeArray(data.iv) + '.' +\n base64UrlEncoder.encodeArray(data.cipher) + '.' +\n base64UrlEncoder.encodeArray(data.tag);\n });\n }\n}\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// TODO(eslint): figure out how to properly include Jose or expose crypto object\n/* global Jose */\n\nimport * as Utils from './jose-utils';\n\n/**\n * The WebCryptographer uses http://www.w3.org/TR/WebCryptoAPI/ to perform\n * various crypto operations. In theory, this should help build the library with\n * different underlying crypto APIs. I'm however unclear if we'll run into code\n * duplication or callback vs Promise based API issues.\n */\nexport class WebCryptographer {\n constructor () {\n this.setKeyEncryptionAlgorithm('RSA-OAEP');\n this.setContentEncryptionAlgorithm('A256GCM');\n this.setContentSignAlgorithm('RS256');\n }\n\n /**\n * Overrides the default key encryption algorithm\n * @param alg string\n */\n setKeyEncryptionAlgorithm (alg) {\n this.keyEncryption = this.getCryptoConfig(alg);\n }\n\n getKeyEncryptionAlgorithm () {\n return this.keyEncryption.jweName;\n }\n\n /**\n * Overrides the default content encryption algorithm\n * @param alg string\n */\n setContentEncryptionAlgorithm (alg) {\n this.content_encryption = this.getCryptoConfig(alg);\n }\n\n getContentEncryptionAlgorithm () {\n return this.content_encryption.jweName;\n }\n\n /**\n * Overrides the default content sign algorithm\n * @param alg string\n */\n setContentSignAlgorithm (alg) {\n this.content_sign = this.getSignConfig(alg);\n }\n\n getContentSignAlgorithm () {\n return this.content_sign.jwa_name;\n }\n\n /**\n * Generates an IV.\n * This function mainly exists so that it can be mocked for testing purpose.\n *\n * @return Uint8Array with random bytes\n */\n createIV () {\n var iv = new Uint8Array(new Array(this.content_encryption.iv_bytes));\n return Jose.crypto.getRandomValues(iv);\n }\n\n /**\n * Creates a random content encryption key.\n * This function mainly exists so that it can be mocked for testing purpose.\n *\n * @return Promise\n */\n createCek () {\n var hack = this.getCekWorkaround(this.content_encryption);\n return Jose.crypto.subtle.generateKey(hack.id, true, hack.enc_op);\n }\n\n wrapCek (cek, key) {\n return Jose.crypto.subtle.wrapKey('raw', cek, key, this.keyEncryption.id);\n }\n\n unwrapCek (cek, key) {\n var hack = this.getCekWorkaround(this.content_encryption);\n var extractable = (this.content_encryption.specific_cekBytes > 0);\n var keyEncryption = this.keyEncryption.id;\n\n return Jose.crypto.subtle.unwrapKey('raw', cek, key, keyEncryption, hack.id, extractable, hack.dec_op);\n }\n\n /**\n * Returns algorithm and operation needed to create a CEK.\n *\n * In some cases, e.g. A128CBC-HS256, the CEK gets split into two keys. The Web\n * Crypto API does not allow us to generate an arbitrary number of bytes and\n * then create a CryptoKey without any associated algorithm. We therefore piggy\n * back on AES-CBS and HMAC which allows the creation of CEKs of size 16, 32, 64\n * and 128 bytes.\n */\n getCekWorkaround (alg) {\n var len = alg.specific_cekBytes;\n if (len) {\n if (len === 16) {\n return { id: { name: 'AES-CBC', length: 128 }, enc_op: ['encrypt'], dec_op: ['decrypt'] };\n } else if (len === 32) {\n return { id: { name: 'AES-CBC', length: 256 }, enc_op: ['encrypt'], dec_op: ['decrypt'] };\n } else if (len === 64) {\n return { id: { name: 'HMAC', hash: { name: 'SHA-256' } }, enc_op: ['sign'], dec_op: ['verify'] };\n } else if (len === 128) {\n return { id: { name: 'HMAC', hash: { name: 'SHA-384' } }, enc_op: ['sign'], dec_op: ['verify'] };\n } else {\n this.assert(false, 'getCekWorkaround: invalid len');\n }\n }\n return { id: alg.id, enc_op: ['encrypt'], dec_op: ['decrypt'] };\n }\n\n /**\n * Encrypts plainText with cek.\n *\n * @param iv Uint8Array\n * @param aad Uint8Array\n * @param cekPromise Promise\n * @param plainText Uint8Array\n * @return Promise\n */\n encrypt (iv, aad, cekPromise, plainText) {\n var config = this.content_encryption;\n if (iv.length !== config.iv_bytes) {\n return Promise.reject(Error('invalid IV length'));\n }\n if (config.auth.aead) {\n var tagBytes = config.auth.tagBytes;\n\n var enc = {\n name: config.id.name,\n iv: iv,\n additionalData: aad,\n tagLength: tagBytes * 8\n };\n\n return cekPromise.then(function (cek) {\n return Jose.crypto.subtle.encrypt(enc, cek, plainText).then(function (cipherText) {\n var offset = cipherText.byteLength - tagBytes;\n return {\n cipher: cipherText.slice(0, offset),\n tag: cipherText.slice(offset)\n };\n });\n });\n } else {\n var keys = this.splitKey(config, cekPromise, ['encrypt']);\n var macKeyPromise = keys[0];\n var encKeyPromise = keys[1];\n\n // Encrypt the plain text\n var cipherTextPromise = encKeyPromise.then(function (encKey) {\n var enc = {\n name: config.id.name,\n iv: iv\n };\n return Jose.crypto.subtle.encrypt(enc, encKey, plainText);\n });\n\n // compute MAC\n var macPromise = cipherTextPromise.then((cipherText) => {\n return this.truncatedMac(\n config,\n macKeyPromise,\n aad,\n iv,\n cipherText);\n });\n\n return Promise.all([cipherTextPromise, macPromise]).then(function (all) {\n var cipherText = all[0];\n var mac = all[1];\n return {\n cipher: cipherText,\n tag: mac\n };\n });\n }\n }\n\n /**\n * Compares two Uint8Arrays in constant time.\n *\n * @return Promise\n */\n compare (config, macKeyPromise, arr1, arr2) {\n this.assert(arr1 instanceof Uint8Array, 'compare: invalid input');\n this.assert(arr2 instanceof Uint8Array, 'compare: invalid input');\n\n return macKeyPromise.then(function (macKey) {\n var hash1 = Jose.crypto.subtle.sign(config.auth.id, macKey, arr1);\n var hash2 = Jose.crypto.subtle.sign(config.auth.id, macKey, arr2);\n return Promise.all([hash1, hash2]).then(function (all) {\n var hash1 = new Uint8Array(all[0]);\n var hash2 = new Uint8Array(all[1]);\n if (hash1.length !== hash2.length) {\n throw new Error('compare failed');\n }\n for (var i = 0; i < hash1.length; i++) {\n if (hash1[i] !== hash2[i]) {\n throw new Error('compare failed');\n }\n }\n return Promise.resolve(null);\n });\n });\n }\n\n /**\n * Decrypts cipherText with cek. Validates the tag.\n *\n * @param cekPromise Promise\n * @param aad protected header\n * @param iv IV\n * @param cipherText text to be decrypted\n * @param tag to be verified\n * @return Promise\n */\n decrypt (cekPromise, aad, iv, cipherText, tag) {\n if (iv.length !== this.content_encryption.iv_bytes) {\n return Promise.reject(Error('decryptCiphertext: invalid IV'));\n }\n\n var config = this.content_encryption;\n if (config.auth.aead) {\n var dec = {\n name: config.id.name,\n iv: iv,\n additionalData: aad,\n tagLength: config.auth.tagBytes * 8\n };\n\n return cekPromise.then(function (cek) {\n var buf = Utils.arrayBufferConcat(cipherText, tag);\n return Jose.crypto.subtle.decrypt(dec, cek, buf);\n });\n } else {\n var keys = this.splitKey(config, cekPromise, ['decrypt']);\n var macKeyPromise = keys[0];\n var encKeyPromise = keys[1];\n\n // Validate the MAC\n var macPromise = this.truncatedMac(\n config,\n macKeyPromise,\n aad,\n iv,\n cipherText);\n\n return Promise.all([encKeyPromise, macPromise]).then((all) => {\n var encKey = all[0];\n var mac = all[1];\n\n return this.compare(config, macKeyPromise, new Uint8Array(mac), tag).then(() => {\n var dec = {\n name: config.id.name,\n iv: iv\n };\n return Jose.crypto.subtle.decrypt(dec, encKey, cipherText);\n }).catch(() => {\n return Promise.reject(Error('decryptCiphertext: MAC failed.'));\n });\n });\n }\n }\n\n /**\n * Signs plainText.\n *\n * @param aad json\n * @param payload String or json\n * @param keyPromise Promise\n * @return Promise\n */\n sign (aad, payload, keyPromise) {\n var config = this.content_sign;\n\n if (aad.alg) {\n config = this.getSignConfig(aad.alg);\n }\n\n // Encrypt the plain text\n return keyPromise.then(function (key) {\n var base64UrlEncoder = new Utils.Base64Url();\n return Jose.crypto.subtle.sign(config.id, key, Utils.arrayFromString(base64UrlEncoder.encode(JSON.stringify(aad)) + '.' + base64UrlEncoder.encodeArray(payload)));\n });\n }\n\n /**\n * Verify JWS.\n *\n * @param payload Base64Url encoded payload\n * @param aad String Base64Url encoded JSON representation of the protected JWS header\n * @param signature Uint8Array containing the signature\n * @param keyPromise Promise\n * @param keyId value of the kid JoseHeader, it'll be passed as part of the result to the returned promise\n * @return Promise\n */\n verify (aad, payload, signature, keyPromise, keyId) {\n var config = this.content_sign;\n\n return keyPromise.then(function (key) {\n return Jose.crypto.subtle.verify(config.id, key, signature, Utils.arrayFromString(aad + '.' + payload)).then(function (res) {\n return { kid: keyId, verified: res };\n });\n });\n }\n\n keyId (rsaKey) {\n return Utils.sha256(rsaKey.n + '+' + rsaKey.d);\n }\n\n /**\n * Splits a CEK into two pieces: a MAC key and an ENC key.\n *\n * This code is structured around the fact that the crypto API does not provide\n * a way to validate truncated MACs. The MAC key is therefore always imported to\n * sign data.\n *\n * @param config (used for key lengths & algorithms)\n * @param cekPromise Promise CEK key to split\n * @param purpose Array usages of the imported key\n * @return [Promise, Promise]\n */\n splitKey (config, cekPromise, purpose) {\n // We need to split the CEK key into a MAC and ENC keys\n var cekBytesPromise = cekPromise.then(function (cek) {\n return Jose.crypto.subtle.exportKey('raw', cek);\n });\n var macKeyPromise = cekBytesPromise.then(function (cekBytes) {\n if (cekBytes.byteLength * 8 !== config.id.length + config.auth.key_bytes * 8) {\n return Promise.reject(Error('encryptPlainText: incorrect cek length'));\n }\n var bytes = cekBytes.slice(0, config.auth.key_bytes);\n return Jose.crypto.subtle.importKey('raw', bytes, config.auth.id, false, ['sign']);\n });\n var encKeyPromise = cekBytesPromise.then(function (cekBytes) {\n if (cekBytes.byteLength * 8 !== config.id.length + config.auth.key_bytes * 8) {\n return Promise.reject(Error('encryptPlainText: incorrect cek length'));\n }\n var bytes = cekBytes.slice(config.auth.key_bytes);\n return Jose.crypto.subtle.importKey('raw', bytes, config.id, false, purpose);\n });\n return [macKeyPromise, encKeyPromise];\n }\n\n /**\n * Converts the Jose web algorithms into data which is\n * useful for the Web Crypto API.\n *\n * length = in bits\n * bytes = in bytes\n */\n getCryptoConfig (alg) {\n switch (alg) {\n // Key encryption\n case 'RSA-OAEP':\n return {\n jweName: 'RSA-OAEP',\n id: { name: 'RSA-OAEP', hash: { name: 'SHA-1' } }\n };\n case 'RSA-OAEP-256':\n return {\n jweName: 'RSA-OAEP-256',\n id: { name: 'RSA-OAEP', hash: { name: 'SHA-256' } }\n };\n case 'A128KW':\n return {\n jweName: 'A128KW',\n id: { name: 'AES-KW', length: 128 }\n };\n case 'A256KW':\n return {\n jweName: 'A256KW',\n id: { name: 'AES-KW', length: 256 }\n };\n case 'dir':\n return {\n jweName: 'dir'\n };\n\n // Content encryption\n case 'A128CBC-HS256':\n return {\n jweName: 'A128CBC-HS256',\n id: { name: 'AES-CBC', length: 128 },\n iv_bytes: 16,\n specific_cekBytes: 32,\n auth: {\n key_bytes: 16,\n id: { name: 'HMAC', hash: { name: 'SHA-256' } },\n truncated_bytes: 16\n }\n };\n case 'A256CBC-HS512':\n return {\n jweName: 'A256CBC-HS512',\n id: { name: 'AES-CBC', length: 256 },\n iv_bytes: 16,\n specific_cekBytes: 64,\n auth: {\n key_bytes: 32,\n id: { name: 'HMAC', hash: { name: 'SHA-512' } },\n truncated_bytes: 32\n }\n };\n case 'A128GCM':\n return {\n jweName: 'A128GCM',\n id: { name: 'AES-GCM', length: 128 },\n iv_bytes: 12,\n auth: {\n aead: true,\n tagBytes: 16\n }\n };\n case 'A256GCM':\n return {\n jweName: 'A256GCM',\n id: { name: 'AES-GCM', length: 256 },\n iv_bytes: 12,\n auth: {\n aead: true,\n tagBytes: 16\n }\n };\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n }\n\n /**\n * Computes a truncated MAC.\n *\n * @param config configuration\n * @param macKeyPromise Promise mac key\n * @param aad Uint8Array\n * @param iv Uint8Array\n * @param cipherText Uint8Array\n * @return Promise truncated MAC\n */\n truncatedMac (config, macKeyPromise, aad, iv, cipherText) {\n return macKeyPromise.then(function (macKey) {\n var al = new Uint8Array(Utils.arrayFromInt32(aad.length * 8));\n var alFull = new Uint8Array(8);\n alFull.set(al, 4);\n var buf = Utils.arrayBufferConcat(aad, iv, cipherText, alFull);\n return Jose.crypto.subtle.sign(config.auth.id, macKey, buf).then(function (bytes) {\n return bytes.slice(0, config.auth.truncated_bytes);\n });\n });\n }\n\n /**\n * Converts the Jose web algorithms into data which is\n * useful for the Web Crypto API.\n */\n getSignConfig (alg) {\n switch (alg) {\n case 'RS256':\n return {\n jwa_name: 'RS256',\n id: { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-256' } }\n };\n case 'RS384':\n return {\n jwa_name: 'RS384',\n id: { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-384' } }\n };\n case 'RS512':\n return {\n jwa_name: 'RS512',\n id: { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-512' } }\n };\n case 'PS256':\n return {\n jwa_name: 'PS256',\n id: { name: 'RSA-PSS', hash: { name: 'SHA-256' }, saltLength: 20 }\n };\n case 'PS384':\n return {\n jwa_name: 'PS384',\n id: { name: 'RSA-PSS', hash: { name: 'SHA-384' }, saltLength: 20 }\n };\n case 'PS512':\n return {\n jwa_name: 'PS512',\n id: { name: 'RSA-PSS', hash: { name: 'SHA-512' }, saltLength: 20 }\n };\n case 'HS256':\n return {\n jwa_name: 'HS256',\n id: { name: 'HMAC', hash: { name: 'SHA-256' } }\n };\n case 'HS384':\n return {\n jwa_name: 'HS384',\n id: { name: 'HMAC', hash: { name: 'SHA-384' } }\n };\n case 'HS512':\n return {\n jwa_name: 'HS512',\n id: { name: 'HMAC', hash: { name: 'SHA-512' } }\n };\n case 'ES256':\n return {\n jwa_name: 'ES256',\n id: { name: 'ECDSA', namedCurve: 'P-256', hash: { name: 'SHA-256' } }\n };\n case 'ES384':\n return {\n jwa_name: 'ES384',\n id: { name: 'ECDSA', namedCurve: 'P-384', hash: { name: 'SHA-384' } }\n };\n case 'ES512':\n return {\n jwa_name: 'ES512',\n id: { name: 'ECDSA', namedCurve: 'P-521', hash: { name: 'SHA-512' } }\n };\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n }\n\n /**\n * Derives key usage from algorithm's name\n *\n * @param alg String algorithm name\n * @returns {*}\n */\n getKeyUsageByAlg (alg) {\n switch (alg) {\n // signature\n case 'RS256':\n case 'RS384':\n case 'RS512':\n case 'PS256':\n case 'PS384':\n case 'PS512':\n case 'HS256':\n case 'HS384':\n case 'HS512':\n case 'ES256':\n case 'ES384':\n case 'ES512':\n case 'ES256K':\n return {\n publicKey: 'verify',\n privateKey: 'sign'\n };\n // key encryption\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'A128KW':\n case 'A256KW':\n return {\n publicKey: 'wrapKey',\n privateKey: 'unwrapKey'\n };\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n }\n\n /**\n * Feel free to override this function.\n */\n assert (expr, msg) {\n if (!expr) {\n throw new Error(msg);\n }\n }\n}\n","/* -\n * Copyright 2015 Peculiar Ventures\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Utils from './jose-utils';\n\n/**\n * Handles decryption.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent). Keep\n * in mind that decryption mutates the cryptographer.\n *\n * @author Patrizio Bruno \n */\nexport class Signer {\n constructor (cryptographer) {\n this.cryptographer = cryptographer;\n\n this.keyPromises = {};\n this.waiting_kid = 0;\n this.headers = {};\n this.signer_aads = {};\n this.signer_headers = {};\n }\n\n /**\n * Adds a signer to JoseJWS instance.\n *\n * @param key private key in json format. Parameters can be base64\n * encoded, strings or number (for e.g. 'e'), or CryptoKey.\n * @param keyId a string identifying the key. OPTIONAL\n * @param aad Object protected header\n * @param header Object unprotected header\n */\n addSigner (key, keyId, aad, header) {\n var that = this;\n var keyPromise;\n if (Utils.isCryptoKey(key)) {\n keyPromise = new Promise(function (resolve) {\n resolve(key);\n });\n } else {\n var alg;\n if (aad && aad.alg) {\n alg = aad.alg;\n } else {\n alg = that.cryptographer.getContentSignAlgorithm();\n }\n keyPromise = Utils.importPrivateKey(key, alg, 'sign');\n }\n\n var kidPromise;\n if (keyId) {\n kidPromise = new Promise(function (resolve) {\n resolve(keyId);\n });\n } else if (Utils.isCryptoKey(key)) {\n throw new Error('keyId is a mandatory argument when the key is a CryptoKey');\n } else {\n kidPromise = this.cryptographer.keyId(key);\n }\n\n that.waiting_kid++;\n\n return kidPromise.then(function (kid) {\n that.keyPromises[kid] = keyPromise;\n that.waiting_kid--;\n if (aad) {\n that.signer_aads[kid] = aad;\n }\n if (header) {\n that.signer_headers[kid] = header;\n }\n return kid;\n });\n }\n\n /**\n * Adds a signature to a JWS object\n * @param jws JWS Object to be signed or its representation\n * @param aad Object protected header\n * @param header Object unprotected header\n * @return Promise\n */\n addSignature (jws, aad, header) {\n if (Utils.isString(jws)) {\n jws = JSON.parse(jws);\n }\n\n if (jws.payload && Utils.isString(jws.payload) &&\n jws.protected && Utils.isString(jws.protected) &&\n jws.header && jws.header instanceof Object &&\n jws.signature && Utils.isString(jws.signature)) {\n return this.sign(JWS.fromObject(jws), aad, header);\n } else {\n throw new Error('JWS is not a valid JWS object');\n }\n }\n\n /**\n * Computes signature.\n *\n * @param payload JWS Object or utf-8 string to be signed\n * @param aad Object protected header\n * @param header Object unprotected header\n * @return Promise\n */\n sign (payload, aad, header) {\n var that = this;\n var kids = [];\n\n if (Object.keys(that.keyPromises).length === 0) {\n throw new Error('No signers defined. At least one is required to sign the JWS.');\n }\n\n if (that.waiting_kid) {\n throw new Error('still generating key IDs');\n }\n\n function sign (message, protectedHeader, unprotectedHeader, keyPromise, kid) {\n var toBeSigned;\n\n if (!protectedHeader) {\n protectedHeader = {};\n }\n\n if (!protectedHeader.alg) {\n protectedHeader.alg = that.cryptographer.getContentSignAlgorithm();\n protectedHeader.typ = 'JWT';\n }\n\n if (!protectedHeader.kid) {\n protectedHeader.kid = kid;\n }\n\n if (Utils.isString(message)) {\n toBeSigned = Utils.arrayFromUtf8String(message);\n } else {\n try {\n toBeSigned = Utils.arrayish(message);\n } catch (e) {\n if (message instanceof JWS) {\n toBeSigned = Utils.arrayFromString(new Utils.Base64Url().decode(message.payload));\n } else if (message instanceof Object) {\n toBeSigned = Utils.arrayFromUtf8String(JSON.stringify(message));\n } else {\n throw new Error('cannot sign this message');\n }\n }\n }\n\n return that.cryptographer.sign(protectedHeader, toBeSigned, keyPromise).then(function (signature) {\n var jws = new JWS(protectedHeader, unprotectedHeader, toBeSigned, signature);\n if (message instanceof JWS) {\n delete jws.payload;\n if (!message.signatures) {\n message.signatures = [jws];\n } else {\n message.signatures.push(jws);\n }\n return message;\n }\n return jws;\n });\n }\n\n function doSign (pl, ph, uh, kps, kids) {\n if (kids.length) {\n var kid = kids.shift();\n var rv = sign(pl, that.signer_aads[kid] || ph, that.signer_headers[kid] || uh, kps[kid], kid);\n if (kids.length) {\n rv = rv.then(function (jws) {\n return doSign(jws, null, null, kps, kids);\n });\n }\n return rv;\n }\n }\n\n for (var kid in that.keyPromises) {\n if (that.keyPromises.hasOwnProperty(kid)) {\n kids.push(kid);\n }\n }\n return doSign(payload, aad, header, that.keyPromises, kids);\n }\n}\n\n/**\n * Initialize a JWS object.\n *\n * @param protectedHeader protected header (JS object)\n * @param payload Uint8Array payload to be signed\n * @param signature ArrayBuffer signature of the payload\n * @param header unprotected header (JS object)\n *\n * @constructor\n */\nexport class JWS {\n constructor (protectedHeader, header, payload, signature) {\n this.header = header;\n var base64UrlEncoder = new Utils.Base64Url();\n this.payload = base64UrlEncoder.encodeArray(payload);\n if (signature) {\n this.signature = base64UrlEncoder.encodeArray(signature);\n }\n this.protected = base64UrlEncoder.encode(JSON.stringify(protectedHeader));\n }\n\n fromObject (obj) {\n var rv = new JWS(obj.protected, obj.header, obj.payload, null);\n rv.signature = obj.signature;\n rv.signatures = obj.signatures;\n return rv;\n }\n\n /**\n * Serialize a JWS object using the JSON serialization format\n *\n * @returns {Object} a copy of this\n */\n JsonSerialize () {\n return JSON.stringify(this);\n }\n\n /**\n * Serialize a JWS object using the Compact Serialization Format\n *\n * @returns {string} BASE64URL(UTF8(PROTECTED HEADER)).BASE64URL(PAYLOAD).BASE64URL(SIGNATURE)\n */\n CompactSerialize () {\n return this.protected + '.' + this.payload + '.' + this.signature;\n }\n}\n","/* -\n * Copyright 2015 Peculiar Ventures\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Utils from './jose-utils';\n\n/**\n * Handles signature verification.\n *\n * @param cryptographer an instance of WebCryptographer (or equivalent). Keep\n * in mind that decryption mutates the cryptographer.\n * @param message a JWS message\n * @param keyfinder (optional) a function returning a Promise given\n * a key id\n *\n * @author Patrizio Bruno \n */\nexport class Verifier {\n constructor (cryptographer, message, keyfinder) {\n var that = this;\n var alg;\n var jwt;\n var aad;\n var header;\n var payload;\n var signatures;\n var protectedHeader;\n var jwtRx = /^([0-9a-z_-]+)\\.([0-9a-z_-]+)\\.([0-9a-z_-]+)$/i;\n\n that.cryptographer = cryptographer;\n\n alg = cryptographer.getContentSignAlgorithm();\n\n if (Utils.isString(message)) {\n if ((jwt = jwtRx.exec(message))) {\n if (jwt.length !== 4) {\n throw new Error('wrong JWS compact serialization format');\n }\n\n message = {\n protected: jwt[1],\n payload: jwt[2],\n signature: jwt[3]\n };\n } else {\n message = JSON.parse(message);\n }\n } else if (typeof message !== 'object') {\n throw new Error('data format not supported');\n }\n\n aad = message.protected;\n header = message.header;\n payload = message.payload;\n signatures = message.signatures instanceof Array ? message.signatures.slice(0) : [];\n\n signatures.forEach(function (sign) {\n sign.aad = sign.protected;\n sign.protected = JSON.parse(new Utils.Base64Url().decode(sign.protected));\n });\n\n that.aad = aad;\n protectedHeader = new Utils.Base64Url().decode(aad);\n try {\n protectedHeader = JSON.parse(protectedHeader);\n } catch (e) {\n }\n\n if (!protectedHeader && !header) {\n throw new Error('at least one header is required');\n }\n\n if (!protectedHeader.alg) {\n throw new Error(\"'alg' is a mandatory header\");\n }\n\n if (protectedHeader.alg !== alg) {\n throw new Error(\"the alg header '\" + protectedHeader.alg + \"' doesn't match the requested algorithm '\" + alg + \"'\");\n }\n\n if (protectedHeader && protectedHeader.typ && protectedHeader.typ !== 'JWT') {\n throw new Error(\"typ '\" + protectedHeader.typ + \"' not supported\");\n }\n\n if (message.signature) {\n signatures.unshift({\n aad: aad,\n protected: protectedHeader,\n header: header,\n signature: message.signature\n });\n }\n\n that.signatures = [];\n for (var i = 0; i < signatures.length; i++) {\n that.signatures[i] = JSON.parse(JSON.stringify(signatures[i]));\n that.signatures[i].signature = Utils.arrayFromString(new Utils.Base64Url().decode(signatures[i].signature));\n }\n\n that.payload = payload;\n\n that.keyPromises = {};\n that.waiting_kid = 0;\n\n if (keyfinder) {\n that.keyfinder = keyfinder;\n }\n }\n\n /**\n * Add supported recipients to verify multiple signatures\n *\n * @param key public key in json format. Parameters can be base64\n * encoded, strings or number (for 'e'), or CryptoKey.\n * @param keyId a string identifying the key. OPTIONAL\n * @param alg String signature algorithm. OPTIONAL\n * @returns Promise a Promise of a key id\n */\n addRecipient (key, keyId, alg) {\n var that = this;\n var kidPromise;\n var keyPromise;\n if (Utils.isCryptoKey(key)) {\n keyPromise = new Promise(function (resolve) { resolve(key); });\n } else {\n keyPromise = Utils.importPublicKey(key, alg || that.cryptographer.getContentSignAlgorithm(), 'verify');\n }\n\n if (keyId) {\n kidPromise = new Promise(function (resolve) {\n resolve(keyId);\n });\n } else if (Utils.isCryptoKey(key)) {\n throw new Error('keyId is a mandatory argument when the key is a CryptoKey');\n } else {\n console.log(\"it's unsafe to omit a keyId\");\n kidPromise = this.cryptographer.keyId(key);\n }\n\n that.waiting_kid++;\n\n return kidPromise.then(function (kid) {\n that.keyPromises[kid] = keyPromise;\n that.waiting_kid--;\n return kid;\n });\n }\n\n /**\n * Verifies a JWS signature\n *\n * @returns Promise a Promise of an array of objects { kid: string, verified: bool, payload?: string }\n *\n * payload is only populated and usable if verified is true\n */\n verify () {\n var that = this;\n var signatures = that.signatures;\n var keyPromises = that.keyPromises;\n var keyfinder = that.keyfinder;\n var promises = [];\n var check = !!keyfinder || Object.keys(that.keyPromises).length > 0;\n\n if (!check) {\n throw new Error('No recipients defined. At least one is required to verify the JWS.');\n }\n\n if (that.waiting_kid) {\n throw new Error('still generating key IDs');\n }\n\n signatures.forEach(function (sig) {\n var kid = sig.protected.kid;\n if (keyfinder) {\n keyPromises[kid] = keyfinder(kid);\n }\n promises.push(that.cryptographer.verify(sig.aad, that.payload, sig.signature, keyPromises[kid], kid)\n .then(function (vr) {\n if (vr.verified) {\n vr.payload = new Utils.Base64Url().decode(that.payload);\n }\n return vr;\n }));\n });\n return Promise.all(promises);\n }\n}\n","/* -\n * Copyright 2014 Square Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// TODO(eslint): figure out how to properly include Jose or expose crypto object\n/* global Jose */\n\nimport { WebCryptographer } from './jose-jwe-webcryptographer';\nconst webCryptographer = new WebCryptographer();\n\n/**\n * Import a public key in JWK format, either RSA or ECDSA.\n *\n * @param key JWK public key\n * @param alg Name of the JWA signing algorithm (e.g. RS256)\n * @return Promise\n */\nexport const importPublicKey = (key, alg) => {\n switch (alg) {\n case 'RS256':\n case 'RS384':\n case 'RS512':\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return importRsaPublicKey(key, alg);\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return importEcPublicKey(key, alg);\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n};\n\n/**\n * Import a private key in JWK format, either RSA or EC.\n *\n * @param key JWK private key\n * @param alg Name of the JWA signing algorithm (e.g. RS256)\n * @return Promise\n */\nexport const importPrivateKey = (key, alg) => {\n switch (alg) {\n case 'RS256':\n case 'RS384':\n case 'RS512':\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return importRsaPrivateKey(key, alg);\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return importEcPrivateKey(key, alg);\n default:\n throw Error('unsupported algorithm: ' + alg);\n }\n};\n\n/**\n * Import a public EC key in JWK format.\n *\n * @param ecKey JWK public key\n * @param alg Name of the JWA signing algorithm (e.g. ES256)\n * @return Promise\n */\nexport const importEcPublicKey = (ecKey, alg) => {\n var config = webCryptographer.getSignConfig(alg);\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n return Jose.crypto.subtle.importKey('jwk', ecKey, config.id, false, [usage.publicKey]);\n};\n\n/**\n * Import a private EC key in JWK format.\n *\n * @param ecKey JWK private key\n * @param alg Name of the JWA signing algorithm (e.g. ES256)\n * @return Promise\n */\nexport const importEcPrivateKey = (ecKey, alg) => {\n var config = webCryptographer.getSignConfig(alg);\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n return Jose.crypto.subtle.importKey('jwk', ecKey, config.id, false, [usage.privateKey]);\n};\n\n/**\n * Converts the output from `openssl x509 -text` or `openssl rsa -text` into a\n * CryptoKey which can then be used with RSA-OAEP. Also accepts (and validates)\n * JWK keys.\n *\n * TODO: this code probably belongs in the webcryptographer.\n *\n * @param rsaKey public RSA key in json format. Parameters can be base64\n * encoded, strings or number (for 'e').\n * @param alg String, name of the algorithm\n * @return Promise\n */\nexport const importRsaPublicKey = (rsaKey, alg) => {\n var jwk;\n var config;\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n if (usage.publicKey === 'wrapKey') {\n if (!rsaKey.alg) {\n rsaKey.alg = alg;\n }\n jwk = convertRsaKey(rsaKey, ['n', 'e']);\n config = webCryptographer.getCryptoConfig(alg);\n } else {\n var rk = {};\n for (var name in rsaKey) {\n if (rsaKey.hasOwnProperty(name)) {\n rk[name] = rsaKey[name];\n }\n }\n\n if (!rk.alg && alg) {\n rk.alg = alg;\n }\n config = webCryptographer.getSignConfig(rk.alg);\n jwk = convertRsaKey(rk, ['n', 'e']);\n jwk.ext = true;\n }\n return Jose.crypto.subtle.importKey('jwk', jwk, config.id, false, [usage.publicKey]);\n};\n\n/**\n * Converts the output from `openssl x509 -text` or `openssl rsa -text` into a\n * CryptoKey which can then be used with RSA-OAEP and RSA. Also accepts (and validates)\n * JWK keys.\n *\n * TODO: this code probably belongs in the webcryptographer.\n *\n * @param rsaKey private RSA key in json format. Parameters can be base64\n * encoded, strings or number (for 'e').\n * @param alg String, name of the algorithm\n * @return Promise\n */\nexport const importRsaPrivateKey = (rsaKey, alg) => {\n var jwk;\n var config;\n var usage = webCryptographer.getKeyUsageByAlg(alg);\n\n if (usage.privateKey === 'unwrapKey') {\n if (!rsaKey.alg) {\n rsaKey.alg = alg;\n }\n jwk = convertRsaKey(rsaKey, ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi']);\n config = webCryptographer.getCryptoConfig(alg);\n } else {\n var rk = {};\n for (var name in rsaKey) {\n if (rsaKey.hasOwnProperty(name)) {\n rk[name] = rsaKey[name];\n }\n }\n config = webCryptographer.getSignConfig(alg);\n if (!rk.alg && alg) {\n rk.alg = alg;\n }\n jwk = convertRsaKey(rk, ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi']);\n jwk.ext = true;\n }\n return Jose.crypto.subtle.importKey('jwk', jwk, config.id, false, [usage.privateKey]);\n};\n\n// Private functions\n\nexport const isString = (str) => {\n return ((typeof (str) === 'string') || (str instanceof String));\n};\n\n/**\n * Takes an arrayish (an array, ArrayBuffer or Uint8Array)\n * and returns an array or a Uint8Array.\n *\n * @param arr arrayish\n * @return array or Uint8Array\n */\nexport const arrayish = (arr) => {\n if (arr instanceof Array) {\n return arr;\n }\n if (arr instanceof Uint8Array) {\n return arr;\n }\n if (arr instanceof ArrayBuffer) {\n return new Uint8Array(arr);\n }\n webCryptographer.assert(false, 'arrayish: invalid input');\n};\n\n/**\n * Checks if an RSA key contains all the expected parameters. Also checks their\n * types. Converts hex encoded strings (or numbers) to base64.\n *\n * @param rsaKey RSA key in json format. Parameters can be base64 encoded,\n * strings or number (for 'e').\n * @param parameters array\n * @return json\n */\nexport const convertRsaKey = (rsaKey, parameters) => {\n var r = {};\n var alg;\n\n // Check that we have all the parameters\n var missing = [];\n parameters.map(function (p) { if (typeof (rsaKey[p]) === 'undefined') { missing.push(p); } });\n\n if (missing.length > 0) {\n webCryptographer.assert(false, 'convertRsaKey: Was expecting ' + missing.join());\n }\n\n // kty is either missing or is set to \"RSA\"\n if (typeof (rsaKey.kty) !== 'undefined') {\n webCryptographer.assert(rsaKey.kty === 'RSA', \"convertRsaKey: expecting rsaKey['kty'] to be 'RSA'\");\n }\n r.kty = 'RSA';\n\n try {\n webCryptographer.getSignConfig(rsaKey.alg);\n alg = rsaKey.alg;\n } catch (err) {\n try {\n webCryptographer.getCryptoConfig(rsaKey.alg);\n alg = rsaKey.alg;\n } catch (er) {\n webCryptographer.assert(alg, \"convertRsaKey: expecting rsaKey['alg'] to have a valid value\");\n }\n }\n r.alg = alg;\n\n // note: we punt on checking key_ops\n\n var intFromHex = (e) => {\n return parseInt(e, 16);\n };\n for (var i = 0; i < parameters.length; i++) {\n var p = parameters[i];\n var v = rsaKey[p];\n var base64UrlEncoder = new Base64Url();\n if (p === 'e') {\n if (typeof (v) === 'number') {\n v = base64UrlEncoder.encodeArray(stripLeadingZeros(arrayFromInt32(v)));\n }\n } else if (/^([0-9a-fA-F]{2}:)+[0-9a-fA-F]{2}$/.test(v)) {\n var arr = v.split(':').map(intFromHex);\n v = base64UrlEncoder.encodeArray(stripLeadingZeros(arr));\n } else if (typeof (v) !== 'string') {\n webCryptographer.assert(false, \"convertRsaKey: expecting rsaKey['\" + p + \"'] to be a string\");\n }\n r[p] = v;\n }\n\n return r;\n};\n\n/**\n * Converts a string into an array of ascii codes.\n *\n * @param str ascii string\n * @return Uint8Array\n */\nexport const arrayFromString = (str) => {\n webCryptographer.assert(isString(str), 'arrayFromString: invalid input');\n var arr = str.split('').map(function (c) {\n return c.charCodeAt(0);\n });\n return new Uint8Array(arr);\n};\n\n/**\n * Converts a string into an array of utf-8 codes.\n *\n* @param str utf-8 string\n * @return Uint8Array\n */\nexport const arrayFromUtf8String = (str) => {\n webCryptographer.assert(isString(str), 'arrayFromUtf8String: invalid input');\n // javascript represents strings as utf-16. Jose imposes the use of\n // utf-8, so we need to convert from one representation to the other.\n str = unescape(encodeURIComponent(str));\n return arrayFromString(str);\n};\n\n/**\n * Converts an array of ascii bytes into a string.\n *\n * @param arr arrayish\n * @return ascii string\n */\nexport const stringFromArray = (arr) => {\n arr = arrayish(arr);\n var r = '';\n for (var i = 0; i < arr.length; i++) {\n r += String.fromCharCode(arr[i]);\n }\n\n return r;\n};\n\n/**\n * Converts an array of ascii bytes into a string.\n *\n * @param arr ArrayBuffer\n * @return ascii string\n */\nexport const utf8StringFromArray = (arr) => {\n webCryptographer.assert(arr instanceof ArrayBuffer, 'utf8StringFromArray: invalid input');\n\n // javascript represents strings as utf-16. Jose imposes the use of\n // utf-8, so we need to convert from one representation to the other.\n var r = stringFromArray(arr);\n return decodeURIComponent(escape(r));\n};\n\n/**\n * Strips leading zero in an array.\n *\n * @param arr arrayish\n * @return array\n */\nexport const stripLeadingZeros = (arr) => {\n if (arr instanceof ArrayBuffer) {\n arr = new Uint8Array(arr);\n }\n var isLeadingZero = true;\n var r = [];\n for (var i = 0; i < arr.length; i++) {\n if (isLeadingZero && arr[i] === 0) {\n continue;\n }\n isLeadingZero = false;\n r.push(arr[i]);\n }\n return r;\n};\n\n/**\n * Converts a number into an array of 4 bytes (big endian).\n *\n * @param i number\n * @return ArrayBuffer\n */\nexport const arrayFromInt32 = (i) => {\n webCryptographer.assert(typeof (i) === 'number', 'arrayFromInt32: invalid input');\n // TODO(eslint): figure out if there's a better way to validate i\n // eslint-disable-next-line eqeqeq, no-self-compare\n webCryptographer.assert(i == i | 0, 'arrayFromInt32: out of range');\n\n var buf = new Uint8Array(new Uint32Array([i]).buffer);\n var r = new Uint8Array(4);\n for (var j = 0; j < 4; j++) {\n r[j] = buf[3 - j];\n }\n return r.buffer;\n};\n\n/**\n * Concatenates arrayishes.\n *\n * note: cannot be a Arrow function, because Arrow functions do not expose 'arguments' object\n * and Rest parameters are not supported in Babel yet.\n *\n * @param arguments two or more arrayishes\n * @return Uint8Array\n */\nexport function arrayBufferConcat (/* ... */) {\n // Compute total size\n var args = [];\n var total = 0;\n for (var i = 0; i < arguments.length; i++) {\n args.push(arrayish(arguments[i]));\n total += args[i].length;\n }\n var r = new Uint8Array(total);\n var offset = 0;\n for (i = 0; i < arguments.length; i++) {\n for (var j = 0; j < args[i].length; j++) {\n r[offset++] = args[i][j];\n }\n }\n webCryptographer.assert(offset === total, 'arrayBufferConcat: unexpected offset');\n return r;\n}\n\nexport const sha256 = (str) => {\n // Browser docs indicate the first parameter to crypto.subtle.digest to be a\n // DOMString. This was initially implemented as an object and continues to be\n // supported, so we favor the older form for backwards compatibility.\n return Jose.crypto.subtle.digest({ name: 'SHA-256' }, arrayFromString(str)).then(function (hash) {\n return new Base64Url().encodeArray(hash);\n });\n};\n\nexport const isCryptoKey = (rsaKey) => {\n // Some browsers don't expose the CryptoKey as an object, so we need to check\n // the constructor's name.\n if (rsaKey.constructor.name === 'CryptoKey') {\n return true;\n }\n\n // In the presence of minifiers, relying on class names can be problematic,\n // so let's also allow objects that have an 'algorithm' property.\n if (rsaKey.hasOwnProperty('algorithm')) {\n return true;\n }\n\n return false;\n};\nexport class Base64Url {\n /**\n * Base64Url encodes a string (no trailing '=')\n *\n * @param str string\n * @return string\n */\n encode (str) {\n webCryptographer.assert(isString(str), 'Base64Url.encode: invalid input');\n return btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n }\n\n /**\n * Base64Url encodes an array\n *\n * @param arr array or ArrayBuffer\n * @return string\n */\n encodeArray (arr) {\n return this.encode(stringFromArray(arr));\n }\n\n /**\n * Base64Url decodes a string\n *\n * @param str string\n * @return string\n */\n decode (str) {\n webCryptographer.assert(isString(str), 'Base64Url.decode: invalid input');\n // atob is nice and ignores missing '='\n return atob(str.replace(/-/g, '+').replace(/_/g, '/'));\n }\n\n decodeArray (str) {\n webCryptographer.assert(isString(str), 'Base64Url.decodeArray: invalid input');\n return arrayFromString(this.decode(str));\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/jose.min.js b/dist/jose.min.js index 76847d8..9945430 100644 --- a/dist/jose.min.js +++ b/dist/jose.min.js @@ -1,8 +1,8 @@ -var Jose=function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=7)}([function(t,e,r){"use strict";function n(t,e){for(var r=0;r0&&i.assert(!1,"convertRsaKey: Was expecting "+o.join()),void 0!==t.kty&&i.assert("RSA"===t.kty,"convertRsaKey: expecting rsaKey['kty'] to be 'RSA'"),n.kty="RSA";try{i.getSignConfig(t.alg),r=t.alg}catch(e){try{i.getCryptoConfig(t.alg),r=t.alg}catch(t){i.assert(r,"convertRsaKey: expecting rsaKey['alg'] to have a valid value")}}n.alg=r;for(var a=function(t){return parseInt(t,16)},u=0;u0,i=this.keyEncryption.id;return Jose.crypto.subtle.unwrapKey("raw",t,e,i,r.id,n,r.dec_op)}},{key:"getCekWorkaround",value:function(t){var e=t.specific_cekBytes;if(e){if(16===e)return{id:{name:"AES-CBC",length:128},enc_op:["encrypt"],dec_op:["decrypt"]};if(32===e)return{id:{name:"AES-CBC",length:256},enc_op:["encrypt"],dec_op:["decrypt"]};if(64===e)return{id:{name:"HMAC",hash:{name:"SHA-256"}},enc_op:["sign"],dec_op:["verify"]};if(128===e)return{id:{name:"HMAC",hash:{name:"SHA-384"}},enc_op:["sign"],dec_op:["verify"]};this.assert(!1,"getCekWorkaround: invalid len")}return{id:t.id,enc_op:["encrypt"],dec_op:["decrypt"]}}},{key:"encrypt",value:function(t,e,r,n){var i=this,o=this.content_encryption;if(t.length!==o.iv_bytes)return Promise.reject(Error("invalid IV length"));if(o.auth.aead){var a=o.auth.tagBytes,u={name:o.id.name,iv:t,additionalData:e,tagLength:8*a};return r.then(function(t){return Jose.crypto.subtle.encrypt(u,t,n).then(function(t){var e=t.byteLength-a;return{cipher:t.slice(0,e),tag:t.slice(e)}})})}var s=this.splitKey(o,r,["encrypt"]),f=s[0],c=s[1].then(function(e){var r={name:o.id.name,iv:t};return Jose.crypto.subtle.encrypt(r,e,n)}),h=c.then(function(r){return i.truncatedMac(o,f,e,t,r)});return Promise.all([c,h]).then(function(t){return{cipher:t[0],tag:t[1]}})}},{key:"compare",value:function(t,e,r,n){return this.assert(r instanceof Uint8Array,"compare: invalid input"),this.assert(n instanceof Uint8Array,"compare: invalid input"),e.then(function(e){var i=Jose.crypto.subtle.sign(t.auth.id,e,r),o=Jose.crypto.subtle.sign(t.auth.id,e,n);return Promise.all([i,o]).then(function(t){var e=new Uint8Array(t[0]),r=new Uint8Array(t[1]);if(e.length!==r.length)throw new Error("compare failed");for(var n=0;n0))throw new Error("No recipients defined. At least one is required to verify the JWS.");if(t.waiting_kid)throw new Error("still generating key IDs");return e.forEach(function(e){var a=e.protected.kid;i&&(r[a]=i(a)),o.push(t.cryptographer.verify(e.aad,t.payload,e.signature,r[a],a).then(function(e){return e.verified&&(e.payload=(new n.Base64Url).decode(t.payload)),e}))}),Promise.all(o)}}])&&o(e.prototype,r),a&&o(e,a),t}()},function(t,e,r){"use strict";r.r(e),function(t,n){r.d(e,"crypto",function(){return i}),r.d(e,"Utils",function(){return y}),r.d(e,"JoseJWE",function(){return l}),r.d(e,"JoseJWS",function(){return p}),r.d(e,"setCrypto",function(){return g}),r.d(e,"caniuse",function(){return d});var i,o=r(0),a=r(3),u=r(4),s=r(5),f=r(6),c=r(1);function h(t){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}r.d(e,"WebCryptographer",function(){return c.a});var y=o,l={Encrypter:a.a,Decrypter:u.a},p={Signer:s.a,Verifier:f.a},g=function(t){i=t};"undefined"!=typeof window&&void 0!==window.crypto&&(g(window.crypto),i.subtle||(i.subtle=i.webkitSubtle)),"function"!=typeof atob&&(atob=function(e){return t.from(e,"base64").toString("binary")}),"function"!=typeof btoa&&(btoa=function(e){return(e instanceof t?e:t.from(e.toString(),"binary")).toString("base64")});var d=function(){var t=!0;t=(t=(t=(t=t&&"function"==typeof Promise)&&"function"==typeof Promise.reject)&&"function"==typeof Promise.prototype.then)&&"function"==typeof Promise.all;var e=window||n;return t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t&&"object"===h(e.crypto))&&"object"===h(e.crypto.subtle))&&"function"==typeof e.crypto.getRandomValues)&&"function"==typeof e.crypto.subtle.importKey)&&"function"==typeof e.crypto.subtle.generateKey)&&"function"==typeof e.crypto.subtle.exportKey)&&"function"==typeof e.crypto.subtle.wrapKey)&&"function"==typeof e.crypto.subtle.unwrapKey)&&"function"==typeof e.crypto.subtle.encrypt)&&"function"==typeof e.crypto.subtle.decrypt)&&"function"==typeof e.crypto.subtle.sign)&&"function"==typeof ArrayBuffer)&&("function"==typeof Uint8Array||"object"===("undefined"==typeof Uint8Array?"undefined":h(Uint8Array))))&&("function"==typeof Uint32Array||"object"===("undefined"==typeof Uint32Array?"undefined":h(Uint32Array))))&&"object"===("undefined"==typeof JSON?"undefined":h(JSON)))&&"function"==typeof JSON.parse)&&"function"==typeof JSON.stringify)&&"function"==typeof atob)&&"function"==typeof btoa}}.call(this,r(8).Buffer,r(2))},function(t,e,r){"use strict";(function(t){ +var Jose=function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=7)}([function(t,e,r){"use strict";function n(t,e){for(var r=0;r0&&i.assert(!1,"convertRsaKey: Was expecting "+o.join()),void 0!==t.kty&&i.assert("RSA"===t.kty,"convertRsaKey: expecting rsaKey['kty'] to be 'RSA'"),n.kty="RSA";try{i.getSignConfig(t.alg),r=t.alg}catch(e){try{i.getCryptoConfig(t.alg),r=t.alg}catch(t){i.assert(r,"convertRsaKey: expecting rsaKey['alg'] to have a valid value")}}n.alg=r;for(var a=function(t){return parseInt(t,16)},u=0;u0,i=this.keyEncryption.id;return Jose.crypto.subtle.unwrapKey("raw",t,e,i,r.id,n,r.dec_op)}},{key:"getCekWorkaround",value:function(t){var e=t.specific_cekBytes;if(e){if(16===e)return{id:{name:"AES-CBC",length:128},enc_op:["encrypt"],dec_op:["decrypt"]};if(32===e)return{id:{name:"AES-CBC",length:256},enc_op:["encrypt"],dec_op:["decrypt"]};if(64===e)return{id:{name:"HMAC",hash:{name:"SHA-256"}},enc_op:["sign"],dec_op:["verify"]};if(128===e)return{id:{name:"HMAC",hash:{name:"SHA-384"}},enc_op:["sign"],dec_op:["verify"]};this.assert(!1,"getCekWorkaround: invalid len")}return{id:t.id,enc_op:["encrypt"],dec_op:["decrypt"]}}},{key:"encrypt",value:function(t,e,r,n){var i=this,o=this.content_encryption;if(t.length!==o.iv_bytes)return Promise.reject(Error("invalid IV length"));if(o.auth.aead){var a=o.auth.tagBytes,u={name:o.id.name,iv:t,additionalData:e,tagLength:8*a};return r.then(function(t){return Jose.crypto.subtle.encrypt(u,t,n).then(function(t){var e=t.byteLength-a;return{cipher:t.slice(0,e),tag:t.slice(e)}})})}var s=this.splitKey(o,r,["encrypt"]),f=s[0],c=s[1].then(function(e){var r={name:o.id.name,iv:t};return Jose.crypto.subtle.encrypt(r,e,n)}),h=c.then(function(r){return i.truncatedMac(o,f,e,t,r)});return Promise.all([c,h]).then(function(t){return{cipher:t[0],tag:t[1]}})}},{key:"compare",value:function(t,e,r,n){return this.assert(r instanceof Uint8Array,"compare: invalid input"),this.assert(n instanceof Uint8Array,"compare: invalid input"),e.then(function(e){var i=Jose.crypto.subtle.sign(t.auth.id,e,r),o=Jose.crypto.subtle.sign(t.auth.id,e,n);return Promise.all([i,o]).then(function(t){var e=new Uint8Array(t[0]),r=new Uint8Array(t[1]);if(e.length!==r.length)throw new Error("compare failed");for(var n=0;n0))throw new Error("No recipients defined. At least one is required to verify the JWS.");if(t.waiting_kid)throw new Error("still generating key IDs");return e.forEach(function(e){var a=e.protected.kid;i&&(r[a]=i(a)),o.push(t.cryptographer.verify(e.aad,t.payload,e.signature,r[a],a).then(function(e){return e.verified&&(e.payload=(new n.Base64Url).decode(t.payload)),e}))}),Promise.all(o)}}])&&o(e.prototype,r),a&&o(e,a),t}()},function(t,e,r){"use strict";r.r(e),function(t,n){r.d(e,"crypto",function(){return i}),r.d(e,"Utils",function(){return y}),r.d(e,"Jose",function(){return g}),r.d(e,"JoseJWE",function(){return l}),r.d(e,"JoseJWS",function(){return p}),r.d(e,"setCrypto",function(){return d}),r.d(e,"caniuse",function(){return v});var i,o=r(0),a=r(3),u=r(4),s=r(5),f=r(6),c=r(1);function h(t){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}r.d(e,"WebCryptographer",function(){return c.a});var y=o,l={Encrypter:a.a,Decrypter:u.a},p={Signer:s.a,Verifier:f.a},g={JoseJWS:p,JoseJWE:l};e.default={Jose:g};var d=function(t){i=t};"undefined"!=typeof window&&void 0!==window.crypto&&(d(window.crypto),i.subtle||(i.subtle=i.webkitSubtle)),"function"!=typeof atob&&(atob=function(e){return t.from(e,"base64").toString("binary")}),"function"!=typeof btoa&&(btoa=function(e){return(e instanceof t?e:t.from(e.toString(),"binary")).toString("base64")});var v=function(){var t=!0;t=(t=(t=(t=t&&"function"==typeof Promise)&&"function"==typeof Promise.reject)&&"function"==typeof Promise.prototype.then)&&"function"==typeof Promise.all;var e=window||n;return t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t&&"object"===h(e.crypto))&&"object"===h(e.crypto.subtle))&&"function"==typeof e.crypto.getRandomValues)&&"function"==typeof e.crypto.subtle.importKey)&&"function"==typeof e.crypto.subtle.generateKey)&&"function"==typeof e.crypto.subtle.exportKey)&&"function"==typeof e.crypto.subtle.wrapKey)&&"function"==typeof e.crypto.subtle.unwrapKey)&&"function"==typeof e.crypto.subtle.encrypt)&&"function"==typeof e.crypto.subtle.decrypt)&&"function"==typeof e.crypto.subtle.sign)&&"function"==typeof ArrayBuffer)&&("function"==typeof Uint8Array||"object"===("undefined"==typeof Uint8Array?"undefined":h(Uint8Array))))&&("function"==typeof Uint32Array||"object"===("undefined"==typeof Uint32Array?"undefined":h(Uint32Array))))&&"object"===("undefined"==typeof JSON?"undefined":h(JSON)))&&"function"==typeof JSON.parse)&&"function"==typeof JSON.stringify)&&"function"==typeof atob)&&"function"==typeof btoa}}.call(this,r(8).Buffer,r(2))},function(t,e,r){"use strict";(function(t){ /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ -var n=r(9),i=r(10),o=r(11);function a(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function u(t,e){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function p(t,e){if(s.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return x(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return L(t).length;default:if(n)return x(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,e,r);case"utf8":case"utf-8":return C(this,e,r);case"ascii":return R(this,e,r);case"latin1":case"binary":return U(this,e,r);case"base64":return P(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function v(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=s.from(e,n)),s.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,a=1,u=t.length,s=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,u/=2,s/=2,r/=2}function f(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var c=-1;for(o=r;ou&&(r=u-s),o=r;o>=0;o--){for(var h=!0,y=0;yi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function P(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function C(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(c=f);break;case 2:128==(192&(o=t[i+1]))&&(s=(31&f)<<6|63&o)>127&&(c=s);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(s=(15&f)<<12|(63&o)<<6|63&a)>2047&&(s<55296||s>57343)&&(c=s);break;case 4:o=t[i+1],a=t[i+2],u=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&u)&&(s=(15&f)<<18|(63&o)<<12|(63&a)<<6|63&u)>65535&&s<1114112&&(c=s)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(t){var e=t.length;if(e<=k)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},s.prototype.compare=function(t,e,r,n,i){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(e>>>=0),u=Math.min(o,a),f=this.slice(n,i),c=t.slice(e,r),h=0;hi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return w(this,t,e,r);case"utf8":case"utf-8":return S(this,t,e,r);case"ascii":return A(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var k=4096;function R(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function T(t,e,r,n,i,o){if(!s.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function j(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function I(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function M(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function J(t,e,r,n,o){return o||M(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function Y(t,e,r,n,o){return o||M(t,0,r,8),i.write(t,e,r,n,52,8),r+8}s.prototype.slice=function(t,e){var r,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},s.prototype.readUInt8=function(t,e){return e||K(t,1,this.length),this[t]},s.prototype.readUInt16LE=function(t,e){return e||K(t,2,this.length),this[t]|this[t+1]<<8},s.prototype.readUInt16BE=function(t,e){return e||K(t,2,this.length),this[t]<<8|this[t+1]},s.prototype.readUInt32LE=function(t,e){return e||K(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},s.prototype.readUInt32BE=function(t,e){return e||K(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},s.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||K(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},s.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||K(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},s.prototype.readInt8=function(t,e){return e||K(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},s.prototype.readInt16LE=function(t,e){e||K(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt16BE=function(t,e){e||K(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt32LE=function(t,e){return e||K(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},s.prototype.readInt32BE=function(t,e){return e||K(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},s.prototype.readFloatLE=function(t,e){return e||K(t,4,this.length),i.read(this,t,!0,23,4)},s.prototype.readFloatBE=function(t,e){return e||K(t,4,this.length),i.read(this,t,!1,23,4)},s.prototype.readDoubleLE=function(t,e){return e||K(t,8,this.length),i.read(this,t,!0,52,8)},s.prototype.readDoubleBE=function(t,e){return e||K(t,8,this.length),i.read(this,t,!1,52,8)},s.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e|=0,r|=0,n)||T(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},s.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,1,255,0),s.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},s.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):j(this,t,e,!0),e+2},s.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):j(this,t,e,!1),e+2},s.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):I(this,t,e,!0),e+4},s.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},s.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);T(this,t,e,r,i-1,-i)}var o=0,a=1,u=0;for(this[e]=255&t;++o>0)-u&255;return e+r},s.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);T(this,t,e,r,i-1,-i)}var o=r-1,a=1,u=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===u&&0!==this[e+o+1]&&(u=1),this[e+o]=(t/a>>0)-u&255;return e+r},s.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,1,127,-128),s.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},s.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):j(this,t,e,!0),e+2},s.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):j(this,t,e,!1),e+2},s.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):I(this,t,e,!0),e+4},s.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},s.prototype.writeFloatLE=function(t,e,r){return J(this,t,e,!0,r)},s.prototype.writeFloatBE=function(t,e,r){return J(this,t,e,!1,r)},s.prototype.writeDoubleLE=function(t,e,r){return Y(this,t,e,!0,r)},s.prototype.writeDoubleBE=function(t,e,r){return Y(this,t,e,!1,r)},s.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(o<1e3||!s.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function L(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(H,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function D(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(2))},function(t,e,r){"use strict";e.byteLength=function(t){var e=f(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){for(var e,r=f(t),n=r[0],a=r[1],u=new o(function(t,e,r){return 3*(e+r)/4-r}(0,n,a)),s=0,c=a>0?n-4:n,h=0;h>16&255,u[s++]=e>>8&255,u[s++]=255&e;2===a&&(e=i[t.charCodeAt(h)]<<2|i[t.charCodeAt(h+1)]>>4,u[s++]=255&e);1===a&&(e=i[t.charCodeAt(h)]<<10|i[t.charCodeAt(h+1)]<<4|i[t.charCodeAt(h+2)]>>2,u[s++]=e>>8&255,u[s++]=255&e);return u},e.fromByteArray=function(t){for(var e,r=t.length,i=r%3,o=[],a=0,u=r-i;au?u:a+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0,s=a.length;u0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function c(t,e,r){for(var i,o,a=[],u=e;u>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,a,u=8*i-n-1,s=(1<>1,c=-7,h=r?i-1:0,y=r?-1:1,l=t[e+h];for(h+=y,o=l&(1<<-c)-1,l>>=-c,c+=u;c>0;o=256*o+t[e+h],h+=y,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=256*a+t[e+h],h+=y,c-=8);if(0===o)o=1-f;else{if(o===s)return a?NaN:1/0*(l?-1:1);a+=Math.pow(2,n),o-=f}return(l?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,u,s,f=8*o-i-1,c=(1<>1,y=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(s=Math.pow(2,-a))<1&&(a--,s*=2),(e+=a+h>=1?y/s:y*Math.pow(2,1-h))*s>=2&&(a++,s/=2),a+h>=c?(u=0,a=c):a+h>=1?(u=(e*s-1)*Math.pow(2,i),a+=h):(u=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[r+l]=255&u,l+=p,u/=256,i-=8);for(a=a<0;t[r+l]=255&a,l+=p,a/=256,f-=8);t[r+l-p]|=128*g}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}}]); +var n=r(9),i=r(10),o=r(11);function a(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function u(t,e){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function p(t,e){if(s.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return x(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return L(t).length;default:if(n)return x(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,e,r);case"utf8":case"utf-8":return C(this,e,r);case"ascii":return R(this,e,r);case"latin1":case"binary":return U(this,e,r);case"base64":return P(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function v(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=s.from(e,n)),s.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,a=1,u=t.length,s=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,u/=2,s/=2,r/=2}function f(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var c=-1;for(o=r;ou&&(r=u-s),o=r;o>=0;o--){for(var h=!0,y=0;yi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function P(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function C(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(c=f);break;case 2:128==(192&(o=t[i+1]))&&(s=(31&f)<<6|63&o)>127&&(c=s);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(s=(15&f)<<12|(63&o)<<6|63&a)>2047&&(s<55296||s>57343)&&(c=s);break;case 4:o=t[i+1],a=t[i+2],u=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&u)&&(s=(15&f)<<18|(63&o)<<12|(63&a)<<6|63&u)>65535&&s<1114112&&(c=s)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(t){var e=t.length;if(e<=k)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},s.prototype.compare=function(t,e,r,n,i){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(e>>>=0),u=Math.min(o,a),f=this.slice(n,i),c=t.slice(e,r),h=0;hi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return w(this,t,e,r);case"utf8":case"utf-8":return S(this,t,e,r);case"ascii":return A(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var k=4096;function R(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function T(t,e,r,n,i,o){if(!s.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function j(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function I(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function J(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function M(t,e,r,n,o){return o||J(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function Y(t,e,r,n,o){return o||J(t,0,r,8),i.write(t,e,r,n,52,8),r+8}s.prototype.slice=function(t,e){var r,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},s.prototype.readUInt8=function(t,e){return e||K(t,1,this.length),this[t]},s.prototype.readUInt16LE=function(t,e){return e||K(t,2,this.length),this[t]|this[t+1]<<8},s.prototype.readUInt16BE=function(t,e){return e||K(t,2,this.length),this[t]<<8|this[t+1]},s.prototype.readUInt32LE=function(t,e){return e||K(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},s.prototype.readUInt32BE=function(t,e){return e||K(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},s.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||K(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},s.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||K(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},s.prototype.readInt8=function(t,e){return e||K(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},s.prototype.readInt16LE=function(t,e){e||K(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt16BE=function(t,e){e||K(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt32LE=function(t,e){return e||K(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},s.prototype.readInt32BE=function(t,e){return e||K(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},s.prototype.readFloatLE=function(t,e){return e||K(t,4,this.length),i.read(this,t,!0,23,4)},s.prototype.readFloatBE=function(t,e){return e||K(t,4,this.length),i.read(this,t,!1,23,4)},s.prototype.readDoubleLE=function(t,e){return e||K(t,8,this.length),i.read(this,t,!0,52,8)},s.prototype.readDoubleBE=function(t,e){return e||K(t,8,this.length),i.read(this,t,!1,52,8)},s.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e|=0,r|=0,n)||T(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},s.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,1,255,0),s.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},s.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):j(this,t,e,!0),e+2},s.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):j(this,t,e,!1),e+2},s.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):I(this,t,e,!0),e+4},s.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},s.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);T(this,t,e,r,i-1,-i)}var o=0,a=1,u=0;for(this[e]=255&t;++o>0)-u&255;return e+r},s.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);T(this,t,e,r,i-1,-i)}var o=r-1,a=1,u=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===u&&0!==this[e+o+1]&&(u=1),this[e+o]=(t/a>>0)-u&255;return e+r},s.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,1,127,-128),s.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},s.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):j(this,t,e,!0),e+2},s.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):j(this,t,e,!1),e+2},s.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):I(this,t,e,!0),e+4},s.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||T(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),s.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},s.prototype.writeFloatLE=function(t,e,r){return M(this,t,e,!0,r)},s.prototype.writeFloatBE=function(t,e,r){return M(this,t,e,!1,r)},s.prototype.writeDoubleLE=function(t,e,r){return Y(this,t,e,!0,r)},s.prototype.writeDoubleBE=function(t,e,r){return Y(this,t,e,!1,r)},s.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(o<1e3||!s.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function L(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(H,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function D(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(2))},function(t,e,r){"use strict";e.byteLength=function(t){var e=f(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){for(var e,r=f(t),n=r[0],a=r[1],u=new o(function(t,e,r){return 3*(e+r)/4-r}(0,n,a)),s=0,c=a>0?n-4:n,h=0;h>16&255,u[s++]=e>>8&255,u[s++]=255&e;2===a&&(e=i[t.charCodeAt(h)]<<2|i[t.charCodeAt(h+1)]>>4,u[s++]=255&e);1===a&&(e=i[t.charCodeAt(h)]<<10|i[t.charCodeAt(h+1)]<<4|i[t.charCodeAt(h+2)]>>2,u[s++]=e>>8&255,u[s++]=255&e);return u},e.fromByteArray=function(t){for(var e,r=t.length,i=r%3,o=[],a=0,u=r-i;au?u:a+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0,s=a.length;u0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function c(t,e,r){for(var i,o,a=[],u=e;u>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,a,u=8*i-n-1,s=(1<>1,c=-7,h=r?i-1:0,y=r?-1:1,l=t[e+h];for(h+=y,o=l&(1<<-c)-1,l>>=-c,c+=u;c>0;o=256*o+t[e+h],h+=y,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=256*a+t[e+h],h+=y,c-=8);if(0===o)o=1-f;else{if(o===s)return a?NaN:1/0*(l?-1:1);a+=Math.pow(2,n),o-=f}return(l?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,u,s,f=8*o-i-1,c=(1<>1,y=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(s=Math.pow(2,-a))<1&&(a--,s*=2),(e+=a+h>=1?y/s:y*Math.pow(2,1-h))*s>=2&&(a++,s/=2),a+h>=c?(u=0,a=c):a+h>=1?(u=(e*s-1)*Math.pow(2,i),a+=h):(u=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[r+l]=255&u,l+=p,u/=256,i-=8);for(a=a<0;t[r+l]=255&a,l+=p,a/=256,f-=8);t[r+l-p]|=128*g}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}}]); \ No newline at end of file diff --git a/lib/jose-core.js b/lib/jose-core.js index 9a1a187..f7c9b2a 100644 --- a/lib/jose-core.js +++ b/lib/jose-core.js @@ -33,7 +33,7 @@ export { WebCryptographer } from './jose-jwe-webcryptographer'; /** * Initializes a JoseJWE object. */ -export var JoseJWE = { +const JoseJWE = { Encrypter, Decrypter }; @@ -41,11 +41,16 @@ export var JoseJWE = { /** * Initializes a JoseJWS object. */ -export var JoseJWS = { +const JoseJWS = { Signer, Verifier }; +const Jose = { JoseJWS, JoseJWE }; + +export default { Jose }; +export { Jose, JoseJWE, JoseJWS }; + /** * Set crypto provider to use (window.crypto, node-webcrypto-ossl, node-webcrypto-pkcs11 etc.). */ diff --git a/lib/jose-core.test.js b/lib/jose-core.test.js new file mode 100644 index 0000000..4d21728 --- /dev/null +++ b/lib/jose-core.test.js @@ -0,0 +1,6 @@ +import DefaultJose, { Jose } from './jose-core.js'; + +it('ensure imports work', () => { + expect(Jose).not.toBeUndefined(); + expect(DefaultJose).not.toBeUndefined(); +}); diff --git a/package.json b/package.json index 7f88c0a..99f6ae6 100644 --- a/package.json +++ b/package.json @@ -18,30 +18,35 @@ }, "scripts": { "build": "grunt", - "lint": "eslint lib --fix" + "lint": "eslint lib --fix", + "test": "jest" }, "devDependencies": { - "@babel/core": "^7.1.2", - "@babel/preset-env": "^7.1.0", + "@babel/core": "^7.4.5", + "@babel/preset-env": "^7.4.5", "@webpack-cli/init": "^0.1.1", "babel": "^6.23.0", "babel-core": "^6.26.3", + "babel-jest": "^24.8.0", "babel-loader": "^8.0.4", "babel-plugin-syntax-dynamic-import": "^6.18.0", "coveralls": "^2.13.1", "eslint": "^6.0.1", "eslint-config-standard": "^12.0.0", "eslint-plugin-import": "^2.18.0", + "eslint-plugin-jest": "^22.13.5", "eslint-plugin-node": "^9.1.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.0", - "grunt": "~1.0.1", + "grunt": "^1.0.4", "grunt-contrib-concat": "^1.0.1", "grunt-contrib-uglify": "^3.1.0", "grunt-eslint": "^22.0.0", "grunt-karma": "^2.0.0", "grunt-karma-coveralls": "^2.5.4", + "grunt-run": "^0.8.1", "grunt-webpack": "^3.1.3", + "jest": "^24.8.0", "karma": "^1.7.1", "karma-chrome-launcher": "^2.2.0", "karma-coverage": "^1.1.1",