mirror of
https://github.com/emn178/js-sha1.git
synced 2026-08-13 04:21:35 +08:00
* Support ArrayBuffer input.
* Improve performance.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
# v0.3.0 / 2015-03-04
|
||||||
|
|
||||||
|
* Support ArrayBuffer input.
|
||||||
|
* Improve performance.
|
||||||
|
|
||||||
# v0.2.0 / 2015-02-16
|
# v0.2.0 / 2015-02-16
|
||||||
|
|
||||||
* Support byte array input.
|
* Support byte array input.
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ Output
|
|||||||
|
|
||||||
7be2d2d20c106eee0836c9bc2b939890a78e8fb3
|
7be2d2d20c106eee0836c9bc2b939890a78e8fb3
|
||||||
|
|
||||||
It also supports byte Array or Uint8Array input:
|
It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` input:
|
||||||
|
|
||||||
Code
|
Code
|
||||||
```JavaScript
|
```JavaScript
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha1",
|
"name": "js-sha1",
|
||||||
"version": "0.2.0",
|
"version": "0.3.0",
|
||||||
"main": ["build/sha1.min.js"],
|
"main": ["build/sha1.min.js"],
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"samples",
|
"samples",
|
||||||
|
|||||||
Vendored
+7
-6
@@ -1,6 +1,7 @@
|
|||||||
(function(x,C){"undefined"!=typeof module&&(x=global);var v="undefined"!=typeof Uint8Array,k="0123456789abcdef".split(""),B=[-2147483648,8388608,32768,128],w=[24,16,8,0],b=[];Array.prototype.__ARRAY__=!0;v&&(Uint8Array.prototype.__ARRAY__=!0);v=function(y){var n,p,q,r,t,m=0,x=!1,a,l,h,u=0,v=0,A=0,z=y.length;n=1732584193;p=4023233417;q=2562383102;r=271733878;t=3285377520;do{b[0]=m;b[16]=b[1]=b[2]=b[3]=b[4]=b[5]=b[6]=b[7]=b[8]=b[9]=b[10]=b[11]=b[12]=b[13]=b[14]=b[15]=0;if(y.__ARRAY__)for(a=v;u<z&&64>
|
(function(x,F){"undefined"!=typeof module&&(x=global);var k="0123456789abcdef".split(""),C=[-2147483648,8388608,32768,128],v=[24,16,8,0],b=[],D=function(w){var x="string"!=typeof w;x&&w.constructor==ArrayBuffer&&(w=new Uint8Array(w));var n,p,q,r,t,m=0,y=!1,a,l,h,u=0,z=0,B=0,A=w.length;n=1732584193;p=4023233417;q=2562383102;r=271733878;t=3285377520;do{b[0]=m;b[16]=b[1]=b[2]=b[3]=b[4]=b[5]=b[6]=b[7]=b[8]=b[9]=b[10]=b[11]=b[12]=b[13]=b[14]=b[15]=0;if(x)for(a=z;u<A&&64>a;++u)b[a>>2]|=w[u]<<v[a++&3];else for(a=
|
||||||
a;++u)b[a>>2]|=y[u]<<w[a++&3];else for(a=v;u<z&&64>a;++u)m=y.charCodeAt(u),128>m?b[a>>2]|=m<<w[a++&3]:(2048>m?b[a>>2]|=(192|m>>6)<<w[a++&3]:(55296>m||57344<=m?b[a>>2]|=(224|m>>12)<<w[a++&3]:(m=65536+((m&1023)<<10|y.charCodeAt(++u)&1023),b[a>>2]|=(240|m>>18)<<w[a++&3],b[a>>2]|=(128|m>>12&63)<<w[a++&3]),b[a>>2]|=(128|m>>6&63)<<w[a++&3]),b[a>>2]|=(128|m&63)<<w[a++&3]);A+=a-v;v=a-64;u==z&&(b[a>>2]|=B[a&3],++u);m=b[16];u>z&&56>a&&(b[15]=A<<3,x=!0);for(h=16;80>h;++h)a=b[h-3]^b[h-8]^b[h-14]^b[h-16],b[h]=
|
z;u<A&&64>a;++u)m=w.charCodeAt(u),128>m?b[a>>2]|=m<<v[a++&3]:(2048>m?b[a>>2]|=(192|m>>6)<<v[a++&3]:(55296>m||57344<=m?b[a>>2]|=(224|m>>12)<<v[a++&3]:(m=65536+((m&1023)<<10|w.charCodeAt(++u)&1023),b[a>>2]|=(240|m>>18)<<v[a++&3],b[a>>2]|=(128|m>>12&63)<<v[a++&3]),b[a>>2]|=(128|m>>6&63)<<v[a++&3]),b[a>>2]|=(128|m&63)<<v[a++&3]);B+=a-z;z=a-64;u==A&&(b[a>>2]|=C[a&3],++u);m=b[16];u>A&&56>a&&(b[15]=B<<3,y=!0);for(h=16;80>h;++h)a=b[h-3]^b[h-8]^b[h-14]^b[h-16],b[h]=a<<1|a>>>31;var c=n,d=p,e=q,f=r,g=t;for(h=
|
||||||
a<<1|a>>>31;var c=n,d=p,e=q,f=r,g=t;for(h=0;20>h;h+=5)l=d&e|~d&f,a=c<<5|c>>>27,g=a+l+g+1518500249+b[h]<<0,d=d<<30|d>>>2,l=c&d|~c&e,a=g<<5|g>>>27,f=a+l+f+1518500249+b[h+1]<<0,c=c<<30|c>>>2,l=g&c|~g&d,a=f<<5|f>>>27,e=a+l+e+1518500249+b[h+2]<<0,g=g<<30|g>>>2,l=f&g|~f&c,a=e<<5|e>>>27,d=a+l+d+1518500249+b[h+3]<<0,f=f<<30|f>>>2,l=e&f|~e&g,a=d<<5|d>>>27,c=a+l+c+1518500249+b[h+4]<<0,e=e<<30|e>>>2;for(;40>h;h+=5)l=d^e^f,a=c<<5|c>>>27,g=a+l+g+1859775393+b[h]<<0,d=d<<30|d>>>2,l=c^d^e,a=g<<5|g>>>27,f=a+l+f+1859775393+
|
0;20>h;h+=5)l=d&e|~d&f,a=c<<5|c>>>27,g=a+l+g+1518500249+b[h]<<0,d=d<<30|d>>>2,l=c&d|~c&e,a=g<<5|g>>>27,f=a+l+f+1518500249+b[h+1]<<0,c=c<<30|c>>>2,l=g&c|~g&d,a=f<<5|f>>>27,e=a+l+e+1518500249+b[h+2]<<0,g=g<<30|g>>>2,l=f&g|~f&c,a=e<<5|e>>>27,d=a+l+d+1518500249+b[h+3]<<0,f=f<<30|f>>>2,l=e&f|~e&g,a=d<<5|d>>>27,c=a+l+c+1518500249+b[h+4]<<0,e=e<<30|e>>>2;for(;40>h;h+=5)l=d^e^f,a=c<<5|c>>>27,g=a+l+g+1859775393+b[h]<<0,d=d<<30|d>>>2,l=c^d^e,a=g<<5|g>>>27,f=a+l+f+1859775393+b[h+1]<<0,c=c<<30|c>>>2,l=g^c^d,
|
||||||
b[h+1]<<0,c=c<<30|c>>>2,l=g^c^d,a=f<<5|f>>>27,e=a+l+e+1859775393+b[h+2]<<0,g=g<<30|g>>>2,l=f^g^c,a=e<<5|e>>>27,d=a+l+d+1859775393+b[h+3]<<0,f=f<<30|f>>>2,l=e^f^g,a=d<<5|d>>>27,c=a+l+c+1859775393+b[h+4]<<0,e=e<<30|e>>>2;for(;60>h;h+=5)l=d&e|d&f|e&f,a=c<<5|c>>>27,g=a+l+g-1894007588+b[h]<<0,d=d<<30|d>>>2,l=c&d|c&e|d&e,a=g<<5|g>>>27,f=a+l+f-1894007588+b[h+1]<<0,c=c<<30|c>>>2,l=g&c|g&d|c&d,a=f<<5|f>>>27,e=a+l+e-1894007588+b[h+2]<<0,g=g<<30|g>>>2,l=f&g|f&c|g&c,a=e<<5|e>>>27,d=a+l+d-1894007588+b[h+3]<<0,
|
a=f<<5|f>>>27,e=a+l+e+1859775393+b[h+2]<<0,g=g<<30|g>>>2,l=f^g^c,a=e<<5|e>>>27,d=a+l+d+1859775393+b[h+3]<<0,f=f<<30|f>>>2,l=e^f^g,a=d<<5|d>>>27,c=a+l+c+1859775393+b[h+4]<<0,e=e<<30|e>>>2;for(;60>h;h+=5)l=d&e|d&f|e&f,a=c<<5|c>>>27,g=a+l+g-1894007588+b[h]<<0,d=d<<30|d>>>2,l=c&d|c&e|d&e,a=g<<5|g>>>27,f=a+l+f-1894007588+b[h+1]<<0,c=c<<30|c>>>2,l=g&c|g&d|c&d,a=f<<5|f>>>27,e=a+l+e-1894007588+b[h+2]<<0,g=g<<30|g>>>2,l=f&g|f&c|g&c,a=e<<5|e>>>27,d=a+l+d-1894007588+b[h+3]<<0,f=f<<30|f>>>2,l=e&f|e&g|f&g,a=d<<
|
||||||
f=f<<30|f>>>2,l=e&f|e&g|f&g,a=d<<5|d>>>27,c=a+l+c-1894007588+b[h+4]<<0,e=e<<30|e>>>2;for(;80>h;h+=5)l=d^e^f,a=c<<5|c>>>27,g=a+l+g-899497514+b[h]<<0,d=d<<30|d>>>2,l=c^d^e,a=g<<5|g>>>27,f=a+l+f-899497514+b[h+1]<<0,c=c<<30|c>>>2,l=g^c^d,a=f<<5|f>>>27,e=a+l+e-899497514+b[h+2]<<0,g=g<<30|g>>>2,l=f^g^c,a=e<<5|e>>>27,d=a+l+d-899497514+b[h+3]<<0,f=f<<30|f>>>2,l=e^f^g,a=d<<5|d>>>27,c=a+l+c-899497514+b[h+4]<<0,e=e<<30|e>>>2;n=n+c<<0;p=p+d<<0;q=q+e<<0;r=r+f<<0;t=t+g<<0}while(!x);return k[n>>28&15]+k[n>>24&15]+
|
5|d>>>27,c=a+l+c-1894007588+b[h+4]<<0,e=e<<30|e>>>2;for(;80>h;h+=5)l=d^e^f,a=c<<5|c>>>27,g=a+l+g-899497514+b[h]<<0,d=d<<30|d>>>2,l=c^d^e,a=g<<5|g>>>27,f=a+l+f-899497514+b[h+1]<<0,c=c<<30|c>>>2,l=g^c^d,a=f<<5|f>>>27,e=a+l+e-899497514+b[h+2]<<0,g=g<<30|g>>>2,l=f^g^c,a=e<<5|e>>>27,d=a+l+d-899497514+b[h+3]<<0,f=f<<30|f>>>2,l=e^f^g,a=d<<5|d>>>27,c=a+l+c-899497514+b[h+4]<<0,e=e<<30|e>>>2;n=n+c<<0;p=p+d<<0;q=q+e<<0;r=r+f<<0;t=t+g<<0}while(!y);return k[n>>28&15]+k[n>>24&15]+k[n>>20&15]+k[n>>16&15]+k[n>>12&
|
||||||
k[n>>20&15]+k[n>>16&15]+k[n>>12&15]+k[n>>8&15]+k[n>>4&15]+k[n&15]+k[p>>28&15]+k[p>>24&15]+k[p>>20&15]+k[p>>16&15]+k[p>>12&15]+k[p>>8&15]+k[p>>4&15]+k[p&15]+k[q>>28&15]+k[q>>24&15]+k[q>>20&15]+k[q>>16&15]+k[q>>12&15]+k[q>>8&15]+k[q>>4&15]+k[q&15]+k[r>>28&15]+k[r>>24&15]+k[r>>20&15]+k[r>>16&15]+k[r>>12&15]+k[r>>8&15]+k[r>>4&15]+k[r&15]+k[t>>28&15]+k[t>>24&15]+k[t>>20&15]+k[t>>16&15]+k[t>>12&15]+k[t>>8&15]+k[t>>4&15]+k[t&15]};x.JS_SHA1_TEST||"undefined"==typeof module?x&&(x.sha1=v):module.exports=v})(this);
|
15]+k[n>>8&15]+k[n>>4&15]+k[n&15]+k[p>>28&15]+k[p>>24&15]+k[p>>20&15]+k[p>>16&15]+k[p>>12&15]+k[p>>8&15]+k[p>>4&15]+k[p&15]+k[q>>28&15]+k[q>>24&15]+k[q>>20&15]+k[q>>16&15]+k[q>>12&15]+k[q>>8&15]+k[q>>4&15]+k[q&15]+k[r>>28&15]+k[r>>24&15]+k[r>>20&15]+k[r>>16&15]+k[r>>12&15]+k[r>>8&15]+k[r>>4&15]+k[r&15]+k[t>>28&15]+k[t>>24&15]+k[t>>20&15]+k[t>>16&15]+k[t>>12&15]+k[t>>8&15]+k[t>>4&15]+k[t&15]};if(x.JS_SHA1_TEST||"undefined"==typeof module)x&&(x.sha1=D);else{var y=require("crypto"),E=require("buffer").Buffer;
|
||||||
|
module.exports=function(b){if("string"==typeof b)return y.createHash("sha1").update(b,"utf8").digest("hex");b.constructor==ArrayBuffer&&(b=new Uint8Array(b));return y.createHash("sha1").update(new E(b)).digest("hex")}}})(this);
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha1",
|
"name": "js-sha1",
|
||||||
"version": "0.2.0",
|
"version": "0.3.0",
|
||||||
"description": "A simple SHA1 hash function for JavaScript supports UTF-8 encoding.",
|
"description": "A simple SHA1 hash function for JavaScript supports UTF-8 encoding.",
|
||||||
"main": "src/sha1.js",
|
"main": "src/sha1.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
+18
-9
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* js-sha1 v0.2.0
|
* js-sha1 v0.3.0
|
||||||
* https://github.com/emn178/js-sha1
|
* https://github.com/emn178/js-sha1
|
||||||
*
|
*
|
||||||
* Copyright 2014-2015, emn178@gmail.com
|
* Copyright 2014-2015, emn178@gmail.com
|
||||||
@@ -14,19 +14,18 @@
|
|||||||
if(NODE_JS) {
|
if(NODE_JS) {
|
||||||
root = global;
|
root = global;
|
||||||
}
|
}
|
||||||
var TYPED_ARRAY = typeof(Uint8Array) != 'undefined';
|
|
||||||
var HEX_CHARS = '0123456789abcdef'.split('');
|
var HEX_CHARS = '0123456789abcdef'.split('');
|
||||||
var EXTRA = [-2147483648, 8388608, 32768, 128];
|
var EXTRA = [-2147483648, 8388608, 32768, 128];
|
||||||
var SHIFT = [24, 16, 8, 0];
|
var SHIFT = [24, 16, 8, 0];
|
||||||
|
|
||||||
var blocks = [];
|
var blocks = [];
|
||||||
|
|
||||||
Array.prototype.__ARRAY__ = true;
|
var sha1 = function(message) {
|
||||||
if(TYPED_ARRAY) {
|
var notString = typeof(message) != 'string';
|
||||||
Uint8Array.prototype.__ARRAY__ = true;
|
if(notString && message.constructor == ArrayBuffer) {
|
||||||
|
message = new Uint8Array(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
var sha1 = function(message) {
|
|
||||||
var h0, h1, h2, h3, h4, block = 0, code, end = false, t, f,
|
var h0, h1, h2, h3, h4, block = 0, code, end = false, t, f,
|
||||||
i, j, index = 0, start = 0, bytes = 0, length = message.length;
|
i, j, index = 0, start = 0, bytes = 0, length = message.length;
|
||||||
|
|
||||||
@@ -42,7 +41,7 @@
|
|||||||
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
||||||
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
||||||
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
||||||
if(message.__ARRAY__) {
|
if(notString) {
|
||||||
for (i = start;index < length && i < 64; ++index) {
|
for (i = start;index < length && i < 64; ++index) {
|
||||||
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
||||||
}
|
}
|
||||||
@@ -223,9 +222,19 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
if(!root.JS_SHA1_TEST && typeof(module) != 'undefined') {
|
if(!root.JS_SHA1_TEST && typeof(module) != 'undefined') {
|
||||||
module.exports = sha1;
|
var crypto = require('crypto');
|
||||||
|
var Buffer = require('buffer').Buffer;
|
||||||
|
|
||||||
|
module.exports = function(message) {
|
||||||
|
if(typeof(message) == 'string') {
|
||||||
|
return crypto.createHash('sha1').update(message, 'utf8').digest('hex');
|
||||||
}
|
}
|
||||||
else if(root) {
|
if(message.constructor == ArrayBuffer) {
|
||||||
|
message = new Uint8Array(message);
|
||||||
|
}
|
||||||
|
return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');
|
||||||
|
};
|
||||||
|
} else if(root) {
|
||||||
root.sha1 = sha1;
|
root.sha1 = sha1;
|
||||||
}
|
}
|
||||||
}(this));
|
}(this));
|
||||||
|
|||||||
@@ -56,5 +56,12 @@
|
|||||||
expect(sha1(new Uint8Array([]))).to.be('da39a3ee5e6b4b0d3255bfef95601890afd80709');
|
expect(sha1(new Uint8Array([]))).to.be('da39a3ee5e6b4b0d3255bfef95601890afd80709');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('ArrayBuffer', function() {
|
||||||
|
it('should be successful', function() {
|
||||||
|
expect(sha1(new ArrayBuffer(0))).to.be('da39a3ee5e6b4b0d3255bfef95601890afd80709');
|
||||||
|
expect(sha1(new ArrayBuffer(1))).to.be('5ba93c9db0cff93f52b521d7420e43f6eda2784f');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
})(sha1);
|
})(sha1);
|
||||||
|
|||||||
Reference in New Issue
Block a user