Class: Akabei::Signer
- Inherits:
-
Object
show all
- Defined in:
- lib/akabei/signer.rb
Defined Under Namespace
Classes: AgentNotFound, AmbiguousKey, InvalidSignature, KeyNotFound
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(gpg_key, crypto = nil) ⇒ Signer
Returns a new instance of Signer.
49
50
51
52
53
|
# 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
|
Class Method Details
.get(gpg_key, crypto = nil) ⇒ Object
45
46
47
|
# File 'lib/akabei/signer.rb', line 45
def self.get(gpg_key, crypto = nil)
gpg_key && new(gpg_key, crypto)
end
|
Instance Method Details
#check_gpg_agent! ⇒ Object
55
56
57
58
59
|
# File 'lib/akabei/signer.rb', line 55
def check_gpg_agent!
unless ENV['GPG_AGENT_INFO']
raise AgentNotFound.new
end
end
|
#detach_sign(path) ⇒ Object
61
62
63
64
65
66
67
|
# 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) ⇒ Object
81
82
83
84
85
86
87
88
89
90
|
# 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) ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
|
# 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
|