diff --git a/lib/std/crypto/25519/ed25519.zig b/lib/std/crypto/25519/ed25519.zig index b6f582839ef6ae496e34b65700bc38ddc6de49c2..b0c7216230b19dcc3beb51ac3da58788c04724f4 100644 --- a/lib/std/crypto/25519/ed25519.zig +++ b/lib/std/crypto/25519/ed25519.zig @@ -392,16 +392,17 @@ pub const Ed25519 = struct { /// If set, should be something unique for each message, such as a /// random nonce, or a counter. noise: ?[noise_length]u8, - /// Filled with cryptographically secure randomness. - entropy: *const [noise_length]u8, + io: std.Io, ) (IdentityElementError || KeyMismatchError || NonCanonicalError || WeakPublicKeyError)!Signer { if (!mem.eql(u8, &key_pair.secret_key.publicKeyBytes(), &key_pair.public_key.toBytes())) { return error.KeyMismatch; } const scalar_and_prefix = key_pair.secret_key.scalarAndPrefix(); + var entropy: [noise_length]u8 = undefined; + io.random(&entropy); var h = Sha512.init(.{}); h.update(&scalar_and_prefix.prefix); - h.update(entropy); + h.update(&entropy); if (noise) |*z| { h.update(z); } @@ -748,9 +749,7 @@ test "signatures with streaming" { const io = std.testing.io; const kp = Ed25519.KeyPair.generate(io); - var entropy: [Ed25519.noise_length]u8 = undefined; - io.random(&entropy); - var signer = try kp.signer(null, &entropy); + var signer = try kp.signer(null, io); signer.update("mes"); signer.update("sage"); const sig = signer.finalize();