CKSHA256=new Object();var PADDING="";PADDING="\200";for(var i=1;i<128;i++)PADDING+=String.fromCharCode(0);function F(x){return(x+4294967296)%4294967296;}function e0(x){return(((x>>>2)|(x<<30))^((x>>>13)|(x<<19))^((x>>>22)|(x<<10)));}function e1(x){return(((x>>>6)|(x<<26))^((x>>>11)|(x<<21))^((x>>>25)|(x<<7)));}function s0(x){return(((x>>>7)|(x<<25))^((x>>>18)|(x<<14))^(x>>>3));}function s1(x){return(((x>>>17)|(x<<15))^((x>>>19)|(x<<13))^(x>>>10));}var 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];function sha256Xform(state,input){var a,b,c,d,e,f,g,h,t1,t2;var W=[],i;W[15]=0;for(i=0;i<16;i++){t1 =(input[(4*i)]&0xff);t1<<=8;t1|=(input[(4*i)+1]&0xff);t1<<=8;t1|=(input[(4*i)+2]&0xff);t1<<=8;t1|=(input[(4*i)+3]&0xff);W[i]=t1;}for(i=16;i<64;i++)W[i]=F(s1(W[i-2])+W[i-7]+s0(W[i-15])+W[i-16]);a=state[0];b=state[1];c=state[2];d=state[3];e=state[4];f=state[5];g=state[6];h=state[7];for(i=0;i<64;i++){t1=F(h+e1(e)+((e&f)^(~e&g))+K[i]+W[i]);t2=F(e0(a)+((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);}state[0]=F(state[0]+a);state[1]=F(state[1]+b);state[2]=F(state[2]+c);state[3]=F(state[3]+d);state[4]=F(state[4]+e);state[5]=F(state[5]+f);state[6]=F(state[6]+g);state[7]=F(state[7]+h);for(i=0;i<64;i++)W[i]=0;a=b=c=d=e=f=g=h=t1=t2=0;}CKSHA256.Init=sha256Init;function sha256Init(){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;}CKSHA256.Update=sha256Update;function sha256Update(input,inputLen){var i,j,index,partLen,temp=[];temp[4*16-1]=0;index=((this.count[0]>>>3)&0x3f);if((this.count[0]+=(inputLen<<3))<(inputLen<<3)){this.count[1]++;this.count[1]+=(inputLen>>>29);}partLen=64-index;if(inputLen >=partLen){for(j=0;j<partLen;j++)this.buf[index+j]=input.charCodeAt(j);sha256Xform(this.state,this.buf);for(i=partLen;i+63<inputLen;i+=64){for(j=0;j<4*16;j++)temp[j]=input.charCodeAt(i+j);sha256Xform(this.state,temp);}for(j=0;j<4*16;j++)temp[j]=0;index=0;}else{i=0;}for(j=0;j<inputLen-i;j++){this.buf[index+j]=input.charCodeAt(i+j);}}CKSHA256.Final=sha256Final;function sha256Final(digest){var t,i,tmp=[0,0,0,0,0,0,0,0];this.FinalInt(tmp);for(i=0;i<8;i++){t=tmp[i];digest[4*i+3]=(t&0xff);t>>>=8;digest[4*i+2]=(t&0xff);t>>>=8;digest[4*i+1]=(t&0xff);t>>>=8;digest[4*i ]=(t&0xff);}}CKSHA256.FinalInt=sha256FinalInt;function sha256FinalInt(digest){var bits="",index,padLen,t,i;t=this.count[1];bits+=String.fromCharCode((t>>>24)&0xff);bits+=String.fromCharCode((t>>>16)&0xff);bits+=String.fromCharCode((t>>>8)&0xff);bits+=String.fromCharCode((t    )&0xff);t=this.count[0];bits+=String.fromCharCode((t>>>24)&0xff);bits+=String.fromCharCode((t>>>16)&0xff);bits+=String.fromCharCode((t>>>8)&0xff);bits+=String.fromCharCode((t    )&0xff);index=(this.count[0]>>>3)&0x3f;padLen=(index < 56)?(56-index):((64+56)-index);this.Update(PADDING,padLen);this.Update(bits,8);for(i=0;i<8;i++){digest[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;}function hex8(n){return hex_(n,8);}function hex(n){return hex_(n,2);}function hex_(n,l){var ret="",z=[0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f'];for(var i=0;i<l;i++){ret=z[n%16]+ret;n>>>=4;}return ret;}CKSHA256.selfTest=sha256Test;CKSHA256.ready=false;function sha256Test(){if(CKSHA256.ready)return;CKSHA256.ready=true;var res=[],i,str=new Array("abc","abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"),ans=new Array("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad","248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");res[8*4-1]=0;for(i=0;i<8*4;i++)res[i]=0;for(t=0;t<str.length;t++){CKSHA256.Init();CKSHA256.Update(str[t],str[t].length);CKSHA256.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.";}CKAES=new Object();CKAES.license="\n";CKAES.Nk=8;CKAES.Nb=4;CKAES.Nr=14;CKAES.KEYSCHED_SIZE=CKAES.Nb *(CKAES.Nr+1);CKAES.hex2int=CKAES_hex2int;function CKAES_hex2int(ret,arg){var t=0,i,idx,min;var tab="0123456789abcdef";min=CKAES.Nk<ret.length ? CKAES.Nk : ret.length;for(i=0;i<min;i++)ret[i]=0;for(i=0;i<arg.length;i++){if((idx=tab.indexOf(arg.charAt(i)))==-1)continue;t<<=4;t|=idx;if((i%8)==7)ret[i>>3]=t;}return(arg.length >(CKAES.Nk*8));}function multx2(b){return(b>0x7f)? 0x11b^(b<<1):(b<<1);}function multx(a,b){var i,ret;ret=0;for(i=0;i<8;i++){ret=((b&1)==1)? ret^a : ret;a=(a>0x7f)? 0x11b^(a<<1):(a<<1);b>>>=1;}return ret;}CKAES.keySched=CKAES_keySched;function CKAES_keySched(exp,key){CKAES.init();var i,t,rconIndex=0;for(i=0;i<CKAES.Nk;i++)exp[i]=key[i];for(i=CKAES.Nk;i<(CKAES.Nb*(CKAES.Nr+1));i++){t=exp[i-1];if(i%CKAES.Nk==0){t=(t<<8)|(t>>>24);t=(((CKAES.S[(t>>>24)])<<24)|((CKAES.S[(t>>16)&0xff]&0xff)<<16)|((CKAES.S[(t>>8)&0xff]&0xff)<<8)|((CKAES.S[(t     )&0xff]&0xff)));t ^=CKAES.Rcon[rconIndex++]<<24;}else if(i%CKAES.Nk==4 &&CKAES.Nk==8){t=(((CKAES.S[(t>>>24)])<<24)|((CKAES.S[(t>>16)&0xff]&0xff)<<16)|((CKAES.S[(t>>8)&0xff]&0xff)<<8)|((CKAES.S[(t     )&0xff]&0xff)));}exp[i]=exp[i-CKAES.Nk]^ t;}rconIndex=t=0;}CKAES.encrypt=CKAES_encrypt;function CKAES_encrypt(pt,exp){CKAES.init();var i;for(i=0;i<4;i++)pt[i]^=exp[i];for(i=1;i<14;i++)CKAES_round(pt,exp,i*CKAES.Nb);CKAES_finalRound(pt,exp,CKAES.Nr*CKAES.Nb);}function CKAES_round(pt,rnd,idx){var ct=[pt[0],pt[1],pt[2],pt[3]];pt[0]=rnd[idx+0]^ CKAES.T0[(ct[0]>>>24)]^ CKAES.T1[(ct[1]>>16)&0xff]^ CKAES.T2[(ct[2]>>8)&0xff]^ CKAES.T3[(ct[3])&0xff];pt[1]=rnd[idx+1]^ CKAES.T0[(ct[1]>>>24)]^ CKAES.T1[(ct[2]>>16)&0xff]^ CKAES.T2[(ct[3]>>8)&0xff]^ CKAES.T3[(ct[0])&0xff];pt[2]=rnd[idx+2]^ CKAES.T0[(ct[2]>>>24)]^ CKAES.T1[(ct[3]>>16)&0xff]^ CKAES.T2[(ct[0]>>8)&0xff]^ CKAES.T3[(ct[1])&0xff];pt[3]=rnd[idx+3]^ CKAES.T0[(ct[3]>>>24)]^ CKAES.T1[(ct[0]>>16)&0xff]^ CKAES.T2[(ct[1]>>8)&0xff]^ CKAES.T3[(ct[2])&0xff];ct[0]=ct[1]=ct[2]=ct[3]=0;}function CKAES_finalRound(pt,rnd,idx){var ct=[0,0,0,0];ct[0]=(((CKAES.S[(pt[0]>>>24)])<<24)|((CKAES.S[(pt[1]>>16)&0xff]&0xff)<<16)|((CKAES.S[(pt[2]>>8)&0xff]&0xff)<<8)|((CKAES.S[(pt[3])&0xff]&0xff)));ct[1]=(((CKAES.S[(pt[1]>>>24)])<<24)|((CKAES.S[(pt[2]>>16)&0xff]&0xff)<<16)|((CKAES.S[(pt[3]>>8)&0xff]&0xff)<<8)|((CKAES.S[(pt[0])&0xff]&0xff)));ct[2]=(((CKAES.S[(pt[2]>>>24)])<<24)|((CKAES.S[(pt[3]>>16)&0xff]&0xff)<<16)|((CKAES.S[(pt[0]>>8)&0xff]&0xff)<<8)|((CKAES.S[(pt[1])&0xff]&0xff)));ct[3]=(((CKAES.S[(pt[3]>>>24)])<<24)|((CKAES.S[(pt[0]>>16)&0xff]&0xff)<<16)|((CKAES.S[(pt[1]>>8)&0xff]&0xff)<<8)|((CKAES.S[(pt[2])&0xff]&0xff)));pt[0]=ct[0]^ rnd[idx+0];pt[1]=ct[1]^ rnd[idx+1];pt[2]=ct[2]^ rnd[idx+2];pt[3]=ct[3]^ rnd[idx+3];ct[0]=ct[1]=ct[2]=ct[3]=0;}function CKAES_invRound(ct,rnd,idx){var pt=[0,0,0,0];ct[0]^=rnd[idx+0];ct[1]^=rnd[idx+1];ct[2]^=rnd[idx+2];ct[3]^=rnd[idx+3];pt[0]=CKAES.Ti0[(ct[0]>>>24)]^CKAES.Ti1[(ct[0]>>16)&0xff]^CKAES.Ti2[(ct[0]>>8)&0xff]^CKAES.Ti3[(ct[0])&0xff];pt[1]=CKAES.Ti0[(ct[1]>>>24)]^CKAES.Ti1[(ct[1]>>16)&0xff]^CKAES.Ti2[(ct[1]>>8)&0xff]^CKAES.Ti3[(ct[1])&0xff];pt[2]=CKAES.Ti0[(ct[2]>>>24)]^CKAES.Ti1[(ct[2]>>16)&0xff]^CKAES.Ti2[(ct[2]>>8)&0xff]^CKAES.Ti3[(ct[2])&0xff];pt[3]=CKAES.Ti0[(ct[3]>>>24)]^CKAES.Ti1[(ct[3]>>16)&0xff]^CKAES.Ti2[(ct[3]>>8)&0xff]^CKAES.Ti3[(ct[3])&0xff];ct[0]=((CKAES.Si[(pt[0]>>>24)])<<24)|((CKAES.Si[(pt[3]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[2]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[1])&0xff]&0xff));ct[1]=((CKAES.Si[(pt[1]>>>24)])<<24)|((CKAES.Si[(pt[0]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[3]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[2])&0xff]&0xff));ct[2]=((CKAES.Si[(pt[2]>>>24)])<<24)|((CKAES.Si[(pt[1]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[0]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[3])&0xff]&0xff));ct[3]=((CKAES.Si[(pt[3]>>>24)])<<24)|((CKAES.Si[(pt[2]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[1]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[0])&0xff]&0xff));pt[0]=pt[1]=pt[2]=pt[3]=0;}function CKAES_invFinalRound(ct,rnd,idx){var pt=[0,0,0,0];pt[0]=ct[0]^ rnd[idx+0];pt[1]=ct[1]^ rnd[idx+1];pt[2]=ct[2]^ rnd[idx+2];pt[3]=ct[3]^ rnd[idx+3];ct[0]=(((CKAES.Si[(pt[0]>>>24)])<<24)|((CKAES.Si[(pt[3]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[2]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[1])&0xff]&0xff)));ct[1]=(((CKAES.Si[(pt[1]>>>24)])<<24)|((CKAES.Si[(pt[0]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[3]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[2])&0xff]&0xff)));ct[2]=(((CKAES.Si[(pt[2]>>>24)])<<24)|((CKAES.Si[(pt[1]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[0]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[3])&0xff]&0xff)));ct[3]=(((CKAES.Si[(pt[3]>>>24)])<<24)|((CKAES.Si[(pt[2]>>16)&0xff]&0xff)<<16)|((CKAES.Si[(pt[1]>>8)&0xff]&0xff)<<8)|((CKAES.Si[(pt[0])&0xff]&0xff)));pt[0]=pt[1]=pt[2]=pt[3]=0;}CKAES.decrypt=CKAES_decrypt;function CKAES_decrypt(pt,exp){CKAES.init();var i;CKAES_invFinalRound(pt,exp,CKAES.Nr*CKAES.Nb);for(i=13;1<=i;i--)CKAES_invRound(pt,exp,i*CKAES.Nb);for(i=0;i<4;i++)pt[i]^=exp[i];}CKAES.S=[];CKAES.Si=[];CKAES.Rcon=[];CKAES.T0=[];CKAES.T1=[];CKAES.T2=[];CKAES.T3=[];CKAES.Ti0=[];CKAES.Ti1=[];CKAES.Ti2=[];CKAES.Ti3=[];CKAES.init=CKAES_init;CKAES.ready=false;function CKAES_init(){if(CKAES.ready)return;CKAES.ready=true;var i;CKAES.Rcon=[];CKAES.Rcon[0]=1;for(i=1;i<30;i++){CKAES.Rcon[i]=multx2(CKAES.Rcon[i-1]);}CKAES.S=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22];CKAES.Si=[];for(i=0;i<CKAES.S.length;i++)CKAES.Si[CKAES.S[i]&0xff]=i;CKAES.T0=[];CKAES.T1=[];CKAES.T2=[];CKAES.T3=[];CKAES.Ti0=[];CKAES.Ti1=[];CKAES.Ti2=[];CKAES.Ti3=[];for(i=0;i<256;i++){var a=CKAES.S[i]&0xff;CKAES.T0[i]=(multx2(a)<<24)|(a<<16)|(a<<8)|(multx2(a)^a);CKAES.T1[i]=(CKAES.T0[i]<<24)|(CKAES.T0[i]>>>8);CKAES.T2[i]=(CKAES.T1[i]<<24)|(CKAES.T1[i]>>>8);CKAES.T3[i]=(CKAES.T2[i]<<24)|(CKAES.T2[i]>>>8);CKAES.Ti0[i]=(multx(i,0xe)<<24)|(multx(i,0x9)<<16)|(multx(i,0xd)<<8)| multx(i,0xb);CKAES.Ti1[i]=(CKAES.Ti0[i]<<24)|(CKAES.Ti0[i]>>>8);CKAES.Ti2[i]=(CKAES.Ti1[i]<<24)|(CKAES.Ti1[i]>>>8);CKAES.Ti3[i]=(CKAES.Ti2[i]<<24)|(CKAES.Ti2[i]>>>8);}if(!CKAES.selfTest())CKAES.ready=false;}CKAES.test=test;function test(){var res=CKAES.selfTest();var i;alert("selfTest passed? "+res);if(!res)return;var b=[1,2,3,4];var k=[0,1,2,3,4,5,6,7];var exp=[];CKAES.keySched(exp,k);var end,start=(new Date()).getTime();var LOOPS=25 * 100;var msg="";for(i=0;i<CKAES.Nb;i++)msg+=hx(b[i])+" ";alert("Plain:\n"+msg);for(i=0;i<LOOPS;i++)CKAES.keySched(exp,k);end=(new Date()).getTime();alert("KeySched: KiloKeys/sec="+(LOOPS)/(end-start)+" elapsed="+(end-start));start=(new Date()).getTime();for(i=0;i<LOOPS;i++)CKAES.encrypt(b,exp);end=(new Date()).getTime();msg="";for(i=0;i<CKAES.Nb;i++)msg+=hx(b[i])+" ";alert("Encrypt: KiloByte/sec="+(16*LOOPS)/(end-start)+" elapsed="+(end-start)+"\n"+"Cipher:\n"+msg);start=(new Date()).getTime();for(i=0;i<LOOPS;i++)CKAES.decrypt(b,exp);end=(new Date()).getTime();msg="";for(i=0;i<CKAES.Nb;i++)msg+=hx(b[i])+" ";alert("Decrypt: KiloByte/sec="+(16*LOOPS)/(end-start)+" elapsed="+(end-start)+"\n"+"Plain:\n"+msg);}CKAES.selfTest=CKAES_selfTest;function CKAES_selfTest(){var b=[0,0,0,0,0,0,0,0];var k=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var expgood=[0x603deb10,0x15ca71be,0x2b73aef0,0x857d7781,0x1f352c07,0x3b6108d7,0x2d9810a3,0x0914dff4,0x9ba35411,0x8e6925af,0xa51a8b5f,0x2067fcde,0xa8b09c1a,0x93d194cd,0xbe49846e,0xb75d5b9a,0xd59aecb8,0x5bf3c917,0xfee94248,0xde8ebe96,0xb5a9328a,0x2678a647,0x98312229,0x2f6c79b3,0x812c81ad,0xdadf48ba,0x24360af2,0xfab8b464,0x98c5bfc9,0xbebd198e,0x268c3ba7,0x09e04214,0x68007bac,0xb2df3316,0x96e939e4,0x6c518d80,0xc814e204,0x76a9fb8a,0x5025c02d,0x59c58239,0xde136967,0x6ccc5a71,0xfa256395,0x9674ee15,0x5886ca5d,0x2e2f31d7,0x7e0af1fa,0x27cf73c3,0x749c47ab,0x18501dda,0xe2757e4f,0x7401905a,0xcafaaae3,0xe4d59b34,0x9adf6ace,0xbd10190d,0xfe4890d1,0xe6188d0b,0x046df344,0x706c631e];for(i=0;i<CKAES.KEYSCHED_SIZE;i++)expgood[i]&=0xffffffff;var ctgood=[];for(i=0;i<CKAES.Nb;i++)ctgood[i]=0;var exp=[];for(i=0;i<CKAES.KEYSCHED_SIZE;i++)exp[i]=0;var i,fail=false;CKAES.hex2int(k,"603deb1015ca71be2b73aef0857d7781"+"1f352c073b6108d72d9810a30914dff4");CKAES.keySched(exp,k);for(i=0;i<expgood.length;i++){if(exp[i]!=expgood[i]){alert("CKAES selftest keySched: i="+i+" "+hx(exp[i])+" "+hx(expgood[i])+" "+exp[i]+" "+expgood[i]+" exp!=expgood");return false;fail=true;}}if(fail)return false;CKAES.hex2int(b,"00112233445566778899aabbccddeeff");CKAES.hex2int(ctgood,"8ea2b7ca516745bfeafc49904b496089");CKAES.hex2int(k,"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f");CKAES.keySched(exp,k);var enc=[b[0],b[1],b[2],b[3]];CKAES.encrypt(enc,exp);fail=false;for(i=0;i<4;i++){if(enc[i]!=ctgood[i]){alert("CKAES selftest encrypt: i="+i+" "+hx(enc[i])+" "+hx(ctgood[i])+" enc!=ctgood");return false;fail=true;}}if(fail)return false;var dec=[enc[0],enc[1],enc[2],enc[3]];CKAES.decrypt(dec,exp);for(i=0;i<CKAES.Nb;i++){if(dec[i]!=b[i]){alert("CKAES selftest decrypt: i="+i+" "+hx(dec[i])+" "+hx(b[i])+" dec!=pt");fail=true;}}if(fail)return false;return true;}function hx(a){var h="0123456789abcdef";return ""+h.charAt(a>>>28   )+""+h.charAt(a>>>24&0xf)+""+h.charAt(a>>>20&0xf)+""+h.charAt(a>>>16&0xf)+""+h.charAt(a>>>12&0xf)+""+h.charAt(a>>>8&0xf)+""+h.charAt(a>>>4&0xf)+""+h.charAt(a&0xf);}function hx2(a){var h="0123456789abcdef";a&=0xff;return ""+h.charAt(a>>4)+""+h.charAt(a&0xf);}var b64inv,b64tab=null;function initb64(){if(b64tab!=null)return;b64tab=[];b64inv=[];var i,alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";for(i=0;i<alpha.length;i++)b64tab[i]=alpha.charAt(i);for(i=0;i<256;i++)b64inv[i]=-1;for(i=0;i<alpha.length;i++)b64inv[alpha.charCodeAt(i)]=i;}function inttob64(iarr,splitter){var i,j,v,barr=[];for(i=0,j=0;i<iarr.length;i++,j+=4){v=iarr[i];barr[j+3]=v&0xff;v>>>=8;barr[j+2]=v&0xff;v>>>=8;barr[j+1]=v&0xff;v>>>=8;barr[j ]=v&0xff;}return encodeb64(barr,splitter);}function b64toint(str){var i,v,o=0,ret=[],barr=decodeb64(str);for(i=0;i<barr.length;i++){v=(v<<8)| barr[i];if(i%4==3){ret[o++]=v;}}return ret;}function encodeb64(barr,splitter){initb64();var i,j,v,carry=0,ret='';var quad,trip,tmp,k=0;for(i=0,j=0;i<barr.length;i+=3){quad=false;trip=false;v=barr[i];v<<=8;if((i+1)< barr.length){v|=barr[i+1];trip=true;}v<<=8;if((i+2)< barr.length){v|=(0xff&barr[i+2]);quad=true;}tmp=b64tab[(quad ?(v&0x3f): 64)];v>>=6;tmp=b64tab[(trip ?(v&0x3f): 64)]+tmp;v>>=6;tmp=b64tab[v&0x3f]+tmp;v>>=6;tmp=b64tab[v&0x3f]+tmp;ret+=tmp;if(splitter!=null &&(k+=4)==64){ret+=splitter;k=0;}}return ret;}function decodeb64(str){initb64();var i,v,shift=0,accum=0,out=0,ret=[];for(i=0;i<str.length;i++){v=b64inv[str.charCodeAt(i)];if(v >=0){accum<<=6;shift+=6;accum|=v;if(shift >=8){shift-=8;ret[out++]=((accum>>shift)&0xff);}}}return ret;}function setHTML(id,html,c){var e=document.getElementById(id),s=e.style;e.innerHTML=html;s.padding=5;if(c==null)c="none";s.background=c;}document.write('<form onsubmit="encryptNote();return false;"><div id="simplehidediv" style="width:1px;height:1px;padding:3px;visibility:hidden;">Password: <input type=text id=simplehidepswd name=simplehidepswd onblur="focus();"><input type=submit value=OK></div></form>');function sh_promptPswd(){var e,b,x=0,y=0,d=document,w=window;if(self.pageYOffset!=null){x=self.pageXOffset+w.innerWidth/2;y=self.pageYOffset+w.innerHeight/2;}else if((e=d.documentElement)&&e.scrollTop){x=e.scrollLeft+e.clientWidth/2;y=e.scrollTop+e.clientHeight/2;}else if(b=d.body){x=b.scrollLeft+b.clientWidth/2;y=b.scrollTop+b.clientHeight/2;}e=document.getElementById('simplehidediv');s=e.style;s.padding=10;s.background='#cccccc';s.border='red 2px solid';s.visibility='visible';s.position='absolute';s.width=s.height='';s.left=x;s.top=y;document.getElementById('simplehidepswd').focus();}var _dst,_dat;function encryptNote(dst,dat,inPswd){if(dst==null){dst=_dst;}else _dst=dst;if(dat==null)dat=_dat;else _dat=dat;var pswd,p=document.getElementById('simplehidepswd');if(p!=null)pswd=p.value;if(inPswd!=null)pswd=inPswd;if(pswd==null  ||  pswd==""){sh_promptPswd();return;}document.getElementById('simplehidediv').style.visibility='hidden';p.blur();var i,exp=[],key=[],tmp=[0,0,0,0,0,0,0,0];CKSHA256.Init();for(i=0;i<1000;i++)CKSHA256.Update(pswd,pswd.length);CKSHA256.Final(tmp);for(i=0;i<4;i++)key[i]=tmp[i];CKAES.keySched(exp,key);var enc=sh_encryptE(dat,exp);if(sh_decryptE(enc,exp)!=dat){setHTML(dst,"Could not encrypt data.",'#ffcccc');}else{setHTML(dst,"Your Encrypted HTML:<xmp>"+"<script language=javascript src=\"http:/\/www.certainkey.com/sh.js\"></script>\n"+"<script language=javascript>\n"+"<!--\n"+"function decrypt_and_display_html(){\n"+"  /\/ Remove password parameter to prompt user\n"+"  sh_decrypt('"+enc+"','targetElementId',password='"+pswd+"');\n"+"}\n"+"/\/ Run at page-load like this ...\n"+		 "decrypt_and_display_html();\n"+"/\/-->\n"+"</script>\n"+"<!--... or display with the click of a button like this.-->\n"+"<input type=button value=DecryptMe onclick=\"decrypt_and_display_html();\">\n"+"</xmp>","#6CB256");}}function sh_decrypt(str,pswd){if(pswd==null){sh_promptPswd();return;}var i,exp=[],key=[],tmp=[0,0,0,0,0,0,0,0];CKSHA256.Init();for(i=0;i<1000;i++)CKSHA256.Update(pswd,pswd.length);CKSHA256.Final(tmp);for(i=0;i<4;i++)key[i]=tmp[i];CKAES.keySched(exp,key);return sh_decryptE(str,exp);}function sh_decryptE(str,e){var i,len,off=0,out=0,tmp=[],ctr=[0,0,0,0],ret=[],dat=[],retstr='';len=str.substr(0,col=str.indexOf(":"));str=str.substr(col+1);for(i=0;i<str.length/8;i++)dat[i]=0;dat=b64toint(str);for(i=0;i<1;i++)ctr[i]=dat[off++];while(off < dat.length){for(i=0;i<4;i++)tmp[i]=ctr[i];CKAES.encrypt(tmp,e);for(i=0;i<4;i++)if(++ctr[i])break;for(i=0;i<4 &&off<dat.length;i++)ret[out++]=tmp[i]^ dat[off++];}if(ret[0]!=0x70736f6e)return "invalid";for(i=0;i<len;i++){if(i%4==0)t=ret[i>>2];retstr+=String.fromCharCode(t&0xff);t>>=8;}return retstr.substr("nospam:".length);}function sh_encryptE(str,e){var i,off=0,out=0,tmp=[],ctr=[0,0,0,0],ret=[],dat=[];str="nospam:"+str;for(i=0;i<1;i++)ret[out++]=ctr[i]=Math.floor(Math.random()*0xffffffff);for(i=0;i<str.length;i++)dat[i>>2]|=str.charCodeAt(i)<<(8*(i%4));while(off < dat.length){for(i=0;i<4;i++)tmp[i]=ctr[i];CKAES.encrypt(tmp,e);for(i=0;i<4;i++)if(++ctr[i])break;for(i=0;i<4 &&off<dat.length;i++)ret[out++]=tmp[i]^ dat[off++];}return str.length+":"+inttob64(ret,'\n');}