4 silc_asn1_encode(asn1, node,
5 SILC_ASN1_BOOLEAN(SilcBool),
7 silc_asn1_encode(asn1, dest,
8 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
9 SILC_ASN1_SEQUENCE_T(0, 9),
11 SILC_ASN1_ANY_T(0, 33, node),
12 SILC_ASN1_BOOLEAN_T(0, 4, boolv),
13 SILC_ASN1_BOOLEAN(SilcBool),
18 FATAL ERROR: Adding primitive node with implicit tagging is not possible.
19 The node either must be constructed (SEQUENCE or SET), or the tagging
20 must be explicit (in which case end result is same).
25 silc_asn1_encode(asn1, node,
26 SILC_ASN1_BOOLEAN(SilcBool),
28 silc_asn1_encode(asn1, dest,
29 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
30 SILC_ASN1_SEQUENCE_T(0, 9),
32 SILC_ASN1_ANY_T(SILC_ASN1_EXPLICIT, 33, node),
33 SILC_ASN1_BOOLEAN_T(0, 4, boolv),
34 SILC_ASN1_BOOLEAN(SilcBool),
39 CORRECT: the tagging is now explicit. Also note that tagging primitive
40 node explicitly is analougous of having a constructed node and tagging
41 that implicitly: the end result is same.
46 int main(int argc, char **argv)
48 SilcBufferStruct node, node2;
50 SilcBool success = FALSE;
56 memset(&node, 0, sizeof(node));
57 memset(&node2, 0, sizeof(node2));
59 if (argc > 1 && !strcmp(argv[1], "-d")) {
61 silc_log_debug_hexdump(TRUE);
62 silc_log_set_debug_string("*asn1*,*ber*");
65 SILC_LOG_DEBUG(("Allocating ASN.1 context"));
66 asn1 = silc_asn1_alloc();
70 SILC_LOG_DEBUG(("Encoding ASN.1 tree 1"));
73 silc_asn1_encode(asn1, &node,
75 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT, 9),
76 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT |
77 SILC_ASN1_INDEFINITE, 0),
78 SILC_ASN1_BOOLEAN_T(0, 4, val),
79 SILC_ASN1_BOOLEAN(val),
82 SILC_ASN1_END, SILC_ASN1_END);
84 SILC_LOG_DEBUG(("Encoding failed"));
87 SILC_LOG_DEBUG(("Encoding success"));
88 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
89 SILC_LOG_DEBUG(("Decoding ASN.1 tree 1"));
91 silc_asn1_decode(asn1, &node,
93 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT, 9),
94 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT |
95 SILC_ASN1_INDEFINITE, 0),
96 SILC_ASN1_BOOLEAN_T(0, 4, &val),
97 SILC_ASN1_BOOLEAN(&val),
100 SILC_ASN1_END, SILC_ASN1_END);
102 SILC_LOG_DEBUG(("Decoding failed"));
105 SILC_LOG_DEBUG(("Decoding success"));
106 SILC_LOG_DEBUG(("Boolean val %d", val));
109 memset(&node, 0, sizeof(node));
110 SILC_LOG_DEBUG(("Encoding ASN.1 tree 1"));
113 silc_asn1_encode(asn1, &node,
115 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT, 9),
116 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT |
117 SILC_ASN1_INDEFINITE, 0),
118 SILC_ASN1_BOOLEAN_T(0, 4, val),
119 SILC_ASN1_BOOLEAN(val),
122 SILC_ASN1_END, SILC_ASN1_END);
124 SILC_LOG_DEBUG(("Encoding failed"));
127 SILC_LOG_DEBUG(("Encoding success"));
128 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
129 SILC_LOG_DEBUG(("Decoding ASN.1 tree 1"));
131 silc_asn1_decode(asn1, &node,
133 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT, 9),
134 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT |
135 SILC_ASN1_INDEFINITE, 0),
136 SILC_ASN1_BOOLEAN_T(0, 4, &val),
137 SILC_ASN1_BOOLEAN(&val),
140 SILC_ASN1_END, SILC_ASN1_END);
142 SILC_LOG_DEBUG(("Decoding failed"));
145 SILC_LOG_DEBUG(("Decoding success"));
146 SILC_LOG_DEBUG(("Boolean val %d", val));
150 memset(&node, 0, sizeof(node));
151 SILC_LOG_DEBUG(("Encoding ASN.1 tree 2"));
154 silc_asn1_encode(asn1, &node,
156 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT, 9),
157 SILC_ASN1_SEQUENCE_T(SILC_ASN1_INDEFINITE, 0),
158 SILC_ASN1_BOOLEAN_T(0, 4, val),
159 SILC_ASN1_BOOLEAN(val),
162 SILC_ASN1_END, SILC_ASN1_END);
164 SILC_LOG_DEBUG(("Encoding failed"));
167 SILC_LOG_DEBUG(("Encoding success"));
168 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
169 SILC_LOG_DEBUG(("Decoding ASN.1 tree 2"));
171 silc_asn1_decode(asn1, &node,
173 SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT, 9),
174 SILC_ASN1_SEQUENCE_T(SILC_ASN1_INDEFINITE, 0),
175 SILC_ASN1_BOOLEAN_T(0, 4, &val),
176 SILC_ASN1_BOOLEAN(&val),
179 SILC_ASN1_END, SILC_ASN1_END);
181 SILC_LOG_DEBUG(("Decoding failed"));
184 SILC_LOG_DEBUG(("Decoding success"));
185 SILC_LOG_DEBUG(("Boolean val %d", val));
189 memset(&node, 0, sizeof(node));
190 SILC_LOG_DEBUG(("Encoding ASN.1 tree 3"));
193 silc_asn1_encode(asn1, &node,
195 SILC_ASN1_SEQUENCE_T(0, 9),
197 SILC_ASN1_BOOLEAN_T(0, 4, val),
198 SILC_ASN1_BOOLEAN(val),
201 SILC_ASN1_END, SILC_ASN1_END);
203 SILC_LOG_DEBUG(("Encoding failed"));
206 SILC_LOG_DEBUG(("Encoding success"));
207 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
208 SILC_LOG_DEBUG(("Decoding ASN.1 tree 3"));
210 silc_asn1_decode(asn1, &node,
212 SILC_ASN1_SEQUENCE_T(0, 9),
214 SILC_ASN1_BOOLEAN_T(0, 4, &val),
215 SILC_ASN1_BOOLEAN(&val),
218 SILC_ASN1_END, SILC_ASN1_END);
220 SILC_LOG_DEBUG(("Decoding failed"));
223 SILC_LOG_DEBUG(("Decoding success"));
224 SILC_LOG_DEBUG(("Boolean val %d", val));
228 memset(&node, 0, sizeof(node));
229 SILC_LOG_DEBUG(("Encoding ASN.1 tree 4"));
232 silc_asn1_encode(asn1, &node,
233 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE |
234 SILC_ASN1_EXPLICIT, 101),
235 SILC_ASN1_SEQUENCE_T(0, 9),
237 SILC_ASN1_BOOLEAN_T(0, 4, val),
238 SILC_ASN1_BOOLEAN(val),
241 SILC_ASN1_END, SILC_ASN1_END);
243 SILC_LOG_DEBUG(("Encoding failed"));
246 SILC_LOG_DEBUG(("Encoding success"));
247 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
248 SILC_LOG_DEBUG(("Decoding ASN.1 tree 4"));
250 silc_asn1_decode(asn1, &node,
251 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE |
252 SILC_ASN1_EXPLICIT, 101),
253 SILC_ASN1_SEQUENCE_T(0, 9),
255 SILC_ASN1_BOOLEAN_T(0, 4, &val),
256 SILC_ASN1_BOOLEAN(&val),
259 SILC_ASN1_END, SILC_ASN1_END);
261 SILC_LOG_DEBUG(("Decoding failed"));
264 SILC_LOG_DEBUG(("Decoding success"));
265 SILC_LOG_DEBUG(("Boolean val %d", val));
269 memset(&node, 0, sizeof(node));
270 SILC_LOG_DEBUG(("Encoding ASN.1 tree 5"));
272 silc_asn1_encode(asn1, &node2,
273 SILC_ASN1_BOOLEAN(val),
275 SILC_LOG_DEBUG(("Encoding success"));
277 silc_asn1_encode(asn1, &node,
278 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
279 SILC_ASN1_SEQUENCE_T(0, 9),
281 SILC_ASN1_ANY(&node2),
282 SILC_ASN1_BOOLEAN_T(0, 4, val),
283 SILC_ASN1_BOOLEAN(val),
286 SILC_ASN1_END, SILC_ASN1_END);
288 SILC_LOG_DEBUG(("Encoding failed"));
291 SILC_LOG_DEBUG(("Encoding success"));
292 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
293 memset(&node2, 0, sizeof(node2));
294 SILC_LOG_DEBUG(("Decoding ASN.1 tree 5"));
296 silc_asn1_decode(asn1, &node,
297 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
298 SILC_ASN1_SEQUENCE_T(0, 9),
300 SILC_ASN1_ANY(&node2),
301 SILC_ASN1_BOOLEAN_T(0, 4, &val),
302 SILC_ASN1_BOOLEAN(&val),
305 SILC_ASN1_END, SILC_ASN1_END);
307 SILC_LOG_DEBUG(("Decoding failed"));
310 SILC_LOG_DEBUG(("Decoding success"));
311 SILC_LOG_DEBUG(("Boolean val %d", val));
313 silc_asn1_decode(asn1, &node2,
314 SILC_ASN1_BOOLEAN(&val),
317 SILC_LOG_DEBUG(("Decoding failed"));
320 SILC_LOG_DEBUG(("Decoding success"));
321 SILC_LOG_DEBUG(("Boolean val %d", val));
322 memset(&node2, 0, sizeof(node2));
326 memset(&node, 0, sizeof(node));
327 SILC_LOG_DEBUG(("Encoding ASN.1 tree 6"));
329 silc_asn1_encode(asn1, &node2,
330 SILC_ASN1_BOOLEAN(val),
332 SILC_LOG_DEBUG(("Encoding success"));
334 silc_asn1_encode(asn1, &node,
335 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
336 SILC_ASN1_SEQUENCE_T(0, 9),
338 SILC_ASN1_ANY_T(SILC_ASN1_EXPLICIT, 33, &node2),
339 SILC_ASN1_BOOLEAN_T(0, 4, val),
340 SILC_ASN1_BOOLEAN(val),
343 SILC_ASN1_END, SILC_ASN1_END);
345 SILC_LOG_DEBUG(("Encoding failed"));
348 SILC_LOG_DEBUG(("Encoding success"));
349 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
350 memset(&node2, 0, sizeof(node2));
351 SILC_LOG_DEBUG(("Decoding ASN.1 tree 6"));
353 silc_asn1_decode(asn1, &node,
354 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
355 SILC_ASN1_SEQUENCE_T(0, 9),
357 SILC_ASN1_ANY_T(SILC_ASN1_EXPLICIT, 33, &node2),
358 SILC_ASN1_BOOLEAN_T(0, 4, &val),
359 SILC_ASN1_BOOLEAN(&val),
362 SILC_ASN1_END, SILC_ASN1_END);
364 SILC_LOG_DEBUG(("Decoding failed"));
367 SILC_LOG_DEBUG(("Decoding success"));
368 SILC_LOG_DEBUG(("Boolean val %d", val));
370 silc_asn1_decode(asn1, &node2,
371 SILC_ASN1_BOOLEAN(&val),
374 SILC_LOG_DEBUG(("Decoding failed"));
377 SILC_LOG_DEBUG(("Decoding success"));
378 SILC_LOG_DEBUG(("Boolean val %d", val));
379 memset(&node2, 0, sizeof(node2));
383 memset(&node, 0, sizeof(node));
384 SILC_LOG_DEBUG(("Encoding ASN.1 tree 7"));
387 silc_asn1_encode(asn1, &node2,
389 SILC_ASN1_BOOLEAN(val),
390 SILC_ASN1_BOOLEAN(val),
391 SILC_ASN1_BOOLEAN(val),
392 SILC_ASN1_BOOLEAN(val),
393 SILC_ASN1_END, SILC_ASN1_END);
394 SILC_LOG_DEBUG(("Encoding success"));
397 silc_asn1_encode(asn1, &node,
398 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
399 SILC_ASN1_SEQUENCE_T(0, 9),
401 SILC_ASN1_ANY_T(0, 11, &node2),
402 SILC_ASN1_BOOLEAN_T(0, 4, val),
403 SILC_ASN1_BOOLEAN(val),
406 SILC_ASN1_END, SILC_ASN1_END);
408 SILC_LOG_DEBUG(("Encoding failed"));
411 SILC_LOG_DEBUG(("Encoding success"));
412 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
413 memset(&node2, 0, sizeof(node2));
414 SILC_LOG_DEBUG(("Decoding ASN.1 tree 7"));
416 silc_asn1_decode(asn1, &node,
417 SILC_ASN1_SEQUENCE_T(SILC_ASN1_PRIVATE, 101),
418 SILC_ASN1_SEQUENCE_T(0, 9),
420 SILC_ASN1_ANY_T(0, 11, &node2), /* NOTE: tag */
421 SILC_ASN1_BOOLEAN_T(0, 4, &val),
422 SILC_ASN1_BOOLEAN(&val),
425 SILC_ASN1_END, SILC_ASN1_END);
427 SILC_LOG_DEBUG(("Decoding failed"));
430 SILC_LOG_DEBUG(("Decoding success"));
431 SILC_LOG_DEBUG(("Boolean val %d", val));
433 silc_asn1_decode(asn1, &node2,
434 SILC_ASN1_SEQUENCE_T(0, 11), /* NOTE: using implicit
436 SILC_ASN1_BOOLEAN(&val),
437 SILC_ASN1_BOOLEAN(&val),
438 SILC_ASN1_BOOLEAN(&val),
439 SILC_ASN1_BOOLEAN(&val),
440 SILC_ASN1_END, SILC_ASN1_END);
442 SILC_LOG_DEBUG(("Decoding failed"));
445 SILC_LOG_DEBUG(("Decoding success"));
446 SILC_LOG_DEBUG(("Boolean val %d", val));
447 memset(&node2, 0, sizeof(node2));
451 memset(&node, 0, sizeof(node));
452 SILC_LOG_DEBUG(("Encoding ASN.1 tree 8"));
454 silc_asn1_encode(asn1, &node,
456 SILC_ASN1_BOOLEAN_T(SILC_ASN1_IMPLICIT, 9999, val),
457 SILC_ASN1_END, SILC_ASN1_END);
459 SILC_LOG_DEBUG(("Encoding failed"));
462 SILC_LOG_DEBUG(("Encoding success"));
463 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
464 SILC_LOG_DEBUG(("Decoding ASN.1 tree 8"));
466 silc_asn1_decode(asn1, &node,
468 SILC_ASN1_BOOLEAN_T(0, 9999, &val),
469 SILC_ASN1_END, SILC_ASN1_END);
471 SILC_LOG_DEBUG(("Decoding failed"));
474 SILC_LOG_DEBUG(("Decoding success"));
475 SILC_LOG_DEBUG(("Boolean val %d", val));
476 memset(&node, 0, sizeof(node));
479 memset(&node, 0, sizeof(node));
480 SILC_LOG_DEBUG(("Encoding ASN.1 tree 9"));
482 silc_asn1_encode(asn1, &node,
484 SILC_ASN1_SEQUENCE_T(0, 9),
486 SILC_ASN1_BOOLEAN_T(0, 4, val),
487 SILC_ASN1_BOOLEAN(val),
489 SILC_ASN1_BOOLEAN_T(SILC_ASN1_EXPLICIT, 99, val),
490 SILC_ASN1_BOOLEAN_T(0, 100, val),
494 SILC_ASN1_BOOLEAN_T(SILC_ASN1_EXPLICIT, 0, val),
495 SILC_ASN1_OCTET_STRING("foobar", 6),
496 SILC_ASN1_BOOLEAN_T(SILC_ASN1_PRIVATE, 43, val),
497 SILC_ASN1_BOOLEAN_T(SILC_ASN1_APP |
498 SILC_ASN1_EXPLICIT, 1, val),
500 SILC_ASN1_END, SILC_ASN1_END);
502 SILC_LOG_DEBUG(("Encoding failed"));
505 SILC_LOG_DEBUG(("Encoding success"));
506 SILC_LOG_HEXDUMP(("ASN.1 tree"), node.data, silc_buffer_len(&node));
507 SILC_LOG_DEBUG(("Decoding ASN.1 tree 9"));
509 silc_asn1_decode(asn1, &node,
511 SILC_ASN1_SEQUENCE_T(0, 9),
513 SILC_ASN1_BOOLEAN_T(0, 4, &val),
514 SILC_ASN1_BOOLEAN(&val),
516 SILC_ASN1_BOOLEAN_T(SILC_ASN1_EXPLICIT, 99, &val),
517 SILC_ASN1_BOOLEAN_T(0, 100, &val),
521 SILC_ASN1_BOOLEAN_T(SILC_ASN1_EXPLICIT, 0, &val),
522 SILC_ASN1_OCTET_STRING(&str, &str_len),
523 SILC_ASN1_BOOLEAN_T(SILC_ASN1_PRIVATE, 43, &val),
524 SILC_ASN1_BOOLEAN_T(SILC_ASN1_APP |
525 SILC_ASN1_EXPLICIT, 1, &val),
527 SILC_ASN1_END, SILC_ASN1_END);
529 SILC_LOG_DEBUG(("Decoding failed"));
532 SILC_LOG_DEBUG(("Decoding success"));
533 SILC_LOG_DEBUG(("Boolean val %d", val));
534 SILC_LOG_DEBUG(("Ooctet-string %s, len %d", str, str_len));
538 silc_asn1_free(asn1);