<?xml version = "1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<!-- 
	See COPYING for copyright and distribution information.
-->
<html xmlns = "http://www.w3.org/1999/xhtml">

<head>
	<title>NDN Decode Interest + Face Instance</title>
	
	<script type="text/javascript" src="../Helper.js"></script>

	<script type="text/javascript">
	

		
		function decode(){

			var input = document.getElementById('result').innerHTML;

			
			var interest = decodeHexInterest(input);
			
			if(LOG>3)console.log('INTEREST DECODED');
			if(LOG>3)console.log(interest);

			///////////////////////////////////////
			
			var output ="";
			
			
			if(interest.name!=null && interest.name.components!=null){
				output+= "NAME: ";
				
				for(var i=0;i<interest.name.components.length;i++){
					output+= "/"+ DataUtils.toString(interest.name.components[i]);
				}
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.faceInstance!=null ){
				output+= "FaceInstance: ";
				
					output+=  interest.faceInstance;
				
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.exclude!=null ){
				output+= "Exclude: ";
				
					output+=  interest.exclude;
				
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.childSelector!=null ){
				output+= "ChildSelector: ";
				
					output+=  interest.childSelector;
				
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.answerOriginKind!=null ){
				output+= "AnswerOriginKind: ";
				
					output+=  interest.answerOriginKind;
				
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.interestLifetime!=null ){
				output+= "InterestLifetime: ";
				
					output+=  interest.interestLifetime;
				
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.nonce!=null ){
				output+= "Nonce: ";
				
					output+=  interest.nonce;
				
				output+= "<br />";
				output+= "<br />";
			}
			
			
			if(interest.scope!=null ){
				output+= "SCOPE: ";
				
					output+=  interest.scope;
				
				output+= "<br />";
				output+= "<br />";
			}
	
			if(interest.publisherPublicKeyDigest!=null ){
				output+= "PUBLISHER PUBLIC KEY DIGEST: ";
				
				output+=  interest.publisherPublicKeyDigest.publisherPublicKeyDigest;
                                        
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.maxSuffixComponents!=null ){
				output+= "MaxSuffixComponents : ";
				
				output+=  interest.maxSuffixComponents;

				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.minSuffixComponents!=null ){
				output+= "MinSuffixComponents : ";
				
				output+=  interest.minSuffixComponents;

				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.name.components[3] !=null){
				
				
				var input = DataUtils.toHex(interest.name.components[3]) ;

				var contentObject = decodeHexContentObject(input);
				
				if(contentObject.content!=null ){
					output+= "Content of content Object: ";
					
						output+=  DataUtils.toHex(contentObject.content);
						
					output+= "<br />";
					output+= "<br />";
				}
				
				
				var content = DataUtils.toHex(contentObject.content);
				
				var co = contentObject;
				
				
				////////////////////////////////////////
				

				if(co.name!=null && co.name.components!=null){
					output+= "NAME: ";
					
					for(var i=0;i<co.name.components.length;i++){
						output+= "/"+ DataUtils.toString(co.name.components[i]);
					}
					output+= "<br />";
					output+= "<br />";
				}
	
				if(co.content !=null){
					output += "CONTENT(ASCII): "+ DataUtils.toString(co.content);
					
					output+= "<br />";
					output+= "<br />";
				}
				if(co.content !=null){
					output += "CONTENT(hex): "+ DataUtils.toHex(co.content);
					
					output+= "<br />";
					output+= "<br />";
				}
				if(co.signature !=null && co.signature.signature!=null){
					
					output += "SIGNATURE(hex): "+ DataUtils.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): "+ DataUtils.toHex(co.signedInfo.publisher.publisherPublicKeyDigest);
					
					output+= "<br />";
					output+= "<br />";
				}
				if(co.signedInfo !=null && co.signedInfo.timestamp!=null){
					var d = new Date();
					d.setTime( co.signedInfo.timestamp.msec );
					
					var bytes = [217, 185, 12, 225, 217, 185, 12, 225];
					
					output += "TimeStamp: "+d;
					output+= "<br />";
					output += "TimeStamp(number): "+ co.signedInfo.timestamp.msec;
					
					
					output+= "<br />";
				}
			    if(co.signedInfo !=null && co.signedInfo.type!=null){

					output += "Type: "+co.signedInfo.type;
					output+= "<br />";
					output+= "<br />";
				}
			    if(co.signedInfo !=null && co.signedInfo.locator!=null){

					output += "Locator: "+co.signedInfo.locator.type;
					output+= "<br />";
					output+= "<br />";
				}
			    if(co.signedInfo !=null && co.signedInfo.freshnessSeconds!=null){

					output += "FreshnessSeconds: "+co.signedInfo.freshnessSeconds;
					output+= "<br />";
					output+= "<br />";
				}
			    if(co.signedInfo !=null && co.signedInfo.finalBlockID!=null){

					output += "FinalBlockID: "+co.signedInfo.finalBlockID;
					output+= "<br />";
					output+= "<br />";
				}
				
				if(co.signedInfo!=null && co.signedInfo.locator!=null && co.signedInfo.locator.publicKey!=null){
					
					var publickey = rstr2b64(DataUtils.toString(co.signedInfo.locator.publicKey));
					var publickeyHex = DataUtils.toHex(co.signedInfo.locator.publicKey).toLowerCase();
					var publickeyString = DataUtils.toString(co.signedInfo.locator.publicKey);
					
					var signature = DataUtils.toHex(co.signature.signature).toLowerCase();
					
					
					var input = DataUtils.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 kp = publickeyHex.slice(56,314);
					
					output += "PUBLISHER KEY(hex): "+kp ;
					
					output+= "<br />";
					output+= "<br />";
					
					console.log('PUBLIC KEY IN HEX is ');
					console.log(kp);

					var exp = publickeyHex.slice(318,324);
					
					console.log('kp size is '+kp.length );
					output += "exponent: "+exp ;
					
					output+= "<br />";
					output+= "<br />";
					
					console.log('EXPONENT is ');
					console.log(exp);

					
					
					/*var c1 = hex_sha256(input);
					var c2 = signature;
					
					if(LOG>4)console.log('input is ');
					if(LOG>4)console.log(input);
					if(LOG>4)console.log('C1 is ');
					if(LOG>4)console.log(c1);
					if(LOG>4)console.log('C2 is ');
					if(LOG>4)console.log(c2);
					var result = c1 == c2;*/
					
					var rsakey = new RSAKey();
					
					rsakey.setPublic(kp,exp);
					
				    var result = rsakey.verifyString(input, signature);
					
				    
				    
				    console.log('PUBLIC KEY n after is ');
					console.log(rsakey.n);

					console.log('EXPONENT e after is ');
					console.log(rsakey.e);
					
					
					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]);
				}
				
				////////////////////////////////////////
				
				
				var forwardingEntry = decodeHexForwardingEntry(content);
				
				if(LOG>3)console.log('FORWARDING ENTRY IS PRESENT');
				if(LOG>3)console.log(forwardingEntry);

				///////////////////////////////////////
				
				//var output ="";
				
				if(forwardingEntry.action!=null ){
					output+= "Action: ";
					
					output+=  DataUtils.toHex(forwardingEntry.action);
						
					output+= "<br />";
					output+= "<br />";
				}
				
				if(forwardingEntry.prefixName!=null){
					output+= "PrefixName: ";
					
					output+= forwardingEntry.prefixName.getName();
					output+= "<br />";
				}
				
				if(forwardingEntry.ccndID!=null){
					output+= "ccndID: ";
					
					output+= forwardingEntry.ccndID;
					output+= "<br />";
				}
				
				if(forwardingEntry.flags!=null){
					output+= "Flags: ";
					
					output+= forwardingEntry.flags;
					output+= "<br />";
				}
				
				if(forwardingEntry.lifetime!=null){
					output+= "Lifetime: ";
					
					output+= forwardingEntry.lifetime;
					output+= "<br />";
				}

				
			}
			
			
			
			document.getElementById('result').innerHTML = output;
			
		}

	</script>

