class Akabei::Signer

Public Class Methods

get(gpg_key, crypto = nil) click to toggle source
# File lib/akabei/signer.rb, line 45
def self.get(gpg_key, crypto = nil)
  gpg_key && new(gpg_key, crypto)
end
new(gpg_key, crypto = nil) click to toggle source
# File lib/akabei/signer.rb, line 49
def initialize(gpg_key, crypto = nil)
  check_gpg_agent!
  @gpg_key = find_secret_key(gpg_key)
  @crypto = crypto || GPGME::Crypto.new
end

Public Instance Methods

check_gpg_agent!() click to toggle source
# File lib/akabei/signer.rb, line 55
def check_gpg_agent!
  unless ENV['GPG_AGENT_INFO']
    raise AgentNotFound.new
  end
end
detach_sign(path) click to toggle source
# File lib/akabei/signer.rb, line 61
def detach_sign(path)
  File.open(path) do |inp|
    File.open("#{path}.sig", 'w') do |out|
      @crypto.detach_sign(inp, signer: @gpg_key, output: out)
    end
  end
end
find_secret_key(key_name) click to toggle source
# File lib/akabei/signer.rb, line 81
def find_secret_key(key_name)
  keys = GPGME::Key.find(:secret, key_name, :sign)
  if keys.empty?
    raise KeyNotFound.new(key_name)
  elsif keys.size > 1
    raise AmbiguousKey.new(key_name, keys)
  else
    keys.first
  end
end
verify!(path) click to toggle source
# File lib/akabei/signer.rb, line 69
def verify!(path)
  File.open("#{path}.sig") do |sig|
    File.open(path) do |f|
      @crypto.verify(sig, signed_text: f) do |signature|
        unless signature.valid?
          raise InvalidSignature.new(path, signature.from)
        end
      end
    end
  end
end