openssl_rsa_pss_verify 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/ext/openssl_rsa_pss_verify/extconf.rb +0 -8
  2. data/lib/openssl_rsa_pss_verify/version.rb +1 -1
  3. metadata +1 -97
  4. data/vendor/openssl/include/openssl/aes.h +0 -147
  5. data/vendor/openssl/include/openssl/asn1.h +0 -1404
  6. data/vendor/openssl/include/openssl/asn1_mac.h +0 -578
  7. data/vendor/openssl/include/openssl/asn1t.h +0 -960
  8. data/vendor/openssl/include/openssl/bio.h +0 -847
  9. data/vendor/openssl/include/openssl/blowfish.h +0 -129
  10. data/vendor/openssl/include/openssl/bn.h +0 -891
  11. data/vendor/openssl/include/openssl/buffer.h +0 -119
  12. data/vendor/openssl/include/openssl/camellia.h +0 -130
  13. data/vendor/openssl/include/openssl/cast.h +0 -107
  14. data/vendor/openssl/include/openssl/cmac.h +0 -82
  15. data/vendor/openssl/include/openssl/cms.h +0 -501
  16. data/vendor/openssl/include/openssl/comp.h +0 -80
  17. data/vendor/openssl/include/openssl/conf.h +0 -263
  18. data/vendor/openssl/include/openssl/conf_api.h +0 -89
  19. data/vendor/openssl/include/openssl/crypto.h +0 -611
  20. data/vendor/openssl/include/openssl/des.h +0 -248
  21. data/vendor/openssl/include/openssl/des_old.h +0 -446
  22. data/vendor/openssl/include/openssl/dh.h +0 -280
  23. data/vendor/openssl/include/openssl/dsa.h +0 -327
  24. data/vendor/openssl/include/openssl/dso.h +0 -409
  25. data/vendor/openssl/include/openssl/dtls1.h +0 -287
  26. data/vendor/openssl/include/openssl/e_os2.h +0 -315
  27. data/vendor/openssl/include/openssl/ebcdic.h +0 -19
  28. data/vendor/openssl/include/openssl/ec.h +0 -1167
  29. data/vendor/openssl/include/openssl/ecdh.h +0 -125
  30. data/vendor/openssl/include/openssl/ecdsa.h +0 -260
  31. data/vendor/openssl/include/openssl/engine.h +0 -842
  32. data/vendor/openssl/include/openssl/err.h +0 -386
  33. data/vendor/openssl/include/openssl/evp.h +0 -1409
  34. data/vendor/openssl/include/openssl/hmac.h +0 -110
  35. data/vendor/openssl/include/openssl/idea.h +0 -103
  36. data/vendor/openssl/include/openssl/krb5_asn.h +0 -256
  37. data/vendor/openssl/include/openssl/kssl.h +0 -183
  38. data/vendor/openssl/include/openssl/lhash.h +0 -241
  39. data/vendor/openssl/include/openssl/md4.h +0 -120
  40. data/vendor/openssl/include/openssl/md5.h +0 -120
  41. data/vendor/openssl/include/openssl/mdc2.h +0 -98
  42. data/vendor/openssl/include/openssl/modes.h +0 -135
  43. data/vendor/openssl/include/openssl/obj_mac.h +0 -4032
  44. data/vendor/openssl/include/openssl/objects.h +0 -1138
  45. data/vendor/openssl/include/openssl/ocsp.h +0 -623
  46. data/vendor/openssl/include/openssl/opensslconf.h +0 -234
  47. data/vendor/openssl/include/openssl/opensslv.h +0 -89
  48. data/vendor/openssl/include/openssl/ossl_typ.h +0 -202
  49. data/vendor/openssl/include/openssl/pem.h +0 -641
  50. data/vendor/openssl/include/openssl/pem2.h +0 -70
  51. data/vendor/openssl/include/openssl/pkcs12.h +0 -331
  52. data/vendor/openssl/include/openssl/pkcs7.h +0 -499
  53. data/vendor/openssl/include/openssl/pqueue.h +0 -94
  54. data/vendor/openssl/include/openssl/rand.h +0 -149
  55. data/vendor/openssl/include/openssl/rc2.h +0 -103
  56. data/vendor/openssl/include/openssl/rc4.h +0 -90
  57. data/vendor/openssl/include/openssl/ripemd.h +0 -107
  58. data/vendor/openssl/include/openssl/rsa.h +0 -582
  59. data/vendor/openssl/include/openssl/safestack.h +0 -2663
  60. data/vendor/openssl/include/openssl/seed.h +0 -139
  61. data/vendor/openssl/include/openssl/sha.h +0 -214
  62. data/vendor/openssl/include/openssl/srp.h +0 -172
  63. data/vendor/openssl/include/openssl/srtp.h +0 -145
  64. data/vendor/openssl/include/openssl/ssl.h +0 -2579
  65. data/vendor/openssl/include/openssl/ssl2.h +0 -272
  66. data/vendor/openssl/include/openssl/ssl23.h +0 -83
  67. data/vendor/openssl/include/openssl/ssl3.h +0 -684
  68. data/vendor/openssl/include/openssl/stack.h +0 -108
  69. data/vendor/openssl/include/openssl/symhacks.h +0 -475
  70. data/vendor/openssl/include/openssl/tls1.h +0 -735
  71. data/vendor/openssl/include/openssl/ts.h +0 -858
  72. data/vendor/openssl/include/openssl/txt_db.h +0 -112
  73. data/vendor/openssl/include/openssl/ui.h +0 -383
  74. data/vendor/openssl/include/openssl/ui_compat.h +0 -83
  75. data/vendor/openssl/include/openssl/whrlpool.h +0 -41
  76. data/vendor/openssl/include/openssl/x509.h +0 -1297
  77. data/vendor/openssl/include/openssl/x509_vfy.h +0 -567
  78. data/vendor/openssl/include/openssl/x509v3.h +0 -1007
  79. data/vendor/openssl/lib/engines/lib4758cca.so +0 -0
  80. data/vendor/openssl/lib/engines/libaep.so +0 -0
  81. data/vendor/openssl/lib/engines/libatalla.so +0 -0
  82. data/vendor/openssl/lib/engines/libcapi.so +0 -0
  83. data/vendor/openssl/lib/engines/libchil.so +0 -0
  84. data/vendor/openssl/lib/engines/libcswift.so +0 -0
  85. data/vendor/openssl/lib/engines/libgmp.so +0 -0
  86. data/vendor/openssl/lib/engines/libgost.so +0 -0
  87. data/vendor/openssl/lib/engines/libnuron.so +0 -0
  88. data/vendor/openssl/lib/engines/libpadlock.so +0 -0
  89. data/vendor/openssl/lib/engines/libsureware.so +0 -0
  90. data/vendor/openssl/lib/engines/libubsec.so +0 -0
  91. data/vendor/openssl/lib/libcrypto.a +0 -0
  92. data/vendor/openssl/lib/libcrypto.so +0 -0
  93. data/vendor/openssl/lib/libcrypto.so.1.0.0 +0 -0
  94. data/vendor/openssl/lib/libssl.a +0 -0
  95. data/vendor/openssl/lib/libssl.so +0 -0
  96. data/vendor/openssl/lib/libssl.so.1.0.0 +0 -0
  97. data/vendor/openssl/lib/pkgconfig/libcrypto.pc +0 -12
  98. data/vendor/openssl/lib/pkgconfig/libssl.pc +0 -12
  99. data/vendor/openssl/lib/pkgconfig/openssl.pc +0 -12
