lib/r509/ocsp.rb in r509-0.8.1 vs lib/r509/ocsp.rb in r509-0.9

- old
+ new

@@ -1,85 +1,95 @@ require 'openssl' require 'r509/exceptions' require 'r509/config' -#Ocsp module -module R509::Ocsp +#OCSP module +module R509::OCSP - #builds OCSP responses - class Response - # @param ocsp_response [OpenSSL::OCSP::Response] - def initialize(ocsp_response) - if not ocsp_response.kind_of?(OpenSSL::OCSP::Response) - raise R509::R509Error, 'You must pass an OpenSSL::OCSP::Response object to the constructor. See R509::Ocsp::Response.parse if you are trying to parse' - end - @ocsp_response = ocsp_response - end - # @param [String,OpenSSL::OCSP::Response] ocsp_string parses an existing response - # @return [R509::Ocsp::Response] - def self.parse(ocsp_string) - if ocsp_string.nil? - raise R509::R509Error, 'You must pass a DER encoded OCSP response to this method' - end - R509::Ocsp::Response.new(OpenSSL::OCSP::Response.new(ocsp_string)) - end + #builds OCSP responses + class Response + # @param ocsp_response [OpenSSL::OCSP::Response] + def initialize(ocsp_response) + if not ocsp_response.kind_of?(OpenSSL::OCSP::Response) + raise R509::R509Error, 'You must pass an OpenSSL::OCSP::Response object to the constructor. See R509::OCSP::Response.parse if you are trying to parse' + end + @ocsp_response = ocsp_response + end + # @param [String,OpenSSL::OCSP::Response] ocsp_string parses an existing response + # @return [R509::OCSP::Response] + def self.parse(ocsp_string) + if ocsp_string.nil? + raise R509::R509Error, 'You must pass a DER encoded OCSP response to this method' + end + R509::OCSP::Response.new(OpenSSL::OCSP::Response.new(ocsp_string)) + end - # @return [OpenSSL::OCSP] response status of this response - def status - @ocsp_response.status - end + # @return [OpenSSL::OCSP] response status of this response + def status + @ocsp_response.status + end - # @return [String] der encoded string - def to_der - @ocsp_response.to_der - end + # @return [String] der encoded string + def to_der + @ocsp_response.to_der + end - # @return [OpenSSL::OCSP::BasicResponse] - def basic - @ocsp_response.basic - end + # @return [OpenSSL::OCSP::BasicResponse] + def basic + @ocsp_response.basic + end - # @param [Array<OpenSSL::X509::Certificate>,OpenSSL::X509::Certificate] certs A cert or array of certs to verify against - # @return [Boolean] true if the response is valid according to the given root - def verify(certs) - store = OpenSSL::X509::Store.new - if certs.kind_of?(Array) - stack = certs - certs.each do |cert| - store.add_cert(cert) - end - else - stack = [certs] - store.add_cert(certs) - end - - #suppress verbosity since #verify will output a warning if it does not match - #as well as returning false. we just want the boolean - original_verbosity = $VERBOSE - $VERBOSE = nil - #still a bit unclear on why we add to store and pass in array to verify - result = @ocsp_response.basic.verify(stack, store) - $VERBOSE = original_verbosity - return result + # @param [Array<OpenSSL::X509::Certificate>,OpenSSL::X509::Certificate] certs A cert or array of certs to verify against + # @return [Boolean] true if the response is valid according to the given root + def verify(certs) + store = OpenSSL::X509::Store.new + if certs.kind_of?(Array) + stack = certs + certs.each do |cert| + store.add_cert(cert) end + else + stack = [certs] + store.add_cert(certs) + end - # @param [OpenSSL::OCSP::Request] ocsp_request the OCSP request whose nonce to check - # @return [R509::Ocsp::Request::Nonce::CONSTANT] the status code of the nonce check - def check_nonce(ocsp_request) - ocsp_request.check_nonce(@ocsp_response.basic) - end + #suppress verbosity since #verify will output a warning if it does not match + #as well as returning false. we just want the boolean + original_verbosity = $VERBOSE + $VERBOSE = nil + #still a bit unclear on why we add to store and pass in array to verify + result = @ocsp_response.basic.verify(stack, store) + $VERBOSE = original_verbosity + return result end - #holds OCSP request related items - module Request - # contains constants r509 uses for OCSP responses - module Nonce - #these values are defined at - #http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/OCSP/Request.html - PRESENT_AND_EQUAL = 1 - BOTH_ABSENT = 2 - RESPONSE_ONLY = 3 - NOT_EQUAL = 0 - REQUEST_ONLY = -1 - end + # @param [OpenSSL::OCSP::Request] ocsp_request the OCSP request whose nonce to check + # @return [R509::OCSP::Request::Nonce::CONSTANT] the status code of the nonce check + def check_nonce(ocsp_request) + ocsp_request.check_nonce(@ocsp_response.basic) end + end + + #holds OCSP request related items + module Request + # contains constants r509 uses for OCSP responses + module Nonce + #these values are defined at + #http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/OCSP/Request.html + # nonce is present and matches + PRESENT_AND_EQUAL = 1 + + # nonce is missing in request and response + BOTH_ABSENT = 2 + + # nonce is present in response only + RESPONSE_ONLY = 3 + + # nonce is in both request and response, but does not match + NOT_EQUAL = 0 + + # nonce is present in request only + REQUEST_ONLY = -1 + + end + end end