diff options
author | tb <> | 2019-01-18 06:51:29 +0000 |
---|---|---|
committer | tb <> | 2019-01-18 06:51:29 +0000 |
commit | fb4a09a2789629d9170734e4abf21db26759af09 (patch) | |
tree | 70c0ca15e6911a048a8bb8f91c644ab649918bf5 /src/lib/libssl/tls13_handshake.c | |
parent | 27316df66bde8a25fc42bd8e033092a11ca6b46d (diff) | |
download | openbsd-fb4a09a2789629d9170734e4abf21db26759af09.tar.gz openbsd-fb4a09a2789629d9170734e4abf21db26759af09.tar.bz2 openbsd-fb4a09a2789629d9170734e4abf21db26759af09.zip |
Expose some symbols in a new tls13_handshake.h for regression testing.
Update the handshake state tables and flag names according to the
design decisions and naming conventions in the hackroom. Garbage collect
some things that turn out not to belong here.
ok jsing
Diffstat (limited to 'src/lib/libssl/tls13_handshake.c')
-rw-r--r-- | src/lib/libssl/tls13_handshake.c | 132 |
1 files changed, 40 insertions, 92 deletions
diff --git a/src/lib/libssl/tls13_handshake.c b/src/lib/libssl/tls13_handshake.c index 930e6e4be2..77e59f1930 100644 --- a/src/lib/libssl/tls13_handshake.c +++ b/src/lib/libssl/tls13_handshake.c | |||
@@ -1,6 +1,7 @@ | |||
1 | /* $OpenBSD: tls13_handshake.c,v 1.7 2018/11/11 06:49:35 beck Exp $ */ | 1 | /* $OpenBSD: tls13_handshake.c,v 1.8 2019/01/18 06:51:29 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> | 3 | * Copyright (c) 2018-2019 Theo Buehler <tb@openbsd.org> |
4 | * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> | ||
4 | * | 5 | * |
5 | * Permission to use, copy, modify, and distribute this software for any | 6 | * Permission to use, copy, modify, and distribute this software for any |
6 | * purpose with or without fee is hereby granted, provided that the above | 7 | * purpose with or without fee is hereby granted, provided that the above |
@@ -17,6 +18,7 @@ | |||
17 | 18 | ||
18 | #include <stddef.h> | 19 | #include <stddef.h> |
19 | 20 | ||
21 | #include "tls13_handshake.h" | ||
20 | #include "tls13_internal.h" | 22 | #include "tls13_internal.h" |
21 | 23 | ||
22 | /* Based on RFC 8446 and inspired by s2n's TLS 1.2 state machine. */ | 24 | /* Based on RFC 8446 and inspired by s2n's TLS 1.2 state machine. */ |
@@ -28,11 +30,6 @@ | |||
28 | /* Indexing into the state machine */ | 30 | /* Indexing into the state machine */ |
29 | struct tls13_handshake { | 31 | struct tls13_handshake { |
30 | uint8_t hs_type; | 32 | uint8_t hs_type; |
31 | #define INITIAL 0x00 | ||
32 | #define NEGOTIATED 0x01 | ||
33 | #define WITH_CERT_REQ 0x02 | ||
34 | #define WITH_HELLO_RET_REQ 0x04 | ||
35 | #define WITH_PSK 0x08 | ||
36 | int message_number; | 33 | int message_number; |
37 | }; | 34 | }; |
38 | 35 | ||
@@ -66,27 +63,6 @@ int tls13_handshake_send_action(struct tls13_ctx *ctx, | |||
66 | int tls13_handshake_recv_action(struct tls13_ctx *ctx, | 63 | int tls13_handshake_recv_action(struct tls13_ctx *ctx, |
67 | struct tls13_handshake_action *action); | 64 | struct tls13_handshake_action *action); |
68 | 65 | ||
69 | enum tls13_message_type { | ||
70 | INVALID, | ||
71 | CLIENT_HELLO, | ||
72 | CLIENT_HELLO_RETRY, | ||
73 | CLIENT_END_OF_EARLY_DATA, | ||
74 | CLIENT_CERTIFICATE, | ||
75 | CLIENT_CERTIFICATE_VERIFY, | ||
76 | CLIENT_FINISHED, | ||
77 | CLIENT_KEY_UPDATE, | ||
78 | SERVER_HELLO, | ||
79 | SERVER_NEW_SESSION_TICKET, | ||
80 | SERVER_ENCRYPTED_EXTENSIONS, | ||
81 | SERVER_CERTIFICATE, | ||
82 | SERVER_CERTIFICATE_VERIFY, | ||
83 | SERVER_CERTIFICATE_REQUEST, | ||
84 | SERVER_FINISHED, | ||
85 | SERVER_KEY_UPDATE, | ||
86 | SERVER_MESSAGE_HASH, | ||
87 | APPLICATION_DATA, | ||
88 | }; | ||
89 | |||
90 | struct tls13_handshake_action state_machine[] = { | 66 | struct tls13_handshake_action state_machine[] = { |
91 | [CLIENT_HELLO] = { | 67 | [CLIENT_HELLO] = { |
92 | .record_type = TLS13_HANDSHAKE, | 68 | .record_type = TLS13_HANDSHAKE, |
@@ -144,13 +120,6 @@ struct tls13_handshake_action state_machine[] = { | |||
144 | .send = tls13_server_hello_send, | 120 | .send = tls13_server_hello_send, |
145 | .recv = tls13_server_hello_recv, | 121 | .recv = tls13_server_hello_recv, |
146 | }, | 122 | }, |
147 | [SERVER_NEW_SESSION_TICKET] = { | ||
148 | .record_type = TLS13_HANDSHAKE, | ||
149 | .handshake_type = TLS13_MT_NEW_SESSION_TICKET, | ||
150 | .sender = TLS13_HS_SERVER, | ||
151 | .send = tls13_server_new_session_ticket_send, | ||
152 | .recv = tls13_server_new_session_ticket_recv, | ||
153 | }, | ||
154 | [SERVER_ENCRYPTED_EXTENSIONS] = { | 123 | [SERVER_ENCRYPTED_EXTENSIONS] = { |
155 | .record_type = TLS13_HANDSHAKE, | 124 | .record_type = TLS13_HANDSHAKE, |
156 | .handshake_type = TLS13_MT_ENCRYPTED_EXTENSIONS, | 125 | .handshake_type = TLS13_MT_ENCRYPTED_EXTENSIONS, |
@@ -186,20 +155,6 @@ struct tls13_handshake_action state_machine[] = { | |||
186 | .send = tls13_server_finished_send, | 155 | .send = tls13_server_finished_send, |
187 | .recv = tls13_server_finished_recv, | 156 | .recv = tls13_server_finished_recv, |
188 | }, | 157 | }, |
189 | [SERVER_KEY_UPDATE] = { | ||
190 | .record_type = TLS13_HANDSHAKE, | ||
191 | .handshake_type = TLS13_MT_KEY_UPDATE, | ||
192 | .sender = TLS13_HS_SERVER, | ||
193 | .send = tls13_server_key_update_send, | ||
194 | .recv = tls13_server_key_update_recv, | ||
195 | }, | ||
196 | [SERVER_MESSAGE_HASH] = { | ||
197 | .record_type = TLS13_HANDSHAKE, | ||
198 | .handshake_type = TLS13_MT_MESSAGE_HASH, | ||
199 | .sender = TLS13_HS_SERVER, | ||
200 | .send = tls13_server_message_hash_send, | ||
201 | .recv = tls13_server_message_hash_recv, | ||
202 | }, | ||
203 | [APPLICATION_DATA] = { | 158 | [APPLICATION_DATA] = { |
204 | .record_type = TLS13_APPLICATION_DATA, | 159 | .record_type = TLS13_APPLICATION_DATA, |
205 | .handshake_type = 0, | 160 | .handshake_type = 0, |
@@ -209,7 +164,7 @@ struct tls13_handshake_action state_machine[] = { | |||
209 | }, | 164 | }, |
210 | }; | 165 | }; |
211 | 166 | ||
212 | static enum tls13_message_type handshakes[][16] = { | 167 | static enum tls13_message_type handshakes[][TLS13_NUM_MESSAGE_TYPES] = { |
213 | [INITIAL] = { | 168 | [INITIAL] = { |
214 | CLIENT_HELLO, | 169 | CLIENT_HELLO, |
215 | SERVER_HELLO, | 170 | SERVER_HELLO, |
@@ -218,16 +173,30 @@ static enum tls13_message_type handshakes[][16] = { | |||
218 | CLIENT_HELLO, | 173 | CLIENT_HELLO, |
219 | SERVER_HELLO, | 174 | SERVER_HELLO, |
220 | SERVER_ENCRYPTED_EXTENSIONS, | 175 | SERVER_ENCRYPTED_EXTENSIONS, |
176 | SERVER_CERTIFICATE_REQUEST, | ||
221 | SERVER_CERTIFICATE, | 177 | SERVER_CERTIFICATE, |
222 | SERVER_CERTIFICATE_VERIFY, | 178 | SERVER_CERTIFICATE_VERIFY, |
223 | SERVER_FINISHED, | 179 | SERVER_FINISHED, |
180 | CLIENT_CERTIFICATE, | ||
224 | CLIENT_FINISHED, | 181 | CLIENT_FINISHED, |
225 | APPLICATION_DATA, | 182 | APPLICATION_DATA, |
226 | }, | 183 | }, |
227 | [NEGOTIATED | WITH_HELLO_RET_REQ] = { | 184 | [NEGOTIATED | WITH_CCV] = { |
185 | CLIENT_HELLO, | ||
186 | SERVER_HELLO, | ||
187 | SERVER_ENCRYPTED_EXTENSIONS, | ||
188 | SERVER_CERTIFICATE_REQUEST, | ||
189 | SERVER_CERTIFICATE, | ||
190 | SERVER_CERTIFICATE_VERIFY, | ||
191 | SERVER_FINISHED, | ||
192 | CLIENT_CERTIFICATE, | ||
193 | CLIENT_CERTIFICATE_VERIFY, | ||
194 | CLIENT_FINISHED, | ||
195 | APPLICATION_DATA, | ||
196 | }, | ||
197 | [NEGOTIATED | WITHOUT_CR] = { | ||
228 | CLIENT_HELLO, | 198 | CLIENT_HELLO, |
229 | SERVER_HELLO, | 199 | SERVER_HELLO, |
230 | CLIENT_HELLO_RETRY, | ||
231 | SERVER_ENCRYPTED_EXTENSIONS, | 200 | SERVER_ENCRYPTED_EXTENSIONS, |
232 | SERVER_CERTIFICATE, | 201 | SERVER_CERTIFICATE, |
233 | SERVER_CERTIFICATE_VERIFY, | 202 | SERVER_CERTIFICATE_VERIFY, |
@@ -235,18 +204,28 @@ static enum tls13_message_type handshakes[][16] = { | |||
235 | CLIENT_FINISHED, | 204 | CLIENT_FINISHED, |
236 | APPLICATION_DATA, | 205 | APPLICATION_DATA, |
237 | }, | 206 | }, |
238 | [NEGOTIATED | WITH_CERT_REQ] = { | 207 | [NEGOTIATED | WITH_PSK] = { |
239 | CLIENT_HELLO, | 208 | CLIENT_HELLO, |
240 | SERVER_HELLO, | 209 | SERVER_HELLO, |
241 | SERVER_ENCRYPTED_EXTENSIONS, | 210 | SERVER_ENCRYPTED_EXTENSIONS, |
211 | SERVER_FINISHED, | ||
212 | CLIENT_FINISHED, | ||
213 | APPLICATION_DATA, | ||
214 | }, | ||
215 | [NEGOTIATED | WITH_HRR] = { | ||
216 | CLIENT_HELLO, | ||
217 | SERVER_HELLO, | ||
218 | CLIENT_HELLO_RETRY, | ||
219 | SERVER_ENCRYPTED_EXTENSIONS, | ||
242 | SERVER_CERTIFICATE_REQUEST, | 220 | SERVER_CERTIFICATE_REQUEST, |
243 | SERVER_CERTIFICATE, | 221 | SERVER_CERTIFICATE, |
244 | SERVER_CERTIFICATE_VERIFY, | 222 | SERVER_CERTIFICATE_VERIFY, |
245 | SERVER_FINISHED, | 223 | SERVER_FINISHED, |
224 | CLIENT_CERTIFICATE, | ||
246 | CLIENT_FINISHED, | 225 | CLIENT_FINISHED, |
247 | APPLICATION_DATA, | 226 | APPLICATION_DATA, |
248 | }, | 227 | }, |
249 | [NEGOTIATED | WITH_HELLO_RET_REQ | WITH_CERT_REQ] = { | 228 | [NEGOTIATED | WITH_HRR | WITH_CCV] = { |
250 | CLIENT_HELLO, | 229 | CLIENT_HELLO, |
251 | SERVER_HELLO, | 230 | SERVER_HELLO, |
252 | CLIENT_HELLO_RETRY, | 231 | CLIENT_HELLO_RETRY, |
@@ -255,18 +234,23 @@ static enum tls13_message_type handshakes[][16] = { | |||
255 | SERVER_CERTIFICATE, | 234 | SERVER_CERTIFICATE, |
256 | SERVER_CERTIFICATE_VERIFY, | 235 | SERVER_CERTIFICATE_VERIFY, |
257 | SERVER_FINISHED, | 236 | SERVER_FINISHED, |
237 | CLIENT_CERTIFICATE, | ||
238 | CLIENT_CERTIFICATE_VERIFY, | ||
258 | CLIENT_FINISHED, | 239 | CLIENT_FINISHED, |
259 | APPLICATION_DATA, | 240 | APPLICATION_DATA, |
260 | }, | 241 | }, |
261 | [NEGOTIATED | WITH_PSK] = { | 242 | [NEGOTIATED | WITH_HRR | WITHOUT_CR] = { |
262 | CLIENT_HELLO, | 243 | CLIENT_HELLO, |
263 | SERVER_HELLO, | 244 | SERVER_HELLO, |
245 | CLIENT_HELLO_RETRY, | ||
264 | SERVER_ENCRYPTED_EXTENSIONS, | 246 | SERVER_ENCRYPTED_EXTENSIONS, |
247 | SERVER_CERTIFICATE, | ||
248 | SERVER_CERTIFICATE_VERIFY, | ||
265 | SERVER_FINISHED, | 249 | SERVER_FINISHED, |
266 | CLIENT_FINISHED, | 250 | CLIENT_FINISHED, |
267 | APPLICATION_DATA, | 251 | APPLICATION_DATA, |
268 | }, | 252 | }, |
269 | [NEGOTIATED | WITH_HELLO_RET_REQ | WITH_PSK] = { | 253 | [NEGOTIATED | WITH_HRR | WITH_PSK] = { |
270 | CLIENT_HELLO, | 254 | CLIENT_HELLO, |
271 | SERVER_HELLO, | 255 | SERVER_HELLO, |
272 | CLIENT_HELLO_RETRY, | 256 | CLIENT_HELLO_RETRY, |
@@ -470,18 +454,6 @@ tls13_server_hello_send(struct tls13_ctx *ctx) | |||
470 | } | 454 | } |
471 | 455 | ||
472 | int | 456 | int |
473 | tls13_server_new_session_ticket_recv(struct tls13_ctx *ctx) | ||
474 | { | ||
475 | return 1; | ||
476 | } | ||
477 | |||
478 | int | ||
479 | tls13_server_new_session_ticket_send(struct tls13_ctx *ctx) | ||
480 | { | ||
481 | return 1; | ||
482 | } | ||
483 | |||
484 | int | ||
485 | tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx) | 457 | tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx) |
486 | { | 458 | { |
487 | return 1; | 459 | return 1; |
@@ -540,27 +512,3 @@ tls13_server_finished_send(struct tls13_ctx *ctx) | |||
540 | { | 512 | { |
541 | return 1; | 513 | return 1; |
542 | } | 514 | } |
543 | |||
544 | int | ||
545 | tls13_server_key_update_recv(struct tls13_ctx *ctx) | ||
546 | { | ||
547 | return 1; | ||
548 | } | ||
549 | |||
550 | int | ||
551 | tls13_server_key_update_send(struct tls13_ctx *ctx) | ||
552 | { | ||
553 | return 1; | ||
554 | } | ||
555 | |||
556 | int | ||
557 | tls13_server_message_hash_recv(struct tls13_ctx *ctx) | ||
558 | { | ||
559 | return 1; | ||
560 | } | ||
561 | |||
562 | int | ||
563 | tls13_server_message_hash_send(struct tls13_ctx *ctx) | ||
564 | { | ||
565 | return 1; | ||
566 | } | ||