diff options
| author | jsing <> | 2018-02-08 08:09:10 +0000 |
|---|---|---|
| committer | jsing <> | 2018-02-08 08:09:10 +0000 |
| commit | 169a82f69bb622c8d6cdf124436cc79c42fd9138 (patch) | |
| tree | e9c06a1780bebef62f87f0ecbe381580d5984345 /src/lib/libtls/tls_keypair.c | |
| parent | b79b575462092f3fe897b570ba1b59560c9f51d6 (diff) | |
| download | openbsd-169a82f69bb622c8d6cdf124436cc79c42fd9138.tar.gz openbsd-169a82f69bb622c8d6cdf124436cc79c42fd9138.tar.bz2 openbsd-169a82f69bb622c8d6cdf124436cc79c42fd9138.zip | |
Move tls_keypair_pubkey_hash() to the keypair file.
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libtls/tls_keypair.c | 41 |
1 files changed, 40 insertions, 1 deletions
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 | |||
| 148 | int | ||
| 149 | tls_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 | } | ||
