8 #include <DefaultSequence.h>
9 #include <DefaultSet.h>
12 32 | 16, /* [UNIVERSAL 16], constructed */
15 ((2 << 6) + 0), /* [0], primitive */
18 /* anInteger INTEGER */
19 ((2 << 6) + 1), /* [1], primitive */
25 32 | 16, /* [UNIVERSAL 16], constructed */
27 /* anInteger INTEGER */
28 ((2 << 6) + 1), /* [1], primitive */
34 32 | 16, /* [UNIVERSAL 16], constructed */
37 ((2 << 6) + 0), /* [0], primitive */
43 32 | 16, /* [UNIVERSAL 16], constructed */
48 32 | 17, /* [UNIVERSAL 17], constructed */
51 ((2 << 6) + 0), /* [0], primitive */
54 /* anInteger INTEGER */
55 ((2 << 6) + 1), /* [1], primitive */
61 32 | 17, /* [UNIVERSAL 17], constructed */
63 /* anInteger INTEGER */
64 ((2 << 6) + 1), /* [1], primitive */
70 32 | 17, /* [UNIVERSAL 17], constructed */
73 ((2 << 6) + 0), /* [0], primitive */
79 32 | 17, /* [UNIVERSAL 17], constructed */
87 buf2_fill(const void *buffer, size_t size, void *app_key) {
91 if(buf2_pos + size > sizeof(buf2))
94 memcpy(buf2 + buf2_pos, buffer, size);
101 compare_encoding(asn_enc_rval_t *erval, uint8_t *expected, size_t expected_size,
104 assert(erval->encoded != -1);
105 if((size_t)erval->encoded != expected_size) {
106 printf("%d != %d\n", (int)erval->encoded, (int)expected_size);
107 assert((size_t)erval->encoded == expected_size);
109 for(size_t i = 0; i < expected_size; i++) {
110 if(expected[i] != actual[i]) {
111 fprintf(stderr, "Recreated buffer content mismatch:\n");
112 fprintf(stderr, "Byte %zu, %x != %x (%d != %d)\n", i, expected[i],
113 actual[i], expected[i], actual[i]);
115 assert(expected[i] == actual[i]);
120 check_sequence(uint8_t *in, size_t in_size, uint8_t *expected,
121 size_t expected_size) {
122 DefaultSequence_t t, *tp;
125 asn_enc_rval_t erval;
127 tp = memset(&t, 0, sizeof(t));
129 /* Try to decode the BER encoding. */
130 rval = ber_decode(0, &asn_DEF_DefaultSequence, (void**)tpp, in, in_size);
131 assert(rval.code == RC_OK);
132 assert(rval.consumed == in_size);
134 /* Try to re-create using DER encoding. */
136 erval = der_encode(&asn_DEF_DefaultSequence, tp, buf2_fill, 0);
137 compare_encoding(&erval, expected, expected_size, buf2);
139 ASN_STRUCT_RESET(asn_DEF_DefaultSequence, tp);
143 check_set(uint8_t *in, size_t in_size, uint8_t *expected,
144 size_t expected_size) {
148 asn_enc_rval_t erval;
150 tp = memset(&t, 0, sizeof(t));
152 /* Try to decode the BER encoding. */
153 rval = ber_decode(0, &asn_DEF_DefaultSet, (void**)tpp, in, in_size);
154 assert(rval.code == RC_OK);
155 assert(rval.consumed == in_size);
157 /* Try to re-create using DER encoding. */
159 erval = der_encode(&asn_DEF_DefaultSet, tp, buf2_fill, 0);
160 compare_encoding(&erval, expected, expected_size, buf2);
161 ASN_STRUCT_RESET(asn_DEF_DefaultSet, tp);
165 main(int ac, char **av) {
167 (void)ac; /* Unused argument */
168 (void)av; /* Unused argument */
170 check_sequence(berSeq1, sizeof(berSeq1), derSeq1, sizeof(derSeq1));
171 check_sequence(berSeq2, sizeof(berSeq2), derSeq2, sizeof(derSeq2));
172 check_set(berSet1, sizeof(berSet1), derSet1, sizeof(derSet1));
173 check_set(berSet2, sizeof(berSet2), derSet2, sizeof(derSet2));