Skip to content

Commit 808f499

Browse files
committed
Merge branch 'release/4.2.0'
2 parents c755289 + d5af3ae commit 808f499

10 files changed

+988
-30
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,14 @@ console.log(decryptedData); // [{id: 1}, {id: 2}]
218218

219219
## Release notes
220220

221+
### 4.2.0
222+
223+
Change default hash algorithm and iteration's for PBKDF2 to prevent weak security by using the default configuration.
224+
225+
Custom KDF Hasher
226+
227+
Blowfish support
228+
221229
### 4.1.1
222230

223231
Fix module order in bundled release.

blowfish.js

+471
Large diffs are not rendered by default.

bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "crypto-js",
3-
"version": "4.1.1",
3+
"version": "4.2.0",
44
"description": "JavaScript library of crypto standards.",
55
"license": "MIT",
66
"homepage": "http://github.com/brix/crypto-js",

cipher-core.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -780,14 +780,19 @@
780780
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
781781
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
782782
*/
783-
execute: function (password, keySize, ivSize, salt) {
783+
execute: function (password, keySize, ivSize, salt, hasher) {
784784
// Generate random salt
785785
if (!salt) {
786786
salt = WordArray.random(64/8);
787787
}
788788

789789
// Derive key and IV
790-
var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
790+
if (!hasher) {
791+
var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
792+
} else {
793+
var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);
794+
}
795+
791796

792797
// Separate key and IV
793798
var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);
@@ -834,7 +839,7 @@
834839
cfg = this.cfg.extend(cfg);
835840

836841
// Derive key and other params
837-
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);
842+
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);
838843

839844
// Add IV to config
840845
cfg.iv = derivedParams.iv;
@@ -873,7 +878,7 @@
873878
ciphertext = this._parse(ciphertext, cfg.format);
874879

875880
// Derive key and other params
876-
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);
881+
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);
877882

878883
// Add IV to config
879884
cfg.iv = derivedParams.iv;

crypto-js.js

+478-12
Large diffs are not rendered by default.

enc-base64url.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@
3939
*
4040
* var base64String = CryptoJS.enc.Base64url.stringify(wordArray);
4141
*/
42-
stringify: function (wordArray, urlSafe=true) {
42+
stringify: function (wordArray, urlSafe) {
43+
if (urlSafe === undefined) {
44+
urlSafe = true
45+
}
4346
// Shortcuts
4447
var words = wordArray.words;
4548
var sigBytes = wordArray.sigBytes;
@@ -88,7 +91,11 @@
8891
*
8992
* var wordArray = CryptoJS.enc.Base64url.parse(base64String);
9093
*/
91-
parse: function (base64Str, urlSafe=true) {
94+
parse: function (base64Str, urlSafe) {
95+
if (urlSafe === undefined) {
96+
urlSafe = true
97+
}
98+
9299
// Shortcuts
93100
var base64StrLength = base64Str.length;
94101
var map = urlSafe ? this._safe_map : this._map;
@@ -135,6 +142,7 @@
135142
}
136143
}());
137144

145+
138146
return CryptoJS.enc.Base64url;
139147

140148
}));

index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
;(function (root, factory, undef) {
22
if (typeof exports === "object") {
33
// CommonJS
4-
module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy"));
4+
module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy"), require("./blowfish"));
55
}
66
else if (typeof define === "function" && define.amd) {
77
// AMD
8-
define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory);
8+
define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy", "./blowfish"], factory);
99
}
1010
else {
1111
// Global (browser)

md5.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
var M_offset_14 = M[offset + 14];
7676
var M_offset_15 = M[offset + 15];
7777

78-
// Working varialbes
78+
// Working variables
7979
var a = H[0];
8080
var b = H[1];
8181
var c = H[2];

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "crypto-js",
3-
"version": "4.1.1",
3+
"version": "4.2.0",
44
"description": "JavaScript library of crypto standards.",
55
"license": "MIT",
66
"author": {

pbkdf2.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
;(function (root, factory, undef) {
22
if (typeof exports === "object") {
33
// CommonJS
4-
module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac"));
4+
module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac"));
55
}
66
else if (typeof define === "function" && define.amd) {
77
// AMD
8-
define(["./core", "./sha1", "./hmac"], factory);
8+
define(["./core", "./sha256", "./hmac"], factory);
99
}
1010
else {
1111
// Global (browser)
@@ -20,7 +20,7 @@
2020
var Base = C_lib.Base;
2121
var WordArray = C_lib.WordArray;
2222
var C_algo = C.algo;
23-
var SHA1 = C_algo.SHA1;
23+
var SHA256 = C_algo.SHA256;
2424
var HMAC = C_algo.HMAC;
2525

2626
/**
@@ -31,13 +31,13 @@
3131
* Configuration options.
3232
*
3333
* @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
34-
* @property {Hasher} hasher The hasher to use. Default: SHA1
35-
* @property {number} iterations The number of iterations to perform. Default: 1
34+
* @property {Hasher} hasher The hasher to use. Default: SHA256
35+
* @property {number} iterations The number of iterations to perform. Default: 250000
3636
*/
3737
cfg: Base.extend({
3838
keySize: 128/32,
39-
hasher: SHA1,
40-
iterations: 1
39+
hasher: SHA256,
40+
iterations: 250000
4141
}),
4242

4343
/**

0 commit comments

Comments
 (0)