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:

: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:

: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:

: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