crypto-es
Version:
A cryptography algorithms library compatible with ES6 and TypeScript
1 lines • 4.52 kB
Source Map (JSON)
{"version":3,"file":"rc4.cjs","names":["StreamCipher","RC4: CipherObj","RC4Drop: CipherObj"],"sources":["../src/rc4.ts"],"sourcesContent":["import {\n StreamCipher,\n CipherObj,\n CipherCfg,\n WordArray,\n} from './cipher-core';\n\ninterface RC4DropCfg extends CipherCfg {\n drop?: number;\n}\n\n\n/**\n * RC4 stream cipher algorithm.\n */\nexport class RC4Algo extends StreamCipher {\n static keySize = 256 / 32;\n static ivSize = 0;\n\n protected _S!: number[];\n protected _i!: number;\n protected _j!: number;\n\n protected generateKeystreamWord(): number {\n // Shortcuts\n const S = this._S;\n let i = this._i;\n let j = this._j;\n\n // Generate keystream word\n let keystreamWord = 0;\n for (let n = 0; n < 4; n += 1) {\n i = (i + 1) % 256;\n j = (j + S[i]) % 256;\n\n // Swap\n const t = S[i];\n S[i] = S[j];\n S[j] = t;\n\n keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n }\n\n // Update counters\n this._i = i;\n this._j = j;\n\n return keystreamWord;\n }\n\n protected _doReset(): void {\n // Shortcuts\n const key = this._key;\n const keyWords = key.words;\n const keySigBytes = key.sigBytes;\n\n // Init sbox\n this._S = [];\n const S = this._S;\n for (let i = 0; i < 256; i += 1) {\n S[i] = i;\n }\n\n // Key setup\n for (let i = 0, j = 0; i < 256; i += 1) {\n const keyByteIndex = i % keySigBytes;\n const keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n j = (j + S[i] + keyByte) % 256;\n\n // Swap\n const t = S[i];\n S[i] = S[j];\n S[j] = t;\n }\n\n // Counters\n this._j = 0;\n this._i = this._j;\n }\n\n protected _doProcessBlock(M: number[], offset: number): void {\n const _M = M;\n\n _M[offset] ^= this.generateKeystreamWord();\n }\n}\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n */\nexport const RC4: CipherObj = StreamCipher._createHelper(RC4Algo);\n\n/**\n * Modified RC4 stream cipher algorithm.\n */\nexport class RC4DropAlgo extends RC4Algo {\n declare cfg: RC4DropCfg;\n \n constructor(xformMode: number, key: WordArray, cfg?: RC4DropCfg) {\n super(xformMode, key, cfg);\n\n /**\n * Configuration options.\n *\n * @property {number} drop The number of keystream words to drop. Default 192\n */\n // Only set default drop if not provided in cfg\n if (this.cfg.drop === undefined) {\n this.cfg.drop = 192;\n }\n }\n\n protected _doReset(): void {\n super._doReset();\n\n // Drop\n const dropCount = this.cfg.drop || 192;\n for (let i = dropCount; i > 0; i -= 1) {\n this.generateKeystreamWord();\n }\n }\n}\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n */\nexport const RC4Drop: CipherObj = StreamCipher._createHelper(RC4DropAlgo);"],"mappings":";;;;;;AAeA,IAAa,UAAb,cAA6BA,iCAAa;CACxC,OAAO,UAAU,MAAM;CACvB,OAAO,SAAS;CAEhB,AAAU;CACV,AAAU;CACV,AAAU;CAEV,AAAU,wBAAgC;EAExC,MAAM,IAAI,KAAK;EACf,IAAI,IAAI,KAAK;EACb,IAAI,IAAI,KAAK;EAGb,IAAI,gBAAgB;AACpB,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,QAAK,IAAI,KAAK;AACd,QAAK,IAAI,EAAE,MAAM;GAGjB,MAAM,IAAI,EAAE;AACZ,KAAE,KAAK,EAAE;AACT,KAAE,KAAK;AAEP,oBAAiB,GAAG,EAAE,KAAK,EAAE,MAAM,QAAS,KAAK,IAAI;EACtD;AAGD,OAAK,KAAK;AACV,OAAK,KAAK;AAEV,SAAO;CACR;CAED,AAAU,WAAiB;EAEzB,MAAM,MAAM,KAAK;EACjB,MAAM,WAAW,IAAI;EACrB,MAAM,cAAc,IAAI;AAGxB,OAAK,KAAK,EAAE;EACZ,MAAM,IAAI,KAAK;AACf,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,EAC5B,GAAE,KAAK;AAIT,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;GACtC,MAAM,eAAe,IAAI;GACzB,MAAM,UAAW,SAAS,iBAAiB,OAAQ,KAAM,eAAe,IAAK,IAAM;AAEnF,QAAK,IAAI,EAAE,KAAK,WAAW;GAG3B,MAAM,IAAI,EAAE;AACZ,KAAE,KAAK,EAAE;AACT,KAAE,KAAK;EACR;AAGD,OAAK,KAAK;AACV,OAAK,KAAK,KAAK;CAChB;CAED,AAAU,gBAAgB,GAAa,QAAsB;EAC3D,MAAM,KAAK;AAEX,KAAG,WAAW,KAAK;CACpB;AACF;;;;;;;;;AAUD,MAAaC,MAAiBD,iCAAa,cAAc;;;;AAKzD,IAAa,cAAb,cAAiC,QAAQ;CAGvC,YAAY,WAAmB,KAAgB,KAAkB;AAC/D,QAAM,WAAW,KAAK;;;;;;AAQtB,MAAI,KAAK,IAAI,SAAS,OACpB,MAAK,IAAI,OAAO;CAEnB;CAED,AAAU,WAAiB;AACzB,QAAM;EAGN,MAAM,YAAY,KAAK,IAAI,QAAQ;AACnC,OAAK,IAAI,IAAI,WAAW,IAAI,GAAG,KAAK,EAClC,MAAK;CAER;AACF;;;;;;;;;AAUD,MAAaE,UAAqBF,iCAAa,cAAc"}