class TTTLS13::Message::ServerHello
Attributes
cipher_suite[R]
extensions[R]
legacy_compression_method[R]
legacy_session_id_echo[R]
legacy_version[R]
msg_type[R]
random[R]
Public Class Methods
deserialize(binary)
click to toggle source
@param binary [String]
@raise [TTTLS13::Error::ErrorAlerts]
@return [TTTLS13::Message::ServerHello] rubocop: disable Metrics/AbcSize rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/MethodLength rubocop: disable Metrics/PerceivedComplexity
# File lib/tttls1.3/message/server_hello.rb, line 90 def self.deserialize(binary) raise Error::ErrorAlerts, :internal_error if binary.nil? raise Error::ErrorAlerts, :decode_error if binary.length < 39 raise Error::ErrorAlerts, :internal_error \ unless binary[0] == HandshakeType::SERVER_HELLO msg_len = Convert.bin2i(binary.slice(1, 3)) legacy_version = binary.slice(4, 2) random = binary.slice(6, 32) lsid_len = Convert.bin2i(binary[38]) legacy_session_id_echo = binary.slice(39, lsid_len) i = 39 + lsid_len cipher_suite = binary.slice(i, 2) i += 2 legacy_compression_method = binary[i] i += 1 exs_len = Convert.bin2i(binary.slice(i, 2)) i += 2 exs_bin = binary.slice(i, exs_len) if random == HRR_RANDOM msg_type = HandshakeType::HELLO_RETRY_REQUEST @hrr = true else msg_type = HandshakeType::SERVER_HELLO @hrr = false end extensions = Extensions.deserialize(exs_bin, msg_type) i += exs_len raise Error::ErrorAlerts, :decode_error unless i == msg_len + 4 && i == binary.length ServerHello.new(legacy_version: legacy_version, random: random, legacy_session_id_echo: legacy_session_id_echo, cipher_suite: cipher_suite, legacy_compression_method: legacy_compression_method, extensions: extensions) end
new(legacy_version: ProtocolVersion::TLS_1_2, random: OpenSSL::Random.random_bytes(32), legacy_session_id_echo:, cipher_suite:, legacy_compression_method: "\x00", extensions: Extensions.new)
click to toggle source
@param legacy_version
[String] @param random [String] @param legacy_session_id_echo
[String] @param cipher_suite
[TTTLS13::CipherSuite] @param legacy_compression_method
[String] @param extensions [TTTLS13::Message::Extensions] rubocop: disable Metrics/ParameterLists
# File lib/tttls1.3/message/server_hello.rb, line 51 def initialize(legacy_version: ProtocolVersion::TLS_1_2, random: OpenSSL::Random.random_bytes(32), legacy_session_id_echo:, cipher_suite:, legacy_compression_method: "\x00", extensions: Extensions.new) @msg_type = HandshakeType::SERVER_HELLO @legacy_version = legacy_version @random = random @legacy_session_id_echo = legacy_session_id_echo @cipher_suite = cipher_suite @legacy_compression_method = legacy_compression_method @extensions = extensions @hrr = (random == HRR_RANDOM) end
Public Instance Methods
appearable_extensions?()
click to toggle source
@return [Boolean]
# File lib/tttls1.3/message/server_hello.rb, line 139 def appearable_extensions? exs = @extensions.keys - APPEARABLE_SH_EXTENSIONS exs = @extensions.keys - APPEARABLE_HRR_EXTENSIONS if hrr? return true if exs.empty? !(exs - DEFINED_EXTENSIONS).empty? end
downgraded?()
click to toggle source
@return [Boolean]
# File lib/tttls1.3/message/server_hello.rb, line 156 def downgraded? [DOWNGRADE_PROTECTION_TLS_1_2, DOWNGRADE_PROTECTION_TLS_1_1].include?(@random[-8..]) end
hrr?()
click to toggle source
@return [Boolean]
# File lib/tttls1.3/message/server_hello.rb, line 134 def hrr? @hrr end
negotiated_tls_1_3?()
click to toggle source
@return [Booelan]
# File lib/tttls1.3/message/server_hello.rb, line 148 def negotiated_tls_1_3? sv = @extensions[Message::ExtensionType::SUPPORTED_VERSIONS] @legacy_version == Message::ProtocolVersion::TLS_1_2 && (sv&.versions || []).first == Message::ProtocolVersion::TLS_1_3 end
serialize()
click to toggle source
@return [String]
# File lib/tttls1.3/message/server_hello.rb, line 69 def serialize binary = '' binary += @legacy_version binary += @random binary += @legacy_session_id_echo.prefix_uint8_length binary += @cipher_suite binary += @legacy_compression_method binary += @extensions.serialize @msg_type + binary.prefix_uint24_length end