From b67ae9ec59e46beff4832852e0950ca9cc3057b2 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 26 Jun 2026 16:22:01 +0200 Subject: [PATCH] Fixed a bug in the build file, fixed functions signature for aes and ed25519, made visibility changes in packet and made the enums needed for destination --- build.zig | 2 +- src/crypto/aes.zig | 8 ++++---- src/crypto/ed25519.zig | 14 +++++++++++--- src/destination.zig | 42 ++++++++++++++++++++++++++++++++++++++++++ src/packet.zig | 18 +++++++++--------- 5 files changed, 67 insertions(+), 17 deletions(-) create mode 100644 src/destination.zig diff --git a/build.zig b/build.zig index ffa5b3d..cac537c 100644 --- a/build.zig +++ b/build.zig @@ -23,7 +23,7 @@ pub fn build(b: *std.Build) void { // Configuration .target = b.standardTargetOptions(.{}), .optimize = b.standardOptimizeOption(.{}), - .linkage = if (opt_shared) .static else .dynamic, + .linkage = if (opt_shared) .dynamic else .static, .test_step = opt_test }; diff --git a/src/crypto/aes.zig b/src/crypto/aes.zig index ec77f0c..853f39f 100644 --- a/src/crypto/aes.zig +++ b/src/crypto/aes.zig @@ -4,18 +4,18 @@ pub const CBC256_Implementation = struct { pub const KEY_SIZE = 32; // NOTE: data should be padded to make its length be a multiple of BLOCK_SIZE - encypt: *const fn (key: *const [KEY_SIZE]u8, iv: *const [BLOCK_SIZE]u8, data: *const []u8, ) void, - decrypt: *const fn (key: *const [KEY_SIZE]u8, iv: *const [BLOCK_SIZE]u8, data: *const []u8, ) void, + encypt: *const fn (key: *const [KEY_SIZE]u8, iv: *const [BLOCK_SIZE]u8, data: *const []u8) void, + decrypt: *const fn (key: *const [KEY_SIZE]u8, iv: *const [BLOCK_SIZE]u8, data: *const []u8) void, }; // TODO pub const CBC265_DefaultImplementation = struct { - pub fn encrypt( key: *const [32]u8, iv: *const [16]u8, data: *const []u8 ) void { + pub fn encrypt(key: *const [32]u8, iv: *const [16]u8, data: *const []u8) !void { _ = key; _ = iv; _ = data; } - pub fn decrypt( key: *const [32]u8, iv: *const [16]u8, data: *const []u8 ) void { + pub fn decrypt(key: *const [32]u8, iv: *const [16]u8, data: *const []u8) !void { _ = key; _ = iv; _ = data; diff --git a/src/crypto/ed25519.zig b/src/crypto/ed25519.zig index 5ab0ca1..2da4bc1 100644 --- a/src/crypto/ed25519.zig +++ b/src/crypto/ed25519.zig @@ -1,19 +1,27 @@ pub const Implementation = struct { + pub const KEY_SIZE = 32; pub const SIGNATURE_SIZE = 64; + + generateKey: *const fn (privkey_buffer: *[KEY_SIZE]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, }; // TODO pub const defaultImplementation = struct { - fn sign(key: *const [32]u8, data: *const []const u8, signature_out: *const [64]u8) void { + + pub fn generateKeys(privkey_buffer: *[32]u8) !void { + _ = privkey_buffer; + } + + pub fn sign(key: *const [32]u8, data: *const []const u8, signature_out: *const [64]u8) !void { _ = key; _ = data; _ = signature_out; - } - fn verify(signature: *const [64]u8, data: *const []const u8) void { + + pub fn verify(signature: *const [64]u8, data: *const []const u8) !void { _ = signature; _ = data; } diff --git a/src/destination.zig b/src/destination.zig new file mode 100644 index 0000000..77ea87a --- /dev/null +++ b/src/destination.zig @@ -0,0 +1,42 @@ +///////////////// Constants +// + +///////////////// Enums +// + +pub const Type = enum(u2) { + single = 0x00, + group = 0x01, + plain = 0x02, + link = 0x03, +}; + +pub const ProofStrategy = enum(u2) { + prove_none = 0x21, + prove_app = 0x22, + prove_all = 0x23, +}; + +pub const RequestPolicy = enum(u2) { + allow_none = 0x00, + allow_all = 0x01, + allow_list = 0x02, +}; + +pub const Direction = enum(u2) { + in = 0x11, + out = 0x12, +}; + +///////////////// Functions +// + +//////// Helper functions +// + +//////// Public functions +// + +///////////////// Tests +// + diff --git a/src/packet.zig b/src/packet.zig index 7589890..2d1290c 100644 --- a/src/packet.zig +++ b/src/packet.zig @@ -7,39 +7,39 @@ const ADDRESS_SIZE = 16; ///////////////// Enums // -const IfacFlag = enum(u1) { +pub const IfacFlag = enum(u1) { open = 0, // Packet for publically accessible interface authenticated = 1, // Interface authentication is included in packet }; -const HeaderType = enum(u1) { +pub const HeaderType = enum(u1) { type1 = 0, // One address field type2 = 1, // Two address fields }; -const ContextFlag = enum(u1) { +pub const ContextFlag = enum(u1) { // Meaning depends on packet context unset = 0, set = 1, }; -const PropagationType = enum(u1) { +pub const PropagationType = enum(u1) { broadcast = 0, transport = 1 }; -const DestinationType = enum(u2) { +pub const DestinationType = enum(u2) { single = 0b0, group = 0b01, plain = 0b10, link = 0b11, }; -const PacketType = enum(u2) { +pub const PacketType = enum(u2) { data = 0b0, announce = 0b01, link_request = 0b10, proof = 0b11, }; -const PacketContext = enum(u8) { +pub const PacketContext = enum(u8) { none = 0x00, // Generic data packet resource = 0x01, // Packet is part of a resource resource_adv = 0x02, // Packet is a resource advertisement @@ -66,7 +66,7 @@ const PacketContext = enum(u8) { ///////////////// Structs // -const PacketHeader = packed struct { +pub const PacketHeader = packed struct { ifac: IfacFlag, header: HeaderType, context: ContextFlag, @@ -76,7 +76,7 @@ const PacketHeader = packed struct { hops: u8, }; -const Packet = struct { +pub const Packet = struct { header: PacketHeader, address1: [ADDRESS_SIZE]u8, address2: [ADDRESS_SIZE]u8,