diff --git a/js/Signature.js b/js/Signature.js
index f8f4d69..06badef 100644
--- a/js/Signature.js
+++ b/js/Signature.js
@@ -38,11 +38,11 @@
 		
 		if (decoder.peekStartElement(CCNProtocolDTags.DigestAlgorithm)) {
 			
-			if(LOG>4)console.log('DIGIEST ALGORITHM FOUND');
+			if(LOG>4)console.log('DIGEST ALGORITHM FOUND');
 			this.DigestAlgorithm = decoder.readUTF8Element(CCNProtocolDTags.DigestAlgorithm); 
 		}
 		if (decoder.peekStartElement(CCNProtocolDTags.Witness)) {
-			if(LOG>4)console.log('WITNESS FOUND FOUND');
+			if(LOG>4)console.log('WITNESS FOUND');
 			this.Witness = decoder.readBinaryElement(CCNProtocolDTags.Witness); 
 		}
 		
diff --git a/js/java_socket_bridge.js b/js/java_socket_bridge.js
index f0d745d..8e0e7c7 100644
--- a/js/java_socket_bridge.js
+++ b/js/java_socket_bridge.js
@@ -367,6 +367,20 @@
 }
 
 
+/**
+ * Computes the size in bytes of the ContentObject once encoded
+ * @param co the content object to encode
+ * @returns the size in bytes of the encoded ContentObject
+ */
+function getContentObjectSize(co){
+	var enc = new BinaryXMLEncoder();
+	
+	co.encode(enc);
+	
+	return enc.getReducedOstream().length;
+}
+
+
 
 
 function encodeToHexInterest(int){
@@ -388,7 +402,11 @@
  
 	co.encode(enc);
 	
-	var hex = toHex(enc.getReducedOstream());
+	var reducedOstream = enc.getReducedOstream();
+	
+	if(LOG>3) console.log("In encodeToHexContentObject, reducedOstream: ", reducedOstream);
+	
+	var hex = toHex(reducedOstream);
 
 	return hex;
 
diff --git a/js/security/KeyManager.js b/js/security/KeyManager.js
index 7521c84..dcf036d 100644
--- a/js/security/KeyManager.js
+++ b/js/security/KeyManager.js
@@ -3,6 +3,7 @@
 var KeyManager = function KeyManager(){
 
 	this.certificate = 
+//		"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhfTCn2CirG4QLF1QtyvYgev0iHghrKmDRbLf1REi6nz8IvNCZ2yHdFip3nmGqie7lVNOkfeIwvHrFkNUkBnw4mLum9dxDYLhF7aSMvZzxJqcjRF8OGVLXMlp1+vVWFE+amK9xhrAnhoW44sCL6ocXG03uWFwYKClbU5XrShd3nwIDAQAB";
 			'MIIBvTCCASYCCQD55fNzc0WF7TANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJK'+
 			'UDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwHhcNMTAwNTI4MDIwODUxWhcNMjAwNTI1'+
 			'MDIwODUxWjAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwgZ8w'+
@@ -15,6 +16,9 @@
 			'3OK+u3ivTSj3zwjtpudY5Xo=';
 	
 	this.privateKey =
+//		'3082025c02010002818100bd9565559c1795c049a5ef4dc9d1bc8b981b66097ea253f5d0f50f1a1df908ac4e69a797dadd2c0590944a6e849e1fbb7371c53dfddbe7802656e1d5f449b8530d9c7da8d6abebd90e06124d927f2f6c5721f1d0e49e7f6a1167caf960d96ff5afaa2d2567337772a944c8e6ceb859b25a231d9eca873574ff98225c853f38ef02030100010281805e8e57d7661e014bc1afe87644d5be1365cf2c8a49c5ced888dae1286690a1f9c6b63da7a8baad4d2d3a39117c459d9011d949c64c8a54a17efdd06fb502dbd27c27d89a6d984eddc7c41a20178ad3cf6998c82d4ca576c6e34b47d1e49d39e7f4ddb31371e2af7bf2f6ef21bf79a82132035e756b6e2ab44d4d8521dd0bb461024100efcd7cdc0f32e32565cd4980cd2f42b122b81f9ae49cce5abb4db30ae6b7c3c18433233eb5b7d870197fb4d84b128086ff6d99e0097212d37e3fa5e6511e9631024100ca638d4921c4b3a9aaa28bf1df74a140f63e16fd5c84b51f34002d4da77e23ad68a470bf7cbffd891c040fb867f181d662a769e0cedaad5e5cd7be1efc94591f02400f08f63421ebd1dc0d66f29dd5bf89d1eb5859faef2c79afaca0b18214771f19e9fcfecfb6bb0121fe2748a26b0a8cee69e3684b68ac334bf9556a44677fa07102401970b61bd140d68ca744536f0df5ad276b4c96bb365c002071faebb6ed2ceff3264a3559fca66d8a449946189a084397dd42ca0e56322ac4c7cadebd2a66c365024100c040c81d88e824684420ab98cbdf6615bb90bcedcb82081ab19375972c706d6596101b0d313017e26ec106ff814371b70db2deb00f8b25897b9b46ce8dd135d1';
+//		'30820276020100300d06092a864886f70d0101010500048202603082025c02010002818100bd9565559c1795c049a5ef4dc9d1bc8b981b66097ea253f5d0f50f1a1df908ac4e69a797dadd2c0590944a6e849e1fbb7371c53dfddbe7802656e1d5f449b8530d9c7da8d6abebd90e06124d927f2f6c5721f1d0e49e7f6a1167caf960d96ff5afaa2d2567337772a944c8e6ceb859b25a231d9eca873574ff98225c853f38ef02030100010281805e8e57d7661e014bc1afe87644d5be1365cf2c8a49c5ced888dae1286690a1f9c6b63da7a8baad4d2d3a39117c459d9011d949c64c8a54a17efdd06fb502dbd27c27d89a6d984eddc7c41a20178ad3cf6998c82d4ca576c6e34b47d1e49d39e7f4ddb31371e2af7bf2f6ef21bf79a82132035e756b6e2ab44d4d8521dd0bb461024100efcd7cdc0f32e32565cd4980cd2f42b122b81f9ae49cce5abb4db30ae6b7c3c18433233eb5b7d870197fb4d84b128086ff6d99e0097212d37e3fa5e6511e9631024100ca638d4921c4b3a9aaa28bf1df74a140f63e16fd5c84b51f34002d4da77e23ad68a470bf7cbffd891c040fb867f181d662a769e0cedaad5e5cd7be1efc94591f02400f08f63421ebd1dc0d66f29dd5bf89d1eb5859faef2c79afaca0b18214771f19e9fcfecfb6bb0121fe2748a26b0a8cee69e3684b68ac334bf9556a44677fa07102401970b61bd140d68ca744536f0df5ad276b4c96bb365c002071faebb6ed2ceff3264a3559fca66d8a449946189a084397dd42ca0e56322ac4c7cadebd2a66c365024100c040c81d88e824684420ab98cbdf6615bb90bcedcb82081ab19375972c706d6596101b0d313017e26ec106ff814371b70db2deb00f8b25897b9b46ce8dd135d1';
+//		"MIICXAIBAAKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQABAoGAXo5X12YeAUvBr+h2RNW+E2XPLIpJxc7YiNrhKGaQofnGtj2nqLqtTS06ORF8RZ2QEdlJxkyKVKF+/dBvtQLb0nwn2JptmE7dx8QaIBeK089pmMgtTKV2xuNLR9HknTnn9N2zE3Hir3vy9u8hv3moITIDXnVrbiq0TU2FId0LtGECQQDvzXzcDzLjJWXNSYDNL0KxIrgfmuSczlq7TbMK5rfDwYQzIz61t9hwGX+02EsSgIb/bZngCXIS034/peZRHpYxAkEAymONSSHEs6mqoovx33ShQPY+Fv1chLUfNAAtTad+I61opHC/fL/9iRwED7hn8YHWYqdp4M7arV5c174e/JRZHwJADwj2NCHr0dwNZvKd1b+J0etYWfrvLHmvrKCxghR3Hxnp/P7PtrsBIf4nSKJrCozuaeNoS2isM0v5VWpEZ3+gcQJAGXC2G9FA1oynRFNvDfWtJ2tMlrs2XAAgcfrrtu0s7/MmSjVZ/KZtikSZRhiaCEOX3ULKDlYyKsTHyt69KmbDZQJBAMBAyB2I6CRoRCCrmMvfZhW7kLzty4IIGrGTdZcscG1llhAbDTEwF+JuwQb/gUNxtw2y3rAPiyWJe5tGzo3RNdE=";
 			'MIICWwIBAAKBgQDRhGF7X4A0ZVlEg594WmODVVUIiiPQs04aLmvfg8SborHss5gQ'+
 			'Xu0aIdUT6nb5rTh5hD2yfpF2WIW6M8z0WxRhwicgXwi80H1aLPf6lEPPLvN29EhQ'+
 			'NjBpkFkAJUbS8uuhJEeKw0cE49g80eBBF4BCqSL6PFQbP9/rByxdxEoAIQIDAQAB'+
diff --git a/js/test-encode-decode-ContentObject.html b/js/test-encode-decode-ContentObject.html
index a737d3f..482e5c0 100644
--- a/js/test-encode-decode-ContentObject.html
+++ b/js/test-encode-decode-ContentObject.html
@@ -88,9 +88,16 @@
 			
 			co.sign();
 			
+			var coSize = getContentObjectSize(co);
+			
 			
 			var output = encodeToHexContentObject(co);
 			
+			if(LOG>3) console.log("Size: ", coSize);
+
+			
+			document.getElementById('coSize').innerHTML = coSize;
+			
 			document.getElementById('result').innerHTML = output;
 
 		}
@@ -104,12 +111,7 @@
 			
 			var co = decodeHexContentObject(input);
 			
-			if(LOG>3)console.log('CONTENT OBJECT DECODED');
-			if(LOG>3)console.log(co);
-
-			///////////////////////////////////////
-			
-			var output ="";
+var output ="";
 			
 			if(co==-1)
 				output+= "NO CONTENT FOUND"
@@ -138,6 +140,7 @@
 					output+= "<br />";
 					output+= "<br />";
 				}
