summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_crl.c
diff options
context:
space:
mode:
authorbeck <>1999-09-29 04:37:45 +0000
committerbeck <>1999-09-29 04:37:45 +0000
commitde8f24ea083384bb66b32ec105dc4743c5663cdf (patch)
tree1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libcrypto/asn1/x_crl.c
parentcb929d29896bcb87c2a97417fbd03e50078fc178 (diff)
downloadopenbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.gz
openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.bz2
openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.zip
OpenSSL 0.9.4 merge
Diffstat (limited to 'src/lib/libcrypto/asn1/x_crl.c')
-rw-r--r--src/lib/libcrypto/asn1/x_crl.c175
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
74static int X509_REVOKED_cmp(X509_REVOKED **a,X509_REVOKED **b); 64static int X509_REVOKED_cmp(X509_REVOKED **a,X509_REVOKED **b);
75static int X509_REVOKED_seq_cmp(X509_REVOKED **a,X509_REVOKED **b); 65static int X509_REVOKED_seq_cmp(X509_REVOKED **a,X509_REVOKED **b);
76#else 66int i2d_X509_REVOKED(X509_REVOKED *a, unsigned char **pp)
77static int X509_REVOKED_cmp();
78static int X509_REVOKED_seq_cmp();
79#endif
80
81int i2d_X509_REVOKED(a,pp)
82X509_REVOKED *a;
83unsigned 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
100X509_REVOKED *d2i_X509_REVOKED(a,pp,length) 85X509_REVOKED *d2i_X509_REVOKED(X509_REVOKED **a, unsigned char **pp,
101X509_REVOKED **a; 86 long length)
102unsigned char **pp;
103long 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
115int i2d_X509_CRL_INFO(a,pp) 99int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **pp)
116X509_CRL_INFO *a;
117unsigned 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
157X509_CRL_INFO *d2i_X509_CRL_INFO(a,pp,length) 145X509_CRL_INFO *d2i_X509_CRL_INFO(X509_CRL_INFO **a, unsigned char **pp,
158X509_CRL_INFO **a; 146 long length)
159unsigned char **pp;
160long 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
212int i2d_X509_CRL(a,pp) 211int i2d_X509_CRL(X509_CRL *a, unsigned char **pp)
213X509_CRL *a;
214unsigned 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
231X509_CRL *d2i_X509_CRL(a,pp,length) 228X509_CRL *d2i_X509_CRL(X509_CRL **a, unsigned char **pp, long length)
232X509_CRL **a;
233unsigned char **pp;
234long 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
248X509_REVOKED *X509_REVOKED_new() 242X509_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
260X509_CRL_INFO *X509_CRL_INFO_new() 255X509_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
277X509_CRL *X509_CRL_new() 273X509_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
290void X509_REVOKED_free(a) 287void X509_REVOKED_free(X509_REVOKED *a)
291X509_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
300void X509_CRL_INFO_free(a) 296void X509_CRL_INFO_free(X509_CRL_INFO *a)
301X509_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
315void X509_CRL_free(a) 310void X509_CRL_free(X509_CRL *a)
316X509_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
341static int X509_REVOKED_cmp(a,b) 335static int X509_REVOKED_cmp(X509_REVOKED **a, X509_REVOKED **b)
342X509_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
349static int X509_REVOKED_seq_cmp(a,b) 342static int X509_REVOKED_seq_cmp(X509_REVOKED **a, X509_REVOKED **b)
350X509_REVOKED **a,**b;
351 { 343 {
352 return((*a)->sequence-(*b)->sequence); 344 return((*a)->sequence-(*b)->sequence);
353 } 345 }
346
347IMPLEMENT_STACK_OF(X509_REVOKED)
348IMPLEMENT_ASN1_SET_OF(X509_REVOKED)
349IMPLEMENT_STACK_OF(X509_CRL)
350IMPLEMENT_ASN1_SET_OF(X509_CRL)