crypto-es
Version:
A cryptography algorithms library compatible with ES6 and TypeScript
1 lines • 5.41 kB
Source Map (JSON)
{"version":3,"file":"enc-base64.cjs","names":["words: number[]","WordArray","base64Chars: string[]","Base64: Encoder"],"sources":["../src/enc-base64.ts"],"sourcesContent":["import {\n WordArray,\n Encoder,\n} from './core';\n\n/**\n * Parses a Base64 string to a WordArray.\n * Helper function for Base64 decoding.\n * \n * @param base64Str - The Base64 string to parse\n * @param base64StrLength - The length of the Base64 string\n * @param reverseMap - The reverse character map for decoding\n * @returns The decoded WordArray\n */\nexport const parseLoop = (\n base64Str: string,\n base64StrLength: number,\n reverseMap: number[]\n): WordArray => {\n const words: number[] = [];\n let nBytes = 0;\n \n for (let i = 0; i < base64StrLength; i += 1) {\n if (i % 4) {\n const bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n const bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n const bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n nBytes += 1;\n }\n }\n \n return WordArray.create(words, nBytes);\n};\n\n/**\n * Base64 encoding strategy implementation.\n * @private\n */\nclass Base64Impl implements Encoder {\n /** The Base64 character map */\n private _map: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n \n /** The reverse character map for decoding */\n private _reverseMap?: number[];\n\n /**\n * Converts a word array to a Base64 string.\n * \n * @param wordArray - The word array to convert\n * @returns The Base64 string representation\n * @example\n * ```javascript\n * const base64String = Base64.stringify(wordArray);\n * ```\n */\n stringify(wordArray: WordArray): string {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n const map = 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\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 Base64 string to a word array.\n * \n * @param base64Str - The Base64 string to parse\n * @returns The word array representation\n * @example\n * ```javascript\n * const wordArray = Base64.parse(base64String);\n * ```\n */\n parse(base64Str: string): WordArray {\n // Shortcuts\n let base64StrLength = base64Str.length;\n const map = this._map;\n let reverseMap = this._reverseMap;\n\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 * Base64 encoding strategy.\n * Converts between WordArrays and Base64 strings.\n * \n * @example\n * ```javascript\n * // Encoding\n * const base64String = Base64.stringify(wordArray);\n * \n * // Decoding\n * const wordArray = Base64.parse(base64String);\n * ```\n */\nexport const Base64: Encoder = new Base64Impl();"],"mappings":";;;;;;;;;;;;AAcA,MAAa,aACX,WACA,iBACA,eACc;CACd,MAAMA,QAAkB,EAAE;CAC1B,IAAI,SAAS;AAEb,MAAK,IAAI,IAAI,GAAG,IAAI,iBAAiB,KAAK,EACxC,KAAI,IAAI,GAAG;EACT,MAAM,QAAQ,WAAW,UAAU,WAAW,IAAI,OAAS,IAAI,IAAK;EACpE,MAAM,QAAQ,WAAW,UAAU,WAAW,QAAS,IAAK,IAAI,IAAK;EACrE,MAAM,eAAe,QAAQ;AAC7B,QAAM,WAAW,MAAM,gBAAiB,KAAM,SAAS,IAAK;AAC5D,YAAU;CACX;AAGH,QAAOC,uBAAU,OAAO,OAAO;AAChC;;;;;AAMD,IAAM,aAAN,MAAoC;;CAElC,AAAQ,OAAe;;CAGvB,AAAQ;;;;;;;;;;;CAYR,UAAU,WAA8B;EAEtC,MAAM,EAAE,OAAO,UAAU,GAAG;EAC5B,MAAM,MAAM,KAAK;AAGjB,YAAU;EAGV,MAAMC,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;;;;;;;;;;;CAYD,MAAM,WAA8B;EAElC,IAAI,kBAAkB,UAAU;EAChC,MAAM,MAAM,KAAK;EACjB,IAAI,aAAa,KAAK;AAEtB,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,SAAO,UAAU,WAAW,iBAAiB;CAC9C;AACF;;;;;;;;;;;;;;AAeD,MAAaC,SAAkB,IAAI"}