diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libtls/tls_config.c | 131 |
1 files changed, 6 insertions, 125 deletions
diff --git a/src/lib/libtls/tls_config.c b/src/lib/libtls/tls_config.c index d44b8dde49..3db75dc62f 100644 --- a/src/lib/libtls/tls_config.c +++ b/src/lib/libtls/tls_config.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls_config.c,v 1.46 2018/02/05 00:52:24 jsing Exp $ */ | 1 | /* $OpenBSD: tls_config.c,v 1.47 2018/02/08 05:56:49 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -24,127 +24,8 @@ | |||
| 24 | #include <unistd.h> | 24 | #include <unistd.h> |
| 25 | 25 | ||
| 26 | #include <tls.h> | 26 | #include <tls.h> |
| 27 | #include "tls_internal.h" | ||
| 28 | |||
| 29 | static int | ||
| 30 | set_string(const char **dest, const char *src) | ||
| 31 | { | ||
| 32 | free((char *)*dest); | ||
| 33 | *dest = NULL; | ||
| 34 | if (src != NULL) | ||
| 35 | if ((*dest = strdup(src)) == NULL) | ||
| 36 | return -1; | ||
| 37 | return 0; | ||
| 38 | } | ||
| 39 | |||
| 40 | static void * | ||
| 41 | memdup(const void *in, size_t len) | ||
| 42 | { | ||
| 43 | void *out; | ||
| 44 | |||
| 45 | if ((out = malloc(len)) == NULL) | ||
| 46 | return NULL; | ||
| 47 | memcpy(out, in, len); | ||
| 48 | return out; | ||
| 49 | } | ||
| 50 | |||
| 51 | static int | ||
| 52 | set_mem(char **dest, size_t *destlen, const void *src, size_t srclen) | ||
| 53 | { | ||
| 54 | free(*dest); | ||
| 55 | *dest = NULL; | ||
| 56 | *destlen = 0; | ||
| 57 | if (src != NULL) | ||
| 58 | if ((*dest = memdup(src, srclen)) == NULL) | ||
| 59 | return -1; | ||
| 60 | *destlen = srclen; | ||
| 61 | return 0; | ||
| 62 | } | ||
| 63 | |||
| 64 | static struct tls_keypair * | ||
| 65 | tls_keypair_new(void) | ||
| 66 | { | ||
| 67 | return calloc(1, sizeof(struct tls_keypair)); | ||
| 68 | } | ||
| 69 | |||
| 70 | static void | ||
| 71 | tls_keypair_clear_key(struct tls_keypair *keypair) | ||
| 72 | { | ||
| 73 | freezero(keypair->key_mem, keypair->key_len); | ||
| 74 | keypair->key_mem = NULL; | ||
| 75 | keypair->key_len = 0; | ||
| 76 | } | ||
| 77 | |||
| 78 | static int | ||
| 79 | tls_keypair_set_cert_file(struct tls_keypair *keypair, struct tls_error *error, | ||
| 80 | const char *cert_file) | ||
| 81 | { | ||
| 82 | return tls_config_load_file(error, "certificate", cert_file, | ||
| 83 | &keypair->cert_mem, &keypair->cert_len); | ||
| 84 | } | ||
| 85 | |||
| 86 | static int | ||
| 87 | tls_keypair_set_cert_mem(struct tls_keypair *keypair, const uint8_t *cert, | ||
| 88 | size_t len) | ||
| 89 | { | ||
| 90 | return set_mem(&keypair->cert_mem, &keypair->cert_len, cert, len); | ||
| 91 | } | ||
| 92 | 27 | ||
| 93 | static int | 28 | #include "tls_internal.h" |
| 94 | tls_keypair_set_key_file(struct tls_keypair *keypair, struct tls_error *error, | ||
| 95 | const char *key_file) | ||
| 96 | { | ||
| 97 | tls_keypair_clear_key(keypair); | ||
| 98 | return tls_config_load_file(error, "key", key_file, | ||
| 99 | &keypair->key_mem, &keypair->key_len); | ||
| 100 | } | ||
| 101 | |||
| 102 | static int | ||
| 103 | tls_keypair_set_key_mem(struct tls_keypair *keypair, const uint8_t *key, | ||
| 104 | size_t len) | ||
| 105 | { | ||
| 106 | tls_keypair_clear_key(keypair); | ||
| 107 | return set_mem(&keypair->key_mem, &keypair->key_len, key, len); | ||
| 108 | } | ||
| 109 | |||
| 110 | static int | ||
| 111 | tls_keypair_set_ocsp_staple_file(struct tls_keypair *keypair, | ||
| 112 | struct tls_error *error, const char *ocsp_file) | ||
| 113 | { | ||
| 114 | return tls_config_load_file(error, "ocsp", ocsp_file, | ||
| 115 | &keypair->ocsp_staple, &keypair->ocsp_staple_len); | ||
| 116 | } | ||
| 117 | |||
| 118 | static int | ||
| 119 | tls_keypair_set_ocsp_staple_mem(struct tls_keypair *keypair, | ||
| 120 | const uint8_t *staple, size_t len) | ||
| 121 | { | ||
| 122 | return set_mem(&keypair->ocsp_staple, &keypair->ocsp_staple_len, staple, | ||
| 123 | len); | ||
| 124 | } | ||
| 125 | |||
| 126 | static void | ||
| 127 | tls_keypair_clear(struct tls_keypair *keypair) | ||
| 128 | { | ||
| 129 | tls_keypair_set_cert_mem(keypair, NULL, 0); | ||
| 130 | tls_keypair_set_key_mem(keypair, NULL, 0); | ||
| 131 | } | ||
| 132 | |||
| 133 | static void | ||
| 134 | tls_keypair_free(struct tls_keypair *keypair) | ||
| 135 | { | ||
| 136 | if (keypair == NULL) | ||
| 137 | return; | ||
| 138 | |||
| 139 | tls_keypair_clear(keypair); | ||
| 140 | |||
| 141 | free(keypair->cert_mem); | ||
| 142 | free(keypair->key_mem); | ||
| 143 | free(keypair->ocsp_staple); | ||
| 144 | free(keypair->pubkey_hash); | ||
| 145 | |||
| 146 | free(keypair); | ||
| 147 | } | ||
| 148 | 29 | ||
| 149 | int | 30 | int |
| 150 | tls_config_load_file(struct tls_error *error, const char *filetype, | 31 | tls_config_load_file(struct tls_error *error, const char *filetype, |
| @@ -529,13 +410,13 @@ tls_config_set_ca_file(struct tls_config *config, const char *ca_file) | |||
| 529 | int | 410 | int |
| 530 | tls_config_set_ca_path(struct tls_config *config, const char *ca_path) | 411 | tls_config_set_ca_path(struct tls_config *config, const char *ca_path) |
| 531 | { | 412 | { |
| 532 | return set_string(&config->ca_path, ca_path); | 413 | return tls_set_string(&config->ca_path, ca_path); |
| 533 | } | 414 | } |
| 534 | 415 | ||
| 535 | int | 416 | int |
| 536 | tls_config_set_ca_mem(struct tls_config *config, const uint8_t *ca, size_t len) | 417 | tls_config_set_ca_mem(struct tls_config *config, const uint8_t *ca, size_t len) |
| 537 | { | 418 | { |
| 538 | return set_mem(&config->ca_mem, &config->ca_len, ca, len); | 419 | return tls_set_mem(&config->ca_mem, &config->ca_len, ca, len); |
| 539 | } | 420 | } |
| 540 | 421 | ||
| 541 | int | 422 | int |
| @@ -579,7 +460,7 @@ tls_config_set_ciphers(struct tls_config *config, const char *ciphers) | |||
| 579 | } | 460 | } |
| 580 | 461 | ||
| 581 | SSL_CTX_free(ssl_ctx); | 462 | SSL_CTX_free(ssl_ctx); |
| 582 | return set_string(&config->ciphers, ciphers); | 463 | return tls_set_string(&config->ciphers, ciphers); |
| 583 | 464 | ||
| 584 | err: | 465 | err: |
| 585 | SSL_CTX_free(ssl_ctx); | 466 | SSL_CTX_free(ssl_ctx); |
| @@ -597,7 +478,7 @@ int | |||
| 597 | tls_config_set_crl_mem(struct tls_config *config, const uint8_t *crl, | 478 | tls_config_set_crl_mem(struct tls_config *config, const uint8_t *crl, |
| 598 | size_t len) | 479 | size_t len) |
| 599 | { | 480 | { |
| 600 | return set_mem(&config->crl_mem, &config->crl_len, crl, len); | 481 | return tls_set_mem(&config->crl_mem, &config->crl_len, crl, len); |
| 601 | } | 482 | } |
| 602 | 483 | ||
| 603 | int | 484 | int |
