Fix failing test.

This commit is contained in:
André Cruz
2012-11-18 22:10:10 +00:00
parent 91c5bb8c36
commit fae41c4179
9 changed files with 508 additions and 7 deletions

View File

@@ -1 +1 @@
9e1ea691c15d1fcbd4df08a43381e52c6b4b8f83
90ed234fb0708235a733bcae0e5b90bd4fac5321

View File

@@ -3,3 +3,10 @@ b5d79d8a18b8b95a3747a377ab09958577a2c978 9e1ea691c15d1fcbd4df08a43381e52c6b4b8f8
9e1ea691c15d1fcbd4df08a43381e52c6b4b8f83 01df57df1726b7a1a07e981c1ce316436a381e35 André Cruz <andremiguelcruz@msn.com> 1353273682 +0000 checkout: moving from master to 01df57df1726b7a1a07e981c1ce316436a381e35
01df57df1726b7a1a07e981c1ce316436a381e35 9e1ea691c15d1fcbd4df08a43381e52c6b4b8f83 André Cruz <andremiguelcruz@msn.com> 1353273726 +0000 checkout: moving from 01df57df1726b7a1a07e981c1ce316436a381e35 to master
9e1ea691c15d1fcbd4df08a43381e52c6b4b8f83 90ed234fb0708235a733bcae0e5b90bd4fac5321 André Cruz <andremiguelcruz@msn.com> 1353273739 +0000 pull -v --progress origin: Fast-forward
90ed234fb0708235a733bcae0e5b90bd4fac5321 90ed234fb0708235a733bcae0e5b90bd4fac5321 André Cruz <andremiguelcruz@msn.com> 1353274892 +0000 checkout: moving from master to master
90ed234fb0708235a733bcae0e5b90bd4fac5321 01df57df1726b7a1a07e981c1ce316436a381e35 André Cruz <andremiguelcruz@msn.com> 1353274939 +0000 checkout: moving from master to 0.0.1
01df57df1726b7a1a07e981c1ce316436a381e35 90ed234fb0708235a733bcae0e5b90bd4fac5321 André Cruz <andremiguelcruz@msn.com> 1353275053 +0000 checkout: moving from 01df57df1726b7a1a07e981c1ce316436a381e35 to master
90ed234fb0708235a733bcae0e5b90bd4fac5321 ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce André Cruz <andremiguelcruz@msn.com> 1353275130 +0000 checkout: moving from master to ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce
ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce 90ed234fb0708235a733bcae0e5b90bd4fac5321 André Cruz <andremiguelcruz@msn.com> 1353275237 +0000 checkout: moving from ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce to master
90ed234fb0708235a733bcae0e5b90bd4fac5321 ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce André Cruz <andremiguelcruz@msn.com> 1353275825 +0000 checkout: moving from master to 0.0.1
ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce 90ed234fb0708235a733bcae0e5b90bd4fac5321 André Cruz <andremiguelcruz@msn.com> 1353275834 +0000 checkout: moving from ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce to master

View File

@@ -1 +1 @@
01df57df1726b7a1a07e981c1ce316436a381e35
ee947ec6a8a56f6c57d3fb48d10f8c104c66f4ce

View File

