From cee51d551acb04ac602eaa9055c373324d064de1 Mon Sep 17 00:00:00 2001 From: Alba Mendez Date: Tue, 5 Jan 2021 22:00:14 +0100 Subject: [PATCH] add RC4 cipher --- README.md | 2 +- browser.js | 11 ++++++++++- package.json | 1 + test.js | 5 +++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3c0b157..38e681b 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,4 @@ browserify-cipher [![Build Status](https://travis-ci.org/crypto-browserify/browserify-cipher.svg)](https://travis-ci.org/crypto-browserify/browserify-cipher) Provides createCipher, createDecipher, createCipheriv, createDecipheriv and -getCiphers for the browserify. Includes AES and DES ciphers. +getCiphers for the browserify. Includes AES, DES and RC4 ciphers. diff --git a/browser.js b/browser.js index 444825b..cedbe6e 100644 --- a/browser.js +++ b/browser.js @@ -1,3 +1,4 @@ +var RC4 = require('browserify-rc4') var DES = require('browserify-des') var aes = require('browserify-aes/browser') var aesModes = require('browserify-aes/modes') @@ -14,6 +15,9 @@ function createCipher (suite, password) { } else if (desModes[suite]) { keyLen = desModes[suite].key * 8 ivLen = desModes[suite].iv + } else if (suite === 'rc4') { + keyLen = 16 + ivLen = 0 } else { throw new TypeError('invalid suite type') } @@ -32,6 +36,9 @@ function createDecipher (suite, password) { } else if (desModes[suite]) { keyLen = desModes[suite].key * 8 ivLen = desModes[suite].iv + } else if (suite === 'rc4') { + keyLen = 16 + ivLen = 0 } else { throw new TypeError('invalid suite type') } @@ -44,6 +51,7 @@ function createCipheriv (suite, key, iv) { suite = suite.toLowerCase() if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) + if (suite === 'rc4') return new RC4(key, iv) throw new TypeError('invalid suite type') } @@ -52,12 +60,13 @@ function createDecipheriv (suite, key, iv) { suite = suite.toLowerCase() if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) + if (suite === 'rc4') return new RC4(key, iv) throw new TypeError('invalid suite type') } function getCiphers () { - return Object.keys(desModes).concat(aes.getCiphers()) + return Object.keys(desModes).concat(aes.getCiphers()).concat(['rc4']) } exports.createCipher = exports.Cipher = createCipher diff --git a/package.json b/package.json index 9168754..2b6dbe2 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", + "browserify-rc4": "^1.0.0", "evp_bytestokey": "^1.0.0" }, "browser": "browser.js", diff --git a/test.js b/test.js index d4beaa0..ab1037f 100644 --- a/test.js +++ b/test.js @@ -53,3 +53,8 @@ Object.keys(desModes).forEach(function (modeName) { var mode = desModes[modeName] runIvTest(modeName, mode.key, mode.iv) }) + +// rc4 admits arbitrary key sizes +runIvTest('rc4', 3, 0) +runIvTest('rc4', 16, 0) +runIvTest('rc4', 27, 0)