diff options
| author | jsing <> | 2017-04-30 02:10:22 +0000 |
|---|---|---|
| committer | jsing <> | 2017-04-30 02:10:22 +0000 |
| commit | 96042d526d63a7861681d11582499c1b80c07d95 (patch) | |
| tree | b2a98d26632721cd7dcc50af3f5b4c30d4d54476 /src/lib/libtls/tls_config.c | |
| parent | 4541d0e1983fb22c8b7e4b187edd1909fa53e7de (diff) | |
| download | openbsd-96042d526d63a7861681d11582499c1b80c07d95.tar.gz openbsd-96042d526d63a7861681d11582499c1b80c07d95.tar.bz2 openbsd-96042d526d63a7861681d11582499c1b80c07d95.zip | |
Add a tls_keypair_clear_key() function that uses freezero() to make key
material inaccessible, then call it from the appropriate places.
ok beck@
Diffstat (limited to 'src/lib/libtls/tls_config.c')
| -rw-r--r-- | src/lib/libtls/tls_config.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/lib/libtls/tls_config.c b/src/lib/libtls/tls_config.c index f5e0bf55e4..65063117e2 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.37 2017/04/05 03:13:53 beck Exp $ */ | 1 | /* $OpenBSD: tls_config.c,v 1.38 2017/04/30 02:10:22 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -67,6 +67,14 @@ tls_keypair_new(void) | |||
| 67 | return calloc(1, sizeof(struct tls_keypair)); | 67 | return calloc(1, sizeof(struct tls_keypair)); |
| 68 | } | 68 | } |
| 69 | 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 | |||
| 70 | static int | 78 | static int |
| 71 | tls_keypair_set_cert_file(struct tls_keypair *keypair, struct tls_error *error, | 79 | tls_keypair_set_cert_file(struct tls_keypair *keypair, struct tls_error *error, |
| 72 | const char *cert_file) | 80 | const char *cert_file) |
| @@ -86,8 +94,7 @@ static int | |||
| 86 | tls_keypair_set_key_file(struct tls_keypair *keypair, struct tls_error *error, | 94 | tls_keypair_set_key_file(struct tls_keypair *keypair, struct tls_error *error, |
| 87 | const char *key_file) | 95 | const char *key_file) |
| 88 | { | 96 | { |
| 89 | if (keypair->key_mem != NULL) | 97 | tls_keypair_clear_key(keypair); |
| 90 | explicit_bzero(keypair->key_mem, keypair->key_len); | ||
| 91 | return tls_config_load_file(error, "key", key_file, | 98 | return tls_config_load_file(error, "key", key_file, |
| 92 | &keypair->key_mem, &keypair->key_len); | 99 | &keypair->key_mem, &keypair->key_len); |
| 93 | } | 100 | } |
| @@ -96,8 +103,7 @@ static int | |||
| 96 | tls_keypair_set_key_mem(struct tls_keypair *keypair, const uint8_t *key, | 103 | tls_keypair_set_key_mem(struct tls_keypair *keypair, const uint8_t *key, |
| 97 | size_t len) | 104 | size_t len) |
| 98 | { | 105 | { |
| 99 | if (keypair->key_mem != NULL) | 106 | tls_keypair_clear_key(keypair); |
| 100 | explicit_bzero(keypair->key_mem, keypair->key_len); | ||
| 101 | return set_mem(&keypair->key_mem, &keypair->key_len, key, len); | 107 | return set_mem(&keypair->key_mem, &keypair->key_len, key, len); |
| 102 | } | 108 | } |
| 103 | 109 | ||
