Skip to content

Commit

Permalink
add verify functionality (#28)
Browse files Browse the repository at this point in the history
  • Loading branch information
jshawl authored Feb 11, 2024
1 parent c054099 commit a2de705
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 20 deletions.
33 changes: 13 additions & 20 deletions bin/minisign
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,17 @@ Signal.trap('INT') { exit }

options = {}
op = OptionParser.new do |opts|
opts.on('-G') do |g|
options[:G] = g
boolean_opts = %w[G R C W S V f]
argument_opts = %w[t m x s p]
boolean_opts.each do |o|
opts.on("-#{o}") do |boolean|
options[o.to_sym] = boolean
end
end
opts.on('-R') do |r|
options[:R] = r
end
opts.on('-C') do |c|
options[:C] = c
end
opts.on('-W') do |w|
options[:W] = w
end
opts.on('-f') do |f|
options[:f] = f
end
opts.on('-sSECRET_KEY') do |s|
options[:s] = s
end
opts.on('-pPUBLIC_KEY') do |p|
options[:p] = p
argument_opts.each do |o|
opts.on("-#{o}#{o.upcase}") do |value|
options[o.to_sym] = value
end
end
end

Expand All @@ -44,4 +35,6 @@ end

Minisign::CLI.generate(options) if options[:G]
Minisign::CLI.recreate(options) if options[:R]
Minisign::CLI.recreate(options) if options[:C]
Minisign::CLI.change_password(options) if options[:C]
Minisign::CLI.sign(options) if options[:S]
Minisign::CLI.verify(options) if options[:V]
10 changes: 10 additions & 0 deletions lib/minisign/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -106,5 +106,15 @@ def self.sign(options)
signature = private_key.sign(options[:m], File.read(options[:m]), options[:t])
File.write(options[:x], signature)
end

def self.verify(options)
options[:x] ||= "#{options[:m]}.minisig"
options[:p] ||= './minisign.pub'
options[:P] ||= File.read(options[:p])
# TODO: -q / -Q
public_key = Minisign::PublicKey.new(options[:P])
signature = Minisign::Signature.new(File.read(options[:x]))
puts public_key.verify(signature, File.read(options[:m]))
end
end
end
12 changes: 12 additions & 0 deletions spec/minisign/cli_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,16 @@
expect(jedisct1_signature).to eq(signature)
end
end

describe '.verify' do
it 'verifies signatures' do
options = {
p: 'test/minisign.pub',
m: 'test/generated/.keep'
}
expect do
Minisign::CLI.verify(options)
end.not_to raise_error
end
end
end

0 comments on commit a2de705

Please sign in to comment.