summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2018-02-08 10:19:31 +0000
committerjsing <>2018-02-08 10:19:31 +0000
commitba784f0df690dc69577e1ee14a448cda91b89262 (patch)
treefbaa7b6f7b55a0e6130366b9d6bb63fa8074d471
parent939cef15b79268da075126b9cf88c8578d0ad48c (diff)
downloadopenbsd-ba784f0df690dc69577e1ee14a448cda91b89262.tar.gz
openbsd-ba784f0df690dc69577e1ee14a448cda91b89262.tar.bz2
openbsd-ba784f0df690dc69577e1ee14a448cda91b89262.zip
Have tls_keypair_pubkey_hash() call tls_keypair_load_cert() instead of
rolling its own certificate loading. This also means we get better error reporting on failure.
-rw-r--r--src/lib/libtls/tls.c5
-rw-r--r--src/lib/libtls/tls_internal.h5
-rw-r--r--src/lib/libtls/tls_keypair.c15
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);
214void tls_keypair_free(struct tls_keypair *_keypair); 214void tls_keypair_free(struct tls_keypair *_keypair);
215int tls_keypair_load_cert(struct tls_keypair *_keypair, 215int tls_keypair_load_cert(struct tls_keypair *_keypair,
216 struct tls_error *_error, X509 **_cert); 216 struct tls_error *_error, X509 **_cert);
217int tls_keypair_pubkey_hash(struct tls_keypair *_keypair, char **_hash); 217int tls_keypair_pubkey_hash(struct tls_keypair *_keypair,
218 struct tls_error *_error, char **_hash);
218 219
219struct tls_sni_ctx *tls_sni_ctx_new(void); 220struct tls_sni_ctx *tls_sni_ctx_new(void);
220void tls_sni_ctx_free(struct tls_sni_ctx *sni_ctx); 221void 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
147int 147int
148tls_keypair_pubkey_hash(struct tls_keypair *keypair, char **hash) 148tls_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}