Began Identity implementation and testing

This commit is contained in:
Gu://em_ 2026-07-20 00:12:48 +02:00
parent 547a515952
commit 3209ae87a1

View file

@ -1,7 +1,7 @@
///////////////// Imports
//
const CryptoEngine = @import("crypto.zig").Engine;
const Crypto = @import("crypto.zig");
///////////////// Constants
//
@ -13,25 +13,25 @@ const CryptoEngine = @import("crypto.zig").Engine;
//
// TODO
pub fn Identity(comptime crypto_engine: CryptoEngine) type {
_ = crypto_engine;
pub fn resolveIdentity(comptime crypto_engine: Crypto.Engine) type {
return struct {
const Self = @This();
//////// Fields
//
publicKey: []const u8,
privateKey: []const u8,
signature: []const u8,
privKey: [Crypto.Ed25519.secret_key_length]u8,
signatureKey: [Crypto.X25519.secret_key_size]u8,
hash: []const u8,
//////// Functions
//
pub fn generate() !Identity {
return .{
// .privateKey = crypto_engine.ed25519.generateKey(...),
// .signature = crypto_engine.x25519.
};
pub fn generate() !Self {
const result: Self = undefined;
crypto_engine.ed25519.generateKeys(null, &result.signatureKey, crypto_engine.random);
// TODO privKey and signature
return result;
}
};
}
@ -46,3 +46,44 @@ pub fn Identity(comptime crypto_engine: CryptoEngine) type {
const std = @import("std");
const expect = std.testing.expect;
const memeql = std.mem.eql;
const testPattern: u8 = 0b10101010;
const pubkey_size = Crypto.Ed25519.public_key_length;
const privkey_size = Crypto.Ed25519.secret_key_length;
// Fills out with alternating 0s and 1s
fn fillPattern(out: []u8) void {
for(out) |*byte| {
byte.* = testPattern;
}
}
pub fn generateFakeKeys(pubkey_buffer: *[pubkey_size]u8, privkey_buffer: *[privkey_size]u8, rng: Crypto.Random.Implementation) Crypto.CryptoError!void {
_ = rng;
fillPattern(pubkey_buffer);
fillPattern(privkey_buffer);
}
test "Basic identity generation" {
const fake_rng: Crypto.Random.Implementation = .{
.generate = fillPattern,
};
const fake_ed25519: Crypto.Ed25519.Implementation = .{
.generateKeys = generateFakeKeys,
};
const crypto_engine = Crypto.resolveEngine(.{
.random = fake_rng,
.ed25519 = fake_ed25519,
});
const Identity = resolveIdentity(crypto_engine);
const new_id: Identity = try Identity.generate();
try expect(memeql(u8, new_id.privKey, testPattern));
try expect(memeql(u8, new_id.signatureKey, testPattern));
// try expect(memeql(u8, new_id.hash, testPattern));
}