-
-
Save Bostonncity/452055f8520581947718 to your computer and use it in GitHub Desktop.
Compare key and sha1 (http://jsbench.github.io/#0e7bd7e5fef502f90cfa) #jsbench #jsperf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"/> | |
| <title>Compare key and sha1</title> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
| <script src="./suite.js"></script> | |
| </head> | |
| <body> | |
| <h1>Open the console to view the results</h1> | |
| <h2><code>cmd + alt + j</code> or <code>ctrl + alt + j</code></h2> | |
| </body> | |
| </html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| "use strict"; | |
| (function (factory) { | |
| if (typeof Benchmark !== "undefined") { | |
| factory(Benchmark); | |
| } else { | |
| factory(require("benchmark")); | |
| } | |
| })(function (Benchmark) { | |
| var suite = new Benchmark.Suite; | |
| Benchmark.prototype.setup = function () { | |
| function sha1 ( str ) { // Calculate the sha1 hash of a string | |
| // | |
| // + original by: Webtoolkit.info (http://www.webtoolkit.info/) | |
| // + namespaced by: Michael White (http://crestidg.com) | |
| var rotate_left = function(n,s) { | |
| var t4 = ( n<<s ) | (n>>>(32-s)); | |
| return t4; | |
| }; | |
| var lsb_hex = function(val) { | |
| var str=""; | |
| var i; | |
| var vh; | |
| var vl; | |
| for( i=0; i<=6; i+=2 ) { | |
| vh = (val>>>(i*4+4))&0x0f; | |
| vl = (val>>>(i*4))&0x0f; | |
| str += vh.toString(16) + vl.toString(16); | |
| } | |
| return str; | |
| }; | |
| var cvt_hex = function(val) { | |
| var str=""; | |
| var i; | |
| var v; | |
| for( i=7; i>=0; i-- ) { | |
| v = (val>>>(i*4))&0x0f; | |
| str += v.toString(16); | |
| } | |
| return str; | |
| }; | |
| var blockstart; | |
| var i, j; | |
| var W = new Array(80); | |
| var H0 = 0x67452301; | |
| var H1 = 0xEFCDAB89; | |
| var H2 = 0x98BADCFE; | |
| var H3 = 0x10325476; | |
| var H4 = 0xC3D2E1F0; | |
| var A, B, C, D, E; | |
| var temp; | |
| str = this.utf8_encode(str); | |
| var str_len = str.length; | |
| var word_array = new Array(); | |
| for( i=0; i<str_len-3; i+=4 ) { | |
| j = str.charCodeAt(i)<<24 | str.charCodeAt(i+1)<<16 | | |
| str.charCodeAt(i+2)<<8 | str.charCodeAt(i+3); | |
| word_array.push( j ); | |
| } | |
| switch( str_len % 4 ) { | |
| case 0: | |
| i = 0x080000000; | |
| break; | |
| case 1: | |
| i = str.charCodeAt(str_len-1)<<24 | 0x0800000; | |
| break; | |
| case 2: | |
| i = str.charCodeAt(str_len-2)<<24 | str.charCodeAt(str_len-1)<<16 | 0x08000; | |
| break; | |
| case 3: | |
| i = str.charCodeAt(str_len-3)<<24 | str.charCodeAt(str_len-2)<<16 | str.charCodeAt(str_len-1)<<8 | 0x80; | |
| break; | |
| } | |
| word_array.push( i ); | |
| while( (word_array.length % 16) != 14 ) word_array.push( 0 ); | |
| word_array.push( str_len>>>29 ); | |
| word_array.push( (str_len<<3)&0x0ffffffff ); | |
| for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) { | |
| for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i]; | |
| for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); | |
| A = H0; | |
| B = H1; | |
| C = H2; | |
| D = H3; | |
| E = H4; | |
| for( i= 0; i<=19; i++ ) { | |
| temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; | |
| E = D; | |
| D = C; | |
| C = rotate_left(B,30); | |
| B = A; | |
| A = temp; | |
| } | |
| for( i=20; i<=39; i++ ) { | |
| temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; | |
| E = D; | |
| D = C; | |
| C = rotate_left(B,30); | |
| B = A; | |
| A = temp; | |
| } | |
| for( i=40; i<=59; i++ ) { | |
| temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; | |
| E = D; | |
| D = C; | |
| C = rotate_left(B,30); | |
| B = A; | |
| A = temp; | |
| } | |
| for( i=60; i<=79; i++ ) { | |
| temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; | |
| E = D; | |
| D = C; | |
| C = rotate_left(B,30); | |
| B = A; | |
| A = temp; | |
| } | |
| H0 = (H0 + A) & 0x0ffffffff; | |
| H1 = (H1 + B) & 0x0ffffffff; | |
| H2 = (H2 + C) & 0x0ffffffff; | |
| H3 = (H3 + D) & 0x0ffffffff; | |
| H4 = (H4 + E) & 0x0ffffffff; | |
| } | |
| var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4); | |
| return temp.toLowerCase(); | |
| } | |
| var key = "KIJASH8A7S"; | |
| }; | |
| suite.add("var value = sha1(key);", function () { | |
| var value = sha1(key); | |
| value == "00553fdbeffd520b8b29cf15c4441abd9382b0c7"; | |
| }); | |
| suite.add("var value = key;", function () { | |
| var value = key; | |
| value == "KIJASH8A7S"; | |
| }); | |
| suite.on("cycle", function (evt) { | |
| console.log(" " + evt); | |
| }); | |
| suite.on("complete", function (evt) { | |
| var results = evt.currentTarget.sort(function (a, b) { | |
| return b.hz - a.hz; | |
| }); | |
| results.forEach(function (item) { | |
| console.log(" " + item); | |
| }); | |
| }); | |
| console.log("Compare key and sha1"); | |
| console.log(new Array(30).join("-")); | |
| suite.run(); | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment