<?xml version = "1.0" encoding="utf-8" ?> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | |
"DTD/xhtml1-strict.dtd"> | |
<html xmlns = "http://www.w3.org/1999/xhtml"> | |
<head> | |
<title>NDN Request Example</title> | |
<script type="text/javascript" src="../java_socket_bridge.js"></script> | |
<script type="text/javascript" src="../CCNProtocolDTags.js"></script> | |
<script type="text/javascript" src="../CCNTime.js"></script> | |
<script type="text/javascript" src="../ContentName.js"></script> | |
<script type="text/javascript" src="../ContentObject.js"></script> | |
<script type="text/javascript" src="../DateFormat.js"></script> | |
<script type="text/javascript" src="../Exclude.js"></script> | |
<script type="text/javascript" src="../ExcludeAny.js"></script> | |
<script type="text/javascript" src="../ExcludeComponent.js"></script> | |
<script type="text/javascript" src="../Interest.js"></script> | |
<script type="text/javascript" src="../KeyLocator.js"></script> | |
<script type="text/javascript" src="../KeyName.js"></script> | |
<script type="text/javascript" src="../PublisherID.js"></script> | |
<script type="text/javascript" src="../Signature.js"></script> | |
<script type="text/javascript" src="../SignedInfo.js"></script> | |
<script type="text/javascript" src="../PublisherPublicKeyDigest.js"></script> | |
<script type="text/javascript" src="../FaceInstance.js"></script> | |
<script type="text/javascript" src="../ForwardingEntry.js"></script> | |
<script type="text/javascript" src="../encoding/BinaryXMLEncoder.js"></script> | |
<script type="text/javascript" src="../encoding/BinaryXMLCodec.js"></script> | |
<script type="text/javascript" src="../encoding/BinaryXMLDecoder.js"></script> | |
<script type="text/javascript" src="../encoding/DataUtils.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../security/KeyManager.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/jsbn.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/jsbn2.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/rsa.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/rsa2.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/sha1.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/sha256.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/sha512.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/md5.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/ripemd160.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/base64.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/rsapem-1.1.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/rsasign-1.2.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/asn1hex-1.1.js"></script> | |
<script language="JavaScript" type="text/javascript" src="../securityLib/x509-1.1.js"></script> | |
<script type="text/javascript"> | |
function encode(){ | |
var contentname = new ContentName( createNameArray(document.getElementById('contentname').value) ); | |
var content = document.getElementById('content').value; | |
var signedInfo = new SignedInfo(); | |
signedInfo.setFields(); | |
//var signatureBits = generateSignatureBits(contentname,content,signedInfo); | |
//witness is null | |
var signature = new Signature(); | |
var co = new ContentObject(contentname,signedInfo,content,signature); | |
co.sign(); | |
var output = encodeToHexContentObject(co); | |
document.getElementById('result').innerHTML = output; | |
} | |
function decode(){ | |
var input = document.getElementById('result').innerHTML; | |
var co = decodeHexContentObject(input); | |
if(LOG>3)console.log('CONTENT OBJECT DECODED'); | |
if(LOG>3)console.log(co); | |
/////////////////////////////////////// | |
var output =""; | |
if(co==-1) | |
output+= "NO CONTENT FOUND" | |
else if (co==-2) | |
output+= "CONTENT NAME IS EMPTY" | |
else{ | |
if(co.name!=null && co.name.Components!=null){ | |
output+= "NAME: "; | |
for(var i=0;i<co.name.Components.length;i++){ | |
output+= "/"+ toString(co.name.Components[i]); | |
} | |
output+= "<br />"; | |
output+= "<br />"; | |
} | |
if(co.content !=null){ | |
output += "CONTENT(ASCII): "+ toString(co.content); | |
output+= "<br />"; | |
output+= "<br />"; | |
} | |
if(co.content !=null){ | |
output += "CONTENT(hex): "+ toHex(co.content); | |
output+= "<br />"; | |
output+= "<br />"; | |
} | |
if(co.Signature !=null && co.Signature.Signature!=null){ | |
output += "SIGNATURE(hex): "+ toHex(co.Signature.Signature); | |
output+= "<br />"; | |
output+= "<br />"; | |
} | |
if(co.SignedInfo !=null && co.SignedInfo.Publisher!=null && co.SignedInfo.Publisher.PublisherPublicKeyDigest!=null){ | |
output += "Publisher Public Key Digest(hex): "+ toHex(co.SignedInfo.Publisher.PublisherPublicKeyDigest); | |
output+= "<br />"; | |
output+= "<br />"; | |
} | |
if(co.SignedInfo !=null && co.SignedInfo.Timestamp!=null){ | |
output += "TimeStamp(hex): "+ co.SignedInfo.Timestamp.date; | |
output+= "<br />"; | |
output+= "<br />"; | |
} | |
if(co.SignedInfo!=null && co.SignedInfo.Locator!=null && co.SignedInfo.Locator.PublicKey!=null){ | |
var publickey = rstr2b64(toString(co.SignedInfo.Locator.PublicKey)); | |
var publickeyHex = toHex(co.SignedInfo.Locator.PublicKey).toLowerCase(); | |
var publickeyString = toString(co.SignedInfo.Locator.PublicKey); | |
var signature = toHex(co.Signature.Signature).toLowerCase(); | |
var input = toString(co.rawSignatureData); | |
output += "DER Certificate: "+publickey ; | |
output+= "<br />"; | |
output+= "<br />"; | |
if(LOG>2) console.log(" ContentName + SignedInfo + Content = "+input); | |
if(LOG>2) console.log(" PublicKey = "+publickey ); | |
if(LOG>2) console.log(" PublicKeyHex = "+publickeyHex ); | |
if(LOG>2) console.log(" PublicKeyString = "+publickeyString ); | |
if(LOG>2) console.log(" Signature "+signature ); | |
if(LOG>2) console.log(" Signature NOW IS" ); | |
if(LOG>2) console.log(co.Signature.Signature); | |
var x509 = new X509(); | |
x509.readCertPEM(publickey); | |
//x509.readCertPEMWithoutRSAInit(publickey); | |
var result = x509.subjectPublicKeyRSA.verifyString(input, signature); | |
console.log('result is '+result); | |
/*var rsakey = new RSAKey(); | |
var kp = publickeyHex.slice(56,314); | |
output += "PUBLISHER KEY(hex): "+kp ; | |
output+= "<br />"; | |
output+= "<br />"; | |
console.log('kp is '+kp); | |
var exp = publickeyHex.slice(318,324); | |
console.log('kp size is '+kp.length ); | |
output += "exponent: "+exp ; | |
output+= "<br />"; | |
output+= "<br />"; | |
console.log('exp is '+exp); | |
rsakey.setPublic(kp,exp); | |
var result = rsakey.verifyString(input, signature);*/ | |
if(result) | |
output += 'SIGNATURE VALID'; | |
else | |
output += 'SIGNATURE INVALID'; | |
//output += "VALID: "+ toHex(co.SignedInfo.Locator.PublicKey); | |
output+= "<br />"; | |
output+= "<br />"; | |
if(LOG>4) console.log('str'[1]); | |
} | |
} | |
document.getElementById('result').innerHTML = output; | |
} | |
</script> | |
</head> | |
<body > | |
<form> | |
Please Enter a Content Name:<br /> | |
<input id="contentname" type="text" name="CONTENTNAME" value="/PARC/abc" /> | |
Please Enter the Content:<br /> | |
<textarea id="content" cols="40" rows="5" name="CONTENT" value="SUCCESS" >SUCCESS!</textarea> | |
</form> | |
<button onclick="encode()">Encode</button> | |
<button onclick="decode()">Decode</button> | |
<p id="result"></p> | |
</body> | |
</html> |