blob: 201037856dff4624d7e2e2ae16c32256e968d1fe [file] [log] [blame]
<!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>