blob: d773662d6ed1ca6458826251aef93a155762a56f [file] [log] [blame]
Alexander Afanasyev5d79e682012-11-19 14:12:23 -08001
2Basic field types
3+++++++++++++++++
4
5::
6
7 uint8_t ::= 8-bit unsigned integer
8
9 uint16_t ::= 16-bit unsigned integer
10
11 uint32_t ::= 32-bit unsigned integer
12
13 CHAR ::= 8-bit binary data
14
15 Blob ::= Length CHAR{Length}
16
17 Length ::= uint16_t
18
19NDN Packet Type
20+++++++++++++++
21
22::
23
24 Packet ::= Version
25 PacketType
26 (Interest | ContentObject)
27
28 0 1
29 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
30 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31 | Version | PacketType |
32 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33
34For ccnb-encoding compatibility, ``Version`` / ``PacketType`` has two reserved values to denote ccnb-encoded packet:
35
36Version 0x01, PacketType 0xD2 --- ccnb-encoded ``Interest`` packet
37Version 0x04, PacketType 0x82 --- ccnb-encoded ``ContentObject`` packet
38
39
40Version
41=======
42
43::
44
45 Version ::= uint8_t
46
47The current version of the packet format. Right only value 0x80 is allowed.
48
49PacketType
50==========
51
52::
53
54 PacketType ::= uint8_t
55
56In the current version, two packet types are defined:
57
58- ``Interest`` (``PacketType`` = 0)
59- ``ContentObject`` (``PacketType`` = 1)
60
61Any other value of PacketType is invalid and such a packet should be discarded.
62
63Interest
64++++++++
65
66The objective of the new format is to optimize encoding/decoding operations.
67
68::
69
70 Interest ::= Nonce
71 Scope
72 InterestLifetime
73 Name
74 Selectors
75 Options
76
77Minumum size of the Interest packet: 1 + 4 + 2 + 1 + (2 + 0) + (2 + 0) + (2 + 0) = 14
78
79Maximum size of the Interest packet: 1 + 4 + 2 + 1 + (2 + 65535) + (2 + 65535) + (2 + 65535) = 196619
80
81::
82
83 0 1 2 3
84 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
85 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
86 | Nonce |
87 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
88 | Scope | Reserved | InterestLifetime |
89 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
90 | Length | |
91 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
92 ~ ~
93 ~ Name ~
94 | |
95 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
96 | Length | |
97 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
98 ~ ~
99 ~ Selectors ~
100 | |
101 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
102 | Length | |
103 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
104 ~ ~
105 ~ Options ~
106 | |
107 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
108
109
110Nonce
111=====
112
113::
114
115 Nonce ::= uint32_t
116
117Reserved
118========
119
120::
121
122 Reserved := uint8_t
123
124Currently does not have meaning and should be zero
125
126InterestLifetime
127================
128
129::
130
131 InterestLifetime := uint16_t
132
133Interest lifetime is specified in seconds. Max value is about 18 hours.
134
135Scope
136=====
137
138::
139
140 Scope ::= uint8_t
141
142Scope 0 prevents propagation beyond the local ccnd (even to other applications on the same host). Scope 1 limits propagation to the applications on the originating host. Scope 2 limits propagation to no further than the next host.
143
144Name
145====
146
147::
148
149 Name ::= Length (NameComponent)*
150
151 NameComponent ::= Blob
152
153
154Selectors
155=========
156
157::
158
159 Selectors ::= Length (Selector)*
160
161 Selector ::= MinSuffixComponents | MaxSuffixComponents | Publisher | Exclude | ChildSelector | AnswerOriginKind
162
163All selectors are for now undefined
164
165Options
166=======
167
168::
169
170 Options ::= Length (Option)*
171
172
173.. .................................................................................................. ..
174.. .................................................................................................. ..
175.. .................................................................................................. ..
176.. .................................................................................................. ..
177
178
179ContentObject
180+++++++++++++
181
182::
183
184 ContentObject ::= Signature
185 Name
186 Content
187
188::
189
190 0 1 2 3
191 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
192 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
193 | Length | |
194 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
195 ~ ~
196 ~ Signature ~
197 | |
198 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
199 | Length | |
200 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
201 ~ ~
202 ~ Name ~
203 | |
204 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
205 | Length | |
206 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
207 ~ ~
208 ~ Content ~
209 | |
210 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
211
212
213Signature
214=========
215
216::
217
218 Signature ::= Length
219 SignatureType
220 <type-dependeds signature data>
221
222Length specifies cumulative size of SignatureInfo and SignatureBits. If SignatureType is not recognized, the received can either discard the packet or ignore the signature using Length field, specified combined length of SignatureType and SignatureType-dependent fields.
223
224::
225
226 0 1 2 3
227 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
228 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
229 | Length | SignatureType |
230 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
231 ~ ~
232 ~ <type-dependeds signature data> ~
233 | |
234 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
235
236
237SignatureType
238~~~~~~~~~~~~~
239
240::
241
242 SignatureType ::= uint16_t
243
244The current version specifies three type of signatures:
245
246- 0x0000: empty signature
247- 0x0001: SHA256 (not a real signature, but just a digest of the content)
248- 0x0002: SHA256withRSA (real public-key signature based on SHA-256 digest)
249
250Other values may be defined in future.
251
252- Values greater or equal to 0xFF00 are for experimental purposes (e.g., for simulations)
253
254<type-dependeds signature data>
255~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
256
257+-------------------+---------------------------+
258| SignatureType | SignatureData definition |
259+===================+===========================+
260| 0 (empty) | empty sequence |
261+-------------------+---------------------------+
262| 1 (sha256) | CHAR{32} |
263+-------------------+---------------------------+
264| 2 (SHA256withRSA) | CHAR{32} KeyLocator |
265+-------------------+---------------------------+
266
267KeyLocator
268~~~~~~~~~~
269
270::
271
272 KeyLocator ::= KeyLocatorType
273 (Key | Certificate | KeyName)
274
275 Key ::= Blob
276
277 Certificate ::= Blob
278
279 KeyName ::= Name
280
281
282Content
283=======
284
285::
286
287 Content ::= Length
288 ContentInfo
289 ContentData
290
291Content length can be computed as: Length - (1 - ContentInfo.Length)
292
293::
294
295 0 1 2 3
296 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
297 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
298 | Length | Length (content Info) |
299 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
300 | Timestamp |
301 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
302 | Freshness | Reserved |
303 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
304 | Length (ContentInfoOptions) | |
305 |-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
306 ~ ~
307 ~ ContentInfoOptions ~
308 | |
309 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
310 ~ ~
311 ~ ContentData ~
312 | |
313 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
314
315
316ContentInfo
317~~~~~~~~~~~
318
319::
320
321 ContentInfo ::= Length
322 Timestamp
323 Freshness
324 ContentOptions
325
326Timestamp
327=========
328
329::
330
331 Timestamp ::= uint32_t
332
333Timestamp specifies content generation time as Unix time timestamp (number of seconds since midnight 1/1/1970).
334
335Freshness
336=========
337
338::
339
340 Freshness ::= uint16_t
341
342Freshness specifies time in seconds (since Timestamp) for which the content is considered valid.
343
344Value 0xFFFF means that content is always valid.
345
346
347ContentOptions
348==============
349
350::
351
352 ContentOptions ::= Length
353 ContentOption*
354
355 ContentOption ::= Type |
356 FinalBlockID
357
358
359Not currently defined
360