Class: TTTLS13::Message::Certificate

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(certificate_request_context: '', certificate_list: []) ⇒ Certificate

Returns a new instance of Certificate.

Parameters:

  • certificate_request_context (String) (defaults to: '')
  • certificate_list (Array of CertificateEntry) (defaults to: [])


21
22
23
24
25
26
# File 'lib/tttls1.3/message/certificate.rb', line 21

def initialize(certificate_request_context: '',
               certificate_list: [])
  @msg_type = HandshakeType::CERTIFICATE
  @certificate_request_context = certificate_request_context || ''
  @certificate_list = certificate_list || []
end

Instance Attribute Details

#certificate_listObject (readonly)

Returns the value of attribute certificate_list.



17
18
19
# File 'lib/tttls1.3/message/certificate.rb', line 17

def certificate_list
  @certificate_list
end

#certificate_request_contextObject (readonly)

Returns the value of attribute certificate_request_context.



16
17
18
# File 'lib/tttls1.3/message/certificate.rb', line 16

def certificate_request_context
  @certificate_request_context
end

#msg_typeObject (readonly)

Returns the value of attribute msg_type.



15
16
17
# File 'lib/tttls1.3/message/certificate.rb', line 15

def msg_type
  @msg_type
end

Class Method Details

.deserialize(binary) ⇒ TTTLS13::Message::Certificate

Parameters:

  • binary (String)

Returns:

Raises:



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/tttls1.3/message/certificate.rb', line 44

def self.deserialize(binary)
  raise Error::ErrorAlerts, :internal_error if binary.nil?
  raise Error::ErrorAlerts, :decode_error if binary.length < 5
  raise Error::ErrorAlerts, :internal_error \
    unless binary[0] == HandshakeType::CERTIFICATE

  msg_len = Convert.bin2i(binary.slice(1, 3))
  crc_len = Convert.bin2i(binary.slice(4, 1))
  certificate_request_context = binary.slice(5, crc_len)
  i = 5 + crc_len
  cl_len = Convert.bin2i(binary.slice(i, 3))
  i += 3
  cl_bin = binary.slice(i, cl_len)
  i += cl_len
  certificate_list = deserialize_certificate_list(cl_bin)
  raise Error::ErrorAlerts, :decode_error unless i == msg_len + 4 &&
                                                 i == binary.length

  Certificate.new(
    certificate_request_context: certificate_request_context,
    certificate_list: certificate_list
  )
end

Instance Method Details

#appearable_extensions?Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
76
77
# File 'lib/tttls1.3/message/certificate.rb', line 69

def appearable_extensions?
  cl_exs = @certificate_list.map do |e|
    e.instance_variable_get(:@extensions).keys
  end
  exs = cl_exs.uniq.flatten - APPEARABLE_CT_EXTENSIONS
  return true if exs.empty?

  !(exs - DEFINED_EXTENSIONS).empty?
end

#serializeString Also known as: fragment

Returns:

  • (String)


29
30
31
32
33
34
35
# File 'lib/tttls1.3/message/certificate.rb', line 29

def serialize
  binary = ''
  binary += @certificate_request_context.prefix_uint8_length
  binary += @certificate_list.map(&:serialize).join.prefix_uint24_length

  @msg_type + binary.prefix_uint24_length
end