Class: Minisign::PublicKey

Inherits:
Object
  • Object
show all
Includes:
Utils
Defined in:
lib/minisign/public_key.rb

Overview

The public key used to verify signatures

Instance Method Summary collapse

Methods included from Utils

#blake2b256, #blake2b512, #derive_key, #xor

Constructor Details

#initialize(str) ⇒ PublicKey

Read a minisign public key

Examples:

Minisign::PublicKey.new('RWTg6JXWzv6GDtDphRQ/x7eg0LaWBcTxPZ7i49xEeiqXVcR+r79OZRWM')
# or from a file:
Minisign::PublicKey.new(File.read('test/minisign.pub'))


14
15
16
17
# File 'lib/minisign/public_key.rb', line 14

def initialize(str)
  @lines = str.split("\n")
  @decoded = Base64.strict_decode64(@lines.last)
end

Instance Method Details

#key_idString

Returns the key id.

Examples:

public_key.key_id
#=> "E86FECED695E8E0"


23
24
25
# File 'lib/minisign/public_key.rb', line 23

def key_id
  key_id_binary_string.bytes.map { |c| c.to_s(16) }.reverse.join.upcase
end

#to_sString



43
44
45
# File 'lib/minisign/public_key.rb', line 43

def to_s
  "untrusted comment: #{untrusted_comment}\n#{key_data}\n"
end

#verify(signature, message) ⇒ String

Verify a message’s signature

Raises:

  • Ed25519::VerifyError on invalid signatures

  • RuntimeError on tampered trusted comments

  • RuntimeError on mismatching key ids



35
36
37
38
39
40
# File 'lib/minisign/public_key.rb', line 35

def verify(signature, message)
  assert_matching_key_ids!(signature.key_id, key_id)
  verify_message_signature(signature.signature, message)
  verify_comment_signature(signature.trusted_comment_signature, signature.signature + signature.trusted_comment)
  "Signature and comment signature verified\nTrusted comment: #{signature.trusted_comment}"
end