diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/x_crl.c')
-rw-r--r-- | src/lib/libcrypto/asn1/x_crl.c | 57 |
1 files changed, 25 insertions, 32 deletions
diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c index cd46bbebc2..12a42d04c7 100644 --- a/src/lib/libcrypto/asn1/x_crl.c +++ b/src/lib/libcrypto/asn1/x_crl.c | |||
@@ -130,9 +130,9 @@ int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **pp) | |||
130 | } | 130 | } |
131 | M_ASN1_I2D_put(a->sig_alg,i2d_X509_ALGOR); | 131 | M_ASN1_I2D_put(a->sig_alg,i2d_X509_ALGOR); |
132 | M_ASN1_I2D_put(a->issuer,i2d_X509_NAME); | 132 | M_ASN1_I2D_put(a->issuer,i2d_X509_NAME); |
133 | M_ASN1_I2D_put(a->lastUpdate,i2d_ASN1_UTCTIME); | 133 | M_ASN1_I2D_put(a->lastUpdate,i2d_ASN1_TIME); |
134 | if (a->nextUpdate != NULL) | 134 | if (a->nextUpdate != NULL) |
135 | { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_UTCTIME); } | 135 | { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_TIME); } |
136 | M_ASN1_I2D_put_SEQUENCE_opt_type(X509_REVOKED,a->revoked, | 136 | M_ASN1_I2D_put_SEQUENCE_opt_type(X509_REVOKED,a->revoked, |
137 | i2d_X509_REVOKED); | 137 | i2d_X509_REVOKED); |
138 | M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, | 138 | M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, |
@@ -157,20 +157,16 @@ X509_CRL_INFO *d2i_X509_CRL_INFO(X509_CRL_INFO **a, unsigned char **pp, | |||
157 | 157 | ||
158 | if ((ver == 0) && (ret->version != NULL)) | 158 | if ((ver == 0) && (ret->version != NULL)) |
159 | { | 159 | { |
160 | ASN1_INTEGER_free(ret->version); | 160 | M_ASN1_INTEGER_free(ret->version); |
161 | ret->version=NULL; | 161 | ret->version=NULL; |
162 | } | 162 | } |
163 | M_ASN1_D2I_get(ret->sig_alg,d2i_X509_ALGOR); | 163 | M_ASN1_D2I_get(ret->sig_alg,d2i_X509_ALGOR); |
164 | M_ASN1_D2I_get(ret->issuer,d2i_X509_NAME); | 164 | M_ASN1_D2I_get(ret->issuer,d2i_X509_NAME); |
165 | M_ASN1_D2I_get(ret->lastUpdate,d2i_ASN1_TIME); | 165 | M_ASN1_D2I_get(ret->lastUpdate,d2i_ASN1_TIME); |
166 | /* Manually handle the OPTIONAL ASN1_TIME stuff */ | 166 | /* Manually handle the OPTIONAL ASN1_TIME stuff */ |
167 | if(c.slen != 0 | 167 | /* First try UTCTime */ |
168 | && ( (M_ASN1_next & ~V_ASN1_CONSTRUCTED) == | 168 | M_ASN1_D2I_get_opt(ret->nextUpdate,d2i_ASN1_UTCTIME, V_ASN1_UTCTIME); |
169 | (V_ASN1_UNIVERSAL|V_ASN1_UTCTIME) | 169 | /* If that doesn't work try GeneralizedTime */ |
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) | 170 | if(!ret->nextUpdate) |
175 | M_ASN1_D2I_get_opt(ret->nextUpdate,d2i_ASN1_GENERALIZEDTIME, | 171 | M_ASN1_D2I_get_opt(ret->nextUpdate,d2i_ASN1_GENERALIZEDTIME, |
176 | V_ASN1_GENERALIZEDTIME); | 172 | V_ASN1_GENERALIZEDTIME); |
@@ -190,20 +186,17 @@ X509_CRL_INFO *d2i_X509_CRL_INFO(X509_CRL_INFO **a, unsigned char **pp, | |||
190 | } | 186 | } |
191 | } | 187 | } |
192 | 188 | ||
193 | if (ver >= 1) | 189 | if (ret->extensions != NULL) |
194 | { | 190 | { |
195 | if (ret->extensions != NULL) | 191 | while (sk_X509_EXTENSION_num(ret->extensions)) |
196 | { | 192 | X509_EXTENSION_free( |
197 | while (sk_X509_EXTENSION_num(ret->extensions)) | 193 | sk_X509_EXTENSION_pop(ret->extensions)); |
198 | X509_EXTENSION_free( | ||
199 | sk_X509_EXTENSION_pop(ret->extensions)); | ||
200 | } | ||
201 | |||
202 | M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions, | ||
203 | d2i_X509_EXTENSION, | ||
204 | X509_EXTENSION_free,0, | ||
205 | V_ASN1_SEQUENCE); | ||
206 | } | 194 | } |
195 | |||
196 | M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions, | ||
197 | d2i_X509_EXTENSION, | ||
198 | X509_EXTENSION_free,0, | ||
199 | V_ASN1_SEQUENCE); | ||
207 | 200 | ||
208 | M_ASN1_D2I_Finish(a,X509_CRL_INFO_free,ASN1_F_D2I_X509_CRL_INFO); | 201 | M_ASN1_D2I_Finish(a,X509_CRL_INFO_free,ASN1_F_D2I_X509_CRL_INFO); |
209 | } | 202 | } |
@@ -245,8 +238,8 @@ X509_REVOKED *X509_REVOKED_new(void) | |||
245 | ASN1_CTX c; | 238 | ASN1_CTX c; |
246 | 239 | ||
247 | M_ASN1_New_Malloc(ret,X509_REVOKED); | 240 | M_ASN1_New_Malloc(ret,X509_REVOKED); |
248 | M_ASN1_New(ret->serialNumber,ASN1_INTEGER_new); | 241 | M_ASN1_New(ret->serialNumber,M_ASN1_INTEGER_new); |
249 | M_ASN1_New(ret->revocationDate,ASN1_UTCTIME_new); | 242 | M_ASN1_New(ret->revocationDate,M_ASN1_UTCTIME_new); |
250 | ret->extensions=NULL; | 243 | ret->extensions=NULL; |
251 | return(ret); | 244 | return(ret); |
252 | M_ASN1_New_Error(ASN1_F_X509_REVOKED_NEW); | 245 | M_ASN1_New_Error(ASN1_F_X509_REVOKED_NEW); |
@@ -261,7 +254,7 @@ X509_CRL_INFO *X509_CRL_INFO_new(void) | |||
261 | ret->version=NULL; | 254 | ret->version=NULL; |
262 | M_ASN1_New(ret->sig_alg,X509_ALGOR_new); | 255 | M_ASN1_New(ret->sig_alg,X509_ALGOR_new); |
263 | M_ASN1_New(ret->issuer,X509_NAME_new); | 256 | M_ASN1_New(ret->issuer,X509_NAME_new); |
264 | M_ASN1_New(ret->lastUpdate,ASN1_UTCTIME_new); | 257 | M_ASN1_New(ret->lastUpdate,M_ASN1_UTCTIME_new); |
265 | ret->nextUpdate=NULL; | 258 | ret->nextUpdate=NULL; |
266 | M_ASN1_New(ret->revoked,sk_X509_REVOKED_new_null); | 259 | M_ASN1_New(ret->revoked,sk_X509_REVOKED_new_null); |
267 | M_ASN1_New(ret->extensions,sk_X509_EXTENSION_new_null); | 260 | M_ASN1_New(ret->extensions,sk_X509_EXTENSION_new_null); |
@@ -279,7 +272,7 @@ X509_CRL *X509_CRL_new(void) | |||
279 | ret->references=1; | 272 | ret->references=1; |
280 | M_ASN1_New(ret->crl,X509_CRL_INFO_new); | 273 | M_ASN1_New(ret->crl,X509_CRL_INFO_new); |
281 | M_ASN1_New(ret->sig_alg,X509_ALGOR_new); | 274 | M_ASN1_New(ret->sig_alg,X509_ALGOR_new); |
282 | M_ASN1_New(ret->signature,ASN1_BIT_STRING_new); | 275 | M_ASN1_New(ret->signature,M_ASN1_BIT_STRING_new); |
283 | return(ret); | 276 | return(ret); |
284 | M_ASN1_New_Error(ASN1_F_X509_CRL_NEW); | 277 | M_ASN1_New_Error(ASN1_F_X509_CRL_NEW); |
285 | } | 278 | } |
@@ -287,8 +280,8 @@ X509_CRL *X509_CRL_new(void) | |||
287 | void X509_REVOKED_free(X509_REVOKED *a) | 280 | void X509_REVOKED_free(X509_REVOKED *a) |
288 | { | 281 | { |
289 | if (a == NULL) return; | 282 | if (a == NULL) return; |
290 | ASN1_INTEGER_free(a->serialNumber); | 283 | M_ASN1_INTEGER_free(a->serialNumber); |
291 | ASN1_UTCTIME_free(a->revocationDate); | 284 | M_ASN1_UTCTIME_free(a->revocationDate); |
292 | sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free); | 285 | sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free); |
293 | Free(a); | 286 | Free(a); |
294 | } | 287 | } |
@@ -296,12 +289,12 @@ void X509_REVOKED_free(X509_REVOKED *a) | |||
296 | void X509_CRL_INFO_free(X509_CRL_INFO *a) | 289 | void X509_CRL_INFO_free(X509_CRL_INFO *a) |
297 | { | 290 | { |
298 | if (a == NULL) return; | 291 | if (a == NULL) return; |
299 | ASN1_INTEGER_free(a->version); | 292 | M_ASN1_INTEGER_free(a->version); |
300 | X509_ALGOR_free(a->sig_alg); | 293 | X509_ALGOR_free(a->sig_alg); |
301 | X509_NAME_free(a->issuer); | 294 | X509_NAME_free(a->issuer); |
302 | ASN1_UTCTIME_free(a->lastUpdate); | 295 | M_ASN1_UTCTIME_free(a->lastUpdate); |
303 | if (a->nextUpdate) | 296 | if (a->nextUpdate) |
304 | ASN1_UTCTIME_free(a->nextUpdate); | 297 | M_ASN1_UTCTIME_free(a->nextUpdate); |
305 | sk_X509_REVOKED_pop_free(a->revoked,X509_REVOKED_free); | 298 | sk_X509_REVOKED_pop_free(a->revoked,X509_REVOKED_free); |
306 | sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free); | 299 | sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free); |
307 | Free(a); | 300 | Free(a); |
@@ -328,7 +321,7 @@ void X509_CRL_free(X509_CRL *a) | |||
328 | 321 | ||
329 | X509_CRL_INFO_free(a->crl); | 322 | X509_CRL_INFO_free(a->crl); |
330 | X509_ALGOR_free(a->sig_alg); | 323 | X509_ALGOR_free(a->sig_alg); |
331 | ASN1_BIT_STRING_free(a->signature); | 324 | M_ASN1_BIT_STRING_free(a->signature); |
332 | Free(a); | 325 | Free(a); |
333 | } | 326 | } |
334 | 327 | ||