diff --git a/lib/minisign/public_key.rb b/lib/minisign/public_key.rb index f9a3928..1aa93ff 100644 --- a/lib/minisign/public_key.rb +++ b/lib/minisign/public_key.rb @@ -21,7 +21,7 @@ def initialize(str) # public_key.key_id # #=> "E86FECED695E8E0" def key_id - key_id_binary_string.bytes.map { |c| c.to_s(16) }.reverse.join.upcase + hex key_id_binary_string.bytes end # Verify a message's signature diff --git a/lib/minisign/signature.rb b/lib/minisign/signature.rb index 6787832..d224efb 100644 --- a/lib/minisign/signature.rb +++ b/lib/minisign/signature.rb @@ -3,11 +3,13 @@ module Minisign # Parse a .minisig file's contents class Signature + include Utils # @param str [String] The contents of the .minisig file # @example # Minisign::Signature.new(File.read('test/example.txt.minisig')) def initialize(str) @lines = str.split("\n") + @decoded = Base64.strict_decode64(@lines[1]) end # @return [String] the key id @@ -15,7 +17,7 @@ def initialize(str) # Minisign::Signature.new(File.read('test/example.txt.minisig')).key_id # #=> "E86FECED695E8E0" def key_id - encoded_signature[2..9].bytes.map { |c| c.to_s(16) }.reverse.join.upcase + hex @decoded[2..9].bytes end # @return [String] the trusted comment @@ -33,18 +35,12 @@ def trusted_comment_signature # @return [String] the global signature def signature - encoded_signature[10..] + @decoded[10..] end # @return [String] The signature that can be written to a file def to_s "#{@lines.join("\n")}\n" end - - private - - def encoded_signature - Base64.decode64(@lines[1]) - end end end diff --git a/lib/minisign/utils.rb b/lib/minisign/utils.rb index 8ca056c..74258d8 100644 --- a/lib/minisign/utils.rb +++ b/lib/minisign/utils.rb @@ -18,6 +18,11 @@ def xor(kdf_output, contents) end end + # @return [String] bytes as little endian hexadecimal + def hex(bytes) + bytes.map { |c| c.to_s(16) }.reverse.join.upcase + end + # @return [String] the used to xor the ed25519 keys def derive_key(password, kdf_salt, kdf_opslimit, kdf_memlimit) RbNaCl::PasswordHash.scrypt(