diff --git a/lib/ed25519/signing_key.rb b/lib/ed25519/signing_key.rb index 7e96bc7..356c390 100644 --- a/lib/ed25519/signing_key.rb +++ b/lib/ed25519/signing_key.rb @@ -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 @@ -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 @@ -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 diff --git a/lib/ed25519/verify_key.rb b/lib/ed25519/verify_key.rb index 7084df0..1b308cc 100644 --- a/lib/ed25519/verify_key.rb +++ b/lib/ed25519/verify_key.rb @@ -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 @@ -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