Class: TTTLS13::Message::Extension::OCSPStatusRequest

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(responder_id_list: [], request_extensions: []) ⇒ OCSPStatusRequest

Returns a new instance of OCSPStatusRequest.

Examples:

OCSPStatusRequest.new

Parameters:

  • responder_id_list (Array of OpenSSL::ASN1::ASN1Data) (defaults to: [])
  • request_extensions (Array of OpenSSL::ASN1::ASN1Data) (defaults to: [])


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

def initialize(responder_id_list: [], request_extensions: [])
  @extension_type = ExtensionType::STATUS_REQUEST
  @responder_id_list = responder_id_list || []
  @request_extensions = request_extensions || []
end

Instance Attribute Details

#extension_typeObject (readonly)

Returns the value of attribute extension_type.



13
14
15
# File 'lib/tttls1.3/message/extension/status_request.rb', line 13

def extension_type
  @extension_type
end

#request_extensionsObject (readonly)

Returns the value of attribute request_extensions.



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

def request_extensions
  @request_extensions
end

#responder_id_listObject (readonly)

Returns the value of attribute responder_id_list.



14
15
16
# File 'lib/tttls1.3/message/extension/status_request.rb', line 14

def responder_id_list
  @responder_id_list
end

Class Method Details

.deserialize(binary) ⇒ TTTLS13::Message::Extension::OCSPStatusRequest?

rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity

Parameters:

  • binary (String)

Returns:

Raises:



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/tttls1.3/message/extension/status_request.rb', line 48

def self.deserialize(binary)
  raise Error::ErrorAlerts, :internal_error if binary.nil?
  return nil if binary.length < 5 ||
                binary[0] != CertificateStatusType::OCSP

  ril_len = Convert.bin2i(binary.slice(1, 2))
  i = 3
  responder_id_list =
    deserialize_request_ids(binary.slice(i, ril_len))
  # unparsable responder_id_list
  return nil if responder_id_list.nil?

  i += ril_len
  return nil if i + 2 > binary.length

  re_len = Convert.bin2i(binary.slice(i, 2))
  i += 2
  exs_bin = binary.slice(i, re_len)
  begin
    request_extensions = OpenSSL::ASN1.decode_all(exs_bin)
  rescue OpenSSL::ASN1::ASN1Error
    return nil
  end
  i += re_len
  return nil unless i == binary.length

  OCSPStatusRequest.new(responder_id_list: responder_id_list,
                        request_extensions: request_extensions)
end

Instance Method Details

#serializeString

Returns:

  • (String)


29
30
31
32
33
34
35
36
37
38
39
# File 'lib/tttls1.3/message/extension/status_request.rb', line 29

def serialize
  binary = ''
  binary += CertificateStatusType::OCSP
  binary += @responder_id_list.length.to_uint16
  binary += @responder_id_list.map do |id|
    id.to_der.prefix_uint16_length
  end.join
  binary += @request_extensions.map(&:to_der).join.prefix_uint16_length

  @extension_type + binary.prefix_uint16_length
end