summaryrefslogtreecommitdiff
path: root/src/lib/libtls/tls_server.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libtls/tls_server.c (renamed from src/lib/libressl/ressl_server.c)82
1 files changed, 29 insertions, 53 deletions
diff --git a/src/lib/libressl/ressl_server.c b/src/lib/libtls/tls_server.c
index 4783674a0b..001f19ded4 100644
--- a/src/lib/libressl/ressl_server.c
+++ b/src/lib/libtls/tls_server.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ressl_server.c,v 1.11 2014/10/15 14:08:26 jsing Exp $ */ 1/* $OpenBSD: tls_server.c,v 1.1 2014/10/31 13:46:17 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -18,48 +18,48 @@
18#include <openssl/ec.h> 18#include <openssl/ec.h>
19#include <openssl/ssl.h> 19#include <openssl/ssl.h>
20 20
21#include <ressl.h> 21#include <tls.h>
22#include "ressl_internal.h" 22#include "tls_internal.h"
23 23
24struct ressl * 24struct tls *
25ressl_server(void) 25tls_server(void)
26{ 26{
27 struct ressl *ctx; 27 struct tls *ctx;
28 28
29 if ((ctx = ressl_new()) == NULL) 29 if ((ctx = tls_new()) == NULL)
30 return (NULL); 30 return (NULL);
31 31
32 ctx->flags |= RESSL_SERVER; 32 ctx->flags |= TLS_SERVER;
33 33
34 return (ctx); 34 return (ctx);
35} 35}
36 36
37struct ressl * 37struct tls *
38ressl_server_conn(struct ressl *ctx) 38tls_server_conn(struct tls *ctx)
39{ 39{
40 struct ressl *conn_ctx; 40 struct tls *conn_ctx;
41 41
42 if ((conn_ctx = ressl_new()) == NULL) 42 if ((conn_ctx = tls_new()) == NULL)
43 return (NULL); 43 return (NULL);
44 44
45 conn_ctx->flags |= RESSL_SERVER_CONN; 45 conn_ctx->flags |= TLS_SERVER_CONN;
46 46
47 return (conn_ctx); 47 return (conn_ctx);
48} 48}
49 49
50int 50int
51ressl_configure_server(struct ressl *ctx) 51tls_configure_server(struct tls *ctx)
52{ 52{
53 EC_KEY *ecdh_key; 53 EC_KEY *ecdh_key;
54 54
55 if ((ctx->ssl_ctx = SSL_CTX_new(SSLv23_server_method())) == NULL) { 55 if ((ctx->ssl_ctx = SSL_CTX_new(SSLv23_server_method())) == NULL) {
56 ressl_set_error(ctx, "ssl context failure"); 56 tls_set_error(ctx, "ssl context failure");
57 goto err; 57 goto err;
58 } 58 }
59 59
60 if (ressl_configure_ssl(ctx) != 0) 60 if (tls_configure_ssl(ctx) != 0)
61 goto err; 61 goto err;
62 if (ressl_configure_keypair(ctx) != 0) 62 if (tls_configure_keypair(ctx) != 0)
63 goto err; 63 goto err;
64 64
65 if (ctx->config->ecdhcurve == -1) { 65 if (ctx->config->ecdhcurve == -1) {
@@ -67,7 +67,7 @@ ressl_configure_server(struct ressl *ctx)
67 } else if (ctx->config->ecdhcurve != NID_undef) { 67 } else if (ctx->config->ecdhcurve != NID_undef) {
68 if ((ecdh_key = EC_KEY_new_by_curve_name( 68 if ((ecdh_key = EC_KEY_new_by_curve_name(
69 ctx->config->ecdhcurve)) == NULL) { 69 ctx->config->ecdhcurve)) == NULL) {
70 ressl_set_error(ctx, "failed to set ECDH curve"); 70 tls_set_error(ctx, "failed to set ECDH curve");
71 goto err; 71 goto err;
72 } 72 }
73 SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_SINGLE_ECDH_USE); 73 SSL_CTX_set_options(ctx->ssl_ctx, SSL_OP_SINGLE_ECDH_USE);
@@ -82,43 +82,19 @@ err:
82} 82}
83 83
84int 84int
85ressl_listen(struct ressl *ctx, const char *host, const char *port, int af) 85tls_accept_socket(struct tls *ctx, struct tls **cctx, int socket)
86{ 86{
87 if ((ctx->flags & RESSL_SERVER) == 0) { 87 struct tls *conn_ctx = *cctx;
88 ressl_set_error(ctx, "not a server context");
89 goto err;
90 }
91
92err:
93 return (-1);
94}
95
96int
97ressl_accept(struct ressl *ctx, struct ressl **cctx)
98{
99 if ((ctx->flags & RESSL_SERVER) == 0) {
100 ressl_set_error(ctx, "not a server context");
101 goto err;
102 }
103
104err:
105 return (-1);
106}
107
108int
109ressl_accept_socket(struct ressl *ctx, struct ressl **cctx, int socket)
110{
111 struct ressl *conn_ctx = *cctx;
112 int ret, ssl_err; 88 int ret, ssl_err;
113 89
114 if ((ctx->flags & RESSL_SERVER) == 0) { 90 if ((ctx->flags & TLS_SERVER) == 0) {
115 ressl_set_error(ctx, "not a server context"); 91 tls_set_error(ctx, "not a server context");
116 goto err; 92 goto err;
117 } 93 }
118 94
119 if (conn_ctx == NULL) { 95 if (conn_ctx == NULL) {
120 if ((conn_ctx = ressl_server_conn(ctx)) == NULL) { 96 if ((conn_ctx = tls_server_conn(ctx)) == NULL) {
121 ressl_set_error(ctx, "connection context failure"); 97 tls_set_error(ctx, "connection context failure");
122 goto err; 98 goto err;
123 } 99 }
124 *cctx = conn_ctx; 100 *cctx = conn_ctx;
@@ -126,12 +102,12 @@ ressl_accept_socket(struct ressl *ctx, struct ressl **cctx, int socket)
126 conn_ctx->socket = socket; 102 conn_ctx->socket = socket;
127 103
128 if ((conn_ctx->ssl_conn = SSL_new(ctx->ssl_ctx)) == NULL) { 104 if ((conn_ctx->ssl_conn = SSL_new(ctx->ssl_ctx)) == NULL) {
129 ressl_set_error(ctx, "ssl failure"); 105 tls_set_error(ctx, "ssl failure");
130 goto err; 106 goto err;
131 } 107 }
132 108
133 if (SSL_set_fd(conn_ctx->ssl_conn, socket) != 1) { 109 if (SSL_set_fd(conn_ctx->ssl_conn, socket) != 1) {
134 ressl_set_error(ctx, "ssl set fd failure"); 110 tls_set_error(ctx, "ssl set fd failure");
135 goto err; 111 goto err;
136 } 112 }
137 SSL_set_app_data(conn_ctx->ssl_conn, conn_ctx); 113 SSL_set_app_data(conn_ctx->ssl_conn, conn_ctx);
@@ -141,11 +117,11 @@ ressl_accept_socket(struct ressl *ctx, struct ressl **cctx, int socket)
141 ssl_err = SSL_get_error(conn_ctx->ssl_conn, ret); 117 ssl_err = SSL_get_error(conn_ctx->ssl_conn, ret);
142 switch (ssl_err) { 118 switch (ssl_err) {
143 case SSL_ERROR_WANT_READ: 119 case SSL_ERROR_WANT_READ:
144 return (RESSL_READ_AGAIN); 120 return (TLS_READ_AGAIN);
145 case SSL_ERROR_WANT_WRITE: 121 case SSL_ERROR_WANT_WRITE:
146 return (RESSL_WRITE_AGAIN); 122 return (TLS_WRITE_AGAIN);
147 default: 123 default:
148 ressl_set_error(ctx, "ssl accept failure (%i)", 124 tls_set_error(ctx, "ssl accept failure (%i)",
149 ssl_err); 125 ssl_err);
150 goto err; 126 goto err;
151 } 127 }