UNPKG

insanehash

Version:

Use the lastest SHA3 cryptographic hash algorithm from NIST Hash Competition based on Chris Drost implementation

2 lines 11 kB
#!/usr/bin/env node !function(){"use strict";var r,n,o,t,e,i,s,h,c,l,a=(r=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],e=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479],l=function(r){return r<0&&(r+=4*(1<<30)),("00000000"+r.toString(16)).slice(-8)},i=[[16,50,84,118,152,186,220,254],[174,132,249,109,193,32,123,53],[139,12,37,223,234,99,23,73],[151,19,205,235,98,165,4,143],[9,117,66,250,30,203,134,211],[194,166,176,56,212,87,239,145],[92,241,222,164,112,54,41,184],[189,231,28,147,5,79,104,162],[246,158,59,128,44,125,65,90],[42,72,103,81,191,233,195,13]],s=function(r,n,o){var t=h[r]^h[n];h[r]=t>>>o|t<<32-o},n=function(r,n,l,a,u){var f=t+i[o][r]%16,g=t+(i[o][r]>>4);l=4+l%4,a=8+a%4,u=12+u%4,h[n%=4]+=h[l]+(c[f]^e[g%16]),s(u,n,16),h[a]+=h[u],s(l,a,12),h[n]+=h[l]+(c[g]^e[f%16]),s(u,n,8),h[a]+=h[u],s(l,a,7)},function(i,s){var a,u,f,g,p,v,d,m;for(s instanceof Array&&4===s.length||(s=[0,0,0,0]),u=r.slice(0),a=e.slice(0,8),o=0;o<4;o+=1)a[o]^=s[o];if(p=(f=16*i.length)%512>446||f%512==0?0:f,f%512==432)i+="老";else{for(i+="耀";i.length%32!=27;)i+="\0";i+=""}for(c=[],m=0;m<i.length;m+=2)c.push(65536*i.charCodeAt(m)+i.charCodeAt(m+1));for(c.push(0),c.push(f),v=c.length-16,d=0,t=0;t<c.length;t+=16){for(d+=512,g=t===v?p:Math.min(f,d),(h=u.concat(a))[12]^=g,h[13]^=g,o=0;o<10;o+=1)for(m=0;m<8;m+=1)m<4?n(m,m,m,m,m):n(m,m,m+1,m+2,m+3);for(m=0;m<8;m+=1)u[m]^=s[m%4]^h[m]^h[m+8]}return u.map(l).join("")});exports.blake32=a;var u=function(){var r,n,o,t,e,i,s,h,c,l,a,u,f,g,p;for(l=function(r){return("00"+r.toString(16)).slice(-2)},a=function(r){return l(255&r)+l(r>>>8)+l(r>>>16)+l(r>>>24)},r=[],n=[],t=[],o=0;o<16;o+=1)n[o]=2863311520+o,r[o]=1078018627+67372036*o,t[o]=89478485*(o+16);return f=function(r,n){return(r<<n)+(r>>>32-n)},e=[19,23,25,29,4,8,12,15,3,2,1,2,1,1,2,2],g=function(r,n){return n<4?f(r,e[n])^f(r,e[n+4])^r<<e[n+8]^r>>>e[n+12]:r^r>>>n-3},i=[21,7,5,1,3,22,4,11,24,6,22,20,3,4,7,2,5,24,21,21,16,6,22,18],p=function(r,n){return(n=i[n])<16?r>>>n:r<<n-16},s=[29,13,27,13,25,21,18,4,5,11,17,24,19,31,5,24],h=[5,7,10,13,14],c=[0,3,7,13,16,19,23,27],u=function(r,n){var o,e,i,l,a,u,v,d;for(d=[],i=0;i<16;i+=1){for(u=0,l=0;l<5;l+=1)v=n[a=(i+h[l])%16]^r[a],u+=(s[i]>>l)%2?v:-v;d[i]=n[(i+1)%16]+g(u,i%5)}for(i=0;i<16;i+=1)for(u=(i+3)%16,v=(i+10)%16,d[i+16]=n[(i+7)%16]^t[i]+f(r[i],1+i)+f(r[u],1+u)-f(r[v],1+v),a=1;a<17;a+=1)u=d[i+a-1],d[i+16]+=i<2?g(u,a%4):a>14?g(u,a-11):a%2?u:f(u,c[a/2]);for(o=e=0,i=16;i<24;i+=1)o^=d[i],e^=d[i+8];for(e^=o,i=0;i<16;i+=1)n[i]=i<8?(o^d[i]^d[i+24])+(r[i]^p(e,i)^p(d[i+16],i+16)):(e^r[i]^d[i+16])+(d[i]^p(o,i)^d[16+(i-1)%8])+f(n[(i-4)%8],i+1);return n},function(o){var t,e,i,s;for(t=16*o.length,o+="€";o.length%32!=28;)o+="\0";for(i=[],e=0;e<o.length;e+=2)i.push(o.charCodeAt(e)+65536*o.charCodeAt(e+1));for(i.push(t),i.push(0),s=r.slice(0),e=0;e<i.length;e+=16)u(i.slice(e,e+16),s);return u(s,n.slice(0)).slice(8,16).map(a).join("")}}();exports.bmw=u;var f=function(){var r,n,o,t,e,i,s,h,c,l,a,u;return 256,r=[32,32,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],c=function(n,o){for(i=0;i<16;i+=1)r[16+i]+=r[i],r[i]=r[i]<<n^r[i]>>>o},l=function(n,o){for(i=0;i<16;i+=1)i&n&&(s=i^n,e=r[i]^r[s+16],r[i]=r[s]^r[i+16],r[s]=e);for(i=16;i<32;i+=1)i&o&&(s=i^o,e=r[i],r[i]=r[s],r[s]=e)},(n=function(r){for(r*=16,h=0;h<r;h+=1)c(7,25),l(8,2),c(11,21),l(4,1)})(10),t=r.slice(0),a=function(r){return("00"+r.toString(16)).slice(-2)},u=function(r){return a(255&r)+a(r>>>8)+a(r>>>16)+a(r>>>24)},function(e){var i,s;for(r=t.slice(0),e+="€";e.length%16>0;)e+="\0";for(o=[],s=0;s<e.length;s+=2)o.push(e.charCodeAt(s)+65536*e.charCodeAt(s+1));for(i=0;i<o.length;i+=8){for(s=0;s<8;s+=1)r[s]^=o[i+s];n(1)}return r[31]^=1,n(10),r.map(u).join("").substring(0,64)}}();exports.cubehash=f;var g=function(){var r,n,o,t,e,i,s,h,c,l,a,u,f,g,p,v;return(u=function(r,n){this.lo=r||0,this.hi=n||0}).clone=function(r){return new u(r.lo,r.hi)},u.prototype={xor:function(r){return this.lo^=r.lo,this.hi^=r.hi,this},plus:(p=4*(1<<30),v=function(r,n){var o=r+n;return r<0&&(o+=p),n<0&&(o+=p),o},function(r){return this.lo=v(this.lo,r.lo),this.hi=(v(this.hi,r.hi)+(this.lo>=p?1:0))%p,this.lo=this.lo%p,this}),circ:function(r){var n,o;return r>=32&&(n=this.lo,this.lo=this.hi,this.hi=n,r-=32),o=32-r,n=(this.hi<<r)+(this.lo>>>o),this.lo=(this.lo<<r)+(this.hi>>>o),this.hi=n,this},toString:(f=function(r){return("00"+r.toString(16)).slice(-2)},g=function(r){return f(255&r)+f(r>>>8)+f(r>>>16)+f(r>>>24)},function(){return g(this.lo)+g(this.hi)})},r=[0,2,4,6,2,4,6,0,4,6,0,2,6,0,2,4],n=[1,3,5,7,1,7,5,3,1,3,5,7,1,7,5,3],o=String.fromCharCode,t=o(0),e=t+t+t+t,e+=e+e+e,e+=e,i=[[46,36,19,37,33,27,14,42,17,49,36,39,44,9,54,56],[39,30,34,24,13,50,10,17,25,29,39,43,8,35,56,22]],a=function(r,n,o){for(var t=0;t<8;t+=1)c[t].plus(r[(o+t)%9]);c[5].plus(n[o%3]),c[6].plus(n[(o+1)%3]),c[7].plus(new u(o))},l=function(o){var t,e,i;for(i=0;i<16;i+=1)e=n[i],c[t=r[i]].plus(c[e]),c[e].circ(o[i]).xor(c[t])},s=function(r,n){var o,t,s,h,f,g,p,v,d,m;for((m=n.length)%32?n+=e.slice(m%32):0===m&&(n=e),t=[],h=0,s=0;s<n.length;s+=4)t[h]=new u(n.charCodeAt(s)+65536*n.charCodeAt(s+1),n.charCodeAt(s+2)+65536*n.charCodeAt(s+3)),h+=1;for(p=1<<30,r<<=24,v=t.length-8,f=0;f<=v;f+=8){for((d=f===v?[new u(2*m),new u(0,p+r+(1<<31))]:[new u(8*f+64),new u(0,p+r)])[2]=(new u).xor(d[0]).xor(d[1]),(o=c)[8]=new u(2851871266,466688986),s=0;s<8;s+=1)o[8].xor(o[s]);for(c=t.slice(f,f+8).map(u.clone),g=0;g<18;g+=1)a(o,d,g),l(i[g%2]);for(a(o,d,g),s=0;s<8;s+=1)c[s].xor(t[f+s]);p=0}},c=[new u,new u,new u,new u,new u,new u,new u,new u],s(4,o(18515,13121,1,0,512)+e.slice(5,16)),h=c,function(r){return c=h.map(u.clone),s(48,r),s(63,t+t+t+t),c.join("")}}();exports.skein=g;var p=function(){var r,n,o,t,e,i,s,h,c,l,a,u,f;return r=[0,2,4,6,2,4,6,0,4,6,0,2,6,0,2,4],n=[1,3,5,7,1,7,5,3,1,3,5,7,1,7,5,3],o=String.fromCharCode,t=o(0),e=t+t+t+t,e+=e+e+e,i=[[5,16,17,10,11,9,7,25,6,12,20,28,17,12,6,25],[24,2,2,21,17,15,13,11,21,12,4,22,15,23,18,5]],f=function(r,n,o){for(var t=0;t<8;t+=1)c[t]+=r[(o+t)%9];c[5]+=n[o%5],c[6]+=n[(o+1)%5],c[7]+=o},l=function(o){var t,e,i;for(i=0;i<16;i+=1)e=n[i],c[t=r[i]]+=c[e],c[e]=c[t]^(c[e]<<o[i]|c[e]>>>32-o[i])},s=function(r,n){var o,t,s,h,a,u,g,p,v,d;for((d=n.length)%16?n+=e.slice(d%16):0===d&&(n=e),t=[],h=0,s=0;s<n.length;s+=2)t[h]=n.charCodeAt(s)+65536*n.charCodeAt(s+1),h+=1;for(g=1<<30,r<<=24,p=t.length-8,a=0;a<=p;a+=8){for((v=a===p?[2*d,0,0,g+r+(1<<31)]:[4*a+32,0,0,g+r])[4]=v[0]^v[3],(o=c)[8]=1431655765,s=0;s<8;s+=1)o[8]^=o[s];for(c=t.slice(a,a+8),u=0;u<18;u+=1)f(o,v,u),l(i[u%2]);for(f(o,v,u),s=0;s<8;s+=1)c[s]^=t[a+s];g=0}},a=function(r){return("00"+r.toString(16)).slice(-2)},u=function(r){return a(255&r)+a(r>>>8)+a(r>>>16)+a(r>>>24)},c=[0,0,0,0,0,0,0,0],s(4,o(21352,28267,1,0,256)+e.slice(5)),h=c,function(r){return c=h.slice(0),s(48,r),s(63,t+t+t+t),c.map(u).join("")}}();exports.halfskein=p;var v=function(){var r,n,o,t,e,i,s,h,c,l,a,u;for(e=function(r,n){return(r<<n)+(r>>>32-n)},a=function(r){return("00"+r.toString(16)).slice(-2)},u=function(r){return a(255&r)+a(r>>>8)+a(r>>>16)+a(r>>>24)},i=function(i,s,h){var c,l,a;for(c=0;c<16;c+=1)n[c]=e(n[c]+t[i+c],17);for(r[0]^=s,r[1]^=h,l=0;l<3;l+=1)for(c=0;c<16;c+=1)r[a=(c+16*l)%12]=3*(r[a]^5*e(r[(a+11)%12],15)^o[(24-c)%16])^n[(c+13)%16]^n[(c+9)%16]&~n[(c+6)%16]^t[i+c],n[c]=e(n[c],1)^~r[a];for(l=0;l<36;l+=1)r[l%12]+=o[(l+3)%16];for(c=0;c<16;c+=1)o[c]-=t[i+c];a=n,n=o,o=a},n=[],o=[],t=[],l=0;l<16;l+=1)n[l]=o[l]=0,t[l]=256+l,t[l+16]=272+l;return r=n.slice(4),i(0,-1,-1),i(16,0,0),s=r,h=n,c=o,function(e){var l,a=0;for(r=s.slice(0),n=h.slice(0),o=c.slice(0),e+="€";e.length%32;)e+="\0";for(t=[],l=0;l<e.length;l+=2)t.push(e.charCodeAt(l)+65536*e.charCodeAt(l+1));for(l=0;l<t.length;l+=16)i(l,a+=1,0);return i(l-=16,a,0),i(l,a,0),i(l,a,0),o.slice(8,16).map(u).join("")}}();exports.shabal=v;var d=function(){var r,n,o,t,e,i,s,h,c,l;return(o=function(r,n){this.lo=r||0,this.hi=n||0}).clone=function(r){return new o(r.lo,r.hi)},o.prototype={xor:function(r){return this.lo^=r.lo,this.hi^=r.hi,this},not:function(){return new o(~this.lo,~this.hi)},and:function(r){return this.lo&=r.lo,this.hi&=r.hi,this},circ:function(r){var n,o;return r>=32&&(n=this.lo,this.lo=this.hi,this.hi=n,r-=32),0===r?this:(o=32-r,n=(this.hi<<r)+(this.lo>>>o),this.lo=(this.lo<<r)+(this.hi>>>o),this.hi=n,this)},toString:(c=function(r){return("00"+r.toString(16)).slice(-2)},l=function(r){return c(255&r)+c(r>>>8)+c(r>>>16)+c(r>>>24)},function(){return l(this.lo)+l(this.hi)})},e=function(r){var n,t=[];for(n=0;n<r;n+=1)t[n]=new o;return t},n=function(r){var t=function(r,n){return t.array[r%5+n%5*5]};return t.array=r||e(25),t.clone=function(){return new n(t.array.map(o.clone))},t},t=[0,10,20,5,15,16,1,11,21,6,7,17,2,12,22,23,8,18,3,13,14,24,9,19,4],i="0,1;0,8082;z,808A;z,yy;0,808B;0,y0001;z,y8081;z,8009;0,8A;0,88;0,y8009;0,y000A;0,y808B;z,8B;z,8089;z,8003;z,8002;z,80;0,800A;z,y000A;z,y8081;z,8080;0,y0001;z,y8008".replace(/z/g,"80000000").replace(/y/g,"8000").split(";").map((function(r){var n=r.split(",");return new o(parseInt(n[1],16),parseInt(n[0],16))})),s=[0,1,62,28,27,36,44,6,55,20,3,10,43,25,39,41,45,15,21,8,18,2,61,56,14],h=function(){var n,h,c,l,a,u,f,g;for(f=0;f<24;f+=1){for(a=e(5),n=0;n<5;n+=1)for(h=0;h<5;h+=1)a[n].xor(r(n,h));for(u=(u=a.map(o.clone)).concat(u.splice(0,1)),n=0;n<5;n+=1)u[n].circ(1).xor(a[(n+4)%5]);for(n=0;n<5;n+=1)for(h=0;h<5;h+=1)r(n,h).xor(u[n]);for(n=0;n<5;n+=1)for(h=0;h<5;h+=1)r(n,h).circ(s[5*h+n]);for(g=r.array.slice(0),c=0;c<25;c+=1)r.array[t[c]]=g[c];for(l=r.clone(),n=0;n<5;n+=1)for(h=0;h<5;h+=1)r(n,h).xor(l(n+1,h).not().and(l(n+2,h)));r(0,0).xor(i[f])}},function(t){for(r=new n,t+=" ƈ";t.length%68!=0;)t+="\0";var e,i;for(e=0;e<t.length;e+=68){for(i=0;i<68;i+=4)r.array[i/4].xor(new o(t.charCodeAt(e+i)+65536*t.charCodeAt(e+i+1),t.charCodeAt(e+i+2)+65536*t.charCodeAt(e+i+3)));h()}return r.array.slice(0,4).join("")}}();if(exports.keccak=d,require.main===module){var m=require("commander");m.version("0.1.0").usage("[options] 'TEXT' \n PS: Don't use double quotes, use single quotes! \n\n Examples: \n insanehash -b 'Hello World!' \n insanehash --skein 'Hello World!'").option("-b, --blake32","Use the blake32 algorithm").option("-m, --bmw","Use the bmw algorithm").option("-c, --cubehash","Use the cubehash algorithm").option("-s, --skein","Use the skein algorithm").option("-k, --halfskein","Use the halfskein algorithm").option("-a, --shabal","Use the shabal algorithm").option("-e, --keccak","Use the keccak algorithm").parse(process.argv),m.args.length||(m.help(),process.exit(1)),void 0!==m.blake32?console.log(a(m.args[0])):void 0!==m.bmw?console.log(u(m.args[0])):void 0!==m.cubehash?console.log(f(m.args[0])):void 0!==m.skein?console.log(g(m.args[0])):void 0!==m.halfskein?console.log(p(m.args[0])):void 0!==m.shabal?console.log(v(m.args[0])):void 0!==m.keccak&&console.log(d(m.args[0]))}}();