Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions lib/ed25519/signing_key.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
module Ed25519
# Private key for producing digital signatures
class SigningKey
attr_reader :seed, :keypair, :verify_key
attr_reader :verify_key

# Generate a random Ed25519 signing key (i.e. private scalar)
def self.generate
Expand All @@ -30,11 +30,21 @@ def self.from_keypair(keypair)
def initialize(seed)
Ed25519.validate_key_bytes(seed)

@seed = seed
@keypair = Ed25519.provider.create_keypair(seed)
@seed = seed.dup.freeze
@keypair = Ed25519.provider.create_keypair(@seed).freeze
@verify_key = VerifyKey.new(@keypair[32, 32])
end

# Return a copy of the seed used to derive this signing key
def seed
@seed.dup
end

# Return a copy of the 64-byte private/public keypair
def keypair
@keypair.dup
end

# Sign the given message, returning an Ed25519 signature
#
# @param message [String] message to be signed
Expand All @@ -53,7 +63,7 @@ def inspect
#
# @return [String] signing key converted to a bytestring
def to_bytes
seed
@seed.dup
end
alias to_str to_bytes
end
Expand Down
4 changes: 2 additions & 2 deletions lib/ed25519/verify_key.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class VerifyKey
# @param key [String] 32-byte string representing a serialized public key
def initialize(key)
Ed25519.validate_key_bytes(key)
@key_bytes = key
@key_bytes = key.dup.freeze
end

# Verify an Ed25519 signature against the message
Expand All @@ -33,7 +33,7 @@ def verify(signature, message)
#
# @return [String] bytestring serialization of this public key
def to_bytes
@key_bytes
@key_bytes.dup
end
alias to_str to_bytes

Expand Down