function CKSHA256(){this.LICENSE='Copyright CertainKey Inc. 2001-2010.  No unauthorized use permitted.';this.PADDING='\200';for(var i=1;i<128;i++)this.PADDING+='\000';this.K=[0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2];this.xform=function(S,I){var rol=function(x,n){return(x<<n)|(x>>>(32-n));},F=function(x){return(x+4294967296)%4294967296;},a,b,c,d,e,f,g,h,t1,t2,W=[],i;W[15]=0;for(i=0;i<16;i++){t1=(I[(4*i)]&0xff);t1<<=8;t1|=(I[(4*i)+1]&0xff);t1<<=8;t1|=(I[(4*i)+2]&0xff);t1<<=8;t1|=(I[(4*i)+3]&0xff);W[i]=t1;}for(i=16;i<64;i++){t1=W[i-15];t1=rol(t1,25)^rol(t1,14)^(t1>>>3);t2=W[i-2];t2=rol(t2,15)^rol(t2,13)^(t2>>>10);W[i]=F(t2+W[i-7]+t1+W[i-16]);}a=S[0];b=S[1];c=S[2];d=S[3];e=S[4];f=S[5];g=S[6];h=S[7];for(i=0;i<64;i++){t1=F((rol(e,26)^rol(e,21)^rol(e,7))+((e&f)^(~e&g))+h+this.K[i]+W[i]);t2=F((rol(a,30)^rol(a,19)^rol(a,10))+((a&b)^(a&c)^(b&c)));h=g;g=f;f=e;e=F(d+t1);d=c;c=b;b=a;a=F(t1+t2);}S[0]=F(S[0]+a);S[1]=F(S[1]+b);S[2]=F(S[2]+c);S[3]=F(S[3]+d);S[4]=F(S[4]+e);S[5]=F(S[5]+f);S[6]=F(S[6]+g);S[7]=F(S[7]+h);for(i=0;i<64;i++)W[i]=0;a=b=c=d=e=f=g=h=t1=t2=0;};this.Init=function(){CKSHA256.selfTest();this.count=[0,0];this.state=[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19];this.buf=[];for(var i=0;i<128;i++)this.buf[i]=0;};this.Init();this.Update=function(I,ILen){var i,j,index,partLen,temp=[];temp[4*16-1]=0;index=((this.count[0]>>>3)&0x3f);if(ILen==null)ILen=I.length;if((this.count[0]+=(ILen<<3))<(ILen<<3)){this.count[1]++;this.count[1]+=(ILen>>>29);}partLen=64-index;if(ILen >=partLen){for(j=0;j<partLen;j++)this.buf[index+j]=I.charCodeAt(j);this.xform(this.state,this.buf);for(i=partLen;i+63<ILen;i+=64){for(j=0;j<4*16;j++)temp[j]=I.charCodeAt(i+j);this.xform(this.state,temp);}for(j=0;j<4*16;j++)temp[j]=0;index=0;}else{i=0;}for(j=0;j<ILen-i;j++){this.buf[index+j]=I.charCodeAt(i+j);}};this.Final=function(D){var t,i,tmp=[0,0,0,0,0,0,0,0];this.FinalInt(tmp);for(i=0;i<8;i++){t=tmp[i];D[4*i+3]=(t&0xff);t>>>=8;D[4*i+2]=(t&0xff);t>>>=8;D[4*i+1]=(t&0xff);t>>>=8;D[4*i]=(t&0xff);}};this.FinalInt=function(D){var bits='',index,padLen,t,i,bite=function(n){return String.fromCharCode(n&0xff)};t=this.count[1];bits+=bite(t>>>24);bits+=bite(t>>>16);bits+=bite(t>>>8);bits+=bite(t);t=this.count[0];bits+=bite(t>>>24);bits+=bite(t>>>16);bits+=bite(t>>>8);bits+=bite(t);index=(this.count[0]>>>3)&0x3f;padLen=(index < 56)?(56-index):((64+56)-index);this.Update(this.PADDING,padLen);this.Update(bits,8);for(i=0;i<8;i++){D[i]=this.state[i];this.state[i]=0;}this.count[0]=this.count[1]=0;for(i=0;i<128;i++)this.buf[i]=0;};this.digest=function(I,Ilen){this.Init();this.Update(I,Ilen);var ret=[];this.Final(ret);return ret;};this.digestInt=function(I,Ilen){this.Init();this.Update(I,Ilen);var ret=[];this.FinalInt(ret);return ret;};};CKSHA256.ready=false;CKSHA256.selfTest=function(){if(CKSHA256.ready)return;CKSHA256.ready=true;var hex8=function(n){return hex_(n,8);};var hex=function(n){return hex_(n,2);};var hex_=function(n,l){var ret='',z='0123456789abcdef'.split('');for(var i=0;i<l;i++){ret=z[n&0xf]+ret;n>>>=4;}return ret;};var res=[],i,str=['abc','abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'],ans=['ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad','248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'];res[8*4-1]=0;for(i=0;i<8*4;i++)res[i]=0;md=new CKSHA256();for(t=0;t<str.length;t++){md.Init();md.Update(str[t],str[t].length);md.Final(res);X='';for(i=0;i<8*4;i++)X+=hex(res[i]);if(X.indexOf(ans[t])!=0){alert('SHA-256 KAT test failed!!!\n'+X+'\n'+ans[t]);CKSHA256.ready=false;return 'SHA-256 KAT test failed.';}}return 'SHA-256 KAT test passed.';};var isIE=navigator.userAgent.indexOf("MSIE")!=-1,running=true;ckmkpasswd=new Object();CKSHA256.Init();ok=new Image();ok.src="http://www.certainkey.com/demos/mkpasswd/greencheck.gif";bad=new Image();bad.src="http://www.certainkey.com/demos/mkpasswd/redx.gif";var okImg='<img src="'+ok.src+'">';var badImg='<img src="'+bad.src+'">';var hexPlease=0;var pswdLen=8;int2charZ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%&()";function int2char(x){tmp=int2charZ;if(hexPlease)tmp=tmp.substr(0,15);return tmp.charAt(x%tmp.length);}ckmkpasswd.updateHTML=function(){document.getElementById("samples").innerHTML=img(gatheredPoints/5);if(okImg!=0&&500 < gatheredPoints){document.getElementById("samplesOK").innerHTML=okImg;okImg=0;}document.getElementById("time").innerHTML=time/1000;document.getElementById("_xx").innerHTML=_x;document.getElementById("_yy").innerHTML=_y;if(okImg==0){var e=document.getElementById("password");if(e.innerHTML.indexOf(password)==-1)e.innerHTML=password.replace('&','&amp;');}setTimeout("ckmkpasswd.updateHTML()",500);};ckmkpasswd.updateHTML();var gatheredPoints=0;var _x='&nbsp;',_y='&nbsp;',time='&nbsp;',password='';function getMousePosition(e){if(!isIE){_x=e.pageX;_y=e.pageY;}if(isIE){_x=event.clientX+document.body.scrollLeft;_y=event.clientY+document.body.scrollTop;}time=(new Date()).getTime();gatheredPoints++;D=time+","+_x+","+_y;CKSHA256.Update(D,D.length);if(CKSHA256.count[0]>=256*8){var i,res=[];res[8*4-1]=0;CKSHA256.Final(res);X="";for(i=0;i<res.length;i++)X+=int2char(res[i]);password=X.substr(0,pswdLen);CKSHA256.Init();CKSHA256.Update(X,X.length);}return;}function img(w){var w=Math.min(w,100);var col=w==100 ? '#6CB256' : '#7292BA';return '<table border=0 cellspacing=0 cellpadding=1 width=100 height=10 style="font-size:1px"><tr>'+'<td bgcolor="'+col+'" width='+w+'>&nbsp;</td>'+'<td bgcolor="#cccccc" width='+(100-w)+'>&nbsp;</td>'+'</tr></table>';}document.onmousemove=getMousePosition;
