@ -1,38 +1,36 @@
/ *
/ *
* js - sha1 v0 . 1. 2
* js - sha1 v0 . 1. 3
* https : //github.com/emn178/js-sha1
* https : //github.com/emn178/js-sha1
*
*
* Copyright 2014 , emn178 @ gmail . com
* Copyright 2014 - 2015 , emn178 @ gmail . com
*
*
* Licensed under the MIT license :
* Licensed under the MIT license :
* http : //www.opensource.org/licenses/MIT
* http : //www.opensource.org/licenses/MIT
* /
* /
; ( function ( root , undefined ) {
( function ( root , undefined ) {
'use strict' ;
'use strict' ;
var HEX _CHARS = [ '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ] ;
var HEX _CHARS = '0123456789abcdef' . split ( '' ) ;
var HEX _TABLE = {
'0' : 0 , '1' : 1 , '2' : 2 , '3' : 3 , '4' : 4 , '5' : 5 , '6' : 6 , '7' : 7 , '8' : 8 , '9' : 9 ,
'a' : 10 , 'b' : 11 , 'c' : 12 , 'd' : 13 , 'e' : 14 , 'f' : 15 ,
'A' : 10 , 'B' : 11 , 'C' : 12 , 'D' : 13 , 'E' : 14 , 'F' : 15
} ;
var sha1 = function ( message ) {
var sha1 = function ( message , asciiOnly ) {
var blocks = hasUTF8 ( message ) ? UTF8toBlocks ( message ) : ASCIItoBlocks ( message ) ;
var blocks , h0 , h1 , h2 , h3 , h4 ;
var h0 = 0x67452301 ;
if ( ! asciiOnly && /[^\x00-\x7F]/ . test ( message ) ) {
var h1 = 0xEFCDAB89 ;
blocks = getBlocksFromUtf8 ( message ) ;
var h2 = 0x98BADCFE ;
} else {
var h3 = 0x10325476 ;
blocks = getBlocksFromAscii ( message ) ;
var h4 = 0xC3D2E1F0 ;
}
h0 = 0x67452301 ;
for ( var i = 0 , length = blocks . length ; i < length ; i += 16 )
h1 = 0xEFCDAB89 ;
{
h2 = 0x98BADCFE ;
var w = [ ] ;
h3 = 0x10325476 ;
for ( var j = 0 ; j < 16 ; ++ j )
h4 = 0xC3D2E1F0 ;
for ( var i = 0 , length = blocks . length ; i < length ; i += 16 ) {
var w = [ ] , j ;
for ( j = 0 ; j < 16 ; ++ j ) {
w [ j ] = blocks [ i + j ] ;
w [ j ] = blocks [ i + j ] ;
for ( var j = 16 ; j < 80 ; ++ j )
}
{
for ( j = 16 ; j < 80 ; ++ j ) {
var x = w [ j - 3 ] ^ w [ j - 8 ] ^ w [ j - 14 ] ^ w [ j - 16 ] ;
var x = w [ j - 3 ] ^ w [ j - 8 ] ^ w [ j - 14 ] ^ w [ j - 16 ] ;
w [ j ] = leftrotate ( x , 1 ) ;
w [ j ] = leftrotate ( x , 1 ) ;
}
}
@ -42,10 +40,9 @@
var c = h2 ;
var c = h2 ;
var d = h3 ;
var d = h3 ;
var e = h4 ;
var e = h4 ;
var f , k, tmp;
var f , tmp;
for ( var j = 0 ; j < 20 ; ++ j )
for ( j = 0 ; j < 20 ; ++ j ) {
{
f = ( b & c ) | ( ( ~ b ) & d ) ;
f = ( b & c ) | ( ( ~ b ) & d ) ;
tmp = leftrotate ( a , 5 ) + f + e + 0x5A827999 + w [ j ] ;
tmp = leftrotate ( a , 5 ) + f + e + 0x5A827999 + w [ j ] ;
e = d ;
e = d ;
@ -55,8 +52,7 @@
a = tmp ;
a = tmp ;
}
}
for ( ; j < 40 ; ++ j )
for ( ; j < 40 ; ++ j ) {
{
f = b ^ c ^ d ;
f = b ^ c ^ d ;
tmp = leftrotate ( a , 5 ) + f + e + 0x6ED9EBA1 + w [ j ] ;
tmp = leftrotate ( a , 5 ) + f + e + 0x6ED9EBA1 + w [ j ] ;
e = d ;
e = d ;
@ -67,8 +63,7 @@
}
}
// k = 0x8F1BBCDC;
// k = 0x8F1BBCDC;
for ( ; j < 60 ; ++ j )
for ( ; j < 60 ; ++ j ) {
{
f = ( b & c ) | ( b & d ) | ( c & d ) ;
f = ( b & c ) | ( b & d ) | ( c & d ) ;
tmp = leftrotate ( a , 5 ) + f + e + 0x8F1BBCDC + w [ j ] ;
tmp = leftrotate ( a , 5 ) + f + e + 0x8F1BBCDC + w [ j ] ;
e = d ;
e = d ;
@ -78,8 +73,7 @@
a = tmp ;
a = tmp ;
}
}
for ( ; j < 80 ; ++ j )
for ( ; j < 80 ; ++ j ) {
{
f = b ^ c ^ d ;
f = b ^ c ^ d ;
tmp = leftrotate ( a , 5 ) + f + e + 0xCA62C1D6 + w [ j ] ;
tmp = leftrotate ( a , 5 ) + f + e + 0xCA62C1D6 + w [ j ] ;
e = d ;
e = d ;
@ -104,63 +98,76 @@
} ;
} ;
var toHexString = function ( num ) {
var toHexString = function ( num ) {
var hex = "" ;
var hex = '' ;
for ( var i = 0 ; i < 4 ; i ++ )
for ( var i = 0 ; i < 4 ; i ++ ) {
{
var offset = 3 - i << 3 ;
var offset = 3 - i << 3 ;
hex += HEX _CHARS [ ( num >> ( offset + 4 ) ) & 0x0F ] + HEX _CHARS [ ( num >> offset ) & 0x0F ] ;
hex += HEX _CHARS [ ( num >> ( offset + 4 ) ) & 0x0F ] + HEX _CHARS [ ( num >> offset ) & 0x0F ] ;
}
}
return hex ;
return hex ;
} ;
} ;
var hasUTF8 = function ( message ) {
var getBytesFromUtf8 = function ( str ) {
var i = message . length ;
var bytes = [ ] , index = 0 ;
while ( i -- )
for ( var i = 0 ; i < str . length ; i ++ ) {
if ( message . charCodeAt ( i ) > 127 )
var c = str . charCodeAt ( i ) ;
return true ;
if ( c < 0x80 ) {
return false ;
bytes [ index ++ ] = c ;
} else if ( c < 0x800 ) {
bytes [ index ++ ] = 0xc0 | ( c >> 6 ) ;
bytes [ index ++ ] = 0x80 | ( c & 0x3f ) ;
} else if ( c < 0xd800 || c >= 0xe000 ) {
bytes [ index ++ ] = 0xe0 | ( c >> 12 ) ;
bytes [ index ++ ] = 0x80 | ( ( c >> 6 ) & 0x3f ) ;
bytes [ index ++ ] = 0x80 | ( c & 0x3f ) ;
} else {
c = 0x10000 + ( ( ( c & 0x3ff ) << 10 ) | ( str . charCodeAt ( ++ i ) & 0x3ff ) ) ;
bytes [ index ++ ] = 0xf0 | ( c >> 18 ) ;
bytes [ index ++ ] = 0x80 | ( ( c >> 12 ) & 0x3f ) ;
bytes [ index ++ ] = 0x80 | ( ( c >> 6 ) & 0x3f ) ;
bytes [ index ++ ] = 0x80 | ( c & 0x3f ) ;
}
}
return bytes ;
} ;
} ;
var ASCIItoBlocks = function ( message ) {
var getBlocksFromAscii = function ( message ) {
// a block is 32 bits(4 bytes), a chunk is 512 bits(64 bytes)
// a block is 32 bits(4 bytes), a chunk is 512 bits(64 bytes)
var length = message . length ;
var length = message . length ;
var chunkCount = ( ( length + 8 ) >> 6 ) + 1 ;
var chunkCount = ( ( length + 8 ) >> 6 ) + 1 ;
var blockCount = chunkCount << 4 ; // chunkCount * 16
var blockCount = chunkCount << 4 ; // chunkCount * 16
var blocks = [ ] ;
var blocks = [ ] , i ;
var i ;
for ( i = 0 ; i < blockCount ; ++ i ) {
for ( i = 0 ; i < blockCount ; ++ i )
blocks [ i ] = 0 ;
blocks [ i ] = 0 ;
for ( i = 0 ; i < length ; ++ i )
}
blocks [ i >> 2 ] |= message . charCodeAt ( i ) << ( 3 - ( i % 4 ) << 3 ) ;
for ( i = 0 ; i < length ; ++ i ) {
blocks [ i >> 2 ] |= 0x80 << ( 3 - ( i % 4 ) << 3 ) ;
blocks [ i >> 2 ] |= message . charCodeAt ( i ) << ( 3 - ( i & 3 ) << 3 ) ;
}
blocks [ i >> 2 ] |= 0x80 << ( 3 - ( i & 3 ) << 3 ) ;
blocks [ blockCount - 1 ] = length << 3 ; // length * 8
blocks [ blockCount - 1 ] = length << 3 ; // length * 8
return blocks ;
return blocks ;
} ;
} ;
var UTF8toBlocks = function ( message ) {
var getBlocksFromUtf8 = function ( message ) {
var uri = encodeURIComponent ( message ) ;
var bytes = getBytesFromUtf8 ( message ) ;
var blocks = [ ] ;
var length = bytes . length ;
for ( var i = 0 , bytes = 0 , length = uri . length ; i < length ; ++ i )
var chunkCount = ( ( length + 8 ) >> 6 ) + 1 ;
{
var c = uri . charCodeAt ( i ) ;
if ( c == 37 ) // %
blocks [ bytes >> 2 ] |= ( ( HEX _TABLE [ uri . charAt ( ++ i ) ] << 4 ) | HEX _TABLE [ uri . charAt ( ++ i ) ] ) << ( 3 - ( bytes % 4 ) << 3 ) ;
else
blocks [ bytes >> 2 ] |= c << ( 3 - ( bytes % 4 ) << 3 ) ;
++ bytes ;
}
var chunkCount = ( ( bytes + 8 ) >> 6 ) + 1 ;
var blockCount = chunkCount << 4 ; // chunkCount * 16
var blockCount = chunkCount << 4 ; // chunkCount * 16
var index = bytes >> 2 ;
var blocks = [ ] , i ;
blocks [ index ] |= 0x80 << ( 3 - ( bytes % 4 ) << 3 ) ;
for ( i = 0 ; i < blockCount ; ++ i ) {
for ( var i = index + 1 ; i < blockCount ; ++ i )
blocks [ i ] = 0 ;
blocks [ i ] = 0 ;
blocks [ blockCount - 1 ] = bytes << 3 ; // bytes * 8
}
for ( i = 0 ; i < length ; ++ i ) {
blocks [ i >> 2 ] |= bytes [ i ] << ( 3 - ( i & 3 ) << 3 ) ;
}
blocks [ i >> 2 ] |= 0x80 << ( 3 - ( i & 3 ) << 3 ) ;
blocks [ blockCount - 1 ] = length << 3 ; // length * 8
return blocks ;
return blocks ;
} ;
} ;
if ( typeof ( module ) != 'undefined' )
if ( typeof ( module ) != 'undefined' ) {
module . exports = sha1 ;
module . exports = sha1 ;
else if ( root )
}
else if ( root ) {
root . sha1 = sha1 ;
root . sha1 = sha1 ;
}
} ( this ) ) ;
} ( this ) ) ;