diff --git a/sha1.html b/sha1.html index 9e91a99..7d1ea2d 100644 --- a/sha1.html +++ b/sha1.html @@ -10,7 +10,7 @@ { sha1_profile(); if ( sha1_verify() ) - document.getElementById('result').innerHTML = sha1("abcde"); + document.getElementById('result').innerHTML = sha1_string("abcde"); else document.getElementById('result').innerHTML = "Error!!!"; } diff --git a/sha1.js b/sha1.js index 119647c..9ba52ca 100644 --- a/sha1.js +++ b/sha1.js @@ -36,9 +36,9 @@ function num_to_big_endian_64(num) function bytes_to_big_endian_32(array) { var result = []; - for (var i = 0; i < (array.length/4); i++) + for (var i = 0; i < array.length; i += 4) { - result.push((array[i*4+0] << 24) | (array[i*4+1] << 16) | (array[i*4+2] << 8) | array[i*4+3]); + result.push((array[i] << 24) | (array[i+1] << 16) | (array[i+2] << 8) | array[i+3]); }; return result; } @@ -64,10 +64,12 @@ function to_hex(x) ); } -function sha1(text) +function sha1(byte_array) { - // get text into byte array - var message = str_to_bytes(text); + // copy array + var message = byte_array.slice(); + + // store message size for later use var message_size_in_bits = message.length * 8; // Initialize variables: @@ -111,8 +113,7 @@ function sha1(text) var c = h2; var d = h3; var e = h4; - var f = 0; - var k = 0; + var f, k, temp; // Main loop: for (var i = 0; i < 80; i++) @@ -138,7 +139,7 @@ function sha1(text) k = 0xca62c1d6; } - var temp = (rol(a,5) + f + e + k + w[i]) & 0xffffffff; + temp = (rol(a,5) + f + e + k + w[i]) & 0xffffffff; e = d; d = c; c = rol(b,30); @@ -158,11 +159,20 @@ function sha1(text) return to_hex(h0) + to_hex(h1) + to_hex(h2) + to_hex(h3) + to_hex(h4); } +function sha1_string(str) +{ + // get text into byte array + var message = str_to_bytes(str); + + // perform SHA-1 + return sha1(message); +} + function sha1_verify() { return Boolean( - (sha1("The quick brown fox jumps over the lazy dog") == "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12") && - (sha1("") == "da39a3ee5e6b4b0d3255bfef95601890afd80709") + (sha1_string("The quick brown fox jumps over the lazy dog") == "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12") && + (sha1_string("") == "da39a3ee5e6b4b0d3255bfef95601890afd80709") ); } @@ -170,6 +180,6 @@ function sha1_profile() { var text = "blah"; for (var i = 0; i < 250; i++) { - text = sha1(text); + text = sha1_string(text); }; }