{"version":3,"sources":["webpack:///./src/authHelper/index.js","webpack:///./src/components/NavBar.vue?3895","webpack:///src/components/NavBar.vue","webpack:///./src/components/NavBar.vue?45cf","webpack:///./src/components/NavBar.vue","webpack:///./node_modules/jose/dist/browser/runtime/webcrypto.js","webpack:///./node_modules/jose/dist/browser/runtime/digest.js","webpack:///./node_modules/jose/dist/browser/lib/buffer_utils.js","webpack:///./node_modules/jose/dist/browser/runtime/base64url.js","webpack:///./node_modules/jose/dist/browser/util/errors.js","webpack:///./node_modules/jose/dist/browser/runtime/random.js","webpack:///./node_modules/jose/dist/browser/lib/iv.js","webpack:///./node_modules/jose/dist/browser/lib/check_iv_length.js","webpack:///./node_modules/jose/dist/browser/runtime/check_cek_length.js","webpack:///./node_modules/jose/dist/browser/runtime/timing_safe_equal.js","webpack:///./node_modules/jose/dist/browser/runtime/env.js","webpack:///./node_modules/jose/dist/browser/lib/crypto_key.js","webpack:///./node_modules/jose/dist/browser/lib/invalid_key_input.js","webpack:///./node_modules/jose/dist/browser/runtime/is_key_like.js","webpack:///./node_modules/jose/dist/browser/runtime/decrypt.js","webpack:///./node_modules/jose/dist/browser/runtime/zlib.js","webpack:///./node_modules/jose/dist/browser/lib/is_disjoint.js","webpack:///./node_modules/jose/dist/browser/lib/is_object.js","webpack:///./node_modules/jose/dist/browser/runtime/bogus.js","webpack:///./node_modules/jose/dist/browser/runtime/aeskw.js","webpack:///./node_modules/jose/dist/browser/runtime/ecdhes.js","webpack:///./node_modules/jose/dist/browser/lib/check_p2s.js","webpack:///./node_modules/jose/dist/browser/runtime/pbes2kw.js","webpack:///./node_modules/jose/dist/browser/runtime/subtle_rsaes.js","webpack:///./node_modules/jose/dist/browser/runtime/check_key_length.js","webpack:///./node_modules/jose/dist/browser/runtime/rsaes.js","webpack:///./node_modules/jose/dist/browser/lib/cek.js","webpack:///./node_modules/jose/dist/browser/lib/format_pem.js","webpack:///./node_modules/jose/dist/browser/runtime/asn1.js","webpack:///./node_modules/jose/dist/browser/runtime/jwk_to_key.js","webpack:///./node_modules/jose/dist/browser/key/import.js","webpack:///./node_modules/jose/dist/browser/lib/check_key_type.js","webpack:///./node_modules/jose/dist/browser/runtime/encrypt.js","webpack:///./node_modules/jose/dist/browser/lib/aesgcmkw.js","webpack:///./node_modules/jose/dist/browser/lib/decrypt_key_management.js","webpack:///./node_modules/jose/dist/browser/lib/validate_crit.js","webpack:///./node_modules/jose/dist/browser/lib/validate_algorithms.js","webpack:///./node_modules/jose/dist/browser/jwe/flattened/decrypt.js","webpack:///./node_modules/jose/dist/browser/jwe/compact/decrypt.js","webpack:///./node_modules/jose/dist/browser/jwe/general/decrypt.js","webpack:///./node_modules/jose/dist/browser/runtime/key_to_jwk.js","webpack:///./node_modules/jose/dist/browser/key/export.js","webpack:///./node_modules/jose/dist/browser/lib/encrypt_key_management.js","webpack:///./node_modules/jose/dist/browser/jwe/flattened/encrypt.js","webpack:///./node_modules/jose/dist/browser/jwe/general/encrypt.js","webpack:///./node_modules/jose/dist/browser/runtime/subtle_dsa.js","webpack:///./node_modules/jose/dist/browser/runtime/get_sign_verify_key.js","webpack:///./node_modules/jose/dist/browser/runtime/verify.js","webpack:///./node_modules/jose/dist/browser/jws/flattened/verify.js","webpack:///./node_modules/jose/dist/browser/jws/compact/verify.js","webpack:///./node_modules/jose/dist/browser/jws/general/verify.js","webpack:///./node_modules/jose/dist/browser/lib/epoch.js","webpack:///./node_modules/jose/dist/browser/lib/secs.js","webpack:///./node_modules/jose/dist/browser/lib/jwt_claims_set.js","webpack:///./node_modules/jose/dist/browser/jwt/verify.js","webpack:///./node_modules/jose/dist/browser/jwt/decrypt.js","webpack:///./node_modules/jose/dist/browser/jwe/compact/encrypt.js","webpack:///./node_modules/jose/dist/browser/runtime/sign.js","webpack:///./node_modules/jose/dist/browser/jws/flattened/sign.js","webpack:///./node_modules/jose/dist/browser/jws/compact/sign.js","webpack:///./node_modules/jose/dist/browser/jws/general/sign.js","webpack:///./node_modules/jose/dist/browser/jwt/produce.js","webpack:///./node_modules/jose/dist/browser/jwt/sign.js","webpack:///./node_modules/jose/dist/browser/jwt/encrypt.js","webpack:///./node_modules/jose/dist/browser/jwk/thumbprint.js","webpack:///./node_modules/jose/dist/browser/jwk/embedded.js","webpack:///./node_modules/jose/dist/browser/jwks/local.js","webpack:///./node_modules/jose/dist/browser/runtime/fetch_jwks.js","webpack:///./node_modules/jose/dist/browser/jwks/remote.js","webpack:///./node_modules/jose/dist/browser/jwt/unsecured.js","webpack:///./node_modules/jose/dist/browser/util/base64url.js","webpack:///./node_modules/jose/dist/browser/util/decode_protected_header.js","webpack:///./node_modules/jose/dist/browser/util/decode_jwt.js","webpack:///./node_modules/jose/dist/browser/runtime/generate.js","webpack:///./node_modules/jose/dist/browser/key/generate_key_pair.js","webpack:///./node_modules/jose/dist/browser/key/generate_secret.js"],"names":["jose","require","getCurrentUser","shouldCreateAnonymous","Promise","resolve","reject","firebase","auth","onAuthStateChanged","user","getIdToken","then","idToken","anonymous","originalUserObj","catch","err","getAnonUserOrCreateOneIfExpired","Webservice","createAnonymousUser","res","localStorage","setItem","data","jwt","signOut","createAnonUser","getOrCreateAnonUser","removeAnonUserFromLocalStorage","mergeUser","firebaseUser","anonUser","jwtStorage","getItem","isJWTExpired","newUser","token","expiry","decodeJwt","exp","now","Date","getTime","render","_vm","this","_h","$createElement","_c","_self","staticClass","staticStyle","attrs","_v","_s","bookTitle","name","routes","BUY","FEEDBACK","SUBSCRIBE","TUTORIAL","params","tutorialId","slug","PRODUCTS","MY_COURSES","CART","LOGIN","_e","on","_m","staticRenderFns","loading","showLogin","showSignOut","created","resetNavbarStatus","methods","fetchData","console","AuthHelper","component","isCryptoKey","key","CryptoKey","digest","async","algorithm","subtleDigest","slice","Uint8Array","subtle","encoder","TextEncoder","decoder","TextDecoder","MAX_INT32","concat","buffers","size","reduce","acc","length","buf","i","forEach","buffer","set","alg","p2sInput","encode","writeUInt32BE","value","offset","RangeError","uint64be","high","Math","floor","low","uint32be","lengthAndInput","input","concatKdf","secret","bits","iterations","ceil","iter","encodeBase64","unencoded","CHUNK_SIZE","arr","push","String","fromCharCode","apply","subarray","btoa","join","replace","decodeBase64","encoded","binary","atob","bytes","charCodeAt","decode","_a","TypeError","JOSEError","Error","message","super","code","constructor","captureStackTrace","call","JWTClaimValidationFailed","claim","reason","JWTExpired","JOSEAlgNotAllowed","arguments","JOSENotSupported","JWEDecryptionFailed","JWEInvalid","JWSInvalid","JWTInvalid","JWKInvalid","JWKSInvalid","JWKSNoMatchingKey","JWKSMultipleMatchingKeys","JWKSTimeout","JWSSignatureVerificationFailed","getRandomValues","bind","bitLength","random","checkIvLength","enc","iv","checkCekLength","cek","expected","timingSafeEqual","a","b","len","out","isCloudflareWorkers","WebSocketPair","unusable","prop","isAlgorithm","getHashLength","hash","parseInt","getNamedCurve","checkUsage","usages","some","includes","msg","last","pop","checkSigCryptoKey","actual","namedCurve","checkEncCryptoKey","types","cbcDecrypt","ciphertext","tag","aad","keySize","encKey","importKey","macKey","macData","expectedTag","sign","macCheckPassed","plaintext","decrypt","_b","gcmDecrypt","additionalData","tagLength","inflate","deflate","isDisjoint","headers","sources","filter","Boolean","header","parameters","Object","keys","parameter","has","add","Set","isObjectLike","isObject","prototype","toString","getPrototypeOf","proto","bogusWebCrypto","bogus","checkKeySize","getCryptoKey","usage","wrap","cryptoKey","cryptoKeyCek","wrapKey","unwrap","encryptedKey","unwrapKey","exportKey","deriveKey","publicKey","privateKey","keyLength","apu","apv","sharedSecret","deriveBits","public","generateEpk","generateKey","ecdhAllowed","checkP2s","p2s","p2c","salt","keylen","subtleAlg","wrapAlg","encrypt","derived","subtleRsaEs","startsWith","modulusLength","newlined","b64","match","descriptor","genericExport","keyType","keyFormat","extractable","type","toUpperCase","toSPKI","toPKCS8","findOid","keyData","oid","from","unshift","indexOf","sub","every","index","genericImport","pem","options","keyUsages","split","map","c","isPublic","fromPKCS8","fromSPKI","subtleMapping","jwk","kty","d","crv","parse","rest","ext","key_ops","k","getElement","seq","result","next","nextPart","parseElement","byteLength","position","numberOfDigits","contents","raw","spkiFromX509","tbsCertificate","getSPKI","x509","importSPKI","spki","importX509","importPKCS8","pkcs8","importJWK","octAsKeyObject","undefined","oth","symmetricTypeCheck","asymmetricTypeCheck","checkKeyType","symmetric","test","cbcEncrypt","gcmEncrypt","encrypted","jweAlgorithm","decryptKeyManagement","joseHeader","epk","partyUInfo","partyVInfo","validateCrit","Err","recognizedDefault","recognizedOption","protectedHeader","crit","Array","isArray","recognized","Map","entries","get","validateAlgorithms","option","algorithms","s","flattenedDecrypt","jwe","protected","unprotected","encrypted_key","parsedProt","JSON","zip","keyManagementAlgorithms","contentEncryptionAlgorithms","resolvedKey","inflateRaw","additionalAuthenticatedData","sharedUnprotectedHeader","unprotectedHeader","compactDecrypt","0","1","2","3","4","decrypted","generalDecrypt","recipients","recipient","keyToJWK","use","exportSPKI","exportPKCS8","exportJWK","encryptKeyManagement","providedCek","providedParameters","ephemeralKey","x","y","kwAlg","Symbol","_plaintext","_keyManagementParameters","_protectedHeader","_sharedUnprotectedHeader","_unprotectedHeader","_aad","_cek","_iv","aadMember","setUnprotectedHeader","setProtectedHeader","stringify","deflated","deflateRaw","IndividualRecipient","parent","args","addRecipient","_recipients","flattened","setAdditionalAuthenticatedData","setSharedUnprotectedHeader","target","setContentEncryptionKey","setKeyManagementParameters","subtleDsa","saltLength","verify","signature","flattenedVerify","jws","payload","extensions","verified","compactVerify","generalVerify","signatures","minute","hour","day","week","year","REGEX","matched","exec","str","parseFloat","unit","toLowerCase","round","normalizeTyp","checkAudiencePresence","audPayload","audOption","typ","encodedPayload","issuer","iss","subject","audience","aud","tolerance","clockTolerance","secs","currentDate","epoch","iat","maxTokenAge","nbf","age","max","jwtVerify","jwtDecrypt","_flattened","setInitializationVector","_payload","IndividualSignature","sig","addSignature","_signatures","jwtId","jti","_replicateIssuerAsHeader","_replicateSubjectAsHeader","_replicateAudienceAsHeader","check","description","calculateJwkThumbprint","digestAlgorithm","components","e","n","EmbeddedJWK","getKtyFromAlg","isJWKSLike","jwks","isJWKLike","clone","obj","structuredClone","_cached","WeakMap","_jwks","kid","candidates","candidate","cached","keyObject","createLocalJWKSet","getKey","fetchJwks","url","timeout","controller","id","timedOut","AbortController","setTimeout","abort","response","fetch","href","signal","redirect","clearTimeout","status","json","URL","_url","_options","agent","_timeoutDuration","timeoutDuration","_cooldownDuration","cooldownDuration","_cacheMaxAge","cacheMaxAge","_jwksTimestamp","fresh","reload","coolingDown","_pendingFetch","isDone","createRemoteJWKSet","encodedHeader","decodeProtectedHeader","protectedB64u","parts","decoded","generateSecret","getModulusLengthOption","generateKeyPair","publicExponent"],"mappings":"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","file":"js/chunk-365b8e82.9b3d4282.js","sourcesContent":["\nimport firebase from \"firebase/compat\"\nimport \"firebase/compat/auth\"\nimport Webservice from \"../webservice\";\nconst jose = require('jose')\n\nfunction getCurrentUser(shouldCreateAnonymous){\n return new Promise(function (resolve, reject){\n firebase.auth().onAuthStateChanged((user)=>{\n if (user !== null){\n // we have a connected user\n user.getIdToken().then((idToken)=>{\n resolve({\n anonymous: false,\n idToken:idToken,\n originalUserObj : user\n })\n }).catch((err)=>{\n reject(\"impossible to get idToken: \"+err)\n })\n } else {\n // first check if we have an anon user\n getAnonUserOrCreateOneIfExpired().then((user)=>{\n resolve(user)\n }).catch(()=>{\n // no anon user\n if (shouldCreateAnonymous){\n Webservice.createAnonymousUser().then((res)=> {\n // save anon user\n localStorage.setItem('jwt_anon', res.data.jwt);\n resolve({\n anonymous: true,\n idToken: res.data.jwt\n })\n }).catch((err)=> {\n reject(\"impossible to create anonymous user:\"+err)\n })\n } else {\n reject(\"no firebase user\")\n }\n })\n }\n })\n })\n}\n\nfunction signOut(){\n return new Promise(function (resolve,reject){\n localStorage.setItem('jwt_anon', \"\");\n firebase.auth().signOut().then(()=>{\n resolve(\"signedOut\")\n }).catch((err)=>{\n reject(err)\n })\n\n })\n}\n\nfunction createAnonUser(){\n return new Promise(function (resolve,reject) {\n Webservice.createAnonymousUser().then((res) => {\n // save anon user\n localStorage.setItem('jwt_anon', res.data.jwt);\n resolve({\n anonymous: true,\n idToken: res.data.jwt\n })\n }).catch((err) => {\n reject(\"impossible to create anonymous user:\" + err)\n })\n })\n}\n\nfunction getOrCreateAnonUser(){\n return new Promise(function (resolve,reject){\n getAnonUserOrCreateOneIfExpired().then((user)=>{\n resolve(user)\n }).catch(()=>{\n // no anon user create one\n createAnonUser().then((user)=>{\n resolve(user)\n }).catch((err)=>{\n reject(err)\n })\n })\n })\n}\n\n\nfunction removeAnonUserFromLocalStorage(){\n return new Promise(function (resolve) {\n localStorage.setItem('jwt_anon', \"\");\n resolve()\n });\n\n}\n\nfunction mergeUser(){\n return new Promise(function (resolve,reject){\n // retrieve current user firebase\n getCurrentUser(false).then((firebaseUser)=>{\n getAnonUserOrCreateOneIfExpired().then((anonUser)=>{\n Webservice.mergeUser(firebaseUser.idToken,anonUser.idToken).then(()=>{\n // remove anon user\n removeAnonUserFromLocalStorage().then(()=>{\n // all good, merged\n // anon user removed\n resolve()\n }).catch((err)=>{\n reject(\"impossible to remove anon user: \"+err)\n })\n }).catch((err)=>{\n reject(\"impossible to merge: \"+err)\n })\n }).catch((err)=>{\n reject(\"impossible to get annon user: \"+err)\n })\n }).catch((err)=>{\n // no firebase user\n reject(\"impossible to get firebase user: \"+err)\n })\n })\n}\n\nfunction getAnonUserOrCreateOneIfExpired(){\n return new Promise(function (resolve,reject){\n let jwtStorage = localStorage.getItem('jwt_anon');\n if (!jwtStorage || jwtStorage === \"\"){\n createAnonUser().then((newUser) => {\n resolve(newUser)\n }).catch((err)=>{\n reject(\"err while create anon \"+err)\n })\n } else {\n if (isJWTExpired(jwtStorage)){\n // we have an anon user but JWT is expired\n createAnonUser().then((newUser) => {\n resolve(newUser)\n }).catch((err)=>{\n reject(\"err while create anon \"+err)\n })\n } else {\n resolve({\n anonymous: true,\n idToken: jwtStorage\n })\n }\n }\n })\n}\n\n\nfunction isJWTExpired(token){\n if (token) {\n const expiry = jose.decodeJwt(token).exp;\n const now = new Date();\n return now.getTime() > expiry * 1000;\n }\n return false;\n}\n\nexport default {\n getCurrentUser:getCurrentUser,\n signOut : signOut,\n mergeUser:mergeUser,\n getOrCreateAnonUser:getOrCreateAnonUser,\n createAnonUser:createAnonUser,\n isJWTExpired:isJWTExpired\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('nav',{staticClass:\"navbar navbar-expand-lg navbar-light \",staticStyle:{\"background-color\":\"#e3f2fd\"}},[_c('a',{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\"}},[_vm._v(_vm._s(_vm.bookTitle))]),_c('div',{staticClass:\"collapse navbar-collapse\",attrs:{\"id\":\"navbarText\"}},[_c('ul',{staticClass:\"navbar-nav mr-auto\"},[_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.BUY},\"href\":\"#\"}},[_vm._v(\"Buy\")])],1),_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.FEEDBACK},\"href\":\"#\"}},[_vm._v(\"Feedback\")])],1),_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.SUBSCRIBE},\"href\":\"#\"}},[_vm._v(\"Subscribe\")])],1),_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.TUTORIAL,params : {tutorialId: this.tutorialId, slug: 'build-ecommerce-website-golang-vuejs-gin-aws-lambda'}},\"href\":\"#\"}},[_vm._v(\"Video Tutorial\")])],1),_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.PRODUCTS},\"href\":\"#\"}},[_vm._v(\"Products\")])],1),_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.MY_COURSES},\"href\":\"#\"}},[_vm._v(\"My Courses\")])],1)])]),_c('div',{attrs:{\"id\":\"navbarRight\"}},[_c('ul',{staticClass:\"navbar-nav mr-auto\"},[_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.CART},\"href\":\"#\"}},[_vm._v(\"Cart\")])],1),(_vm.showLogin)?_c('li',{staticClass:\"nav-item active\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":{name:this.routes.LOGIN},\"href\":\"#\"}},[_vm._v(\"Login\")])],1):_vm._e(),(_vm.showSignOut)?_c('li',{staticClass:\"nav-item active\"},[_c('a',{staticClass:\"nav-link\",attrs:{\"href\":\"#\"},on:{\"click\":_vm.signOut}},[_vm._v(\"Sign Out\")])]):_vm._e()])]),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"navbar-toggler\",attrs:{\"type\":\"button\",\"data-toggle\":\"collapse\",\"data-target\":\"#navbarText\",\"aria-controls\":\"navbarText\",\"aria-expanded\":\"false\",\"aria-label\":\"Toggle navigation\"}},[_c('span',{staticClass:\"navbar-toggler-icon\"})])}]\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavBar.vue?vue&type=template&id=8d6bcf4e&scoped=true&\"\nimport script from \"./NavBar.vue?vue&type=script&lang=js&\"\nexport * from \"./NavBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8d6bcf4e\",\n null\n \n)\n\nexport default component.exports","export default crypto;\nexport const isCryptoKey = (key) => key instanceof CryptoKey;\n","import crypto from './webcrypto.js';\nconst digest = async (algorithm, data) => {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));\n};\nexport default digest;\n","import digest from '../runtime/digest.js';\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n buffers.forEach((buffer) => {\n buf.set(buffer, i);\n i += buffer.length;\n });\n return buf;\n}\nexport function p2s(alg, p2sInput) {\n return concat(encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32) {\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function lengthAndInput(input) {\n return concat(uint32be(input.length), input);\n}\nexport async function concatKdf(secret, bits, value) {\n const iterations = Math.ceil((bits >> 3) / 32);\n const res = new Uint8Array(iterations * 32);\n for (let iter = 0; iter < iterations; iter++) {\n const buf = new Uint8Array(4 + secret.length + value.length);\n buf.set(uint32be(iter + 1));\n buf.set(secret, 4);\n buf.set(value, 4 + secret.length);\n res.set(await digest('sha256', buf), iter * 32);\n }\n return res.slice(0, bits >> 3);\n}\n","import { encoder, decoder } from '../lib/buffer_utils.js';\nexport const encodeBase64 = (input) => {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n const CHUNK_SIZE = 0x8000;\n const arr = [];\n for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join(''));\n};\nexport const encode = (input) => {\n return encodeBase64(input).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n};\nexport const decodeBase64 = (encoded) => {\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n};\nexport const decode = (input) => {\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\\s/g, '');\n try {\n return decodeBase64(encoded);\n }\n catch (_a) {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n};\n","export class JOSEError extends Error {\n constructor(message) {\n var _a;\n super(message);\n this.code = 'ERR_JOSE_GENERIC';\n this.name = this.constructor.name;\n (_a = Error.captureStackTrace) === null || _a === void 0 ? void 0 : _a.call(Error, this, this.constructor);\n }\n static get code() {\n return 'ERR_JOSE_GENERIC';\n }\n}\nexport class JWTClaimValidationFailed extends JOSEError {\n constructor(message, claim = 'unspecified', reason = 'unspecified') {\n super(message);\n this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n this.claim = claim;\n this.reason = reason;\n }\n static get code() {\n return 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n }\n}\nexport class JWTExpired extends JOSEError {\n constructor(message, claim = 'unspecified', reason = 'unspecified') {\n super(message);\n this.code = 'ERR_JWT_EXPIRED';\n this.claim = claim;\n this.reason = reason;\n }\n static get code() {\n return 'ERR_JWT_EXPIRED';\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n static get code() {\n return 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n}\nexport class JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_NOT_SUPPORTED';\n }\n static get code() {\n return 'ERR_JOSE_NOT_SUPPORTED';\n }\n}\nexport class JWEDecryptionFailed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_DECRYPTION_FAILED';\n this.message = 'decryption operation failed';\n }\n static get code() {\n return 'ERR_JWE_DECRYPTION_FAILED';\n }\n}\nexport class JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_INVALID';\n }\n static get code() {\n return 'ERR_JWE_INVALID';\n }\n}\nexport class JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_INVALID';\n }\n static get code() {\n return 'ERR_JWS_INVALID';\n }\n}\nexport class JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWT_INVALID';\n }\n static get code() {\n return 'ERR_JWT_INVALID';\n }\n}\nexport class JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWK_INVALID';\n }\n static get code() {\n return 'ERR_JWK_INVALID';\n }\n}\nexport class JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_INVALID';\n }\n static get code() {\n return 'ERR_JWKS_INVALID';\n }\n}\nexport class JWKSNoMatchingKey extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n this.message = 'no applicable key found in the JSON Web Key Set';\n }\n static get code() {\n return 'ERR_JWKS_NO_MATCHING_KEY';\n }\n}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n this.message = 'multiple matching keys found in the JSON Web Key Set';\n }\n static get code() {\n return 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n }\n}\nexport class JWKSTimeout extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_TIMEOUT';\n this.message = 'request timed out';\n }\n static get code() {\n return 'ERR_JWKS_TIMEOUT';\n }\n}\nexport class JWSSignatureVerificationFailed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n this.message = 'signature verification failed';\n }\n static get code() {\n return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n }\n}\n","import crypto from './webcrypto.js';\nexport default crypto.getRandomValues.bind(crypto);\n","import { JOSENotSupported } from '../util/errors.js';\nimport random from '../runtime/random.js';\nexport function bitLength(alg) {\n switch (alg) {\n case 'A128GCM':\n case 'A128GCMKW':\n case 'A192GCM':\n case 'A192GCMKW':\n case 'A256GCM':\n case 'A256GCMKW':\n return 96;\n case 'A128CBC-HS256':\n case 'A192CBC-HS384':\n case 'A256CBC-HS512':\n return 128;\n default:\n throw new JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);\n }\n}\nexport default (alg) => random(new Uint8Array(bitLength(alg) >> 3));\n","import { JWEInvalid } from '../util/errors.js';\nimport { bitLength } from './iv.js';\nconst checkIvLength = (enc, iv) => {\n if (iv.length << 3 !== bitLength(enc)) {\n throw new JWEInvalid('Invalid Initialization Vector length');\n }\n};\nexport default checkIvLength;\n","import { JWEInvalid } from '../util/errors.js';\nconst checkCekLength = (cek, expected) => {\n if (cek.length << 3 !== expected) {\n throw new JWEInvalid('Invalid Content Encryption Key length');\n }\n};\nexport default checkCekLength;\n","const timingSafeEqual = (a, b) => {\n if (!(a instanceof Uint8Array)) {\n throw new TypeError('First argument must be a buffer');\n }\n if (!(b instanceof Uint8Array)) {\n throw new TypeError('Second argument must be a buffer');\n }\n if (a.length !== b.length) {\n throw new TypeError('Input buffers must have the same length');\n }\n const len = a.length;\n let out = 0;\n let i = -1;\n while (++i < len) {\n out |= a[i] ^ b[i];\n }\n return out === 0;\n};\nexport default timingSafeEqual;\n","export function isCloudflareWorkers() {\n return typeof WebSocketPair === 'function';\n}\n","import { isCloudflareWorkers } from '../runtime/env.js';\nfunction unusable(name, prop = 'algorithm.name') {\n return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n switch (alg) {\n case 'ES256':\n return 'P-256';\n case 'ES384':\n return 'P-384';\n case 'ES512':\n return 'P-521';\n default:\n throw new Error('unreachable');\n }\n}\nfunction checkUsage(key, usages) {\n if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n let msg = 'CryptoKey does not support this operation, its usages must include ';\n if (usages.length > 2) {\n const last = usages.pop();\n msg += `one of ${usages.join(', ')}, or ${last}.`;\n }\n else if (usages.length === 2) {\n msg += `one of ${usages[0]} or ${usages[1]}.`;\n }\n else {\n msg += `${usages[0]}.`;\n }\n throw new TypeError(msg);\n }\n}\nexport function checkSigCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512': {\n if (!isAlgorithm(key.algorithm, 'HMAC'))\n throw unusable('HMAC');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'RS256':\n case 'RS384':\n case 'RS512': {\n if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n throw unusable('RSASSA-PKCS1-v1_5');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'PS256':\n case 'PS384':\n case 'PS512': {\n if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n throw unusable('RSA-PSS');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case isCloudflareWorkers() && 'EdDSA': {\n if (!isAlgorithm(key.algorithm, 'NODE-ED25519'))\n throw unusable('NODE-ED25519');\n break;\n }\n case 'ES256':\n case 'ES384':\n case 'ES512': {\n if (!isAlgorithm(key.algorithm, 'ECDSA'))\n throw unusable('ECDSA');\n const expected = getNamedCurve(alg);\n const actual = key.algorithm.namedCurve;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.namedCurve');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\nexport function checkEncCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM': {\n if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n throw unusable('AES-GCM');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'A128KW':\n case 'A192KW':\n case 'A256KW': {\n if (!isAlgorithm(key.algorithm, 'AES-KW'))\n throw unusable('AES-KW');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'ECDH':\n if (!isAlgorithm(key.algorithm, 'ECDH'))\n throw unusable('ECDH');\n break;\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW':\n if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n throw unusable('PBKDF2');\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512': {\n if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n throw unusable('RSA-OAEP');\n const expected = parseInt(alg.slice(9), 10) || 1;\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\n","export default (actual, ...types) => {\n let msg = 'Key must be ';\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor && actual.constructor.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n};\n","import { isCryptoKey } from './webcrypto.js';\nexport default (key) => {\n return isCryptoKey(key);\n};\nexport const types = ['CryptoKey'];\n","import { concat, uint64be } from '../lib/buffer_utils.js';\nimport checkIvLength from '../lib/check_iv_length.js';\nimport checkCekLength from './check_cek_length.js';\nimport timingSafeEqual from './timing_safe_equal.js';\nimport { JOSENotSupported, JWEDecryptionFailed } from '../util/errors.js';\nimport crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkEncCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nasync function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {\n if (!(cek instanceof Uint8Array)) {\n throw new TypeError(invalidKeyInput(cek, 'Uint8Array'));\n }\n const keySize = parseInt(enc.slice(1, 4), 10);\n const encKey = await crypto.subtle.importKey('raw', cek.subarray(keySize >> 3), 'AES-CBC', false, ['decrypt']);\n const macKey = await crypto.subtle.importKey('raw', cek.subarray(0, keySize >> 3), {\n hash: `SHA-${keySize << 1}`,\n name: 'HMAC',\n }, false, ['sign']);\n const macData = concat(aad, iv, ciphertext, uint64be(aad.length << 3));\n const expectedTag = new Uint8Array((await crypto.subtle.sign('HMAC', macKey, macData)).slice(0, keySize >> 3));\n let macCheckPassed;\n try {\n macCheckPassed = timingSafeEqual(tag, expectedTag);\n }\n catch (_a) {\n }\n if (!macCheckPassed) {\n throw new JWEDecryptionFailed();\n }\n let plaintext;\n try {\n plaintext = new Uint8Array(await crypto.subtle.decrypt({ iv, name: 'AES-CBC' }, encKey, ciphertext));\n }\n catch (_b) {\n }\n if (!plaintext) {\n throw new JWEDecryptionFailed();\n }\n return plaintext;\n}\nasync function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {\n let encKey;\n if (cek instanceof Uint8Array) {\n encKey = await crypto.subtle.importKey('raw', cek, 'AES-GCM', false, ['decrypt']);\n }\n else {\n checkEncCryptoKey(cek, enc, 'decrypt');\n encKey = cek;\n }\n try {\n return new Uint8Array(await crypto.subtle.decrypt({\n additionalData: aad,\n iv,\n name: 'AES-GCM',\n tagLength: 128,\n }, encKey, concat(ciphertext, tag)));\n }\n catch (_a) {\n throw new JWEDecryptionFailed();\n }\n}\nconst decrypt = async (enc, cek, ciphertext, iv, tag, aad) => {\n if (!isCryptoKey(cek) && !(cek instanceof Uint8Array)) {\n throw new TypeError(invalidKeyInput(cek, ...types, 'Uint8Array'));\n }\n checkIvLength(enc, iv);\n switch (enc) {\n case 'A128CBC-HS256':\n case 'A192CBC-HS384':\n case 'A256CBC-HS512':\n if (cek instanceof Uint8Array)\n checkCekLength(cek, parseInt(enc.slice(-3), 10));\n return cbcDecrypt(enc, cek, ciphertext, iv, tag, aad);\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM':\n if (cek instanceof Uint8Array)\n checkCekLength(cek, parseInt(enc.slice(1, 4), 10));\n return gcmDecrypt(enc, cek, ciphertext, iv, tag, aad);\n default:\n throw new JOSENotSupported('Unsupported JWE Content Encryption Algorithm');\n }\n};\nexport default decrypt;\n","import { JOSENotSupported } from '../util/errors.js';\nexport const inflate = async () => {\n throw new JOSENotSupported('JWE \"zip\" (Compression Algorithm) Header Parameter is not supported by your javascript runtime. You need to use the `inflateRaw` decrypt option to provide Inflate Raw implementation.');\n};\nexport const deflate = async () => {\n throw new JOSENotSupported('JWE \"zip\" (Compression Algorithm) Header Parameter is not supported by your javascript runtime. You need to use the `deflateRaw` encrypt option to provide Deflate Raw implementation.');\n};\n","const isDisjoint = (...headers) => {\n const sources = headers.filter(Boolean);\n if (sources.length === 0 || sources.length === 1) {\n return true;\n }\n let acc;\n for (const header of sources) {\n const parameters = Object.keys(header);\n if (!acc || acc.size === 0) {\n acc = new Set(parameters);\n continue;\n }\n for (const parameter of parameters) {\n if (acc.has(parameter)) {\n return false;\n }\n acc.add(parameter);\n }\n }\n return true;\n};\nexport default isDisjoint;\n","function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nexport default function isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\n","const bogusWebCrypto = [\n { hash: 'SHA-256', name: 'HMAC' },\n true,\n ['sign'],\n];\nexport default bogusWebCrypto;\n","import bogusWebCrypto from './bogus.js';\nimport crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkEncCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nfunction checkKeySize(key, alg) {\n if (key.algorithm.length !== parseInt(alg.slice(1, 4), 10)) {\n throw new TypeError(`Invalid key size for alg: ${alg}`);\n }\n}\nfunction getCryptoKey(key, alg, usage) {\n if (isCryptoKey(key)) {\n checkEncCryptoKey(key, alg, usage);\n return key;\n }\n if (key instanceof Uint8Array) {\n return crypto.subtle.importKey('raw', key, 'AES-KW', true, [usage]);\n }\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n}\nexport const wrap = async (alg, key, cek) => {\n const cryptoKey = await getCryptoKey(key, alg, 'wrapKey');\n checkKeySize(cryptoKey, alg);\n const cryptoKeyCek = await crypto.subtle.importKey('raw', cek, ...bogusWebCrypto);\n return new Uint8Array(await crypto.subtle.wrapKey('raw', cryptoKeyCek, cryptoKey, 'AES-KW'));\n};\nexport const unwrap = async (alg, key, encryptedKey) => {\n const cryptoKey = await getCryptoKey(key, alg, 'unwrapKey');\n checkKeySize(cryptoKey, alg);\n const cryptoKeyCek = await crypto.subtle.unwrapKey('raw', encryptedKey, cryptoKey, 'AES-KW', ...bogusWebCrypto);\n return new Uint8Array(await crypto.subtle.exportKey('raw', cryptoKeyCek));\n};\n","import { encoder, concat, uint32be, lengthAndInput, concatKdf } from '../lib/buffer_utils.js';\nimport crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkEncCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nexport async function deriveKey(publicKey, privateKey, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {\n if (!isCryptoKey(publicKey)) {\n throw new TypeError(invalidKeyInput(publicKey, ...types));\n }\n checkEncCryptoKey(publicKey, 'ECDH');\n if (!isCryptoKey(privateKey)) {\n throw new TypeError(invalidKeyInput(privateKey, ...types));\n }\n checkEncCryptoKey(privateKey, 'ECDH', 'deriveBits');\n const value = concat(lengthAndInput(encoder.encode(algorithm)), lengthAndInput(apu), lengthAndInput(apv), uint32be(keyLength));\n const sharedSecret = new Uint8Array(await crypto.subtle.deriveBits({\n name: 'ECDH',\n public: publicKey,\n }, privateKey, Math.ceil(parseInt(privateKey.algorithm.namedCurve.slice(-3), 10) / 8) << 3));\n return concatKdf(sharedSecret, keyLength, value);\n}\nexport async function generateEpk(key) {\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n return crypto.subtle.generateKey(key.algorithm, true, ['deriveBits']);\n}\nexport function ecdhAllowed(key) {\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n return ['P-256', 'P-384', 'P-521'].includes(key.algorithm.namedCurve);\n}\n","import { JWEInvalid } from '../util/errors.js';\nexport default function checkP2s(p2s) {\n if (!(p2s instanceof Uint8Array) || p2s.length < 8) {\n throw new JWEInvalid('PBES2 Salt Input must be 8 or more octets');\n }\n}\n","import random from './random.js';\nimport { p2s as concatSalt } from '../lib/buffer_utils.js';\nimport { encode as base64url } from './base64url.js';\nimport { wrap, unwrap } from './aeskw.js';\nimport checkP2s from '../lib/check_p2s.js';\nimport crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkEncCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nfunction getCryptoKey(key, alg) {\n if (key instanceof Uint8Array) {\n return crypto.subtle.importKey('raw', key, 'PBKDF2', false, ['deriveBits']);\n }\n if (isCryptoKey(key)) {\n checkEncCryptoKey(key, alg, 'deriveBits', 'deriveKey');\n return key;\n }\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n}\nasync function deriveKey(p2s, alg, p2c, key) {\n checkP2s(p2s);\n const salt = concatSalt(alg, p2s);\n const keylen = parseInt(alg.slice(13, 16), 10);\n const subtleAlg = {\n hash: `SHA-${alg.slice(8, 11)}`,\n iterations: p2c,\n name: 'PBKDF2',\n salt,\n };\n const wrapAlg = {\n length: keylen,\n name: 'AES-KW',\n };\n const cryptoKey = await getCryptoKey(key, alg);\n if (cryptoKey.usages.includes('deriveBits')) {\n return new Uint8Array(await crypto.subtle.deriveBits(subtleAlg, cryptoKey, keylen));\n }\n if (cryptoKey.usages.includes('deriveKey')) {\n return crypto.subtle.deriveKey(subtleAlg, cryptoKey, wrapAlg, false, ['wrapKey', 'unwrapKey']);\n }\n throw new TypeError('PBKDF2 key \"usages\" must include \"deriveBits\" or \"deriveKey\"');\n}\nexport const encrypt = async (alg, key, cek, p2c = 2048, p2s = random(new Uint8Array(16))) => {\n const derived = await deriveKey(p2s, alg, p2c, key);\n const encryptedKey = await wrap(alg.slice(-6), derived, cek);\n return { encryptedKey, p2c, p2s: base64url(p2s) };\n};\nexport const decrypt = async (alg, key, encryptedKey, p2c, p2s) => {\n const derived = await deriveKey(p2s, alg, p2c, key);\n return unwrap(alg.slice(-6), derived, encryptedKey);\n};\n","import { JOSENotSupported } from '../util/errors.js';\nexport default function subtleRsaEs(alg) {\n switch (alg) {\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n return 'RSA-OAEP';\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n","export default (alg, key) => {\n if (alg.startsWith('RS') || alg.startsWith('PS')) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n }\n }\n};\n","import subtleAlgorithm from './subtle_rsaes.js';\nimport bogusWebCrypto from './bogus.js';\nimport crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkEncCryptoKey } from '../lib/crypto_key.js';\nimport checkKeyLength from './check_key_length.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nexport const encrypt = async (alg, key, cek) => {\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n checkEncCryptoKey(key, alg, 'encrypt', 'wrapKey');\n checkKeyLength(alg, key);\n if (key.usages.includes('encrypt')) {\n return new Uint8Array(await crypto.subtle.encrypt(subtleAlgorithm(alg), key, cek));\n }\n if (key.usages.includes('wrapKey')) {\n const cryptoKeyCek = await crypto.subtle.importKey('raw', cek, ...bogusWebCrypto);\n return new Uint8Array(await crypto.subtle.wrapKey('raw', cryptoKeyCek, key, subtleAlgorithm(alg)));\n }\n throw new TypeError('RSA-OAEP key \"usages\" must include \"encrypt\" or \"wrapKey\" for this operation');\n};\nexport const decrypt = async (alg, key, encryptedKey) => {\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n checkEncCryptoKey(key, alg, 'decrypt', 'unwrapKey');\n checkKeyLength(alg, key);\n if (key.usages.includes('decrypt')) {\n return new Uint8Array(await crypto.subtle.decrypt(subtleAlgorithm(alg), key, encryptedKey));\n }\n if (key.usages.includes('unwrapKey')) {\n const cryptoKeyCek = await crypto.subtle.unwrapKey('raw', encryptedKey, key, subtleAlgorithm(alg), ...bogusWebCrypto);\n return new Uint8Array(await crypto.subtle.exportKey('raw', cryptoKeyCek));\n }\n throw new TypeError('RSA-OAEP key \"usages\" must include \"decrypt\" or \"unwrapKey\" for this operation');\n};\n","import { JOSENotSupported } from '../util/errors.js';\nimport random from '../runtime/random.js';\nexport function bitLength(alg) {\n switch (alg) {\n case 'A128GCM':\n return 128;\n case 'A192GCM':\n return 192;\n case 'A256GCM':\n case 'A128CBC-HS256':\n return 256;\n case 'A192CBC-HS384':\n return 384;\n case 'A256CBC-HS512':\n return 512;\n default:\n throw new JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);\n }\n}\nexport default (alg) => random(new Uint8Array(bitLength(alg) >> 3));\n","export default (b64, descriptor) => {\n const newlined = (b64.match(/.{1,64}/g) || []).join('\\n');\n return `-----BEGIN ${descriptor}-----\\n${newlined}\\n-----END ${descriptor}-----`;\n};\n","import { isCloudflareWorkers } from './env.js';\nimport crypto, { isCryptoKey } from './webcrypto.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { encodeBase64 } from './base64url.js';\nimport formatPEM from '../lib/format_pem.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { types } from './is_key_like.js';\nconst genericExport = async (keyType, keyFormat, key) => {\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n if (!key.extractable) {\n throw new TypeError('CryptoKey is not extractable');\n }\n if (key.type !== keyType) {\n throw new TypeError(`key is not a ${keyType} key`);\n }\n return formatPEM(encodeBase64(new Uint8Array(await crypto.subtle.exportKey(keyFormat, key))), `${keyType.toUpperCase()} KEY`);\n};\nexport const toSPKI = (key) => {\n return genericExport('public', 'spki', key);\n};\nexport const toPKCS8 = (key) => {\n return genericExport('private', 'pkcs8', key);\n};\nconst findOid = (keyData, oid, from = 0) => {\n if (from === 0) {\n oid.unshift(oid.length);\n oid.unshift(0x06);\n }\n let i = keyData.indexOf(oid[0], from);\n if (i === -1)\n return false;\n const sub = keyData.subarray(i, i + oid.length);\n if (sub.length !== oid.length)\n return false;\n return sub.every((value, index) => value === oid[index]) || findOid(keyData, oid, i + 1);\n};\nconst getNamedCurve = (keyData) => {\n switch (true) {\n case findOid(keyData, [0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07]):\n return 'P-256';\n case findOid(keyData, [0x2b, 0x81, 0x04, 0x00, 0x22]):\n return 'P-384';\n case findOid(keyData, [0x2b, 0x81, 0x04, 0x00, 0x23]):\n return 'P-521';\n case isCloudflareWorkers() && findOid(keyData, [0x2b, 0x65, 0x70]):\n return 'Ed25519';\n default:\n throw new JOSENotSupported('Invalid or unsupported EC Key Curve or OKP Key Sub Type');\n }\n};\nconst genericImport = async (replace, keyFormat, pem, alg, options) => {\n var _a;\n let algorithm;\n let keyUsages;\n const keyData = new Uint8Array(atob(pem.replace(replace, ''))\n .split('')\n .map((c) => c.charCodeAt(0)));\n const isPublic = keyFormat === 'spki';\n switch (alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${alg.slice(-3)}` };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${alg.slice(-3)}` };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(alg.slice(-3), 10) || 1}`,\n };\n keyUsages = isPublic ? ['encrypt', 'wrapKey'] : ['decrypt', 'unwrapKey'];\n break;\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: getNamedCurve(keyData) };\n keyUsages = isPublic ? [] : ['deriveBits'];\n break;\n case isCloudflareWorkers() && 'EdDSA':\n const namedCurve = getNamedCurve(keyData).toUpperCase();\n algorithm = { name: `NODE-${namedCurve}`, namedCurve: `NODE-${namedCurve}` };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported \"alg\" (Algorithm) value');\n }\n return crypto.subtle.importKey(keyFormat, keyData, algorithm, (_a = options === null || options === void 0 ? void 0 : options.extractable) !== null && _a !== void 0 ? _a : false, keyUsages);\n};\nexport const fromPKCS8 = (pem, alg, options) => {\n return genericImport(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\\s)/g, 'pkcs8', pem, alg, options);\n};\nexport const fromSPKI = (pem, alg, options) => {\n return genericImport(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\\s)/g, 'spki', pem, alg, options);\n};\n","import { isCloudflareWorkers } from './env.js';\nimport crypto from './webcrypto.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { decode as base64url } from './base64url.js';\nfunction subtleMapping(jwk) {\n let algorithm;\n let keyUsages;\n switch (jwk.kty) {\n case 'oct': {\n switch (jwk.alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n algorithm = { name: 'HMAC', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = ['sign', 'verify'];\n break;\n case 'A128CBC-HS256':\n case 'A192CBC-HS384':\n case 'A256CBC-HS512':\n throw new JOSENotSupported(`${jwk.alg} keys cannot be imported as CryptoKey instances`);\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM':\n case 'A128GCMKW':\n case 'A192GCMKW':\n case 'A256GCMKW':\n algorithm = { name: 'AES-GCM' };\n keyUsages = ['encrypt', 'decrypt'];\n break;\n case 'A128KW':\n case 'A192KW':\n case 'A256KW':\n algorithm = { name: 'AES-KW' };\n keyUsages = ['wrapKey', 'unwrapKey'];\n break;\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW':\n algorithm = { name: 'PBKDF2' };\n keyUsages = ['deriveBits'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'RSA': {\n switch (jwk.alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,\n };\n keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'EC': {\n switch (jwk.alg) {\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case isCloudflareWorkers() && 'OKP':\n if (jwk.alg !== 'EdDSA') {\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n switch (jwk.crv) {\n case 'Ed25519':\n algorithm = { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"crv\" (Subtype of Key Pair) Parameter value');\n }\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n }\n return { algorithm, keyUsages };\n}\nconst parse = async (jwk) => {\n var _a, _b;\n const { algorithm, keyUsages } = subtleMapping(jwk);\n const rest = [\n algorithm,\n (_a = jwk.ext) !== null && _a !== void 0 ? _a : false,\n (_b = jwk.key_ops) !== null && _b !== void 0 ? _b : keyUsages,\n ];\n if (algorithm.name === 'PBKDF2') {\n return crypto.subtle.importKey('raw', base64url(jwk.k), ...rest);\n }\n const keyData = { ...jwk };\n delete keyData.alg;\n return crypto.subtle.importKey('jwk', keyData, ...rest);\n};\nexport default parse;\n","import { decode as decodeBase64URL, encodeBase64, decodeBase64 } from '../runtime/base64url.js';\nimport { fromSPKI as importPublic } from '../runtime/asn1.js';\nimport { fromPKCS8 as importPrivate } from '../runtime/asn1.js';\nimport asKeyObject from '../runtime/jwk_to_key.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport formatPEM from '../lib/format_pem.js';\nimport isObject from '../lib/is_object.js';\nfunction getElement(seq) {\n let result = [];\n let next = 0;\n while (next < seq.length) {\n let nextPart = parseElement(seq.subarray(next));\n result.push(nextPart);\n next += nextPart.byteLength;\n }\n return result;\n}\nfunction parseElement(bytes) {\n let position = 0;\n let tag = bytes[0] & 0x1f;\n position++;\n if (tag === 0x1f) {\n tag = 0;\n while (bytes[position] >= 0x80) {\n tag = tag * 128 + bytes[position] - 0x80;\n position++;\n }\n tag = tag * 128 + bytes[position] - 0x80;\n position++;\n }\n let length = 0;\n if (bytes[position] < 0x80) {\n length = bytes[position];\n position++;\n }\n else {\n let numberOfDigits = bytes[position] & 0x7f;\n position++;\n length = 0;\n for (let i = 0; i < numberOfDigits; i++) {\n length = length * 256 + bytes[position];\n position++;\n }\n }\n if (length === 0x80) {\n length = 0;\n while (bytes[position + length] !== 0 || bytes[position + length + 1] !== 0) {\n length++;\n }\n const byteLength = position + length + 2;\n return {\n byteLength,\n contents: bytes.subarray(position, position + length),\n raw: bytes.subarray(0, byteLength),\n };\n }\n const byteLength = position + length;\n return {\n byteLength,\n contents: bytes.subarray(position, byteLength),\n raw: bytes.subarray(0, byteLength),\n };\n}\nfunction spkiFromX509(buf) {\n const tbsCertificate = getElement(getElement(parseElement(buf).contents)[0].contents);\n return encodeBase64(tbsCertificate[tbsCertificate[0].raw[0] === 0xa0 ? 6 : 5].raw);\n}\nfunction getSPKI(x509) {\n const pem = x509.replace(/(?:-----(?:BEGIN|END) CERTIFICATE-----|\\s)/g, '');\n const raw = decodeBase64(pem);\n return formatPEM(spkiFromX509(raw), 'PUBLIC KEY');\n}\nexport async function importSPKI(spki, alg, options) {\n if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {\n throw new TypeError('\"spki\" must be SPKI formatted string');\n }\n return importPublic(spki, alg, options);\n}\nexport async function importX509(x509, alg, options) {\n if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {\n throw new TypeError('\"x509\" must be X.509 formatted string');\n }\n const spki = getSPKI(x509);\n return importPublic(spki, alg, options);\n}\nexport async function importPKCS8(pkcs8, alg, options) {\n if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {\n throw new TypeError('\"pkcs8\" must be PCKS8 formatted string');\n }\n return importPrivate(pkcs8, alg, options);\n}\nexport async function importJWK(jwk, alg, octAsKeyObject) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n alg || (alg = jwk.alg);\n if (typeof alg !== 'string' || !alg) {\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n }\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n octAsKeyObject !== null && octAsKeyObject !== void 0 ? octAsKeyObject : (octAsKeyObject = jwk.ext !== true);\n if (octAsKeyObject) {\n return asKeyObject({ ...jwk, alg, ext: false });\n }\n return decodeBase64URL(jwk.k);\n case 'RSA':\n if (jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n case 'EC':\n case 'OKP':\n return asKeyObject({ ...jwk, alg });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n","import invalidKeyInput from './invalid_key_input.js';\nimport isKeyLike, { types } from '../runtime/is_key_like.js';\nconst symmetricTypeCheck = (key) => {\n if (key instanceof Uint8Array)\n return;\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n }\n if (key.type !== 'secret') {\n throw new TypeError(`${types.join(' or ')} instances for symmetric algorithms must be of type \"secret\"`);\n }\n};\nconst asymmetricTypeCheck = (key, usage) => {\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n if (key.type === 'secret') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n if (usage === 'sign' && key.type === 'public') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm signing must be of type \"private\"`);\n }\n if (usage === 'decrypt' && key.type === 'public') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm decryption must be of type \"private\"`);\n }\n if (key.algorithm && usage === 'verify' && key.type === 'private') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm verifying must be of type \"public\"`);\n }\n if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm encryption must be of type \"public\"`);\n }\n};\nconst checkKeyType = (alg, key, usage) => {\n const symmetric = alg.startsWith('HS') ||\n alg === 'dir' ||\n alg.startsWith('PBES2') ||\n /^A\\d{3}(?:GCM)?KW$/.test(alg);\n if (symmetric) {\n symmetricTypeCheck(key);\n }\n else {\n asymmetricTypeCheck(key, usage);\n }\n};\nexport default checkKeyType;\n","import { concat, uint64be } from '../lib/buffer_utils.js';\nimport checkIvLength from '../lib/check_iv_length.js';\nimport checkCekLength from './check_cek_length.js';\nimport crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkEncCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { types } from './is_key_like.js';\nasync function cbcEncrypt(enc, plaintext, cek, iv, aad) {\n if (!(cek instanceof Uint8Array)) {\n throw new TypeError(invalidKeyInput(cek, 'Uint8Array'));\n }\n const keySize = parseInt(enc.slice(1, 4), 10);\n const encKey = await crypto.subtle.importKey('raw', cek.subarray(keySize >> 3), 'AES-CBC', false, ['encrypt']);\n const macKey = await crypto.subtle.importKey('raw', cek.subarray(0, keySize >> 3), {\n hash: `SHA-${keySize << 1}`,\n name: 'HMAC',\n }, false, ['sign']);\n const ciphertext = new Uint8Array(await crypto.subtle.encrypt({\n iv,\n name: 'AES-CBC',\n }, encKey, plaintext));\n const macData = concat(aad, iv, ciphertext, uint64be(aad.length << 3));\n const tag = new Uint8Array((await crypto.subtle.sign('HMAC', macKey, macData)).slice(0, keySize >> 3));\n return { ciphertext, tag };\n}\nasync function gcmEncrypt(enc, plaintext, cek, iv, aad) {\n let encKey;\n if (cek instanceof Uint8Array) {\n encKey = await crypto.subtle.importKey('raw', cek, 'AES-GCM', false, ['encrypt']);\n }\n else {\n checkEncCryptoKey(cek, enc, 'encrypt');\n encKey = cek;\n }\n const encrypted = new Uint8Array(await crypto.subtle.encrypt({\n additionalData: aad,\n iv,\n name: 'AES-GCM',\n tagLength: 128,\n }, encKey, plaintext));\n const tag = encrypted.slice(-16);\n const ciphertext = encrypted.slice(0, -16);\n return { ciphertext, tag };\n}\nconst encrypt = async (enc, plaintext, cek, iv, aad) => {\n if (!isCryptoKey(cek) && !(cek instanceof Uint8Array)) {\n throw new TypeError(invalidKeyInput(cek, ...types, 'Uint8Array'));\n }\n checkIvLength(enc, iv);\n switch (enc) {\n case 'A128CBC-HS256':\n case 'A192CBC-HS384':\n case 'A256CBC-HS512':\n if (cek instanceof Uint8Array)\n checkCekLength(cek, parseInt(enc.slice(-3), 10));\n return cbcEncrypt(enc, plaintext, cek, iv, aad);\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM':\n if (cek instanceof Uint8Array)\n checkCekLength(cek, parseInt(enc.slice(1, 4), 10));\n return gcmEncrypt(enc, plaintext, cek, iv, aad);\n default:\n throw new JOSENotSupported('Unsupported JWE Content Encryption Algorithm');\n }\n};\nexport default encrypt;\n","import encrypt from '../runtime/encrypt.js';\nimport decrypt from '../runtime/decrypt.js';\nimport generateIv from './iv.js';\nimport { encode as base64url } from '../runtime/base64url.js';\nexport async function wrap(alg, key, cek, iv) {\n const jweAlgorithm = alg.slice(0, 7);\n iv || (iv = generateIv(jweAlgorithm));\n const { ciphertext: encryptedKey, tag } = await encrypt(jweAlgorithm, cek, key, iv, new Uint8Array(0));\n return { encryptedKey, iv: base64url(iv), tag: base64url(tag) };\n}\nexport async function unwrap(alg, key, encryptedKey, iv, tag) {\n const jweAlgorithm = alg.slice(0, 7);\n return decrypt(jweAlgorithm, key, encryptedKey, iv, tag, new Uint8Array(0));\n}\n","import { unwrap as aesKw } from '../runtime/aeskw.js';\nimport * as ECDH from '../runtime/ecdhes.js';\nimport { decrypt as pbes2Kw } from '../runtime/pbes2kw.js';\nimport { decrypt as rsaEs } from '../runtime/rsaes.js';\nimport { decode as base64url } from '../runtime/base64url.js';\nimport { JOSENotSupported, JWEInvalid } from '../util/errors.js';\nimport { bitLength as cekLength } from '../lib/cek.js';\nimport { importJWK } from '../key/import.js';\nimport checkKeyType from './check_key_type.js';\nimport isObject from './is_object.js';\nimport { unwrap as aesGcmKw } from './aesgcmkw.js';\nasync function decryptKeyManagement(alg, key, encryptedKey, joseHeader) {\n checkKeyType(alg, key, 'decrypt');\n switch (alg) {\n case 'dir': {\n if (encryptedKey !== undefined)\n throw new JWEInvalid('Encountered unexpected JWE Encrypted Key');\n return key;\n }\n case 'ECDH-ES':\n if (encryptedKey !== undefined)\n throw new JWEInvalid('Encountered unexpected JWE Encrypted Key');\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW': {\n if (!isObject(joseHeader.epk))\n throw new JWEInvalid(`JOSE Header \"epk\" (Ephemeral Public Key) missing or invalid`);\n if (!ECDH.ecdhAllowed(key))\n throw new JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');\n const epk = await importJWK(joseHeader.epk, alg);\n let partyUInfo;\n let partyVInfo;\n if (joseHeader.apu !== undefined) {\n if (typeof joseHeader.apu !== 'string')\n throw new JWEInvalid(`JOSE Header \"apu\" (Agreement PartyUInfo) invalid`);\n partyUInfo = base64url(joseHeader.apu);\n }\n if (joseHeader.apv !== undefined) {\n if (typeof joseHeader.apv !== 'string')\n throw new JWEInvalid(`JOSE Header \"apv\" (Agreement PartyVInfo) invalid`);\n partyVInfo = base64url(joseHeader.apv);\n }\n const sharedSecret = await ECDH.deriveKey(epk, key, alg === 'ECDH-ES' ? joseHeader.enc : alg, alg === 'ECDH-ES' ? cekLength(joseHeader.enc) : parseInt(alg.slice(-5, -2), 10), partyUInfo, partyVInfo);\n if (alg === 'ECDH-ES')\n return sharedSecret;\n if (encryptedKey === undefined)\n throw new JWEInvalid('JWE Encrypted Key missing');\n return aesKw(alg.slice(-6), sharedSecret, encryptedKey);\n }\n case 'RSA1_5':\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512': {\n if (encryptedKey === undefined)\n throw new JWEInvalid('JWE Encrypted Key missing');\n return rsaEs(alg, key, encryptedKey);\n }\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW': {\n if (encryptedKey === undefined)\n throw new JWEInvalid('JWE Encrypted Key missing');\n if (typeof joseHeader.p2c !== 'number')\n throw new JWEInvalid(`JOSE Header \"p2c\" (PBES2 Count) missing or invalid`);\n if (typeof joseHeader.p2s !== 'string')\n throw new JWEInvalid(`JOSE Header \"p2s\" (PBES2 Salt) missing or invalid`);\n return pbes2Kw(alg, key, encryptedKey, joseHeader.p2c, base64url(joseHeader.p2s));\n }\n case 'A128KW':\n case 'A192KW':\n case 'A256KW': {\n if (encryptedKey === undefined)\n throw new JWEInvalid('JWE Encrypted Key missing');\n return aesKw(alg, key, encryptedKey);\n }\n case 'A128GCMKW':\n case 'A192GCMKW':\n case 'A256GCMKW': {\n if (encryptedKey === undefined)\n throw new JWEInvalid('JWE Encrypted Key missing');\n if (typeof joseHeader.iv !== 'string')\n throw new JWEInvalid(`JOSE Header \"iv\" (Initialization Vector) missing or invalid`);\n if (typeof joseHeader.tag !== 'string')\n throw new JWEInvalid(`JOSE Header \"tag\" (Authentication Tag) missing or invalid`);\n const iv = base64url(joseHeader.iv);\n const tag = base64url(joseHeader.tag);\n return aesGcmKw(alg, key, encryptedKey, iv, tag);\n }\n default: {\n throw new JOSENotSupported('Invalid or unsupported \"alg\" (JWE Algorithm) header value');\n }\n }\n}\nexport default decryptKeyManagement;\n","import { JOSENotSupported } from '../util/errors.js';\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return new Set();\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n }\n let recognized;\n if (recognizedOption !== undefined) {\n recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n }\n else {\n recognized = recognizedDefault;\n }\n for (const parameter of protectedHeader.crit) {\n if (!recognized.has(parameter)) {\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n }\n if (joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n else if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return new Set(protectedHeader.crit);\n}\nexport default validateCrit;\n","const validateAlgorithms = (option, algorithms) => {\n if (algorithms !== undefined &&\n (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n }\n if (!algorithms) {\n return undefined;\n }\n return new Set(algorithms);\n};\nexport default validateAlgorithms;\n","import { decode as base64url } from '../../runtime/base64url.js';\nimport decrypt from '../../runtime/decrypt.js';\nimport { inflate } from '../../runtime/zlib.js';\nimport { JOSEAlgNotAllowed, JOSENotSupported, JWEInvalid } from '../../util/errors.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport isObject from '../../lib/is_object.js';\nimport decryptKeyManagement from '../../lib/decrypt_key_management.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport generateCek from '../../lib/cek.js';\nimport validateCrit from '../../lib/validate_crit.js';\nimport validateAlgorithms from '../../lib/validate_algorithms.js';\nexport async function flattenedDecrypt(jwe, key, options) {\n var _a;\n if (!isObject(jwe)) {\n throw new JWEInvalid('Flattened JWE must be an object');\n }\n if (jwe.protected === undefined && jwe.header === undefined && jwe.unprotected === undefined) {\n throw new JWEInvalid('JOSE Header missing');\n }\n if (typeof jwe.iv !== 'string') {\n throw new JWEInvalid('JWE Initialization Vector missing or incorrect type');\n }\n if (typeof jwe.ciphertext !== 'string') {\n throw new JWEInvalid('JWE Ciphertext missing or incorrect type');\n }\n if (typeof jwe.tag !== 'string') {\n throw new JWEInvalid('JWE Authentication Tag missing or incorrect type');\n }\n if (jwe.protected !== undefined && typeof jwe.protected !== 'string') {\n throw new JWEInvalid('JWE Protected Header incorrect type');\n }\n if (jwe.encrypted_key !== undefined && typeof jwe.encrypted_key !== 'string') {\n throw new JWEInvalid('JWE Encrypted Key incorrect type');\n }\n if (jwe.aad !== undefined && typeof jwe.aad !== 'string') {\n throw new JWEInvalid('JWE AAD incorrect type');\n }\n if (jwe.header !== undefined && !isObject(jwe.header)) {\n throw new JWEInvalid('JWE Shared Unprotected Header incorrect type');\n }\n if (jwe.unprotected !== undefined && !isObject(jwe.unprotected)) {\n throw new JWEInvalid('JWE Per-Recipient Unprotected Header incorrect type');\n }\n let parsedProt;\n if (jwe.protected) {\n const protectedHeader = base64url(jwe.protected);\n try {\n parsedProt = JSON.parse(decoder.decode(protectedHeader));\n }\n catch (_b) {\n throw new JWEInvalid('JWE Protected Header is invalid');\n }\n }\n if (!isDisjoint(parsedProt, jwe.header, jwe.unprotected)) {\n throw new JWEInvalid('JWE Protected, JWE Unprotected Header, and JWE Per-Recipient Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...parsedProt,\n ...jwe.header,\n ...jwe.unprotected,\n };\n validateCrit(JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);\n if (joseHeader.zip !== undefined) {\n if (!parsedProt || !parsedProt.zip) {\n throw new JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n }\n if (joseHeader.zip !== 'DEF') {\n throw new JOSENotSupported('Unsupported JWE \"zip\" (Compression Algorithm) Header Parameter value');\n }\n }\n const { alg, enc } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWEInvalid('missing JWE Algorithm (alg) in JWE Header');\n }\n if (typeof enc !== 'string' || !enc) {\n throw new JWEInvalid('missing JWE Encryption Algorithm (enc) in JWE Header');\n }\n const keyManagementAlgorithms = options && validateAlgorithms('keyManagementAlgorithms', options.keyManagementAlgorithms);\n const contentEncryptionAlgorithms = options &&\n validateAlgorithms('contentEncryptionAlgorithms', options.contentEncryptionAlgorithms);\n if (keyManagementAlgorithms && !keyManagementAlgorithms.has(alg)) {\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter not allowed');\n }\n if (contentEncryptionAlgorithms && !contentEncryptionAlgorithms.has(enc)) {\n throw new JOSEAlgNotAllowed('\"enc\" (Encryption Algorithm) Header Parameter not allowed');\n }\n let encryptedKey;\n if (jwe.encrypted_key !== undefined) {\n encryptedKey = base64url(jwe.encrypted_key);\n }\n let resolvedKey = false;\n if (typeof key === 'function') {\n key = await key(parsedProt, jwe);\n resolvedKey = true;\n }\n let cek;\n try {\n cek = await decryptKeyManagement(alg, key, encryptedKey, joseHeader);\n }\n catch (err) {\n if (err instanceof TypeError) {\n throw err;\n }\n cek = generateCek(enc);\n }\n const iv = base64url(jwe.iv);\n const tag = base64url(jwe.tag);\n const protectedHeader = encoder.encode((_a = jwe.protected) !== null && _a !== void 0 ? _a : '');\n let additionalData;\n if (jwe.aad !== undefined) {\n additionalData = concat(protectedHeader, encoder.encode('.'), encoder.encode(jwe.aad));\n }\n else {\n additionalData = protectedHeader;\n }\n let plaintext = await decrypt(enc, cek, base64url(jwe.ciphertext), iv, tag, additionalData);\n if (joseHeader.zip === 'DEF') {\n plaintext = await ((options === null || options === void 0 ? void 0 : options.inflateRaw) || inflate)(plaintext);\n }\n const result = { plaintext };\n if (jwe.protected !== undefined) {\n result.protectedHeader = parsedProt;\n }\n if (jwe.aad !== undefined) {\n result.additionalAuthenticatedData = base64url(jwe.aad);\n }\n if (jwe.unprotected !== undefined) {\n result.sharedUnprotectedHeader = jwe.unprotected;\n }\n if (jwe.header !== undefined) {\n result.unprotectedHeader = jwe.header;\n }\n if (resolvedKey) {\n return { ...result, key };\n }\n return result;\n}\n","import { flattenedDecrypt } from '../flattened/decrypt.js';\nimport { JWEInvalid } from '../../util/errors.js';\nimport { decoder } from '../../lib/buffer_utils.js';\nexport async function compactDecrypt(jwe, key, options) {\n if (jwe instanceof Uint8Array) {\n jwe = decoder.decode(jwe);\n }\n if (typeof jwe !== 'string') {\n throw new JWEInvalid('Compact JWE must be a string or Uint8Array');\n }\n const { 0: protectedHeader, 1: encryptedKey, 2: iv, 3: ciphertext, 4: tag, length, } = jwe.split('.');\n if (length !== 5) {\n throw new JWEInvalid('Invalid Compact JWE');\n }\n const decrypted = await flattenedDecrypt({\n ciphertext,\n iv: (iv || undefined),\n protected: protectedHeader || undefined,\n tag: (tag || undefined),\n encrypted_key: encryptedKey || undefined,\n }, key, options);\n const result = { plaintext: decrypted.plaintext, protectedHeader: decrypted.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: decrypted.key };\n }\n return result;\n}\n","import { flattenedDecrypt } from '../flattened/decrypt.js';\nimport { JWEDecryptionFailed, JWEInvalid } from '../../util/errors.js';\nimport isObject from '../../lib/is_object.js';\nexport async function generalDecrypt(jwe, key, options) {\n if (!isObject(jwe)) {\n throw new JWEInvalid('General JWE must be an object');\n }\n if (!Array.isArray(jwe.recipients) || !jwe.recipients.every(isObject)) {\n throw new JWEInvalid('JWE Recipients missing or incorrect type');\n }\n if (!jwe.recipients.length) {\n throw new JWEInvalid('JWE Recipients has no members');\n }\n for (const recipient of jwe.recipients) {\n try {\n return await flattenedDecrypt({\n aad: jwe.aad,\n ciphertext: jwe.ciphertext,\n encrypted_key: recipient.encrypted_key,\n header: recipient.header,\n iv: jwe.iv,\n protected: jwe.protected,\n tag: jwe.tag,\n unprotected: jwe.unprotected,\n }, key, options);\n }\n catch (_a) {\n }\n }\n throw new JWEDecryptionFailed();\n}\n","import crypto, { isCryptoKey } from './webcrypto.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { encode as base64url } from './base64url.js';\nimport { types } from './is_key_like.js';\nconst keyToJWK = async (key) => {\n if (key instanceof Uint8Array) {\n return {\n kty: 'oct',\n k: base64url(key),\n };\n }\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n }\n if (!key.extractable) {\n throw new TypeError('non-extractable CryptoKey cannot be exported as a JWK');\n }\n const { ext, key_ops, alg, use, ...jwk } = await crypto.subtle.exportKey('jwk', key);\n return jwk;\n};\nexport default keyToJWK;\n","import { toSPKI as exportPublic } from '../runtime/asn1.js';\nimport { toPKCS8 as exportPrivate } from '../runtime/asn1.js';\nimport keyToJWK from '../runtime/key_to_jwk.js';\nexport async function exportSPKI(key) {\n return exportPublic(key);\n}\nexport async function exportPKCS8(key) {\n return exportPrivate(key);\n}\nexport async function exportJWK(key) {\n return keyToJWK(key);\n}\n","import { wrap as aesKw } from '../runtime/aeskw.js';\nimport * as ECDH from '../runtime/ecdhes.js';\nimport { encrypt as pbes2Kw } from '../runtime/pbes2kw.js';\nimport { encrypt as rsaEs } from '../runtime/rsaes.js';\nimport { encode as base64url } from '../runtime/base64url.js';\nimport generateCek, { bitLength as cekLength } from '../lib/cek.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { exportJWK } from '../key/export.js';\nimport checkKeyType from './check_key_type.js';\nimport { wrap as aesGcmKw } from './aesgcmkw.js';\nasync function encryptKeyManagement(alg, enc, key, providedCek, providedParameters = {}) {\n let encryptedKey;\n let parameters;\n let cek;\n checkKeyType(alg, key, 'encrypt');\n switch (alg) {\n case 'dir': {\n cek = key;\n break;\n }\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW': {\n if (!ECDH.ecdhAllowed(key)) {\n throw new JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');\n }\n const { apu, apv } = providedParameters;\n let { epk: ephemeralKey } = providedParameters;\n ephemeralKey || (ephemeralKey = (await ECDH.generateEpk(key)).privateKey);\n const { x, y, crv, kty } = await exportJWK(ephemeralKey);\n const sharedSecret = await ECDH.deriveKey(key, ephemeralKey, alg === 'ECDH-ES' ? enc : alg, alg === 'ECDH-ES' ? cekLength(enc) : parseInt(alg.slice(-5, -2), 10), apu, apv);\n parameters = { epk: { x, crv, kty } };\n if (kty === 'EC')\n parameters.epk.y = y;\n if (apu)\n parameters.apu = base64url(apu);\n if (apv)\n parameters.apv = base64url(apv);\n if (alg === 'ECDH-ES') {\n cek = sharedSecret;\n break;\n }\n cek = providedCek || generateCek(enc);\n const kwAlg = alg.slice(-6);\n encryptedKey = await aesKw(kwAlg, sharedSecret, cek);\n break;\n }\n case 'RSA1_5':\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512': {\n cek = providedCek || generateCek(enc);\n encryptedKey = await rsaEs(alg, key, cek);\n break;\n }\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW': {\n cek = providedCek || generateCek(enc);\n const { p2c, p2s } = providedParameters;\n ({ encryptedKey, ...parameters } = await pbes2Kw(alg, key, cek, p2c, p2s));\n break;\n }\n case 'A128KW':\n case 'A192KW':\n case 'A256KW': {\n cek = providedCek || generateCek(enc);\n encryptedKey = await aesKw(alg, key, cek);\n break;\n }\n case 'A128GCMKW':\n case 'A192GCMKW':\n case 'A256GCMKW': {\n cek = providedCek || generateCek(enc);\n const { iv } = providedParameters;\n ({ encryptedKey, ...parameters } = await aesGcmKw(alg, key, cek, iv));\n break;\n }\n default: {\n throw new JOSENotSupported('Invalid or unsupported \"alg\" (JWE Algorithm) header value');\n }\n }\n return { cek, encryptedKey, parameters };\n}\nexport default encryptKeyManagement;\n","import { encode as base64url } from '../../runtime/base64url.js';\nimport encrypt from '../../runtime/encrypt.js';\nimport { deflate } from '../../runtime/zlib.js';\nimport generateIv from '../../lib/iv.js';\nimport encryptKeyManagement from '../../lib/encrypt_key_management.js';\nimport { JOSENotSupported, JWEInvalid } from '../../util/errors.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport validateCrit from '../../lib/validate_crit.js';\nexport const unprotected = Symbol();\nexport class FlattenedEncrypt {\n constructor(plaintext) {\n if (!(plaintext instanceof Uint8Array)) {\n throw new TypeError('plaintext must be an instance of Uint8Array');\n }\n this._plaintext = plaintext;\n }\n setKeyManagementParameters(parameters) {\n if (this._keyManagementParameters) {\n throw new TypeError('setKeyManagementParameters can only be called once');\n }\n this._keyManagementParameters = parameters;\n return this;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n if (this._sharedUnprotectedHeader) {\n throw new TypeError('setSharedUnprotectedHeader can only be called once');\n }\n this._sharedUnprotectedHeader = sharedUnprotectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n setAdditionalAuthenticatedData(aad) {\n this._aad = aad;\n return this;\n }\n setContentEncryptionKey(cek) {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey can only be called once');\n }\n this._cek = cek;\n return this;\n }\n setInitializationVector(iv) {\n if (this._iv) {\n throw new TypeError('setInitializationVector can only be called once');\n }\n this._iv = iv;\n return this;\n }\n async encrypt(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader && !this._sharedUnprotectedHeader) {\n throw new JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()');\n }\n if (!isDisjoint(this._protectedHeader, this._unprotectedHeader, this._sharedUnprotectedHeader)) {\n throw new JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n ...this._sharedUnprotectedHeader,\n };\n validateCrit(JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);\n if (joseHeader.zip !== undefined) {\n if (!this._protectedHeader || !this._protectedHeader.zip) {\n throw new JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n }\n if (joseHeader.zip !== 'DEF') {\n throw new JOSENotSupported('Unsupported JWE \"zip\" (Compression Algorithm) Header Parameter value');\n }\n }\n const { alg, enc } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n if (typeof enc !== 'string' || !enc) {\n throw new JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n }\n let encryptedKey;\n if (alg === 'dir') {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey cannot be called when using Direct Encryption');\n }\n }\n else if (alg === 'ECDH-ES') {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey cannot be called when using Direct Key Agreement');\n }\n }\n let cek;\n {\n let parameters;\n ({ cek, encryptedKey, parameters } = await encryptKeyManagement(alg, enc, key, this._cek, this._keyManagementParameters));\n if (parameters) {\n if (options && unprotected in options) {\n if (!this._unprotectedHeader) {\n this.setUnprotectedHeader(parameters);\n }\n else {\n this._unprotectedHeader = { ...this._unprotectedHeader, ...parameters };\n }\n }\n else {\n if (!this._protectedHeader) {\n this.setProtectedHeader(parameters);\n }\n else {\n this._protectedHeader = { ...this._protectedHeader, ...parameters };\n }\n }\n }\n }\n this._iv || (this._iv = generateIv(enc));\n let additionalData;\n let protectedHeader;\n let aadMember;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(base64url(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n if (this._aad) {\n aadMember = base64url(this._aad);\n additionalData = concat(protectedHeader, encoder.encode('.'), encoder.encode(aadMember));\n }\n else {\n additionalData = protectedHeader;\n }\n let ciphertext;\n let tag;\n if (joseHeader.zip === 'DEF') {\n const deflated = await ((options === null || options === void 0 ? void 0 : options.deflateRaw) || deflate)(this._plaintext);\n ({ ciphertext, tag } = await encrypt(enc, deflated, cek, this._iv, additionalData));\n }\n else {\n ;\n ({ ciphertext, tag } = await encrypt(enc, this._plaintext, cek, this._iv, additionalData));\n }\n const jwe = {\n ciphertext: base64url(ciphertext),\n iv: base64url(this._iv),\n tag: base64url(tag),\n };\n if (encryptedKey) {\n jwe.encrypted_key = base64url(encryptedKey);\n }\n if (aadMember) {\n jwe.aad = aadMember;\n }\n if (this._protectedHeader) {\n jwe.protected = decoder.decode(protectedHeader);\n }\n if (this._sharedUnprotectedHeader) {\n jwe.unprotected = this._sharedUnprotectedHeader;\n }\n if (this._unprotectedHeader) {\n jwe.header = this._unprotectedHeader;\n }\n return jwe;\n }\n}\n","import { FlattenedEncrypt, unprotected } from '../flattened/encrypt.js';\nimport { JWEInvalid } from '../../util/errors.js';\nimport generateCek from '../../lib/cek.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport encryptKeyManagement from '../../lib/encrypt_key_management.js';\nimport { encode as base64url } from '../../runtime/base64url.js';\nimport validateCrit from '../../lib/validate_crit.js';\nclass IndividualRecipient {\n constructor(enc, key, options) {\n this.parent = enc;\n this.key = key;\n this.options = options;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this.unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this.unprotectedHeader = unprotectedHeader;\n return this;\n }\n addRecipient(...args) {\n return this.parent.addRecipient(...args);\n }\n encrypt(...args) {\n return this.parent.encrypt(...args);\n }\n done() {\n return this.parent;\n }\n}\nexport class GeneralEncrypt {\n constructor(plaintext) {\n this._recipients = [];\n this._plaintext = plaintext;\n }\n addRecipient(key, options) {\n const recipient = new IndividualRecipient(this, key, { crit: options === null || options === void 0 ? void 0 : options.crit });\n this._recipients.push(recipient);\n return recipient;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setSharedUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = sharedUnprotectedHeader;\n return this;\n }\n setAdditionalAuthenticatedData(aad) {\n this._aad = aad;\n return this;\n }\n async encrypt(options) {\n var _a, _b, _c;\n if (!this._recipients.length) {\n throw new JWEInvalid('at least one recipient must be added');\n }\n options = { deflateRaw: options === null || options === void 0 ? void 0 : options.deflateRaw };\n if (this._recipients.length === 1) {\n const [recipient] = this._recipients;\n const flattened = await new FlattenedEncrypt(this._plaintext)\n .setAdditionalAuthenticatedData(this._aad)\n .setProtectedHeader(this._protectedHeader)\n .setSharedUnprotectedHeader(this._unprotectedHeader)\n .setUnprotectedHeader(recipient.unprotectedHeader)\n .encrypt(recipient.key, { ...recipient.options, ...options });\n let jwe = {\n ciphertext: flattened.ciphertext,\n iv: flattened.iv,\n recipients: [{}],\n tag: flattened.tag,\n };\n if (flattened.aad)\n jwe.aad = flattened.aad;\n if (flattened.protected)\n jwe.protected = flattened.protected;\n if (flattened.unprotected)\n jwe.unprotected = flattened.unprotected;\n if (flattened.encrypted_key)\n jwe.recipients[0].encrypted_key = flattened.encrypted_key;\n if (flattened.header)\n jwe.recipients[0].header = flattened.header;\n return jwe;\n }\n let enc;\n for (let i = 0; i < this._recipients.length; i++) {\n const recipient = this._recipients[i];\n if (!isDisjoint(this._protectedHeader, this._unprotectedHeader, recipient.unprotectedHeader)) {\n throw new JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n ...recipient.unprotectedHeader,\n };\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n if (alg === 'dir' || alg === 'ECDH-ES') {\n throw new JWEInvalid('\"dir\" and \"ECDH-ES\" alg may only be used with a single recipient');\n }\n if (typeof joseHeader.enc !== 'string' || !joseHeader.enc) {\n throw new JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n }\n if (!enc) {\n enc = joseHeader.enc;\n }\n else if (enc !== joseHeader.enc) {\n throw new JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter must be the same for all recipients');\n }\n validateCrit(JWEInvalid, new Map(), recipient.options.crit, this._protectedHeader, joseHeader);\n if (joseHeader.zip !== undefined) {\n if (!this._protectedHeader || !this._protectedHeader.zip) {\n throw new JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n }\n }\n }\n const cek = generateCek(enc);\n let jwe = {\n ciphertext: '',\n iv: '',\n recipients: [],\n tag: '',\n };\n for (let i = 0; i < this._recipients.length; i++) {\n const recipient = this._recipients[i];\n const target = {};\n jwe.recipients.push(target);\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n ...recipient.unprotectedHeader,\n };\n const p2c = joseHeader.alg.startsWith('PBES2') ? 2048 + i : undefined;\n if (i === 0) {\n const flattened = await new FlattenedEncrypt(this._plaintext)\n .setAdditionalAuthenticatedData(this._aad)\n .setContentEncryptionKey(cek)\n .setProtectedHeader(this._protectedHeader)\n .setSharedUnprotectedHeader(this._unprotectedHeader)\n .setUnprotectedHeader(recipient.unprotectedHeader)\n .setKeyManagementParameters({ p2c })\n .encrypt(recipient.key, {\n ...recipient.options,\n ...options,\n [unprotected]: true,\n });\n jwe.ciphertext = flattened.ciphertext;\n jwe.iv = flattened.iv;\n jwe.tag = flattened.tag;\n if (flattened.aad)\n jwe.aad = flattened.aad;\n if (flattened.protected)\n jwe.protected = flattened.protected;\n if (flattened.unprotected)\n jwe.unprotected = flattened.unprotected;\n target.encrypted_key = flattened.encrypted_key;\n if (flattened.header)\n target.header = flattened.header;\n continue;\n }\n const { encryptedKey, parameters } = await encryptKeyManagement(((_a = recipient.unprotectedHeader) === null || _a === void 0 ? void 0 : _a.alg) ||\n ((_b = this._protectedHeader) === null || _b === void 0 ? void 0 : _b.alg) ||\n ((_c = this._unprotectedHeader) === null || _c === void 0 ? void 0 : _c.alg), enc, recipient.key, cek, { p2c });\n target.encrypted_key = base64url(encryptedKey);\n if (recipient.unprotectedHeader || parameters)\n target.header = { ...recipient.unprotectedHeader, ...parameters };\n }\n return jwe;\n }\n}\n","import { isCloudflareWorkers } from './env.js';\nimport { JOSENotSupported } from '../util/errors.js';\nexport default function subtleDsa(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case isCloudflareWorkers() && 'EdDSA':\n const { namedCurve } = algorithm;\n return { name: namedCurve, namedCurve };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n","import crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkSigCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nexport default function getCryptoKey(alg, key, usage) {\n if (isCryptoKey(key)) {\n checkSigCryptoKey(key, alg, usage);\n return key;\n }\n if (key instanceof Uint8Array) {\n if (!alg.startsWith('HS')) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n return crypto.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n }\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n}\n","import subtleAlgorithm from './subtle_dsa.js';\nimport crypto from './webcrypto.js';\nimport checkKeyLength from './check_key_length.js';\nimport getVerifyKey from './get_sign_verify_key.js';\nconst verify = async (alg, key, signature, data) => {\n const cryptoKey = await getVerifyKey(alg, key, 'verify');\n checkKeyLength(alg, cryptoKey);\n const algorithm = subtleAlgorithm(alg, cryptoKey.algorithm);\n try {\n return await crypto.subtle.verify(algorithm, cryptoKey, signature, data);\n }\n catch (_a) {\n return false;\n }\n};\nexport default verify;\n","import { decode as base64url } from '../../runtime/base64url.js';\nimport verify from '../../runtime/verify.js';\nimport { JOSEAlgNotAllowed, JWSInvalid, JWSSignatureVerificationFailed } from '../../util/errors.js';\nimport { concat, encoder, decoder } from '../../lib/buffer_utils.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport isObject from '../../lib/is_object.js';\nimport checkKeyType from '../../lib/check_key_type.js';\nimport validateCrit from '../../lib/validate_crit.js';\nimport validateAlgorithms from '../../lib/validate_algorithms.js';\nexport async function flattenedVerify(jws, key, options) {\n var _a;\n if (!isObject(jws)) {\n throw new JWSInvalid('Flattened JWS must be an object');\n }\n if (jws.protected === undefined && jws.header === undefined) {\n throw new JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n }\n if (jws.protected !== undefined && typeof jws.protected !== 'string') {\n throw new JWSInvalid('JWS Protected Header incorrect type');\n }\n if (jws.payload === undefined) {\n throw new JWSInvalid('JWS Payload missing');\n }\n if (typeof jws.signature !== 'string') {\n throw new JWSInvalid('JWS Signature missing or incorrect type');\n }\n if (jws.header !== undefined && !isObject(jws.header)) {\n throw new JWSInvalid('JWS Unprotected Header incorrect type');\n }\n let parsedProt = {};\n if (jws.protected) {\n const protectedHeader = base64url(jws.protected);\n try {\n parsedProt = JSON.parse(decoder.decode(protectedHeader));\n }\n catch (_b) {\n throw new JWSInvalid('JWS Protected Header is invalid');\n }\n }\n if (!isDisjoint(parsedProt, jws.header)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...parsedProt,\n ...jws.header,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = parsedProt.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n const algorithms = options && validateAlgorithms('algorithms', options.algorithms);\n if (algorithms && !algorithms.has(alg)) {\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter not allowed');\n }\n if (b64) {\n if (typeof jws.payload !== 'string') {\n throw new JWSInvalid('JWS Payload must be a string');\n }\n }\n else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {\n throw new JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n }\n let resolvedKey = false;\n if (typeof key === 'function') {\n key = await key(parsedProt, jws);\n resolvedKey = true;\n }\n checkKeyType(alg, key, 'verify');\n const data = concat(encoder.encode((_a = jws.protected) !== null && _a !== void 0 ? _a : ''), encoder.encode('.'), typeof jws.payload === 'string' ? encoder.encode(jws.payload) : jws.payload);\n const signature = base64url(jws.signature);\n const verified = await verify(alg, key, signature, data);\n if (!verified) {\n throw new JWSSignatureVerificationFailed();\n }\n let payload;\n if (b64) {\n payload = base64url(jws.payload);\n }\n else if (typeof jws.payload === 'string') {\n payload = encoder.encode(jws.payload);\n }\n else {\n payload = jws.payload;\n }\n const result = { payload };\n if (jws.protected !== undefined) {\n result.protectedHeader = parsedProt;\n }\n if (jws.header !== undefined) {\n result.unprotectedHeader = jws.header;\n }\n if (resolvedKey) {\n return { ...result, key };\n }\n return result;\n}\n","import { flattenedVerify } from '../flattened/verify.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { decoder } from '../../lib/buffer_utils.js';\nexport async function compactVerify(jws, key, options) {\n if (jws instanceof Uint8Array) {\n jws = decoder.decode(jws);\n }\n if (typeof jws !== 'string') {\n throw new JWSInvalid('Compact JWS must be a string or Uint8Array');\n }\n const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n if (length !== 3) {\n throw new JWSInvalid('Invalid Compact JWS');\n }\n const verified = await flattenedVerify({ payload, protected: protectedHeader, signature }, key, options);\n const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n","import { flattenedVerify } from '../flattened/verify.js';\nimport { JWSInvalid, JWSSignatureVerificationFailed } from '../../util/errors.js';\nimport isObject from '../../lib/is_object.js';\nexport async function generalVerify(jws, key, options) {\n if (!isObject(jws)) {\n throw new JWSInvalid('General JWS must be an object');\n }\n if (!Array.isArray(jws.signatures) || !jws.signatures.every(isObject)) {\n throw new JWSInvalid('JWS Signatures missing or incorrect type');\n }\n for (const signature of jws.signatures) {\n try {\n return await flattenedVerify({\n header: signature.header,\n payload: jws.payload,\n protected: signature.protected,\n signature: signature.signature,\n }, key, options);\n }\n catch (_a) {\n }\n }\n throw new JWSSignatureVerificationFailed();\n}\n","export default (date) => Math.floor(date.getTime() / 1000);\n","const minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;\nexport default (str) => {\n const matched = REGEX.exec(str);\n if (!matched) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[1]);\n const unit = matched[2].toLowerCase();\n switch (unit) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n case 's':\n return Math.round(value);\n case 'minute':\n case 'minutes':\n case 'min':\n case 'mins':\n case 'm':\n return Math.round(value * minute);\n case 'hour':\n case 'hours':\n case 'hr':\n case 'hrs':\n case 'h':\n return Math.round(value * hour);\n case 'day':\n case 'days':\n case 'd':\n return Math.round(value * day);\n case 'week':\n case 'weeks':\n case 'w':\n return Math.round(value * week);\n default:\n return Math.round(value * year);\n }\n};\n","import { JWTClaimValidationFailed, JWTExpired, JWTInvalid } from '../util/errors.js';\nimport { decoder } from './buffer_utils.js';\nimport epoch from './epoch.js';\nimport secs from './secs.js';\nimport isObject from './is_object.js';\nconst normalizeTyp = (value) => value.toLowerCase().replace(/^application\\//, '');\nconst checkAudiencePresence = (audPayload, audOption) => {\n if (typeof audPayload === 'string') {\n return audOption.includes(audPayload);\n }\n if (Array.isArray(audPayload)) {\n return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n }\n return false;\n};\nexport default (protectedHeader, encodedPayload, options = {}) => {\n const { typ } = options;\n if (typ &&\n (typeof protectedHeader.typ !== 'string' ||\n normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', 'typ', 'check_failed');\n }\n let payload;\n try {\n payload = JSON.parse(decoder.decode(encodedPayload));\n }\n catch (_a) {\n }\n if (!isObject(payload)) {\n throw new JWTInvalid('JWT Claims Set must be a top-level JSON object');\n }\n const { issuer } = options;\n if (issuer && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n throw new JWTClaimValidationFailed('unexpected \"iss\" claim value', 'iss', 'check_failed');\n }\n const { subject } = options;\n if (subject && payload.sub !== subject) {\n throw new JWTClaimValidationFailed('unexpected \"sub\" claim value', 'sub', 'check_failed');\n }\n const { audience } = options;\n if (audience &&\n !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n throw new JWTClaimValidationFailed('unexpected \"aud\" claim value', 'aud', 'check_failed');\n }\n let tolerance;\n switch (typeof options.clockTolerance) {\n case 'string':\n tolerance = secs(options.clockTolerance);\n break;\n case 'number':\n tolerance = options.clockTolerance;\n break;\n case 'undefined':\n tolerance = 0;\n break;\n default:\n throw new TypeError('Invalid clockTolerance option type');\n }\n const { currentDate } = options;\n const now = epoch(currentDate || new Date());\n if ((payload.iat !== undefined || options.maxTokenAge) && typeof payload.iat !== 'number') {\n throw new JWTClaimValidationFailed('\"iat\" claim must be a number', 'iat', 'invalid');\n }\n if (payload.nbf !== undefined) {\n if (typeof payload.nbf !== 'number') {\n throw new JWTClaimValidationFailed('\"nbf\" claim must be a number', 'nbf', 'invalid');\n }\n if (payload.nbf > now + tolerance) {\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', 'nbf', 'check_failed');\n }\n }\n if (payload.exp !== undefined) {\n if (typeof payload.exp !== 'number') {\n throw new JWTClaimValidationFailed('\"exp\" claim must be a number', 'exp', 'invalid');\n }\n if (payload.exp <= now - tolerance) {\n throw new JWTExpired('\"exp\" claim timestamp check failed', 'exp', 'check_failed');\n }\n }\n if (options.maxTokenAge) {\n const age = now - payload.iat;\n const max = typeof options.maxTokenAge === 'number' ? options.maxTokenAge : secs(options.maxTokenAge);\n if (age - tolerance > max) {\n throw new JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', 'iat', 'check_failed');\n }\n if (age < 0 - tolerance) {\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', 'iat', 'check_failed');\n }\n }\n return payload;\n};\n","import { compactVerify } from '../jws/compact/verify.js';\nimport jwtPayload from '../lib/jwt_claims_set.js';\nimport { JWTInvalid } from '../util/errors.js';\nexport async function jwtVerify(jwt, key, options) {\n var _a;\n const verified = await compactVerify(jwt, key, options);\n if (((_a = verified.protectedHeader.crit) === null || _a === void 0 ? void 0 : _a.includes('b64')) && verified.protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n const payload = jwtPayload(verified.protectedHeader, verified.payload, options);\n const result = { payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n","import { compactDecrypt } from '../jwe/compact/decrypt.js';\nimport jwtPayload from '../lib/jwt_claims_set.js';\nimport { JWTClaimValidationFailed } from '../util/errors.js';\nexport async function jwtDecrypt(jwt, key, options) {\n const decrypted = await compactDecrypt(jwt, key, options);\n const payload = jwtPayload(decrypted.protectedHeader, decrypted.plaintext, options);\n const { protectedHeader } = decrypted;\n if (protectedHeader.iss !== undefined && protectedHeader.iss !== payload.iss) {\n throw new JWTClaimValidationFailed('replicated \"iss\" claim header parameter mismatch', 'iss', 'mismatch');\n }\n if (protectedHeader.sub !== undefined && protectedHeader.sub !== payload.sub) {\n throw new JWTClaimValidationFailed('replicated \"sub\" claim header parameter mismatch', 'sub', 'mismatch');\n }\n if (protectedHeader.aud !== undefined &&\n JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud)) {\n throw new JWTClaimValidationFailed('replicated \"aud\" claim header parameter mismatch', 'aud', 'mismatch');\n }\n const result = { payload, protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: decrypted.key };\n }\n return result;\n}\n","import { FlattenedEncrypt } from '../flattened/encrypt.js';\nexport class CompactEncrypt {\n constructor(plaintext) {\n this._flattened = new FlattenedEncrypt(plaintext);\n }\n setContentEncryptionKey(cek) {\n this._flattened.setContentEncryptionKey(cek);\n return this;\n }\n setInitializationVector(iv) {\n this._flattened.setInitializationVector(iv);\n return this;\n }\n setProtectedHeader(protectedHeader) {\n this._flattened.setProtectedHeader(protectedHeader);\n return this;\n }\n setKeyManagementParameters(parameters) {\n this._flattened.setKeyManagementParameters(parameters);\n return this;\n }\n async encrypt(key, options) {\n const jwe = await this._flattened.encrypt(key, options);\n return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');\n }\n}\n","import subtleAlgorithm from './subtle_dsa.js';\nimport crypto from './webcrypto.js';\nimport checkKeyLength from './check_key_length.js';\nimport getSignKey from './get_sign_verify_key.js';\nconst sign = async (alg, key, data) => {\n const cryptoKey = await getSignKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n};\nexport default sign;\n","import { encode as base64url } from '../../runtime/base64url.js';\nimport sign from '../../runtime/sign.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport checkKeyType from '../../lib/check_key_type.js';\nimport validateCrit from '../../lib/validate_crit.js';\nexport class FlattenedSign {\n constructor(payload) {\n if (!(payload instanceof Uint8Array)) {\n throw new TypeError('payload must be an instance of Uint8Array');\n }\n this._payload = payload;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n async sign(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader) {\n throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n }\n if (!isDisjoint(this._protectedHeader, this._unprotectedHeader)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = this._protectedHeader.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n checkKeyType(alg, key, 'sign');\n let payload = this._payload;\n if (b64) {\n payload = encoder.encode(base64url(payload));\n }\n let protectedHeader;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(base64url(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n const data = concat(protectedHeader, encoder.encode('.'), payload);\n const signature = await sign(alg, key, data);\n const jws = {\n signature: base64url(signature),\n payload: '',\n };\n if (b64) {\n jws.payload = decoder.decode(payload);\n }\n if (this._unprotectedHeader) {\n jws.header = this._unprotectedHeader;\n }\n if (this._protectedHeader) {\n jws.protected = decoder.decode(protectedHeader);\n }\n return jws;\n }\n}\n","import { FlattenedSign } from '../flattened/sign.js';\nexport class CompactSign {\n constructor(payload) {\n this._flattened = new FlattenedSign(payload);\n }\n setProtectedHeader(protectedHeader) {\n this._flattened.setProtectedHeader(protectedHeader);\n return this;\n }\n async sign(key, options) {\n const jws = await this._flattened.sign(key, options);\n if (jws.payload === undefined) {\n throw new TypeError('use the flattened module for creating JWS with b64: false');\n }\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n }\n}\n","import { FlattenedSign } from '../flattened/sign.js';\nimport { JWSInvalid } from '../../util/errors.js';\nclass IndividualSignature {\n constructor(sig, key, options) {\n this.parent = sig;\n this.key = key;\n this.options = options;\n }\n setProtectedHeader(protectedHeader) {\n if (this.protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this.protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this.unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this.unprotectedHeader = unprotectedHeader;\n return this;\n }\n addSignature(...args) {\n return this.parent.addSignature(...args);\n }\n sign(...args) {\n return this.parent.sign(...args);\n }\n done() {\n return this.parent;\n }\n}\nexport class GeneralSign {\n constructor(payload) {\n this._signatures = [];\n this._payload = payload;\n }\n addSignature(key, options) {\n const signature = new IndividualSignature(this, key, options);\n this._signatures.push(signature);\n return signature;\n }\n async sign() {\n if (!this._signatures.length) {\n throw new JWSInvalid('at least one signature must be added');\n }\n const jws = {\n signatures: [],\n payload: '',\n };\n for (let i = 0; i < this._signatures.length; i++) {\n const signature = this._signatures[i];\n const flattened = new FlattenedSign(this._payload);\n flattened.setProtectedHeader(signature.protectedHeader);\n flattened.setUnprotectedHeader(signature.unprotectedHeader);\n const { payload, ...rest } = await flattened.sign(signature.key, signature.options);\n if (i === 0) {\n jws.payload = payload;\n }\n else if (jws.payload !== payload) {\n throw new JWSInvalid('inconsistent use of JWS Unencoded Payload Option (RFC7797)');\n }\n jws.signatures.push(rest);\n }\n return jws;\n }\n}\n","import epoch from '../lib/epoch.js';\nimport isObject from '../lib/is_object.js';\nimport secs from '../lib/secs.js';\nexport class ProduceJWT {\n constructor(payload) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this._payload = payload;\n }\n setIssuer(issuer) {\n this._payload = { ...this._payload, iss: issuer };\n return this;\n }\n setSubject(subject) {\n this._payload = { ...this._payload, sub: subject };\n return this;\n }\n setAudience(audience) {\n this._payload = { ...this._payload, aud: audience };\n return this;\n }\n setJti(jwtId) {\n this._payload = { ...this._payload, jti: jwtId };\n return this;\n }\n setNotBefore(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, nbf: input };\n }\n else {\n this._payload = { ...this._payload, nbf: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setExpirationTime(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, exp: input };\n }\n else {\n this._payload = { ...this._payload, exp: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setIssuedAt(input) {\n if (typeof input === 'undefined') {\n this._payload = { ...this._payload, iat: epoch(new Date()) };\n }\n else {\n this._payload = { ...this._payload, iat: input };\n }\n return this;\n }\n}\n","import { CompactSign } from '../jws/compact/sign.js';\nimport { JWTInvalid } from '../util/errors.js';\nimport { encoder } from '../lib/buffer_utils.js';\nimport { ProduceJWT } from './produce.js';\nexport class SignJWT extends ProduceJWT {\n setProtectedHeader(protectedHeader) {\n this._protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n var _a;\n const sig = new CompactSign(encoder.encode(JSON.stringify(this._payload)));\n sig.setProtectedHeader(this._protectedHeader);\n if (Array.isArray((_a = this._protectedHeader) === null || _a === void 0 ? void 0 : _a.crit) &&\n this._protectedHeader.crit.includes('b64') &&\n this._protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n return sig.sign(key, options);\n }\n}\n","import { CompactEncrypt } from '../jwe/compact/encrypt.js';\nimport { encoder } from '../lib/buffer_utils.js';\nimport { ProduceJWT } from './produce.js';\nexport class EncryptJWT extends ProduceJWT {\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setKeyManagementParameters(parameters) {\n if (this._keyManagementParameters) {\n throw new TypeError('setKeyManagementParameters can only be called once');\n }\n this._keyManagementParameters = parameters;\n return this;\n }\n setContentEncryptionKey(cek) {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey can only be called once');\n }\n this._cek = cek;\n return this;\n }\n setInitializationVector(iv) {\n if (this._iv) {\n throw new TypeError('setInitializationVector can only be called once');\n }\n this._iv = iv;\n return this;\n }\n replicateIssuerAsHeader() {\n this._replicateIssuerAsHeader = true;\n return this;\n }\n replicateSubjectAsHeader() {\n this._replicateSubjectAsHeader = true;\n return this;\n }\n replicateAudienceAsHeader() {\n this._replicateAudienceAsHeader = true;\n return this;\n }\n async encrypt(key, options) {\n const enc = new CompactEncrypt(encoder.encode(JSON.stringify(this._payload)));\n if (this._replicateIssuerAsHeader) {\n this._protectedHeader = { ...this._protectedHeader, iss: this._payload.iss };\n }\n if (this._replicateSubjectAsHeader) {\n this._protectedHeader = { ...this._protectedHeader, sub: this._payload.sub };\n }\n if (this._replicateAudienceAsHeader) {\n this._protectedHeader = { ...this._protectedHeader, aud: this._payload.aud };\n }\n enc.setProtectedHeader(this._protectedHeader);\n if (this._iv) {\n enc.setInitializationVector(this._iv);\n }\n if (this._cek) {\n enc.setContentEncryptionKey(this._cek);\n }\n if (this._keyManagementParameters) {\n enc.setKeyManagementParameters(this._keyManagementParameters);\n }\n return enc.encrypt(key, options);\n }\n}\n","import digest from '../runtime/digest.js';\nimport { encode as base64url } from '../runtime/base64url.js';\nimport { JOSENotSupported, JWKInvalid } from '../util/errors.js';\nimport { encoder } from '../lib/buffer_utils.js';\nimport isObject from '../lib/is_object.js';\nconst check = (value, description) => {\n if (typeof value !== 'string' || !value) {\n throw new JWKInvalid(`${description} missing or invalid`);\n }\n};\nexport async function calculateJwkThumbprint(jwk, digestAlgorithm = 'sha256') {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n if (digestAlgorithm !== 'sha256' &&\n digestAlgorithm !== 'sha384' &&\n digestAlgorithm !== 'sha512') {\n throw new TypeError('digestAlgorithm must one of \"sha256\", \"sha384\", or \"sha512\"');\n }\n let components;\n switch (jwk.kty) {\n case 'EC':\n check(jwk.crv, '\"crv\" (Curve) Parameter');\n check(jwk.x, '\"x\" (X Coordinate) Parameter');\n check(jwk.y, '\"y\" (Y Coordinate) Parameter');\n components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n break;\n case 'OKP':\n check(jwk.crv, '\"crv\" (Subtype of Key Pair) Parameter');\n check(jwk.x, '\"x\" (Public Key) Parameter');\n components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n break;\n case 'RSA':\n check(jwk.e, '\"e\" (Exponent) Parameter');\n check(jwk.n, '\"n\" (Modulus) Parameter');\n components = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n break;\n case 'oct':\n check(jwk.k, '\"k\" (Key Value) Parameter');\n components = { k: jwk.k, kty: jwk.kty };\n break;\n default:\n throw new JOSENotSupported('\"kty\" (Key Type) Parameter missing or unsupported');\n }\n const data = encoder.encode(JSON.stringify(components));\n return base64url(await digest(digestAlgorithm, data));\n}\n","import { importJWK } from '../key/import.js';\nimport isObject from '../lib/is_object.js';\nimport { JWSInvalid } from '../util/errors.js';\nexport async function EmbeddedJWK(protectedHeader, token) {\n const joseHeader = {\n ...protectedHeader,\n ...token.header,\n };\n if (!isObject(joseHeader.jwk)) {\n throw new JWSInvalid('\"jwk\" (JSON Web Key) Header Parameter must be a JSON object');\n }\n const key = await importJWK({ ...joseHeader.jwk, ext: true }, joseHeader.alg, true);\n if (key instanceof Uint8Array || key.type !== 'public') {\n throw new JWSInvalid('\"jwk\" (JSON Web Key) Header Parameter must be a public key');\n }\n return key;\n}\n","import { importJWK } from '../key/import.js';\nimport { JWKSInvalid, JOSENotSupported, JWKSNoMatchingKey, JWKSMultipleMatchingKeys, } from '../util/errors.js';\nimport isObject from '../lib/is_object.js';\nfunction getKtyFromAlg(alg) {\n switch (typeof alg === 'string' && alg.slice(0, 2)) {\n case 'RS':\n case 'PS':\n return 'RSA';\n case 'ES':\n return 'EC';\n case 'Ed':\n return 'OKP';\n default:\n throw new JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n }\n}\nexport function isJWKSLike(jwks) {\n return (jwks &&\n typeof jwks === 'object' &&\n Array.isArray(jwks.keys) &&\n jwks.keys.every(isJWKLike));\n}\nfunction isJWKLike(key) {\n return isObject(key);\n}\nfunction clone(obj) {\n if (typeof structuredClone === 'function') {\n return structuredClone(obj);\n }\n return JSON.parse(JSON.stringify(obj));\n}\nexport class LocalJWKSet {\n constructor(jwks) {\n this._cached = new WeakMap();\n if (!isJWKSLike(jwks)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this._jwks = clone(jwks);\n }\n async getKey(protectedHeader, token) {\n const { alg, kid } = { ...protectedHeader, ...token.header };\n const kty = getKtyFromAlg(alg);\n const candidates = this._jwks.keys.filter((jwk) => {\n let candidate = kty === jwk.kty;\n if (candidate && typeof kid === 'string') {\n candidate = kid === jwk.kid;\n }\n if (candidate && typeof jwk.alg === 'string') {\n candidate = alg === jwk.alg;\n }\n if (candidate && typeof jwk.use === 'string') {\n candidate = jwk.use === 'sig';\n }\n if (candidate && Array.isArray(jwk.key_ops)) {\n candidate = jwk.key_ops.includes('verify');\n }\n if (candidate && alg === 'EdDSA') {\n candidate = jwk.crv === 'Ed25519' || jwk.crv === 'Ed448';\n }\n if (candidate) {\n switch (alg) {\n case 'ES256':\n candidate = jwk.crv === 'P-256';\n break;\n case 'ES256K':\n candidate = jwk.crv === 'secp256k1';\n break;\n case 'ES384':\n candidate = jwk.crv === 'P-384';\n break;\n case 'ES512':\n candidate = jwk.crv === 'P-521';\n break;\n }\n }\n return candidate;\n });\n const { 0: jwk, length } = candidates;\n if (length === 0) {\n throw new JWKSNoMatchingKey();\n }\n else if (length !== 1) {\n throw new JWKSMultipleMatchingKeys();\n }\n const cached = this._cached.get(jwk) || this._cached.set(jwk, {}).get(jwk);\n if (cached[alg] === undefined) {\n const keyObject = await importJWK({ ...jwk, ext: true }, alg);\n if (keyObject instanceof Uint8Array || keyObject.type !== 'public') {\n throw new JWKSInvalid('JSON Web Key Set members must be public keys');\n }\n cached[alg] = keyObject;\n }\n return cached[alg];\n }\n}\nexport function createLocalJWKSet(jwks) {\n return LocalJWKSet.prototype.getKey.bind(new LocalJWKSet(jwks));\n}\n","import { JOSEError, JWKSTimeout } from '../util/errors.js';\nconst fetchJwks = async (url, timeout, options) => {\n let controller;\n let id;\n let timedOut = false;\n if (typeof AbortController === 'function') {\n controller = new AbortController();\n id = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n }\n const response = await fetch(url.href, {\n signal: controller ? controller.signal : undefined,\n redirect: 'manual',\n headers: options.headers,\n }).catch((err) => {\n if (timedOut)\n throw new JWKSTimeout();\n throw err;\n });\n if (id !== undefined)\n clearTimeout(id);\n if (response.status !== 200) {\n throw new JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');\n }\n try {\n return await response.json();\n }\n catch (_a) {\n throw new JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');\n }\n};\nexport default fetchJwks;\n","import fetchJwks from '../runtime/fetch_jwks.js';\nimport { isCloudflareWorkers } from '../runtime/env.js';\nimport { JWKSInvalid, JWKSNoMatchingKey } from '../util/errors.js';\nimport { isJWKSLike, LocalJWKSet } from './local.js';\nclass RemoteJWKSet extends LocalJWKSet {\n constructor(url, options) {\n super({ keys: [] });\n this._jwks = undefined;\n if (!(url instanceof URL)) {\n throw new TypeError('url must be an instance of URL');\n }\n this._url = new URL(url.href);\n this._options = { agent: options === null || options === void 0 ? void 0 : options.agent, headers: options === null || options === void 0 ? void 0 : options.headers };\n this._timeoutDuration =\n typeof (options === null || options === void 0 ? void 0 : options.timeoutDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.timeoutDuration : 5000;\n this._cooldownDuration =\n typeof (options === null || options === void 0 ? void 0 : options.cooldownDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.cooldownDuration : 30000;\n this._cacheMaxAge = typeof (options === null || options === void 0 ? void 0 : options.cacheMaxAge) === 'number' ? options === null || options === void 0 ? void 0 : options.cacheMaxAge : 600000;\n }\n coolingDown() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cooldownDuration\n : false;\n }\n fresh() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cacheMaxAge\n : false;\n }\n async getKey(protectedHeader, token) {\n if (!this._jwks || !this.fresh()) {\n await this.reload();\n }\n try {\n return await super.getKey(protectedHeader, token);\n }\n catch (err) {\n if (err instanceof JWKSNoMatchingKey) {\n if (this.coolingDown() === false) {\n await this.reload();\n return super.getKey(protectedHeader, token);\n }\n }\n throw err;\n }\n }\n async reload() {\n if (this._pendingFetch && isCloudflareWorkers()) {\n return new Promise((resolve) => {\n const isDone = () => {\n if (this._pendingFetch === undefined) {\n resolve();\n }\n else {\n setTimeout(isDone, 5);\n }\n };\n isDone();\n });\n }\n if (!this._pendingFetch) {\n this._pendingFetch = fetchJwks(this._url, this._timeoutDuration, this._options)\n .then((json) => {\n if (!isJWKSLike(json)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this._jwks = { keys: json.keys };\n this._jwksTimestamp = Date.now();\n this._pendingFetch = undefined;\n })\n .catch((err) => {\n this._pendingFetch = undefined;\n throw err;\n });\n }\n await this._pendingFetch;\n }\n}\nexport function createRemoteJWKSet(url, options) {\n return RemoteJWKSet.prototype.getKey.bind(new RemoteJWKSet(url, options));\n}\n","import * as base64url from '../runtime/base64url.js';\nimport { decoder } from '../lib/buffer_utils.js';\nimport { JWTInvalid } from '../util/errors.js';\nimport jwtPayload from '../lib/jwt_claims_set.js';\nimport { ProduceJWT } from './produce.js';\nexport class UnsecuredJWT extends ProduceJWT {\n encode() {\n const header = base64url.encode(JSON.stringify({ alg: 'none' }));\n const payload = base64url.encode(JSON.stringify(this._payload));\n return `${header}.${payload}.`;\n }\n static decode(jwt, options) {\n if (typeof jwt !== 'string') {\n throw new JWTInvalid('Unsecured JWT must be a string');\n }\n const { 0: encodedHeader, 1: encodedPayload, 2: signature, length } = jwt.split('.');\n if (length !== 3 || signature !== '') {\n throw new JWTInvalid('Invalid Unsecured JWT');\n }\n let header;\n try {\n header = JSON.parse(decoder.decode(base64url.decode(encodedHeader)));\n if (header.alg !== 'none')\n throw new Error();\n }\n catch (_a) {\n throw new JWTInvalid('Invalid Unsecured JWT');\n }\n const payload = jwtPayload(header, base64url.decode(encodedPayload), options);\n return { payload, header };\n }\n}\n","import * as base64url from '../runtime/base64url.js';\nexport const encode = base64url.encode;\nexport const decode = base64url.decode;\n","import { decode as base64url } from './base64url.js';\nimport { decoder } from '../lib/buffer_utils.js';\nimport isObject from '../lib/is_object.js';\nexport function decodeProtectedHeader(token) {\n let protectedB64u;\n if (typeof token === 'string') {\n const parts = token.split('.');\n if (parts.length === 3 || parts.length === 5) {\n ;\n [protectedB64u] = parts;\n }\n }\n else if (typeof token === 'object' && token) {\n if ('protected' in token) {\n protectedB64u = token.protected;\n }\n else {\n throw new TypeError('Token does not contain a Protected Header');\n }\n }\n try {\n if (typeof protectedB64u !== 'string' || !protectedB64u) {\n throw new Error();\n }\n const result = JSON.parse(decoder.decode(base64url(protectedB64u)));\n if (!isObject(result)) {\n throw new Error();\n }\n return result;\n }\n catch (_a) {\n throw new TypeError('Invalid Token or Protected Header formatting');\n }\n}\n","import { decode as base64url } from './base64url.js';\nimport { decoder } from '../lib/buffer_utils.js';\nimport isObject from '../lib/is_object.js';\nimport { JWTInvalid } from './errors.js';\nexport function decodeJwt(jwt) {\n if (typeof jwt !== 'string')\n throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n const { 1: payload, length } = jwt.split('.');\n if (length === 5)\n throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n if (length !== 3)\n throw new JWTInvalid('Invalid JWT');\n if (!payload)\n throw new JWTInvalid('JWTs must contain a payload');\n let decoded;\n try {\n decoded = base64url(payload);\n }\n catch (_a) {\n throw new JWTInvalid('Failed to parse the base64url encoded payload');\n }\n let result;\n try {\n result = JSON.parse(decoder.decode(decoded));\n }\n catch (_b) {\n throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n }\n if (!isObject(result))\n throw new JWTInvalid('Invalid JWT Claims Set');\n return result;\n}\n","import { isCloudflareWorkers } from './env.js';\nimport crypto from './webcrypto.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport random from './random.js';\nexport async function generateSecret(alg, options) {\n var _a;\n let length;\n let algorithm;\n let keyUsages;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n length = parseInt(alg.slice(-3), 10);\n algorithm = { name: 'HMAC', hash: `SHA-${length}`, length };\n keyUsages = ['sign', 'verify'];\n break;\n case 'A128CBC-HS256':\n case 'A192CBC-HS384':\n case 'A256CBC-HS512':\n length = parseInt(alg.slice(-3), 10);\n return random(new Uint8Array(length >> 3));\n case 'A128KW':\n case 'A192KW':\n case 'A256KW':\n length = parseInt(alg.slice(1, 4), 10);\n algorithm = { name: 'AES-KW', length };\n keyUsages = ['wrapKey', 'unwrapKey'];\n break;\n case 'A128GCMKW':\n case 'A192GCMKW':\n case 'A256GCMKW':\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM':\n length = parseInt(alg.slice(1, 4), 10);\n algorithm = { name: 'AES-GCM', length };\n keyUsages = ['encrypt', 'decrypt'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n return crypto.subtle.generateKey(algorithm, (_a = options === null || options === void 0 ? void 0 : options.extractable) !== null && _a !== void 0 ? _a : false, keyUsages);\n}\nfunction getModulusLengthOption(options) {\n var _a;\n const modulusLength = (_a = options === null || options === void 0 ? void 0 : options.modulusLength) !== null && _a !== void 0 ? _a : 2048;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');\n }\n return modulusLength;\n}\nexport async function generateKeyPair(alg, options) {\n var _a, _b;\n let algorithm;\n let keyUsages;\n switch (alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = {\n name: 'RSA-PSS',\n hash: `SHA-${alg.slice(-3)}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['sign', 'verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = {\n name: 'RSASSA-PKCS1-v1_5',\n hash: `SHA-${alg.slice(-3)}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['sign', 'verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(alg.slice(-3), 10) || 1}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['decrypt', 'unwrapKey', 'encrypt', 'wrapKey'];\n break;\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = ['sign', 'verify'];\n break;\n case isCloudflareWorkers() && 'EdDSA':\n switch (options === null || options === void 0 ? void 0 : options.crv) {\n case undefined:\n case 'Ed25519':\n algorithm = { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };\n keyUsages = ['sign', 'verify'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported crv option provided');\n }\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: (_a = options === null || options === void 0 ? void 0 : options.crv) !== null && _a !== void 0 ? _a : 'P-256' };\n keyUsages = ['deriveKey', 'deriveBits'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n return (crypto.subtle.generateKey(algorithm, (_b = options === null || options === void 0 ? void 0 : options.extractable) !== null && _b !== void 0 ? _b : false, keyUsages));\n}\n","import { generateKeyPair as generate } from '../runtime/generate.js';\nexport async function generateKeyPair(alg, options) {\n return generate(alg, options);\n}\n","import { generateSecret as generate } from '../runtime/generate.js';\nexport async function generateSecret(alg, options) {\n return generate(alg, options);\n}\n"],"sourceRoot":""}