diff options
author | markus <> | 2004-04-07 20:42:07 +0000 |
---|---|---|
committer | markus <> | 2004-04-07 20:42:07 +0000 |
commit | 58c08aa241f168c84ce7cc3052454ea59a44eada (patch) | |
tree | 1806747a3fda66041a998ca63c763fdcf722450e /src/lib/libcrypto/ocsp | |
parent | 9c1aa44a1eacea897c0432e796b205b8484ff4d2 (diff) | |
download | openbsd-58c08aa241f168c84ce7cc3052454ea59a44eada.tar.gz openbsd-58c08aa241f168c84ce7cc3052454ea59a44eada.tar.bz2 openbsd-58c08aa241f168c84ce7cc3052454ea59a44eada.zip |
import openssl-0.9.7d
Diffstat (limited to 'src/lib/libcrypto/ocsp')
-rw-r--r-- | src/lib/libcrypto/ocsp/ocsp_ext.c | 24 | ||||
-rw-r--r-- | src/lib/libcrypto/ocsp/ocsp_lib.c | 1 | ||||
-rw-r--r-- | src/lib/libcrypto/ocsp/ocsp_vfy.c | 6 |
3 files changed, 21 insertions, 10 deletions
diff --git a/src/lib/libcrypto/ocsp/ocsp_ext.c b/src/lib/libcrypto/ocsp/ocsp_ext.c index d6c8899f58..57399433fc 100644 --- a/src/lib/libcrypto/ocsp/ocsp_ext.c +++ b/src/lib/libcrypto/ocsp/ocsp_ext.c | |||
@@ -305,6 +305,8 @@ err: | |||
305 | 305 | ||
306 | /* Add a nonce to an extension stack. A nonce can be specificed or if NULL | 306 | /* Add a nonce to an extension stack. A nonce can be specificed or if NULL |
307 | * a random nonce will be generated. | 307 | * a random nonce will be generated. |
308 | * Note: OpenSSL 0.9.7d and later create an OCTET STRING containing the | ||
309 | * nonce, previous versions used the raw nonce. | ||
308 | */ | 310 | */ |
309 | 311 | ||
310 | static int ocsp_add1_nonce(STACK_OF(X509_EXTENSION) **exts, unsigned char *val, int len) | 312 | static int ocsp_add1_nonce(STACK_OF(X509_EXTENSION) **exts, unsigned char *val, int len) |
@@ -313,20 +315,28 @@ static int ocsp_add1_nonce(STACK_OF(X509_EXTENSION) **exts, unsigned char *val, | |||
313 | ASN1_OCTET_STRING os; | 315 | ASN1_OCTET_STRING os; |
314 | int ret = 0; | 316 | int ret = 0; |
315 | if (len <= 0) len = OCSP_DEFAULT_NONCE_LENGTH; | 317 | if (len <= 0) len = OCSP_DEFAULT_NONCE_LENGTH; |
316 | if (val) tmpval = val; | 318 | /* Create the OCTET STRING manually by writing out the header and |
319 | * appending the content octets. This avoids an extra memory allocation | ||
320 | * operation in some cases. Applications should *NOT* do this because | ||
321 | * it relies on library internals. | ||
322 | */ | ||
323 | os.length = ASN1_object_size(0, len, V_ASN1_OCTET_STRING); | ||
324 | os.data = OPENSSL_malloc(os.length); | ||
325 | if (os.data == NULL) | ||
326 | goto err; | ||
327 | tmpval = os.data; | ||
328 | ASN1_put_object(&tmpval, 0, len, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL); | ||
329 | if (val) | ||
330 | memcpy(tmpval, val, len); | ||
317 | else | 331 | else |
318 | { | ||
319 | if (!(tmpval = OPENSSL_malloc(len))) goto err; | ||
320 | RAND_pseudo_bytes(tmpval, len); | 332 | RAND_pseudo_bytes(tmpval, len); |
321 | } | ||
322 | os.data = tmpval; | ||
323 | os.length = len; | ||
324 | if(!X509V3_add1_i2d(exts, NID_id_pkix_OCSP_Nonce, | 333 | if(!X509V3_add1_i2d(exts, NID_id_pkix_OCSP_Nonce, |
325 | &os, 0, X509V3_ADD_REPLACE)) | 334 | &os, 0, X509V3_ADD_REPLACE)) |
326 | goto err; | 335 | goto err; |
327 | ret = 1; | 336 | ret = 1; |
328 | err: | 337 | err: |
329 | if(!val) OPENSSL_free(tmpval); | 338 | if (os.data) |
339 | OPENSSL_free(os.data); | ||
330 | return ret; | 340 | return ret; |
331 | } | 341 | } |
332 | 342 | ||
diff --git a/src/lib/libcrypto/ocsp/ocsp_lib.c b/src/lib/libcrypto/ocsp/ocsp_lib.c index 3875af165c..9e87fc7895 100644 --- a/src/lib/libcrypto/ocsp/ocsp_lib.c +++ b/src/lib/libcrypto/ocsp/ocsp_lib.c | |||
@@ -253,6 +253,7 @@ int OCSP_parse_url(char *url, char **phost, char **pport, char **ppath, int *pss | |||
253 | 253 | ||
254 | 254 | ||
255 | err: | 255 | err: |
256 | if (buf) OPENSSL_free(buf); | ||
256 | if (*ppath) OPENSSL_free(*ppath); | 257 | if (*ppath) OPENSSL_free(*ppath); |
257 | if (*pport) OPENSSL_free(*pport); | 258 | if (*pport) OPENSSL_free(*pport); |
258 | if (*phost) OPENSSL_free(*phost); | 259 | if (*phost) OPENSSL_free(*phost); |
diff --git a/src/lib/libcrypto/ocsp/ocsp_vfy.c b/src/lib/libcrypto/ocsp/ocsp_vfy.c index 1f5fda7ca3..3d58dfb06c 100644 --- a/src/lib/libcrypto/ocsp/ocsp_vfy.c +++ b/src/lib/libcrypto/ocsp/ocsp_vfy.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
5 | /* ==================================================================== | 5 | /* ==================================================================== |
6 | * Copyright (c) 2000 The OpenSSL Project. All rights reserved. | 6 | * Copyright (c) 2000-2004 The OpenSSL Project. All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions | 9 | * modification, are permitted provided that the following conditions |
@@ -272,7 +272,7 @@ static int ocsp_check_ids(STACK_OF(OCSP_SINGLERESP) *sresp, OCSP_CERTID **ret) | |||
272 | 272 | ||
273 | for (i = 1; i < idcount; i++) | 273 | for (i = 1; i < idcount; i++) |
274 | { | 274 | { |
275 | tmpid = sk_OCSP_SINGLERESP_value(sresp, 0)->certId; | 275 | tmpid = sk_OCSP_SINGLERESP_value(sresp, i)->certId; |
276 | /* Check to see if IDs match */ | 276 | /* Check to see if IDs match */ |
277 | if (OCSP_id_issuer_cmp(cid, tmpid)) | 277 | if (OCSP_id_issuer_cmp(cid, tmpid)) |
278 | { | 278 | { |
@@ -330,7 +330,7 @@ static int ocsp_match_issuerid(X509 *cert, OCSP_CERTID *cid, | |||
330 | OCSP_CERTID *tmpid; | 330 | OCSP_CERTID *tmpid; |
331 | for (i = 0; i < sk_OCSP_SINGLERESP_num(sresp); i++) | 331 | for (i = 0; i < sk_OCSP_SINGLERESP_num(sresp); i++) |
332 | { | 332 | { |
333 | tmpid = sk_OCSP_SINGLERESP_value(sresp, 0)->certId; | 333 | tmpid = sk_OCSP_SINGLERESP_value(sresp, i)->certId; |
334 | ret = ocsp_match_issuerid(cert, tmpid, NULL); | 334 | ret = ocsp_match_issuerid(cert, tmpid, NULL); |
335 | if (ret <= 0) return ret; | 335 | if (ret <= 0) return ret; |
336 | } | 336 | } |