@@ -1 +1,481 @@
(function(e){if(typeof exports=="object")module.exports.SparkMD5=e();else if(typeof define=="function"&&define.amd)define("spark-md5",e);else{var t;try{t=window}catch(n){t=self}t.SparkMD5=e()}})(function(e){"use strict";function r(e,n,r,i,s,o){return n=t(t(n,e),t(i,o)),t(n<<s|n>>>32-s,r)}function i(e,t,n,i,s,o,u){return r(t&n|~t&i,e,t,s,o,u)}function s(e,t,n,i,s,o,u){return r(t&i|n&~i,e,t,s,o,u)}function o(e,t,n,i,s,o,u){return r(t^n^i,e,t,s,o,u)}function u(e,t,n,i,s,o,u){return r(n^(t|~i),e,t,s,o,u)}function a(e,n){var r=e[0],a=e[1],f=e[2],l=e[3];r=i(r,a,f,l,n[0],7,-680876936),l=i(l,r,a,f,n[1],12,-389564586),f=i(f,l,r,a,n[2],17,606105819),a=i(a,f,l,r,n[3],22,-1044525330),r=i(r,a,f,l,n[4],7,-176418897),l=i(l,r,a,f,n[5],12,1200080426),f=i(f,l,r,a,n[6],17,-1473231341),a=i(a,f,l,r,n[7],22,-45705983),r=i(r,a,f,l,n[8],7,1770035416),l=i(l,r,a,f,n[9],12,-1958414417),f=i(f,l,r,a,n[10],17,-42063),a=i(a,f,l,r,n[11],22,-1990404162),r=i(r,a,f,l,n[12],7,1804603682),l=i(l,r,a,f,n[13],12,-40341101),f=i(f,l,r,a,n[14],17,-1502002290),a=i(a,f,l,r,n[15],22,1236535329),r=s(r,a,f,l,n[1],5,-165796510),l=s(l,r,a,f,n[6],9,-1069501632),f=s(f,l,r,a,n[11],14,643717713),a=s(a,f,l,r,n[0],20,-373897302),r=s(r,a,f,l,n[5],5,-701558691),l=s(l,r,a,f,n[10],9,38016083),f=s(f,l,r,a,n[15],14,-660478335),a=s(a,f,l,r,n[4],20,-405537848),r=s(r,a,f,l,n[9],5,568446438),l=s(l,r,a,f,n[14],9,-1019803690),f=s(f,l,r,a,n[3],14,-187363961),a=s(a,f,l,r,n[8],20,1163531501),r=s(r,a,f,l,n[13],5,-1444681467),l=s(l,r,a,f,n[2],9,-51403784),f=s(f,l,r,a,n[7],14,1735328473),a=s(a,f,l,r,n[12],20,-1926607734),r=o(r,a,f,l,n[5],4,-378558),l=o(l,r,a,f,n[8],11,-2022574463),f=o(f,l,r,a,n[11],16,1839030562),a=o(a,f,l,r,n[14],23,-35309556),r=o(r,a,f,l,n[1],4,-1530992060),l=o(l,r,a,f,n[4],11,1272893353),f=o(f,l,r,a,n[7],16,-155497632),a=o(a,f,l,r,n[10],23,-1094730640),r=o(r,a,f,l,n[13],4,681279174),l=o(l,r,a,f,n[0],11,-358537222),f=o(f,l,r,a,n[3],16,-722521979),a=o(a,f,l,r,n[6],23,76029189),r=o(r,a,f,l,n[9],4,-640364487),l=o(l,r,a,f,n[12],11,-421815835),f=o(f,l,r,a,n[15],16,530742520),a=o(a,f,l,r,n[2],23,-995338651),r=u(r,a,f,l,n[0],6,-198630844),l=u(l,r,a,f,n[7],10,1126891415),f=u(f,l,r,a,n[14],15,-1416354905),a=u(a,f,l,r,n[5],21,-57434055),r=u(r,a,f,l,n[12],6,1700485571),l=u(l,r,a,f,n[3],10,-1894986606),f=u(f,l,r,a,n[10],15,-1051523),a=u(a,f,l,r,n[1],21,-2054922799),r=u(r,a,f,l,n[8],6,1873313359),l=u(l,r,a,f,n[15],10,-30611744),f=u(f,l,r,a,n[6],15,-1560198380),a=u(a,f,l,r,n[13],21,1309151649),r=u(r,a,f,l,n[4],6,-145523070),l=u(l,r,a,f,n[11],10,-1120210379),f=u(f,l,r,a,n[2],15,718787259),a=u(a,f,l,r,n[9],21,-343485551),e[0]=t(r,e[0]),e[1]=t(a,e[1]),e[2]=t(f,e[2]),e[3]=t(l,e[3])}function f(e){var t=[],n;for(n=0;n<64;n+=4)t[n>>2]=e.charCodeAt(n)+(e.charCodeAt(n+1)<<8)+(e.charCodeAt(n+2)<<16)+(e.charCodeAt(n+3)<<24);return t}function l(e){var t=e.length,n=[1732584193,-271733879,-1732584194,271733878],r,i,s,o,u,l;for(r=64;r<=t;r+=64)a(n,f(e.substring(r-64,r)));e=e.substring(r-64),i=e.length,s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(r=0;r<i;r+=1)s[r>>2]|=e.charCodeAt(r)<<(r%4<<3);s[r>>2]|=128<<(r%4<<3);if(r>55){a(n,s);for(r=0;r<16;r+=1)s[r]=0}return o=t*8,o=o.toString(16).match(/(.*?)(.{0,8})$/),u=parseInt(o[2],16),l=parseInt(o[1],16)||0,s[14]=u,s[15]=l,a(n,s),n}function h(e){var t="",n;for(n=0;n<4;n+=1)t+=c[e>>n*8+4&15]+c[e>>n*8&15];return t}function p(e){var t;for(t=0;t<e.length;t+=1)e[t]=h(e[t]);return e.join("")}function d(e){return p(l(e))}var t=function(e,t){return e+t&4294967295},n,c=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return d("hello")!=="5d41402abc4b2a76b9719d911017c592"&&(t=function(e,t){var n=(e&65535)+(t&65535),r=(e>>16)+(t>>16)+(n>>16);return r<<16|n&65535}),n=function(){this.reset()},n.prototype.append=function(e){return/[\u0080-\uFFFF]/.test(e)&&(e=unescape(encodeURIComponent(e))),this.appendBinary(e),this},n.prototype.appendBinary=function(e){this._buff+=e,this._length+=e.length;var t=this._buff.length,n;for(n=64;n<=t;n+=64)a(this._state,f(this._buff.substring(n-64,n)));return this._buff=this._buff.substr(n-64),this},n.prototype.end=function(e){var t=this._buff,n=t.length,r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i,s,o,u,f;for(i=0;i<n;i+=1)r[i>>2]|=t.charCodeAt(i)<<(i%4<<3);r[i>>2]|=128<<(i%4<<3);if(i>55){a(this._state,r);for(i=0;i<16;i+=1)r[i]=0}return o=this._length*8,o=o.toString(16).match(/(.*?)(.{0,8})$/),u=parseInt(o[2],16),f=parseInt(o[1],16)||0,r[14]=u,r[15]=f,a(this._state,r),s=e?this._state:p(this._state),this.reset(),s},n.prototype.reset=function(){return this._buff="",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},n.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},n.hash=function(e,t){/[\u0080-\uFFFF]/.test(e)&&(e=unescape(encodeURIComponent(e)));var n=l(e);return t?n:p(n)},n.hashBinary=function(e,t){var n=l(e);return t?n:p(n)},n});
/*jshint bitwise:false*/
/*global unescape*/
/**
* SparkMD5 is a fast md5 implementation of the MD5 algorithm.
* This script is based in the JKM md5 library which is the
* fastest algorithm around (see: http://jsperf.com/md5-shootout/7).
*
* NOTE: Please disable Firebug while testing this script!
* Firebug consumes a lot of memory and CPU and slows down by a great margin.
* Opera Dragonfly also slows down by a great margin.
* Safari/Chrome developer tools seems not to slow it down.
*
* Improvements over the JKM md5 library:
*
* - Functionality wrapped in a closure
* - Object oriented library
* - Incremental md5 (see bellow)
* - Validates using jslint
*
* Incremental md5 performs a lot better for hashing large ammounts of data, such as
* files. One could read files in chunks, using the FileReader & Blob's, and append
* each chunk for md5 hashing while keeping memory usage low. See example bellow.
*
* @example
*
* Normal usage:
*
* var hexHash = SparkMD5.hash('Hi there'); // hex hash
* var rawHash = SparkMD5.hash('Hi there', true); // raw hash
*
* Incremental usage:
*
* var spark = new SparkMD5();
* spark.append('Hi');
* spark.append(' there');
* var hexHash = spark.end(); // hex hash
* var rawHash = spark.end(true); // raw hash
*
* Hash a file incrementally:
*
* NOTE: If you test the code bellow using the file:// protocol in chrome you must start the browser with -allow-file-access-from-files argument.
* Please see: http://code.google.com/p/chromium/issues/detail?id=60889
*
* document.getElementById("file").addEventListener("change", function() {
*
* var fileReader = new FileReader(),
* blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice,
* file = document.getElementById("file").files[0],
* chunkSize = 2097152, // read in chunks of 2MB
* chunks = Math.ceil(file.size / chunkSize),
* currentChunk = 0,
* spark = new SparkMD5();
*
* fileReader.onload = function(e) {
* console.log("read chunk nr", currentChunk + 1, "of", chunks);
* spark.appendBinary(e.target.result); // append binary string
* currentChunk++;
*
* if (currentChunk < chunks) {
* loadNext();
* }
* else {
* console.log("finished loading");
* console.info("computed hash", spark.end()); // compute hash
* }
* };
*
* function loadNext() {
* var start = currentChunk * chunkSize,
* end = start + chunkSize >= file.size ? file.size : start + chunkSize;
*
* fileReader.readAsBinaryString(blobSlice.call(file, start, end));
* };
*
* loadNext();
* });
*
* @TODO: Add native support for reading files? Maybe add it as an extension?
*/
(function (factory) {
if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
// AMD
define('spark-md5', factory);
} else {
// Browser globals (with support for web workers)
var glob;
try {
glob = window;
} catch (e) {
glob = self;
}
glob.SparkMD5 = factory();
}
}(function (undefined) {
'use strict';
////////////////////////////////////////////////////////////////////////////
/*
* Fastest md5 implementation around (JKM md5)
* Credits: Joseph Myers
*
* @see http://www.myersdaily.org/joseph/javascript/md5-text.html
* @see http://jsperf.com/md5-shootout/7
*/
/* this function is much faster,
so if possible we use it. Some IEs
are the only ones I know of that
need the idiotic second function,
generated by an if clause. */
var add32 = function (a, b) {
return (a + b) & 0xFFFFFFFF;
};
function cmn(q, a, b, x, s, t) {
a = add32(add32(a, q), add32(x, t));
return add32((a << s) | (a >>> (32 - s)), b);
}
function ff(a, b, c, d, x, s, t) {
return cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t) {
return cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t) {
return cmn(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t) {
return cmn(c ^ (b | (~d)), a, b, x, s, t);
}
function md5cycle(x, k) {
var a = x[0],
b = x[1],
c = x[2],
d = x[3];
a = ff(a, b, c, d, k[0], 7, -680876936);
d = ff(d, a, b, c, k[1], 12, -389564586);
c = ff(c, d, a, b, k[2], 17, 606105819);
b = ff(b, c, d, a, k[3], 22, -1044525330);
a = ff(a, b, c, d, k[4], 7, -176418897);
d = ff(d, a, b, c, k[5], 12, 1200080426);
c = ff(c, d, a, b, k[6], 17, -1473231341);
b = ff(b, c, d, a, k[7], 22, -45705983);
a = ff(a, b, c, d, k[8], 7, 1770035416);
d = ff(d, a, b, c, k[9], 12, -1958414417);
c = ff(c, d, a, b, k[10], 17, -42063);
b = ff(b, c, d, a, k[11], 22, -1990404162);
a = ff(a, b, c, d, k[12], 7, 1804603682);
d = ff(d, a, b, c, k[13], 12, -40341101);
c = ff(c, d, a, b, k[14], 17, -1502002290);
b = ff(b, c, d, a, k[15], 22, 1236535329);
a = gg(a, b, c, d, k[1], 5, -165796510);
d = gg(d, a, b, c, k[6], 9, -1069501632);
c = gg(c, d, a, b, k[11], 14, 643717713);
b = gg(b, c, d, a, k[0], 20, -373897302);
a = gg(a, b, c, d, k[5], 5, -701558691);
d = gg(d, a, b, c, k[10], 9, 38016083);
c = gg(c, d, a, b, k[15], 14, -660478335);
b = gg(b, c, d, a, k[4], 20, -405537848);
a = gg(a, b, c, d, k[9], 5, 568446438);
d = gg(d, a, b, c, k[14], 9, -1019803690);
c = gg(c, d, a, b, k[3], 14, -187363961);
b = gg(b, c, d, a, k[8], 20, 1163531501);
a = gg(a, b, c, d, k[13], 5, -1444681467);
d = gg(d, a, b, c, k[2], 9, -51403784);
c = gg(c, d, a, b, k[7], 14, 1735328473);
b = gg(b, c, d, a, k[12], 20, -1926607734);
a = hh(a, b, c, d, k[5], 4, -378558);
d = hh(d, a, b, c, k[8], 11, -2022574463);
c = hh(c, d, a, b, k[11], 16, 1839030562);
b = hh(b, c, d, a, k[14], 23, -35309556);
a = hh(a, b, c, d, k[1], 4, -1530992060);
d = hh(d, a, b, c, k[4], 11, 1272893353);
c = hh(c, d, a, b, k[7], 16, -155497632);
b = hh(b, c, d, a, k[10], 23, -1094730640);
a = hh(a, b, c, d, k[13], 4, 681279174);
d = hh(d, a, b, c, k[0], 11, -358537222);
c = hh(c, d, a, b, k[3], 16, -722521979);
b = hh(b, c, d, a, k[6], 23, 76029189);
a = hh(a, b, c, d, k[9], 4, -640364487);
d = hh(d, a, b, c, k[12], 11, -421815835);
c = hh(c, d, a, b, k[15], 16, 530742520);
b = hh(b, c, d, a, k[2], 23, -995338651);
a = ii(a, b, c, d, k[0], 6, -198630844);
d = ii(d, a, b, c, k[7], 10, 1126891415);
c = ii(c, d, a, b, k[14], 15, -1416354905);
b = ii(b, c, d, a, k[5], 21, -57434055);
a = ii(a, b, c, d, k[12], 6, 1700485571);
d = ii(d, a, b, c, k[3], 10, -1894986606);
c = ii(c, d, a, b, k[10], 15, -1051523);
b = ii(b, c, d, a, k[1], 21, -2054922799);
a = ii(a, b, c, d, k[8], 6, 1873313359);
d = ii(d, a, b, c, k[15], 10, -30611744);
c = ii(c, d, a, b, k[6], 15, -1560198380);
b = ii(b, c, d, a, k[13], 21, 1309151649);
a = ii(a, b, c, d, k[4], 6, -145523070);
d = ii(d, a, b, c, k[11], 10, -1120210379);
c = ii(c, d, a, b, k[2], 15, 718787259);
b = ii(b, c, d, a, k[9], 21, -343485551);
x[0] = add32(a, x[0]);
x[1] = add32(b, x[1]);
x[2] = add32(c, x[2]);
x[3] = add32(d, x[3]);
}
/* there needs to be support for Unicode here,
* unless we pretend that we can redefine the MD-5
* algorithm for multi-byte characters (perhaps
* by adding every four 16-bit characters and
* shortening the sum to 32 bits). Otherwise
* I suggest performing MD-5 as if every character
* was two bytes--e.g., 0040 0025 = @%--but then
* how will an ordinary MD-5 sum be matched?
* There is no way to standardize text to something
* like UTF-8 before transformation; speed cost is
* utterly prohibitive. The JavaScript standard
* itself needs to look at this: it should start
* providing access to strings as preformed UTF-8
* 8-bit unsigned value arrays.
*/
function md5blk(s) { /* I figured global was faster. */
var md5blks = [],
i; /* Andy King said do it this way. */
for (i = 0; i < 64; i += 4) {
md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
}
return md5blks;
}
function md51(s) {
var n = s.length,
state = [1732584193, -271733879, -1732584194, 271733878],
i,
length,
tail,
tmp,
lo,
hi;
for (i = 64; i <= n; i += 64) {
md5cycle(state, md5blk(s.substring(i - 64, i)));
}
s = s.substring(i - 64);
length = s.length;
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
}
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
if (i > 55) {
md5cycle(state, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
// Beware that the final length might not fit in 32 bits so we take care of that
tmp = n * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(state, tail);
return state;
}
var hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
function rhex(n) {
var s = '',
j;
for (j = 0; j < 4; j += 1) {
s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];
}
return s;
}
function hex(x) {
var i;
for (i = 0; i < x.length; i += 1) {
x[i] = rhex(x[i]);
}
return x.join('');
}
function md5(s) {
return hex(md51(s));
}
// In some cases the fast add32 function cannot be used..
if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') {
add32 = function (x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
};
}
////////////////////////////////////////////////////////////////////////////
/**
* SparkMD5 OOP implementation.
*
* Use this class to perform an incremental md5, otherwise use the
* static methods instead.
*/
var SparkMD5 = function () {
// call reset to init the instance
this.reset();
};
/**
* Appends a string.
* A conversion will be applied if an utf8 string is detected.
*
* @param {String} str The string to be appended
*
* @return {SparkMD5} The instance itself
*/
SparkMD5.prototype.append = function (str) {
// converts the string to utf8 bytes if necessary
if (/[\u0080-\uFFFF]/.test(str)) {
str = unescape(encodeURIComponent(str));
}
// then append as binary
this.appendBinary(str);
return this;
};
/**
* Appends a binary string.
*
* @param {String} contents The binary string to be appended
*
* @return {SparkMD5} The instance itself
*/
SparkMD5.prototype.appendBinary = function (contents) {
this._buff += contents;
this._length += contents.length;
var length = this._buff.length,
i;
for (i = 64; i <= length; i += 64) {
md5cycle(this._state, md5blk(this._buff.substring(i - 64, i)));
}
this._buff = this._buff.substr(i - 64);
return this;
};
/**
* Finishes the incremental computation, reseting the internal state and
* returning the result.
* Use the raw parameter to obtain the raw result instead of the hex one.
*
* @param {Boolean} raw True to get the raw result, false to get the hex result
*
* @return {String|Array} The result
*/
SparkMD5.prototype.end = function (raw) {
var buff = this._buff,
length = buff.length,
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
i,
ret,
tmp,
lo,
hi;
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);
}
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
if (i > 55) {
md5cycle(this._state, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
// Do the final computation based on the tail and length
// Beware that the final length may not fit in 32 bits so we take care of that
tmp = this._length * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(this._state, tail);
ret = !!raw ? this._state : hex(this._state);
this.reset();
return ret;
};
/**
* Resets the internal state of the computation.
*
* @return {SparkMD5} The instance itself
*/
SparkMD5.prototype.reset = function () {
this._buff = "";
this._length = 0;
this._state = [1732584193, -271733879, -1732584194, 271733878];
return this;
};
/**
* Releases memory used by the incremental buffer and other aditional
* resources. If you plan to use the instance again, use reset instead.
*/
SparkMD5.prototype.destroy = function () {
delete this._state;
delete this._buff;
delete this._length;
};
/**
* Performs the md5 hash on a string.
* A conversion will be applied if utf8 string is detected.
*
* @param {String} str The string
* @param {Boolean} raw True to get the raw result, false to get the hex result
*
* @return {String|Array} The result
*/
SparkMD5.hash = function (str, raw) {
// converts the string to utf8 bytes if necessary
if (/[\u0080-\uFFFF]/.test(str)) {
str = unescape(encodeURIComponent(str));
}
var hash = md51(str);
return !!raw ? hash : hex(hash);
};
/**
* Performs the md5 hash on a binary string.
*
* @param {String} content The binary string
* @param {Boolean} raw True to get the raw result, false to get the hex result
*
* @return {String|Array} The result
*/
SparkMD5.hashBinary = function (content, raw) {
var hash = md51(content);
return !!raw ? hash : hex(hash);
};
return SparkMD5;
}));