+				
 				if(co.Signature !=null && co.Signature.Signature!=null){
 					
 					output += "SIGNATURE(hex): "+ toHex(co.Signature.Signature);
@@ -147,6 +150,7 @@
 				}
 				if(co.SignedInfo !=null && co.SignedInfo.Publisher!=null && co.SignedInfo.Publisher.PublisherPublicKeyDigest!=null){
 					
+					output += "Publisher Public Key Digest:  " + co.SignedInfo.Publisher.PublisherPublicKeyDigest + "<br />";
 					output += "Publisher Public Key Digest(hex): "+ toHex(co.SignedInfo.Publisher.PublisherPublicKeyDigest);
 					
 					output+= "<br />";
@@ -169,6 +173,8 @@
 					
 					
 					var input = toString(co.rawSignatureData);
+					
+					if(LOG>2) console.log("Input: ", input, "; raw signature data: ", co.rawSignatureData);
 					 
 					
 					output += "DER Certificate: "+publickey ;
@@ -188,29 +194,33 @@
 					if(LOG>2) console.log(co.Signature.Signature);
 					
 					
-					var x509 = new X509();
+					/*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 result = x509.subjectPublicKeyRSA.verifyString(input, signature);*/
+					//console.log('result is '+result);
 					
-					var kp = publickeyHex.slice(56,314);
+					
+					//var kp = publickeyHex.slice(56,314);
+					var kp = publickeyHex.slice(336,594)
+// 					var kp = '00bd9565559c1795c049a5ef4dc9d1bc8b981b66097ea253f5d0f50f1a1df908ac4e69a797dadd2c0590944a6e849e1fbb7371c53dfddbe7802656e1d5f449b8530d9c7da8d6abebd90e06124d927f2f6c5721f1d0e49e7f6a1167caf960d96ff5afaa2d2567337772a944c8e6ceb859b25a231d9eca873574ff98225c853f38ef';
 					
 					output += "PUBLISHER KEY(hex): "+kp ;
 					
 					output+= "<br />";
 					output+= "<br />";
 					
-					console.log('kp is '+kp);
+					if(LOG>3) console.log('kp is '+kp);
 					
-					var exp = publickeyHex.slice(318,324);
+					//var exp = publickeyHex.slice(318,324);
+					var exp = publickeyHex.slice(598,604);
+// 					var exp = '5e8e57d7661e014bc1afe87644d5be1365cf2c8a49c5ced888dae1286690a1f9c6b63da7a8baad4d2d3a39117c459d9011d949c64c8a54a17efdd06fb502dbd27c27d89a6d984eddc7c41a20178ad3cf6998c82d4ca576c6e34b47d1e49d39e7f4ddb31371e2af7bf2f6ef21bf79a82132035e756b6e2ab44d4d8521dd0bb461';
 					
-					console.log('kp size is '+kp.length );
+					if(LOG>3) console.log('kp size is '+kp.length );
 					output += "exponent: "+exp ;
 					
 					output+= "<br />";
@@ -218,10 +228,21 @@
 					
 					console.log('exp is '+exp);
 					
-					
+					var rsakey = new RSAKey();
 					rsakey.setPublic(kp,exp);
-
-				    var result = rsakey.verifyString(input, signature);*/
+				    var result = rsakey.verifyString(input, signature);
+				    
+				    var inputBis = toHex(co.Name).concat(toHex(co.SignedInfo), toHex(co.Content));
+				    
+// 				    if(LOG>0){
+// 				    	console.log("Input: ", input);
+// 				    	console.log("Input bis: ", inputBis);
+// 				    	console.log("Verify input bis: ", rsakey.verifyString(inputBis, signature));
+// 				    }
+				    
+				    //var x509 = new X509();
+				    //x509.readCertPEM(publickey);
+				    //if(LOG>0) console.log("x509 verif: ", x509.subjectPublicKeyRSA.verifyString(input, signature));
 					
 					if(result)
 						output += 'SIGNATURE VALID';
@@ -243,6 +264,8 @@
 			
 			document.getElementById('result').innerHTML = output;
 			
+			return input;
+			
 		}
 
 	</script>
