summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2021-07-03 16:06:45 +0000
committerjsing <>2021-07-03 16:06:45 +0000
commit70e6e6179f5b7c30c5e842ff74f348f67cedf838 (patch)
tree58fdc59b50658cb38625bc6b82f9d37d8af2cb2a
parente79eb28078c0d90b4c659f0698359ae69f15f007 (diff)
downloadopenbsd-70e6e6179f5b7c30c5e842ff74f348f67cedf838.tar.gz
openbsd-70e6e6179f5b7c30c5e842ff74f348f67cedf838.tar.bz2
openbsd-70e6e6179f5b7c30c5e842ff74f348f67cedf838.zip
Do a first pass clean up of SSL_METHOD.
The num_ciphers, get_cipher_by_char and put_cipher_by_char function pointers use the same function for all methods - call ssl3_num_ciphers() directly, absorb ssl3_get_cipher_by_char() into SSL_CIPHER_find() and remove the unused ssl3_put_cipher_by_char() code. ok inoguchi@ tb@
-rw-r--r--src/lib/libssl/s3_lib.c47
-rw-r--r--src/lib/libssl/ssl_ciph.c14
-rw-r--r--src/lib/libssl/ssl_locl.h6
-rw-r--r--src/lib/libssl/ssl_methods.c50
4 files changed, 14 insertions, 103 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index 125c108f02..b2d94629c2 100644
--- a/src/lib/libssl/s3_lib.c
+++ b/src/lib/libssl/s3_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: s3_lib.c,v 1.212 2021/07/01 17:53:39 jsing Exp $ */ 1/* $OpenBSD: s3_lib.c,v 1.213 2021/07/03 16:06:44 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -2484,51 +2484,6 @@ ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
2484 return 0; 2484 return 0;
2485} 2485}
2486 2486
2487/*
2488 * This function needs to check if the ciphers required are actually available.
2489 */
2490const SSL_CIPHER *
2491ssl3_get_cipher_by_char(const unsigned char *p)
2492{
2493 uint16_t cipher_value;
2494 CBS cbs;
2495
2496 /* We have to assume it is at least 2 bytes due to existing API. */
2497 CBS_init(&cbs, p, 2);
2498 if (!CBS_get_u16(&cbs, &cipher_value))
2499 return NULL;
2500
2501 return ssl3_get_cipher_by_value(cipher_value);
2502}
2503
2504int
2505ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
2506{
2507 CBB cbb;
2508
2509 if (p == NULL)
2510 return (2);
2511
2512 if ((c->id & ~SSL3_CK_VALUE_MASK) != SSL3_CK_ID)
2513 return (0);
2514
2515 memset(&cbb, 0, sizeof(cbb));
2516
2517 /* We have to assume it is at least 2 bytes due to existing API. */
2518 if (!CBB_init_fixed(&cbb, p, 2))
2519 goto err;
2520 if (!CBB_add_u16(&cbb, ssl3_cipher_get_value(c)))
2521 goto err;
2522 if (!CBB_finish(&cbb, NULL, NULL))
2523 goto err;
2524
2525 return (2);
2526
2527 err:
2528 CBB_cleanup(&cbb);
2529 return (0);
2530}
2531
2532SSL_CIPHER * 2487SSL_CIPHER *
2533ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, 2488ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
2534 STACK_OF(SSL_CIPHER) *srvr) 2489 STACK_OF(SSL_CIPHER) *srvr)
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c
index bf22c4ed99..0e9941bc0b 100644
--- a/src/lib/libssl/ssl_ciph.c
+++ b/src/lib/libssl/ssl_ciph.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_ciph.c,v 1.123 2021/05/16 08:24:21 jsing Exp $ */ 1/* $OpenBSD: ssl_ciph.c,v 1.124 2021/07/03 16:06:44 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -1228,7 +1228,7 @@ ssl_create_cipher_list(const SSL_METHOD *ssl_method,
1228 * in ciphers. We cannot get more than the number compiled in, so 1228 * in ciphers. We cannot get more than the number compiled in, so
1229 * it is used for allocation. 1229 * it is used for allocation.
1230 */ 1230 */
1231 num_of_ciphers = ssl_method->num_ciphers(); 1231 num_of_ciphers = ssl3_num_ciphers();
1232 co_list = reallocarray(NULL, num_of_ciphers, sizeof(CIPHER_ORDER)); 1232 co_list = reallocarray(NULL, num_of_ciphers, sizeof(CIPHER_ORDER));
1233 if (co_list == NULL) { 1233 if (co_list == NULL) {
1234 SSLerrorx(ERR_R_MALLOC_FAILURE); 1234 SSLerrorx(ERR_R_MALLOC_FAILURE);
@@ -1603,7 +1603,15 @@ SSL_CIPHER_get_value(const SSL_CIPHER *c)
1603const SSL_CIPHER * 1603const SSL_CIPHER *
1604SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr) 1604SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr)
1605{ 1605{
1606 return ssl->method->get_cipher_by_char(ptr); 1606 uint16_t cipher_value;
1607 CBS cbs;
1608
1609 /* This API is documented with ptr being an array of length two. */
1610 CBS_init(&cbs, ptr, 2);
1611 if (!CBS_get_u16(&cbs, &cipher_value))
1612 return NULL;
1613
1614 return ssl3_get_cipher_by_value(cipher_value);
1607} 1615}
1608 1616
1609int 1617int
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index 6ffc2e053c..677feca157 100644
--- a/src/lib/libssl/ssl_locl.h
+++ b/src/lib/libssl/ssl_locl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_locl.h,v 1.354 2021/07/01 17:53:39 jsing Exp $ */ 1/* $OpenBSD: ssl_locl.h,v 1.355 2021/07/03 16:06:45 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -403,10 +403,7 @@ struct ssl_method_st {
403 int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len); 403 int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len);
404 404
405 int (*ssl_dispatch_alert)(SSL *s); 405 int (*ssl_dispatch_alert)(SSL *s);
406 int (*num_ciphers)(void);
407 const SSL_CIPHER *(*get_cipher)(unsigned int ncipher); 406 const SSL_CIPHER *(*get_cipher)(unsigned int ncipher);
408 const SSL_CIPHER *(*get_cipher_by_char)(const unsigned char *ptr);
409 int (*put_cipher_by_char)(const SSL_CIPHER *cipher, unsigned char *ptr);
410 407
411 unsigned int enc_flags; /* SSL_ENC_FLAG_* */ 408 unsigned int enc_flags; /* SSL_ENC_FLAG_* */
412}; 409};
@@ -1229,7 +1226,6 @@ int ssl_verify_alarm_type(long type);
1229int SSL_SESSION_ticket(SSL_SESSION *ss, unsigned char **out, size_t *out_len); 1226int SSL_SESSION_ticket(SSL_SESSION *ss, unsigned char **out, size_t *out_len);
1230 1227
1231const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p); 1228const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p);
1232int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p);
1233int ssl3_send_server_certificate(SSL *s); 1229int ssl3_send_server_certificate(SSL *s);
1234int ssl3_send_newsession_ticket(SSL *s); 1230int ssl3_send_newsession_ticket(SSL *s);
1235int ssl3_send_cert_status(SSL *s); 1231int ssl3_send_cert_status(SSL *s);
diff --git a/src/lib/libssl/ssl_methods.c b/src/lib/libssl/ssl_methods.c
index a3097c37b9..b9b8a95e56 100644
--- a/src/lib/libssl/ssl_methods.c
+++ b/src/lib/libssl/ssl_methods.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_methods.c,v 1.26 2021/07/01 17:53:39 jsing Exp $ */ 1/* $OpenBSD: ssl_methods.c,v 1.27 2021/07/03 16:06:45 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -78,10 +78,7 @@ static const SSL_METHOD DTLS_method_data = {
78 .ssl_read_bytes = dtls1_read_bytes, 78 .ssl_read_bytes = dtls1_read_bytes,
79 .ssl_write_bytes = dtls1_write_app_data_bytes, 79 .ssl_write_bytes = dtls1_write_app_data_bytes,
80 .ssl_dispatch_alert = dtls1_dispatch_alert, 80 .ssl_dispatch_alert = dtls1_dispatch_alert,
81 .num_ciphers = ssl3_num_ciphers,
82 .get_cipher = dtls1_get_cipher, 81 .get_cipher = dtls1_get_cipher,
83 .get_cipher_by_char = ssl3_get_cipher_by_char,
84 .put_cipher_by_char = ssl3_put_cipher_by_char,
85 .enc_flags = TLSV1_2_ENC_FLAGS, 82 .enc_flags = TLSV1_2_ENC_FLAGS,
86}; 83};
87 84
@@ -103,10 +100,7 @@ static const SSL_METHOD DTLS_client_method_data = {
103 .ssl_read_bytes = dtls1_read_bytes, 100 .ssl_read_bytes = dtls1_read_bytes,
104 .ssl_write_bytes = dtls1_write_app_data_bytes, 101 .ssl_write_bytes = dtls1_write_app_data_bytes,
105 .ssl_dispatch_alert = dtls1_dispatch_alert, 102 .ssl_dispatch_alert = dtls1_dispatch_alert,
106 .num_ciphers = ssl3_num_ciphers,
107 .get_cipher = dtls1_get_cipher, 103 .get_cipher = dtls1_get_cipher,
108 .get_cipher_by_char = ssl3_get_cipher_by_char,
109 .put_cipher_by_char = ssl3_put_cipher_by_char,
110 .enc_flags = TLSV1_2_ENC_FLAGS, 104 .enc_flags = TLSV1_2_ENC_FLAGS,
111}; 105};
112 106
@@ -128,10 +122,7 @@ static const SSL_METHOD DTLSv1_method_data = {
128 .ssl_read_bytes = dtls1_read_bytes, 122 .ssl_read_bytes = dtls1_read_bytes,
129 .ssl_write_bytes = dtls1_write_app_data_bytes, 123 .ssl_write_bytes = dtls1_write_app_data_bytes,
130 .ssl_dispatch_alert = dtls1_dispatch_alert, 124 .ssl_dispatch_alert = dtls1_dispatch_alert,
131 .num_ciphers = ssl3_num_ciphers,
132 .get_cipher = dtls1_get_cipher, 125 .get_cipher = dtls1_get_cipher,
133 .get_cipher_by_char = ssl3_get_cipher_by_char,
134 .put_cipher_by_char = ssl3_put_cipher_by_char,
135 .enc_flags = TLSV1_1_ENC_FLAGS, 126 .enc_flags = TLSV1_1_ENC_FLAGS,
136}; 127};
137 128
@@ -153,10 +144,7 @@ static const SSL_METHOD DTLSv1_client_method_data = {
153 .ssl_read_bytes = dtls1_read_bytes, 144 .ssl_read_bytes = dtls1_read_bytes,
154 .ssl_write_bytes = dtls1_write_app_data_bytes, 145 .ssl_write_bytes = dtls1_write_app_data_bytes,
155 .ssl_dispatch_alert = dtls1_dispatch_alert, 146 .ssl_dispatch_alert = dtls1_dispatch_alert,
156 .num_ciphers = ssl3_num_ciphers,
157 .get_cipher = dtls1_get_cipher, 147 .get_cipher = dtls1_get_cipher,
158 .get_cipher_by_char = ssl3_get_cipher_by_char,
159 .put_cipher_by_char = ssl3_put_cipher_by_char,
160 .enc_flags = TLSV1_1_ENC_FLAGS, 148 .enc_flags = TLSV1_1_ENC_FLAGS,
161}; 149};
162 150
@@ -178,10 +166,7 @@ static const SSL_METHOD DTLSv1_2_method_data = {
178 .ssl_read_bytes = dtls1_read_bytes, 166 .ssl_read_bytes = dtls1_read_bytes,
179 .ssl_write_bytes = dtls1_write_app_data_bytes, 167 .ssl_write_bytes = dtls1_write_app_data_bytes,
180 .ssl_dispatch_alert = dtls1_dispatch_alert, 168 .ssl_dispatch_alert = dtls1_dispatch_alert,
181 .num_ciphers = ssl3_num_ciphers,
182 .get_cipher = dtls1_get_cipher, 169 .get_cipher = dtls1_get_cipher,
183 .get_cipher_by_char = ssl3_get_cipher_by_char,
184 .put_cipher_by_char = ssl3_put_cipher_by_char,
185 .enc_flags = TLSV1_2_ENC_FLAGS, 170 .enc_flags = TLSV1_2_ENC_FLAGS,
186}; 171};
187 172
@@ -203,10 +188,7 @@ static const SSL_METHOD DTLSv1_2_client_method_data = {
203 .ssl_read_bytes = dtls1_read_bytes, 188 .ssl_read_bytes = dtls1_read_bytes,
204 .ssl_write_bytes = dtls1_write_app_data_bytes, 189 .ssl_write_bytes = dtls1_write_app_data_bytes,
205 .ssl_dispatch_alert = dtls1_dispatch_alert, 190 .ssl_dispatch_alert = dtls1_dispatch_alert,
206 .num_ciphers = ssl3_num_ciphers,
207 .get_cipher = dtls1_get_cipher, 191 .get_cipher = dtls1_get_cipher,
208 .get_cipher_by_char = ssl3_get_cipher_by_char,
209 .put_cipher_by_char = ssl3_put_cipher_by_char,
210 .enc_flags = TLSV1_2_ENC_FLAGS, 192 .enc_flags = TLSV1_2_ENC_FLAGS,
211}; 193};
212 194
@@ -283,10 +265,7 @@ static const SSL_METHOD TLS_method_data = {
283 .ssl_read_bytes = tls13_legacy_read_bytes, 265 .ssl_read_bytes = tls13_legacy_read_bytes,
284 .ssl_write_bytes = tls13_legacy_write_bytes, 266 .ssl_write_bytes = tls13_legacy_write_bytes,
285 .ssl_dispatch_alert = ssl3_dispatch_alert, 267 .ssl_dispatch_alert = ssl3_dispatch_alert,
286 .num_ciphers = ssl3_num_ciphers,
287 .get_cipher = ssl3_get_cipher, 268 .get_cipher = ssl3_get_cipher,
288 .get_cipher_by_char = ssl3_get_cipher_by_char,
289 .put_cipher_by_char = ssl3_put_cipher_by_char,
290 .enc_flags = TLSV1_3_ENC_FLAGS, 269 .enc_flags = TLSV1_3_ENC_FLAGS,
291}; 270};
292#endif 271#endif
@@ -309,10 +288,7 @@ static const SSL_METHOD TLS_legacy_method_data = {
309 .ssl_read_bytes = ssl3_read_bytes, 288 .ssl_read_bytes = ssl3_read_bytes,
310 .ssl_write_bytes = ssl3_write_bytes, 289 .ssl_write_bytes = ssl3_write_bytes,
311 .ssl_dispatch_alert = ssl3_dispatch_alert, 290 .ssl_dispatch_alert = ssl3_dispatch_alert,
312 .num_ciphers = ssl3_num_ciphers,
313 .get_cipher = ssl3_get_cipher, 291 .get_cipher = ssl3_get_cipher,
314 .get_cipher_by_char = ssl3_get_cipher_by_char,
315 .put_cipher_by_char = ssl3_put_cipher_by_char,
316 .enc_flags = TLSV1_2_ENC_FLAGS, 292 .enc_flags = TLSV1_2_ENC_FLAGS,
317}; 293};
318 294
@@ -335,10 +311,7 @@ static const SSL_METHOD TLS_client_method_data = {
335 .ssl_read_bytes = tls13_legacy_read_bytes, 311 .ssl_read_bytes = tls13_legacy_read_bytes,
336 .ssl_write_bytes = tls13_legacy_write_bytes, 312 .ssl_write_bytes = tls13_legacy_write_bytes,
337 .ssl_dispatch_alert = ssl3_dispatch_alert, 313 .ssl_dispatch_alert = ssl3_dispatch_alert,
338 .num_ciphers = ssl3_num_ciphers,
339 .get_cipher = ssl3_get_cipher, 314 .get_cipher = ssl3_get_cipher,
340 .get_cipher_by_char = ssl3_get_cipher_by_char,
341 .put_cipher_by_char = ssl3_put_cipher_by_char,
342 .enc_flags = TLSV1_3_ENC_FLAGS, 315 .enc_flags = TLSV1_3_ENC_FLAGS,
343}; 316};
344 317
@@ -362,10 +335,7 @@ static const SSL_METHOD TLS_legacy_client_method_data = {
362 .ssl_read_bytes = ssl3_read_bytes, 335 .ssl_read_bytes = ssl3_read_bytes,
363 .ssl_write_bytes = ssl3_write_bytes, 336 .ssl_write_bytes = ssl3_write_bytes,
364 .ssl_dispatch_alert = ssl3_dispatch_alert, 337 .ssl_dispatch_alert = ssl3_dispatch_alert,
365 .num_ciphers = ssl3_num_ciphers,
366 .get_cipher = ssl3_get_cipher, 338 .get_cipher = ssl3_get_cipher,
367 .get_cipher_by_char = ssl3_get_cipher_by_char,
368 .put_cipher_by_char = ssl3_put_cipher_by_char,
369 .enc_flags = TLSV1_2_ENC_FLAGS, 339 .enc_flags = TLSV1_2_ENC_FLAGS,
370}; 340};
371#endif 341#endif
@@ -388,10 +358,7 @@ static const SSL_METHOD TLSv1_method_data = {
388 .ssl_read_bytes = ssl3_read_bytes, 358 .ssl_read_bytes = ssl3_read_bytes,
389 .ssl_write_bytes = ssl3_write_bytes, 359 .ssl_write_bytes = ssl3_write_bytes,
390 .ssl_dispatch_alert = ssl3_dispatch_alert, 360 .ssl_dispatch_alert = ssl3_dispatch_alert,
391 .num_ciphers = ssl3_num_ciphers,
392 .get_cipher = ssl3_get_cipher, 361 .get_cipher = ssl3_get_cipher,
393 .get_cipher_by_char = ssl3_get_cipher_by_char,
394 .put_cipher_by_char = ssl3_put_cipher_by_char,
395 .enc_flags = TLSV1_ENC_FLAGS, 362 .enc_flags = TLSV1_ENC_FLAGS,
396}; 363};
397 364
@@ -413,10 +380,7 @@ static const SSL_METHOD TLSv1_client_method_data = {
413 .ssl_read_bytes = ssl3_read_bytes, 380 .ssl_read_bytes = ssl3_read_bytes,
414 .ssl_write_bytes = ssl3_write_bytes, 381 .ssl_write_bytes = ssl3_write_bytes,
415 .ssl_dispatch_alert = ssl3_dispatch_alert, 382 .ssl_dispatch_alert = ssl3_dispatch_alert,
416 .num_ciphers = ssl3_num_ciphers,
417 .get_cipher = ssl3_get_cipher, 383 .get_cipher = ssl3_get_cipher,
418 .get_cipher_by_char = ssl3_get_cipher_by_char,
419 .put_cipher_by_char = ssl3_put_cipher_by_char,
420 .enc_flags = TLSV1_ENC_FLAGS, 384 .enc_flags = TLSV1_ENC_FLAGS,
421}; 385};
422 386
@@ -438,10 +402,7 @@ static const SSL_METHOD TLSv1_1_method_data = {
438 .ssl_read_bytes = ssl3_read_bytes, 402 .ssl_read_bytes = ssl3_read_bytes,
439 .ssl_write_bytes = ssl3_write_bytes, 403 .ssl_write_bytes = ssl3_write_bytes,
440 .ssl_dispatch_alert = ssl3_dispatch_alert, 404 .ssl_dispatch_alert = ssl3_dispatch_alert,
441 .num_ciphers = ssl3_num_ciphers,
442 .get_cipher = ssl3_get_cipher, 405 .get_cipher = ssl3_get_cipher,
443 .get_cipher_by_char = ssl3_get_cipher_by_char,
444 .put_cipher_by_char = ssl3_put_cipher_by_char,
445 .enc_flags = TLSV1_1_ENC_FLAGS, 406 .enc_flags = TLSV1_1_ENC_FLAGS,
446}; 407};
447 408
@@ -463,10 +424,7 @@ static const SSL_METHOD TLSv1_1_client_method_data = {
463 .ssl_read_bytes = ssl3_read_bytes, 424 .ssl_read_bytes = ssl3_read_bytes,
464 .ssl_write_bytes = ssl3_write_bytes, 425 .ssl_write_bytes = ssl3_write_bytes,
465 .ssl_dispatch_alert = ssl3_dispatch_alert, 426 .ssl_dispatch_alert = ssl3_dispatch_alert,
466 .num_ciphers = ssl3_num_ciphers,
467 .get_cipher = ssl3_get_cipher, 427 .get_cipher = ssl3_get_cipher,
468 .get_cipher_by_char = ssl3_get_cipher_by_char,
469 .put_cipher_by_char = ssl3_put_cipher_by_char,
470 .enc_flags = TLSV1_1_ENC_FLAGS, 428 .enc_flags = TLSV1_1_ENC_FLAGS,
471}; 429};
472 430
@@ -488,10 +446,7 @@ static const SSL_METHOD TLSv1_2_method_data = {
488 .ssl_read_bytes = ssl3_read_bytes, 446 .ssl_read_bytes = ssl3_read_bytes,
489 .ssl_write_bytes = ssl3_write_bytes, 447 .ssl_write_bytes = ssl3_write_bytes,
490 .ssl_dispatch_alert = ssl3_dispatch_alert, 448 .ssl_dispatch_alert = ssl3_dispatch_alert,
491 .num_ciphers = ssl3_num_ciphers,
492 .get_cipher = ssl3_get_cipher, 449 .get_cipher = ssl3_get_cipher,
493 .get_cipher_by_char = ssl3_get_cipher_by_char,
494 .put_cipher_by_char = ssl3_put_cipher_by_char,
495 .enc_flags = TLSV1_2_ENC_FLAGS, 450 .enc_flags = TLSV1_2_ENC_FLAGS,
496}; 451};
497 452
@@ -513,10 +468,7 @@ static const SSL_METHOD TLSv1_2_client_method_data = {
513 .ssl_read_bytes = ssl3_read_bytes, 468 .ssl_read_bytes = ssl3_read_bytes,
514 .ssl_write_bytes = ssl3_write_bytes, 469 .ssl_write_bytes = ssl3_write_bytes,
515 .ssl_dispatch_alert = ssl3_dispatch_alert, 470 .ssl_dispatch_alert = ssl3_dispatch_alert,
516 .num_ciphers = ssl3_num_ciphers,
517 .get_cipher = ssl3_get_cipher, 471 .get_cipher = ssl3_get_cipher,
518 .get_cipher_by_char = ssl3_get_cipher_by_char,
519 .put_cipher_by_char = ssl3_put_cipher_by_char,
520 .enc_flags = TLSV1_2_ENC_FLAGS, 472 .enc_flags = TLSV1_2_ENC_FLAGS,
521}; 473};
522 474