class Epics::Key

Attributes

key[RW]

Public Class Methods

new(encoded_key, passphrase = nil) click to toggle source
# File lib/epics/key.rb, line 4
def initialize(encoded_key, passphrase = nil)
  if encoded_key.kind_of?(OpenSSL::PKey::RSA)
    self.key = encoded_key
  else
    self.key = OpenSSL::PKey::RSA.new(encoded_key)
  end
end

Public Instance Methods

digester() click to toggle source
# File lib/epics/key.rb, line 43
def digester
  @digester ||= OpenSSL::Digest::SHA256.new
end
e() click to toggle source
# File lib/epics/key.rb, line 28
def e
  self.key.e.to_s(16)
end
n() click to toggle source
# File lib/epics/key.rb, line 24
def n
  self.key.n.to_s(16)
end
public_digest() click to toggle source

concat the exponent and modulus (hex representation) with a single whitespace remove leading zeros from both calculate digest (SHA256) encode as Base64

# File lib/epics/key.rb, line 18
def public_digest
  c = [ e.gsub(/^0*/,''), n.gsub(/^0*/,'') ].map(&:downcase).join(" ")

  Base64.encode64(digester.digest(c)).strip
end
sign(msg) click to toggle source
# File lib/epics/key.rb, line 32
def sign(msg)
  Base64.encode64(
    key.sign_pss(
      'SHA256',
      msg,
      salt_length: :digest,
      mgf1_hash:   'SHA256',
    ),
  ).gsub("\n", '')
end