Class: RbNaCl::Signatures::Ed25519::VerifyKey

Inherits:
Object
  • Object
show all
Extended by:
RbNaCl::Sodium
Includes:
KeyComparator, RbNaCl::Serializable
Defined in:
lib/rbnacl/signatures/ed25519/verify_key.rb

Overview

The public key counterpart to an Ed25519 SigningKey for producing digital signatures. Like the name says, VerifyKeys can be used to verify that a given digital signature is authentic.

For more information on the Ed25519 digital signature system, please see the SigningKey documentation.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from RbNaCl::Sodium

sodium_constant, sodium_function, sodium_function_with_return_code, sodium_primitive, sodium_type

Methods included from RbNaCl::Serializable

#inspect, #to_s, #to_str

Methods included from KeyComparator

#<=>, #==

Constructor Details

#initialize(key) ⇒ RbNaCl::VerifyKey

Create a new VerifyKey object from a public key.

Parameters:

  • key (String)

    Ed25519 public key


31
32
33
34
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 31

def initialize(key)
  @key = key.to_str
  Util.check_length(@key, Ed25519::VERIFYKEYBYTES, "key")
end

Class Method Details

.signature_bytesInteger

The size of signatures verified by the VerifyKey class

Returns:

  • (Integer)

    The number of bytes in a signature


78
79
80
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 78

def self.signature_bytes
  Ed25519::SIGNATUREBYTES
end

Instance Method Details

#primitiveSymbol

The crypto primitive this VerifyKey class uses for signatures

Returns:

  • (Symbol)

    The primitive


71
72
73
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 71

def primitive
  self.class.primitive
end

#signature_bytesInteger

The size of signatures verified by the VerifyKey instance

Returns:

  • (Integer)

    The number of bytes in a signature


85
86
87
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 85

def signature_bytes
  Ed25519::SIGNATUREBYTES
end

#to_bytesString

Return the raw key in byte format

Returns:

  • (String)

    raw key as bytes


64
65
66
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 64

def to_bytes
  @key
end

#verify(signature, message) ⇒ Boolean

Verify a signature for a given message

Raises if the signature is invalid.

Parameters:

  • signature (String)

    Alleged signature to be checked

  • message (String)

    Message to be authenticated

Returns:

  • (Boolean)

    was the signature authentic?

Raises:


47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 47

def verify(signature, message)
  signature = signature.to_str
  Util.check_length(signature, signature_bytes, "signature")

  sig_and_msg = signature + message
  buffer = Util.zeros(sig_and_msg.bytesize)
  buffer_len = Util.zeros(FFI::Type::LONG_LONG.size)

  success = self.class.sign_ed25519_open(buffer, buffer_len, sig_and_msg, sig_and_msg.bytesize, @key)
  raise(BadSignatureError, "signature was forged/corrupt") unless success

  true
end