Refactored the Ed25510 module and fixed the insecure (and not functionnal) seed generation
This commit is contained in:
parent
150c5b2e38
commit
4c7669785f
1 changed files with 40 additions and 31 deletions
|
|
@ -1,41 +1,50 @@
|
|||
pub const Implementation = struct {
|
||||
|
||||
pub const KEY_SIZE = 32;
|
||||
pub const SIGNATURE_SIZE = 64;
|
||||
secret_key_size: comptime_int,
|
||||
public_key_size: comptime_int,
|
||||
signature_size: comptime_int,
|
||||
|
||||
generateKeys: *const fn (pubkey_buffer: []u8, privkey_buffer: []u8) void,
|
||||
sign: *const fn (key: *const [KEY_SIZE]u8, data: *const []const u8, signature_out: *const [SIGNATURE_SIZE]u8) void,
|
||||
verify: *const fn (key: *const [KEY_SIZE]u8, data: *const []const u8, signature: *const [SIGNATURE_SIZE]u8) void,
|
||||
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,
|
||||
};
|
||||
|
||||
// TODO
|
||||
pub const defaultImplementation = struct {
|
||||
// Random number generation
|
||||
const rngProvider = @import("random.zig").Implementation;
|
||||
|
||||
const Ed25519 = @import("std").crypto.sign.Ed25519;
|
||||
pub fn defaultImplementation(comptime random: rngProvider) type {
|
||||
|
||||
pub fn generateKeys(pubkey_buffer: []u8, privkey_buffer: []u8) !void {
|
||||
if (Ed25519.SecretKey.encoded_length > privkey_buffer or
|
||||
Ed25519.SecretKey.encoded_length > privkey_buffer)
|
||||
{
|
||||
return error.BufferTooShort;
|
||||
}
|
||||
// TODO replace by a secure random number generator
|
||||
const keypair: Ed25519.KeyPair = try Ed25519.KeyPair.generateDeterministic(undefined);
|
||||
return struct {
|
||||
|
||||
@memcpy(pubkey_buffer[0..Ed25519.PublicKey.encoded_length], keypair.public_key.bytes);
|
||||
@memcpy(privkey_buffer[0..Ed25519.SecretKey.encoded_length], keypair.secret_key.bytes);
|
||||
}
|
||||
const Ed25519 = @import("std").crypto.sign.Ed25519;
|
||||
|
||||
pub fn sign(key: *const [32]u8, data: *const []const u8, signature_out: *const [64]u8) !void {
|
||||
_ = key;
|
||||
_ = data;
|
||||
_ = signature_out;
|
||||
return error.NotImplemented;
|
||||
}
|
||||
pub const secret_key_size = Ed25519.SecretKey.encoded_length;
|
||||
pub const public_key_size = Ed25519.PublicKey.encoded_length;
|
||||
pub const signature_size = Ed25519.Signature.encoded_length;
|
||||
|
||||
pub fn verify(signature: *const [64]u8, data: *const []const u8) !void {
|
||||
_ = signature;
|
||||
_ = data;
|
||||
return error.NotImplemented;
|
||||
}
|
||||
};
|
||||
pub fn generateKeys(pubkey_buffer: *[Ed25519.SecretKey.encoded_length]u8, privkey_buffer: *[Ed25519.SecretKey.encoded_length]u8) !void {
|
||||
|
||||
const seed_buffer: [Ed25519.KeyPair.seed_length]u8 = undefined;
|
||||
random.generate(&seed_buffer);
|
||||
const keypair: Ed25519.KeyPair = try Ed25519.KeyPair.generateDeterministic(seed_buffer);
|
||||
|
||||
|
||||
@memcpy(pubkey_buffer[0..public_key_size], keypair.public_key.bytes);
|
||||
@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 {
|
||||
_ = 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;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue