diff --git a/lib/minisign/cli.rb b/lib/minisign/cli.rb index bc3046b..a536ca6 100644 --- a/lib/minisign/cli.rb +++ b/lib/minisign/cli.rb @@ -95,8 +95,12 @@ def self.recreate(options) def self.change_password(options) options[:s] ||= "#{Dir.home}/.minisign/minisign.key" - print 'Password: ' - private_key = Minisign::PrivateKey.new(File.read(options[:s]), prompt) + private_key = begin + Minisign::PrivateKey.new(File.read(options[:s])) + rescue Minisign::PasswordMissingError + print 'Password: ' + Minisign::PrivateKey.new(File.read(options[:s]), prompt) + end print 'New Password: ' new_password = options[:W] ? nil : prompt private_key.change_password! new_password diff --git a/spec/minisign/cli_spec.rb b/spec/minisign/cli_spec.rb index 28c5101..2f6d082 100644 --- a/spec/minisign/cli_spec.rb +++ b/spec/minisign/cli_spec.rb @@ -72,7 +72,18 @@ end.not_to raise_error end - it 'changes the password for the private key without a password' + it 'changes the password for the private key without a password' do + FileUtils.cp('test/unencrypted.key', 'test/generated/unencrypted.key') + new_password = SecureRandom.uuid + options = { + s: 'test/generated/unencrypted.key' + } + allow(Minisign::CLI).to receive(:prompt).and_return(new_password) + Minisign::CLI.change_password(options) + expect do + Minisign::PrivateKey.new(File.read(options[:s]), new_password) + end.not_to raise_error + end it 'removes the password for the private key' do allow(Minisign::CLI).to receive(:prompt).and_return(@old_password)