class TTTLS13::Message::Certificate
Attributes
certificate_list[R]
certificate_request_context[R]
msg_type[R]
Public Class Methods
deserialize(binary)
click to toggle source
@param binary [String]
@raise [TTTLS13::Error::ErrorAlerts]
@return [TTTLS13::Message::Certificate]
# 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
new(certificate_request_context: '', certificate_list: [])
click to toggle source
@param certificate_request_context
[String] @param certificate_list
[Array of CertificateEntry]
# 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
Private Class Methods
deserialize_certificate_list(binary)
click to toggle source
@param binary [String]
@raise [TTTLS13::Error::ErrorAlerts]
@return [Array of CertificateEntry]
# File lib/tttls1.3/message/certificate.rb, line 87 def deserialize_certificate_list(binary) raise Error::ErrorAlerts, :internal_error if binary.nil? i = 0 certificate_list = [] while i < binary.length raise Error::ErrorAlerts, :decode_error if i + 3 > binary.length cd_len = Convert.bin2i(binary.slice(i, 3)) i += 3 cd_bin = binary.slice(i, cd_len) cert_data = OpenSSL::X509::Certificate.new(cd_bin) i += cd_len raise Error::ErrorAlerts, :decode_error if i + 2 > binary.length exs_len = Convert.bin2i(binary.slice(i, 2)) i += 2 exs_bin = binary.slice(i, exs_len) extensions = Extensions.deserialize(exs_bin, HandshakeType::CERTIFICATE) i += exs_len certificate_list << CertificateEntry.new(cert_data, extensions) end raise Error::ErrorAlerts, :decode_error unless i == binary.length certificate_list end
Public Instance Methods
appearable_extensions?()
click to toggle source
@return [Boolean]
# 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
serialize()
click to toggle source
@return [String]
# 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
Also aliased as: fragment