spring-jekyll-theme 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +49 -0
  3. data/_includes/disqus.html +17 -0
  4. data/_includes/disqus_comments.html +20 -0
  5. data/_includes/footer.html +23 -0
  6. data/_includes/google-analytics.html +9 -0
  7. data/_includes/head.html +21 -0
  8. data/_includes/header.html +31 -0
  9. data/_includes/profile.html +21 -0
  10. data/_includes/social.html +19 -0
  11. data/_layouts/default.html +20 -0
  12. data/_layouts/home.html +34 -0
  13. data/_layouts/page.html +14 -0
  14. data/_layouts/post.html +43 -0
  15. data/_sass/spring/_base.scss +272 -0
  16. data/_sass/spring/_layout.scss +290 -0
  17. data/_sass/spring/_syntax-highlighting.scss +71 -0
  18. data/_sass/spring.scss +56 -0
  19. data/assets/3rd-party/crypto-js/CONTRIBUTING.md +28 -0
  20. data/assets/3rd-party/crypto-js/LICENSE +24 -0
  21. data/assets/3rd-party/crypto-js/README.md +249 -0
  22. data/assets/3rd-party/crypto-js/aes.js +234 -0
  23. data/assets/3rd-party/crypto-js/bower.json +35 -0
  24. data/assets/3rd-party/crypto-js/cipher-core.js +890 -0
  25. data/assets/3rd-party/crypto-js/core.js +797 -0
  26. data/assets/3rd-party/crypto-js/crypto-js.js +6059 -0
  27. data/assets/3rd-party/crypto-js/docs/QuickStartGuide.wiki +470 -0
  28. data/assets/3rd-party/crypto-js/enc-base64.js +136 -0
  29. data/assets/3rd-party/crypto-js/enc-hex.js +18 -0
  30. data/assets/3rd-party/crypto-js/enc-latin1.js +18 -0
  31. data/assets/3rd-party/crypto-js/enc-utf16.js +149 -0
  32. data/assets/3rd-party/crypto-js/enc-utf8.js +18 -0
  33. data/assets/3rd-party/crypto-js/evpkdf.js +134 -0
  34. data/assets/3rd-party/crypto-js/format-hex.js +66 -0
  35. data/assets/3rd-party/crypto-js/format-openssl.js +18 -0
  36. data/assets/3rd-party/crypto-js/hmac-md5.js +18 -0
  37. data/assets/3rd-party/crypto-js/hmac-ripemd160.js +18 -0
  38. data/assets/3rd-party/crypto-js/hmac-sha1.js +18 -0
  39. data/assets/3rd-party/crypto-js/hmac-sha224.js +18 -0
  40. data/assets/3rd-party/crypto-js/hmac-sha256.js +18 -0
  41. data/assets/3rd-party/crypto-js/hmac-sha3.js +18 -0
  42. data/assets/3rd-party/crypto-js/hmac-sha384.js +18 -0
  43. data/assets/3rd-party/crypto-js/hmac-sha512.js +18 -0
  44. data/assets/3rd-party/crypto-js/hmac.js +143 -0
  45. data/assets/3rd-party/crypto-js/index.js +18 -0
  46. data/assets/3rd-party/crypto-js/lib-typedarrays.js +76 -0
  47. data/assets/3rd-party/crypto-js/md5.js +268 -0
  48. data/assets/3rd-party/crypto-js/mode-cfb.js +80 -0
  49. data/assets/3rd-party/crypto-js/mode-ctr-gladman.js +116 -0
  50. data/assets/3rd-party/crypto-js/mode-ctr.js +58 -0
  51. data/assets/3rd-party/crypto-js/mode-ecb.js +40 -0
  52. data/assets/3rd-party/crypto-js/mode-ofb.js +54 -0
  53. data/assets/3rd-party/crypto-js/package.json +66 -0
  54. data/assets/3rd-party/crypto-js/pad-ansix923.js +49 -0
  55. data/assets/3rd-party/crypto-js/pad-iso10126.js +44 -0
  56. data/assets/3rd-party/crypto-js/pad-iso97971.js +40 -0
  57. data/assets/3rd-party/crypto-js/pad-nopadding.js +30 -0
  58. data/assets/3rd-party/crypto-js/pad-pkcs7.js +18 -0
  59. data/assets/3rd-party/crypto-js/pad-zeropadding.js +47 -0
  60. data/assets/3rd-party/crypto-js/pbkdf2.js +145 -0
  61. data/assets/3rd-party/crypto-js/rabbit-legacy.js +190 -0
  62. data/assets/3rd-party/crypto-js/rabbit.js +192 -0
  63. data/assets/3rd-party/crypto-js/rc4.js +139 -0
  64. data/assets/3rd-party/crypto-js/ripemd160.js +267 -0
  65. data/assets/3rd-party/crypto-js/sha1.js +150 -0
  66. data/assets/3rd-party/crypto-js/sha224.js +80 -0
  67. data/assets/3rd-party/crypto-js/sha256.js +199 -0
  68. data/assets/3rd-party/crypto-js/sha3.js +326 -0
  69. data/assets/3rd-party/crypto-js/sha384.js +83 -0
  70. data/assets/3rd-party/crypto-js/sha512.js +326 -0
  71. data/assets/3rd-party/crypto-js/tripledes.js +779 -0
  72. data/assets/3rd-party/crypto-js/x64-core.js +304 -0
  73. data/assets/css/style.scss +5 -0
  74. data/assets/ecmascripts/index.js +25 -0
  75. data/assets/images/avatar.png +0 -0
  76. data/assets/images/background.jpg +0 -0
  77. data/assets/social-icons.svg +28 -0
  78. 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
+ }));