blob: 83e5aee4d9e4f9e5b4e94a2d9d7b105b0ffff671 [file] [log] [blame]
Meki Cherkaouib0365a72012-02-18 00:59:57 -08001// JavaScript Document
2/*
3 @author: Meki Cherkaoui
4*/
5var DTAGS = require('./TAG').d;
6var TT = require('./TAG').tt;
7
8
9var ContentObjectEncoder = function ContentObjectEncoder(){
10
11
12};
13
14
15/*
16 TT bits specify the type of nodes
17
18*/
19var CCN_TT_BITS=3;
20var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
21var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
22var CCN_TT_HBIT=((1 << 7));
23
24Encoder.prototype.encodeContentObject = function(_ContentObject){
25
26 //var slit = function splitNumber(number){
27 //};
28 var i = 0;
29
30 var addToBuffer = function addToBuffer(buffer,number,tt){
31
32
33 var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
34
35
36
37 splitNumbers = new Buffer(sizeOfBuffer);
38
39 number >>= 7-CCN_TT_BITS;
40
41 splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
42 ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
43 (CCN_TT_MASK & tt));
44
45 var index = 1;
46 while(number>0){
47 splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
48 index++;
49 number>>=7;
50 }
51
52 for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
53
54 buffer[index+i] = splitNumbers[j];
55 }
56
57 };
58 //NOTE NUMBETR= SIZE
59 var addToBufferData = function addToBuffer(buffer,data,tt){
60
61 var number = sizeof(data);
62 var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
63
64 splitNumbers = new Buffer(sizeOfBuffer);
65
66 number >>= 7-CCN_TT_BITS;
67
68 splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
69 ((number & CCN_MAX_TINY) << CCN_TT_BITS) |
70 (CCN_TT_MASK & tt));
71
72
73 while(number>0){
74 splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
75 index++;
76 number>>=7;
77 }
78
79 for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
80
81 buffer[index+i] = splitNumbers[j];
82 }
83
84 for(i=0;i<10;i++){
85 buffer[index+i] = data[i];
86 }
87
88 };
89
90 //NOTE NUMBETR= SIZE
91 var addName = function addToBuffer(buffer,name){
92
93 for(i=0;i<name.size;i++){
94 tt = require('./TAG').tt.CCN_BLOB ;
95 addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
96 addCloseTag(buffer);
97 }
98
99 };
100
101
102 var addCloseTag = function addCloseTag(buffer){
103 var tag = DTAGS.CCN_CLOSE;
104 buffer.write(tag);
105 };
106
107 var buffer = new Buffer(1000);
108
109 var tag = DTAGS.CCN_DTAG_ContentObject;
110 var tt = TT.CCN_DTAG ;
111 addToBuffer(buffer,tag,tt);
112
113
114 tag = DTAGS.CCN_Signature;
115 tt = TT.CCN_DTAG ;
116 addToBuffer(buffer,tag,tt);
117
118
119 tag = DTAGS.CCN_SignatureBits;
120 tt = TT.CCN_DTAG ;
121 addToBuffer(buffer,tag,tt);
122
123 tt = TT.CCN_BLOB ;
124 addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
125
126 addCloseTag(buffer);
127
128 addCloseTag(buffer);
129
130 tag = DTAGS.CCN_Name;
131 tt = TT.CCN_DTAG ;
132 addToBuffer(buffer,tag,tt);
133
134
135 addName(buffer,_ContentObject.moName,tt);
136
137 addCloseTag(buffer);
138
139 tag = DTAGS.CCN_DTAG_SignedInfo;
140 tt = TT.CCN_DTAG ;
141 addToBuffer(buffer,tag,tt);
142
143 tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
144 tt = TT.CCN_DTAG ;
145 addToBuffer(buffer,tag,tt);
146
147 addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
148
149 addCloseTag(buffer);
150
151 tag = DTAGS.CCN_DTAG_Timestamp;
152 tt = TT.CCN_DTAG ;
153 addToBuffer(buffer,tag,tt);
154
155 addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
156
157 addCloseTag(buffer);
158
159 tag = DTAGS.CCN_DTAG_KeyLocator;
160 tt = TT.CCN_DTAG ;
161 addToBuffer(buffer,tag,tt);
162
163 tag = DTAGS.CCN_DTAG_key;
164 tt = TT.CCN_DTAG ;
165 addToBuffer(buffer,tag,tt);
166
167 addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
168
169 addCloseTag(buffer);
170
171 addCloseTag(buffer);
172
173 tag = DTAGS.CCN_DTAG_Content;
174 tt = TT.CCN_DTAG ;
175 addToBuffer(buffer,tag,tt);
176
177 addToBufferData(buffer,_ContentObject.msContent,tt);
178
179 addCloseTag(buffer);
180
181 addCloseTag(buffer);
182
183}
184
185
186Encoder.prototype.encodeContentObjectToFile = function(_filename){
187
188
189 var content = "hello world";
190
191 var name = new require('./Name').Name(['hello']);
192
193 var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
194
195 var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
196
197 sig.generateSignature(name,sigInfo,content);
198
199 var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
200
201 var buffer = this.encodeContentObject(co);
202
203 fs.writeFile(_filename);
204
205
206}
207
208
209var co = new ContentObjectEncoder();
210
211
212var file = ContentObjectEncoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
213
214