@@ -257,15 +280,22 @@
 		
 		Please Enter the Content:<br />
 		
-		<textarea id="content" cols="40" rows="5" name="CONTENT" value="SUCCESS"  >SUCCESS!</textarea> 
+		<textarea id="content" cols="40" rows="5" name="CONTENT" value="SUCCESS"  >SUCCESS!</textarea>
+		
+		
 		
 	</form>
-	<button onclick="encode()">Encode</button>
-	<button onclick="decode()">Decode</button>
-	
-	
+	<div>
+		<button onclick="encode()">Encode</button>
+		<button onclick="decode()">Decode</button>
+	</div>
+		<div>
+			<p>Size: <span id="coSize"></span></p>
+			
+			<p id="result"></p>
+			
+		</div> 
 
-		<p id="result"></p>
 
 </body>
 </html>
\ No newline at end of file
diff --git a/js/test-request-data.html b/js/test-request-data.html
index 0dd63b2..582e7ea 100644
--- a/js/test-request-data.html
+++ b/js/test-request-data.html
@@ -92,6 +92,10 @@
 			//content object
 			var co = queryPrefix( ContentName );
 			
+			var coSize = getContentObjectSize(co);
+			
+			document.getElementById('coSize').innerHTML = coSize;
+			
 			///////////////////////////////////////
 			
 			var output ="";
