diff options
Diffstat (limited to 'src/lib/libtls/tls_config.c')
| -rw-r--r-- | src/lib/libtls/tls_config.c | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/lib/libtls/tls_config.c b/src/lib/libtls/tls_config.c index 0d52704aa8..c07621acaf 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.27 2016/08/13 13:15:53 jsing Exp $ */ | 1 | /* $OpenBSD: tls_config.c,v 1.28 2016/08/22 14:55:59 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -227,6 +227,18 @@ tls_config_free(struct tls_config *config) | |||
| 227 | free(config); | 227 | free(config); |
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | static void | ||
| 231 | tls_config_keypair_add(struct tls_config *config, struct tls_keypair *keypair) | ||
| 232 | { | ||
| 233 | struct tls_keypair *kp; | ||
| 234 | |||
| 235 | kp = config->keypair; | ||
| 236 | while (kp->next != NULL) | ||
| 237 | kp = kp->next; | ||
| 238 | |||
| 239 | kp->next = keypair; | ||
| 240 | } | ||
| 241 | |||
| 230 | const char * | 242 | const char * |
| 231 | tls_config_error(struct tls_config *config) | 243 | tls_config_error(struct tls_config *config) |
| 232 | { | 244 | { |
| @@ -370,6 +382,50 @@ tls_config_set_alpn(struct tls_config *config, const char *alpn) | |||
| 370 | } | 382 | } |
| 371 | 383 | ||
| 372 | int | 384 | int |
| 385 | tls_config_add_keypair_file(struct tls_config *config, | ||
| 386 | const char *cert_file, const char *key_file) | ||
| 387 | { | ||
| 388 | struct tls_keypair *keypair; | ||
| 389 | |||
| 390 | if ((keypair = tls_keypair_new()) == NULL) | ||
| 391 | return (-1); | ||
| 392 | if (tls_keypair_set_cert_file(keypair, &config->error, cert_file) != 0) | ||
| 393 | goto err; | ||
| 394 | if (tls_keypair_set_key_file(keypair, &config->error, key_file) != 0) | ||
| 395 | goto err; | ||
| 396 | |||
| 397 | tls_config_keypair_add(config, keypair); | ||
| 398 | |||
| 399 | return (0); | ||
| 400 | |||
| 401 | err: | ||
| 402 | tls_keypair_free(keypair); | ||
| 403 | return (-1); | ||
| 404 | } | ||
| 405 | |||
| 406 | int | ||
| 407 | tls_config_add_keypair_mem(struct tls_config *config, const uint8_t *cert, | ||
| 408 | size_t cert_len, const uint8_t *key, size_t key_len) | ||
| 409 | { | ||
| 410 | struct tls_keypair *keypair; | ||
| 411 | |||
| 412 | if ((keypair = tls_keypair_new()) == NULL) | ||
| 413 | return (-1); | ||
| 414 | if (tls_keypair_set_cert_mem(keypair, cert, cert_len) != 0) | ||
| 415 | goto err; | ||
| 416 | if (tls_keypair_set_key_mem(keypair, key, key_len) != 0) | ||
| 417 | goto err; | ||
| 418 | |||
| 419 | tls_config_keypair_add(config, keypair); | ||
| 420 | |||
| 421 | return (0); | ||
| 422 | |||
| 423 | err: | ||
| 424 | tls_keypair_free(keypair); | ||
| 425 | return (-1); | ||
| 426 | } | ||
| 427 | |||
| 428 | int | ||
| 373 | tls_config_set_ca_file(struct tls_config *config, const char *ca_file) | 429 | tls_config_set_ca_file(struct tls_config *config, const char *ca_file) |
| 374 | { | 430 | { |
| 375 | return tls_config_load_file(&config->error, "CA", ca_file, | 431 | return tls_config_load_file(&config->error, "CA", ca_file, |
