spring-jekyll-theme 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +49 -0
- data/_includes/disqus.html +17 -0
- data/_includes/disqus_comments.html +20 -0
- data/_includes/footer.html +23 -0
- data/_includes/google-analytics.html +9 -0
- data/_includes/head.html +21 -0
- data/_includes/header.html +31 -0
- data/_includes/profile.html +21 -0
- data/_includes/social.html +19 -0
- data/_layouts/default.html +20 -0
- data/_layouts/home.html +34 -0
- data/_layouts/page.html +14 -0
- data/_layouts/post.html +43 -0
- data/_sass/spring/_base.scss +272 -0
- data/_sass/spring/_layout.scss +290 -0
- data/_sass/spring/_syntax-highlighting.scss +71 -0
- data/_sass/spring.scss +56 -0
- data/assets/3rd-party/crypto-js/CONTRIBUTING.md +28 -0
- data/assets/3rd-party/crypto-js/LICENSE +24 -0
- data/assets/3rd-party/crypto-js/README.md +249 -0
- data/assets/3rd-party/crypto-js/aes.js +234 -0
- data/assets/3rd-party/crypto-js/bower.json +35 -0
- data/assets/3rd-party/crypto-js/cipher-core.js +890 -0
- data/assets/3rd-party/crypto-js/core.js +797 -0
- data/assets/3rd-party/crypto-js/crypto-js.js +6059 -0
- data/assets/3rd-party/crypto-js/docs/QuickStartGuide.wiki +470 -0
- data/assets/3rd-party/crypto-js/enc-base64.js +136 -0
- data/assets/3rd-party/crypto-js/enc-hex.js +18 -0
- data/assets/3rd-party/crypto-js/enc-latin1.js +18 -0
- data/assets/3rd-party/crypto-js/enc-utf16.js +149 -0
- data/assets/3rd-party/crypto-js/enc-utf8.js +18 -0
- data/assets/3rd-party/crypto-js/evpkdf.js +134 -0
- data/assets/3rd-party/crypto-js/format-hex.js +66 -0
- data/assets/3rd-party/crypto-js/format-openssl.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-md5.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-ripemd160.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-sha1.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-sha224.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-sha256.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-sha3.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-sha384.js +18 -0
- data/assets/3rd-party/crypto-js/hmac-sha512.js +18 -0
- data/assets/3rd-party/crypto-js/hmac.js +143 -0
- data/assets/3rd-party/crypto-js/index.js +18 -0
- data/assets/3rd-party/crypto-js/lib-typedarrays.js +76 -0
- data/assets/3rd-party/crypto-js/md5.js +268 -0
- data/assets/3rd-party/crypto-js/mode-cfb.js +80 -0
- data/assets/3rd-party/crypto-js/mode-ctr-gladman.js +116 -0
- data/assets/3rd-party/crypto-js/mode-ctr.js +58 -0
- data/assets/3rd-party/crypto-js/mode-ecb.js +40 -0
- data/assets/3rd-party/crypto-js/mode-ofb.js +54 -0
- data/assets/3rd-party/crypto-js/package.json +66 -0
- data/assets/3rd-party/crypto-js/pad-ansix923.js +49 -0
- data/assets/3rd-party/crypto-js/pad-iso10126.js +44 -0
- data/assets/3rd-party/crypto-js/pad-iso97971.js +40 -0
- data/assets/3rd-party/crypto-js/pad-nopadding.js +30 -0
- data/assets/3rd-party/crypto-js/pad-pkcs7.js +18 -0
- data/assets/3rd-party/crypto-js/pad-zeropadding.js +47 -0
- data/assets/3rd-party/crypto-js/pbkdf2.js +145 -0
- data/assets/3rd-party/crypto-js/rabbit-legacy.js +190 -0
- data/assets/3rd-party/crypto-js/rabbit.js +192 -0
- data/assets/3rd-party/crypto-js/rc4.js +139 -0
- data/assets/3rd-party/crypto-js/ripemd160.js +267 -0
- data/assets/3rd-party/crypto-js/sha1.js +150 -0
- data/assets/3rd-party/crypto-js/sha224.js +80 -0
- data/assets/3rd-party/crypto-js/sha256.js +199 -0
- data/assets/3rd-party/crypto-js/sha3.js +326 -0
- data/assets/3rd-party/crypto-js/sha384.js +83 -0
- data/assets/3rd-party/crypto-js/sha512.js +326 -0
- data/assets/3rd-party/crypto-js/tripledes.js +779 -0
- data/assets/3rd-party/crypto-js/x64-core.js +304 -0
- data/assets/css/style.scss +5 -0
- data/assets/ecmascripts/index.js +25 -0
- data/assets/images/avatar.png +0 -0
- data/assets/images/background.jpg +0 -0
- data/assets/social-icons.svg +28 -0
- metadata +176 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Output Feedback block mode.
|
18
|
+
*/
|
19
|
+
CryptoJS.mode.OFB = (function () {
|
20
|
+
var OFB = CryptoJS.lib.BlockCipherMode.extend();
|
21
|
+
|
22
|
+
var Encryptor = OFB.Encryptor = OFB.extend({
|
23
|
+
processBlock: function (words, offset) {
|
24
|
+
// Shortcuts
|
25
|
+
var cipher = this._cipher
|
26
|
+
var blockSize = cipher.blockSize;
|
27
|
+
var iv = this._iv;
|
28
|
+
var keystream = this._keystream;
|
29
|
+
|
30
|
+
// Generate keystream
|
31
|
+
if (iv) {
|
32
|
+
keystream = this._keystream = iv.slice(0);
|
33
|
+
|
34
|
+
// Remove IV for subsequent blocks
|
35
|
+
this._iv = undefined;
|
36
|
+
}
|
37
|
+
cipher.encryptBlock(keystream, 0);
|
38
|
+
|
39
|
+
// Encrypt
|
40
|
+
for (var i = 0; i < blockSize; i++) {
|
41
|
+
words[offset + i] ^= keystream[i];
|
42
|
+
}
|
43
|
+
}
|
44
|
+
});
|
45
|
+
|
46
|
+
OFB.Decryptor = Encryptor;
|
47
|
+
|
48
|
+
return OFB;
|
49
|
+
}());
|
50
|
+
|
51
|
+
|
52
|
+
return CryptoJS.mode.OFB;
|
53
|
+
|
54
|
+
}));
|
@@ -0,0 +1,66 @@
|
|
1
|
+
{
|
2
|
+
"_from": "crypto-js",
|
3
|
+
"_id": "crypto-js@4.0.0",
|
4
|
+
"_inBundle": false,
|
5
|
+
"_integrity": "sha1-KQSrJnep0EKFai6i74DekuSjbcw=",
|
6
|
+
"_location": "/crypto-js",
|
7
|
+
"_phantomChildren": {},
|
8
|
+
"_requested": {
|
9
|
+
"type": "tag",
|
10
|
+
"registry": true,
|
11
|
+
"raw": "crypto-js",
|
12
|
+
"name": "crypto-js",
|
13
|
+
"escapedName": "crypto-js",
|
14
|
+
"rawSpec": "",
|
15
|
+
"saveSpec": null,
|
16
|
+
"fetchSpec": "latest"
|
17
|
+
},
|
18
|
+
"_requiredBy": [
|
19
|
+
"#USER"
|
20
|
+
],
|
21
|
+
"_resolved": "https://registry.nlark.com/crypto-js/download/crypto-js-4.0.0.tgz",
|
22
|
+
"_shasum": "2904ab2677a9d042856a2ea2ef80de92e4a36dcc",
|
23
|
+
"_spec": "crypto-js",
|
24
|
+
"_where": "E:\\git\\cbtpro.github.io",
|
25
|
+
"author": {
|
26
|
+
"name": "Evan Vosberg",
|
27
|
+
"url": "http://github.com/evanvosberg"
|
28
|
+
},
|
29
|
+
"bugs": {
|
30
|
+
"url": "https://github.com/brix/crypto-js/issues"
|
31
|
+
},
|
32
|
+
"bundleDependencies": false,
|
33
|
+
"dependencies": {},
|
34
|
+
"deprecated": false,
|
35
|
+
"description": "JavaScript library of crypto standards.",
|
36
|
+
"homepage": "http://github.com/brix/crypto-js",
|
37
|
+
"keywords": [
|
38
|
+
"security",
|
39
|
+
"crypto",
|
40
|
+
"Hash",
|
41
|
+
"MD5",
|
42
|
+
"SHA1",
|
43
|
+
"SHA-1",
|
44
|
+
"SHA256",
|
45
|
+
"SHA-256",
|
46
|
+
"RC4",
|
47
|
+
"Rabbit",
|
48
|
+
"AES",
|
49
|
+
"DES",
|
50
|
+
"PBKDF2",
|
51
|
+
"HMAC",
|
52
|
+
"OFB",
|
53
|
+
"CFB",
|
54
|
+
"CTR",
|
55
|
+
"CBC",
|
56
|
+
"Base64"
|
57
|
+
],
|
58
|
+
"license": "MIT",
|
59
|
+
"main": "index.js",
|
60
|
+
"name": "crypto-js",
|
61
|
+
"repository": {
|
62
|
+
"type": "git",
|
63
|
+
"url": "git+ssh://git@github.com/brix/crypto-js.git"
|
64
|
+
},
|
65
|
+
"version": "4.0.0"
|
66
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* ANSI X.923 padding strategy.
|
18
|
+
*/
|
19
|
+
CryptoJS.pad.AnsiX923 = {
|
20
|
+
pad: function (data, blockSize) {
|
21
|
+
// Shortcuts
|
22
|
+
var dataSigBytes = data.sigBytes;
|
23
|
+
var blockSizeBytes = blockSize * 4;
|
24
|
+
|
25
|
+
// Count padding bytes
|
26
|
+
var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;
|
27
|
+
|
28
|
+
// Compute last byte position
|
29
|
+
var lastBytePos = dataSigBytes + nPaddingBytes - 1;
|
30
|
+
|
31
|
+
// Pad
|
32
|
+
data.clamp();
|
33
|
+
data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);
|
34
|
+
data.sigBytes += nPaddingBytes;
|
35
|
+
},
|
36
|
+
|
37
|
+
unpad: function (data) {
|
38
|
+
// Get number of padding bytes from last byte
|
39
|
+
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
|
40
|
+
|
41
|
+
// Remove padding
|
42
|
+
data.sigBytes -= nPaddingBytes;
|
43
|
+
}
|
44
|
+
};
|
45
|
+
|
46
|
+
|
47
|
+
return CryptoJS.pad.Ansix923;
|
48
|
+
|
49
|
+
}));
|
@@ -0,0 +1,44 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* ISO 10126 padding strategy.
|
18
|
+
*/
|
19
|
+
CryptoJS.pad.Iso10126 = {
|
20
|
+
pad: function (data, blockSize) {
|
21
|
+
// Shortcut
|
22
|
+
var blockSizeBytes = blockSize * 4;
|
23
|
+
|
24
|
+
// Count padding bytes
|
25
|
+
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
|
26
|
+
|
27
|
+
// Pad
|
28
|
+
data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).
|
29
|
+
concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));
|
30
|
+
},
|
31
|
+
|
32
|
+
unpad: function (data) {
|
33
|
+
// Get number of padding bytes from last byte
|
34
|
+
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
|
35
|
+
|
36
|
+
// Remove padding
|
37
|
+
data.sigBytes -= nPaddingBytes;
|
38
|
+
}
|
39
|
+
};
|
40
|
+
|
41
|
+
|
42
|
+
return CryptoJS.pad.Iso10126;
|
43
|
+
|
44
|
+
}));
|
@@ -0,0 +1,40 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* ISO/IEC 9797-1 Padding Method 2.
|
18
|
+
*/
|
19
|
+
CryptoJS.pad.Iso97971 = {
|
20
|
+
pad: function (data, blockSize) {
|
21
|
+
// Add 0x80 byte
|
22
|
+
data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));
|
23
|
+
|
24
|
+
// Zero pad the rest
|
25
|
+
CryptoJS.pad.ZeroPadding.pad(data, blockSize);
|
26
|
+
},
|
27
|
+
|
28
|
+
unpad: function (data) {
|
29
|
+
// Remove zero padding
|
30
|
+
CryptoJS.pad.ZeroPadding.unpad(data);
|
31
|
+
|
32
|
+
// Remove one more byte -- the 0x80 byte
|
33
|
+
data.sigBytes--;
|
34
|
+
}
|
35
|
+
};
|
36
|
+
|
37
|
+
|
38
|
+
return CryptoJS.pad.Iso97971;
|
39
|
+
|
40
|
+
}));
|
@@ -0,0 +1,30 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* A noop padding strategy.
|
18
|
+
*/
|
19
|
+
CryptoJS.pad.NoPadding = {
|
20
|
+
pad: function () {
|
21
|
+
},
|
22
|
+
|
23
|
+
unpad: function () {
|
24
|
+
}
|
25
|
+
};
|
26
|
+
|
27
|
+
|
28
|
+
return CryptoJS.pad.NoPadding;
|
29
|
+
|
30
|
+
}));
|
@@ -0,0 +1,18 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
return CryptoJS.pad.Pkcs7;
|
17
|
+
|
18
|
+
}));
|
@@ -0,0 +1,47 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Zero padding strategy.
|
18
|
+
*/
|
19
|
+
CryptoJS.pad.ZeroPadding = {
|
20
|
+
pad: function (data, blockSize) {
|
21
|
+
// Shortcut
|
22
|
+
var blockSizeBytes = blockSize * 4;
|
23
|
+
|
24
|
+
// Pad
|
25
|
+
data.clamp();
|
26
|
+
data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
|
27
|
+
},
|
28
|
+
|
29
|
+
unpad: function (data) {
|
30
|
+
// Shortcut
|
31
|
+
var dataWords = data.words;
|
32
|
+
|
33
|
+
// Unpad
|
34
|
+
var i = data.sigBytes - 1;
|
35
|
+
for (var i = data.sigBytes - 1; i >= 0; i--) {
|
36
|
+
if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
|
37
|
+
data.sigBytes = i + 1;
|
38
|
+
break;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
};
|
43
|
+
|
44
|
+
|
45
|
+
return CryptoJS.pad.ZeroPadding;
|
46
|
+
|
47
|
+
}));
|
@@ -0,0 +1,145 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./sha1", "./hmac"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
(function () {
|
17
|
+
// Shortcuts
|
18
|
+
var C = CryptoJS;
|
19
|
+
var C_lib = C.lib;
|
20
|
+
var Base = C_lib.Base;
|
21
|
+
var WordArray = C_lib.WordArray;
|
22
|
+
var C_algo = C.algo;
|
23
|
+
var SHA1 = C_algo.SHA1;
|
24
|
+
var HMAC = C_algo.HMAC;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Password-Based Key Derivation Function 2 algorithm.
|
28
|
+
*/
|
29
|
+
var PBKDF2 = C_algo.PBKDF2 = Base.extend({
|
30
|
+
/**
|
31
|
+
* Configuration options.
|
32
|
+
*
|
33
|
+
* @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
|
36
|
+
*/
|
37
|
+
cfg: Base.extend({
|
38
|
+
keySize: 128/32,
|
39
|
+
hasher: SHA1,
|
40
|
+
iterations: 1
|
41
|
+
}),
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Initializes a newly created key derivation function.
|
45
|
+
*
|
46
|
+
* @param {Object} cfg (Optional) The configuration options to use for the derivation.
|
47
|
+
*
|
48
|
+
* @example
|
49
|
+
*
|
50
|
+
* var kdf = CryptoJS.algo.PBKDF2.create();
|
51
|
+
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });
|
52
|
+
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });
|
53
|
+
*/
|
54
|
+
init: function (cfg) {
|
55
|
+
this.cfg = this.cfg.extend(cfg);
|
56
|
+
},
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Computes the Password-Based Key Derivation Function 2.
|
60
|
+
*
|
61
|
+
* @param {WordArray|string} password The password.
|
62
|
+
* @param {WordArray|string} salt A salt.
|
63
|
+
*
|
64
|
+
* @return {WordArray} The derived key.
|
65
|
+
*
|
66
|
+
* @example
|
67
|
+
*
|
68
|
+
* var key = kdf.compute(password, salt);
|
69
|
+
*/
|
70
|
+
compute: function (password, salt) {
|
71
|
+
// Shortcut
|
72
|
+
var cfg = this.cfg;
|
73
|
+
|
74
|
+
// Init HMAC
|
75
|
+
var hmac = HMAC.create(cfg.hasher, password);
|
76
|
+
|
77
|
+
// Initial values
|
78
|
+
var derivedKey = WordArray.create();
|
79
|
+
var blockIndex = WordArray.create([0x00000001]);
|
80
|
+
|
81
|
+
// Shortcuts
|
82
|
+
var derivedKeyWords = derivedKey.words;
|
83
|
+
var blockIndexWords = blockIndex.words;
|
84
|
+
var keySize = cfg.keySize;
|
85
|
+
var iterations = cfg.iterations;
|
86
|
+
|
87
|
+
// Generate key
|
88
|
+
while (derivedKeyWords.length < keySize) {
|
89
|
+
var block = hmac.update(salt).finalize(blockIndex);
|
90
|
+
hmac.reset();
|
91
|
+
|
92
|
+
// Shortcuts
|
93
|
+
var blockWords = block.words;
|
94
|
+
var blockWordsLength = blockWords.length;
|
95
|
+
|
96
|
+
// Iterations
|
97
|
+
var intermediate = block;
|
98
|
+
for (var i = 1; i < iterations; i++) {
|
99
|
+
intermediate = hmac.finalize(intermediate);
|
100
|
+
hmac.reset();
|
101
|
+
|
102
|
+
// Shortcut
|
103
|
+
var intermediateWords = intermediate.words;
|
104
|
+
|
105
|
+
// XOR intermediate with block
|
106
|
+
for (var j = 0; j < blockWordsLength; j++) {
|
107
|
+
blockWords[j] ^= intermediateWords[j];
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
derivedKey.concat(block);
|
112
|
+
blockIndexWords[0]++;
|
113
|
+
}
|
114
|
+
derivedKey.sigBytes = keySize * 4;
|
115
|
+
|
116
|
+
return derivedKey;
|
117
|
+
}
|
118
|
+
});
|
119
|
+
|
120
|
+
/**
|
121
|
+
* Computes the Password-Based Key Derivation Function 2.
|
122
|
+
*
|
123
|
+
* @param {WordArray|string} password The password.
|
124
|
+
* @param {WordArray|string} salt A salt.
|
125
|
+
* @param {Object} cfg (Optional) The configuration options to use for this computation.
|
126
|
+
*
|
127
|
+
* @return {WordArray} The derived key.
|
128
|
+
*
|
129
|
+
* @static
|
130
|
+
*
|
131
|
+
* @example
|
132
|
+
*
|
133
|
+
* var key = CryptoJS.PBKDF2(password, salt);
|
134
|
+
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });
|
135
|
+
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });
|
136
|
+
*/
|
137
|
+
C.PBKDF2 = function (password, salt, cfg) {
|
138
|
+
return PBKDF2.create(cfg).compute(password, salt);
|
139
|
+
};
|
140
|
+
}());
|
141
|
+
|
142
|
+
|
143
|
+
return CryptoJS.PBKDF2;
|
144
|
+
|
145
|
+
}));
|
@@ -0,0 +1,190 @@
|
|
1
|
+
;(function (root, factory, undef) {
|
2
|
+
if (typeof exports === "object") {
|
3
|
+
// CommonJS
|
4
|
+
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
|
5
|
+
}
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
|
9
|
+
}
|
10
|
+
else {
|
11
|
+
// Global (browser)
|
12
|
+
factory(root.CryptoJS);
|
13
|
+
}
|
14
|
+
}(this, function (CryptoJS) {
|
15
|
+
|
16
|
+
(function () {
|
17
|
+
// Shortcuts
|
18
|
+
var C = CryptoJS;
|
19
|
+
var C_lib = C.lib;
|
20
|
+
var StreamCipher = C_lib.StreamCipher;
|
21
|
+
var C_algo = C.algo;
|
22
|
+
|
23
|
+
// Reusable objects
|
24
|
+
var S = [];
|
25
|
+
var C_ = [];
|
26
|
+
var G = [];
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Rabbit stream cipher algorithm.
|
30
|
+
*
|
31
|
+
* This is a legacy version that neglected to convert the key to little-endian.
|
32
|
+
* This error doesn't affect the cipher's security,
|
33
|
+
* but it does affect its compatibility with other implementations.
|
34
|
+
*/
|
35
|
+
var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
|
36
|
+
_doReset: function () {
|
37
|
+
// Shortcuts
|
38
|
+
var K = this._key.words;
|
39
|
+
var iv = this.cfg.iv;
|
40
|
+
|
41
|
+
// Generate initial state values
|
42
|
+
var X = this._X = [
|
43
|
+
K[0], (K[3] << 16) | (K[2] >>> 16),
|
44
|
+
K[1], (K[0] << 16) | (K[3] >>> 16),
|
45
|
+
K[2], (K[1] << 16) | (K[0] >>> 16),
|
46
|
+
K[3], (K[2] << 16) | (K[1] >>> 16)
|
47
|
+
];
|
48
|
+
|
49
|
+
// Generate initial counter values
|
50
|
+
var C = this._C = [
|
51
|
+
(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
|
52
|
+
(K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
|
53
|
+
(K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
|
54
|
+
(K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
|
55
|
+
];
|
56
|
+
|
57
|
+
// Carry bit
|
58
|
+
this._b = 0;
|
59
|
+
|
60
|
+
// Iterate the system four times
|
61
|
+
for (var i = 0; i < 4; i++) {
|
62
|
+
nextState.call(this);
|
63
|
+
}
|
64
|
+
|
65
|
+
// Modify the counters
|
66
|
+
for (var i = 0; i < 8; i++) {
|
67
|
+
C[i] ^= X[(i + 4) & 7];
|
68
|
+
}
|
69
|
+
|
70
|
+
// IV setup
|
71
|
+
if (iv) {
|
72
|
+
// Shortcuts
|
73
|
+
var IV = iv.words;
|
74
|
+
var IV_0 = IV[0];
|
75
|
+
var IV_1 = IV[1];
|
76
|
+
|
77
|
+
// Generate four subvectors
|
78
|
+
var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
|
79
|
+
var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
|
80
|
+
var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
|
81
|
+
var i3 = (i2 << 16) | (i0 & 0x0000ffff);
|
82
|
+
|
83
|
+
// Modify counter values
|
84
|
+
C[0] ^= i0;
|
85
|
+
C[1] ^= i1;
|
86
|
+
C[2] ^= i2;
|
87
|
+
C[3] ^= i3;
|
88
|
+
C[4] ^= i0;
|
89
|
+
C[5] ^= i1;
|
90
|
+
C[6] ^= i2;
|
91
|
+
C[7] ^= i3;
|
92
|
+
|
93
|
+
// Iterate the system four times
|
94
|
+
for (var i = 0; i < 4; i++) {
|
95
|
+
nextState.call(this);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
},
|
99
|
+
|
100
|
+
_doProcessBlock: function (M, offset) {
|
101
|
+
// Shortcut
|
102
|
+
var X = this._X;
|
103
|
+
|
104
|
+
// Iterate the system
|
105
|
+
nextState.call(this);
|
106
|
+
|
107
|
+
// Generate four keystream words
|
108
|
+
S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
|
109
|
+
S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
|
110
|
+
S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
|
111
|
+
S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
|
112
|
+
|
113
|
+
for (var i = 0; i < 4; i++) {
|
114
|
+
// Swap endian
|
115
|
+
S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
|
116
|
+
(((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
|
117
|
+
|
118
|
+
// Encrypt
|
119
|
+
M[offset + i] ^= S[i];
|
120
|
+
}
|
121
|
+
},
|
122
|
+
|
123
|
+
blockSize: 128/32,
|
124
|
+
|
125
|
+
ivSize: 64/32
|
126
|
+
});
|
127
|
+
|
128
|
+
function nextState() {
|
129
|
+
// Shortcuts
|
130
|
+
var X = this._X;
|
131
|
+
var C = this._C;
|
132
|
+
|
133
|
+
// Save old counter values
|
134
|
+
for (var i = 0; i < 8; i++) {
|
135
|
+
C_[i] = C[i];
|
136
|
+
}
|
137
|
+
|
138
|
+
// Calculate new counter values
|
139
|
+
C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
|
140
|
+
C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
|
141
|
+
C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
|
142
|
+
C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
|
143
|
+
C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
|
144
|
+
C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
|
145
|
+
C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
|
146
|
+
C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
|
147
|
+
this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
|
148
|
+
|
149
|
+
// Calculate the g-values
|
150
|
+
for (var i = 0; i < 8; i++) {
|
151
|
+
var gx = X[i] + C[i];
|
152
|
+
|
153
|
+
// Construct high and low argument for squaring
|
154
|
+
var ga = gx & 0xffff;
|
155
|
+
var gb = gx >>> 16;
|
156
|
+
|
157
|
+
// Calculate high and low result of squaring
|
158
|
+
var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
|
159
|
+
var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
|
160
|
+
|
161
|
+
// High XOR low
|
162
|
+
G[i] = gh ^ gl;
|
163
|
+
}
|
164
|
+
|
165
|
+
// Calculate new state values
|
166
|
+
X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
|
167
|
+
X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
|
168
|
+
X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
|
169
|
+
X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
|
170
|
+
X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
|
171
|
+
X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
|
172
|
+
X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
|
173
|
+
X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
|
174
|
+
}
|
175
|
+
|
176
|
+
/**
|
177
|
+
* Shortcut functions to the cipher's object interface.
|
178
|
+
*
|
179
|
+
* @example
|
180
|
+
*
|
181
|
+
* var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);
|
182
|
+
* var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);
|
183
|
+
*/
|
184
|
+
C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);
|
185
|
+
}());
|
186
|
+
|
187
|
+
|
188
|
+
return CryptoJS.RabbitLegacy;
|
189
|
+
|
190
|
+
}));
|