class TTTLS13::Message::Extension::KeyShare
rubocop: disable Metrics/ClassLength
Attributes
extension_type[R]
msg_type[R]
Public Class Methods
deserialize(binary, msg_type)
click to toggle source
@param binary [String] @param msg_type
[TTTLS13::Message::HandshakeType]
@raise [TTTLS13::Error::ErrorAlerts]
@return [TTTLS13::Message::Extensions::KeyShare, nil] rubocop: disable Metrics/CyclomaticComplexity
# File lib/tttls1.3/message/extension/key_share.rb, line 60 def self.deserialize(binary, msg_type) raise Error::ErrorAlerts, :internal_error if binary.nil? case msg_type when HandshakeType::CLIENT_HELLO key_share_entry = deserialize_keyshare_ch(binary) return nil \ unless key_share_entry.all?(&:valid_key_share_client_hello?) when HandshakeType::SERVER_HELLO key_share_entry = deserialize_keyshare_sh(binary) return nil \ unless key_share_entry.first.valid_key_share_server_hello? when HandshakeType::HELLO_RETRY_REQUEST key_share_entry = deserialize_keyshare_hrr(binary) return nil \ unless key_share_entry.first.valid_key_share_hello_retry_request? else raise Error::ErrorAlerts, :internal_error end return nil if key_share_entry.nil? KeyShare.new(msg_type: msg_type, key_share_entry: key_share_entry) end
new(msg_type:, key_share_entry: [])
click to toggle source
@param msg_type
[TTTLS13::Message::ContentType] @param key_share_entry
[Array of KeyShareEntry]
@raise [TTTLS13::Error::ErrorAlerts] rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity
# File lib/tttls1.3/message/extension/key_share.rb, line 20 def initialize(msg_type:, key_share_entry: []) @extension_type = ExtensionType::KEY_SHARE @msg_type = msg_type @key_share_entry = key_share_entry || [] raise Error::ErrorAlerts, :internal_error \ unless (@msg_type == HandshakeType::CLIENT_HELLO && @key_share_entry.length >= 0 && @key_share_entry.all?(&:valid_key_share_client_hello?)) || (@msg_type == HandshakeType::SERVER_HELLO && @key_share_entry.length == 1 && @key_share_entry.first.valid_key_share_server_hello?) || (@msg_type == HandshakeType::HELLO_RETRY_REQUEST && @key_share_entry.length == 1 && @key_share_entry.first.valid_key_share_hello_retry_request?) end
Private Class Methods
Public Instance Methods
serialize()
click to toggle source
@raise [TTTLS13::Error::ErrorAlerts]
@return [String]
# File lib/tttls1.3/message/extension/key_share.rb, line 41 def serialize case @msg_type when HandshakeType::CLIENT_HELLO binary = @key_share_entry.map(&:serialize).join.prefix_uint16_length when HandshakeType::SERVER_HELLO, HandshakeType::HELLO_RETRY_REQUEST binary = @key_share_entry.first.serialize else raise Error::ErrorAlerts, :internal_error end @extension_type + binary.prefix_uint16_length end