| <!DOCTYPE HTML> |
| <html> |
| <head> |
| <title>JavaScript Test ECC</title> |
| </head> |
| <body> |
| <h1>JavaScript Test ECC Example</h1> |
| <script type="text/javascript" src="DBIG.js"></script> |
| <script type="text/javascript" src="BIG.js"></script> |
| <script type="text/javascript" src="FP.js"></script> |
| <script type="text/javascript" src="ROM.js"></script> |
| <script type="text/javascript" src="HASH.js"></script> |
| <script type="text/javascript" src="RAND.js"></script> |
| <script type="text/javascript" src="AES.js"></script> |
| <script type="text/javascript" src="GCM.js"></script> |
| <script type="text/javascript" src="ECP.js"></script> |
| <script type="text/javascript" src="ECDH.js"></script> |
| |
| <script> |
| /* test driver and function exerciser for ECDH API Functions only - for use with Montgpmery curves */ |
| var i,j=0,res; |
| var result; |
| var pp="M0ng00se"; |
| |
| var EGS=ECDH.EGS; |
| var EFS=ECDH.EFS; |
| var EAS=16; |
| |
| var S1=[]; |
| var W0=[]; |
| var W1=[]; |
| var Z0=[]; |
| var Z1=[]; |
| var RAW=[]; |
| var SALT=[]; |
| |
| var rng=new RAND(); |
| |
| rng.clean(); |
| for (i=0;i<100;i++) RAW[i]=i; |
| |
| rng.seed(100,RAW); |
| //for (j=0;j<100;j++) |
| //{ |
| |
| for (i=0;i<8;i++) SALT[i]=(i+1); // set Salt |
| |
| window.document.write("Alice's Passphrase= " + pp + "<br>"); |
| |
| var PW=ECDH.stringtobytes(pp); |
| /* private key S0 of size EGS bytes derived from Password and Salt */ |
| var S0=ECDH.PBKDF2(PW,SALT,1000,EGS); |
| |
| window.document.write("Alice's private key= 0x"+ECDH.bytestostring(S0)+ "<br>"); |
| /* Generate Key pair S/W */ |
| ECDH.KEY_PAIR_GENERATE(null,S0,W0); |
| |
| window.document.write("Alice's public key= 0x"+ECDH.bytestostring(W0)+ "<br>"); |
| |
| res=ECDH.PUBLIC_KEY_VALIDATE(true,W0); |
| if (res!=0) |
| alert("Alice's public Key is invalid!"); |
| /* Random private key for other party */ |
| ECDH.KEY_PAIR_GENERATE(rng,S1,W1); |
| |
| window.document.write("Servers private key= 0x"+ECDH.bytestostring(S1)+ "<br>"); |
| window.document.write("Servers public key= 0x"+ECDH.bytestostring(W1)+ "<br>"); |
| |
| res=ECDH.PUBLIC_KEY_VALIDATE(true,W1); |
| if (res!=0) |
| alert("Server's public Key is invalid!"); |
| |
| |
| /* Calculate common key using DH - IEEE 1363 method */ |
| |
| ECDH.ECPSVDP_DH(S0,W1,Z0); |
| ECDH.ECPSVDP_DH(S1,W0,Z1); |
| |
| var same=true; |
| for (i=0;i<ECDH.EFS;i++) |
| if (Z0[i]!=Z1[i]) same=false; |
| |
| if (!same) |
| alert("*** ECPSVDP-DH Failed"); |
| |
| var KEY=ECDH.KDF1(Z0,ECDH.EAS); |
| |
| window.document.write("Alice's DH Key= 0x"+ECDH.bytestostring(KEY)+ "<br>"); |
| window.document.write("Servers DH Key= 0x"+ECDH.bytestostring(KEY)+ "<br>"); |
| |
| //} |
| //window.document.write("Test Completed Successfully"+ "<br>"); |
| </script> |
| </body> |
| </html> |