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,149 @@
1
+ ;(function (root, factory) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./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 WordArray = C_lib.WordArray;
21
+ var C_enc = C.enc;
22
+
23
+ /**
24
+ * UTF-16 BE encoding strategy.
25
+ */
26
+ var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
27
+ /**
28
+ * Converts a word array to a UTF-16 BE string.
29
+ *
30
+ * @param {WordArray} wordArray The word array.
31
+ *
32
+ * @return {string} The UTF-16 BE string.
33
+ *
34
+ * @static
35
+ *
36
+ * @example
37
+ *
38
+ * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
39
+ */
40
+ stringify: function (wordArray) {
41
+ // Shortcuts
42
+ var words = wordArray.words;
43
+ var sigBytes = wordArray.sigBytes;
44
+
45
+ // Convert
46
+ var utf16Chars = [];
47
+ for (var i = 0; i < sigBytes; i += 2) {
48
+ var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;
49
+ utf16Chars.push(String.fromCharCode(codePoint));
50
+ }
51
+
52
+ return utf16Chars.join('');
53
+ },
54
+
55
+ /**
56
+ * Converts a UTF-16 BE string to a word array.
57
+ *
58
+ * @param {string} utf16Str The UTF-16 BE string.
59
+ *
60
+ * @return {WordArray} The word array.
61
+ *
62
+ * @static
63
+ *
64
+ * @example
65
+ *
66
+ * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
67
+ */
68
+ parse: function (utf16Str) {
69
+ // Shortcut
70
+ var utf16StrLength = utf16Str.length;
71
+
72
+ // Convert
73
+ var words = [];
74
+ for (var i = 0; i < utf16StrLength; i++) {
75
+ words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);
76
+ }
77
+
78
+ return WordArray.create(words, utf16StrLength * 2);
79
+ }
80
+ };
81
+
82
+ /**
83
+ * UTF-16 LE encoding strategy.
84
+ */
85
+ C_enc.Utf16LE = {
86
+ /**
87
+ * Converts a word array to a UTF-16 LE string.
88
+ *
89
+ * @param {WordArray} wordArray The word array.
90
+ *
91
+ * @return {string} The UTF-16 LE string.
92
+ *
93
+ * @static
94
+ *
95
+ * @example
96
+ *
97
+ * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
98
+ */
99
+ stringify: function (wordArray) {
100
+ // Shortcuts
101
+ var words = wordArray.words;
102
+ var sigBytes = wordArray.sigBytes;
103
+
104
+ // Convert
105
+ var utf16Chars = [];
106
+ for (var i = 0; i < sigBytes; i += 2) {
107
+ var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);
108
+ utf16Chars.push(String.fromCharCode(codePoint));
109
+ }
110
+
111
+ return utf16Chars.join('');
112
+ },
113
+
114
+ /**
115
+ * Converts a UTF-16 LE string to a word array.
116
+ *
117
+ * @param {string} utf16Str The UTF-16 LE string.
118
+ *
119
+ * @return {WordArray} The word array.
120
+ *
121
+ * @static
122
+ *
123
+ * @example
124
+ *
125
+ * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
126
+ */
127
+ parse: function (utf16Str) {
128
+ // Shortcut
129
+ var utf16StrLength = utf16Str.length;
130
+
131
+ // Convert
132
+ var words = [];
133
+ for (var i = 0; i < utf16StrLength; i++) {
134
+ words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));
135
+ }
136
+
137
+ return WordArray.create(words, utf16StrLength * 2);
138
+ }
139
+ };
140
+
141
+ function swapEndian(word) {
142
+ return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);
143
+ }
144
+ }());
145
+
146
+
147
+ return CryptoJS.enc.Utf16;
148
+
149
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.enc.Utf8;
17
+
18
+ }));
@@ -0,0 +1,134 @@
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 MD5 = C_algo.MD5;
24
+
25
+ /**
26
+ * This key derivation function is meant to conform with EVP_BytesToKey.
27
+ * www.openssl.org/docs/crypto/EVP_BytesToKey.html
28
+ */
29
+ var EvpKDF = C_algo.EvpKDF = 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 hash algorithm to use. Default: MD5
35
+ * @property {number} iterations The number of iterations to perform. Default: 1
36
+ */
37
+ cfg: Base.extend({
38
+ keySize: 128/32,
39
+ hasher: MD5,
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.EvpKDF.create();
51
+ * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });
52
+ * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });
53
+ */
54
+ init: function (cfg) {
55
+ this.cfg = this.cfg.extend(cfg);
56
+ },
57
+
58
+ /**
59
+ * Derives a key from a password.
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
+ var block;
72
+
73
+ // Shortcut
74
+ var cfg = this.cfg;
75
+
76
+ // Init hasher
77
+ var hasher = cfg.hasher.create();
78
+
79
+ // Initial values
80
+ var derivedKey = WordArray.create();
81
+
82
+ // Shortcuts
83
+ var derivedKeyWords = derivedKey.words;
84
+ var keySize = cfg.keySize;
85
+ var iterations = cfg.iterations;
86
+
87
+ // Generate key
88
+ while (derivedKeyWords.length < keySize) {
89
+ if (block) {
90
+ hasher.update(block);
91
+ }
92
+ block = hasher.update(password).finalize(salt);
93
+ hasher.reset();
94
+
95
+ // Iterations
96
+ for (var i = 1; i < iterations; i++) {
97
+ block = hasher.finalize(block);
98
+ hasher.reset();
99
+ }
100
+
101
+ derivedKey.concat(block);
102
+ }
103
+ derivedKey.sigBytes = keySize * 4;
104
+
105
+ return derivedKey;
106
+ }
107
+ });
108
+
109
+ /**
110
+ * Derives a key from a password.
111
+ *
112
+ * @param {WordArray|string} password The password.
113
+ * @param {WordArray|string} salt A salt.
114
+ * @param {Object} cfg (Optional) The configuration options to use for this computation.
115
+ *
116
+ * @return {WordArray} The derived key.
117
+ *
118
+ * @static
119
+ *
120
+ * @example
121
+ *
122
+ * var key = CryptoJS.EvpKDF(password, salt);
123
+ * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });
124
+ * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });
125
+ */
126
+ C.EvpKDF = function (password, salt, cfg) {
127
+ return EvpKDF.create(cfg).compute(password, salt);
128
+ };
129
+ }());
130
+
131
+
132
+ return CryptoJS.EvpKDF;
133
+
134
+ }));
@@ -0,0 +1,66 @@
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
+ (function (undefined) {
17
+ // Shortcuts
18
+ var C = CryptoJS;
19
+ var C_lib = C.lib;
20
+ var CipherParams = C_lib.CipherParams;
21
+ var C_enc = C.enc;
22
+ var Hex = C_enc.Hex;
23
+ var C_format = C.format;
24
+
25
+ var HexFormatter = C_format.Hex = {
26
+ /**
27
+ * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.
28
+ *
29
+ * @param {CipherParams} cipherParams The cipher params object.
30
+ *
31
+ * @return {string} The hexadecimally encoded string.
32
+ *
33
+ * @static
34
+ *
35
+ * @example
36
+ *
37
+ * var hexString = CryptoJS.format.Hex.stringify(cipherParams);
38
+ */
39
+ stringify: function (cipherParams) {
40
+ return cipherParams.ciphertext.toString(Hex);
41
+ },
42
+
43
+ /**
44
+ * Converts a hexadecimally encoded ciphertext string to a cipher params object.
45
+ *
46
+ * @param {string} input The hexadecimally encoded string.
47
+ *
48
+ * @return {CipherParams} The cipher params object.
49
+ *
50
+ * @static
51
+ *
52
+ * @example
53
+ *
54
+ * var cipherParams = CryptoJS.format.Hex.parse(hexString);
55
+ */
56
+ parse: function (input) {
57
+ var ciphertext = Hex.parse(input);
58
+ return CipherParams.create({ ciphertext: ciphertext });
59
+ }
60
+ };
61
+ }());
62
+
63
+
64
+ return CryptoJS.format.Hex;
65
+
66
+ }));
@@ -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.format.OpenSSL;
17
+
18
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./md5"), require("./hmac"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./md5", "./hmac"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.HmacMD5;
17
+
18
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./ripemd160"), require("./hmac"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./ripemd160", "./hmac"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.HmacRIPEMD160;
17
+
18
+ }));
@@ -0,0 +1,18 @@
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
+ return CryptoJS.HmacSHA1;
17
+
18
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./sha256"), require("./sha224"), require("./hmac"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./sha256", "./sha224", "./hmac"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.HmacSHA224;
17
+
18
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./sha256", "./hmac"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.HmacSHA256;
17
+
18
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha3"), require("./hmac"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./x64-core", "./sha3", "./hmac"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.HmacSHA3;
17
+
18
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./sha384"), require("./hmac"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./x64-core", "./sha512", "./sha384", "./hmac"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.HmacSHA384;
17
+
18
+ }));
@@ -0,0 +1,18 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./hmac"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./x64-core", "./sha512", "./hmac"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ return CryptoJS.HmacSHA512;
17
+
18
+ }));
@@ -0,0 +1,143 @@
1
+ ;(function (root, factory) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./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 Base = C_lib.Base;
21
+ var C_enc = C.enc;
22
+ var Utf8 = C_enc.Utf8;
23
+ var C_algo = C.algo;
24
+
25
+ /**
26
+ * HMAC algorithm.
27
+ */
28
+ var HMAC = C_algo.HMAC = Base.extend({
29
+ /**
30
+ * Initializes a newly created HMAC.
31
+ *
32
+ * @param {Hasher} hasher The hash algorithm to use.
33
+ * @param {WordArray|string} key The secret key.
34
+ *
35
+ * @example
36
+ *
37
+ * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
38
+ */
39
+ init: function (hasher, key) {
40
+ // Init hasher
41
+ hasher = this._hasher = new hasher.init();
42
+
43
+ // Convert string to WordArray, else assume WordArray already
44
+ if (typeof key == 'string') {
45
+ key = Utf8.parse(key);
46
+ }
47
+
48
+ // Shortcuts
49
+ var hasherBlockSize = hasher.blockSize;
50
+ var hasherBlockSizeBytes = hasherBlockSize * 4;
51
+
52
+ // Allow arbitrary length keys
53
+ if (key.sigBytes > hasherBlockSizeBytes) {
54
+ key = hasher.finalize(key);
55
+ }
56
+
57
+ // Clamp excess bits
58
+ key.clamp();
59
+
60
+ // Clone key for inner and outer pads
61
+ var oKey = this._oKey = key.clone();
62
+ var iKey = this._iKey = key.clone();
63
+
64
+ // Shortcuts
65
+ var oKeyWords = oKey.words;
66
+ var iKeyWords = iKey.words;
67
+
68
+ // XOR keys with pad constants
69
+ for (var i = 0; i < hasherBlockSize; i++) {
70
+ oKeyWords[i] ^= 0x5c5c5c5c;
71
+ iKeyWords[i] ^= 0x36363636;
72
+ }
73
+ oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
74
+
75
+ // Set initial values
76
+ this.reset();
77
+ },
78
+
79
+ /**
80
+ * Resets this HMAC to its initial state.
81
+ *
82
+ * @example
83
+ *
84
+ * hmacHasher.reset();
85
+ */
86
+ reset: function () {
87
+ // Shortcut
88
+ var hasher = this._hasher;
89
+
90
+ // Reset
91
+ hasher.reset();
92
+ hasher.update(this._iKey);
93
+ },
94
+
95
+ /**
96
+ * Updates this HMAC with a message.
97
+ *
98
+ * @param {WordArray|string} messageUpdate The message to append.
99
+ *
100
+ * @return {HMAC} This HMAC instance.
101
+ *
102
+ * @example
103
+ *
104
+ * hmacHasher.update('message');
105
+ * hmacHasher.update(wordArray);
106
+ */
107
+ update: function (messageUpdate) {
108
+ this._hasher.update(messageUpdate);
109
+
110
+ // Chainable
111
+ return this;
112
+ },
113
+
114
+ /**
115
+ * Finalizes the HMAC computation.
116
+ * Note that the finalize operation is effectively a destructive, read-once operation.
117
+ *
118
+ * @param {WordArray|string} messageUpdate (Optional) A final message update.
119
+ *
120
+ * @return {WordArray} The HMAC.
121
+ *
122
+ * @example
123
+ *
124
+ * var hmac = hmacHasher.finalize();
125
+ * var hmac = hmacHasher.finalize('message');
126
+ * var hmac = hmacHasher.finalize(wordArray);
127
+ */
128
+ finalize: function (messageUpdate) {
129
+ // Shortcut
130
+ var hasher = this._hasher;
131
+
132
+ // Compute HMAC
133
+ var innerHash = hasher.finalize(messageUpdate);
134
+ hasher.reset();
135
+ var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));
136
+
137
+ return hmac;
138
+ }
139
+ });
140
+ }());
141
+
142
+
143
+ }));