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,797 @@
1
+ ;(function (root, factory) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory();
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define([], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ root.CryptoJS = factory();
13
+ }
14
+ }(this, function () {
15
+
16
+ /*globals window, global, require*/
17
+
18
+ /**
19
+ * CryptoJS core components.
20
+ */
21
+ var CryptoJS = CryptoJS || (function (Math, undefined) {
22
+
23
+ var crypto;
24
+
25
+ // Native crypto from window (Browser)
26
+ if (typeof window !== 'undefined' && window.crypto) {
27
+ crypto = window.crypto;
28
+ }
29
+
30
+ // Native (experimental IE 11) crypto from window (Browser)
31
+ if (!crypto && typeof window !== 'undefined' && window.msCrypto) {
32
+ crypto = window.msCrypto;
33
+ }
34
+
35
+ // Native crypto from global (NodeJS)
36
+ if (!crypto && typeof global !== 'undefined' && global.crypto) {
37
+ crypto = global.crypto;
38
+ }
39
+
40
+ // Native crypto import via require (NodeJS)
41
+ if (!crypto && typeof require === 'function') {
42
+ try {
43
+ crypto = require('crypto');
44
+ } catch (err) {}
45
+ }
46
+
47
+ /*
48
+ * Cryptographically secure pseudorandom number generator
49
+ *
50
+ * As Math.random() is cryptographically not safe to use
51
+ */
52
+ var cryptoSecureRandomInt = function () {
53
+ if (crypto) {
54
+ // Use getRandomValues method (Browser)
55
+ if (typeof crypto.getRandomValues === 'function') {
56
+ try {
57
+ return crypto.getRandomValues(new Uint32Array(1))[0];
58
+ } catch (err) {}
59
+ }
60
+
61
+ // Use randomBytes method (NodeJS)
62
+ if (typeof crypto.randomBytes === 'function') {
63
+ try {
64
+ return crypto.randomBytes(4).readInt32LE();
65
+ } catch (err) {}
66
+ }
67
+ }
68
+
69
+ throw new Error('Native crypto module could not be used to get secure random number.');
70
+ };
71
+
72
+ /*
73
+ * Local polyfill of Object.create
74
+
75
+ */
76
+ var create = Object.create || (function () {
77
+ function F() {}
78
+
79
+ return function (obj) {
80
+ var subtype;
81
+
82
+ F.prototype = obj;
83
+
84
+ subtype = new F();
85
+
86
+ F.prototype = null;
87
+
88
+ return subtype;
89
+ };
90
+ }())
91
+
92
+ /**
93
+ * CryptoJS namespace.
94
+ */
95
+ var C = {};
96
+
97
+ /**
98
+ * Library namespace.
99
+ */
100
+ var C_lib = C.lib = {};
101
+
102
+ /**
103
+ * Base object for prototypal inheritance.
104
+ */
105
+ var Base = C_lib.Base = (function () {
106
+
107
+
108
+ return {
109
+ /**
110
+ * Creates a new object that inherits from this object.
111
+ *
112
+ * @param {Object} overrides Properties to copy into the new object.
113
+ *
114
+ * @return {Object} The new object.
115
+ *
116
+ * @static
117
+ *
118
+ * @example
119
+ *
120
+ * var MyType = CryptoJS.lib.Base.extend({
121
+ * field: 'value',
122
+ *
123
+ * method: function () {
124
+ * }
125
+ * });
126
+ */
127
+ extend: function (overrides) {
128
+ // Spawn
129
+ var subtype = create(this);
130
+
131
+ // Augment
132
+ if (overrides) {
133
+ subtype.mixIn(overrides);
134
+ }
135
+
136
+ // Create default initializer
137
+ if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
138
+ subtype.init = function () {
139
+ subtype.$super.init.apply(this, arguments);
140
+ };
141
+ }
142
+
143
+ // Initializer's prototype is the subtype object
144
+ subtype.init.prototype = subtype;
145
+
146
+ // Reference supertype
147
+ subtype.$super = this;
148
+
149
+ return subtype;
150
+ },
151
+
152
+ /**
153
+ * Extends this object and runs the init method.
154
+ * Arguments to create() will be passed to init().
155
+ *
156
+ * @return {Object} The new object.
157
+ *
158
+ * @static
159
+ *
160
+ * @example
161
+ *
162
+ * var instance = MyType.create();
163
+ */
164
+ create: function () {
165
+ var instance = this.extend();
166
+ instance.init.apply(instance, arguments);
167
+
168
+ return instance;
169
+ },
170
+
171
+ /**
172
+ * Initializes a newly created object.
173
+ * Override this method to add some logic when your objects are created.
174
+ *
175
+ * @example
176
+ *
177
+ * var MyType = CryptoJS.lib.Base.extend({
178
+ * init: function () {
179
+ * // ...
180
+ * }
181
+ * });
182
+ */
183
+ init: function () {
184
+ },
185
+
186
+ /**
187
+ * Copies properties into this object.
188
+ *
189
+ * @param {Object} properties The properties to mix in.
190
+ *
191
+ * @example
192
+ *
193
+ * MyType.mixIn({
194
+ * field: 'value'
195
+ * });
196
+ */
197
+ mixIn: function (properties) {
198
+ for (var propertyName in properties) {
199
+ if (properties.hasOwnProperty(propertyName)) {
200
+ this[propertyName] = properties[propertyName];
201
+ }
202
+ }
203
+
204
+ // IE won't copy toString using the loop above
205
+ if (properties.hasOwnProperty('toString')) {
206
+ this.toString = properties.toString;
207
+ }
208
+ },
209
+
210
+ /**
211
+ * Creates a copy of this object.
212
+ *
213
+ * @return {Object} The clone.
214
+ *
215
+ * @example
216
+ *
217
+ * var clone = instance.clone();
218
+ */
219
+ clone: function () {
220
+ return this.init.prototype.extend(this);
221
+ }
222
+ };
223
+ }());
224
+
225
+ /**
226
+ * An array of 32-bit words.
227
+ *
228
+ * @property {Array} words The array of 32-bit words.
229
+ * @property {number} sigBytes The number of significant bytes in this word array.
230
+ */
231
+ var WordArray = C_lib.WordArray = Base.extend({
232
+ /**
233
+ * Initializes a newly created word array.
234
+ *
235
+ * @param {Array} words (Optional) An array of 32-bit words.
236
+ * @param {number} sigBytes (Optional) The number of significant bytes in the words.
237
+ *
238
+ * @example
239
+ *
240
+ * var wordArray = CryptoJS.lib.WordArray.create();
241
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
242
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
243
+ */
244
+ init: function (words, sigBytes) {
245
+ words = this.words = words || [];
246
+
247
+ if (sigBytes != undefined) {
248
+ this.sigBytes = sigBytes;
249
+ } else {
250
+ this.sigBytes = words.length * 4;
251
+ }
252
+ },
253
+
254
+ /**
255
+ * Converts this word array to a string.
256
+ *
257
+ * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
258
+ *
259
+ * @return {string} The stringified word array.
260
+ *
261
+ * @example
262
+ *
263
+ * var string = wordArray + '';
264
+ * var string = wordArray.toString();
265
+ * var string = wordArray.toString(CryptoJS.enc.Utf8);
266
+ */
267
+ toString: function (encoder) {
268
+ return (encoder || Hex).stringify(this);
269
+ },
270
+
271
+ /**
272
+ * Concatenates a word array to this word array.
273
+ *
274
+ * @param {WordArray} wordArray The word array to append.
275
+ *
276
+ * @return {WordArray} This word array.
277
+ *
278
+ * @example
279
+ *
280
+ * wordArray1.concat(wordArray2);
281
+ */
282
+ concat: function (wordArray) {
283
+ // Shortcuts
284
+ var thisWords = this.words;
285
+ var thatWords = wordArray.words;
286
+ var thisSigBytes = this.sigBytes;
287
+ var thatSigBytes = wordArray.sigBytes;
288
+
289
+ // Clamp excess bits
290
+ this.clamp();
291
+
292
+ // Concat
293
+ if (thisSigBytes % 4) {
294
+ // Copy one byte at a time
295
+ for (var i = 0; i < thatSigBytes; i++) {
296
+ var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
297
+ thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
298
+ }
299
+ } else {
300
+ // Copy one word at a time
301
+ for (var i = 0; i < thatSigBytes; i += 4) {
302
+ thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];
303
+ }
304
+ }
305
+ this.sigBytes += thatSigBytes;
306
+
307
+ // Chainable
308
+ return this;
309
+ },
310
+
311
+ /**
312
+ * Removes insignificant bits.
313
+ *
314
+ * @example
315
+ *
316
+ * wordArray.clamp();
317
+ */
318
+ clamp: function () {
319
+ // Shortcuts
320
+ var words = this.words;
321
+ var sigBytes = this.sigBytes;
322
+
323
+ // Clamp
324
+ words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
325
+ words.length = Math.ceil(sigBytes / 4);
326
+ },
327
+
328
+ /**
329
+ * Creates a copy of this word array.
330
+ *
331
+ * @return {WordArray} The clone.
332
+ *
333
+ * @example
334
+ *
335
+ * var clone = wordArray.clone();
336
+ */
337
+ clone: function () {
338
+ var clone = Base.clone.call(this);
339
+ clone.words = this.words.slice(0);
340
+
341
+ return clone;
342
+ },
343
+
344
+ /**
345
+ * Creates a word array filled with random bytes.
346
+ *
347
+ * @param {number} nBytes The number of random bytes to generate.
348
+ *
349
+ * @return {WordArray} The random word array.
350
+ *
351
+ * @static
352
+ *
353
+ * @example
354
+ *
355
+ * var wordArray = CryptoJS.lib.WordArray.random(16);
356
+ */
357
+ random: function (nBytes) {
358
+ var words = [];
359
+
360
+ for (var i = 0; i < nBytes; i += 4) {
361
+ words.push(cryptoSecureRandomInt());
362
+ }
363
+
364
+ return new WordArray.init(words, nBytes);
365
+ }
366
+ });
367
+
368
+ /**
369
+ * Encoder namespace.
370
+ */
371
+ var C_enc = C.enc = {};
372
+
373
+ /**
374
+ * Hex encoding strategy.
375
+ */
376
+ var Hex = C_enc.Hex = {
377
+ /**
378
+ * Converts a word array to a hex string.
379
+ *
380
+ * @param {WordArray} wordArray The word array.
381
+ *
382
+ * @return {string} The hex string.
383
+ *
384
+ * @static
385
+ *
386
+ * @example
387
+ *
388
+ * var hexString = CryptoJS.enc.Hex.stringify(wordArray);
389
+ */
390
+ stringify: function (wordArray) {
391
+ // Shortcuts
392
+ var words = wordArray.words;
393
+ var sigBytes = wordArray.sigBytes;
394
+
395
+ // Convert
396
+ var hexChars = [];
397
+ for (var i = 0; i < sigBytes; i++) {
398
+ var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
399
+ hexChars.push((bite >>> 4).toString(16));
400
+ hexChars.push((bite & 0x0f).toString(16));
401
+ }
402
+
403
+ return hexChars.join('');
404
+ },
405
+
406
+ /**
407
+ * Converts a hex string to a word array.
408
+ *
409
+ * @param {string} hexStr The hex string.
410
+ *
411
+ * @return {WordArray} The word array.
412
+ *
413
+ * @static
414
+ *
415
+ * @example
416
+ *
417
+ * var wordArray = CryptoJS.enc.Hex.parse(hexString);
418
+ */
419
+ parse: function (hexStr) {
420
+ // Shortcut
421
+ var hexStrLength = hexStr.length;
422
+
423
+ // Convert
424
+ var words = [];
425
+ for (var i = 0; i < hexStrLength; i += 2) {
426
+ words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
427
+ }
428
+
429
+ return new WordArray.init(words, hexStrLength / 2);
430
+ }
431
+ };
432
+
433
+ /**
434
+ * Latin1 encoding strategy.
435
+ */
436
+ var Latin1 = C_enc.Latin1 = {
437
+ /**
438
+ * Converts a word array to a Latin1 string.
439
+ *
440
+ * @param {WordArray} wordArray The word array.
441
+ *
442
+ * @return {string} The Latin1 string.
443
+ *
444
+ * @static
445
+ *
446
+ * @example
447
+ *
448
+ * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
449
+ */
450
+ stringify: function (wordArray) {
451
+ // Shortcuts
452
+ var words = wordArray.words;
453
+ var sigBytes = wordArray.sigBytes;
454
+
455
+ // Convert
456
+ var latin1Chars = [];
457
+ for (var i = 0; i < sigBytes; i++) {
458
+ var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
459
+ latin1Chars.push(String.fromCharCode(bite));
460
+ }
461
+
462
+ return latin1Chars.join('');
463
+ },
464
+
465
+ /**
466
+ * Converts a Latin1 string to a word array.
467
+ *
468
+ * @param {string} latin1Str The Latin1 string.
469
+ *
470
+ * @return {WordArray} The word array.
471
+ *
472
+ * @static
473
+ *
474
+ * @example
475
+ *
476
+ * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
477
+ */
478
+ parse: function (latin1Str) {
479
+ // Shortcut
480
+ var latin1StrLength = latin1Str.length;
481
+
482
+ // Convert
483
+ var words = [];
484
+ for (var i = 0; i < latin1StrLength; i++) {
485
+ words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
486
+ }
487
+
488
+ return new WordArray.init(words, latin1StrLength);
489
+ }
490
+ };
491
+
492
+ /**
493
+ * UTF-8 encoding strategy.
494
+ */
495
+ var Utf8 = C_enc.Utf8 = {
496
+ /**
497
+ * Converts a word array to a UTF-8 string.
498
+ *
499
+ * @param {WordArray} wordArray The word array.
500
+ *
501
+ * @return {string} The UTF-8 string.
502
+ *
503
+ * @static
504
+ *
505
+ * @example
506
+ *
507
+ * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
508
+ */
509
+ stringify: function (wordArray) {
510
+ try {
511
+ return decodeURIComponent(escape(Latin1.stringify(wordArray)));
512
+ } catch (e) {
513
+ throw new Error('Malformed UTF-8 data');
514
+ }
515
+ },
516
+
517
+ /**
518
+ * Converts a UTF-8 string to a word array.
519
+ *
520
+ * @param {string} utf8Str The UTF-8 string.
521
+ *
522
+ * @return {WordArray} The word array.
523
+ *
524
+ * @static
525
+ *
526
+ * @example
527
+ *
528
+ * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
529
+ */
530
+ parse: function (utf8Str) {
531
+ return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
532
+ }
533
+ };
534
+
535
+ /**
536
+ * Abstract buffered block algorithm template.
537
+ *
538
+ * The property blockSize must be implemented in a concrete subtype.
539
+ *
540
+ * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
541
+ */
542
+ var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
543
+ /**
544
+ * Resets this block algorithm's data buffer to its initial state.
545
+ *
546
+ * @example
547
+ *
548
+ * bufferedBlockAlgorithm.reset();
549
+ */
550
+ reset: function () {
551
+ // Initial values
552
+ this._data = new WordArray.init();
553
+ this._nDataBytes = 0;
554
+ },
555
+
556
+ /**
557
+ * Adds new data to this block algorithm's buffer.
558
+ *
559
+ * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
560
+ *
561
+ * @example
562
+ *
563
+ * bufferedBlockAlgorithm._append('data');
564
+ * bufferedBlockAlgorithm._append(wordArray);
565
+ */
566
+ _append: function (data) {
567
+ // Convert string to WordArray, else assume WordArray already
568
+ if (typeof data == 'string') {
569
+ data = Utf8.parse(data);
570
+ }
571
+
572
+ // Append
573
+ this._data.concat(data);
574
+ this._nDataBytes += data.sigBytes;
575
+ },
576
+
577
+ /**
578
+ * Processes available data blocks.
579
+ *
580
+ * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
581
+ *
582
+ * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
583
+ *
584
+ * @return {WordArray} The processed data.
585
+ *
586
+ * @example
587
+ *
588
+ * var processedData = bufferedBlockAlgorithm._process();
589
+ * var processedData = bufferedBlockAlgorithm._process(!!'flush');
590
+ */
591
+ _process: function (doFlush) {
592
+ var processedWords;
593
+
594
+ // Shortcuts
595
+ var data = this._data;
596
+ var dataWords = data.words;
597
+ var dataSigBytes = data.sigBytes;
598
+ var blockSize = this.blockSize;
599
+ var blockSizeBytes = blockSize * 4;
600
+
601
+ // Count blocks ready
602
+ var nBlocksReady = dataSigBytes / blockSizeBytes;
603
+ if (doFlush) {
604
+ // Round up to include partial blocks
605
+ nBlocksReady = Math.ceil(nBlocksReady);
606
+ } else {
607
+ // Round down to include only full blocks,
608
+ // less the number of blocks that must remain in the buffer
609
+ nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
610
+ }
611
+
612
+ // Count words ready
613
+ var nWordsReady = nBlocksReady * blockSize;
614
+
615
+ // Count bytes ready
616
+ var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
617
+
618
+ // Process blocks
619
+ if (nWordsReady) {
620
+ for (var offset = 0; offset < nWordsReady; offset += blockSize) {
621
+ // Perform concrete-algorithm logic
622
+ this._doProcessBlock(dataWords, offset);
623
+ }
624
+
625
+ // Remove processed words
626
+ processedWords = dataWords.splice(0, nWordsReady);
627
+ data.sigBytes -= nBytesReady;
628
+ }
629
+
630
+ // Return processed words
631
+ return new WordArray.init(processedWords, nBytesReady);
632
+ },
633
+
634
+ /**
635
+ * Creates a copy of this object.
636
+ *
637
+ * @return {Object} The clone.
638
+ *
639
+ * @example
640
+ *
641
+ * var clone = bufferedBlockAlgorithm.clone();
642
+ */
643
+ clone: function () {
644
+ var clone = Base.clone.call(this);
645
+ clone._data = this._data.clone();
646
+
647
+ return clone;
648
+ },
649
+
650
+ _minBufferSize: 0
651
+ });
652
+
653
+ /**
654
+ * Abstract hasher template.
655
+ *
656
+ * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
657
+ */
658
+ var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
659
+ /**
660
+ * Configuration options.
661
+ */
662
+ cfg: Base.extend(),
663
+
664
+ /**
665
+ * Initializes a newly created hasher.
666
+ *
667
+ * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
668
+ *
669
+ * @example
670
+ *
671
+ * var hasher = CryptoJS.algo.SHA256.create();
672
+ */
673
+ init: function (cfg) {
674
+ // Apply config defaults
675
+ this.cfg = this.cfg.extend(cfg);
676
+
677
+ // Set initial values
678
+ this.reset();
679
+ },
680
+
681
+ /**
682
+ * Resets this hasher to its initial state.
683
+ *
684
+ * @example
685
+ *
686
+ * hasher.reset();
687
+ */
688
+ reset: function () {
689
+ // Reset data buffer
690
+ BufferedBlockAlgorithm.reset.call(this);
691
+
692
+ // Perform concrete-hasher logic
693
+ this._doReset();
694
+ },
695
+
696
+ /**
697
+ * Updates this hasher with a message.
698
+ *
699
+ * @param {WordArray|string} messageUpdate The message to append.
700
+ *
701
+ * @return {Hasher} This hasher.
702
+ *
703
+ * @example
704
+ *
705
+ * hasher.update('message');
706
+ * hasher.update(wordArray);
707
+ */
708
+ update: function (messageUpdate) {
709
+ // Append
710
+ this._append(messageUpdate);
711
+
712
+ // Update the hash
713
+ this._process();
714
+
715
+ // Chainable
716
+ return this;
717
+ },
718
+
719
+ /**
720
+ * Finalizes the hash computation.
721
+ * Note that the finalize operation is effectively a destructive, read-once operation.
722
+ *
723
+ * @param {WordArray|string} messageUpdate (Optional) A final message update.
724
+ *
725
+ * @return {WordArray} The hash.
726
+ *
727
+ * @example
728
+ *
729
+ * var hash = hasher.finalize();
730
+ * var hash = hasher.finalize('message');
731
+ * var hash = hasher.finalize(wordArray);
732
+ */
733
+ finalize: function (messageUpdate) {
734
+ // Final message update
735
+ if (messageUpdate) {
736
+ this._append(messageUpdate);
737
+ }
738
+
739
+ // Perform concrete-hasher logic
740
+ var hash = this._doFinalize();
741
+
742
+ return hash;
743
+ },
744
+
745
+ blockSize: 512/32,
746
+
747
+ /**
748
+ * Creates a shortcut function to a hasher's object interface.
749
+ *
750
+ * @param {Hasher} hasher The hasher to create a helper for.
751
+ *
752
+ * @return {Function} The shortcut function.
753
+ *
754
+ * @static
755
+ *
756
+ * @example
757
+ *
758
+ * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
759
+ */
760
+ _createHelper: function (hasher) {
761
+ return function (message, cfg) {
762
+ return new hasher.init(cfg).finalize(message);
763
+ };
764
+ },
765
+
766
+ /**
767
+ * Creates a shortcut function to the HMAC's object interface.
768
+ *
769
+ * @param {Hasher} hasher The hasher to use in this HMAC helper.
770
+ *
771
+ * @return {Function} The shortcut function.
772
+ *
773
+ * @static
774
+ *
775
+ * @example
776
+ *
777
+ * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
778
+ */
779
+ _createHmacHelper: function (hasher) {
780
+ return function (message, key) {
781
+ return new C_algo.HMAC.init(hasher, key).finalize(message);
782
+ };
783
+ }
784
+ });
785
+
786
+ /**
787
+ * Algorithm namespace.
788
+ */
789
+ var C_algo = C.algo = {};
790
+
791
+ return C;
792
+ }(Math));
793
+
794
+
795
+ return CryptoJS;
796
+
797
+ }));