summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2018-02-08 08:09:10 +0000
committerjsing <>2018-02-08 08:09:10 +0000
commit8c6eba876e685911f8c43aeccd30946cfcfec99d (patch)
treee9c06a1780bebef62f87f0ecbe381580d5984345
parent7bf93eac51d305e9043052877724278744c4a238 (diff)
downloadopenbsd-8c6eba876e685911f8c43aeccd30946cfcfec99d.tar.gz
openbsd-8c6eba876e685911f8c43aeccd30946cfcfec99d.tar.bz2
openbsd-8c6eba876e685911f8c43aeccd30946cfcfec99d.zip
Move tls_keypair_pubkey_hash() to the keypair file.
-rw-r--r--src/lib/libtls/tls.c42
-rw-r--r--src/lib/libtls/tls_internal.h3
-rw-r--r--src/lib/libtls/tls_keypair.c41
3 files changed, 43 insertions, 43 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c
index 95fdb8bc4b..fdf4a981a8 100644
--- a/src/lib/libtls/tls.c
+++ b/src/lib/libtls/tls.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls.c,v 1.72 2018/02/08 08:04:12 jsing Exp $ */ 1/* $OpenBSD: tls.c,v 1.73 2018/02/08 08:09:10 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -290,46 +290,6 @@ tls_cert_hash(X509 *cert, char **hash)
290 return (rv); 290 return (rv);
291} 291}
292 292
293static int
294tls_keypair_pubkey_hash(struct tls_keypair *keypair, char **hash)
295{
296 BIO *membio = NULL;
297 X509 *cert = NULL;
298 char d[EVP_MAX_MD_SIZE], *dhex = NULL;
299 int dlen, rv = -1;
300
301 free(*hash);
302 *hash = NULL;
303
304 if ((membio = BIO_new_mem_buf(keypair->cert_mem,
305 keypair->cert_len)) == NULL)
306 goto err;
307 if ((cert = PEM_read_bio_X509_AUX(membio, NULL, tls_password_cb,
308 NULL)) == NULL)
309 goto err;
310
311 if (X509_pubkey_digest(cert, EVP_sha256(), d, &dlen) != 1)
312 goto err;
313
314 if (tls_hex_string(d, dlen, &dhex, NULL) != 0)
315 goto err;
316
317 if (asprintf(hash, "SHA256:%s", dhex) == -1) {
318 *hash = NULL;
319 goto err;
320 }
321
322 rv = 0;
323
324 err:
325 free(dhex);
326 X509_free(cert);
327 BIO_free(membio);
328
329 return (rv);
330}
331
332
333int 293int
334tls_configure_ssl_keypair(struct tls *ctx, SSL_CTX *ssl_ctx, 294tls_configure_ssl_keypair(struct tls *ctx, SSL_CTX *ssl_ctx,
335 struct tls_keypair *keypair, int required) 295 struct tls_keypair *keypair, int required)
diff --git a/src/lib/libtls/tls_internal.h b/src/lib/libtls/tls_internal.h
index 67a31b2efd..8a164d2e3a 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.66 2018/02/08 05:56:49 jsing Exp $ */ 1/* $OpenBSD: tls_internal.h,v 1.67 2018/02/08 08:09:10 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,6 +214,7 @@ 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);
217 218
218struct tls_sni_ctx *tls_sni_ctx_new(void); 219struct tls_sni_ctx *tls_sni_ctx_new(void);
219void tls_sni_ctx_free(struct tls_sni_ctx *sni_ctx); 220void 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 eef92b3b24..2ab584bbcd 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.1 2018/02/08 05:56:49 jsing Exp $ */ 1/* $OpenBSD: tls_keypair.c,v 1.2 2018/02/08 08:09:10 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -144,3 +144,42 @@ tls_keypair_load_cert(struct tls_keypair *keypair, struct tls_error *error,
144 144
145 return (rv); 145 return (rv);
146} 146}
147
148int
149tls_keypair_pubkey_hash(struct tls_keypair *keypair, char **hash)
150{
151 BIO *membio = NULL;
152 X509 *cert = NULL;
153 char d[EVP_MAX_MD_SIZE], *dhex = NULL;
154 int dlen, rv = -1;
155
156 free(*hash);
157 *hash = NULL;
158
159 if ((membio = BIO_new_mem_buf(keypair->cert_mem,
160 keypair->cert_len)) == NULL)
161 goto err;
162 if ((cert = PEM_read_bio_X509_AUX(membio, NULL, tls_password_cb,
163 NULL)) == NULL)
164 goto err;
165
166 if (X509_pubkey_digest(cert, EVP_sha256(), d, &dlen) != 1)
167 goto err;
168
169 if (tls_hex_string(d, dlen, &dhex, NULL) != 0)
170 goto err;
171
172 if (asprintf(hash, "SHA256:%s", dhex) == -1) {
173 *hash = NULL;
174 goto err;
175 }
176
177 rv = 0;
178
179 err:
180 free(dhex);
181 X509_free(cert);
182 BIO_free(membio);
183
184 return (rv);
185}