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);}return D;};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;};};CKSHA256.ready=false;CKSHA256.selfTest=function(){if(CKSHA256.ready)return;CKSHA256.ready=true;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=CKSHA256.hex(res);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.';};CKSHA256.hex=function(n){var ret='',z='0123456789abcdef'.split('');for(var i=0;i<n.length;i++)ret+=z[(n[i]>>4)&0xf]+z[n[i]&0xf];return ret;};CKSHA256.digest=function(I,Ilen){var m=new CKSHA256();m.Init();m.Update(I,Ilen);var ret=[];m.Final(ret);return ret;};CKSHA256.digestHex=function(I,Ilen){return CKSHA256.hex(CKSHA256.digest(I,Ilen));};CKSHA256.digestInt=function(I,Ilen){var m=new CKSHA256();m.Init();m.Update(I,Ilen);var ret=[];m.FinalInt(ret);return ret;};var isIE=navigator.userAgent.indexOf("MSIE")!=-1;ckmkpasswd=new Object();ckmkpasswd.md=new CKSHA256();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+'">',badImg='<img src="'+bad.src+'">',hexPlease=0,pswdLen=8,int2charZ='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()';function int2char(x){tmp=int2charZ;if(hexPlease)tmp=tmp.substr(0,15);return tmp.charAt(x%tmp.length);}function gel(id){return document.getElementById(id);};function img(w){var w=Math.min(w,100);var col=w==100 ? '#6CB256' : '#7292BA';return '<table border=0 cellspacing=0 cellpadding=0 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>';}ckmkpasswd.updateHTML=function(){gel('samples').innerHTML=img(100 * gatheredPoints/neededPoints)+gatheredPoints;if(okImg!=0&&neededPoints < gatheredPoints){gel('samplesOK').innerHTML=okImg;okImg=0;}var d=new Date(time*1),d2=function(n){return Math.floor(n/10)+''+(n%10);},d3=function(n){return Math.floor(n/100)+''+(Math.floor(n/10)%10)+''+(n%10);};gel('time').innerHTML=''+d.getFullYear()+'-'+d2(d.getMonth())+'-'+d2(d.getDay())+' '+d2(d.getHours())+':'+d2(d.getMinutes())+':'+d2(d.getSeconds())+'.'+d3(d.getMilliseconds());gel('_xx').innerHTML=_x;gel('_yy').innerHTML=_y;var i,res=[];res[8*4-1]=0;if(okImg==0&&ckmkpasswd.md.count[0]!=256){ckmkpasswd.md.Final(res);for(var X='',i=0;i<res.length;i++)X+=int2char(res[i]);var password=X.substr(0,pswdLen);ckmkpasswd.md.Init();ckmkpasswd.md.Update(X,X.length);var e=gel('password');if(e.innerHTML.indexOf(password)==-1)e.innerHTML='<input id=genpswd type=text style="font:normal normal 12px monospace;" size='+32+' value="'+password.replace('&','&amp;')+'"/><br/>Ctrl-C to copy to clipboard';e=gel('genpswd');e.readOnly=1;e.focus();e.select();}setTimeout(ckmkpasswd.updateHTML,500);};ckmkpasswd.updateHTML();var gatheredPoints=0;var neededPoints=500;var _x='&nbsp;',_y='&nbsp;',time=(new Date()).getTime();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();D=time+','+_x+','+_y+'\n';ckmkpasswd.md.Update(D,D.length);gatheredPoints++;return;}document.onmousemove=getMousePosition;

