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