Generate Sodium::Sign::SecretKey#seed.

master
Didactic Drunk 2020-07-18 22:49:13 -07:00
parent f0213b88c8
commit da188875c4
2 changed files with 7 additions and 6 deletions

View File

@ -49,7 +49,7 @@ describe Sodium::Sign::SecretKey do
it "seed keys" do it "seed keys" do
seed = Bytes.new Sodium::Sign::SecretKey::SEED_SIZE seed = Bytes.new Sodium::Sign::SecretKey::SEED_SIZE
key1 = Sodium::Sign::SecretKey.new seed: seed key1 = Sodium::Sign::SecretKey.new seed: seed
key2 = Sodium::Sign::SecretKey.new seed: seed key2 = Sodium::Sign::SecretKey.new seed: Sodium::Sign::SecretKey.new(key1.to_slice).seed
key1.to_slice.should eq key2.to_slice key1.to_slice.should eq key2.to_slice
key1.public_key.to_slice.should eq key2.public_key.to_slice key1.public_key.to_slice.should eq key2.public_key.to_slice
key1.seed.should eq seed key1.seed.should eq seed

View File

@ -23,8 +23,6 @@ module Sodium
# Returns key # Returns key
delegate_to_slice to: @sbuf delegate_to_slice to: @sbuf
@seed : SecureBuffer?
# Generates a new random secret/public key pair. # Generates a new random secret/public key pair.
def initialize def initialize
@sbuf = SecureBuffer.new KEY_SIZE @sbuf = SecureBuffer.new KEY_SIZE
@ -70,9 +68,12 @@ module Sodium
end end
end end
def seed getter seed : SecureBuffer? do
# BUG: Generate seed if not set. SecureBuffer.new(SEED_SIZE).tap do |s|
@seed.not_nil!.to_slice if LibSodium.crypto_sign_ed25519_sk_to_seed(s.to_slice, self.to_slice) != 0
raise Sodium::Error.new("crypto_sign_ed25519_sk_to_seed")
end
end.readonly
end end
# Signs message and returns a detached signature. # Signs message and returns a detached signature.