diff options
| author | beck <> | 2015-01-28 04:14:31 +0000 |
|---|---|---|
| committer | beck <> | 2015-01-28 04:14:31 +0000 |
| commit | 7a956248ef874c38eeabdfa3912c758dbe16c625 (patch) | |
| tree | f7e3e1ca2ec359adbc6581af16b8421550c018d8 /src/lib/libcrypto/asn1 | |
| parent | ecd8c7601fb6ad441513b2ae4bfe93307b07ad66 (diff) | |
| download | openbsd-7a956248ef874c38eeabdfa3912c758dbe16c625.tar.gz openbsd-7a956248ef874c38eeabdfa3912c758dbe16c625.tar.bz2 openbsd-7a956248ef874c38eeabdfa3912c758dbe16c625.zip | |
Fix a number of issues relating to algorithms in signatures, Mostly
from OpenSSL with a hint of boring and some things done here. Addresses
CVE-2014-8275 for OpenSSL fully
ok miod@ doug@
Diffstat (limited to 'src/lib/libcrypto/asn1')
| -rw-r--r-- | src/lib/libcrypto/asn1/a_verify.c | 9 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/asn1.h | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/x_algor.c | 16 |
3 files changed, 25 insertions, 3 deletions
diff --git a/src/lib/libcrypto/asn1/a_verify.c b/src/lib/libcrypto/asn1/a_verify.c index ea937cab3a..3fc79b78f6 100644 --- a/src/lib/libcrypto/asn1/a_verify.c +++ b/src/lib/libcrypto/asn1/a_verify.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: a_verify.c,v 1.20 2014/07/11 08:44:47 jsing Exp $ */ | 1 | /* $OpenBSD: a_verify.c,v 1.21 2015/01/28 04:14:31 beck Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -85,6 +85,13 @@ ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, | |||
| 85 | return -1; | 85 | return -1; |
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7) | ||
| 89 | { | ||
| 90 | ASN1err(ASN1_F_ASN1_VERIFY, | ||
| 91 | ASN1_R_INVALID_BIT_STRING_BITS_LEFT); | ||
| 92 | return -1; | ||
| 93 | } | ||
| 94 | |||
| 88 | EVP_MD_CTX_init(&ctx); | 95 | EVP_MD_CTX_init(&ctx); |
| 89 | 96 | ||
| 90 | /* Convert signature OID into digest and public key OIDs */ | 97 | /* Convert signature OID into digest and public key OIDs */ |
diff --git a/src/lib/libcrypto/asn1/asn1.h b/src/lib/libcrypto/asn1/asn1.h index a1cc718856..5ec89db3f0 100644 --- a/src/lib/libcrypto/asn1/asn1.h +++ b/src/lib/libcrypto/asn1/asn1.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: asn1.h,v 1.28 2014/06/12 15:49:27 deraadt Exp $ */ | 1 | /* $OpenBSD: asn1.h,v 1.29 2015/01/28 04:14:31 beck Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -1279,6 +1279,7 @@ void ERR_load_ASN1_strings(void); | |||
| 1279 | #define ASN1_R_ILLEGAL_TIME_VALUE 184 | 1279 | #define ASN1_R_ILLEGAL_TIME_VALUE 184 |
| 1280 | #define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 | 1280 | #define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 |
| 1281 | #define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 | 1281 | #define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 |
| 1282 | #define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 | ||
| 1282 | #define ASN1_R_INVALID_BMPSTRING_LENGTH 129 | 1283 | #define ASN1_R_INVALID_BMPSTRING_LENGTH 129 |
| 1283 | #define ASN1_R_INVALID_DIGIT 130 | 1284 | #define ASN1_R_INVALID_DIGIT 130 |
| 1284 | #define ASN1_R_INVALID_MIME_TYPE 205 | 1285 | #define ASN1_R_INVALID_MIME_TYPE 205 |
diff --git a/src/lib/libcrypto/asn1/x_algor.c b/src/lib/libcrypto/asn1/x_algor.c index c069a5225c..71aeaaade0 100644 --- a/src/lib/libcrypto/asn1/x_algor.c +++ b/src/lib/libcrypto/asn1/x_algor.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x_algor.c,v 1.12 2014/06/12 15:49:27 deraadt Exp $ */ | 1 | /* $OpenBSD: x_algor.c,v 1.13 2015/01/28 04:14:31 beck Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2000. | 3 | * project 2000. |
| 4 | */ | 4 | */ |
| @@ -136,3 +136,17 @@ X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md) | |||
| 136 | 136 | ||
| 137 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); | 137 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); |
| 138 | } | 138 | } |
| 139 | |||
| 140 | /* Returns 0 if they are equal, != 0 otherwise. */ | ||
| 141 | int | ||
| 142 | X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b) | ||
| 143 | { | ||
| 144 | int rv = OBJ_cmp(a->algorithm, b->algorithm); | ||
| 145 | if (!rv) { | ||
| 146 | if (!a->parameter && !b->parameter) | ||
| 147 | rv = 0; | ||
| 148 | else | ||
| 149 | rv = ASN1_TYPE_cmp(a->parameter, b->parameter); | ||
| 150 | } | ||
| 151 | return(rv); | ||
| 152 | } | ||
