diff options
author | jsing <> | 2020-09-11 17:36:27 +0000 |
---|---|---|
committer | jsing <> | 2020-09-11 17:36:27 +0000 |
commit | 188f2a73ec9cc4314b9998227079cccb89e8677a (patch) | |
tree | 62dedc456145da98fc6ed3e6c1be5685fe0e1232 /src/lib/libssl/ssl_ciphers.c | |
parent | 044cfc226bee4d04817ab4f4d3a6b1d0ab4db4ed (diff) | |
download | openbsd-188f2a73ec9cc4314b9998227079cccb89e8677a.tar.gz openbsd-188f2a73ec9cc4314b9998227079cccb89e8677a.tar.bz2 openbsd-188f2a73ec9cc4314b9998227079cccb89e8677a.zip |
Remove cipher_list_by_id.
When parsing a cipher string, a cipher list is created, before being
duplicated and sorted - the second copy being stored as cipher_list_by_id.
This is done only so that a client can ensure that the cipher selected by
a server is in the cipher list. This is pretty pointless given that most
clients are short-lived and that we already had to iterate over the cipher
list in order to build the client hello. Additionally, any update to the
cipher list requires that cipher_list_by_id also be updated and kept in
sync.
Remove all of this and replace it with a simple linear scan - the overhead
of duplicating and sorting the cipher list likely exceeds that of a simple
linear scan over the cipher list (64 maximum, more typically ~9 or so).
ok beck@ tb@
Diffstat (limited to 'src/lib/libssl/ssl_ciphers.c')
-rw-r--r-- | src/lib/libssl/ssl_ciphers.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/lib/libssl/ssl_ciphers.c b/src/lib/libssl/ssl_ciphers.c index d13ce7a9c5..478238bd10 100644 --- a/src/lib/libssl/ssl_ciphers.c +++ b/src/lib/libssl/ssl_ciphers.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_ciphers.c,v 1.5 2020/09/11 15:28:07 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_ciphers.c,v 1.6 2020/09/11 17:36:27 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2015-2017 Doug Hogan <doug@openbsd.org> | 3 | * Copyright (c) 2015-2017 Doug Hogan <doug@openbsd.org> |
4 | * Copyright (c) 2015-2018 Joel Sing <jsing@openbsd.org> | 4 | * Copyright (c) 2015-2018 Joel Sing <jsing@openbsd.org> |
@@ -23,6 +23,19 @@ | |||
23 | #include "ssl_locl.h" | 23 | #include "ssl_locl.h" |
24 | 24 | ||
25 | int | 25 | int |
26 | ssl_cipher_in_list(STACK_OF(SSL_CIPHER) *ciphers, const SSL_CIPHER *cipher) | ||
27 | { | ||
28 | int i; | ||
29 | |||
30 | for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) { | ||
31 | if (sk_SSL_CIPHER_value(ciphers, i)->id == cipher->id) | ||
32 | return 1; | ||
33 | } | ||
34 | |||
35 | return 0; | ||
36 | } | ||
37 | |||
38 | int | ||
26 | ssl_cipher_allowed_in_version_range(const SSL_CIPHER *cipher, uint16_t min_ver, | 39 | ssl_cipher_allowed_in_version_range(const SSL_CIPHER *cipher, uint16_t min_ver, |
27 | uint16_t max_ver) | 40 | uint16_t max_ver) |
28 | { | 41 | { |