diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/x_crl.c')
-rw-r--r-- | src/lib/libcrypto/asn1/x_crl.c | 175 |
1 files changed, 86 insertions, 89 deletions
diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c index 13acdab427..cd46bbebc2 100644 --- a/src/lib/libcrypto/asn1/x_crl.c +++ b/src/lib/libcrypto/asn1/x_crl.c | |||
@@ -58,83 +58,69 @@ | |||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include "asn1_mac.h" | 61 | #include <openssl/asn1_mac.h> |
62 | #include "x509.h" | 62 | #include <openssl/x509.h> |
63 | |||
64 | /* | ||
65 | * ASN1err(ASN1_F_D2I_X509_CRL,ASN1_R_LENGTH_MISMATCH); | ||
66 | * ASN1err(ASN1_F_D2I_X509_CRL_INFO,ASN1_R_EXPECTING_A_SEQUENCE); | ||
67 | * ASN1err(ASN1_F_D2I_X509_REVOKED,ASN1_R_LENGTH_MISMATCH); | ||
68 | * ASN1err(ASN1_F_X509_CRL_NEW,ASN1_R_LENGTH_MISMATCH); | ||
69 | * ASN1err(ASN1_F_X509_CRL_INFO_NEW,ASN1_R_EXPECTING_A_SEQUENCE); | ||
70 | * ASN1err(ASN1_F_X509_REVOKED_NEW,ASN1_R_LENGTH_MISMATCH); | ||
71 | */ | ||
72 | 63 | ||
73 | #ifndef NOPROTO | ||
74 | static int X509_REVOKED_cmp(X509_REVOKED **a,X509_REVOKED **b); | 64 | static int X509_REVOKED_cmp(X509_REVOKED **a,X509_REVOKED **b); |
75 | static int X509_REVOKED_seq_cmp(X509_REVOKED **a,X509_REVOKED **b); | 65 | static int X509_REVOKED_seq_cmp(X509_REVOKED **a,X509_REVOKED **b); |
76 | #else | 66 | int i2d_X509_REVOKED(X509_REVOKED *a, unsigned char **pp) |
77 | static int X509_REVOKED_cmp(); | ||
78 | static int X509_REVOKED_seq_cmp(); | ||
79 | #endif | ||
80 | |||
81 | int i2d_X509_REVOKED(a,pp) | ||
82 | X509_REVOKED *a; | ||
83 | unsigned char **pp; | ||
84 | { | 67 | { |
85 | M_ASN1_I2D_vars(a); | 68 | M_ASN1_I2D_vars(a); |
86 | 69 | ||
87 | M_ASN1_I2D_len(a->serialNumber,i2d_ASN1_INTEGER); | 70 | M_ASN1_I2D_len(a->serialNumber,i2d_ASN1_INTEGER); |
88 | M_ASN1_I2D_len(a->revocationDate,i2d_ASN1_UTCTIME); | 71 | M_ASN1_I2D_len(a->revocationDate,i2d_ASN1_TIME); |
89 | M_ASN1_I2D_len_SEQ_opt(a->extensions,i2d_X509_EXTENSION); | 72 | M_ASN1_I2D_len_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, |
73 | i2d_X509_EXTENSION); | ||
90 | 74 | ||
91 | M_ASN1_I2D_seq_total(); | 75 | M_ASN1_I2D_seq_total(); |
92 | 76 | ||
93 | M_ASN1_I2D_put(a->serialNumber,i2d_ASN1_INTEGER); | 77 | M_ASN1_I2D_put(a->serialNumber,i2d_ASN1_INTEGER); |
94 | M_ASN1_I2D_put(a->revocationDate,i2d_ASN1_UTCTIME); | 78 | M_ASN1_I2D_put(a->revocationDate,i2d_ASN1_TIME); |
95 | M_ASN1_I2D_put_SEQ_opt(a->extensions,i2d_X509_EXTENSION); | 79 | M_ASN1_I2D_put_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, |
80 | i2d_X509_EXTENSION); | ||
96 | 81 | ||
97 | M_ASN1_I2D_finish(); | 82 | M_ASN1_I2D_finish(); |
98 | } | 83 | } |
99 | 84 | ||
100 | X509_REVOKED *d2i_X509_REVOKED(a,pp,length) | 85 | X509_REVOKED *d2i_X509_REVOKED(X509_REVOKED **a, unsigned char **pp, |
101 | X509_REVOKED **a; | 86 | long length) |
102 | unsigned char **pp; | ||
103 | long length; | ||
104 | { | 87 | { |
105 | M_ASN1_D2I_vars(a,X509_REVOKED *,X509_REVOKED_new); | 88 | M_ASN1_D2I_vars(a,X509_REVOKED *,X509_REVOKED_new); |
106 | 89 | ||
107 | M_ASN1_D2I_Init(); | 90 | M_ASN1_D2I_Init(); |
108 | M_ASN1_D2I_start_sequence(); | 91 | M_ASN1_D2I_start_sequence(); |
109 | M_ASN1_D2I_get(ret->serialNumber,d2i_ASN1_INTEGER); | 92 | M_ASN1_D2I_get(ret->serialNumber,d2i_ASN1_INTEGER); |
110 | M_ASN1_D2I_get(ret->revocationDate,d2i_ASN1_UTCTIME); | 93 | M_ASN1_D2I_get(ret->revocationDate,d2i_ASN1_TIME); |
111 | M_ASN1_D2I_get_seq_opt(ret->extensions,d2i_X509_EXTENSION); | 94 | M_ASN1_D2I_get_seq_opt_type(X509_EXTENSION,ret->extensions, |
95 | d2i_X509_EXTENSION,X509_EXTENSION_free); | ||
112 | M_ASN1_D2I_Finish(a,X509_REVOKED_free,ASN1_F_D2I_X509_REVOKED); | 96 | M_ASN1_D2I_Finish(a,X509_REVOKED_free,ASN1_F_D2I_X509_REVOKED); |
113 | } | 97 | } |
114 | 98 | ||
115 | int i2d_X509_CRL_INFO(a,pp) | 99 | int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **pp) |
116 | X509_CRL_INFO *a; | ||
117 | unsigned char **pp; | ||
118 | { | 100 | { |
119 | int v1=0; | 101 | int v1=0; |
120 | long l=0; | 102 | long l=0; |
103 | int (*old_cmp)(X509_REVOKED **,X509_REVOKED **); | ||
121 | M_ASN1_I2D_vars(a); | 104 | M_ASN1_I2D_vars(a); |
105 | |||
106 | old_cmp=sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_seq_cmp); | ||
107 | sk_X509_REVOKED_sort(a->revoked); | ||
108 | sk_X509_REVOKED_set_cmp_func(a->revoked,old_cmp); | ||
122 | 109 | ||
123 | if (sk_num(a->revoked) != 0) | ||
124 | qsort((char *)a->revoked->data,sk_num(a->revoked), | ||
125 | sizeof(X509_REVOKED *),(int (*)(P_CC_CC))X509_REVOKED_seq_cmp); | ||
126 | if ((a->version != NULL) && ((l=ASN1_INTEGER_get(a->version)) != 0)) | 110 | if ((a->version != NULL) && ((l=ASN1_INTEGER_get(a->version)) != 0)) |
127 | { | 111 | { |
128 | M_ASN1_I2D_len(a->version,i2d_ASN1_INTEGER); | 112 | M_ASN1_I2D_len(a->version,i2d_ASN1_INTEGER); |
129 | } | 113 | } |
130 | M_ASN1_I2D_len(a->sig_alg,i2d_X509_ALGOR); | 114 | M_ASN1_I2D_len(a->sig_alg,i2d_X509_ALGOR); |
131 | M_ASN1_I2D_len(a->issuer,i2d_X509_NAME); | 115 | M_ASN1_I2D_len(a->issuer,i2d_X509_NAME); |
132 | M_ASN1_I2D_len(a->lastUpdate,i2d_ASN1_UTCTIME); | 116 | M_ASN1_I2D_len(a->lastUpdate,i2d_ASN1_TIME); |
133 | if (a->nextUpdate != NULL) | 117 | if (a->nextUpdate != NULL) |
134 | { M_ASN1_I2D_len(a->nextUpdate,i2d_ASN1_UTCTIME); } | 118 | { M_ASN1_I2D_len(a->nextUpdate,i2d_ASN1_TIME); } |
135 | M_ASN1_I2D_len_SEQ_opt(a->revoked,i2d_X509_REVOKED); | 119 | M_ASN1_I2D_len_SEQUENCE_opt_type(X509_REVOKED,a->revoked, |
136 | M_ASN1_I2D_len_EXP_set_opt(a->extensions,i2d_X509_EXTENSION,0, | 120 | i2d_X509_REVOKED); |
137 | V_ASN1_SEQUENCE,v1); | 121 | M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, |
122 | i2d_X509_EXTENSION,0, | ||
123 | V_ASN1_SEQUENCE,v1); | ||
138 | 124 | ||
139 | M_ASN1_I2D_seq_total(); | 125 | M_ASN1_I2D_seq_total(); |
140 | 126 | ||
@@ -147,17 +133,17 @@ unsigned char **pp; | |||
147 | M_ASN1_I2D_put(a->lastUpdate,i2d_ASN1_UTCTIME); | 133 | M_ASN1_I2D_put(a->lastUpdate,i2d_ASN1_UTCTIME); |
148 | if (a->nextUpdate != NULL) | 134 | if (a->nextUpdate != NULL) |
149 | { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_UTCTIME); } | 135 | { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_UTCTIME); } |
150 | M_ASN1_I2D_put_SEQ_opt(a->revoked,i2d_X509_REVOKED); | 136 | M_ASN1_I2D_put_SEQUENCE_opt_type(X509_REVOKED,a->revoked, |
151 | M_ASN1_I2D_put_EXP_set_opt(a->extensions,i2d_X509_EXTENSION,0, | 137 | i2d_X509_REVOKED); |
152 | V_ASN1_SEQUENCE,v1); | 138 | M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, |
139 | i2d_X509_EXTENSION,0, | ||
140 | V_ASN1_SEQUENCE,v1); | ||
153 | 141 | ||
154 | M_ASN1_I2D_finish(); | 142 | M_ASN1_I2D_finish(); |
155 | } | 143 | } |
156 | 144 | ||
157 | X509_CRL_INFO *d2i_X509_CRL_INFO(a,pp,length) | 145 | X509_CRL_INFO *d2i_X509_CRL_INFO(X509_CRL_INFO **a, unsigned char **pp, |
158 | X509_CRL_INFO **a; | 146 | long length) |
159 | unsigned char **pp; | ||
160 | long length; | ||
161 | { | 147 | { |
162 | int i,ver=0; | 148 | int i,ver=0; |
163 | M_ASN1_D2I_vars(a,X509_CRL_INFO *,X509_CRL_INFO_new); | 149 | M_ASN1_D2I_vars(a,X509_CRL_INFO *,X509_CRL_INFO_new); |
@@ -176,20 +162,31 @@ long length; | |||
176 | } | 162 | } |
177 | M_ASN1_D2I_get(ret->sig_alg,d2i_X509_ALGOR); | 163 | M_ASN1_D2I_get(ret->sig_alg,d2i_X509_ALGOR); |
178 | M_ASN1_D2I_get(ret->issuer,d2i_X509_NAME); | 164 | M_ASN1_D2I_get(ret->issuer,d2i_X509_NAME); |
179 | M_ASN1_D2I_get(ret->lastUpdate,d2i_ASN1_UTCTIME); | 165 | M_ASN1_D2I_get(ret->lastUpdate,d2i_ASN1_TIME); |
180 | M_ASN1_D2I_get_opt(ret->nextUpdate,d2i_ASN1_UTCTIME,V_ASN1_UTCTIME); | 166 | /* Manually handle the OPTIONAL ASN1_TIME stuff */ |
167 | if(c.slen != 0 | ||
168 | && ( (M_ASN1_next & ~V_ASN1_CONSTRUCTED) == | ||
169 | (V_ASN1_UNIVERSAL|V_ASN1_UTCTIME) | ||
170 | || (M_ASN1_next & ~V_ASN1_CONSTRUCTED) == | ||
171 | (V_ASN1_UNIVERSAL|V_ASN1_GENERALIZEDTIME) ) ) { | ||
172 | M_ASN1_D2I_get(ret->nextUpdate,d2i_ASN1_TIME); | ||
173 | } | ||
174 | if(!ret->nextUpdate) | ||
175 | M_ASN1_D2I_get_opt(ret->nextUpdate,d2i_ASN1_GENERALIZEDTIME, | ||
176 | V_ASN1_GENERALIZEDTIME); | ||
181 | if (ret->revoked != NULL) | 177 | if (ret->revoked != NULL) |
182 | { | 178 | { |
183 | while (sk_num(ret->revoked)) | 179 | while (sk_X509_REVOKED_num(ret->revoked)) |
184 | X509_REVOKED_free((X509_REVOKED *)sk_pop(ret->revoked)); | 180 | X509_REVOKED_free(sk_X509_REVOKED_pop(ret->revoked)); |
185 | } | 181 | } |
186 | M_ASN1_D2I_get_seq_opt(ret->revoked,d2i_X509_REVOKED); | 182 | M_ASN1_D2I_get_seq_opt_type(X509_REVOKED,ret->revoked,d2i_X509_REVOKED, |
183 | X509_REVOKED_free); | ||
187 | 184 | ||
188 | if (ret->revoked != NULL) | 185 | if (ret->revoked != NULL) |
189 | { | 186 | { |
190 | for (i=0; i<sk_num(ret->revoked); i++) | 187 | for (i=0; i<sk_X509_REVOKED_num(ret->revoked); i++) |
191 | { | 188 | { |
192 | ((X509_REVOKED *)sk_value(ret->revoked,i))->sequence=i; | 189 | sk_X509_REVOKED_value(ret->revoked,i)->sequence=i; |
193 | } | 190 | } |
194 | } | 191 | } |
195 | 192 | ||
@@ -197,21 +194,21 @@ long length; | |||
197 | { | 194 | { |
198 | if (ret->extensions != NULL) | 195 | if (ret->extensions != NULL) |
199 | { | 196 | { |
200 | while (sk_num(ret->extensions)) | 197 | while (sk_X509_EXTENSION_num(ret->extensions)) |
201 | X509_EXTENSION_free((X509_EXTENSION *) | 198 | X509_EXTENSION_free( |
202 | sk_pop(ret->extensions)); | 199 | sk_X509_EXTENSION_pop(ret->extensions)); |
203 | } | 200 | } |
204 | 201 | ||
205 | M_ASN1_D2I_get_EXP_set_opt(ret->extensions,d2i_X509_EXTENSION, | 202 | M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions, |
206 | 0,V_ASN1_SEQUENCE); | 203 | d2i_X509_EXTENSION, |
204 | X509_EXTENSION_free,0, | ||
205 | V_ASN1_SEQUENCE); | ||
207 | } | 206 | } |
208 | 207 | ||
209 | M_ASN1_D2I_Finish(a,X509_CRL_INFO_free,ASN1_F_D2I_X509_CRL_INFO); | 208 | M_ASN1_D2I_Finish(a,X509_CRL_INFO_free,ASN1_F_D2I_X509_CRL_INFO); |
210 | } | 209 | } |
211 | 210 | ||
212 | int i2d_X509_CRL(a,pp) | 211 | int i2d_X509_CRL(X509_CRL *a, unsigned char **pp) |
213 | X509_CRL *a; | ||
214 | unsigned char **pp; | ||
215 | { | 212 | { |
216 | M_ASN1_I2D_vars(a); | 213 | M_ASN1_I2D_vars(a); |
217 | 214 | ||
@@ -228,10 +225,7 @@ unsigned char **pp; | |||
228 | M_ASN1_I2D_finish(); | 225 | M_ASN1_I2D_finish(); |
229 | } | 226 | } |
230 | 227 | ||
231 | X509_CRL *d2i_X509_CRL(a,pp,length) | 228 | X509_CRL *d2i_X509_CRL(X509_CRL **a, unsigned char **pp, long length) |
232 | X509_CRL **a; | ||
233 | unsigned char **pp; | ||
234 | long length; | ||
235 | { | 229 | { |
236 | M_ASN1_D2I_vars(a,X509_CRL *,X509_CRL_new); | 230 | M_ASN1_D2I_vars(a,X509_CRL *,X509_CRL_new); |
237 | 231 | ||
@@ -245,9 +239,10 @@ long length; | |||
245 | } | 239 | } |
246 | 240 | ||
247 | 241 | ||
248 | X509_REVOKED *X509_REVOKED_new() | 242 | X509_REVOKED *X509_REVOKED_new(void) |
249 | { | 243 | { |
250 | X509_REVOKED *ret=NULL; | 244 | X509_REVOKED *ret=NULL; |
245 | ASN1_CTX c; | ||
251 | 246 | ||
252 | M_ASN1_New_Malloc(ret,X509_REVOKED); | 247 | M_ASN1_New_Malloc(ret,X509_REVOKED); |
253 | M_ASN1_New(ret->serialNumber,ASN1_INTEGER_new); | 248 | M_ASN1_New(ret->serialNumber,ASN1_INTEGER_new); |
@@ -257,9 +252,10 @@ X509_REVOKED *X509_REVOKED_new() | |||
257 | M_ASN1_New_Error(ASN1_F_X509_REVOKED_NEW); | 252 | M_ASN1_New_Error(ASN1_F_X509_REVOKED_NEW); |
258 | } | 253 | } |
259 | 254 | ||
260 | X509_CRL_INFO *X509_CRL_INFO_new() | 255 | X509_CRL_INFO *X509_CRL_INFO_new(void) |
261 | { | 256 | { |
262 | X509_CRL_INFO *ret=NULL; | 257 | X509_CRL_INFO *ret=NULL; |
258 | ASN1_CTX c; | ||
263 | 259 | ||
264 | M_ASN1_New_Malloc(ret,X509_CRL_INFO); | 260 | M_ASN1_New_Malloc(ret,X509_CRL_INFO); |
265 | ret->version=NULL; | 261 | ret->version=NULL; |
@@ -267,16 +263,17 @@ X509_CRL_INFO *X509_CRL_INFO_new() | |||
267 | M_ASN1_New(ret->issuer,X509_NAME_new); | 263 | M_ASN1_New(ret->issuer,X509_NAME_new); |
268 | M_ASN1_New(ret->lastUpdate,ASN1_UTCTIME_new); | 264 | M_ASN1_New(ret->lastUpdate,ASN1_UTCTIME_new); |
269 | ret->nextUpdate=NULL; | 265 | ret->nextUpdate=NULL; |
270 | M_ASN1_New(ret->revoked,sk_new_null); | 266 | M_ASN1_New(ret->revoked,sk_X509_REVOKED_new_null); |
271 | M_ASN1_New(ret->extensions,sk_new_null); | 267 | M_ASN1_New(ret->extensions,sk_X509_EXTENSION_new_null); |
272 | ret->revoked->comp=(int (*)())X509_REVOKED_cmp; | 268 | sk_X509_REVOKED_set_cmp_func(ret->revoked,X509_REVOKED_cmp); |
273 | return(ret); | 269 | return(ret); |
274 | M_ASN1_New_Error(ASN1_F_X509_CRL_INFO_NEW); | 270 | M_ASN1_New_Error(ASN1_F_X509_CRL_INFO_NEW); |
275 | } | 271 | } |
276 | 272 | ||
277 | X509_CRL *X509_CRL_new() | 273 | X509_CRL *X509_CRL_new(void) |
278 | { | 274 | { |
279 | X509_CRL *ret=NULL; | 275 | X509_CRL *ret=NULL; |
276 | ASN1_CTX c; | ||
280 | 277 | ||
281 | M_ASN1_New_Malloc(ret,X509_CRL); | 278 | M_ASN1_New_Malloc(ret,X509_CRL); |
282 | ret->references=1; | 279 | ret->references=1; |
@@ -287,18 +284,16 @@ X509_CRL *X509_CRL_new() | |||
287 | M_ASN1_New_Error(ASN1_F_X509_CRL_NEW); | 284 | M_ASN1_New_Error(ASN1_F_X509_CRL_NEW); |
288 | } | 285 | } |
289 | 286 | ||
290 | void X509_REVOKED_free(a) | 287 | void X509_REVOKED_free(X509_REVOKED *a) |
291 | X509_REVOKED *a; | ||
292 | { | 288 | { |
293 | if (a == NULL) return; | 289 | if (a == NULL) return; |
294 | ASN1_INTEGER_free(a->serialNumber); | 290 | ASN1_INTEGER_free(a->serialNumber); |
295 | ASN1_UTCTIME_free(a->revocationDate); | 291 | ASN1_UTCTIME_free(a->revocationDate); |
296 | sk_pop_free(a->extensions,X509_EXTENSION_free); | 292 | sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free); |
297 | Free((char *)a); | 293 | Free(a); |
298 | } | 294 | } |
299 | 295 | ||
300 | void X509_CRL_INFO_free(a) | 296 | void X509_CRL_INFO_free(X509_CRL_INFO *a) |
301 | X509_CRL_INFO *a; | ||
302 | { | 297 | { |
303 | if (a == NULL) return; | 298 | if (a == NULL) return; |
304 | ASN1_INTEGER_free(a->version); | 299 | ASN1_INTEGER_free(a->version); |
@@ -307,13 +302,12 @@ X509_CRL_INFO *a; | |||
307 | ASN1_UTCTIME_free(a->lastUpdate); | 302 | ASN1_UTCTIME_free(a->lastUpdate); |
308 | if (a->nextUpdate) | 303 | if (a->nextUpdate) |
309 | ASN1_UTCTIME_free(a->nextUpdate); | 304 | ASN1_UTCTIME_free(a->nextUpdate); |
310 | sk_pop_free(a->revoked,X509_REVOKED_free); | 305 | sk_X509_REVOKED_pop_free(a->revoked,X509_REVOKED_free); |
311 | sk_pop_free(a->extensions,X509_EXTENSION_free); | 306 | sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free); |
312 | Free((char *)a); | 307 | Free(a); |
313 | } | 308 | } |
314 | 309 | ||
315 | void X509_CRL_free(a) | 310 | void X509_CRL_free(X509_CRL *a) |
316 | X509_CRL *a; | ||
317 | { | 311 | { |
318 | int i; | 312 | int i; |
319 | 313 | ||
@@ -335,19 +329,22 @@ X509_CRL *a; | |||
335 | X509_CRL_INFO_free(a->crl); | 329 | X509_CRL_INFO_free(a->crl); |
336 | X509_ALGOR_free(a->sig_alg); | 330 | X509_ALGOR_free(a->sig_alg); |
337 | ASN1_BIT_STRING_free(a->signature); | 331 | ASN1_BIT_STRING_free(a->signature); |
338 | Free((char *)a); | 332 | Free(a); |
339 | } | 333 | } |
340 | 334 | ||
341 | static int X509_REVOKED_cmp(a,b) | 335 | static int X509_REVOKED_cmp(X509_REVOKED **a, X509_REVOKED **b) |
342 | X509_REVOKED **a,**b; | ||
343 | { | 336 | { |
344 | return(ASN1_STRING_cmp( | 337 | return(ASN1_STRING_cmp( |
345 | (ASN1_STRING *)(*a)->serialNumber, | 338 | (ASN1_STRING *)(*a)->serialNumber, |
346 | (ASN1_STRING *)(*b)->serialNumber)); | 339 | (ASN1_STRING *)(*b)->serialNumber)); |
347 | } | 340 | } |
348 | 341 | ||
349 | static int X509_REVOKED_seq_cmp(a,b) | 342 | static int X509_REVOKED_seq_cmp(X509_REVOKED **a, X509_REVOKED **b) |
350 | X509_REVOKED **a,**b; | ||
351 | { | 343 | { |
352 | return((*a)->sequence-(*b)->sequence); | 344 | return((*a)->sequence-(*b)->sequence); |
353 | } | 345 | } |
346 | |||
347 | IMPLEMENT_STACK_OF(X509_REVOKED) | ||
348 | IMPLEMENT_ASN1_SET_OF(X509_REVOKED) | ||
349 | IMPLEMENT_STACK_OF(X509_CRL) | ||
350 | IMPLEMENT_ASN1_SET_OF(X509_CRL) | ||