diff options
-rw-r--r-- | src/lib/libtls/tls.c | 5 | ||||
-rw-r--r-- | src/lib/libtls/tls_internal.h | 5 | ||||
-rw-r--r-- | src/lib/libtls/tls_keypair.c | 15 |
3 files changed, 11 insertions, 14 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index fdf4a981a8..0e206e2c7e 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls.c,v 1.73 2018/02/08 08:09:10 jsing Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.74 2018/02/08 10:19:31 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -313,7 +313,8 @@ tls_configure_ssl_keypair(struct tls *ctx, SSL_CTX *ssl_ctx, | |||
313 | tls_set_errorx(ctx, "failed to load certificate"); | 313 | tls_set_errorx(ctx, "failed to load certificate"); |
314 | goto err; | 314 | goto err; |
315 | } | 315 | } |
316 | if (tls_keypair_pubkey_hash(keypair, &keypair->pubkey_hash) == -1) | 316 | if (tls_keypair_pubkey_hash(keypair, &ctx->error, |
317 | &keypair->pubkey_hash) == -1) | ||
317 | goto err; | 318 | goto err; |
318 | } | 319 | } |
319 | 320 | ||
diff --git a/src/lib/libtls/tls_internal.h b/src/lib/libtls/tls_internal.h index 8a164d2e3a..eb08d47074 100644 --- a/src/lib/libtls/tls_internal.h +++ b/src/lib/libtls/tls_internal.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls_internal.h,v 1.67 2018/02/08 08:09:10 jsing Exp $ */ | 1 | /* $OpenBSD: tls_internal.h,v 1.68 2018/02/08 10:19:31 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> | 3 | * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> |
4 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 4 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
@@ -214,7 +214,8 @@ void tls_keypair_clear(struct tls_keypair *_keypair); | |||
214 | void tls_keypair_free(struct tls_keypair *_keypair); | 214 | void tls_keypair_free(struct tls_keypair *_keypair); |
215 | int tls_keypair_load_cert(struct tls_keypair *_keypair, | 215 | int tls_keypair_load_cert(struct tls_keypair *_keypair, |
216 | struct tls_error *_error, X509 **_cert); | 216 | struct tls_error *_error, X509 **_cert); |
217 | int tls_keypair_pubkey_hash(struct tls_keypair *_keypair, char **_hash); | 217 | int tls_keypair_pubkey_hash(struct tls_keypair *_keypair, |
218 | struct tls_error *_error, char **_hash); | ||
218 | 219 | ||
219 | struct tls_sni_ctx *tls_sni_ctx_new(void); | 220 | struct tls_sni_ctx *tls_sni_ctx_new(void); |
220 | void tls_sni_ctx_free(struct tls_sni_ctx *sni_ctx); | 221 | void tls_sni_ctx_free(struct tls_sni_ctx *sni_ctx); |
diff --git a/src/lib/libtls/tls_keypair.c b/src/lib/libtls/tls_keypair.c index 57068047de..626a95853f 100644 --- a/src/lib/libtls/tls_keypair.c +++ b/src/lib/libtls/tls_keypair.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls_keypair.c,v 1.3 2018/02/08 10:03:19 jsing Exp $ */ | 1 | /* $OpenBSD: tls_keypair.c,v 1.4 2018/02/08 10:19:31 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -145,9 +145,9 @@ tls_keypair_load_cert(struct tls_keypair *keypair, struct tls_error *error, | |||
145 | } | 145 | } |
146 | 146 | ||
147 | int | 147 | int |
148 | tls_keypair_pubkey_hash(struct tls_keypair *keypair, char **hash) | 148 | tls_keypair_pubkey_hash(struct tls_keypair *keypair, struct tls_error *error, |
149 | char **hash) | ||
149 | { | 150 | { |
150 | BIO *membio = NULL; | ||
151 | X509 *cert = NULL; | 151 | X509 *cert = NULL; |
152 | char d[EVP_MAX_MD_SIZE], *dhex = NULL; | 152 | char d[EVP_MAX_MD_SIZE], *dhex = NULL; |
153 | int dlen, rv = -1; | 153 | int dlen, rv = -1; |
@@ -155,11 +155,7 @@ tls_keypair_pubkey_hash(struct tls_keypair *keypair, char **hash) | |||
155 | free(*hash); | 155 | free(*hash); |
156 | *hash = NULL; | 156 | *hash = NULL; |
157 | 157 | ||
158 | if ((membio = BIO_new_mem_buf(keypair->cert_mem, | 158 | if (tls_keypair_load_cert(keypair, error, &cert) == -1) |
159 | keypair->cert_len)) == NULL) | ||
160 | goto err; | ||
161 | if ((cert = PEM_read_bio_X509_AUX(membio, NULL, tls_password_cb, | ||
162 | NULL)) == NULL) | ||
163 | goto err; | 159 | goto err; |
164 | 160 | ||
165 | if (X509_pubkey_digest(cert, EVP_sha256(), d, &dlen) != 1) | 161 | if (X509_pubkey_digest(cert, EVP_sha256(), d, &dlen) != 1) |
@@ -176,9 +172,8 @@ tls_keypair_pubkey_hash(struct tls_keypair *keypair, char **hash) | |||
176 | rv = 0; | 172 | rv = 0; |
177 | 173 | ||
178 | err: | 174 | err: |
179 | free(dhex); | ||
180 | X509_free(cert); | 175 | X509_free(cert); |
181 | BIO_free(membio); | 176 | free(dhex); |
182 | 177 | ||
183 | return (rv); | 178 | return (rv); |
184 | } | 179 | } |