diff options
author | jsing <> | 2018-02-08 05:56:49 +0000 |
---|---|---|
committer | jsing <> | 2018-02-08 05:56:49 +0000 |
commit | 301cd3fd1c4d17417a8493c71729c759ffcaf161 (patch) | |
tree | 0abe458cace64c392a0381ff03a5068a69ab19c6 /src/lib/libtls/tls_config.c | |
parent | 427ccd3eed962ca8e1dcfdbedde0f36b48b047de (diff) | |
download | openbsd-301cd3fd1c4d17417a8493c71729c759ffcaf161.tar.gz openbsd-301cd3fd1c4d17417a8493c71729c759ffcaf161.tar.bz2 openbsd-301cd3fd1c4d17417a8493c71729c759ffcaf161.zip |
Split keypair handling out into its own file - it had already appeared
in multiple locations.
ok beck@
Diffstat (limited to 'src/lib/libtls/tls_config.c')
-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 |