asn1_read_value() and friends understand the ?CURRENT keyword.
[platform/upstream/libtasn1.git] / tests / Test_choice.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <libtasn1.h>
4
5 int
6 main (int argc, char** argv)
7 {
8   int result = 0;
9   asn1_node definitions = NULL, node1 = NULL, node2 = NULL;
10   char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
11
12   char data[1024];
13   int data_size = sizeof (data);
14
15   /* Encode */
16   result = asn1_parser2tree ("choice.asn", &definitions, errorDescription);
17   if (result != ASN1_SUCCESS)
18     {
19       printf ("error in %d\n", __LINE__);
20       exit (1);
21     }
22
23   result = asn1_create_element (definitions, "TEST.Choice0", &node1);
24   if (result != ASN1_SUCCESS)
25     {
26       printf ("error in %d\n", __LINE__);
27       exit (1);
28     }
29
30   result = asn1_write_value (node1, "", "choice1", 1);
31   if (result != ASN1_SUCCESS)
32     {
33       printf ("error in %d\n", __LINE__);
34       exit (1);
35     }
36
37   result = asn1_write_value (node1, "choice1", "choice2", 1);
38   if (result != ASN1_SUCCESS)
39     {
40       printf ("error in %d\n", __LINE__);
41       exit (1);
42     }
43
44   result = asn1_write_value (node1, "choice1.choice2", "int1", 1);
45   if (result != ASN1_SUCCESS)
46     {
47       printf ("error in %d\n", __LINE__);
48       exit (1);
49     }
50
51   result = asn1_write_value (node1, "choice1.choice2.int1", "1234", 0);
52   if (result != ASN1_SUCCESS)
53     {
54       printf ("error in %d\n", __LINE__);
55       exit (1);
56     }
57
58   result = asn1_der_coding (node1, "", data, &data_size, errorDescription);
59   if (result != ASN1_SUCCESS)
60     {
61       printf ("error in %d\n", __LINE__);
62       exit (1);
63     }
64
65   asn1_delete_structure (&node1);
66
67   /* Decode */
68   result = asn1_create_element (definitions, "TEST.Choice0", &node2);
69   if (result != ASN1_SUCCESS)
70     {
71       printf ("error in %d\n", __LINE__);
72       exit (1);
73     }
74
75 #if 0
76   printf ("der:");
77   for (i = 0; i < data_size; i++)
78     printf ("%.2x ", (unsigned char) (data[i]));
79   printf ("\n");
80 #endif
81
82   result = asn1_der_decoding (&node2, data, data_size, errorDescription);
83   if (result != ASN1_SUCCESS)
84     {
85       printf ("error in %d\n", __LINE__);
86       exit (1);
87     }
88
89   asn1_delete_structure (&node2);
90   asn1_delete_structure (&definitions);
91
92   return 0;
93 }