Class: TTTLS13::Message::Extension::OfferedPsks

Inherits:
Object
  • Object
show all
Defined in:
lib/tttls1.3/message/extension/pre_shared_key.rb

Overview

NOTE:

opaque PskBinderEntry<32..255>;

struct {
    PskIdentity identities<7..2^16-1>;
    PskBinderEntry binders<33..2^16-1>;
} OfferedPsks;

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(identities: [], binders: []) ⇒ OfferedPsks

Returns a new instance of OfferedPsks.

Parameters:

  • identities (Array of PskIdentity) (defaults to: [])
  • binders (Array of String) (defaults to: [])

Raises:



101
102
103
104
105
106
# File 'lib/tttls1.3/message/extension/pre_shared_key.rb', line 101

def initialize(identities: [], binders: [])
  @identities = identities || []
  @binders = binders || []
  raise Error::ErrorAlerts, :internal_error \
    if @identities.empty? || @binders.empty?
end

Instance Attribute Details

#bindersObject (readonly)

Returns the value of attribute binders.



95
96
97
# File 'lib/tttls1.3/message/extension/pre_shared_key.rb', line 95

def binders
  @binders
end

#identitiesObject (readonly)

Returns the value of attribute identities.



94
95
96
# File 'lib/tttls1.3/message/extension/pre_shared_key.rb', line 94

def identities
  @identities
end

Class Method Details

.deserialize(binary) ⇒ TTTLS13::Message::Extensions::OfferedPsks?

rubocop: disable Metrics/AbcSize rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/MethodLength rubocop: disable Metrics/PerceivedComplexity

Parameters:

  • binary (String)

Returns:

  • (TTTLS13::Message::Extensions::OfferedPsks, nil)

Raises:



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/tttls1.3/message/extension/pre_shared_key.rb', line 126

def self.deserialize(binary)
  raise Error::ErrorAlerts, :internal_error if binary.nil?
  return nil if binary.length < 2

  pskids_len = Convert.bin2i(binary.slice(0, 2))
  i = 2
  identities = [] # Array of PskIdentity
  while i < pskids_len + 2
    return nil if i + 2 > binary.length

    id_len = Convert.bin2i(binary.slice(i, 2))
    return nil if id_len.zero?

    i += 2
    identity = binary.slice(i, id_len)
    i += id_len

    return nil if i + 4 > binary.length

    obfuscated_ticket_age = Convert.bin2i(binary.slice(i, 4))
    i += 4
    identities << PskIdentity.new(
      identity: identity,
      obfuscated_ticket_age: obfuscated_ticket_age
    )
  end

  i += 2
  binders = [] # Array of String
  while i < binary.length
    return nil if i > binary.length

    pbe_len = Convert.bin2i(binary[i])
    return nil if pbe_len < 32

    i += 1
    binders << binary.slice(i, pbe_len)
    i += pbe_len
  end
  return nil unless i == binary.length

  OfferedPsks.new(identities: identities, binders: binders)
end

Instance Method Details

#serializeString

Returns:

  • (String)


109
110
111
112
113
114
115
116
117
# File 'lib/tttls1.3/message/extension/pre_shared_key.rb', line 109

def serialize
  binary = @identities.map(&:serialize).join
  identities_bin = binary.prefix_uint16_length

  binary = @binders.map(&:prefix_uint8_length).join
  binders_bin = binary.prefix_uint16_length

  identities_bin + binders_bin
end