blob: ba650cafcb9b1c6ec532de0854ab2edc6572e897 [file] [log] [blame]
<!DOCTYPE HTML>
<html>
<head>
<title>JavaScript Test RSA</title>
</head>
<body>
<h1>JavaScript Test RSA Example</h1>
<script type="text/javascript" src="ROM.js"></script>
<script type="text/javascript" src="DBIG.js"></script>
<script type="text/javascript" src="BIG.js"></script>
<script type="text/javascript" src="UInt64.js"></script>
<script type="text/javascript" src="HASH256.js"></script>
<script type="text/javascript" src="HASH384.js"></script>
<script type="text/javascript" src="HASH512.js"></script>
<script type="text/javascript" src="RAND.js"></script>
<script type="text/javascript" src="FF.js"></script>
<script type="text/javascript" src="RSA.js"></script>
<script>
/* test driver and function exerciser for RSA API Functions */
var i,j=0,res;
var result;
var RFS=RSA.RFS;
var sha=RSA.HASH_TYPE;
var message="Hello World\n";
var pub=new rsa_public_key(ROM.FFLEN);
var priv=new rsa_private_key(ROM.HFLEN);
var ML=[];
var C=[];
var S=[];
var RAW=[];
var rng=new RAND();
rng.clean();
for (i=0;i<100;i++) RAW[i]=i;
rng.seed(100,RAW);
var start,end,time;
start=new Date().getTime();
window.document.write("Generating public/private key pair (slow!) <br>");
RSA.KEY_PAIR(rng,65537,priv,pub);
end=new Date().getTime();
time=end-start;
window.document.write("Time in ms= "+time+"<br>");
var M=RSA.stringtobytes(message);
window.document.write("Encrypting test string <br>");
var E=RSA.OAEP_ENCODE(sha,M,rng,null); /* OAEP encode message m to e */
window.document.write("Encoding= 0x" + RSA.bytestohex(E) + "<br>");
window.document.write("Public key= 0x"+pub.n.toString() + "<br>");
start=new Date().getTime();
RSA.ENCRYPT(pub,E,C); /* encrypt encoded message */
end=new Date().getTime();
time=end-start;
window.document.write("Time in ms= "+time+"<br>");
window.document.write("Ciphertext= 0x" + RSA.bytestohex(C) + "<br>");
window.document.write("Decrypting test string <br>");
start=new Date().getTime();
RSA.DECRYPT(priv,C,ML);
end=new Date().getTime();
time=end-start;
window.document.write("Time in ms= "+time+"<br>");
var cmp=true;
if (E.length!=ML.length) cmp=false;
else
{
for (var j=0;j<E.length;j++)
if (E[j]!=ML[j]) cmp=false;
}
if (cmp) window.document.write("Decryption is OK <br>");
else window.document.write("Decryption Failed <br>");
var MS=RSA.OAEP_DECODE(sha,null,ML); /* OAEP decode message */
window.document.write("Decoding= 0x" + RSA.bytestohex(MS) + "<br>");
window.document.write("message= "+RSA.bytestostring(MS) + "<br>");
window.document.write("Signing message <br>");
RSA.PKCS15(sha,M,C);
RSA.DECRYPT(priv,C,S); /* create signature in S */
window.document.write("Signature= 0x" + RSA.bytestohex(S) + "<br>");
RSA.ENCRYPT(pub,S,ML);
cmp=true;
if (C.length!=ML.length) cmp=false;
else
{
for (var j=0;j<C.length;j++)
if (C[j]!=ML[j]) cmp=false;
}
if (cmp) window.document.write("Signature is valid <br>");
else window.document.write("Signature is INVALID <br>");
RSA.PRIVATE_KEY_KILL(priv);
</script>
</body>
</html>