From 94cd4e1498e3808121c7a8759901d28f4b43a7fd Mon Sep 17 00:00:00 2001 From: 0x676e67 Date: Thu, 20 Mar 2025 23:15:54 +0800 Subject: [PATCH] chore(boring): simplify extensions sort order calculation (#58) --- boring/src/ssl/mod.rs | 37 ++++++++----------------------- boring/src/ssl/test/extensions.rs | 10 +++++++++ boring/src/ssl/test/mod.rs | 1 + 3 files changed, 20 insertions(+), 28 deletions(-) create mode 100644 boring/src/ssl/test/extensions.rs diff --git a/boring/src/ssl/mod.rs b/boring/src/ssl/mod.rs index bee784a9..18759048 100644 --- a/boring/src/ssl/mod.rs +++ b/boring/src/ssl/mod.rs @@ -609,35 +609,16 @@ impl ExtensionType { /// Returns the index of the given extension type in the permutation. pub const fn index_of(value: ExtensionType) -> Option { - match value { - ExtensionType::SERVER_NAME => Some(0), - ExtensionType::ENCRYPTED_CLIENT_HELLO => Some(1), - ExtensionType::EXTENDED_MASTER_SECRET => Some(2), - ExtensionType::RENEGOTIATE => Some(3), - ExtensionType::SUPPORTED_GROUPS => Some(4), - ExtensionType::EC_POINT_FORMATS => Some(5), - ExtensionType::SESSION_TICKET => Some(6), - ExtensionType::APPLICATION_LAYER_PROTOCOL_NEGOTIATION => Some(7), - ExtensionType::STATUS_REQUEST => Some(8), - ExtensionType::SIGNATURE_ALGORITHMS => Some(9), - ExtensionType::NEXT_PROTO_NEG => Some(10), - ExtensionType::CERTIFICATE_TIMESTAMP => Some(11), - ExtensionType::CHANNEL_ID => Some(12), - ExtensionType::SRTP => Some(13), - ExtensionType::KEY_SHARE => Some(14), - ExtensionType::PSK_KEY_EXCHANGE_MODES => Some(15), - ExtensionType::EARLY_DATA => Some(16), - ExtensionType::SUPPORTED_VERSIONS => Some(17), - ExtensionType::COOKIE => Some(18), - ExtensionType::QUIC_TRANSPORT_PARAMETERS_STANDARD => Some(19), - ExtensionType::QUIC_TRANSPORT_PARAMETERS_LEGACY => Some(20), - ExtensionType::CERT_COMPRESSION => Some(21), - ExtensionType::DELEGATED_CREDENTIAL => Some(22), - ExtensionType::APPLICATION_SETTINGS => Some(23), - ExtensionType::APPLICATION_SETTINGS_NEW => Some(24), - ExtensionType::RECORD_SIZE_LIMIT => Some(25), - _ => None, + let mut i = 0; + while i < Self::BORING_SSLEXTENSION_PERMUTATION.len() { + if i < Self::BORING_SSLEXTENSION_PERMUTATION.len() + && Self::BORING_SSLEXTENSION_PERMUTATION[i].0 == value.0 + { + return Some(i); + } + i += 1; } + None } } diff --git a/boring/src/ssl/test/extensions.rs b/boring/src/ssl/test/extensions.rs new file mode 100644 index 00000000..7dff7d55 --- /dev/null +++ b/boring/src/ssl/test/extensions.rs @@ -0,0 +1,10 @@ +use crate::ssl::ExtensionType; + +#[test] +fn test_exntension_order_index() { + let mut i = 0; + for ext in ExtensionType::BORING_SSLEXTENSION_PERMUTATION { + assert_eq!(ExtensionType::index_of(*ext), Some(i)); + i += 1; + } +} diff --git a/boring/src/ssl/test/mod.rs b/boring/src/ssl/test/mod.rs index ab11780e..a1085561 100644 --- a/boring/src/ssl/test/mod.rs +++ b/boring/src/ssl/test/mod.rs @@ -28,6 +28,7 @@ mod cert_verify; mod custom_verify; #[cfg(not(feature = "fips"))] mod ech; +mod extensions; mod private_key_method; mod server; mod session;