class Xmldsig::Reference

Attributes

errors[RW]
reference[RW]

Public Class Methods

new(reference) click to toggle source
# File lib/xmldsig/reference.rb, line 7
def initialize(reference)
  @reference = reference
  @errors = []
end

Public Instance Methods

digest_value() click to toggle source
# File lib/xmldsig/reference.rb, line 39
def digest_value
  Base64.decode64 reference.at_xpath("descendant::ds:DigestValue", Xmldsig::NAMESPACES).content
end
document() click to toggle source
# File lib/xmldsig/reference.rb, line 43
def document
  reference.document
end
reference_uri() click to toggle source
# File lib/xmldsig/reference.rb, line 35
def reference_uri
  reference.get_attribute("URI")
end
referenced_node() click to toggle source
# File lib/xmldsig/reference.rb, line 22
def referenced_node
  if reference_uri && reference_uri != ""
    id = reference_uri[1..-1]
    if ref = document.dup.at_xpath("//*[@Id|@ID='#{id}' or @wsu:Id='#{id}']", Xmldsig::NAMESPACES)
      ref
    else
      raise(ReferencedNodeNotFound, "Could not find the referenced node #{id}")
    end
  else
    document.dup.root
  end
end
sign() click to toggle source
# File lib/xmldsig/reference.rb, line 12
def sign
  self.digest_value = calculate_digest_value
end
validate_digest_value() click to toggle source
# File lib/xmldsig/reference.rb, line 16
def validate_digest_value
  unless digest_value == calculate_digest_value
    @errors << :digest_value
  end
end

Private Instance Methods

calculate_digest_value() click to toggle source
# File lib/xmldsig/reference.rb, line 48
def calculate_digest_value
  node = transforms.apply(referenced_node)
  digest_method.digest node
end
digest_method() click to toggle source
# File lib/xmldsig/reference.rb, line 53
def digest_method
  algorithm = reference.at_xpath("descendant::ds:DigestMethod", Xmldsig::NAMESPACES).get_attribute("Algorithm")
  case algorithm
    when "http://www.w3.org/2001/04/xmlenc#sha256"
      Digest::SHA2
    when "http://www.w3.org/2000/09/xmldsig#sha1"
      Digest::SHA1
  end
end
digest_value=(digest_value) click to toggle source
# File lib/xmldsig/reference.rb, line 63
def digest_value=(digest_value)
  reference.at_xpath("descendant::ds:DigestValue", Xmldsig::NAMESPACES).content =
    Base64.encode64(digest_value).chomp
end
transforms() click to toggle source
# File lib/xmldsig/reference.rb, line 68
def transforms
  Transforms.new(reference.xpath("descendant::ds:Transform", Xmldsig::NAMESPACES))
end