| // 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'); |
| |
| |