View File

@@ -1 +1 @@
(function(e){if(typeof exports=="object")module.exports.SparkMD5=e();else if(typeof define=="function"&&define.amd)define("spark-md5",e);else{var t;try{t=window}catch(n){t=self}t.SparkMD5=e()}})(function(e){"use strict";function r(e,n,r,i,s,o){return n=t(t(n,e),t(i,o)),t(n<<s|n>>>32-s,r)}function i(e,t,n,i,s,o,u){return r(t&n|~t&i,e,t,s,o,u)}function s(e,t,n,i,s,o,u){return r(t&i|n&~i,e,t,s,o,u)}function o(e,t,n,i,s,o,u){return r(t^n^i,e,t,s,o,u)}function u(e,t,n,i,s,o,u){return r(n^(t|~i),e,t,s,o,u)}function a(e,n){var r=e[0],a=e[1],f=e[2],l=e[3];r=i(r,a,f,l,n[0],7,-680876936),l=i(l,r,a,f,n[1],12,-389564586),f=i(f,l,r,a,n[2],17,606105819),a=i(a,f,l,r,n[3],22,-1044525330),r=i(r,a,f,l,n[4],7,-176418897),l=i(l,r,a,f,n[5],12,1200080426),f=i(f,l,r,a,n[6],17,-1473231341),a=i(a,f,l,r,n[7],22,-45705983),r=i(r,a,f,l,n[8],7,1770035416),l=i(l,r,a,f,n[9],12,-1958414417),f=i(f,l,r,a,n[10],17,-42063),a=i(a,f,l,r,n[11],22,-1990404162),r=i(r,a,f,l,n[12],7,1804603682),l=i(l,r,a,f,n[13],12,-40341101),f=i(f,l,r,a,n[14],17,-1502002290),a=i(a,f,l,r,n[15],22,1236535329),r=s(r,a,f,l,n[1],5,-165796510),l=s(l,r,a,f,n[6],9,-1069501632),f=s(f,l,r,a,n[11],14,643717713),a=s(a,f,l,r,n[0],20,-373897302),r=s(r,a,f,l,n[5],5,-701558691),l=s(l,r,a,f,n[10],9,38016083),f=s(f,l,r,a,n[15],14,-660478335),a=s(a,f,l,r,n[4],20,-405537848),r=s(r,a,f,l,n[9],5,568446438),l=s(l,r,a,f,n[14],9,-1019803690),f=s(f,l,r,a,n[3],14,-187363961),a=s(a,f,l,r,n[8],20,1163531501),r=s(r,a,f,l,n[13],5,-1444681467),l=s(l,r,a,f,n[2],9,-51403784),f=s(f,l,r,a,n[7],14,1735328473),a=s(a,f,l,r,n[12],20,-1926607734),r=o(r,a,f,l,n[5],4,-378558),l=o(l,r,a,f,n[8],11,-2022574463),f=o(f,l,r,a,n[11],16,1839030562),a=o(a,f,l,r,n[14],23,-35309556),r=o(r,a,f,l,n[1],4,-1530992060),l=o(l,r,a,f,n[4],11,1272893353),f=o(f,l,r,a,n[7],16,-155497632),a=o(a,f,l,r,n[10],23,-1094730640),r=o(r,a,f,l,n[13],4,681279174),l=o(l,r,a,f,n[0],11,-358537222),f=o(f,l,r,a,n[3],16,-722521979),a=o(a,f,l,r,n[6],23,76029189),r=o(r,a,f,l,n[9],4,-640364487),l=o(l,r,a,f,n[12],11,-421815835),f=o(f,l,r,a,n[15],16,530742520),a=o(a,f,l,r,n[2],23,-995338651),r=u(r,a,f,l,n[0],6,-198630844),l=u(l,r,a,f,n[7],10,1126891415),f=u(f,l,r,a,n[14],15,-1416354905),a=u(a,f,l,r,n[5],21,-57434055),r=u(r,a,f,l,n[12],6,1700485571),l=u(l,r,a,f,n[3],10,-1894986606),f=u(f,l,r,a,n[10],15,-1051523),a=u(a,f,l,r,n[1],21,-2054922799),r=u(r,a,f,l,n[8],6,1873313359),l=u(l,r,a,f,n[15],10,-30611744),f=u(f,l,r,a,n[6],15,-1560198380),a=u(a,f,l,r,n[13],21,1309151649),r=u(r,a,f,l,n[4],6,-145523070),l=u(l,r,a,f,n[11],10,-1120210379),f=u(f,l,r,a,n[2],15,718787259),a=u(a,f,l,r,n[9],21,-343485551),e[0]=t(r,e[0]),e[1]=t(a,e[1]),e[2]=t(f,e[2]),e[3]=t(l,e[3])}function f(e){var t=[],n;for(n=0;n<64;n+=4)t[n>>2]=e.charCodeAt(n)+(e.charCodeAt(n+1)<<8)+(e.charCodeAt(n+2)<<16)+(e.charCodeAt(n+3)<<24);return t}function l(e){var t=e.length,n=[1732584193,-271733879,-1732584194,271733878],r,i,s,o,u,l;for(r=64;r<=t;r+=64)a(n,f(e.substring(r-64,r)));e=e.substring(r-64),i=e.length,s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(r=0;r<i;r+=1)s[r>>2]|=e.charCodeAt(r)<<(r%4<<3);s[r>>2]|=128<<(r%4<<3);if(r>55){a(n,s);for(r=0;r<16;r+=1)s[r]=0}return o=t*8,o=o.toString(16).match(/(.*?)(.{0,8})$/),u=parseInt(o[2],16),l=parseInt(o[1],16)||0,s[14]=u,s[15]=l,a(n,s),n}function h(e){var t="",n;for(n=0;n<4;n+=1)t+=c[e>>n*8+4&15]+c[e>>n*8&15];return t}function p(e){var t;for(t=0;t<e.length;t+=1)e[t]=h(e[t]);return e.join("")}function d(e){return p(l(e))}var t=function(e,t){return e+t&4294967295},n,c=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return d("hello")!=="5d41402abc4b2a76b9719d911017c592"&&(t=function(e,t){var n=(e&65535)+(t&65535),r=(e>>16)+(t>>16)+(n>>16);return r<<16|n&65535}),n=function(){this.reset()},n.prototype.append=function(e){return/[\u0080-\uFFFF]/.test(e)&&(e=unescape(encodeURIComponent(e))),this.appendBinary(e),this},n.prototype.appendBinary=function(e){this._buff+=e,this._length+=e.length;var t=this._buff.length,n;for(n=64;n<=t;n+=64)a(this._state,f(this._buff.substring(n-64,n)));return this._buff=this._buff.substr(n-64),this},n.prototype.end=function(e){var t=this._buff,n=t.length,r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i,s,o,u,f;for(i=0;i<n;i+=1)r[i>>2]|=t.charCodeAt(i)<<(i%4<<3);r[i>>2]|=128<<(i%4<<3);if(i>55){a(this._state,r);for(i=0;i<16;i+=1)r[i]=0}return o=this._length*8,o=o.toString(16).match(/(.*?)(.{0,8})$/),u=parseInt(o[2],16),f=parseInt(o[1],16)||0,r[14]=u,r[15]=f,a(this._state,r),s=e?this._state:p(this._state),this.reset(),s},n.prototype.reset=function(){return this._buff="",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},n.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},n.hash=function(e,t){/[\u0080-\uFFFF]/.test(e)&&(e=unescape(encodeURIComponent(e)));var n=l(e);return t?n:p(n)},n.hashBinary=function(e,t){var n=l(e);return t?n:p(n)},n});
(function(e){if(typeof exports=="object")module.exports=e();else if(typeof define=="function"&&define.amd)define("spark-md5",e);else{var t;try{t=window}catch(n){t=self}t.SparkMD5=e()}})(function(e){"use strict";function r(e,n,r,i,s,o){return n=t(t(n,e),t(i,o)),t(n<<s|n>>>32-s,r)}function i(e,t,n,i,s,o,u){return r(t&n|~t&i,e,t,s,o,u)}function s(e,t,n,i,s,o,u){return r(t&i|n&~i,e,t,s,o,u)}function o(e,t,n,i,s,o,u){return r(t^n^i,e,t,s,o,u)}function u(e,t,n,i,s,o,u){return r(n^(t|~i),e,t,s,o,u)}function a(e,n){var r=e[0],a=e[1],f=e[2],l=e[3];r=i(r,a,f,l,n[0],7,-680876936),l=i(l,r,a,f,n[1],12,-389564586),f=i(f,l,r,a,n[2],17,606105819),a=i(a,f,l,r,n[3],22,-1044525330),r=i(r,a,f,l,n[4],7,-176418897),l=i(l,r,a,f,n[5],12,1200080426),f=i(f,l,r,a,n[6],17,-1473231341),a=i(a,f,l,r,n[7],22,-45705983),r=i(r,a,f,l,n[8],7,1770035416),l=i(l,r,a,f,n[9],12,-1958414417),f=i(f,l,r,a,n[10],17,-42063),a=i(a,f,l,r,n[11],22,-1990404162),r=i(r,a,f,l,n[12],7,1804603682),l=i(l,r,a,f,n[13],12,-40341101),f=i(f,l,r,a,n[14],17,-1502002290),a=i(a,f,l,r,n[15],22,1236535329),r=s(r,a,f,l,n[1],5,-165796510),l=s(l,r,a,f,n[6],9,-1069501632),f=s(f,l,r,a,n[11],14,643717713),a=s(a,f,l,r,n[0],20,-373897302),r=s(r,a,f,l,n[5],5,-701558691),l=s(l,r,a,f,n[10],9,38016083),f=s(f,l,r,a,n[15],14,-660478335),a=s(a,f,l,r,n[4],20,-405537848),r=s(r,a,f,l,n[9],5,568446438),l=s(l,r,a,f,n[14],9,-1019803690),f=s(f,l,r,a,n[3],14,-187363961),a=s(a,f,l,r,n[8],20,1163531501),r=s(r,a,f,l,n[13],5,-1444681467),l=s(l,r,a,f,n[2],9,-51403784),f=s(f,l,r,a,n[7],14,1735328473),a=s(a,f,l,r,n[12],20,-1926607734),r=o(r,a,f,l,n[5],4,-378558),l=o(l,r,a,f,n[8],11,-2022574463),f=o(f,l,r,a,n[11],16,1839030562),a=o(a,f,l,r,n[14],23,-35309556),r=o(r,a,f,l,n[1],4,-1530992060),l=o(l,r,a,f,n[4],11,1272893353),f=o(f,l,r,a,n[7],16,-155497632),a=o(a,f,l,r,n[10],23,-1094730640),r=o(r,a,f,l,n[13],4,681279174),l=o(l,r,a,f,n[0],11,-358537222),f=o(f,l,r,a,n[3],16,-722521979),a=o(a,f,l,r,n[6],23,76029189),r=o(r,a,f,l,n[9],4,-640364487),l=o(l,r,a,f,n[12],11,-421815835),f=o(f,l,r,a,n[15],16,530742520),a=o(a,f,l,r,n[2],23,-995338651),r=u(r,a,f,l,n[0],6,-198630844),l=u(l,r,a,f,n[7],10,1126891415),f=u(f,l,r,a,n[14],15,-1416354905),a=u(a,f,l,r,n[5],21,-57434055),r=u(r,a,f,l,n[12],6,1700485571),l=u(l,r,a,f,n[3],10,-1894986606),f=u(f,l,r,a,n[10],15,-1051523),a=u(a,f,l,r,n[1],21,-2054922799),r=u(r,a,f,l,n[8],6,1873313359),l=u(l,r,a,f,n[15],10,-30611744),f=u(f,l,r,a,n[6],15,-1560198380),a=u(a,f,l,r,n[13],21,1309151649),r=u(r,a,f,l,n[4],6,-145523070),l=u(l,r,a,f,n[11],10,-1120210379),f=u(f,l,r,a,n[2],15,718787259),a=u(a,f,l,r,n[9],21,-343485551),e[0]=t(r,e[0]),e[1]=t(a,e[1]),e[2]=t(f,e[2]),e[3]=t(l,e[3])}function f(e){var t=[],n;for(n=0;n<64;n+=4)t[n>>2]=e.charCodeAt(n)+(e.charCodeAt(n+1)<<8)+(e.charCodeAt(n+2)<<16)+(e.charCodeAt(n+3)<<24);return t}function l(e){var t=e.length,n=[1732584193,-271733879,-1732584194,271733878],r,i,s,o,u,l;for(r=64;r<=t;r+=64)a(n,f(e.substring(r-64,r)));e=e.substring(r-64),i=e.length,s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(r=0;r<i;r+=1)s[r>>2]|=e.charCodeAt(r)<<(r%4<<3);s[r>>2]|=128<<(r%4<<3);if(r>55){a(n,s);for(r=0;r<16;r+=1)s[r]=0}return o=t*8,o=o.toString(16).match(/(.*?)(.{0,8})$/),u=parseInt(o[2],16),l=parseInt(o[1],16)||0,s[14]=u,s[15]=l,a(n,s),n}function h(e){var t="",n;for(n=0;n<4;n+=1)t+=c[e>>n*8+4&15]+c[e>>n*8&15];return t}function p(e){var t;for(t=0;t<e.length;t+=1)e[t]=h(e[t]);return e.join("")}function d(e){return p(l(e))}var t=function(e,t){return e+t&4294967295},n,c=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return d("hello")!=="5d41402abc4b2a76b9719d911017c592"&&(t=function(e,t){var n=(e&65535)+(t&65535),r=(e>>16)+(t>>16)+(n>>16);return r<<16|n&65535}),n=function(){this.reset()},n.prototype.append=function(e){return/[\u0080-\uFFFF]/.test(e)&&(e=unescape(encodeURIComponent(e))),this.appendBinary(e),this},n.prototype.appendBinary=function(e){this._buff+=e,this._length+=e.length;var t=this._buff.length,n;for(n=64;n<=t;n+=64)a(this._state,f(this._buff.substring(n-64,n)));return this._buff=this._buff.substr(n-64),this},n.prototype.end=function(e){var t=this._buff,n=t.length,r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i,s,o,u,f;for(i=0;i<n;i+=1)r[i>>2]|=t.charCodeAt(i)<<(i%4<<3);r[i>>2]|=128<<(i%4<<3);if(i>55){a(this._state,r);for(i=0;i<16;i+=1)r[i]=0}return o=this._length*8,o=o.toString(16).match(/(.*?)(.{0,8})$/),u=parseInt(o[2],16),f=parseInt(o[1],16)||0,r[14]=u,r[15]=f,a(this._state,r),s=e?this._state:p(this._state),this.reset(),s},n.prototype.reset=function(){return this._buff="",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},n.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},n.hash=function(e,t){/[\u0080-\uFFFF]/.test(e)&&(e=unescape(encodeURIComponent(e)));var n=l(e);return t?n:p(n)},n.hashBinary=function(e,t){var n=l(e);return t?n:p(n)},n});

