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_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



29
30
31
32
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 29

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



76
77
78
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 76

def self.signature_bytes
  Ed25519::SIGNATUREBYTES
end

Instance Method Details

#primitiveSymbol

The crypto primitive this VerifyKey class uses for signatures

Returns:

  • (Symbol)

    The primitive



69
70
71
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 69

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



83
84
85
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 83

def signature_bytes
  Ed25519::SIGNATUREBYTES
end

#to_bytesString

Return the raw key in byte format

Returns:

  • (String)

    raw key as bytes



62
63
64
# File 'lib/rbnacl/signatures/ed25519/verify_key.rb', line 62

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:



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

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)
  fail(BadSignatureError, "signature was forged/corrupt") unless success

  true
end