diff --git a/src/crypto/ed25519.zig b/src/crypto/ed25519.zig index ff6d552..2ffe762 100644 --- a/src/crypto/ed25519.zig +++ b/src/crypto/ed25519.zig @@ -5,8 +5,8 @@ pub const Implementation = struct { signature_size: comptime_int, generateKeys: *const fn (pubkey_buffer: *[Implementation.public_key_size]u8, privkey_buffer: *[Implementation.secret_key_size]u8) void, - sign: *const fn (key: *const [Implementation.private_key_size]u8, data: *const []const u8, signature_out: *const [Implementation.signature_size]u8) void, - verify: *const fn (key: *const [Implementation.public_key_size]u8, data: *const []const u8, signature: *const [Implementation.signature_size]u8) void, + sign: *const fn (key: *const [Implementation.private_key_size]u8, data: []const u8, signature_out: *const [Implementation.signature_size]u8) void, + verify: *const fn (key: *const [Implementation.public_key_size]u8, signature: *const [Implementation.signature_size]u8, data: []const u8) void, }; // Random number generation @@ -33,17 +33,18 @@ pub fn defaultImplementation(comptime random: rngProvider) type { @memcpy(privkey_buffer[0..secret_key_size], keypair.secret_key.bytes); } - pub fn sign(key: *const [secret_key_size]u8, data: *const []const u8, signature_out: *const [signature_size]u8) !void { + pub fn sign(key: *const [secret_key_size]u8, data: []const u8, signature_out: *const [signature_size]u8) !void { _ = key; _ = data; _ = signature_out; return error.NotImplemented; } - pub fn verify(signature: *const [signature_size]u8, data: *const []const u8) !void { - _ = signature; - _ = data; - return error.NotImplemented; + pub fn verify(key: *const [public_key_size]u8, signature: *const [signature_size]u8, data: []const u8) !void { + const sig = Ed25519.Signature.fromBytes(signature); + const pubkey = Ed25519.PublicKey.fromBytes(key); + + return sig.verify(sig, data, pubkey); } };