class TTTLS13::Message::NewSessionTicket

Attributes

extensions[R]
msg_type[R]
ticket[R]
ticket_age_add[R]
ticket_lifetime[R]
ticket_nonce[R]
timestamp[R]

Public Class Methods

deserialize(binary) click to toggle source

@param binary [String]

@raise [TTTLS13::Error::ErrorAlerts]

@return [TTTLS13::Message::NewSessionTicket] rubocop: disable Metrics/AbcSize

# File lib/tttls1.3/message/new_session_ticket.rb, line 61
def self.deserialize(binary)
  raise Error::ErrorAlerts, :internal_error if binary.nil?
  raise Error::ErrorAlerts, :decode_error if binary.length < 13
  raise Error::ErrorAlerts, :internal_error \
    unless binary[0] == HandshakeType::NEW_SESSION_TICKET

  msg_len = Convert.bin2i(binary.slice(1, 3))
  ticket_lifetime = Convert.bin2i(binary.slice(4, 4))
  ticket_age_add = binary.slice(8, 4)
  tn_len = Convert.bin2i(binary[12])
  ticket_nonce = binary.slice(13, tn_len)
  i = 13 + tn_len
  ticket_len = Convert.bin2i(binary.slice(i, 2))
  i += 2
  ticket = binary.slice(i, ticket_len)
  i += ticket_len
  exs_len = Convert.bin2i(binary.slice(i, 2))
  i += 2
  exs_bin = binary.slice(i, exs_len)
  extensions = Extensions.deserialize(exs_bin,
                                      HandshakeType::NEW_SESSION_TICKET)
  i += exs_len
  raise Error::ErrorAlerts, :decode_error unless i == msg_len + 4 &&
                                                 i == binary.length

  NewSessionTicket.new(ticket_lifetime: ticket_lifetime,
                       ticket_age_add: ticket_age_add,
                       ticket_nonce: ticket_nonce,
                       ticket: ticket,
                       extensions: extensions)
end
new(ticket_lifetime:, ticket_age_add:, ticket_nonce:, ticket:, extensions: Extensions.new) click to toggle source

@param ticket_lifetime [Integer] @param ticket_age_add [String] @param ticket_nonce [String] @param ticket [String] @param extensions [TTTLS13::Message::Extensions]

@raise [TTTLS13::Error::ErrorAlerts]

# File lib/tttls1.3/message/new_session_ticket.rb, line 29
def initialize(ticket_lifetime:, ticket_age_add:,
               ticket_nonce:, ticket:, extensions: Extensions.new)
  @msg_type = HandshakeType::NEW_SESSION_TICKET
  @ticket_lifetime = ticket_lifetime
  @ticket_age_add = ticket_age_add
  raise Error::ErrorAlerts, :internal_error \
    unless ticket_age_add.length == 4

  @ticket_nonce = ticket_nonce
  @ticket = ticket
  @extensions = extensions || Extensions.new
  @timestamp = Time.now.to_i
end

Public Instance Methods

appearable_extensions?() click to toggle source

@return [Boolean]

# File lib/tttls1.3/message/new_session_ticket.rb, line 95
def appearable_extensions?
  exs = @extensions.keys - APPEARABLE_NST_EXTENSIONS
  return true if exs.empty?

  !(exs - DEFINED_EXTENSIONS).empty?
end
serialize() click to toggle source

@return [String]

# File lib/tttls1.3/message/new_session_ticket.rb, line 44
def serialize
  binary = ''
  binary += @ticket_lifetime.to_uint32
  binary += @ticket_age_add
  binary += @ticket_nonce.prefix_uint8_length
  binary += @ticket.prefix_uint16_length
  binary += @extensions.serialize

  @msg_type + binary.prefix_uint24_length
end