class TTTLS13::Message::Extension::OCSPStatusRequest
Attributes
extension_type[R]
request_extensions[R]
responder_id_list[R]
Public Class Methods
deserialize(binary)
click to toggle source
@param binary [String]
@raise [TTTLS13::Error::ErrorAlerts]
@return [TTTLS13::Message::Extension::OCSPStatusRequest, nil] rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity
# 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
new(responder_id_list: [], request_extensions: [])
click to toggle source
@param responder_id_list
[Array of OpenSSL::ASN1::ASN1Data] @param request_extensions
[Array of OpenSSL::ASN1::ASN1Data]
@example
OCSPStatusRequest.new
# 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
Private Class Methods
deserialize_request_ids(binary)
click to toggle source
@param binary [String]
@raise [TTTLS13::Error::ErrorAlerts]
@return [Array of ASN1Data, nil] received unparsable binary, nil
# File lib/tttls1.3/message/extension/status_request.rb, line 88 def deserialize_request_ids(binary) raise Error::ErrorAlerts, :internal_error if binary.nil? i = 0 request_ids = [] while i < binary.length return nil if i + 2 > binary.length id_len = Convert.bin2i(binary.slice(i, 2)) i += 2 id = binary.slice(i, id_len) begin request_ids += OpenSSL::ASN1.decode(id) rescue OpenSSL::ASN1::ASN1Error return nil end i += id_len end return nil if i != binary.length request_ids end
Public Instance Methods
serialize()
click to toggle source
@return [String]
# 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