authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-01-07 23:02:24+01:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-01-07 23:02:24+01:00
log22380c78b1f9fd714ea6c89d2b902846ccf2e4f9
treef204317415a582729e1e1f3a328d38759b4a7883
parent62d6bbc7dc36dbb2f45da08e767076157deeb259

crypto.ed25519.Signer: get an std.io parameter rather than entropy

This is consistent with what all other similar functions now do, and is less dangerous.

1 files changed, 5 insertions(+), 6 deletions(-)

lib/std/crypto/25519/ed25519.zig+5-6
...@@ -392,16 +392,17 @@ pub const Ed25519 = struct {...@@ -392,16 +392,17 @@ pub const Ed25519 = struct {
392 /// If set, should be something unique for each message, such as a392 /// If set, should be something unique for each message, such as a
393 /// random nonce, or a counter.393 /// random nonce, or a counter.
394 noise: ?[noise_length]u8,394 noise: ?[noise_length]u8,
395 /// Filled with cryptographically secure randomness.395 io: std.Io,
396 entropy: *const [noise_length]u8,
397 ) (IdentityElementError || KeyMismatchError || NonCanonicalError || WeakPublicKeyError)!Signer {396 ) (IdentityElementError || KeyMismatchError || NonCanonicalError || WeakPublicKeyError)!Signer {
398 if (!mem.eql(u8, &key_pair.secret_key.publicKeyBytes(), &key_pair.public_key.toBytes())) {397 if (!mem.eql(u8, &key_pair.secret_key.publicKeyBytes(), &key_pair.public_key.toBytes())) {
399 return error.KeyMismatch;398 return error.KeyMismatch;
400 }399 }
401 const scalar_and_prefix = key_pair.secret_key.scalarAndPrefix();400 const scalar_and_prefix = key_pair.secret_key.scalarAndPrefix();
401 var entropy: [noise_length]u8 = undefined;
402 io.random(&entropy);
402 var h = Sha512.init(.{});403 var h = Sha512.init(.{});
403 h.update(&scalar_and_prefix.prefix);404 h.update(&scalar_and_prefix.prefix);
404 h.update(entropy);405 h.update(&entropy);
405 if (noise) |*z| {406 if (noise) |*z| {
406 h.update(z);407 h.update(z);
407 }408 }
...@@ -748,9 +749,7 @@ test "signatures with streaming" {...@@ -748,9 +749,7 @@ test "signatures with streaming" {
748 const io = std.testing.io;749 const io = std.testing.io;
749 const kp = Ed25519.KeyPair.generate(io);750 const kp = Ed25519.KeyPair.generate(io);
750751
751 var entropy: [Ed25519.noise_length]u8 = undefined;752 var signer = try kp.signer(null, io);
752 io.random(&entropy);
753 var signer = try kp.signer(null, &entropy);
754 signer.update("mes");753 signer.update("mes");
755 signer.update("sage");754 signer.update("sage");
756 const sig = signer.finalize();755 const sig = signer.finalize();