class TTTLS13::Message::Extension::ServerName

NOTE: The extension_data field SHALL be empty when @server_name is empty. Then, serialized extension_data is

00 00 00 00

tools.ietf.org/html/rfc6066#section-3

Attributes

extension_type[R]
server_name[R]

Public Class Methods

deserialize(binary) click to toggle source

@param binary [String]

@raise [TTTLS13::Error::ErrorAlerts]

@return [TTTLS13::Message::Extension::ServerName, nil]

# File lib/tttls1.3/message/extension/server_name.rb, line 56
def self.deserialize(binary)
  raise Error::ErrorAlerts, :internal_error if binary.nil?

  return nil if binary.length == 1
  return ServerName.new('') if binary.empty?

  deserialize_host_name(binary)
end
new(server_name) click to toggle source

@param server_name [String]

@raise [TTTLS13::Error::ErrorAlerts]

@example

ServerName.new('example.com')
# File lib/tttls1.3/message/extension/server_name.rb, line 29
def initialize(server_name)
  @extension_type = ExtensionType::SERVER_NAME
  @server_name = server_name || ''
  raise Error::ErrorAlerts, :internal_error \
    if @server_name.length > 2**16 - 5
end

Private Class Methods

deserialize_host_name(binary) click to toggle source

@param binary [String]

@raise [TTTLS13::Error::ErrorAlerts]

@return [TTTLS13::Message::Extension::ServerName, nil]

# File lib/tttls1.3/message/extension/server_name.rb, line 73
def deserialize_host_name(binary)
  raise Error::ErrorAlerts, :internal_error if binary.nil?

  return nil unless binary.length > 5 &&
                    binary[2] == NameType::HOST_NAME

  snlist_len = Convert.bin2i(binary.slice(0, 2))
  sn_len = Convert.bin2i(binary.slice(3, 2))
  server_name = binary.slice(5, sn_len)
  return nil unless snlist_len + 2 == binary.length &&
                    sn_len + 5 == binary.length

  ServerName.new(server_name)
end

Public Instance Methods

serialize() click to toggle source

@return [String]

# File lib/tttls1.3/message/extension/server_name.rb, line 37
def serialize
  return "\x00\x00\x00\x00" if @server_name.empty?

  sn_len = @server_name.length
  binary = ''
  binary += @extension_type
  binary += (sn_len + 5).to_uint16
  binary += (sn_len + 3).to_uint16
  binary += NameType::HOST_NAME
  binary += sn_len.to_uint16
  binary += @server_name
  binary
end