crypto-es
Version:
A cryptography algorithms library compatible with ES6 and TypeScript
1 lines • 6.13 kB
Source Map (JSON)
{"version":3,"file":"enc-base64url.cjs","names":["base64Chars: string[]","parseLoop","Base64url: Base64urlEncoder"],"sources":["../src/enc-base64url.ts"],"sourcesContent":["import {\n WordArray,\n Encoder,\n} from './core';\nimport {\n parseLoop,\n} from './enc-base64';\n\n/**\n * Extended encoder interface for Base64url with URL-safe option\n */\ninterface Base64urlEncoder extends Encoder {\n /**\n * Converts a word array to a Base64url string\n * @param wordArray - The word array to convert\n * @param urlSafe - Whether to use URL-safe encoding (default: true)\n * @returns The Base64url string\n */\n stringify(wordArray: WordArray, urlSafe?: boolean): string;\n \n /**\n * Converts a Base64url string to a word array\n * @param base64Str - The Base64url string to parse\n * @param urlSafe - Whether to use URL-safe decoding (default: true)\n * @returns The word array\n */\n parse(base64Str: string, urlSafe?: boolean): WordArray;\n}\n\n/**\n * Base64url encoding strategy implementation.\n * @private\n */\nclass Base64urlImpl implements Base64urlEncoder {\n /** Standard Base64 character map */\n private _map: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n \n /** URL-safe Base64 character map (no padding) */\n private _safeMap: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n \n /** Reverse character map for decoding */\n private _reverseMap?: number[];\n\n /**\n * Converts a word array to a Base64url string.\n * \n * @param wordArray - The word array to convert\n * @param urlSafe - Whether to use URL-safe encoding (default: true)\n * @returns The Base64url string representation\n * @example\n * ```javascript\n * // URL-safe encoding (default)\n * const base64urlString = Base64url.stringify(wordArray);\n * \n * // Standard Base64 encoding\n * const base64String = Base64url.stringify(wordArray, false);\n * ```\n */\n stringify(wordArray: WordArray, urlSafe: boolean = true): string {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n const map = urlSafe ? this._safeMap : this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n const base64Chars: string[] = [];\n for (let i = 0; i < sigBytes; i += 3) {\n const byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n const byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n const byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n const triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n for (let j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j += 1) {\n base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n }\n }\n\n // Add padding (only for standard Base64)\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n }\n\n /**\n * Converts a Base64url string to a word array.\n * \n * @param base64Str - The Base64url string to parse\n * @param urlSafe - Whether to use URL-safe decoding (default: true)\n * @returns The word array representation\n * @example\n * ```javascript\n * // URL-safe decoding (default)\n * const wordArray = Base64url.parse(base64urlString);\n * \n * // Standard Base64 decoding\n * const wordArray = Base64url.parse(base64String, false);\n * ```\n */\n parse(base64Str: string, urlSafe: boolean = true): WordArray {\n // Shortcuts\n let base64StrLength = base64Str.length;\n const map = urlSafe ? this._safeMap : this._map;\n let reverseMap = this._reverseMap;\n\n // Build reverse map if not cached\n if (!reverseMap) {\n this._reverseMap = [];\n reverseMap = this._reverseMap;\n for (let j = 0; j < map.length; j += 1) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n const paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n }\n}\n\n/**\n * Base64url encoding strategy.\n * Provides URL-safe Base64 encoding/decoding that can be used in URLs without escaping.\n * \n * The URL-safe variant:\n * - Uses '-' instead of '+'\n * - Uses '_' instead of '/'\n * - Omits padding '=' characters\n * \n * @example\n * ```javascript\n * // URL-safe encoding (default)\n * const urlSafeString = Base64url.stringify(wordArray);\n * const wordArray = Base64url.parse(urlSafeString);\n * \n * // Standard Base64 encoding\n * const base64String = Base64url.stringify(wordArray, false);\n * const wordArray = Base64url.parse(base64String, false);\n * ```\n */\nexport const Base64url: Base64urlEncoder = new Base64urlImpl();"],"mappings":";;;;;;;AAiCA,IAAM,gBAAN,MAAgD;;CAE9C,AAAQ,OAAe;;CAGvB,AAAQ,WAAmB;;CAG3B,AAAQ;;;;;;;;;;;;;;;;CAiBR,UAAU,WAAsB,UAAmB,MAAc;EAE/D,MAAM,EAAE,OAAO,UAAU,GAAG;EAC5B,MAAM,MAAM,UAAU,KAAK,WAAW,KAAK;AAG3C,YAAU;EAGV,MAAMA,cAAwB,EAAE;AAChC,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK,GAAG;GACpC,MAAM,QAAS,MAAM,MAAM,OAAQ,KAAM,IAAI,IAAK,IAAM;GACxD,MAAM,QAAS,MAAO,IAAI,MAAO,OAAQ,MAAO,IAAI,KAAK,IAAK,IAAM;GACpE,MAAM,QAAS,MAAO,IAAI,MAAO,OAAQ,MAAO,IAAI,KAAK,IAAK,IAAM;GAEpE,MAAM,UAAW,SAAS,KAAO,SAAS,IAAK;AAE/C,QAAK,IAAI,IAAI,GAAI,IAAI,KAAO,IAAI,IAAI,MAAO,UAAW,KAAK,EACzD,aAAY,KAAK,IAAI,OAAQ,YAAa,KAAK,IAAI,KAAO;EAE7D;EAGD,MAAM,cAAc,IAAI,OAAO;AAC/B,MAAI,YACF,QAAO,YAAY,SAAS,EAC1B,aAAY,KAAK;AAIrB,SAAO,YAAY,KAAK;CACzB;;;;;;;;;;;;;;;;CAiBD,MAAM,WAAmB,UAAmB,MAAiB;EAE3D,IAAI,kBAAkB,UAAU;EAChC,MAAM,MAAM,UAAU,KAAK,WAAW,KAAK;EAC3C,IAAI,aAAa,KAAK;AAGtB,MAAI,CAAC,YAAY;AACf,QAAK,cAAc,EAAE;AACrB,gBAAa,KAAK;AAClB,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,EACnC,YAAW,IAAI,WAAW,MAAM;EAEnC;EAGD,MAAM,cAAc,IAAI,OAAO;AAC/B,MAAI,aAAa;GACf,MAAM,eAAe,UAAU,QAAQ;AACvC,OAAI,iBAAiB,GACnB,mBAAkB;EAErB;AAGD,SAAOC,6BAAU,WAAW,iBAAiB;CAC9C;AACF;;;;;;;;;;;;;;;;;;;;;AAsBD,MAAaC,YAA8B,IAAI"}