blob: 8c609e9de7288101e684cb83f267c007f4ec40d5 [file] [log] [blame]
vlm7d576b32004-08-20 13:37:45 +00001
2/*** <<< INCLUDES [Certificate] >>> ***/
3
4#include <OBJECT_IDENTIFIER.h>
5#include <BIT_STRING.h>
6#include <INTEGER.h>
7#include <Name.h>
8#include <constr_SEQUENCE.h>
9
10/*** <<< DEPS [Certificate] >>> ***/
11
vlm02296432004-09-29 13:19:37 +000012extern asn_TYPE_descriptor_t asn_DEF_Certificate;
vlm7d576b32004-08-20 13:37:45 +000013
14/*** <<< TYPE-DECLS [Certificate] >>> ***/
15
16
17typedef struct Certificate {
18 struct toBeSigned {
19 INTEGER_t version;
20 OBJECT_IDENTIFIER_t signature;
21 Name_t issuer;
22
23 /* Context for parsing across buffer boundaries */
vlm02296432004-09-29 13:19:37 +000024 asn_struct_ctx_t _asn_ctx;
vlm7d576b32004-08-20 13:37:45 +000025 } toBeSigned;
26 OBJECT_IDENTIFIER_t algorithm;
27 BIT_STRING_t signature;
28
29 /* Context for parsing across buffer boundaries */
vlm02296432004-09-29 13:19:37 +000030 asn_struct_ctx_t _asn_ctx;
vlm7d576b32004-08-20 13:37:45 +000031} Certificate_t;
32
vlmff3a6772004-09-05 10:37:18 +000033/*** <<< CODE [Certificate] >>> ***/
34
35static int
vlm02296432004-09-29 13:19:37 +000036memb_signature_1_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
vlmff3a6772004-09-05 10:37:18 +000037 asn_app_consume_bytes_f *app_errlog, void *app_key) {
38 const BIT_STRING_t *st = sptr;
39 size_t size;
40
41 if(!sptr) {
42 _ASN_ERRLOG(app_errlog, app_key,
43 "%s: value not given (%s:%d)",
44 td->name, __FILE__, __LINE__);
45 return -1;
46 }
47
48 if(st->size > 0) {
49 /* Size in bits */
50 size = 8 * (st->size - 1) - (st->buf[0] & 0x7);
51 } else {
52 size = 0;
53 }
54
55 if((size <= 256)) {
56 /* Constraint check succeeded */
57 return 0;
58 } else {
59 _ASN_ERRLOG(app_errlog, app_key,
60 "%s: constraint failed (%s:%d)",
61 td->name, __FILE__, __LINE__);
62 return -1;
63 }
64}
65
66
vlm7d576b32004-08-20 13:37:45 +000067/*** <<< STAT-DEFS [Certificate] >>> ***/
68
vlm02296432004-09-29 13:19:37 +000069static asn_TYPE_member_t asn_MBR_toBeSigned[] = {
vlmddd5a7d2004-09-10 09:18:20 +000070 { ATF_NOFLAGS, 0, offsetof(struct toBeSigned, version),
vlm7d576b32004-08-20 13:37:45 +000071 .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
72 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +000073 .type = (void *)&asn_DEF_INTEGER,
vlm7d576b32004-08-20 13:37:45 +000074 .memb_constraints = 0, /* Defer to actual type */
75 .name = "version"
76 },
vlmddd5a7d2004-09-10 09:18:20 +000077 { ATF_NOFLAGS, 0, offsetof(struct toBeSigned, signature),
vlm7d576b32004-08-20 13:37:45 +000078 .tag = (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)),
79 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +000080 .type = (void *)&asn_DEF_OBJECT_IDENTIFIER,
vlm7d576b32004-08-20 13:37:45 +000081 .memb_constraints = 0, /* Defer to actual type */
82 .name = "signature"
83 },
vlmddd5a7d2004-09-10 09:18:20 +000084 { ATF_NOFLAGS, 0, offsetof(struct toBeSigned, issuer),
vlm7d576b32004-08-20 13:37:45 +000085 .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
86 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +000087 .type = (void *)&asn_DEF_Name,
vlm7d576b32004-08-20 13:37:45 +000088 .memb_constraints = 0, /* Defer to actual type */
89 .name = "issuer"
90 },
91};
vlm02296432004-09-29 13:19:37 +000092static ber_tlv_tag_t asn_DEF_toBeSigned_tags[] = {
vlm7d576b32004-08-20 13:37:45 +000093 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
94};
vlm02296432004-09-29 13:19:37 +000095static asn_TYPE_tag2member_t asn_DEF_toBeSigned_tag2el[] = {
vlm7d576b32004-08-20 13:37:45 +000096 { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* version at 21 */
97 { (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)), 1, 0, 0 }, /* signature at 22 */
98 { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* issuer at 24 */
99};
vlm02296432004-09-29 13:19:37 +0000100static asn_SEQUENCE_specifics_t asn_DEF_toBeSigned_specs = {
vlm7d576b32004-08-20 13:37:45 +0000101 sizeof(struct toBeSigned),
vlm02296432004-09-29 13:19:37 +0000102 offsetof(struct toBeSigned, _asn_ctx),
103 asn_DEF_toBeSigned_tag2el,
vlm7d576b32004-08-20 13:37:45 +0000104 3, /* Count of tags in the map */
105 -1, /* Start extensions */
106 -1 /* Stop extensions */
107};
vlm1dc848e2004-09-07 06:44:29 +0000108static /* Use -fall-defs-global to expose */
vlm02296432004-09-29 13:19:37 +0000109asn_TYPE_descriptor_t asn_DEF_toBeSigned = {
vlm7d576b32004-08-20 13:37:45 +0000110 "toBeSigned",
vlm39ba4c42004-09-22 16:06:28 +0000111 SEQUENCE_free,
112 SEQUENCE_print,
vlm7d576b32004-08-20 13:37:45 +0000113 SEQUENCE_constraint,
114 SEQUENCE_decode_ber,
115 SEQUENCE_encode_der,
vlm39ba4c42004-09-22 16:06:28 +0000116 0, /* Not implemented yet */
117 SEQUENCE_encode_xer,
vlm7d576b32004-08-20 13:37:45 +0000118 0, /* Use generic outmost tag fetcher */
vlm02296432004-09-29 13:19:37 +0000119 asn_DEF_toBeSigned_tags,
120 sizeof(asn_DEF_toBeSigned_tags)
121 /sizeof(asn_DEF_toBeSigned_tags[0]), /* 1 */
122 asn_DEF_toBeSigned_tags, /* Same as above */
123 sizeof(asn_DEF_toBeSigned_tags)
124 /sizeof(asn_DEF_toBeSigned_tags[0]), /* 1 */
125 asn_MBR_toBeSigned,
vlm7d576b32004-08-20 13:37:45 +0000126 3, /* Elements count */
vlm02296432004-09-29 13:19:37 +0000127 &asn_DEF_toBeSigned_specs /* Additional specs */
vlm7d576b32004-08-20 13:37:45 +0000128};
129
vlm02296432004-09-29 13:19:37 +0000130static asn_TYPE_member_t asn_MBR_Certificate[] = {
vlmddd5a7d2004-09-10 09:18:20 +0000131 { ATF_NOFLAGS, 0, offsetof(struct Certificate, toBeSigned),
vlm7d576b32004-08-20 13:37:45 +0000132 .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
133 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +0000134 .type = (void *)&asn_DEF_toBeSigned,
vlm7d576b32004-08-20 13:37:45 +0000135 .memb_constraints = 0, /* Defer to actual type */
136 .name = "toBeSigned"
137 },
vlmddd5a7d2004-09-10 09:18:20 +0000138 { ATF_NOFLAGS, 0, offsetof(struct Certificate, algorithm),
vlm7d576b32004-08-20 13:37:45 +0000139 .tag = (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)),
140 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +0000141 .type = (void *)&asn_DEF_OBJECT_IDENTIFIER,
vlm7d576b32004-08-20 13:37:45 +0000142 .memb_constraints = 0, /* Defer to actual type */
143 .name = "algorithm"
144 },
vlmddd5a7d2004-09-10 09:18:20 +0000145 { ATF_NOFLAGS, 0, offsetof(struct Certificate, signature),
vlm7d576b32004-08-20 13:37:45 +0000146 .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
147 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +0000148 .type = (void *)&asn_DEF_BIT_STRING,
vlmff3a6772004-09-05 10:37:18 +0000149 .memb_constraints = memb_signature_1_constraint,
vlm7d576b32004-08-20 13:37:45 +0000150 .name = "signature"
151 },
152};
vlm02296432004-09-29 13:19:37 +0000153static ber_tlv_tag_t asn_DEF_Certificate_tags[] = {
vlm7d576b32004-08-20 13:37:45 +0000154 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
155};
vlm02296432004-09-29 13:19:37 +0000156static asn_TYPE_tag2member_t asn_DEF_Certificate_tag2el[] = {
vlmff3a6772004-09-05 10:37:18 +0000157 { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* signature at 17 */
vlm7d576b32004-08-20 13:37:45 +0000158 { (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)), 1, 0, 0 }, /* algorithm at 16 */
159 { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* toBeSigned at 21 */
160};
vlm02296432004-09-29 13:19:37 +0000161static asn_SEQUENCE_specifics_t asn_DEF_Certificate_specs = {
vlm7d576b32004-08-20 13:37:45 +0000162 sizeof(struct Certificate),
vlm02296432004-09-29 13:19:37 +0000163 offsetof(struct Certificate, _asn_ctx),
164 asn_DEF_Certificate_tag2el,
vlm7d576b32004-08-20 13:37:45 +0000165 3, /* Count of tags in the map */
166 -1, /* Start extensions */
167 -1 /* Stop extensions */
168};
vlm02296432004-09-29 13:19:37 +0000169asn_TYPE_descriptor_t asn_DEF_Certificate = {
vlm7d576b32004-08-20 13:37:45 +0000170 "Certificate",
vlm39ba4c42004-09-22 16:06:28 +0000171 SEQUENCE_free,
172 SEQUENCE_print,
vlm7d576b32004-08-20 13:37:45 +0000173 SEQUENCE_constraint,
174 SEQUENCE_decode_ber,
175 SEQUENCE_encode_der,
vlm39ba4c42004-09-22 16:06:28 +0000176 0, /* Not implemented yet */
177 SEQUENCE_encode_xer,
vlm7d576b32004-08-20 13:37:45 +0000178 0, /* Use generic outmost tag fetcher */
vlm02296432004-09-29 13:19:37 +0000179 asn_DEF_Certificate_tags,
180 sizeof(asn_DEF_Certificate_tags)
181 /sizeof(asn_DEF_Certificate_tags[0]), /* 1 */
182 asn_DEF_Certificate_tags, /* Same as above */
183 sizeof(asn_DEF_Certificate_tags)
184 /sizeof(asn_DEF_Certificate_tags[0]), /* 1 */
185 asn_MBR_Certificate,
vlm7d576b32004-08-20 13:37:45 +0000186 3, /* Elements count */
vlm02296432004-09-29 13:19:37 +0000187 &asn_DEF_Certificate_specs /* Additional specs */
vlm7d576b32004-08-20 13:37:45 +0000188};
189
190
191/*** <<< INCLUDES [Name] >>> ***/
192
193#include <RelativeDistinguishedName.h>
194#include <asn_SEQUENCE_OF.h>
195#include <constr_SEQUENCE_OF.h>
196
197/*** <<< DEPS [Name] >>> ***/
198
vlm02296432004-09-29 13:19:37 +0000199extern asn_TYPE_descriptor_t asn_DEF_Name;
vlm7d576b32004-08-20 13:37:45 +0000200
201/*** <<< TYPE-DECLS [Name] >>> ***/
202
203
204typedef struct Name {
vlmb47f48e2004-09-17 06:32:12 +0000205 A_SEQUENCE_OF(RelativeDistinguishedName_t) list;
vlm7d576b32004-08-20 13:37:45 +0000206
207 /* Context for parsing across buffer boundaries */
vlm02296432004-09-29 13:19:37 +0000208 asn_struct_ctx_t _asn_ctx;
vlm7d576b32004-08-20 13:37:45 +0000209} Name_t;
210
211/*** <<< STAT-DEFS [Name] >>> ***/
212
vlm02296432004-09-29 13:19:37 +0000213static asn_TYPE_member_t asn_MBR_Name[] = {
vlmddd5a7d2004-09-10 09:18:20 +0000214 { ATF_NOFLAGS, 0, 0,
vlm7d576b32004-08-20 13:37:45 +0000215 .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
216 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +0000217 .type = (void *)&asn_DEF_RelativeDistinguishedName,
vlm7d576b32004-08-20 13:37:45 +0000218 .memb_constraints = 0, /* Defer to actual type */
219 .name = ""
220 },
221};
vlm02296432004-09-29 13:19:37 +0000222static ber_tlv_tag_t asn_DEF_Name_tags[] = {
vlm7d576b32004-08-20 13:37:45 +0000223 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
224};
vlm02296432004-09-29 13:19:37 +0000225static asn_SET_OF_specifics_t asn_DEF_Name_specs = {
vlm7d576b32004-08-20 13:37:45 +0000226 sizeof(struct Name),
vlm02296432004-09-29 13:19:37 +0000227 offsetof(struct Name, _asn_ctx),
vlm39ba4c42004-09-22 16:06:28 +0000228 0, /* XER encoding is XMLDelimitedItemList */
vlm7d576b32004-08-20 13:37:45 +0000229};
vlm02296432004-09-29 13:19:37 +0000230asn_TYPE_descriptor_t asn_DEF_Name = {
vlm7d576b32004-08-20 13:37:45 +0000231 "Name",
vlm39ba4c42004-09-22 16:06:28 +0000232 SEQUENCE_OF_free,
233 SEQUENCE_OF_print,
vlm7d576b32004-08-20 13:37:45 +0000234 SEQUENCE_OF_constraint,
235 SEQUENCE_OF_decode_ber,
236 SEQUENCE_OF_encode_der,
vlm39ba4c42004-09-22 16:06:28 +0000237 0, /* Not implemented yet */
238 SEQUENCE_OF_encode_xer,
vlm7d576b32004-08-20 13:37:45 +0000239 0, /* Use generic outmost tag fetcher */
vlm02296432004-09-29 13:19:37 +0000240 asn_DEF_Name_tags,
241 sizeof(asn_DEF_Name_tags)
242 /sizeof(asn_DEF_Name_tags[0]), /* 1 */
243 asn_DEF_Name_tags, /* Same as above */
244 sizeof(asn_DEF_Name_tags)
245 /sizeof(asn_DEF_Name_tags[0]), /* 1 */
246 asn_MBR_Name,
vlm7d576b32004-08-20 13:37:45 +0000247 1, /* Single element */
vlm02296432004-09-29 13:19:37 +0000248 &asn_DEF_Name_specs /* Additional specs */
vlm7d576b32004-08-20 13:37:45 +0000249};
250
251
252/*** <<< INCLUDES [RelativeDistinguishedName] >>> ***/
253
254#include <IA5String.h>
255#include <asn_SET_OF.h>
256#include <constr_SET_OF.h>
257
258/*** <<< DEPS [RelativeDistinguishedName] >>> ***/
259
vlm02296432004-09-29 13:19:37 +0000260extern asn_TYPE_descriptor_t asn_DEF_RelativeDistinguishedName;
vlm7d576b32004-08-20 13:37:45 +0000261
262/*** <<< TYPE-DECLS [RelativeDistinguishedName] >>> ***/
263
264
265typedef struct RelativeDistinguishedName {
266 A_SET_OF(IA5String_t) list;
267
268 /* Context for parsing across buffer boundaries */
vlm02296432004-09-29 13:19:37 +0000269 asn_struct_ctx_t _asn_ctx;
vlm7d576b32004-08-20 13:37:45 +0000270} RelativeDistinguishedName_t;
271
272/*** <<< CTABLES [RelativeDistinguishedName] >>> ***/
273
274static int permitted_alphabet_table_1[256] = {
2750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* */
2760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* */
2770,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0, /* ,-. */
2781,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, /* 0 9 */
2790,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ABCDEFGHIJKLMNO */
2801,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, /* PQRSTUVWXYZ */
2810,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* abcdefghijklmno */
2821,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, /* pqrstuvwxyz */
283};
284
285static int check_permitted_alphabet_1(const void *sptr) {
286 int *table = permitted_alphabet_table_1;
287 /* The underlying type is IA5String */
vlm4fdaead2004-08-21 07:34:17 +0000288 const IA5String_t *st = sptr;
vlm824aefc2004-08-22 03:19:00 +0000289 const uint8_t *ch = st->buf;
290 const uint8_t *end = ch + st->size;
vlm7d576b32004-08-20 13:37:45 +0000291
292 for(; ch < end; ch++) {
293 uint8_t cv = *ch;
vlmcdf661b2004-08-22 12:47:03 +0000294 if(!table[cv]) return -1;
vlm7d576b32004-08-20 13:37:45 +0000295 }
vlmcdf661b2004-08-22 12:47:03 +0000296 return 0;
vlm7d576b32004-08-20 13:37:45 +0000297}
298
299
300/*** <<< CODE [RelativeDistinguishedName] >>> ***/
301
302static int
vlm02296432004-09-29 13:19:37 +0000303memb_IA5String_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
vlm7d576b32004-08-20 13:37:45 +0000304 asn_app_consume_bytes_f *app_errlog, void *app_key) {
vlm824aefc2004-08-22 03:19:00 +0000305 const IA5String_t *st = sptr;
vlm7d576b32004-08-20 13:37:45 +0000306
307 if(!sptr) {
308 _ASN_ERRLOG(app_errlog, app_key,
vlm758530a2004-08-22 13:47:59 +0000309 "%s: value not given (%s:%d)",
310 td->name, __FILE__, __LINE__);
vlm7d576b32004-08-20 13:37:45 +0000311 return -1;
312 }
313
314
vlm7e20dfc2004-08-22 13:11:40 +0000315 if(!check_permitted_alphabet_1(sptr)) {
vlm7d576b32004-08-20 13:37:45 +0000316 /* Constraint check succeeded */
vlmcdf661b2004-08-22 12:47:03 +0000317 return 0;
vlm7d576b32004-08-20 13:37:45 +0000318 } else {
319 _ASN_ERRLOG(app_errlog, app_key,
vlm758530a2004-08-22 13:47:59 +0000320 "%s: constraint failed (%s:%d)",
321 td->name, __FILE__, __LINE__);
vlm7d576b32004-08-20 13:37:45 +0000322 return -1;
323 }
324}
325
326
327/*** <<< STAT-DEFS [RelativeDistinguishedName] >>> ***/
328
vlm02296432004-09-29 13:19:37 +0000329static asn_TYPE_member_t asn_MBR_RelativeDistinguishedName[] = {
vlmddd5a7d2004-09-10 09:18:20 +0000330 { ATF_NOFLAGS, 0, 0,
vlm7d576b32004-08-20 13:37:45 +0000331 .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
332 .tag_mode = 0,
vlm02296432004-09-29 13:19:37 +0000333 .type = (void *)&asn_DEF_IA5String,
vlmff3a6772004-09-05 10:37:18 +0000334 .memb_constraints = memb_IA5String_2_constraint,
vlm7d576b32004-08-20 13:37:45 +0000335 .name = ""
336 },
337};
vlm02296432004-09-29 13:19:37 +0000338static ber_tlv_tag_t asn_DEF_RelativeDistinguishedName_tags[] = {
vlm7d576b32004-08-20 13:37:45 +0000339 (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
340};
vlm02296432004-09-29 13:19:37 +0000341static asn_SET_OF_specifics_t asn_DEF_RelativeDistinguishedName_specs = {
vlm7d576b32004-08-20 13:37:45 +0000342 sizeof(struct RelativeDistinguishedName),
vlm02296432004-09-29 13:19:37 +0000343 offsetof(struct RelativeDistinguishedName, _asn_ctx),
vlm39ba4c42004-09-22 16:06:28 +0000344 0, /* XER encoding is XMLDelimitedItemList */
vlm7d576b32004-08-20 13:37:45 +0000345};
vlm02296432004-09-29 13:19:37 +0000346asn_TYPE_descriptor_t asn_DEF_RelativeDistinguishedName = {
vlm7d576b32004-08-20 13:37:45 +0000347 "RelativeDistinguishedName",
vlm39ba4c42004-09-22 16:06:28 +0000348 SET_OF_free,
349 SET_OF_print,
vlm7d576b32004-08-20 13:37:45 +0000350 SET_OF_constraint,
351 SET_OF_decode_ber,
352 SET_OF_encode_der,
vlm39ba4c42004-09-22 16:06:28 +0000353 0, /* Not implemented yet */
354 SET_OF_encode_xer,
vlm7d576b32004-08-20 13:37:45 +0000355 0, /* Use generic outmost tag fetcher */
vlm02296432004-09-29 13:19:37 +0000356 asn_DEF_RelativeDistinguishedName_tags,
357 sizeof(asn_DEF_RelativeDistinguishedName_tags)
358 /sizeof(asn_DEF_RelativeDistinguishedName_tags[0]), /* 1 */
359 asn_DEF_RelativeDistinguishedName_tags, /* Same as above */
360 sizeof(asn_DEF_RelativeDistinguishedName_tags)
361 /sizeof(asn_DEF_RelativeDistinguishedName_tags[0]), /* 1 */
362 asn_MBR_RelativeDistinguishedName,
vlm7d576b32004-08-20 13:37:45 +0000363 1, /* Single element */
vlm02296432004-09-29 13:19:37 +0000364 &asn_DEF_RelativeDistinguishedName_specs /* Additional specs */
vlm7d576b32004-08-20 13:37:45 +0000365};
366