@@ -1,960 +0,0 @@
1
- /* asn1t.h */
2
- /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3
- * project 2000.
4
- */
5
- /* ====================================================================
6
- * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved.
7
- *
8
- * Redistribution and use in source and binary forms, with or without
9
- * modification, are permitted provided that the following conditions
10
- * are met:
11
- *
12
- * 1. Redistributions of source code must retain the above copyright
13
- * notice, this list of conditions and the following disclaimer.
14
- *
15
- * 2. Redistributions in binary form must reproduce the above copyright
16
- * notice, this list of conditions and the following disclaimer in
17
- * the documentation and/or other materials provided with the
18
- * distribution.
19
- *
20
- * 3. All advertising materials mentioning features or use of this
21
- * software must display the following acknowledgment:
22
- * "This product includes software developed by the OpenSSL Project
23
- * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24
- *
25
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26
- * endorse or promote products derived from this software without
27
- * prior written permission. For written permission, please contact
28
- * licensing@OpenSSL.org.
29
- *
30
- * 5. Products derived from this software may not be called "OpenSSL"
31
- * nor may "OpenSSL" appear in their names without prior written
32
- * permission of the OpenSSL Project.
33
- *
34
- * 6. Redistributions of any form whatsoever must retain the following
35
- * acknowledgment:
36
- * "This product includes software developed by the OpenSSL Project
37
- * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38
- *
39
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50
- * OF THE POSSIBILITY OF SUCH DAMAGE.
51
- * ====================================================================
52
- *
53
- * This product includes cryptographic software written by Eric Young
54
- * (eay@cryptsoft.com). This product includes software written by Tim
55
- * Hudson (tjh@cryptsoft.com).
56
- *
57
- */
58
- #ifndef HEADER_ASN1T_H
59
- #define HEADER_ASN1T_H
60
-
61
- #include <stddef.h>
62
- #include <openssl/e_os2.h>
63
- #include <openssl/asn1.h>
64
-
65
- #ifdef OPENSSL_BUILD_SHLIBCRYPTO
66
- # undef OPENSSL_EXTERN
67
- # define OPENSSL_EXTERN OPENSSL_EXPORT
68
- #endif
69
-
70
- /* ASN1 template defines, structures and functions */
71
-
72
- #ifdef __cplusplus
73
- extern "C" {
74
- #endif
75
-
76
-
77
- #ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION
78
-
79
- /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */
80
- #define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr))
81
-
82
-
83
- /* Macros for start and end of ASN1_ITEM definition */
84
-
85
- #define ASN1_ITEM_start(itname) \
86
- OPENSSL_GLOBAL const ASN1_ITEM itname##_it = {
87
-
88
- #define ASN1_ITEM_end(itname) \
89
- };
90
-
91
- #else
92
-
93
- /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */
94
- #define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr()))
95
-
96
-
97
- /* Macros for start and end of ASN1_ITEM definition */
98
-
99
- #define ASN1_ITEM_start(itname) \
100
- const ASN1_ITEM * itname##_it(void) \
101
- { \
102
- static const ASN1_ITEM local_it = {
103
-
104
- #define ASN1_ITEM_end(itname) \
105
- }; \
106
- return &local_it; \
107
- }
108
-
109
- #endif
110
-
111
-
112
- /* Macros to aid ASN1 template writing */
113
-
114
- #define ASN1_ITEM_TEMPLATE(tname) \
115
- static const ASN1_TEMPLATE tname##_item_tt
116
-
117
- #define ASN1_ITEM_TEMPLATE_END(tname) \
118
- ;\
119
- ASN1_ITEM_start(tname) \
120
- ASN1_ITYPE_PRIMITIVE,\
121
- -1,\
122
- &tname##_item_tt,\
123
- 0,\
124
- NULL,\
125
- 0,\
126
- #tname \
127
- ASN1_ITEM_end(tname)
128
-
129
-
130
- /* This is a ASN1 type which just embeds a template */
131
-
132
- /* This pair helps declare a SEQUENCE. We can do:
133
- *
134
- * ASN1_SEQUENCE(stname) = {
135
- * ... SEQUENCE components ...
136
- * } ASN1_SEQUENCE_END(stname)
137
- *
138
- * This will produce an ASN1_ITEM called stname_it
139
- * for a structure called stname.
140
- *
141
- * If you want the same structure but a different
142
- * name then use:
143
- *
144
- * ASN1_SEQUENCE(itname) = {
145
- * ... SEQUENCE components ...
146
- * } ASN1_SEQUENCE_END_name(stname, itname)
147
- *
148
- * This will create an item called itname_it using
149
- * a structure called stname.
150
- */
151
-
152
- #define ASN1_SEQUENCE(tname) \
153
- static const ASN1_TEMPLATE tname##_seq_tt[]
154
-
155
- #define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname)
156
-
157
- #define ASN1_SEQUENCE_END_name(stname, tname) \
158
- ;\
159
- ASN1_ITEM_start(tname) \
160
- ASN1_ITYPE_SEQUENCE,\
161
- V_ASN1_SEQUENCE,\
162
- tname##_seq_tt,\
163
- sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
164
- NULL,\
165
- sizeof(stname),\
166
- #stname \
167
- ASN1_ITEM_end(tname)
168
-
169
- #define ASN1_NDEF_SEQUENCE(tname) \
170
- ASN1_SEQUENCE(tname)
171
-
172
- #define ASN1_NDEF_SEQUENCE_cb(tname, cb) \
173
- ASN1_SEQUENCE_cb(tname, cb)
174
-
175
- #define ASN1_SEQUENCE_cb(tname, cb) \
176
- static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \
177
- ASN1_SEQUENCE(tname)
178
-
179
- #define ASN1_BROKEN_SEQUENCE(tname) \
180
- static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \
181
- ASN1_SEQUENCE(tname)
182
-
183
- #define ASN1_SEQUENCE_ref(tname, cb, lck) \
184
- static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \
185
- ASN1_SEQUENCE(tname)
186
-
187
- #define ASN1_SEQUENCE_enc(tname, enc, cb) \
188
- static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \
189
- ASN1_SEQUENCE(tname)
190
-
191
- #define ASN1_NDEF_SEQUENCE_END(tname) \
192
- ;\
193
- ASN1_ITEM_start(tname) \
194
- ASN1_ITYPE_NDEF_SEQUENCE,\
195
- V_ASN1_SEQUENCE,\
196
- tname##_seq_tt,\
197
- sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
198
- NULL,\
199
- sizeof(tname),\
200
- #tname \
201
- ASN1_ITEM_end(tname)
202
-
203
- #define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname)
204
-
205
- #define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
206
-
207
- #define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
208
-
209
- #define ASN1_SEQUENCE_END_ref(stname, tname) \
210
- ;\
211
- ASN1_ITEM_start(tname) \
212
- ASN1_ITYPE_SEQUENCE,\
213
- V_ASN1_SEQUENCE,\
214
- tname##_seq_tt,\
215
- sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
216
- &tname##_aux,\
217
- sizeof(stname),\
218
- #stname \
219
- ASN1_ITEM_end(tname)
220
-
221
- #define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \
222
- ;\
223
- ASN1_ITEM_start(tname) \
224
- ASN1_ITYPE_NDEF_SEQUENCE,\
225
- V_ASN1_SEQUENCE,\
226
- tname##_seq_tt,\
227
- sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
228
- &tname##_aux,\
229
- sizeof(stname),\
230
- #stname \
231
- ASN1_ITEM_end(tname)
232
-
233
-
234
- /* This pair helps declare a CHOICE type. We can do:
235
- *
236
- * ASN1_CHOICE(chname) = {
237
- * ... CHOICE options ...
238
- * ASN1_CHOICE_END(chname)
239
- *
240
- * This will produce an ASN1_ITEM called chname_it
241
- * for a structure called chname. The structure
242
- * definition must look like this:
243
- * typedef struct {
244
- * int type;
245
- * union {
246
- * ASN1_SOMETHING *opt1;
247
- * ASN1_SOMEOTHER *opt2;
248
- * } value;
249
- * } chname;
250
- *
251
- * the name of the selector must be 'type'.
252
- * to use an alternative selector name use the
253
- * ASN1_CHOICE_END_selector() version.
254
- */
255
-
256
- #define ASN1_CHOICE(tname) \
257
- static const ASN1_TEMPLATE tname##_ch_tt[]
258
-
259
- #define ASN1_CHOICE_cb(tname, cb) \
260
- static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \
261
- ASN1_CHOICE(tname)
262
-
263
- #define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname)
264
-
265
- #define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type)
266
-
267
- #define ASN1_CHOICE_END_selector(stname, tname, selname) \
268
- ;\
269
- ASN1_ITEM_start(tname) \
270
- ASN1_ITYPE_CHOICE,\
271
- offsetof(stname,selname) ,\
272
- tname##_ch_tt,\
273
- sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\
274
- NULL,\
275
- sizeof(stname),\
276
- #stname \
277
- ASN1_ITEM_end(tname)
278
-
279
- #define ASN1_CHOICE_END_cb(stname, tname, selname) \
280
- ;\
281
- ASN1_ITEM_start(tname) \
282
- ASN1_ITYPE_CHOICE,\
283
- offsetof(stname,selname) ,\
284
- tname##_ch_tt,\
285
- sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\
286
- &tname##_aux,\
287
- sizeof(stname),\
288
- #stname \
289
- ASN1_ITEM_end(tname)
290
-
291
- /* This helps with the template wrapper form of ASN1_ITEM */
292
-
293
- #define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \
294
- (flags), (tag), 0,\
295
- #name, ASN1_ITEM_ref(type) }
296
-
297
- /* These help with SEQUENCE or CHOICE components */
298
-
299
- /* used to declare other types */
300
-
301
- #define ASN1_EX_TYPE(flags, tag, stname, field, type) { \
302
- (flags), (tag), offsetof(stname, field),\
303
- #field, ASN1_ITEM_ref(type) }
304
-
305
- /* used when the structure is combined with the parent */
306
-
307
- #define ASN1_EX_COMBINE(flags, tag, type) { \
308
- (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) }
309
-
310
- /* implicit and explicit helper macros */
311
-
312
- #define ASN1_IMP_EX(stname, field, type, tag, ex) \
313
- ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type)
314
-
315
- #define ASN1_EXP_EX(stname, field, type, tag, ex) \
316
- ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type)
317
-
318
- /* Any defined by macros: the field used is in the table itself */
319
-
320
- #ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION
321
- #define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) }
322
- #define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) }
323
- #else
324
- #define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb }
325
- #define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb }
326
- #endif
327
- /* Plain simple type */
328
- #define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type)
329
-
330
- /* OPTIONAL simple type */
331
- #define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type)
332
-
333
- /* IMPLICIT tagged simple type */
334
- #define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0)
335
-
336
- /* IMPLICIT tagged OPTIONAL simple type */
337
- #define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)
338
-
339
- /* Same as above but EXPLICIT */
340
-
341
- #define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0)
342
- #define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)
343
-
344
- /* SEQUENCE OF type */
345
- #define ASN1_SEQUENCE_OF(stname, field, type) \
346
- ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type)
347
-
348
- /* OPTIONAL SEQUENCE OF */
349
- #define ASN1_SEQUENCE_OF_OPT(stname, field, type) \
350
- ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type)
351
-
352
- /* Same as above but for SET OF */
353
-
354
- #define ASN1_SET_OF(stname, field, type) \
355
- ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type)
356
-
357
- #define ASN1_SET_OF_OPT(stname, field, type) \
358
- ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type)
359
-
360
- /* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */
361
-
362
- #define ASN1_IMP_SET_OF(stname, field, type, tag) \
363
- ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)
364
-
365
- #define ASN1_EXP_SET_OF(stname, field, type, tag) \
366
- ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)
367
-
368
- #define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \
369
- ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL)
370
-
371
- #define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \
372
- ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL)
373
-
374
- #define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \
375
- ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)
376
-
377
- #define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \
378
- ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL)
379
-
380
- #define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \
381
- ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)
382
-
383
- #define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \
384
- ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL)
385
-
386
- /* EXPLICIT using indefinite length constructed form */
387
- #define ASN1_NDEF_EXP(stname, field, type, tag) \
388
- ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF)
389
-
390
- /* EXPLICIT OPTIONAL using indefinite length constructed form */
391
- #define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \
392
- ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF)
393
-
394
- /* Macros for the ASN1_ADB structure */
395
-
396
- #define ASN1_ADB(name) \
397
- static const ASN1_ADB_TABLE name##_adbtbl[]
398
-
399
- #ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION
400
-
401
- #define ASN1_ADB_END(name, flags, field, app_table, def, none) \
402
- ;\
403
- static const ASN1_ADB name##_adb = {\
404
- flags,\
405
- offsetof(name, field),\
406
- app_table,\
407
- name##_adbtbl,\
408
- sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\
409
- def,\
410
- none\
411
- }
412
-
413
- #else
414
-
415
- #define ASN1_ADB_END(name, flags, field, app_table, def, none) \
416
- ;\
417
- static const ASN1_ITEM *name##_adb(void) \
418
- { \
419
- static const ASN1_ADB internal_adb = \
420
- {\
421
- flags,\
422
- offsetof(name, field),\
423
- app_table,\
424
- name##_adbtbl,\
425
- sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\
426
- def,\
427
- none\
428
- }; \
429
- return (const ASN1_ITEM *) &internal_adb; \
430
- } \
431
- void dummy_function(void)
432
-
433
- #endif
434
-
435
- #define ADB_ENTRY(val, template) {val, template}
436
-
437
- #define ASN1_ADB_TEMPLATE(name) \
438
- static const ASN1_TEMPLATE name##_tt
439
-
440
- /* This is the ASN1 template structure that defines
441
- * a wrapper round the actual type. It determines the
442
- * actual position of the field in the value structure,
443
- * various flags such as OPTIONAL and the field name.
444
- */
445
-
446
- struct ASN1_TEMPLATE_st {
447
- unsigned long flags; /* Various flags */
448
- long tag; /* tag, not used if no tagging */
449
- unsigned long offset; /* Offset of this field in structure */
450
- #ifndef NO_ASN1_FIELD_NAMES
451
- const char *field_name; /* Field name */
452
- #endif
453
- ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */
454
- };
455
-
456
- /* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */
457
-
458
- #define ASN1_TEMPLATE_item(t) (t->item_ptr)
459
- #define ASN1_TEMPLATE_adb(t) (t->item_ptr)
460
-
461
- typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE;
462
- typedef struct ASN1_ADB_st ASN1_ADB;
463
-
464
- struct ASN1_ADB_st {
465
- unsigned long flags; /* Various flags */
466
- unsigned long offset; /* Offset of selector field */
467
- STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */
468
- const ASN1_ADB_TABLE *tbl; /* Table of possible types */
469
- long tblcount; /* Number of entries in tbl */
470
- const ASN1_TEMPLATE *default_tt; /* Type to use if no match */
471
- const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */
472
- };
473
-
474
- struct ASN1_ADB_TABLE_st {
475
- long value; /* NID for an object or value for an int */
476
- const ASN1_TEMPLATE tt; /* item for this value */
477
- };
478
-
479
- /* template flags */
480
-
481
- /* Field is optional */
482
- #define ASN1_TFLG_OPTIONAL (0x1)
483
-
484
- /* Field is a SET OF */
485
- #define ASN1_TFLG_SET_OF (0x1 << 1)
486
-
487
- /* Field is a SEQUENCE OF */
488
- #define ASN1_TFLG_SEQUENCE_OF (0x2 << 1)
489
-
490
- /* Special case: this refers to a SET OF that
491
- * will be sorted into DER order when encoded *and*
492
- * the corresponding STACK will be modified to match
493
- * the new order.
494
- */
495
- #define ASN1_TFLG_SET_ORDER (0x3 << 1)
496
-
497
- /* Mask for SET OF or SEQUENCE OF */
498
- #define ASN1_TFLG_SK_MASK (0x3 << 1)
499
-
500
- /* These flags mean the tag should be taken from the
501
- * tag field. If EXPLICIT then the underlying type
502
- * is used for the inner tag.
503
- */
504
-
505
- /* IMPLICIT tagging */
506
- #define ASN1_TFLG_IMPTAG (0x1 << 3)
507
-
508
-
509
- /* EXPLICIT tagging, inner tag from underlying type */
510
- #define ASN1_TFLG_EXPTAG (0x2 << 3)
511
-
512
- #define ASN1_TFLG_TAG_MASK (0x3 << 3)
513
-
514
- /* context specific IMPLICIT */
515
- #define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT
516
-
517
- /* context specific EXPLICIT */
518
- #define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT
519
-
520
- /* If tagging is in force these determine the
521
- * type of tag to use. Otherwise the tag is
522
- * determined by the underlying type. These
523
- * values reflect the actual octet format.
524
- */
525
-
526
- /* Universal tag */
527
- #define ASN1_TFLG_UNIVERSAL (0x0<<6)
528
- /* Application tag */
529
- #define ASN1_TFLG_APPLICATION (0x1<<6)
530
- /* Context specific tag */
531
- #define ASN1_TFLG_CONTEXT (0x2<<6)
532
- /* Private tag */
533
- #define ASN1_TFLG_PRIVATE (0x3<<6)
534
-
535
- #define ASN1_TFLG_TAG_CLASS (0x3<<6)
536
-
537
- /* These are for ANY DEFINED BY type. In this case
538
- * the 'item' field points to an ASN1_ADB structure
539
- * which contains a table of values to decode the
540
- * relevant type
541
- */
542
-
543
- #define ASN1_TFLG_ADB_MASK (0x3<<8)
544
-
545
- #define ASN1_TFLG_ADB_OID (0x1<<8)
546
-
547
- #define ASN1_TFLG_ADB_INT (0x1<<9)
548
-
549
- /* This flag means a parent structure is passed
550
- * instead of the field: this is useful is a
551
- * SEQUENCE is being combined with a CHOICE for
552
- * example. Since this means the structure and
553
- * item name will differ we need to use the
554
- * ASN1_CHOICE_END_name() macro for example.
555
- */
556
-
557
- #define ASN1_TFLG_COMBINE (0x1<<10)
558
-
559
- /* This flag when present in a SEQUENCE OF, SET OF
560
- * or EXPLICIT causes indefinite length constructed
561
- * encoding to be used if required.
562
- */
563
-
564
- #define ASN1_TFLG_NDEF (0x1<<11)
565
-
566
- /* This is the actual ASN1 item itself */
567
-
568
- struct ASN1_ITEM_st {
569
- char itype; /* The item type, primitive, SEQUENCE, CHOICE or extern */
570
- long utype; /* underlying type */
571
- const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains the contents */
572
- long tcount; /* Number of templates if SEQUENCE or CHOICE */
573
- const void *funcs; /* functions that handle this type */
574
- long size; /* Structure size (usually)*/
575
- #ifndef NO_ASN1_FIELD_NAMES
576
- const char *sname; /* Structure name */
577
- #endif
578
- };
579
-
580
- /* These are values for the itype field and
581
- * determine how the type is interpreted.
582
- *
583
- * For PRIMITIVE types the underlying type
584
- * determines the behaviour if items is NULL.
585
- *
586
- * Otherwise templates must contain a single
587
- * template and the type is treated in the
588
- * same way as the type specified in the template.
589
- *
590
- * For SEQUENCE types the templates field points
591
- * to the members, the size field is the
592
- * structure size.
593
- *
594
- * For CHOICE types the templates field points
595
- * to each possible member (typically a union)
596
- * and the 'size' field is the offset of the
597
- * selector.
598
- *
599
- * The 'funcs' field is used for application
600
- * specific functions.
601
- *
602
- * For COMPAT types the funcs field gives a
603
- * set of functions that handle this type, this
604
- * supports the old d2i, i2d convention.
605
- *
606
- * The EXTERN type uses a new style d2i/i2d.
607
- * The new style should be used where possible
608
- * because it avoids things like the d2i IMPLICIT
609
- * hack.
610
- *
611
- * MSTRING is a multiple string type, it is used
612
- * for a CHOICE of character strings where the
613
- * actual strings all occupy an ASN1_STRING
614
- * structure. In this case the 'utype' field
615
- * has a special meaning, it is used as a mask
616
- * of acceptable types using the B_ASN1 constants.
617
- *
618
- * NDEF_SEQUENCE is the same as SEQUENCE except
619
- * that it will use indefinite length constructed
620
- * encoding if requested.
621
- *
622
- */
623
-
624
- #define ASN1_ITYPE_PRIMITIVE 0x0
625
-
626
- #define ASN1_ITYPE_SEQUENCE 0x1
627
-
628
- #define ASN1_ITYPE_CHOICE 0x2
629
-
630
- #define ASN1_ITYPE_COMPAT 0x3
631
-
632
- #define ASN1_ITYPE_EXTERN 0x4
633
-
634
- #define ASN1_ITYPE_MSTRING 0x5
635
-
636
- #define ASN1_ITYPE_NDEF_SEQUENCE 0x6
637
-
638
- /* Cache for ASN1 tag and length, so we
639
- * don't keep re-reading it for things
640
- * like CHOICE
641
- */
642
-
643
- struct ASN1_TLC_st{
644
- char valid; /* Values below are valid */
645
- int ret; /* return value */
646
- long plen; /* length */
647
- int ptag; /* class value */
648
- int pclass; /* class value */
649
- int hdrlen; /* header length */
650
- };
651
-
652
- /* Typedefs for ASN1 function pointers */
653
-
654
- typedef ASN1_VALUE * ASN1_new_func(void);
655
- typedef void ASN1_free_func(ASN1_VALUE *a);
656
- typedef ASN1_VALUE * ASN1_d2i_func(ASN1_VALUE **a, const unsigned char ** in, long length);
657
- typedef int ASN1_i2d_func(ASN1_VALUE * a, unsigned char **in);
658
-
659
- typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it,
660
- int tag, int aclass, char opt, ASN1_TLC *ctx);
661
-
662
- typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass);
663
- typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
664
- typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
665
-
666
- typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval,
667
- int indent, const char *fname,
668
- const ASN1_PCTX *pctx);
669
-
670
- typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
671
- typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
672
- typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx);
673
-
674
- typedef struct ASN1_COMPAT_FUNCS_st {
675
- ASN1_new_func *asn1_new;
676
- ASN1_free_func *asn1_free;
677
- ASN1_d2i_func *asn1_d2i;
678
- ASN1_i2d_func *asn1_i2d;
679
- } ASN1_COMPAT_FUNCS;
680
-
681
- typedef struct ASN1_EXTERN_FUNCS_st {
682
- void *app_data;
683
- ASN1_ex_new_func *asn1_ex_new;
684
- ASN1_ex_free_func *asn1_ex_free;
685
- ASN1_ex_free_func *asn1_ex_clear;
686
- ASN1_ex_d2i *asn1_ex_d2i;
687
- ASN1_ex_i2d *asn1_ex_i2d;
688
- ASN1_ex_print_func *asn1_ex_print;
689
- } ASN1_EXTERN_FUNCS;
690
-
691
- typedef struct ASN1_PRIMITIVE_FUNCS_st {
692
- void *app_data;
693
- unsigned long flags;
694
- ASN1_ex_new_func *prim_new;
695
- ASN1_ex_free_func *prim_free;
696
- ASN1_ex_free_func *prim_clear;
697
- ASN1_primitive_c2i *prim_c2i;
698
- ASN1_primitive_i2c *prim_i2c;
699
- ASN1_primitive_print *prim_print;
700
- } ASN1_PRIMITIVE_FUNCS;
701
-
702
- /* This is the ASN1_AUX structure: it handles various
703
- * miscellaneous requirements. For example the use of
704
- * reference counts and an informational callback.
705
- *
706
- * The "informational callback" is called at various
707
- * points during the ASN1 encoding and decoding. It can
708
- * be used to provide minor customisation of the structures
709
- * used. This is most useful where the supplied routines
710
- * *almost* do the right thing but need some extra help
711
- * at a few points. If the callback returns zero then
712
- * it is assumed a fatal error has occurred and the
713
- * main operation should be abandoned.
714
- *
715
- * If major changes in the default behaviour are required
716
- * then an external type is more appropriate.
717
- */
718
-
719
- typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it,
720
- void *exarg);
721
-
722
- typedef struct ASN1_AUX_st {
723
- void *app_data;
724
- int flags;
725
- int ref_offset; /* Offset of reference value */
726
- int ref_lock; /* Lock type to use */
727
- ASN1_aux_cb *asn1_cb;
728
- int enc_offset; /* Offset of ASN1_ENCODING structure */
729
- } ASN1_AUX;
730
-
731
- /* For print related callbacks exarg points to this structure */
732
- typedef struct ASN1_PRINT_ARG_st {
733
- BIO *out;
734
- int indent;
735
- const ASN1_PCTX *pctx;
736
- } ASN1_PRINT_ARG;
737
-
738
- /* For streaming related callbacks exarg points to this structure */
739
- typedef struct ASN1_STREAM_ARG_st {
740
- /* BIO to stream through */
741
- BIO *out;
742
- /* BIO with filters appended */
743
- BIO *ndef_bio;
744
- /* Streaming I/O boundary */
745
- unsigned char **boundary;
746
- } ASN1_STREAM_ARG;
747
-
748
- /* Flags in ASN1_AUX */
749
-
750
- /* Use a reference count */
751
- #define ASN1_AFLG_REFCOUNT 1
752
- /* Save the encoding of structure (useful for signatures) */
753
- #define ASN1_AFLG_ENCODING 2
754
- /* The Sequence length is invalid */
755
- #define ASN1_AFLG_BROKEN 4
756
-
757
- /* operation values for asn1_cb */
758
-
759
- #define ASN1_OP_NEW_PRE 0
760
- #define ASN1_OP_NEW_POST 1
761
- #define ASN1_OP_FREE_PRE 2
762
- #define ASN1_OP_FREE_POST 3
763
- #define ASN1_OP_D2I_PRE 4
764
- #define ASN1_OP_D2I_POST 5
765
- #define ASN1_OP_I2D_PRE 6
766
- #define ASN1_OP_I2D_POST 7
767
- #define ASN1_OP_PRINT_PRE 8
768
- #define ASN1_OP_PRINT_POST 9
769
- #define ASN1_OP_STREAM_PRE 10
770
- #define ASN1_OP_STREAM_POST 11
771
- #define ASN1_OP_DETACHED_PRE 12
772
- #define ASN1_OP_DETACHED_POST 13
773
-
774
- /* Macro to implement a primitive type */
775
- #define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0)
776
- #define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \
777
- ASN1_ITEM_start(itname) \
778
- ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \
779
- ASN1_ITEM_end(itname)
780
-
781
- /* Macro to implement a multi string type */
782
- #define IMPLEMENT_ASN1_MSTRING(itname, mask) \
783
- ASN1_ITEM_start(itname) \
784
- ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \
785
- ASN1_ITEM_end(itname)
786
-
787
- /* Macro to implement an ASN1_ITEM in terms of old style funcs */
788
-
789
- #define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE)
790
-
791
- #define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \
792
- static const ASN1_COMPAT_FUNCS sname##_ff = { \
793
- (ASN1_new_func *)sname##_new, \
794
- (ASN1_free_func *)sname##_free, \
795
- (ASN1_d2i_func *)d2i_##sname, \
796
- (ASN1_i2d_func *)i2d_##sname, \
797
- }; \
798
- ASN1_ITEM_start(sname) \
799
- ASN1_ITYPE_COMPAT, \
800
- tag, \
801
- NULL, \
802
- 0, \
803
- &sname##_ff, \
804
- 0, \
805
- #sname \
806
- ASN1_ITEM_end(sname)
807
-
808
- #define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \
809
- ASN1_ITEM_start(sname) \
810
- ASN1_ITYPE_EXTERN, \
811
- tag, \
812
- NULL, \
813
- 0, \
814
- &fptrs, \
815
- 0, \
816
- #sname \
817
- ASN1_ITEM_end(sname)
818
-
819
- /* Macro to implement standard functions in terms of ASN1_ITEM structures */
820
-
821
- #define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname)
822
-
823
- #define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname)
824
-
825
- #define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \
826
- IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname)
827
-
828
- #define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \
829
- IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname)
830
-
831
- #define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \
832
- IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname)
833
-
834
- #define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \
835
- pre stname *fname##_new(void) \
836
- { \
837
- return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \
838
- } \
839
- pre void fname##_free(stname *a) \
840
- { \
841
- ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
842
- }
843
-
844
- #define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \
845
- stname *fname##_new(void) \
846
- { \
847
- return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \
848
- } \
849
- void fname##_free(stname *a) \
850
- { \
851
- ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
852
- }
853
-
854
- #define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \
855
- IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
856
- IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)
857
-
858
- #define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
859
- stname *d2i_##fname(stname **a, const unsigned char **in, long len) \
860
- { \
861
- return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\
862
- } \
863
- int i2d_##fname(stname *a, unsigned char **out) \
864
- { \
865
- return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\
866
- }
867
-
868
- #define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \
869
- int i2d_##stname##_NDEF(stname *a, unsigned char **out) \
870
- { \
871
- return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\
872
- }
873
-
874
- /* This includes evil casts to remove const: they will go away when full
875
- * ASN1 constification is done.
876
- */
877
- #define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \
878
- stname *d2i_##fname(stname **a, const unsigned char **in, long len) \
879
- { \
880
- return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\
881
- } \
882
- int i2d_##fname(const stname *a, unsigned char **out) \
883
- { \
884
- return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\
885
- }
886
-
887
- #define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \
888
- stname * stname##_dup(stname *x) \
889
- { \
890
- return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \
891
- }
892
-
893
- #define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \
894
- IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname)
895
-
896
- #define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \
897
- int fname##_print_ctx(BIO *out, stname *x, int indent, \
898
- const ASN1_PCTX *pctx) \
899
- { \
900
- return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \
901
- ASN1_ITEM_rptr(itname), pctx); \
902
- }
903
-
904
- #define IMPLEMENT_ASN1_FUNCTIONS_const(name) \
905
- IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name)
906
-
907
- #define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \
908
- IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \
909
- IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)
910
-
911
- /* external definitions for primitive types */
912
-
913
- DECLARE_ASN1_ITEM(ASN1_BOOLEAN)
914
- DECLARE_ASN1_ITEM(ASN1_TBOOLEAN)
915
- DECLARE_ASN1_ITEM(ASN1_FBOOLEAN)
916
- DECLARE_ASN1_ITEM(ASN1_SEQUENCE)
917
- DECLARE_ASN1_ITEM(CBIGNUM)
918
- DECLARE_ASN1_ITEM(BIGNUM)
919
- DECLARE_ASN1_ITEM(LONG)
920
- DECLARE_ASN1_ITEM(ZLONG)
921
-
922
- DECLARE_STACK_OF(ASN1_VALUE)
923
-
924
- /* Functions used internally by the ASN1 code */
925
-
926
- int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
927
- void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
928
- int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
929
- int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
930
-
931
- void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
932
- int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt);
933
- int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it,
934
- int tag, int aclass, char opt, ASN1_TLC *ctx);
935
-
936
- int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass);
937
- int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_TEMPLATE *tt);
938
- void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
939
-
940
- int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
941
- int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
942
-
943
- int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);
944
- int asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it);
945
-
946
- ASN1_VALUE ** asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
947
-
948
- const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, int nullerr);
949
-
950
- int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it);
951
-
952
- void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);
953
- void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
954
- int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, const ASN1_ITEM *it);
955
- int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, const ASN1_ITEM *it);
956
-
957
- #ifdef __cplusplus
958
- }
959
- #endif
960
- #endif