</head>
<body >
	<form>
		
		Please Press Decode:<br />
		

	</form>
	<button onclick="decode()">Decode</button>

		<p id="result">01d2f2faa563636e7800fa0285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f00facd70726566697872656700fa29ad048202aa03b208854ddbf69779cdf4ef74be99474478c8bc3ca0873e0ffa1fa60120aa276db122b83404e595a8a3caeaf09630276658ba4e7beaadb4b91a8cc58e19ac4a42289507ed8d609aa9bef61a5a507f349c83d2944b8c16fecfd90d4a40ddb8687592c0a57517564235b2e359db54f51a37e1ac39e518a2196e3ffda7eb2fb301f3c404dd0000f20001a203e20285ef7c4f5d4743a8b8586ea2e741b7fc39d1dc0dbe1b1930e787cfd1d833ea7a610002bab504fce9e253d70001e2018219fd3082019b30820104020900b7d85c906bad52ee300d06092a864886f70d010105050030123110300e060355040313076178656c636476301e170d3132303432383233343433375a170d3132303532383233343433375a30123110300e060355040313076178656c63647630819f300d06092a864886f70d010101050003818d0030818902818100e17d30a7d828ab1b840b17542dcaf6207afd221e086b2a60d16cb7f54448ba9f3f08bcd099db21dd162a779e61aa89eee554d3a47de230bc7ac590d524067c3898bba6f5dc4360b845eda48cbd9cf126a723445f0e1952d7325a75faf556144f9a98af7186b0278685b8e2c08bea87171b4dee585c1828295b5395eb4a17779f0203010001300d06092a864886f70d010105050003818100cb3ab0357d7cd2ae97ed501e51a3a0e2817d418e47fb17906477af61495a7e8d8789141065b082d001f4b15193d0b43fb661cde20a6498372c6abbd3dcb9f0d12659ef07b3c6dbdf8bdf2f65477eed7adcd457d793b1c27badda7c5ade80ce95b7d8827fe78c8a35f3fb4ba648a081be2cfe84231abab3c2b531746df2e0492b000000019a02d5058a04cabe73656c6672656700f2faa56d656b69000004fa8e330003d2d63231343734383336343700000000000002d28e310000</p>

</body>
</html>