summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbeck <>2017-01-31 16:18:57 +0000
committerbeck <>2017-01-31 16:18:57 +0000
commitfb9dca0f0ed93924626f04529bb4dfa85e3ef25e (patch)
tree6cf82628d4d8b9b0ed4d03dd90872a7deae8fcb3
parent5dc75c022fd90332aaa1050db40f77ae54a9f43d (diff)
downloadopenbsd-fb9dca0f0ed93924626f04529bb4dfa85e3ef25e.tar.gz
openbsd-fb9dca0f0ed93924626f04529bb4dfa85e3ef25e.tar.bz2
openbsd-fb9dca0f0ed93924626f04529bb4dfa85e3ef25e.zip
Add tls_config_[add|set]keypair_ocsp functions so that ocsp staples may be
added associated to a keypair used for SNI, and are usable for more than just the "main" certificate. Modify httpd to use this. Bump libtls minor. ok jsing@
-rw-r--r--src/lib/libtls/Symbols.list4
-rw-r--r--src/lib/libtls/man/tls_config_ocsp_require_stapling.333
-rw-r--r--src/lib/libtls/man/tls_load_file.397
-rw-r--r--src/lib/libtls/shlib_version2
-rw-r--r--src/lib/libtls/tls.h18
-rw-r--r--src/lib/libtls/tls_config.c113
6 files changed, 209 insertions, 58 deletions
diff --git a/src/lib/libtls/Symbols.list b/src/lib/libtls/Symbols.list
index a033e3e242..eb704ecbd2 100644
--- a/src/lib/libtls/Symbols.list
+++ b/src/lib/libtls/Symbols.list
@@ -5,6 +5,8 @@ tls_client
5tls_close 5tls_close
6tls_config_add_keypair_file 6tls_config_add_keypair_file
7tls_config_add_keypair_mem 7tls_config_add_keypair_mem
8tls_config_add_keypair_ocsp_file
9tls_config_add_keypair_ocsp_mem
8tls_config_add_ticket_key 10tls_config_add_ticket_key
9tls_config_clear_keys 11tls_config_clear_keys
10tls_config_error 12tls_config_error
@@ -30,6 +32,8 @@ tls_config_set_key_file
30tls_config_set_key_mem 32tls_config_set_key_mem
31tls_config_set_keypair_file 33tls_config_set_keypair_file
32tls_config_set_keypair_mem 34tls_config_set_keypair_mem
35tls_config_set_keypair_ocsp_file
36tls_config_set_keypair_ocsp_mem
33tls_config_set_ocsp_staple_mem 37tls_config_set_ocsp_staple_mem
34tls_config_set_ocsp_staple_file 38tls_config_set_ocsp_staple_file
35tls_config_set_protocols 39tls_config_set_protocols
diff --git a/src/lib/libtls/man/tls_config_ocsp_require_stapling.3 b/src/lib/libtls/man/tls_config_ocsp_require_stapling.3
index 0f532cf8c0..b8b7600904 100644
--- a/src/lib/libtls/man/tls_config_ocsp_require_stapling.3
+++ b/src/lib/libtls/man/tls_config_ocsp_require_stapling.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: tls_config_ocsp_require_stapling.3,v 1.3 2017/01/28 00:59:36 schwarze Exp $ 1.\" $OpenBSD: tls_config_ocsp_require_stapling.3,v 1.4 2017/01/31 16:18:57 beck Exp $
2.\" 2.\"
3.\" Copyright (c) 2016 Bob Beck <beck@openbsd.org> 3.\" Copyright (c) 2016 Bob Beck <beck@openbsd.org>
4.\" 4.\"
@@ -14,46 +14,25 @@
14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16.\" 16.\"
17.Dd $Mdocdate: January 28 2017 $ 17.Dd $Mdocdate: January 31 2017 $
18.Dt TLS_CONFIG_OCSP_REQUIRE_STAPLING 3 18.Dt TLS_CONFIG_OCSP_REQUIRE_STAPLING 3
19.Os 19.Os
20.Sh NAME 20.Sh NAME
21.Nm tls_config_ocsp_require_stapling , 21.Nm tls_config_ocsp_require_stapling ,
22.Nm tls_config_set_ocsp_staple_mem ,
23.Nm tls_config_set_ocsp_staple_file
24.Nd OCSP configuration for libtls 22.Nd OCSP configuration for libtls
25.Sh SYNOPSIS 23.Sh SYNOPSIS
26.In tls.h 24.In tls.h
27.Ft void 25.Ft void
28.Fn tls_config_ocsp_require_stapling "struct tls_config *config" 26.Fn tls_config_ocsp_require_stapling "struct tls_config *config"
29.Ft int
30.Fo tls_config_set_ocsp_staple_mem
31.Fa "struct tls_config *config"
32.Fa "const char *staple"
33.Fa "size_t len"
34.Fc
35.Ft int
36.Fo tls_config_set_ocsp_staple_file
37.Fa "struct tls_config *config"
38.Fa "const char *staple_file"
39.Fc 27.Fc
40.Sh DESCRIPTION 28.Sh DESCRIPTION
41.Fn tls_config_ocsp_require_stapling 29.Fn tls_config_ocsp_require_stapling
42requires that a valid stapled OCSP response be provided during the TLS handshake. 30requires that a valid stapled OCSP response be provided during the TLS handshake.
43.Pp
44.Fn tls_config_set_ocsp_staple_file
45sets a DER-encoded OCSP response to be stapled during the TLS handshake from
46the specified file.
47.Pp
48.Fn tls_config_set_ocsp_staple_mem
49sets a DER-encoded OCSP response to be stapled during the TLS handshake from
50memory.
51.Sh RETURN VALUES
52.Fn tls_config_set_ocsp_staple_mem
53and
54.Fn tls_config_set_ocsp_staple_file
55return 0 on success or -1 on error.
56.Sh SEE ALSO 31.Sh SEE ALSO
32.Xr tls_config_set_keypair_file 3 ,
33.Xr tls_config_set_keypair_mem 3 ,
34.Xr tls_config_add_keypair_file 3 ,
35.Xr tls_config_add_keypair_mem 3 ,
57.Xr tls_handshake 3 , 36.Xr tls_handshake 3 ,
58.Xr tls_init 3 , 37.Xr tls_init 3 ,
59.Xr tls_ocsp_process_response 3 38.Xr tls_ocsp_process_response 3
diff --git a/src/lib/libtls/man/tls_load_file.3 b/src/lib/libtls/man/tls_load_file.3
index eeebd0339e..6c0a025955 100644
--- a/src/lib/libtls/man/tls_load_file.3
+++ b/src/lib/libtls/man/tls_load_file.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: tls_load_file.3,v 1.3 2017/01/28 00:59:36 schwarze Exp $ 1.\" $OpenBSD: tls_load_file.3,v 1.4 2017/01/31 16:18:57 beck Exp $
2.\" 2.\"
3.\" Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> 3.\" Copyright (c) 2014 Ted Unangst <tedu@openbsd.org>
4.\" Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org> 4.\" Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org>
@@ -17,7 +17,7 @@
17.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19.\" 19.\"
20.Dd $Mdocdate: January 28 2017 $ 20.Dd $Mdocdate: January 31 2017 $
21.Dt TLS_LOAD_FILE 3 21.Dt TLS_LOAD_FILE 3
22.Os 22.Os
23.Sh NAME 23.Sh NAME
@@ -29,9 +29,15 @@
29.Nm tls_config_set_cert_mem , 29.Nm tls_config_set_cert_mem ,
30.Nm tls_config_set_key_file , 30.Nm tls_config_set_key_file ,
31.Nm tls_config_set_key_mem , 31.Nm tls_config_set_key_mem ,
32.Nm tls_config_set_ocsp_staple_mem ,
33.Nm tls_config_set_ocsp_staple_file
32.Nm tls_config_set_keypair_file , 34.Nm tls_config_set_keypair_file ,
33.Nm tls_config_set_keypair_mem , 35.Nm tls_config_set_keypair_mem ,
36.Nm tls_config_set_keypair_ocsp_file ,
37.Nm tls_config_set_keypair_ocsp_mem ,
34.Nm tls_config_add_keypair_file , 38.Nm tls_config_add_keypair_file ,
39.Nm tls_config_add_keypair_ocsp_mem ,
40.Nm tls_config_add_keypair_ocsp_file ,
35.Nm tls_config_add_keypair_mem , 41.Nm tls_config_add_keypair_mem ,
36.Nm tls_config_clear_keys , 42.Nm tls_config_clear_keys ,
37.Nm tls_config_set_verify_depth , 43.Nm tls_config_set_verify_depth ,
@@ -83,6 +89,17 @@
83.Fa "struct tls_config *config" 89.Fa "struct tls_config *config"
84.Fa "const uint8_t *key" 90.Fa "const uint8_t *key"
85.Fa "size_t len" 91.Fa "size_t len"
92.Ft int
93.Fc
94.Fo tls_config_set_ocsp_staple_mem
95.Fa "struct tls_config *config"
96.Fa "const uint8_t *staple"
97.Fa "size_t len"
98.Fc
99.Ft int
100.Fo tls_config_set_ocsp_staple_file
101.Fa "struct tls_config *config"
102.Fa "const uint8_t *staple_file"
86.Fc 103.Fc
87.Ft int 104.Ft int
88.Fo tls_config_set_keypair_file 105.Fo tls_config_set_keypair_file
@@ -99,6 +116,23 @@
99.Fa "size_t key_len" 116.Fa "size_t key_len"
100.Fc 117.Fc
101.Ft int 118.Ft int
119.Fo tls_config_set_keypair_ocsp_file
120.Fa "struct tls_config *config"
121.Fa "const char *cert_file"
122.Fa "const char *key_file"
123.Fa "const char *staple_file"
124.Fc
125.Ft int
126.Fo tls_config_set_keypair_ocsp_mem
127.Fa "struct tls_config *config"
128.Fa "const uint8_t *cert"
129.Fa "size_t cert_len"
130.Fa "const uint8_t *key"
131.Fa "size_t key_len"
132.Fa "const uint8_t *staple"
133.Fa "size_t staple_len"
134.Fc
135.Ft int
102.Fo tls_config_add_keypair_file 136.Fo tls_config_add_keypair_file
103.Fa "struct tls_config *config" 137.Fa "struct tls_config *config"
104.Fa "const char *cert_file" 138.Fa "const char *cert_file"
@@ -112,6 +146,23 @@
112.Fa "const uint8_t *key" 146.Fa "const uint8_t *key"
113.Fa "size_t key_len" 147.Fa "size_t key_len"
114.Fc 148.Fc
149.Ft int
150.Fo tls_config_add_keypair_ocsp_file
151.Fa "struct tls_config *config"
152.Fa "const char *cert_file"
153.Fa "const char *key_file"
154.Fa "const char *staple_file"
155.Fc
156.Ft int
157.Fo tls_config_add_keypair_ocsp_mem
158.Fa "struct tls_config *config"
159.Fa "const uint8_t *cert"
160.Fa "size_t cert_len"
161.Fa "const uint8_t *key"
162.Fa "size_t key_len"
163.Fa "const uint8_t *staple"
164.Fa "size_t staple_len"
165.Fc
115.Ft void 166.Ft void
116.Fn tls_config_clear_keys "struct tls_config *config" 167.Fn tls_config_clear_keys "struct tls_config *config"
117.Ft int 168.Ft int
@@ -157,19 +208,46 @@ sets the file from which the private key will be read.
157.Fn tls_config_set_key_mem 208.Fn tls_config_set_key_mem
158directly sets the private key from memory. 209directly sets the private key from memory.
159.Pp 210.Pp
211.Fn tls_config_set_ocsp_staple_file
212sets a DER-encoded OCSP response to be stapled during the TLS handshake from
213the specified file.
214.Pp
215.Fn tls_config_set_ocsp_staple_mem
216sets a DER-encoded OCSP response to be stapled during the TLS handshake from
217memory.
218.Pp
160.Fn tls_config_set_keypair_file 219.Fn tls_config_set_keypair_file
161sets the files from which the public certificate and private key will be read. 220sets the files from which the public certificate, and private key will be read.
162.Pp 221.Pp
163.Fn tls_config_set_keypair_mem 222.Fn tls_config_set_keypair_mem
164directly sets the public certificate and private key from memory. 223directly sets the public certificate, and private key from memory.
224.Pp
225.Fn tls_config_set_keypair_file
226sets the files from which the public certificate, private key, and DER encoded
227ocsp staple will be read.
228.Pp
229.Fn tls_config_set_keypair_ocsp_mem
230directly sets the public certificate, private key, and DER encoded OCSP staple
231from memory.
165.Pp 232.Pp
166.Fn tls_config_add_keypair_file 233.Fn tls_config_add_keypair_file
167adds an additional public certificate and private key from the specified files, 234adds an additional public certificate, and private key from the specified files,
168used as an alternative certificate for Server Name Indication (server only). 235used as an alternative certificate for Server Name Indication (server only).
169.Pp 236.Pp
170.Fn tls_config_add_keypair_mem 237.Fn tls_config_add_keypair_mem
171adds an additional public certificate and private key from memory, 238adds an additional public certificate, and private key from memory, used as an
172used as an alternative certificate for Server Name Indication (server only). 239alternative certificate for Server Name Indication (server only).
240.Pp
241.Pp
242.Fn tls_config_add_keypair_ocsp_file
243adds an additional public certificate, private key, and DER encoded OCSP staple
244from the specified files, used as an alternative certificate for Server Name
245Indication (server only).
246.Pp
247.Fn tls_config_add_keypair_ocsp_mem
248adds an additional public certificate, private key, and DER encoded OCSP staple
249from memory, used as an alternative certificate for Server Name Indication
250(server only).
173.Pp 251.Pp
174.Fn tls_config_clear_keys 252.Fn tls_config_clear_keys
175clears any secret keys from memory. 253clears any secret keys from memory.
@@ -240,12 +318,7 @@ in
240.An Joel Sing Aq Mt jsing@openbsd.org 318.An Joel Sing Aq Mt jsing@openbsd.org
241with contibutions from 319with contibutions from
242.An Ted Unangst Aq Mt tedu@openbsd.org 320.An Ted Unangst Aq Mt tedu@openbsd.org
243.Pp
244.An -nosplit
245.Fn tls_config_verify_client
246and 321and
247.Fn tls_config_verify_client_optional
248were written by
249.An Bob Beck Aq Mt beck@openbsd.org . 322.An Bob Beck Aq Mt beck@openbsd.org .
250.Pp 323.Pp
251.Fn tls_load_file 324.Fn tls_load_file
diff --git a/src/lib/libtls/shlib_version b/src/lib/libtls/shlib_version
index 998729533f..a822f1f180 100644
--- a/src/lib/libtls/shlib_version
+++ b/src/lib/libtls/shlib_version
@@ -1,2 +1,2 @@
1major=15 1major=15
2minor=2 2minor=3
diff --git a/src/lib/libtls/tls.h b/src/lib/libtls/tls.h
index 5680c74182..d9b2972e92 100644
--- a/src/lib/libtls/tls.h
+++ b/src/lib/libtls/tls.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls.h,v 1.46 2017/01/26 12:53:17 jsing Exp $ */ 1/* $OpenBSD: tls.h,v 1.47 2017/01/31 16:18:57 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -89,7 +89,12 @@ int tls_config_add_keypair_file(struct tls_config *_config,
89 const char *_cert_file, const char *_key_file); 89 const char *_cert_file, const char *_key_file);
90int tls_config_add_keypair_mem(struct tls_config *_config, const uint8_t *_cert, 90int tls_config_add_keypair_mem(struct tls_config *_config, const uint8_t *_cert,
91 size_t _cert_len, const uint8_t *_key, size_t _key_len); 91 size_t _cert_len, const uint8_t *_key, size_t _key_len);
92 92int tls_config_add_keypair_ocsp_file(struct tls_config *_config,
93 const char *_cert_file, const char *_key_file,
94 const char *_ocsp_staple_file);
95int tls_config_add_keypair_ocsp_mem(struct tls_config *_config, const uint8_t *_cert,
96 size_t _cert_len, const uint8_t *_key, size_t _key_len,
97 const uint8_t *_staple, size_t _staple_len);
93int tls_config_set_alpn(struct tls_config *_config, const char *_alpn); 98int tls_config_set_alpn(struct tls_config *_config, const char *_alpn);
94int tls_config_set_ca_file(struct tls_config *_config, const char *_ca_file); 99int tls_config_set_ca_file(struct tls_config *_config, const char *_ca_file);
95int tls_config_set_ca_path(struct tls_config *_config, const char *_ca_path); 100int tls_config_set_ca_path(struct tls_config *_config, const char *_ca_path);
@@ -109,8 +114,13 @@ int tls_config_set_keypair_file(struct tls_config *_config,
109 const char *_cert_file, const char *_key_file); 114 const char *_cert_file, const char *_key_file);
110int tls_config_set_keypair_mem(struct tls_config *_config, const uint8_t *_cert, 115int tls_config_set_keypair_mem(struct tls_config *_config, const uint8_t *_cert,
111 size_t _cert_len, const uint8_t *_key, size_t _key_len); 116 size_t _cert_len, const uint8_t *_key, size_t _key_len);
112int tls_config_set_ocsp_staple_mem(struct tls_config *_config, char *_staple, 117int tls_config_set_keypair_ocsp_file(struct tls_config *_config,
113 size_t _len); 118 const char *_cert_file, const char *_key_file, const char *_staple_file);
119int tls_config_set_keypair_ocsp_mem(struct tls_config *_config, const uint8_t *_cert,
120 size_t _cert_len, const uint8_t *_key, size_t _key_len,
121 const uint8_t *_staple, size_t staple_len);
122int tls_config_set_ocsp_staple_mem(struct tls_config *_config,
123 const uint8_t *_staple, size_t _len);
114int tls_config_set_ocsp_staple_file(struct tls_config *_config, 124int tls_config_set_ocsp_staple_file(struct tls_config *_config,
115 const char *_staple_file); 125 const char *_staple_file);
116int tls_config_set_protocols(struct tls_config *_config, uint32_t _protocols); 126int tls_config_set_protocols(struct tls_config *_config, uint32_t _protocols);
diff --git a/src/lib/libtls/tls_config.c b/src/lib/libtls/tls_config.c
index 83c649fd51..87c2166f9e 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.35 2017/01/29 17:52:11 beck Exp $ */ 1/* $OpenBSD: tls_config.c,v 1.36 2017/01/31 16:18:57 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -416,9 +416,9 @@ tls_config_set_alpn(struct tls_config *config, const char *alpn)
416 &config->alpn_len); 416 &config->alpn_len);
417} 417}
418 418
419int 419static int
420tls_config_add_keypair_file(struct tls_config *config, 420tls_config_add_keypair_file_internal(struct tls_config *config,
421 const char *cert_file, const char *key_file) 421 const char *cert_file, const char *key_file, const char *ocsp_file)
422{ 422{
423 struct tls_keypair *keypair; 423 struct tls_keypair *keypair;
424 424
@@ -428,6 +428,10 @@ tls_config_add_keypair_file(struct tls_config *config,
428 goto err; 428 goto err;
429 if (tls_keypair_set_key_file(keypair, &config->error, key_file) != 0) 429 if (tls_keypair_set_key_file(keypair, &config->error, key_file) != 0)
430 goto err; 430 goto err;
431 if (ocsp_file != NULL &&
432 tls_keypair_set_ocsp_staple_file(keypair, &config->error,
433 ocsp_file) != 0)
434 goto err;
431 435
432 tls_config_keypair_add(config, keypair); 436 tls_config_keypair_add(config, keypair);
433 437
@@ -438,9 +442,10 @@ tls_config_add_keypair_file(struct tls_config *config,
438 return (-1); 442 return (-1);
439} 443}
440 444
441int 445static int
442tls_config_add_keypair_mem(struct tls_config *config, const uint8_t *cert, 446tls_config_add_keypair_mem_internal(struct tls_config *config, const uint8_t *cert,
443 size_t cert_len, const uint8_t *key, size_t key_len) 447 size_t cert_len, const uint8_t *key, size_t key_len,
448 const uint8_t *staple, size_t staple_len)
444{ 449{
445 struct tls_keypair *keypair; 450 struct tls_keypair *keypair;
446 451
@@ -450,6 +455,9 @@ tls_config_add_keypair_mem(struct tls_config *config, const uint8_t *cert,
450 goto err; 455 goto err;
451 if (tls_keypair_set_key_mem(keypair, key, key_len) != 0) 456 if (tls_keypair_set_key_mem(keypair, key, key_len) != 0)
452 goto err; 457 goto err;
458 if (staple != NULL &&
459 tls_keypair_set_ocsp_staple_mem(keypair, staple, staple_len) != 0)
460 goto err;
453 461
454 tls_config_keypair_add(config, keypair); 462 tls_config_keypair_add(config, keypair);
455 463
@@ -461,6 +469,39 @@ tls_config_add_keypair_mem(struct tls_config *config, const uint8_t *cert,
461} 469}
462 470
463int 471int
472tls_config_add_keypair_mem(struct tls_config *config, const uint8_t *cert,
473 size_t cert_len, const uint8_t *key, size_t key_len)
474{
475 return tls_config_add_keypair_mem_internal(config, cert, cert_len, key,
476 key_len, NULL, 0);
477}
478
479int
480tls_config_add_keypair_file(struct tls_config *config,
481 const char *cert_file, const char *key_file)
482{
483 return tls_config_add_keypair_file_internal(config, cert_file,
484 key_file, NULL);
485}
486
487int
488tls_config_add_keypair_ocsp_mem(struct tls_config *config, const uint8_t *cert,
489 size_t cert_len, const uint8_t *key, size_t key_len, const uint8_t *staple,
490 size_t staple_len)
491{
492 return tls_config_add_keypair_mem_internal(config, cert, cert_len, key,
493 key_len, staple, staple_len);
494}
495
496int
497tls_config_add_keypair_ocsp_file(struct tls_config *config,
498 const char *cert_file, const char *key_file, const char *ocsp_file)
499{
500 return tls_config_add_keypair_file_internal(config, cert_file,
501 key_file, ocsp_file);
502}
503
504int
464tls_config_set_ca_file(struct tls_config *config, const char *ca_file) 505tls_config_set_ca_file(struct tls_config *config, const char *ca_file)
465{ 506{
466 return tls_config_load_file(&config->error, "CA", ca_file, 507 return tls_config_load_file(&config->error, "CA", ca_file,
@@ -581,31 +622,74 @@ tls_config_set_key_mem(struct tls_config *config, const uint8_t *key,
581 return tls_keypair_set_key_mem(config->keypair, key, len); 622 return tls_keypair_set_key_mem(config->keypair, key, len);
582} 623}
583 624
584int 625static int
585tls_config_set_keypair_file(struct tls_config *config, 626tls_config_set_keypair_file_internal(struct tls_config *config,
586 const char *cert_file, const char *key_file) 627 const char *cert_file, const char *key_file, const char *ocsp_file)
587{ 628{
588 if (tls_config_set_cert_file(config, cert_file) != 0) 629 if (tls_config_set_cert_file(config, cert_file) != 0)
589 return (-1); 630 return (-1);
590 if (tls_config_set_key_file(config, key_file) != 0) 631 if (tls_config_set_key_file(config, key_file) != 0)
591 return (-1); 632 return (-1);
633 if (tls_config_set_key_file(config, key_file) != 0)
634 return (-1);
635 if (ocsp_file != NULL &&
636 tls_config_set_ocsp_staple_file(config, ocsp_file) != 0)
637 return (-1);
592 638
593 return (0); 639 return (0);
594} 640}
595 641
596int 642static int
597tls_config_set_keypair_mem(struct tls_config *config, const uint8_t *cert, 643tls_config_set_keypair_mem_internal(struct tls_config *config, const uint8_t *cert,
598 size_t cert_len, const uint8_t *key, size_t key_len) 644 size_t cert_len, const uint8_t *key, size_t key_len,
645 const uint8_t *staple, size_t staple_len)
599{ 646{
600 if (tls_config_set_cert_mem(config, cert, cert_len) != 0) 647 if (tls_config_set_cert_mem(config, cert, cert_len) != 0)
601 return (-1); 648 return (-1);
602 if (tls_config_set_key_mem(config, key, key_len) != 0) 649 if (tls_config_set_key_mem(config, key, key_len) != 0)
603 return (-1); 650 return (-1);
651 if ((staple != NULL) &&
652 (tls_config_set_ocsp_staple_mem(config, staple, staple_len) != 0))
653 return (-1);
604 654
605 return (0); 655 return (0);
606} 656}
607 657
608int 658int
659tls_config_set_keypair_file(struct tls_config *config,
660 const char *cert_file, const char *key_file)
661{
662 return tls_config_set_keypair_file_internal(config, cert_file, key_file,
663 NULL);
664}
665
666int
667tls_config_set_keypair_mem(struct tls_config *config, const uint8_t *cert,
668 size_t cert_len, const uint8_t *key, size_t key_len)
669{
670 return tls_config_set_keypair_mem_internal(config, cert, cert_len,
671 key, key_len, NULL, 0);
672}
673
674int
675tls_config_set_keypair_ocsp_file(struct tls_config *config,
676 const char *cert_file, const char *key_file, const char *ocsp_file)
677{
678 return tls_config_set_keypair_file_internal(config, cert_file, key_file,
679 ocsp_file);
680}
681
682int
683tls_config_set_keypair_ocsp_mem(struct tls_config *config, const uint8_t *cert,
684 size_t cert_len, const uint8_t *key, size_t key_len,
685 const uint8_t *staple, size_t staple_len)
686{
687 return tls_config_set_keypair_mem_internal(config, cert, cert_len,
688 key, key_len, staple, staple_len);
689}
690
691
692int
609tls_config_set_protocols(struct tls_config *config, uint32_t protocols) 693tls_config_set_protocols(struct tls_config *config, uint32_t protocols)
610{ 694{
611 config->protocols = protocols; 695 config->protocols = protocols;
@@ -685,7 +769,8 @@ tls_config_set_ocsp_staple_file(struct tls_config *config, const char *staple_fi
685} 769}
686 770
687int 771int
688tls_config_set_ocsp_staple_mem(struct tls_config *config, char *staple, size_t len) 772tls_config_set_ocsp_staple_mem(struct tls_config *config, const uint8_t *staple,
773 size_t len)
689{ 774{
690 return tls_keypair_set_ocsp_staple_mem(config->keypair, staple, len); 775 return tls_keypair_set_ocsp_staple_mem(config->keypair, staple, len);
691} 776}