first commit
diff --git a/src-old/ContentObject.js b/src-old/ContentObject.js
new file mode 100644
index 0000000..0802479
--- /dev/null
+++ b/src-old/ContentObject.js
@@ -0,0 +1,12 @@
+// JavaScript Document
+
+var ContentObject = function ContentObject(_Signature,_Name,_SignedInfo,_Content){
+
+ this.Signature = _Signature;
+ this.Name = _Name;
+ this.SignedInfo = _SignedInfo;
+ this.Content=_Content;
+
+};
+
+exports.ContentObject = ContentObject;
diff --git a/src-old/ContentObjectDecoder.js b/src-old/ContentObjectDecoder.js
new file mode 100644
index 0000000..83e5aee
--- /dev/null
+++ b/src-old/ContentObjectDecoder.js
@@ -0,0 +1,214 @@
+// JavaScript Document
+/*
+ @author: Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var ContentObjectEncoder = function ContentObjectEncoder(){
+
+
+};
+
+
+/*
+ TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+
+ //var slit = function splitNumber(number){
+ //};
+ var i = 0;
+
+ var addToBuffer = function addToBuffer(buffer,number,tt){
+
+
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+ var index = 1;
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ };
+ //NOTE NUMBETR= SIZE
+ var addToBufferData = function addToBuffer(buffer,data,tt){
+
+ var number = sizeof(data);
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ for(i=0;i<10;i++){
+ buffer[index+i] = data[i];
+ }
+
+ };
+
+ //NOTE NUMBETR= SIZE
+ var addName = function addToBuffer(buffer,name){
+
+ for(i=0;i<name.size;i++){
+ tt = require('./TAG').tt.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+ addCloseTag(buffer);
+ }
+
+ };
+
+
+ var addCloseTag = function addCloseTag(buffer){
+ var tag = DTAGS.CCN_CLOSE;
+ buffer.write(tag);
+ };
+
+ var buffer = new Buffer(1000);
+
+ var tag = DTAGS.CCN_DTAG_ContentObject;
+ var tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_Signature;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_SignatureBits;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tt = TT.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_Name;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ addName(buffer,_ContentObject.moName,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_SignedInfo;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Timestamp;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_KeyLocator;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_key;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Content;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.msContent,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+
+
+ var content = "hello world";
+
+ var name = new require('./Name').Name(['hello']);
+
+ var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+
+ var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+ sig.generateSignature(name,sigInfo,content);
+
+ var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+
+ var buffer = this.encodeContentObject(co);
+
+ fs.writeFile(_filename);
+
+
+}
+
+
+var co = new ContentObjectEncoder();
+
+
+var file = ContentObjectEncoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/ContentObjectEncoder.js b/src-old/ContentObjectEncoder.js
new file mode 100644
index 0000000..ae10a5f
--- /dev/null
+++ b/src-old/ContentObjectEncoder.js
@@ -0,0 +1,260 @@
+// JavaScript Document
+/*
+ @author: Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var ContentObjectEncoder = function ContentObjectEncoder(){
+
+
+};
+
+
+/*
+ TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+
+ //var slit = function splitNumber(number){
+ //};
+
+ /*
+ * returns an integer
+ */
+ var encodeTypeAndVal = function(itype, lvalue, bstream) {
+ /*
+ We exploit the fact that encoding is done from the right, so this actually means
+ there is a deterministic encoding from a long to a Type/Value pair:
+
+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+ |ABCD.EFGH|IJKL.MNOP|QRST.UVWX|YZ01.2345|6789.abcd|efgh.ijkl|mnop.qrst|uvwx.yz@#
+
+ 60> 53> 46> 39> 32> 25> 18> 11> 4>
+ |_000.ABCD|_EFG.HIJK|_LMN.OPQR|_STU.VWXY|_Z01.2345|_678.9abc|_defg.hij|_klm.nopq|_rst.uvwx|_yz@#___
+
+ What we want to do is compute the result in MSB order and write it directly
+ to the channel without any intermediate form.
+ */
+
+ var bits;
+ var count = 0;
+
+ // once we start writing bits, we keep writing bits even if they are "0"
+ var writing = false;
+
+ // a few heuristic to catch the small-bit length patterns
+ if( value < 0 || value > 15 ) {
+ int start = 60;
+ if( 0 <= value ) {
+ if( value < bits_11 )
+ start = 4;
+ else if( value < bits_18 )
+ start = 11;
+ else if( value < bits_32 )
+ start = 25;
+ }
+
+ for( var i = start; i >= 4; i -= 7) {
+ bits = (int) (value >>> i) & BinaryXMLCodec.XML_REG_VAL_MASK;
+ if( bits != 0 || writing ) {
+ ostream.write(bits);
+ count++;
+ writing = true;
+ }
+ }
+ }
+ };
+
+ var addToBuffer = function addToBuffer(buffer,number,tt){
+
+
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+ var index = 1;
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ };
+ //NOTE NUMBETR= SIZE
+ var addToBufferData = function addToBuffer(buffer,data,tt){
+
+ var number = sizeof(data);
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ for(i=0;i<10;i++){
+ buffer[index+i] = data[i];
+ }
+
+ };
+
+ //NOTE NUMBETR= SIZE
+ var addName = function addToBuffer(buffer,name){
+
+ for(i=0;i<name.size;i++){
+ tt = require('./TAG').tt.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+ addCloseTag(buffer);
+ }
+
+ };
+
+
+ var addCloseTag = function addCloseTag(buffer){
+ var tag = DTAGS.CCN_CLOSE;
+ buffer.write(tag);
+ };
+
+ var buffer = new Buffer(1000);
+
+ var tag = DTAGS.CCN_DTAG_ContentObject;
+ var tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_Signature;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_SignatureBits;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tt = TT.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_Name;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ addName(buffer,_ContentObject.moName,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_SignedInfo;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Timestamp;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_KeyLocator;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_key;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Content;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.msContent,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+
+
+ var content = "hello world";
+
+ var name = new require('./Name').Name(['hello']);
+
+ var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+
+ var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+ sig.generateSignature(name,sigInfo,content);
+
+ var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+
+ var buffer = this.encodeContentObject(co);
+
+ fs.writeFile(_filename);
+
+
+}
+
+
+var co = new ContentObjectEncoder();
+
+
+var file = ContentObjectEncoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/Decoder.js b/src-old/Decoder.js
new file mode 100644
index 0000000..7a59e5e
--- /dev/null
+++ b/src-old/Decoder.js
@@ -0,0 +1,42 @@
+// JavaScript Document
+
+
+var Decoder = function Decoder(){
+
+
+ //PRIVATE FUNCTIONS
+
+
+}
+
+
+//PUBLIC FUNCTIONS
+
+Decoder.prototype.decodeFile = function(filename){
+ var fs = require('fs');
+
+ var file = fs.readFile(filename, function(err,data){
+ if(err) {
+ console.error("Could not open file: %s", err);
+ process.exit(1);
+ }
+
+ //console.log(data);
+ //console.log(data.toString('binary'));
+ for( i=0;i<data.length ;i++) {
+ var v = data[i];
+ console.log(v.toString(2)+'\n');
+ }
+
+ console.log( require('./TAG.js').d.CCN_DTAG_Any);
+ var a =new Buffer('aGVsbG8gd29ybGQK','base64');
+ console.log(a.toString('base64'));
+
+ });
+}
+
+
+
+var decoder = new Decoder();
+var file = decoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
diff --git a/src-old/Encoder.js b/src-old/Encoder.js
new file mode 100644
index 0000000..4ced16c
--- /dev/null
+++ b/src-old/Encoder.js
@@ -0,0 +1,208 @@
+// JavaScript Document
+/*
+ Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var Encoder = function Encoder(){
+
+
+};
+/*
+ TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+
+ //var slit = function splitNumber(number){
+ //};
+ var i = 0;
+
+ var addToBuffer = function addToBuffer(buffer,number,tt){
+
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+ var index = 1;
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ };
+ //NOTE NUMBETR= SIZE
+ var addToBufferData = function addToBuffer(buffer,data,tt){
+
+ var number = sizeof(data);
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ for(i=0;i<10;i++){
+ buffer[index+i] = data[i];
+ }
+
+ };
+
+ //NOTE NUMBETR= SIZE
+ var addName = function addToBuffer(buffer,name){
+
+ for(i=0;i<name.size;i++){
+ tt = require('./TAG').tt.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+ addCloseTag(buffer);
+ }
+
+ };
+
+
+ var addCloseTag = function addCloseTag(buffer){
+ var tag = DTAGS.CCN_CLOSE;
+ buffer.write(tag);
+ };
+
+ var buffer = new Buffer(1000);
+
+ var tag = DTAGS.CCN_DTAG_ContentObject;
+ var tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_Signature;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_SignatureBits;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tt = require('./TAG').tt.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_Name;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ addName(buffer,_ContentObject.moName,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_SignedInfo;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Timestamp;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_KeyLocator;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_key;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Content;
+ tt = require('./TAG').tt.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.msContent,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+
+
+ var content = "hello world";
+
+ var name = new require('./Name').Name(['hello']);
+
+ var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+
+ var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+ sig.generateSignature(name,sigInfo,content);
+
+ var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+
+ var buffer = this.encodeContentObject(co);
+
+ fs.writeFile(_filename);
+
+
+}
+
+
+var Encoder = new Encoder();
+
+var file = Encoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/InterestMessage.js b/src-old/InterestMessage.js
new file mode 100644
index 0000000..90177b4
--- /dev/null
+++ b/src-old/InterestMessage.js
@@ -0,0 +1,17 @@
+// JavaScript Document
+
+var InterestMessage = function InterestMessage(_Name,_MinSuffixComponents,_MaxSuffixComponents,_PublisherPublicKeyDigest, _Exclude, _ChildSelector,_AnswerOriginKind,_Scope,_InterestLifetime,_Nonce){
+
+ this.Name = _Name;
+ this.MinSuffixComponents = _MinSuffixComponents;
+ this.MaxSuffixComponents = _MaxSuffixComponents;
+ this.PublisherPublicKeyDigest=_PublisherPublicKeyDigest;
+ this.Exclude=_Exclude;
+ this.ChildSelector=_ChildSelector;
+ this.Scope=_Scope;
+ this.InterestLifetime=_InterestLifetime;
+ this.Nonce = _Nonce;
+
+};
+
+exports.InterestMessage = InterestMessage;
diff --git a/src-old/InterestMessageDecoder.js b/src-old/InterestMessageDecoder.js
new file mode 100644
index 0000000..565c1a9
--- /dev/null
+++ b/src-old/InterestMessageDecoder.js
@@ -0,0 +1,207 @@
+// JavaScript Document
+/*
+ @author: Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var Encoder = function Encoder(){
+
+
+};
+/*
+ TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+
+ //var slit = function splitNumber(number){
+ //};
+ var i = 0;
+
+ var addToBuffer = function addToBuffer(buffer,number,tt){
+
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+ var index = 1;
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ };
+ //NOTE NUMBETR= SIZE
+ var addToBufferData = function addToBuffer(buffer,data,tt){
+
+ var number = sizeof(data);
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ for(i=0;i<10;i++){
+ buffer[index+i] = data[i];
+ }
+
+ };
+
+ //NOTE NUMBETR= SIZE
+ var addName = function addToBuffer(buffer,name){
+
+ for(i=0;i<name.size;i++){
+ tt = require('./TAG').tt.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+ addCloseTag(buffer);
+ }
+
+ };
+
+
+ var addCloseTag = function addCloseTag(buffer){
+ var tag = DTAGS.CCN_CLOSE;
+ buffer.write(tag);
+ };
+
+ var buffer = new Buffer(1000);
+
+ var tag = DTAGS.CCN_DTAG_ContentObject;
+ var tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_Signature;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_SignatureBits;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tt = TT.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_Name;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ addName(buffer,_ContentObject.moName,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_SignedInfo;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Timestamp;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_KeyLocator;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_key;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Content;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.msContent,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+
+
+ var content = "hello world";
+
+ var name = new require('./Name').Name(['hello']);
+
+ var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+
+ var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+ sig.generateSignature(name,sigInfo,content);
+
+ var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+
+ var buffer = this.encodeContentObject(co);
+
+ fs.writeFile(_filename);
+
+}
+
+
+var Encoder = new Encoder();
+
+var file = Encoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/InterestMessageEncoder.js b/src-old/InterestMessageEncoder.js
new file mode 100644
index 0000000..ba90934
--- /dev/null
+++ b/src-old/InterestMessageEncoder.js
@@ -0,0 +1,234 @@
+// JavaScript Document
+/*
+ InterestMessageEncoder is used to convert XML Interest Message into Binary Interest Message.
+ @author: Meki Cherkaoui
+
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+/*
+ Constructor for the IME
+*/
+var InterestMessageEncoder = function InterestMessageEncoder(){
+
+
+};
+
+/*
+ TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+
+/*
+ Encode function takes in a content object and returs a buffer containing the whole binary encoding.
+
+*/
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+
+
+ var i = 0;
+
+
+
+ /*
+ This function will add a Tag to the buffer
+ The number is the dtag number and tt is the tag type
+ http://www.ccnx.org/documentation/protocol/ccnx-protocol-2/ccnx-binary-encoding-ccnb/
+
+ */
+ var addTagToBuffer = function(buffer,number,tt){
+
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & DTAGS.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+ var index = 1;
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer.write(splitNumbers[j]);
+ }
+
+ };
+
+ //NOTE NUMBETR= SIZE
+ var addToBuffer = function(buffer,data,tt){
+
+ var number = sizeof(data);
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~DTAGS.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ for(i=0;i<data.length;i++){
+ buffer[index+i] = data[i];
+ }
+
+ };
+
+
+ /*
+ Add tag to buffer:
+
+
+ */
+ var addName = function(buffer,name){
+
+ for(i=0;i<name.size;i++){
+ tt = require('./TAG').tt.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+ addCloseTag(buffer);
+ }
+
+ };
+
+
+ var addCloseTag = function(buffer){
+ var tag = DTAGS.CCN_CLOSE;
+ buffer.write(tag);
+ };
+
+ var buffer = new Buffer(1000);
+
+ var tag = DTAGS.CCN_DTAG_ContentObject;
+ var tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_Signature;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_SignatureBits;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tt = TT.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_Name;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ addName(buffer,_ContentObject.moName,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_SignedInfo;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Timestamp;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_KeyLocator;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_key;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Content;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.msContent,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+
+ return buffer;
+}
+
+
+Encoder.prototype.encodeToFile = function(_filename){
+
+
+ var content = "hello world";
+
+ var name = new require('./Name').Name(['hello']);
+
+ var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+
+ var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+ sig.generateSignature(name,sigInfo,content);
+
+ var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+
+ var buffer = this.encodeContentObject(co);
+
+ fs.writeFile(_filename);
+
+
+}
+
+
+var InterestMessageEncoder = new InterestMessageEncoder();
+
+var file = InterestMessageEncoder.encodeToFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/InterestMessageEncodingTest.js b/src-old/InterestMessageEncodingTest.js
new file mode 100644
index 0000000..a5c843d
--- /dev/null
+++ b/src-old/InterestMessageEncodingTest.js
@@ -0,0 +1,235 @@
+// JavaScript Document
+/*
+ InterestMessageEncoder is used to convert XML Interest Message into Binary Interest Message.
+ @author: Meki Cherkaoui
+
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+
+/*
+ Constructor for the IME
+*/
+var InterestMessageEncoder = function InterestMessageEncoder(){
+
+
+};
+
+/*
+ TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+
+/*
+ Encode function takes in a content object and returs a buffer containing the whole binary encoding.
+
+*/
+InterestMessageEncoder.prototype.encodeContentObject = function(_InterestMessage){
+
+
+ var i = 0;
+
+
+
+ /*
+ This function will add a Tag to the buffer
+ The number is the dtag number and tt is the tag type
+ http://www.ccnx.org/documentation/protocol/ccnx-protocol-2/ccnx-binary-encoding-ccnb/
+
+ */
+ var addTagToBuffer = function(buffer,number,tt){
+
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & DTAGS.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+ var index = 1;
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer.write(splitNumbers[j]);
+ }
+
+ };
+
+ //NOTE NUMBETR= SIZE
+ var addToBuffer = function(buffer,data,tt){
+
+ var number = sizeof(data);
+ var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+
+ splitNumbers = new Buffer(sizeOfBuffer);
+
+ number >>= 7-CCN_TT_BITS;
+
+ splitNumbers.write((CCN_TT_HBIT & ~DTAGS.CCN_CLOSE) |
+ ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+ (CCN_TT_MASK & tt));
+
+
+ while(number>0){
+ splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+ index++;
+ number>>=7;
+ }
+
+ for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+
+ buffer[index+i] = splitNumbers[j];
+ }
+
+ for(i=0;i<data.length;i++){
+ buffer[index+i] = data[i];
+ }
+
+ };
+
+
+ /*
+ Add tag to buffer:
+
+
+ */
+ var addName = function(buffer,name){
+
+ for(i=0;i<name.size;i++){
+ tt = require('./TAG').tt.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+ addCloseTag(buffer);
+ }
+
+ };
+
+
+ var addCloseTag = function(buffer){
+ var tag = DTAGS.CCN_CLOSE;
+ buffer.write(tag);
+ };
+
+ var buffer = new Buffer(1000);
+
+ var tag = DTAGS.CCN_DTAG_ContentObject;
+ var tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_Signature;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ tag = DTAGS.CCN_SignatureBits;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tt = TT.CCN_BLOB ;
+ addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_Name;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+
+ addName(buffer,_ContentObject.moName,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_SignedInfo;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Timestamp;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_KeyLocator;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ tag = DTAGS.CCN_DTAG_key;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+ tag = DTAGS.CCN_DTAG_Content;
+ tt = TT.CCN_DTAG ;
+ addToBuffer(buffer,tag,tt);
+
+ addToBufferData(buffer,_ContentObject.msContent,tt);
+
+ addCloseTag(buffer);
+
+ addCloseTag(buffer);
+
+
+ return buffer;
+}
+
+
+Encoder.prototype.encodeToFile = function(_filename){
+
+
+ var content = "hello world";
+
+ var name = new require('./Name').Name(['hello']);
+
+ var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+
+ var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+ sig.generateSignature(name,sigInfo,content);
+
+ var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+
+ var buffer = this.encodeContentObject(co);
+
+ fs.writeFile(_filename);
+
+
+}
+
+
+var InterestMessageEncoder = new InterestMessageEncoder();
+
+var file = InterestMessageEncoder.encodeToFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/Name.js b/src-old/Name.js
new file mode 100644
index 0000000..6882f0e
--- /dev/null
+++ b/src-old/Name.js
@@ -0,0 +1,6 @@
+// JavaScript Document
+var Name = function Name(_Component){
+ this.Component = _Component;
+};
+
+exports.Name = Name;
\ No newline at end of file
diff --git a/src-old/Signature.js b/src-old/Signature.js
new file mode 100644
index 0000000..2d1d878
--- /dev/null
+++ b/src-old/Signature.js
@@ -0,0 +1,8 @@
+// JavaScript Document
+var Signature = function(_DigestAlgorithm, _Witness, _SignatureBits){
+ this.DigestAlgorithm = _DigestAlgorithm;
+ this.Witness = _Witness;
+ this.SignatureBits = _SignatureBits;
+}
+
+exports.Signature = Signature;
\ No newline at end of file
diff --git a/src-old/SignedInfo.js b/src-old/SignedInfo.js
new file mode 100644
index 0000000..dcc083f
--- /dev/null
+++ b/src-old/SignedInfo.js
@@ -0,0 +1,12 @@
+// JavaScript Document
+var SignedInfo = function SignedInfo(_PublisherPublicKeyDigest,_Timestamp,_Type, _KeyLocator,_FreshnessSeconds,_FinalBlockID){
+
+ this.PublisherPublicKeyDigest = _PublisherPublicKeyDigest;
+ this.Timestamp = _Timestamp;
+ this.FreshnessSeconds = _FinalBlockID;
+ this.FinalBlockID = _FinalBlockID;
+ this.KeyLocator= _KeyLocator;
+}
+
+exports.SignedInfo = SignedInfo;
+
diff --git a/src-old/TAG.js b/src-old/TAG.js
new file mode 100644
index 0000000..d95c610
--- /dev/null
+++ b/src-old/TAG.js
@@ -0,0 +1,113 @@
+// JavaScript Document
+
+
+//d are the dictionnary tags
+exports.tt= {
+ CCN_EXT : 0x00,
+ CCN_TAG : 0x01,
+ CCN_DTAG : 0x02,
+ CCN_ATTR : 0x03,
+ CCN_DATTR : 0x04,
+ CCN_BLOB : 0x05,
+ CCN_UDATA : 0x06
+};
+
+//d are the dictionnary tags
+exports.dtags= {
+ CCN_CLOSE :0,
+ CCN_DTAG_Any : 13,
+ CCN_DTAG_Name : 14,
+ CCN_DTAG_Component : 15,
+ CCN_DTAG_Certificate : 16,
+ CCN_DTAG_Collection : 17,
+ CCN_DTAG_CompleteName : 18,
+ CCN_DTAG_Content : 19,
+ CCN_DTAG_SignedInfo : 20,
+ CCN_DTAG_ContentDigest : 21,
+ CCN_DTAG_ContentHash : 22,
+ CCN_DTAG_Count : 24,
+ CCN_DTAG_Header : 25,
+ CCN_DTAG_Interest : 26, /* 20090915 */
+ CCN_DTAG_Key : 27,
+ CCN_DTAG_KeyLocator : 28,
+ CCN_DTAG_KeyName : 29,
+ CCN_DTAG_Length : 30,
+ CCN_DTAG_Link : 31,
+ CCN_DTAG_LinkAuthenticator : 32,
+ CCN_DTAG_NameComponentCount : 33, /* DeprecatedInInterest */
+ CCN_DTAG_RootDigest : 36,
+ CCN_DTAG_Signature : 37,
+ CCN_DTAG_Start : 38,
+ CCN_DTAG_Timestamp : 39,
+ CCN_DTAG_Type : 40,
+ CCN_DTAG_Nonce : 41,
+ CCN_DTAG_Scope : 42,
+ CCN_DTAG_Exclude : 43,
+ CCN_DTAG_Bloom : 44,
+ CCN_DTAG_BloomSeed : 45,
+ CCN_DTAG_AnswerOriginKind : 47,
+ CCN_DTAG_InterestLifetime : 48,
+ CCN_DTAG_Witness : 53,
+ CCN_DTAG_SignatureBits : 54,
+ CCN_DTAG_DigestAlgorithm : 55,
+ CCN_DTAG_BlockSize : 56,
+ CCN_DTAG_FreshnessSeconds : 58,
+ CCN_DTAG_FinalBlockID : 59,
+ CCN_DTAG_PublisherPublicKeyDigest : 60,
+ CCN_DTAG_PublisherCertificateDigest : 61,
+ CCN_DTAG_PublisherIssuerKeyDigest : 62,
+ CCN_DTAG_PublisherIssuerCertificateDigest : 63,
+ CCN_DTAG_ContentObject : 64, /* 20090915 */
+ CCN_DTAG_WrappedKey : 65,
+ CCN_DTAG_WrappingKeyIdentifier : 66,
+ CCN_DTAG_WrapAlgorithm : 67,
+ CCN_DTAG_KeyAlgorithm : 68,
+ CCN_DTAG_Label : 69,
+ CCN_DTAG_EncryptedKey : 70,
+ CCN_DTAG_EncryptedNonceKey : 71,
+ CCN_DTAG_WrappingKeyName : 72,
+ CCN_DTAG_Action : 73,
+ CCN_DTAG_FaceID : 74,
+ CCN_DTAG_IPProto : 75,
+ CCN_DTAG_Host : 76,
+ CCN_DTAG_Port : 77,
+ CCN_DTAG_MulticastInterface : 78,
+ CCN_DTAG_ForwardingFlags : 79,
+ CCN_DTAG_FaceInstance : 80,
+ CCN_DTAG_ForwardingEntry : 81,
+ CCN_DTAG_MulticastTTL : 82,
+ CCN_DTAG_MinSuffixComponents : 83,
+ CCN_DTAG_MaxSuffixComponents : 84,
+ CCN_DTAG_ChildSelector : 85,
+ CCN_DTAG_RepositoryInfo : 86,
+ CCN_DTAG_Version : 87,
+ CCN_DTAG_RepositoryVersion : 88,
+ CCN_DTAG_GlobalPrefix : 89,
+ CCN_DTAG_LocalName : 90,
+ CCN_DTAG_Policy : 91,
+ CCN_DTAG_Namespace : 92,
+ CCN_DTAG_GlobalPrefixName : 93,
+ CCN_DTAG_PolicyVersion : 94,
+ CCN_DTAG_KeyValueSet : 95,
+ CCN_DTAG_KeyValuePair : 96,
+ CCN_DTAG_IntegerValue : 97,
+ CCN_DTAG_DecimalValue : 98,
+ CCN_DTAG_StringValue : 99,
+ CCN_DTAG_BinaryValue : 100,
+ CCN_DTAG_NameValue : 101,
+ CCN_DTAG_Entry : 102,
+ CCN_DTAG_ACL : 103,
+ CCN_DTAG_ParameterizedName : 104,
+ CCN_DTAG_Prefix : 105,
+ CCN_DTAG_Suffix : 106,
+ CCN_DTAG_Root : 107,
+ CCN_DTAG_ProfileName : 108,
+ CCN_DTAG_Parameters : 109,
+ CCN_DTAG_InfoString : 110,
+ CCN_DTAG_StatusResponse : 112,
+ CCN_DTAG_StatusCode : 113,
+ CCN_DTAG_StatusText : 114,
+ CCN_DTAG_Nack : 200,
+ CCN_DTAG_SequenceNumber : 256,
+ CCN_DTAG_CCNProtocolDataUnit : 17702112
+};
\ No newline at end of file
diff --git a/src-old/TextXMLEncoder.js b/src-old/TextXMLEncoder.js
new file mode 100644
index 0000000..402022d
--- /dev/null
+++ b/src-old/TextXMLEncoder.js
@@ -0,0 +1,18 @@
+/*
+
+ */
+
+
+/**
+ * An implementation of XMLEncoder for the Text codec.
+ *
+ * @see TextXMLCodec
+ * @see XMLEncoder
+ */
+var TextXMLEncoder = function TextXMLEncoder(){
+
+
+
+};
+
+
diff --git a/src/CCNProtocolDTags.js b/src/CCNProtocolDTags.js
new file mode 100644
index 0000000..cab4a4c
--- /dev/null
+++ b/src/CCNProtocolDTags.js
@@ -0,0 +1,125 @@
+
+
+
+exports.CCNProtocolDTags = {
+
+ /**
+ * Note if you add one of these, add it to the reverse string map as well.
+ * Emphasize getting the work done at compile time over trying to make something
+ * flexible and developer error-proof.
+ */
+
+ Any : 13,
+ Name : 14,
+ Component : 15,
+ Certificate : 16,
+ Collection : 17,
+ CompleteName : 18,
+ Content : 19,
+ SignedInfo : 20,
+ ContentDigest : 21,
+ ContentHash : 22,
+ Count : 24,
+ Header : 25,
+ Interest : 26, /* 20090915 */
+ Key : 27,
+ KeyLocator : 28,
+ KeyName : 29,
+ Length : 30,
+ Link : 31,
+ LinkAuthenticator : 32,
+ NameComponentCount : 33, /* DeprecatedInInterest */
+ RootDigest : 36,
+ Signature : 37,
+ Start : 38,
+ Timestamp : 39,
+ Type : 40,
+ Nonce : 41,
+ Scope : 42,
+ Exclude : 43,
+ Bloom : 44,
+ BloomSeed : 45,
+ AnswerOriginKind : 47,
+ InterestLifetime : 48,
+ Witness : 53,
+ SignatureBits : 54,
+ DigestAlgorithm : 55,
+ BlockSize : 56,
+ FreshnessSeconds : 58,
+ FinalBlockID : 59,
+ PublisherPublicKeyDigest : 60,
+ PublisherCertificateDigest : 61,
+ PublisherIssuerKeyDigest : 62,
+ PublisherIssuerCertificateDigest : 63,
+ ContentObject : 64, /* 20090915 */
+ WrappedKey : 65,
+ WrappingKeyIdentifier : 66,
+ WrapAlgorithm : 67,
+ KeyAlgorithm : 68,
+ Label : 69,
+ EncryptedKey : 70,
+ EncryptedNonceKey : 71,
+ WrappingKeyName : 72,
+ Action : 73,
+ FaceID : 74,
+ IPProto : 75,
+ Host : 76,
+ Port : 77,
+ MulticastInterface : 78,
+ ForwardingFlags : 79,
+ FaceInstance : 80,
+ ForwardingEntry : 81,
+ MulticastTTL : 82,
+ MinSuffixComponents : 83,
+ MaxSuffixComponents : 84,
+ ChildSelector : 85,
+ RepositoryInfo : 86,
+ Version : 87,
+ RepositoryVersion : 88,
+ GlobalPrefix : 89,
+ LocalName : 90,
+ Policy : 91,
+ Namespace : 92,
+ GlobalPrefixName : 93,
+ PolicyVersion : 94,
+ KeyValueSet : 95,
+ KeyValuePair : 96,
+ IntegerValue : 97,
+ DecimalValue : 98,
+ StringValue : 99,
+ BinaryValue : 100,
+ NameValue : 101,
+ Entry : 102,
+ ACL : 103,
+ ParameterizedName : 104,
+ Prefix : 105,
+ Suffix : 106,
+ Root : 107,
+ ProfileName : 108,
+ Parameters : 109,
+ InfoString : 110,
+ // 111 unallocated
+ StatusResponse : 112,
+ StatusCode : 113,
+ StatusText : 114,
+
+ // Sync protocol
+ SyncNode : 115,
+ SyncNodeKind : 116,
+ SyncNodeElement : 117,
+ SyncVersion : 118,
+ SyncNodeElements : 119,
+ SyncContentHash : 120,
+ SyncLeafCount : 121,
+ SyncTreeDepth : 122,
+ SyncByteCount : 123,
+ ConfigSlice : 124,
+ ConfigSliceList : 125,
+ ConfigSliceOp : 126,
+
+ // Remember to keep in sync with schema/tagnames.csvsdict
+ CCNProtocolDataUnit : 17702112,
+ CCNPROTOCOL_DATA_UNIT : "CCNProtocolDataUnit"
+};
+
+
diff --git a/src/ContentName.js b/src/ContentName.js
new file mode 100644
index 0000000..54d70f9
--- /dev/null
+++ b/src/ContentName.js
@@ -0,0 +1,46 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var ContentName = function ContentName(_Components){
+
+
+ this.SCHEME = "ccnx:";
+
+ this.ORIGINAL_SCHEME = "ccn:";
+
+ this.SEPARATOR = "/";
+ this.ROOT = null;
+
+ this.Components = _Components;
+};
+
+exports.ContentName = ContentName;
+
+ContentName.prototype.decode = function(/*XMLDecoder*/ decoder) {
+ decoder.readStartElement(this.getElementLabel());
+
+ this.Components = new Array(); //new ArrayList<byte []>();
+
+ while (decoder.peekStartElement(CCNProtocolDTags.Component)) {
+ this.Components.add(decoder.readBinaryElement(CCNProtocolDTags.Component));
+ }
+
+ decoder.readEndElement();
+};
+
+ContentName.prototype.encode = function(/*XMLEncoder*/ encoder) {
+ //if (!validate()) {
+ //throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+ //}
+
+ encoder.writeStartElement(this.getElementLabel());
+ var count = this.Components.length;
+ for (var i=0; i < count; ++i) {
+ encoder.writeElement(CCNProtocolDTags.Component, this.Components.get(i));
+ }
+ encoder.writeEndElement();
+};
+
+ContentName.prototype.getElementLabel = function(){
+ return CCNProtocolDTags.Name;
+};
diff --git a/src/ContentObject.js b/src/ContentObject.js
new file mode 100644
index 0000000..fb1ff09
--- /dev/null
+++ b/src/ContentObject.js
@@ -0,0 +1,61 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var ContentObject = function ContentObject(_Name,_SignedInfo,_Content,_Signature){
+
+
+ this.Name = _Name;
+ this.SignedInfo = _SignedInfo;
+ this.Content=_Content;
+ this.Signature = _Signature;
+
+};
+
+exports.ContentObject = ContentObject;
+
+
+ContentObject.prototype.decode = function(/*XMLDecoder*/ decoder) {
+
+ decoder.readStartElement(this.getElementLabel());
+
+ this.Signature = new Signature();
+ this.Signature.decode(decoder);
+
+ this.Name = new ContentName();
+ this.Name.decode(decoder);
+
+ this.SignedInfo = new SignedInfo();
+ this.SignedInfo.decode(decoder);
+
+ this.Content = decoder.readBinaryElement(CCNProtocolDTags.Content);
+
+ decoder.readEndElement();
+
+};
+
+
+ContentObject.prototype.encode = function(/*XMLEncoder*/ encoder) {
+
+ if((null == this.Name) && (null==this.SignedInfo) && (null ==this.Signature)){
+
+ throw "Illegal input inside encode of Content Object";
+ }
+ /*
+ * if (!validate()) {
+ throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+ }*/
+
+ encoder.writeStartElement(this.getElementLabel());
+
+ this.Signature.encode(encoder);
+ this.Name.encode(encoder);
+ this.SignedInfo.encode(encoder);
+
+ encoder.writeElement(CCNProtocolDTags.Content, this.Content);
+
+ encoder.writeEndElement();
+
+};
+
+
+ContentObject.prototype.getElementLabel= function(){returnCCNProtocolDTags.ContentObject;};
\ No newline at end of file
diff --git a/src/Exclude.js b/src/Exclude.js
new file mode 100644
index 0000000..667c8cf
--- /dev/null
+++ b/src/Exclude.js
@@ -0,0 +1,54 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var Exclude = function Exclude(_Values){
+
+ this.OPTIMUM_FILTER_SIZE = 100;
+
+
+ this.Values = _Values; //array of elements
+
+}
+exports.Exclude = Exclude;
+
+Exclude.prototype.decode = function(/*XMLDecoder*/ decoder) {
+
+
+
+ decoder.readStartElement(this.getElementLabel());
+
+ //TODO BUGS
+ /*var component;
+ var any = false;
+ while ((component = decoder.peekStartElement(CCNProtocolDTags.Component)) ||
+ (any = decoder.peekStartElement(CCNProtocolDTags.Any)) ||
+ decoder.peekStartElement(CCNProtocolDTags.Bloom)) {
+ var ee = component?new ExcludeComponent(): any ? new ExcludeAny() : new BloomFilter();
+ ee.decode(decoder);
+ _values.add(ee);
+ }*/
+
+ decoder.readEndElement();
+
+};
+
+Exclude.prototype.encode=function(/*XMLEncoder*/ encoder) {
+ if (!validate()) {
+ throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+ }
+ // if everything is null, output nothing
+ if (empty())
+ return;
+
+ encoder.writeStartElement(getElementLabel());
+
+ /*
+ for (Element element : _values)
+ element.encode(encoder);
+ */
+
+ encoder.writeEndElement();
+ };
+
+Exclude.prototype.getElementLabel = function() { return CCNProtocolDTags.Exclude; };
+
diff --git a/src/ExcludeAny.js b/src/ExcludeAny.js
new file mode 100644
index 0000000..4fbeb14
--- /dev/null
+++ b/src/ExcludeAny.js
@@ -0,0 +1,21 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var ExcludeAny = function ExcludeAny() {
+
+};
+
+exports.ExcludeAny= ExcludeAny;
+
+ExcludeAny.prototype.decode = function(decoder) {
+ decoder.readStartElement(this.getElementLabel());
+ decoder.readEndElement();
+};
+
+
+ExcludeAny.prototype.encode = function( encoder) {
+ encoder.writeStartElement(this.getElementLabel());
+ encoder.writeEndElement();
+};
+
+ExcludeAny.prototype.getElementLabel=function() { return CCNProtocolDTags.Any; };
diff --git a/src/ExcludeComponent.js b/src/ExcludeComponent.js
new file mode 100644
index 0000000..91d6cae
--- /dev/null
+++ b/src/ExcludeComponent.js
@@ -0,0 +1,23 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+/*
+ * _Body is an array of componenets
+ */
+var ExcludeComponent = function ExcludeComponent(_Body) {
+
+ //TODO Check BODY is an Array of componenets.
+
+ this.Body = _Body
+};
+exports.ExcludeComponent = ExcludeComponent;
+
+ExcludeComponent.prototype.decode = function( decoder) {
+ body = decoder.readBinaryElement(this.getElementLabel());
+};
+
+ExcludeComponent.prototype.encode = function(encoder) {
+ encoder.writeElement(this.getElementLabel(), body);
+};
+
+ExcludeComponent.prototype.getElementLabel = function() { return CCNProtocolDTags.Component; };
+
diff --git a/src/Interest.js b/src/Interest.js
new file mode 100644
index 0000000..1fd2585
--- /dev/null
+++ b/src/Interest.js
@@ -0,0 +1,128 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var Interest = function Interest(_Name,_MinSuffixComponents,_MaxSuffixComponents,_PublisherPublicKeyDigest, _Exclude, _ChildSelector,_AnswerOriginKind,_Scope,_InterestLifetime,_Nonce){
+
+
+ this.Name = _Name;
+ this.MaxSuffixComponents = _MaxSuffixComponents;
+ this.MinSuffixComponents = _MinSuffixComponents;
+
+ this.PublisherKeyDigest = _PublisherPublicKeyDigest;
+ this.Exclude = _Exclude;
+ this.ChildSelector = _ChildSelector;
+ this.AnswerOriginKind = _AnswerOriginKind;
+ this.Scope = _Scope;
+ this.InterestLifetime = null; // For now we don't have the ability to set an interest lifetime
+ this.Nonce = _Nonce;
+
+ /*Not sure if the rest is needed*/
+ this.Publisher = _Publisher;
+
+ this.UserTime=_UserTime;
+
+ this.RECURSIVE_POSTFIX = "*";
+
+ this.CHILD_SELECTOR_LEFT = 0;
+ this.CHILD_SELECTOR_RIGHT = 1;
+ this.ANSWER_CONTENT_STORE = 1;
+ this.ANSWER_GENERATED = 2;
+ this.ANSWER_STALE = 4; // Stale answer OK
+ this.MARK_STALE = 16; // Must have Scope 0. Michael calls this a "hack"
+
+ this.DEFAULT_ANSWER_ORIGIN_KIND = ANSWER_CONTENT_STORE | ANSWER_GENERATED;
+
+
+};
+exports.Interest = Interest;
+
+Interest.prototype.decode(/*XMLDecoder*/ decoder) {
+
+ decoder.readStartElement(CCNProtocolDTags.Interest);
+
+ this.Name = new ContentName();
+ this.Name.decode(decoder);
+
+ if (decoder.peekStartElement(CCNProtocolDTags.MinSuffixComponents)) {
+ this.MinSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MinSuffixComponents);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.MaxSuffixComponents)) {
+ this.MaxSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MaxSuffixComponents);
+ }
+
+ //TODO something about that guy
+ /*if (PublisherID.peek(decoder)) {
+ this.Publisher = new PublisherID();
+ this.Publisher.decode(decoder);
+ }*/
+
+ if (decoder.peekStartElement(CCNProtocolDTags.Exclude)) {
+ this.Exclude = new Exclude();
+ this.Exclude.decode(decoder);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.ChildSelector)) {
+ this.ChildSelector = decoder.readIntegerElement(CCNProtocolDTags.ChildSelector);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.AnswerOriginKind)) {
+ // call setter to handle defaulting
+ this.AnswerOriginKind = decoder.readIntegerElement(CCNProtocolDTags.AnswerOriginKind);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.Scope)) {
+ this.Scope = decoder.readIntegerElement(CCNProtocolDTags.Scope);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.InterestLifetime)) {
+ this.InterestLifetime = decoder.readBinaryElement(CCNProtocolDTags.InterestLifetime);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.Nonce)) {
+ this.Nonce = decoder.readBinaryElement(CCNProtocolDTags.Nonce);
+ }
+
+ decoder.readEndElement();
+};
+
+
+Interest.prototype.encode = function(/*XMLEncoder*/ encoder){
+ if (!validate()) {
+ throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+ }
+
+ encoder.writeStartElement(CCNProtocolDTags.Interest);
+
+ this.Name.encode(encoder);
+
+ if (null != this.MinSuffixComponents)
+ encoder.writeElement(CCNProtocolDTags.MinSuffixComponents, this.MinSuffixComponents);
+
+ if (null != this.MaxSuffixComponents)
+ encoder.writeElement(CCNProtocolDTags.MaxSuffixComponents, this.MaxSuffixComponents);
+
+ //TODO
+
+ /*if (null != this.PublisherID)
+ publisherID().encode(encoder);*/
+
+ //if (null != this.Exclude)
+ //exclude().encode(encoder);
+
+ if (null != this.ChildSelector)
+ encoder.writeElement(CCNProtocolDTags.ChildSelector, this.ChildSelector);
+
+ if (this.DEFAULT_ANSWER_ORIGIN_KIND != this.AnswerOriginKind)
+ encoder.writeElement(CCNProtocolDTags.AnswerOriginKind, this.AnswerOriginKind);
+
+ if (null != this.Scope)
+ encoder.writeElement(CCNProtocolDTags.Scope, this.Scope);
+
+ if (null != this.Nonce)
+ encoder.writeElement(CCNProtocolDTags.Nonce, this.Nonce);
+
+ encoder.writeEndElement();
+};
+
+
+
diff --git a/src/KeyLocator.js b/src/KeyLocator.js
new file mode 100644
index 0000000..7d230da
--- /dev/null
+++ b/src/KeyLocator.js
@@ -0,0 +1,119 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var KeyLocatorType = function(){
+
+};
+
+
+exports.KeyLocatorType = {
+ NAME:1,
+ KEY:2,
+ CERTIFICATE:3
+};
+
+exports.KeyLocatorType = KeyLocatorType;
+
+var KeyLocator = function KeyLocator(_Input,_Type){
+
+ //this.KeyName = _KeyName;
+ //this.PublicKey = _PublicKey;
+ //this.Certificate = _Certificate;
+
+ this.Type=_Type;
+
+ if (_Type==KeyLocatorType.NAME){
+ this.KeyName = _Input;
+ }
+ else if(_Type==KeyLocatorType.KEY){
+ this.PublicKey = _Input;
+ }
+ else if(_Type==KeyLocatorType.CERTIFICATE){
+ this.Certificate = _Input;
+ }
+
+};
+
+exports.KeyLocator = KeyLocator;
+
+KeyLocator.prototype.decode = function(decoder) {
+
+ decoder.readStartElement(this.getElementLabel());
+
+ if (decoder.peekStartElement(CCNProtocolDTags.Key)) {
+ try {
+ encodedKey = decoder.readBinaryElement(CCNProtocolDTags.Key);
+ // This is a DER-encoded SubjectPublicKeyInfo.
+
+ //TODO FIX THIS, SHOULDN'T be like that
+ //this.Key = CryptoUtil.getPublicKey(encodedKey);
+
+ this.PublicKey = encodedKey;
+
+
+ } catch (e) {
+ console.log("Cannot parse stored key: error: " + e);
+ throw new ContentDecodingException("Cannot parse key: ", e);
+ }
+
+ if (null == Key) {
+ throw new Exception("Cannot parse key: ");
+ }
+
+ } else if ( decoder.peekStartElement(CCNProtocolDTags.Certificate)) {
+ try {
+ encodedCert = decoder.readBinaryElement(CCNProtocolDTags.Certificate);
+ /*
+ * Certificates not yet working
+ */
+
+ //CertificateFactory factory = CertificateFactory.getInstance("X.509");
+ //this.Certificate = (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(encodedCert));
+
+ } catch ( e) {
+ throw new Exception("Cannot decode certificate: " + e);
+ }
+ if (null == this.Certificate) {
+ throw new Exception("Cannot parse certificate! ");
+ }
+ } else {
+ this.KeyName = new KeyName();
+ this.KeyName.decode(decoder);
+ }
+ decoder.readEndElement();
+ }
+
+
+ KeyLocator.prototype.encode = function( encoder) {
+ /*if (!validate()) {
+ throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+ }*/
+
+
+ //TODO FIX THIS TOO
+ encoder.writeStartElement(this.getElementLabel());
+ if (this._Type == KeyLocatorType.KEY) {
+ encoder.writeElement(CCNProtocolDTags.Key, this.PublicKey.getEncoded() );
+
+ } else if (this.Type == KeyLocatorType.CERTIFICATE) {
+ try {
+ encoder.writeElement(CCNProtocolDTags.Certificate, this.Certificate.getEncoded());
+ } catch ( e) {
+
+ throw new Exception("CertificateEncodingException attempting to write key locator: " + e);
+ }
+
+ } else if (this.Type == KeyLocatorType.NAME) {
+ this.KeyName.encode(encoder);
+ }
+ encoder.writeEndElement();
+
+};
+
+KeyLocator.prototype.getElementLabel = function() {
+ return CCNProtocolDTags.KeyLocator;
+};
+
+KeyLocator.prototype.validate = function() {
+ return ( (null != this.keyName) || (null != this.PublicKey) || (null != this.Certificate) );
+};
+
\ No newline at end of file
diff --git a/src/KeyName.js b/src/KeyName.js
new file mode 100644
index 0000000..d534944
--- /dev/null
+++ b/src/KeyName.js
@@ -0,0 +1,50 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+
+var KeyName = function KeyName() {
+
+
+ this.ContentName = this.ContentName;//ContentName
+ this.PublisherID =this.PublisherID;//PublisherID
+
+};
+
+exports.KeyName = KeyName;
+
+KeyName.prototype.decode=function( decoder){
+
+
+ decoder.readStartElement(this.getElementLabel());
+
+ this.ContentName = new ContentName();
+ this.ContentName.decode(decoder);
+
+ if (PublisherID.peek(decoder)) {
+ this.PublisherID = new PublisherID();
+ this.PublisherID.decode(decoder);
+ }
+
+ decoder.readEndElement();
+};
+
+KeyName.prototype.encode = function( encoder) {
+ if (!this.validate()) {
+ throw new Exception("Cannot encode : field values missing.");
+ }
+
+ encoder.writeStartElement(this.getElementLabel());
+
+ this.ContentName.encode(encoder);
+ if (null != this.PublisherID)
+ this.PublisherID.encode(encoder);
+
+ encoder.writeEndElement();
+};
+
+KeyName.prototype.getElementLabel = function() { return CCNProtocolDTags.KeyName; };
+
+KeyName.prototype.validate = function() {
+ // DKS -- do we do recursive validation?
+ // null signedInfo ok
+ return (null != this.ContentName);
+};
diff --git a/src/PublisherID.js b/src/PublisherID.js
new file mode 100644
index 0000000..26009da
--- /dev/null
+++ b/src/PublisherID.js
@@ -0,0 +1,76 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+
+var PublisherType = function PublisherType(_tag){
+ this.KEY =(CCNProtocolDTags.PublisherPublicKeyDigest);
+ this.CERTIFICATE= (CCNProtocolDTags.PublisherCertificateDigest);
+ this.ISSUER_KEY= (CCNProtocolDTags.PublisherIssuerKeyDigest);
+ this.ISSUER_CERTIFICATE =(CCNProtocolDTags.PublisherIssuerCertificateDigest);
+
+ this.Tag = _tag;
+}; exports.PublisherType = PublisherType;
+
+PublisherType.prototype.isTypeTagVal = function(tagVal) {
+ if ((tagVal == CCNProtocolDTags.PublisherPublicKeyDigest) ||
+ (tagVal == CCNProtocolDTags.PublisherCertificateDigest) ||
+ (tagVal == CCNProtocolDTags.PublisherIssuerKeyDigest) ||
+ (tagVal == CCNProtocolDTags.PublisherIssuerCertificateDigest)) {
+ return true;
+ }
+ return false;
+};
+
+
+var PublisherID = function PublisherID() {
+
+ this.PUBLISHER_ID_DIGEST_ALGORITHM = "SHA-256";
+ this.PUBLISHER_ID_LEN = 256/8;
+
+
+ this.PublisherID = generatePublicKeyDigest(key);//ByteArray
+ //CryptoUtil.generateKeyID(PUBLISHER_ID_DIGEST_ALGORITHM, key);
+ this.PublisherType = isIssuer ? PublisherType.ISSUER_KEY : PublisherType.KEY;//publisher Type
+
+};
+
+exports.PublisherID = PublisherID;
+
+PublisherID.prototype.decode = function(decoder) {
+
+ // We have a choice here of one of 4 binary element types.
+ var nextTag = decoder.peekStartElementAsLong();
+
+ if (null == nextTag) {
+ throw new Exception("Cannot parse publisher ID.");
+ }
+
+ this.PublisherType = new PublisherType(nextTag);
+
+ if (!this.PublisherType.isTypeTagVal(nextTag)) {
+ throw new Exception("Invalid publisher ID, got unexpected type: " + nextTag);
+ }
+ this.PublisherID = decoder.readBinaryElement(nextTag);
+ if (null == _publisherID) {
+ throw new ContentDecodingException("Cannot parse publisher ID of type : " + nextTag + ".");
+ }
+};
+
+PublisherID.prototype.encode = function(encoder) {
+ if (!this.validate()) {
+ throw new Exception("Cannot encode " + this.getClass().getName() + ": field values missing.");
+ }
+
+ encoder.writeElement(this.getElementLabel(), this.PublisherID);
+};
+
+PublisherID.prototype.getElementLabel = function() {
+ return this.PublisherType.Tag;
+};
+
+
+PublisherID.prototype.validate = function(){
+ return ((null != id() && (null != type())));
+};
+
+
+
diff --git a/src/PublisherPublicKeyDigest.js b/src/PublisherPublicKeyDigest.js
new file mode 100644
index 0000000..3d3987a
--- /dev/null
+++ b/src/PublisherPublicKeyDigest.js
@@ -0,0 +1,38 @@
+
+var PublisherID = require('./PublisherID').PublisherID;
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var PublisherPublicKeyDigest = function PublisherPublicKeyDigest(_pkd){
+
+ if( typeof _pkd == "ByteArray") this.PublisherPublicKeyDigest = _pkd; // Byte Array
+ else if( typeof _pkd == "PublicKey") ;//TODO...
+
+};
+
+exports.PublisherPublicKeyDigest = PublisherPublicKeyDigest;
+
+
+PublisherPublicKeyDigest.prototype.decode = function( decoder) {
+
+ this.PublisherPublicKeyDigest = decoder.readBinaryElement(this.getElementLabel());
+ if (null == this.PublisherPublicKeyDigest) {
+ throw new Exception("Cannot parse publisher key digest.");
+ }
+ if (this.PublisherPublicKeyDigest.length != PublisherID.PUBLISHER_ID_LEN) {
+
+ this.PublisherPublicKeyDigest = new PublisherPublicKeyDigest(this.PublisherPublicKeyDigest).PublisherKeyDigest;
+ }
+ };
+
+PublisherPublicKeyDigest.prototype.encode= function( encoder) {
+ if (!this.validate()) {
+ throw new Exception("Cannot encode : field values missing.");
+ }
+ this.encoder.writeElement(this.getElementLabel(), this.PublisherKeyDigest);
+};
+
+PublisherPublicKeyDigest.prototype.getElementLabel = function() { return CCNProtocolDTags.PublisherPublicKeyDigest; };
+
+PublisherPublicKeyDigest.prototype.validate =function() {
+ return (null != this.PublisherKeyDigest);
+};
diff --git a/src/Signature.js b/src/Signature.js
new file mode 100644
index 0000000..d4c3fa4
--- /dev/null
+++ b/src/Signature.js
@@ -0,0 +1,58 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+
+var Signature = function Signature(_Witness,_Signature,_DigestAlgorithm) {
+
+ this.Witness = _Witness;//byte [] _witness;
+ this.Signature = _Signature;//byte [] _signature;
+ this.DigestAlgorithm = _DigestAlgorithm//String _digestAlgorithm;
+};
+
+exports.Signature = Signature;
+
+
+Signature.prototype.decode =function( decoder) {
+ decoder.readStartElement(this.getElementLabel());
+ if (decoder.peekStartElement(CCNProtocolDTags.DigestAlgorithm)) {
+ this.DigestAlgorithm = decoder.readUTF8Element(CCNProtocolDTags.DigestAlgorithm);
+ }
+ if (decoder.peekStartElement(CCNProtocolDTags.Witness)) {
+ this.Witness = decoder.readBinaryElement(CCNProtocolDTags.Witness);
+ }
+ this.Signature = decoder.readBinaryElement(CCNProtocolDTags.SignatureBits);
+ decoder.readEndElement();
+
+};
+
+
+exports.Signature = Signature;
+
+Signature.prototype.encode= function( encoder){
+
+ if (!this.validate()) {
+ throw new Exception("Cannot encode: field values missing.");
+ }
+
+ encoder.writeStartElement(this.getElementLabel());
+
+ if ((null != this.DigestAlgorithm) && (!this.DigestAlgorithm.equals(CCNDigestHelper.DEFAULT_DIGEST_ALGORITHM))) {
+ encoder.writeElement(CCNProtocolDTags.DigestAlgorithm, OIDLookup.getDigestOID(this.DigestAlgorithm));
+ }
+
+ if (null != this.Witness) {
+ // needs to handle null witness
+ encoder.writeElement(CCNProtocolDTags.Witness, this.Witness);
+ }
+
+ encoder.writeElement(CCNProtocolDTags.SignatureBits, this.Signature);
+
+ encoder.writeEndElement();
+};
+
+Signature.prototype.getElementLabel = function() { return CCNProtocolDTags.Signature; };
+
+
+Signature.prototype.validate = function() {
+ return null != this.Signature;
+};
+
diff --git a/src/SignedInfo.js b/src/SignedInfo.js
new file mode 100644
index 0000000..14b72ef
--- /dev/null
+++ b/src/SignedInfo.js
@@ -0,0 +1,106 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var SignedInfo = function SignedInfo(_publisher,_timestamp,_type,_locator,_freshnessSeconds,_finalBlockID){
+
+ //TODO, Check types
+
+ this.Publisher = _publisher; //PublisherPublicKeyDigest
+ this.Timestamp=_timestamp; // CCN Time
+ this.Type=_type; // ContentType
+ this.Locator =_locator;//KeyLocator
+ this.FreshnessSeconds =_freshnessSeconds; // Integer
+ this.FinalBlockID=_finalBlockID; //byte array
+
+};
+
+//exports.SignedInfo.Working;
+
+
+SignedInfo.prototype.decode = function( decoder){
+
+ decoder.readStartElement( this.getElementLabel() );
+
+ if (decoder.peekStartElement(CCNProtocolDTags.PublisherPublicKeyDigest)) {
+ this.Publisher = new PublisherPublicKeyDigest();
+ this.Publisher.decode(decoder);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.Timestamp)) {
+ this.Timestamp = decoder.readDateTime(CCNProtocolDTags.Timestamp);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.Type)) {
+ binType = decoder.readBinaryElement(CCNProtocolDTags.Type);//byte []
+ //TODO Implement valueToType
+
+ this.Type = valueToType(binType);
+ if (null == this.Type) {
+ throw new Exception("Cannot parse signedInfo type: bytes.");
+ }
+
+ } else {
+ this.Type = ContentType.DATA; // default
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.FreshnessSeconds)) {
+ this.FreshnessSeconds = decoder.readIntegerElement(CCNProtocolDTags.FreshnessSeconds);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.FinalBlockID)) {
+ this.FinalBlockID = decoder.readBinaryElement(CCNProtocolDTags.FinalBlockID);
+ }
+
+ if (decoder.peekStartElement(CCNProtocolDTags.KeyLocator)) {
+ this.Locator = new KeyLocator();
+ this.Locator.decode(decoder);
+ }
+
+ decoder.readEndElement();
+};
+
+SignedInfo.prototype.encode = function( encoder) {
+ if (!this.validate()) {
+ throw new Exception("Cannot encode : field values missing.");
+ }
+ encoder.writeStartElement(this.getElementLabel());
+
+ if (null!=this.Publisher) {
+ this.Publisher.encode(encoder);
+ }
+
+ if (null!=this.Timestamp) {
+ encoder.writeDateTime(CCNProtocolDTags.Timestamp, this.Timestamp);
+ }
+
+ if (null!=this.Type) {
+
+ encoder.writeElement(CCNProtocolDTags.Type, this.Type);
+ }
+
+ if (null!=this.FreshnessSeconds) {
+ encoder.writeElement(CCNProtocolDTags.FreshnessSeconds, this.FreshnessSeconds);
+ }
+
+ if (null!=this.FinalBlockID) {
+ encoder.writeElement(CCNProtocolDTags.FinalBlockID, this.FinalBlockID);
+ }
+
+ if (null!=this.Locator) {
+ this.Locator.encode(encoder);
+ }
+
+ encoder.writeEndElement();
+};
+
+SignedInfo.prototype.getElementLabel = function() {
+ return CCNProtocolDTags.SignedInfo;
+};
+
+SignedInfo.prototype.validate = function() {
+ // We don't do partial matches any more, even though encoder/decoder
+ // is still pretty generous.
+ if (null ==this.Publisher || null==this.Timestamp ||null== this.Locator)
+ return false;
+ return true;
+ };
+
diff --git a/src/encoding/BinaryXMLCodec.js b/src/encoding/BinaryXMLCodec.js
new file mode 100644
index 0000000..077c7e2
--- /dev/null
+++ b/src/encoding/BinaryXMLCodec.js
@@ -0,0 +1,135 @@
+
+var XML_EXT = 0x00;
+
+var XML_TAG = 0x01;
+
+var XML_DTAG = 0x02;
+
+var XML_ATTR = 0x03;
+
+var XML_DATTR = 0x04;
+
+var XML_BLOB = 0x05;
+
+var XML_UDATA = 0x06;
+
+var XML_CLOSE = 0x0;
+
+var XML_SUBTYPE_PROCESSING_INSTRUCTIONS = 16;
+
+
+var XML_TT_BITS = 3;
+var XML_TT_MASK = ((1 << XML_TT_BITS) - 1);
+var XML_TT_VAL_BITS = XML_TT_BITS + 1;
+var XML_TT_VAL_MASK = ((1 << (XML_TT_VAL_BITS)) - 1);
+var XML_REG_VAL_BITS = 7;
+var XML_REG_VAL_MASK = ((1 << XML_REG_VAL_BITS) - 1);
+var XML_TT_NO_MORE = (1 << XML_REG_VAL_BITS); // 0x80
+var BYTE_MASK = 0xFF;
+var LONG_BYTES = 8;
+var LONG_BITS = 64;
+
+var bits_11 = 0x0000007FFL;
+var bits_18 = 0x00003FFFFL;
+var bits_32 = 0x0FFFFFFFFL;
+
+
+var TypeAndVal = function TypeAndVal(_type,_val) {
+ this.type = _type;
+ this.val = _val;
+
+};
+exports.TypeAndVal = TypeAndVal;
+
+var BinaryXMLCodec = function BinaryXMLCodec(){
+
+ this.CODEC_NAME = "Binary";
+
+
+
+};
+
+exports.BinaryXMLCodec = BinaryXMLCodec;
+
+
+
+BinaryXMLCodec.prototype.encodeTypeAndVal = function(
+ //int
+ type,
+ //long
+ val,
+ //byte []
+ buf,
+ //int
+ offset) {
+
+ if ((type > XML_UDATA) || (type < 0) || (val < 0)) {
+ throw new Exception("Tag and value must be positive, and tag valid.");
+ }
+
+ // Encode backwards. Calculate how many bytes we need:
+ int numEncodingBytes = numEncodingBytes(val);
+
+ if ((offset + numEncodingBytes) > buf.length) {
+ throw new Exception("Buffer space of " + (buf.length-offset) +
+ " bytes insufficient to hold " +
+ numEncodingBytes + " of encoded type and value.");
+ }
+
+
+ buf[offset + numEncodingBytes - 1] =
+ (BYTE_MASK &
+ (((XML_TT_MASK & type) |
+ ((XML_TT_VAL_MASK & val) << XML_TT_BITS))) |
+ XML_TT_NO_MORE);
+ val = val >>> XML_TT_VAL_BITS;;
+
+ int i = offset + numEncodingBytes - 2;
+ while ((0 != val) && (i >= offset)) {
+ buf[i] = (BYTE_MASK &
+ (val & XML_REG_VAL_MASK));
+ val = val >>> XML_REG_VAL_BITS;
+ --i;
+ }
+
+ return numEncodingBytes;
+};
+
+BinaryXMLCodec.prototype.decodeTypeAndVal = function(
+ /*InputStream*/
+ istream) {
+
+ int next;
+ int type = -1;
+ long val = 0;
+ boolean more = true;
+
+ do {
+ next = istream.read();
+
+ if (next < 0) {
+ return null;
+ }
+
+ if ((0 == next) && (0 == val)) {
+ return null;
+ }
+
+ more = (0 == (next & XML_TT_NO_MORE));
+
+ if (more) {
+ val = val << XML_REG_VAL_BITS;
+ val |= (next & XML_REG_VAL_MASK);
+ } else {
+
+ type = next & XML_TT_MASK;
+ val = val << XML_TT_VAL_BITS;
+ val |= ((next >>> XML_TT_BITS) & XML_TT_VAL_MASK);
+ }
+
+ } while (more);
+
+ return new TypeAndVal(type, val);
+};
+
+//TODO
\ No newline at end of file
diff --git a/src/encoding/BinaryXMLDecoder.js b/src/encoding/BinaryXMLDecoder.js
new file mode 100644
index 0000000..4a8b1c4
--- /dev/null
+++ b/src/encoding/BinaryXMLDecoder.js
@@ -0,0 +1,89 @@
+var MARK_LEN=512;
+var DEBUG_MAX_LEN = 32768;
+
+var BinaryXMLDecoder = new BinaryXMLDecoder(_Istream){
+ this.Istream = _Istream;
+
+};
+
+
+BinaryXMLDecoder.prototype.readStartElement =function(
+ //String
+ startTag,
+ //TreeMap<String, String>
+ attributes) {
+
+ try {
+ BinaryXMLCodec.TypeAndVal tv = BinaryXMLCodec.decodeTypeAndVal(this.Istream);
+
+ if (null == tv) {
+ throw new Exception("Expected start element: " + startTag + " got something not a tag.");
+ }
+
+ String decodedTag = null;
+
+ if (tv.type() == BinaryXMLCodec.XML_TAG) {
+
+ decodedTag = BinaryXMLCodec.decodeUString(this.Istream, tv.val()+1);
+
+ } else if (tv.type() == BinaryXMLCodec.XML_DTAG) {
+ decodedTag = tagToString(tv.val());
+ }
+
+ if ((null == decodedTag) || (!decodedTag.equals(startTag))) {
+ throw new Exception("Expected start element: " + startTag + " got: " + decodedTag + "(" + tv.val() + ")");
+ }
+
+ if (null != attributes) {
+ readAttributes(attributes);
+ }
+
+ } catch (e) {
+ throw new Exception("readStartElement", e);
+ }
+};
+
+BinaryXMLDecoder.prototype.readAttributes = function(
+ //TreeMap<String,String>
+ attributes){
+
+ if (null == attributes) {
+ return;
+ }
+
+ try {
+
+ BinaryXMLCodec.TypeAndVal nextTV = BinaryXMLCodec.peekTypeAndVal(_istream);
+
+ while ((null != nextTV) && ((BinaryXMLCodec.XML_ATTR == nextTV.type()) ||
+ (BinaryXMLCodec.XML_DATTR == nextTV.type()))) {
+
+ BinaryXMLCodec.TypeAndVal thisTV = BinaryXMLCodec.decodeTypeAndVal(this.Istream);
+
+ var attributeName = null;
+ if (BinaryXMLCodec.XML_ATTR == thisTV.type()) {
+
+ attributeName = BinaryXMLCodec.decodeUString(_istream, thisTV.val()+1);
+
+ } else if (BinaryXMLCodec.XML_DATTR == thisTV.type()) {
+ // DKS TODO are attributes same or different dictionary?
+ attributeName = tagToString(thisTV.val());
+ if (null == attributeName) {
+ throw new ContentDecodingException("Unknown DATTR value" + thisTV.val());
+ }
+ }
+
+ var attributeValue = BinaryXMLCodec.decodeUString(_istream);
+
+ attributes.put(attributeName, attributeValue);
+
+ nextTV = BinaryXMLCodec.peekTypeAndVal(_istream);
+ }
+
+ } catch ( e) {
+
+ throw new ContentDecodingException("readStartElement", e);
+ }
+};
+
+//TODO
\ No newline at end of file
diff --git a/src/encoding/BinaryXMLEncoder.js b/src/encoding/BinaryXMLEncoder.js
new file mode 100644
index 0000000..7ccf3b4
--- /dev/null
+++ b/src/encoding/BinaryXMLEncoder.js
@@ -0,0 +1,31 @@
+
+var BinaryXMLEncoder = function BinaryXMLEncoder(){
+
+BinaryXMLEncoder.prototype.writeStartElement = function(
+ //String
+ tag,
+ //TreeMap<String,String>
+ attributes){
+
+}
+ try {
+ var dictionaryVal = stringToTag(tag);
+
+ if (null == dictionaryVal) {
+ BinaryXMLCodec.encodeUString(_ostream, tag, BinaryXMLCodec.XML_TAG);
+
+ } else {
+ BinaryXMLCodec.encodeTypeAndVal(BinaryXMLCodec.XML_DTAG, dictionaryVal, _ostream);
+ }
+
+ if (null != attributes) {
+ writeAttributes(attributes);
+ }
+
+ } catch (e) {
+ throw new Exception(e);
+ }
+};
+
+
+//TODO
\ No newline at end of file
diff --git a/src/encoding/TextXMLCodec.js b/src/encoding/TextXMLCodec.js
new file mode 100644
index 0000000..ea64188
--- /dev/null
+++ b/src/encoding/TextXMLCodec.js
@@ -0,0 +1 @@
+//TODO
\ No newline at end of file
diff --git a/src/encoding/TextXMLDecoder.js b/src/encoding/TextXMLDecoder.js
new file mode 100644
index 0000000..ea64188
--- /dev/null
+++ b/src/encoding/TextXMLDecoder.js
@@ -0,0 +1 @@
+//TODO
\ No newline at end of file
diff --git a/src/encoding/TextXMLEncoder.js b/src/encoding/TextXMLEncoder.js
new file mode 100644
index 0000000..ea64188
--- /dev/null
+++ b/src/encoding/TextXMLEncoder.js
@@ -0,0 +1 @@
+//TODO
\ No newline at end of file
diff --git a/test/RandomTest.js b/test/RandomTest.js
new file mode 100644
index 0000000..5096382
--- /dev/null
+++ b/test/RandomTest.js
@@ -0,0 +1,14 @@
+console.log("HELLO");
+
+require('../src/CCNProtocolDTags');
+
+
+var RandomTest = function RandomTest(){
+
+
+ this.a = 6;
+};
+
+RandomTest.prototype.d = function(){
+ console.log(a);
+};
diff --git a/test/test-data/.DS_Store b/test/test-data/.DS_Store
new file mode 100644
index 0000000..dff3c06
--- /dev/null
+++ b/test/test-data/.DS_Store
Binary files differ
diff --git a/test/test-data/ContentObject1.binary b/test/test-data/ContentObject1.binary
new file mode 100644
index 0000000..9377cf9
--- /dev/null
+++ b/test/test-data/ContentObject1.binary
@@ -0,0 +1 @@
+a03b2088587b7b14e1b1b04156203f92702759dda531d680816fe5708e842002ba967e14b7cfe8c19d2da1b550e18277947925deac3395d02a2d3f116b2314f1cc69aab4fab1afe71c56ad6e239b8f61ab00029bb09452895fc44b37955cf50775b349ef9883739c23aaf0b86892fcb4626df2f00e8c9edfcb83160fe9a014162a9fed5bc0000f2faad68656c6c6f000001a203e20285204874045a9fac98ebb7dfadc4bbd1ab15a6e4065349c6c83a8460844eab31850002bab504f32b9ca3a20001e201da0a9530819f300d06092a864886f70d010101050003818d0030818902818100bd9565559c1795c049a5ef4dc9d1bc8b981b66097ea253f5d0f50f1a1df908ac4e69a797dadd2c0590944a6e849e1fbb7371c53dfddbe7802656e1d5f449b8530d9c7da8d6abebd90e06124d927f2f6c5721f1d0e49e7f6a1167caf960d96ff5afaa2d2567337772a944c8e6ceb859b25a231d9eca873574ff98225c853f38ef0203010001000000019ae568656c6c6f20776f726c640a0000
\ No newline at end of file
diff --git a/test/test-data/ContentObject1.xml b/test/test-data/ContentObject1.xml
new file mode 100644
index 0000000..46e32b8
--- /dev/null
+++ b/test/test-data/ContentObject1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3q
+wzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75
+iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw=</SignatureBits></Signature><Name><Component ccnbencoding="text">hello</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPMrnKOi</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">aGVsbG8gd29ybGQK</Content></ContentObject>
diff --git a/test/test-data/ContentObject2.binary b/test/test-data/ContentObject2.binary
new file mode 100644
index 0000000..63865cb
--- /dev/null
+++ b/test/test-data/ContentObject2.binary
Binary files differ
diff --git a/test/test-data/ContentObject2.xml b/test/test-data/ContentObject2.xml
new file mode 100644
index 0000000..a7b7476
--- /dev/null
+++ b/test/test-data/ContentObject2.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">E1XOBbKmN0rqOvNFZA9+gPE491gMThGbmYGIkvkIQc+1WEIXX/li3Wnzj3s2oVlF
+txzj6j/+kNHWuV7SMhTX8mL31zGl+iyuXVjshQKBYBYk9VN1b0aFw2C8LE4OOjmR
+O8tt5fCFxJ8Hqx4/iwzpJYctQDNyOLDq68AJsIPQefg=</SignatureBits></Signature><Name><Component ccnbencoding="text">hello</Component><Component ccnbencoding="text">world</Component><Component ccnbencoding="text">ucla</Component><Component ccnbencoding="text">cs</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0hkOL</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
+QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJDCg==</Content></ContentObject>
diff --git a/test/test-data/ContentObject3.binary b/test/test-data/ContentObject3.binary
new file mode 100644
index 0000000..6ea5d7c
--- /dev/null
+++ b/test/test-data/ContentObject3.binary
Binary files differ
diff --git a/test/test-data/ContentObject3.xml b/test/test-data/ContentObject3.xml
new file mode 100644
index 0000000..30c4bed
--- /dev/null
+++ b/test/test-data/ContentObject3.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">HErd+7ZgsZTvR3f0pq066b1rk/GIVGJn+3CgLsjmUTAd2Zppd4TANGIM8xW5O8L2
+ToC0Jpr5HP3NkPG5jPyouinWlE8yLgmdMzpiyd9UtAoaIJtbNVknMDH/e25/PvF9
+y/OsM3r5I2IJAsnW5TIkPnTL1hUkTJxLKV8By0xZf18=</SignatureBits></Signature><Name><Component ccnbencoding="text">test3</Component><Component ccnbencoding="text">testing</Component><Component ccnbencoding="text">435b</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0ntsw</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">IAo=</Content></ContentObject>
diff --git a/test/test-data/ContentObject4.binary b/test/test-data/ContentObject4.binary
new file mode 100644
index 0000000..63865cb
--- /dev/null
+++ b/test/test-data/ContentObject4.binary
Binary files differ
diff --git a/test/test-data/ContentObject4.xml b/test/test-data/ContentObject4.xml
new file mode 100644
index 0000000..a7b7476
--- /dev/null
+++ b/test/test-data/ContentObject4.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">E1XOBbKmN0rqOvNFZA9+gPE491gMThGbmYGIkvkIQc+1WEIXX/li3Wnzj3s2oVlF
+txzj6j/+kNHWuV7SMhTX8mL31zGl+iyuXVjshQKBYBYk9VN1b0aFw2C8LE4OOjmR
+O8tt5fCFxJ8Hqx4/iwzpJYctQDNyOLDq68AJsIPQefg=</SignatureBits></Signature><Name><Component ccnbencoding="text">hello</Component><Component ccnbencoding="text">world</Component><Component ccnbencoding="text">ucla</Component><Component ccnbencoding="text">cs</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0hkOL</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
+QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJDCg==</Content></ContentObject>
diff --git a/test/test-data/ContentObject5.binary b/test/test-data/ContentObject5.binary
new file mode 100644
index 0000000..0ed03a6
--- /dev/null
+++ b/test/test-data/ContentObject5.binary
Binary files differ
diff --git a/test/test-data/ContentObject5.xml b/test/test-data/ContentObject5.xml
new file mode 100644
index 0000000..e408d40
--- /dev/null
+++ b/test/test-data/ContentObject5.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">SLkD3PxyF38CYiAZHBMWggs357uW2JPkrLfgaKzqnn/lvBsHRq4GntKH3TveSh2O
+xModFj/MF/rmnKdvwEojg6Y0G3BIvJ01eNf97phe/gu1WPKzTkHyIfgS5krJIz4w
+N4JfbhHIO97+FExSCTdRF7276EKvoEuzjcIVZrTJTNU=</SignatureBits></Signature><Name><Component ccnbencoding="text">uri1</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0ygle</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">TWVzc2FnZQo=</Content></ContentObject>
diff --git a/test/test-data/ContentObject6.binary b/test/test-data/ContentObject6.binary
new file mode 100644
index 0000000..c89edfb
--- /dev/null
+++ b/test/test-data/ContentObject6.binary
Binary files differ
diff --git a/test/test-data/ContentObject6.xml b/test/test-data/ContentObject6.xml
new file mode 100644
index 0000000..897869b
--- /dev/null
+++ b/test/test-data/ContentObject6.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">T9vjIhsEnnw4OAX2QHe0Zx9TEHLELm51YLxPDXxQy2EMET89KuXT7fEK6r3Ignu7
+z4lgtWw39ds0NhAjZW1s2aVNntZooLiN+VzLsIlPgVCSlbASqqmCSXQO45SvuKvm
+mog24sW3heJLAg15Y1XLuPLouZJvetu5xpsG9N9TUCg=</SignatureBits></Signature><Name><Component ccnbencoding="text">uri2</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0z9ZL</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">TWVzc2FnZQo=</Content></ContentObject>
diff --git a/test/test-data/ContentObject7.binary b/test/test-data/ContentObject7.binary
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/test-data/ContentObject7.binary
diff --git a/test/test-data/ContentObject7.xml b/test/test-data/ContentObject7.xml
new file mode 100644
index 0000000..12bbf74
--- /dev/null
+++ b/test/test-data/ContentObject7.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?>
diff --git a/test/test-data/InterestMessage1.binary b/test/test-data/InterestMessage1.binary
new file mode 100644
index 0000000..7482bab
--- /dev/null
+++ b/test/test-data/InterestMessage1.binary
Binary files differ
diff --git a/test/test-data/InterestMessage1.xml b/test/test-data/InterestMessage1.xml
new file mode 100644
index 0000000..2708f0e
--- /dev/null
+++ b/test/test-data/InterestMessage1.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<Interest xmlns:ccn="http://www.parc.com/ccn">
+ <Name>
+ <Component>dGVzdDE=</Component>
+ </Name>
+</Interest>
\ No newline at end of file
diff --git a/test/test-data/InterestMessage2.binary b/test/test-data/InterestMessage2.binary
new file mode 100644
index 0000000..51b98ea
--- /dev/null
+++ b/test/test-data/InterestMessage2.binary
Binary files differ
diff --git a/test/test-data/InterestMessage2.xml b/test/test-data/InterestMessage2.xml
new file mode 100644
index 0000000..1d1dff5
--- /dev/null
+++ b/test/test-data/InterestMessage2.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<Interest xmlns:ccn="http://www.parc.com/ccn">
+ <Name>
+ <Component>dGVzdDI=</Component>
+ </Name>
+ <MinSuffixComponents>1</MinSuffixComponents>
+ <MaxSuffixComponents>3</MaxSuffixComponents>
+</Interest>
diff --git a/test/test-data/InterestMessage3.binary b/test/test-data/InterestMessage3.binary
new file mode 100644
index 0000000..e336ca1
--- /dev/null
+++ b/test/test-data/InterestMessage3.binary
Binary files differ
diff --git a/test/test-data/InterestMessage3.xml b/test/test-data/InterestMessage3.xml
new file mode 100644
index 0000000..5592218
--- /dev/null
+++ b/test/test-data/InterestMessage3.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<Interest xmlns:ccn="http://www.parc.com/ccn">
+ <Name>
+ <Component>dGVzdDM=</Component>
+ <Component>dGVzdDMtbGF5ZXIy</Component>
+ <Component>MTIzNDU2IUA=</Component>
+ </Name>
+</Interest>