class Epics::Signer

Attributes

client[RW]
doc[RW]

Public Class Methods

new(client, doc = nil) click to toggle source
# File lib/epics/signer.rb, line 4
def initialize(client, doc = nil)
  self.doc = Nokogiri::XML.parse(doc) if doc
  self.client = client
end

Public Instance Methods

digest!() click to toggle source
# File lib/epics/signer.rb, line 9
def digest!
  content_to_digest = Base64.encode64(digester.digest(doc.xpath("//*[@authenticate='true']").map(&:canonicalize).join)).strip

  if digest_node
    digest_node.content = content_to_digest
  end

  doc
end
digest_node() click to toggle source
# File lib/epics/signer.rb, line 29
def digest_node
  @d ||= doc.xpath("//ds:DigestValue").first
end
digester() click to toggle source
# File lib/epics/signer.rb, line 37
def digester
  OpenSSL::Digest::SHA256.new
end
sign!() click to toggle source
# File lib/epics/signer.rb, line 19
def sign!
  signature_value_node = doc.xpath("//ds:SignatureValue").first

  if signature_node
    signature_value_node.content = Base64.encode64(client.x.key.sign(digester, signature_node.canonicalize)).gsub(/\n/,'')
  end

  doc
end
signature_node() click to toggle source
# File lib/epics/signer.rb, line 33
def signature_node
  @s ||= doc.xpath("//ds:SignedInfo").first
end