View File

@@ -236,15 +236,22 @@ describe('package', function () {
it('Should treat local packages as git repositories if there is a .git', function (next) {
var pkg = new Package('spark-md5', __dirname + '/assets/package-repo');
var dir = __dirname + '/assets/package-repo';
fs.renameSync(dir + '/git_repo', dir + '/.git');
var pkg = new Package('spark-md5', dir);
pkg.on('resolve', function () {
fs.renameSync(dir + '/.git', dir + '/git_repo');
assert(fs.existsSync(pkg.path + '/spark-md5.js'));
assert(fs.existsSync(pkg.path + '/spark-md5.min.js'));
assert(fs.existsSync(pkg.path + '/.jshintrc'));
next();
});
pkg.on('error', function (err) {
fs.renameSync(dir + '/.git', dir + '/git_repo');
throw new Error(err);
});
@@ -252,15 +259,22 @@ describe('package', function () {
});
it('Should treat local packages as git repositories if there is a .git (and handle versions)', function (next) {
var pkg = new Package('spark-md5', __dirname + '/assets/package-repo#0.0.1');
var dir = __dirname + '/assets/package-repo';
fs.renameSync(dir + '/git_repo', dir + '/.git');
var pkg = new Package('spark-md5', dir + '#0.0.1');
pkg.on('resolve', function () {
assert(fs.existsSync(pkg.path + '/spark-md5.js') === false);
fs.renameSync(dir + '/.git', dir + '/git_repo');
assert(fs.existsSync(pkg.path + '/spark-md5.js'));
assert(fs.existsSync(pkg.path + '/spark-md5.min.js'));
assert(fs.existsSync(pkg.path + '/.jshintrc') === false);
next();
});
pkg.on('error', function (err) {
fs.renameSync(dir + '/.git', dir + '/git_repo');
throw new Error(err);
});