class Origami::Signature::DigitalSignature
Class representing a digital signature.
def certificate_chain
def certificate_chain return [] unless key?(:Cert) chain = self.Cert unless chain.is_a?(String) or (chain.is_a?(Array) and chain.all?{|cert| cert.is_a?(String)}) return SignatureError, 'Invalid embedded certificate chain' end [ chain ].flatten.map! {|str| OpenSSL::X509::Certificate.new(str) } end
def pre_build #:nodoc:
def pre_build #:nodoc: self.M = Origami::Date.now self.Prop_Build ||= BuildProperties.new.pre_build super end
def ranges
def ranges byte_range = self.ByteRange unless byte_range.is_a?(Array) and byte_range.length == 4 and byte_range.all? {|i| i.is_a?(Integer) } raise SignatureError, 'Invalid ByteRange field value' end byte_range.map(&:to_i).each_slice(2).map do |start, length| (start...start + length) end end
def signature_data
def signature_data raise SignatureError, "Invalid signature data" unless self[:Contents].is_a?(String) self[:Contents] end
def signature_offset #:nodoc:
def signature_offset #:nodoc: indent, tab, eol = 1, "\t", $/ content = "#{no} #{generation} obj" + eol + TOKENS.first + eol self.to_a.sort_by{ |key, _| key }.reverse_each do |key, value| if key == :Contents content << tab * indent + key.to_s + " " return content.size else content << tab * indent + key.to_s << " " content << (value.is_a?(Dictionary) ? value.to_s(indent: indent + 1) : value.to_s) << eol end end nil end
def to_s(indent: 1, tab: "\t", eol: $/) #:nodoc:
def to_s(indent: 1, tab: "\t", eol: $/) #:nodoc: # Must be deterministic. indent, tab, eol = 1, "\t", $/ content = TOKENS.first + eol self.to_a.sort_by{ |key, _| key }.reverse_each do |key, value| content << tab * indent << key.to_s << " " content << (value.is_a?(Dictionary) ? value.to_s(indent: indent + 1) : value.to_s) << eol end content << tab * (indent - 1) << TOKENS.last output(content) end