@@ -101,6 +105,10 @@
 			else if (co==-2)
 				output+= "CONTENT NAME IS EMPTY"
 			else{
+				output += "Content: " + toString(toHex(co));
+				output+="<br />";
+				output+= "<br />";
+				
 				if(co.Name!=null && co.Name.Components!=null){
 					output+= "NAME: ";
 					
@@ -156,6 +164,12 @@
 					
 					
 					var input = toString(co.rawSignatureData);
+					
+					var inputBis = toString(co.rawSignatureData.slice(0,co.rawSignatureData.length-2).concat([0]));
+					
+					console.log("Input bis: ", toHex(co.rawSignatureData.slice(0,co.rawSignatureData.length-2).concat([0])));
+					
+					if(LOG>2) console.log("Input: ", toHex(co.rawSignatureData), "; raw signature data: ", co.rawSignatureData, "; to hex: ", toHex(co.rawSignatureData));
 					 
 					
 					output += "DER Certificate: "+publickey ;
@@ -209,7 +223,11 @@
 					rsakey.setPublic(kp,exp);
 				    var result = rsakey.verifyString(input, signature);
 				    
-				    var inputBis = toHex(co.Name).concat(toHex(co.SignedInfo), toHex(co.Content));
+				    var resultBis = rsakey.verify(inputBis, signature);
+				    
+				    console.log("result bis: ", resultBis);
+				    
+				    //var inputBis = toHex(co.Name).concat(toHex(co.SignedInfo), toHex(co.Content));
 				    
 // 				    if(LOG>0){
 // 				    	console.log("Input: ", input);
@@ -249,13 +267,19 @@
 	<form>
 		Please Enter a Content Name:<br /><input id="contentname" type="text" name="CONTENTNAME" value="/PARC/abc" /> <br />
 	</form>
-	<button onclick="run()">Request Data!</button>
+	<div>
+		<button onclick="run()">Request Data!</button>
+	</div>
 	<div >
 		<applet id="JavaSocketBridge" archive="JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
 		</applet>
 	</div>
 
-		<p id="result"></p>
-
+		<div>
+			<p>Size: <span id="coSize"></span></p>
+			
+			<p id="result"></p>
+			
+		</div> 
 </body>
 </html>
\ No newline at end of file
