1/** 2* Secure Hash Algorithm (SHA1) 3* http://www.webtoolkit.info/ 4**/ 5function SHA1(msg) { 6 function rotate_left(n,s) { 7 var t4 = ( n<<s ) | (n>>>(32-s)); 8 return t4; 9 }; 10 function lsb_hex(val) { 11 var str=''; 12 var i; 13 var vh; 14 var vl; 15 for( i=0; i<=6; i+=2 ) { 16 vh = (val>>>(i*4+4))&0x0f; 17 vl = (val>>>(i*4))&0x0f; 18 str += vh.toString(16) + vl.toString(16); 19 } 20 return str; 21 }; 22 function cvt_hex(val) { 23 var str=''; 24 var i; 25 var v; 26 for( i=7; i>=0; i-- ) { 27 v = (val>>>(i*4))&0x0f; 28 str += v.toString(16); 29 } 30 return str; 31 }; 32 function Utf8Encode(string) { 33 string = string.replace(/\r\n/g,'\n'); 34 var utftext = ''; 35 for (var n = 0; n < string.length; n++) { 36 var c = string.charCodeAt(n); 37 if (c < 128) { 38 utftext += String.fromCharCode(c); 39 } 40 else if((c > 127) && (c < 2048)) { 41 utftext += String.fromCharCode((c >> 6) | 192); 42 utftext += String.fromCharCode((c & 63) | 128); 43 } 44 else { 45 utftext += String.fromCharCode((c >> 12) | 224); 46 utftext += String.fromCharCode(((c >> 6) & 63) | 128); 47 utftext += String.fromCharCode((c & 63) | 128); 48 } 49 } 50 return utftext; 51 }; 52 var blockstart; 53 var i, j; 54 var W = new Array(80); 55 var H0 = 0x67452301; 56 var H1 = 0xEFCDAB89; 57 var H2 = 0x98BADCFE; 58 var H3 = 0x10325476; 59 var H4 = 0xC3D2E1F0; 60 var A, B, C, D, E; 61 var temp; 62 msg = Utf8Encode(msg); 63 var msg_len = msg.length; 64 var word_array = new Array(); 65 for( i=0; i<msg_len-3; i+=4 ) { 66 j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 | 67 msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3); 68 word_array.push( j ); 69 } 70 switch( msg_len % 4 ) { 71 case 0: 72 i = 0x080000000; 73 break; 74 case 1: 75 i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000; 76 break; 77 case 2: 78 i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000; 79 break; 80 case 3: 81 i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8 | 0x80; 82 break; 83 } 84 word_array.push( i ); 85 while( (word_array.length % 16) != 14 ) word_array.push( 0 ); 86 word_array.push( msg_len>>>29 ); 87 word_array.push( (msg_len<<3)&0x0ffffffff ); 88 for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) { 89 for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i]; 90 for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); 91 A = H0;
92 B = H1; 93 C = H2; 94 D = H3; 95 E = H4; 96 for( i= 0; i<=19; i++ ) { 97 temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; 98 E = D; 99 D = C; 100 C = rotate_left(B,30); 101 B = A; 102 A = temp; 103 } 104 for( i=20; i<=39; i++ ) { 105 temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; 106 E = D; 107 D = C; 108 C = rotate_left(B,30); 109 B = A; 110 A = temp; 111 } 112 for( i=40; i<=59; i++ ) { 113 temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; 114 E = D; 115 D = C; 116 C = rotate_left(B,30); 117 B = A; 118 A = temp; 119 } 120 for( i=60; i<=79; i++ ) { 121 temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; 122 E = D; 123 D = C; 124 C = rotate_left(B,30); 125 B = A; 126 A = temp; 127 } 128 H0 = (H0 + A) & 0x0ffffffff; 129 H1 = (H1 + B) & 0x0ffffffff; 130 H2 = (H2 + C) & 0x0ffffffff; 131 H3 = (H3 + D) & 0x0ffffffff; 132 H4 = (H4 + E) & 0x0ffffffff; 133 } 134 var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4); 135 136 return temp.toLowerCase(); 137}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.