reticulum-zero/src/crypto.zig

74 lines
2.2 KiB
Zig
Raw Normal View History

2026-06-13 23:20:25 +02:00
// WARNING NOT FUNCTIONAL !!!
// This is just a draft
// TODO
///////////////// Imports
//
const AES = @import("crypto/aes.zig");
const ED25519 = @import("crypto/ed25519.zig");
const HKDF = @import("crypto/hkdf.zig");
const HMAC = @import("crypto/hmac.zig");
const SHA256 = @import("crypto/sha256.zig");
const SHA512 = @import("crypto/sha512.zig");
const X25519= @import("crypto/x25519.zig");
2026-06-13 23:20:25 +02:00
///////////////// Structs
2026-06-13 23:20:25 +02:00
//
pub const PartialEngine = struct {
aes_cbc256: ? AES.CBC256_Implementation = null,
ed25519: ? ED25519.Implementation = null,
hkdf: ? HKDF.Implementation = null,
hmac: ? HMAC.Implementation = null,
sha256: ? SHA256.Implementation = null,
sha512: ? SHA512.Implementation = null,
x25519: ? X25519.Implementation = null,
};
2026-06-13 23:20:25 +02:00
pub const Engine = struct {
aes_cbc256: AES.CBC256_Implementation,
ed25519: ED25519.Implementation,
hkdf: HKDF.Implementation,
hmac: HMAC.Implementation,
sha256: SHA256.Implementation,
sha512: SHA512.Implementation,
x25519: X25519.Implementation,
};
///////////////// Functions
//
// Initializes the cyrpto engine with the functions given inside Provider
// These functions must follow the same structure as the struct returned by this
// function and its sub-structs.
pub fn resolveEngine(comptime provider: PartialEngine) Engine {
return .{
.aes_cbc256 = provider.aes_cbc256 orelse AES.CBC256_DefaultImplementation,
.ed25519 = provider.ed25519 orelse ED25519.DefaultImplementation,
.hkdf = provider.hkdf orelse HKDF.DefaultImplementation,
.hmac = provider.hmac orelse HMAC.DefaultImplementation,
.sha256 = provider.sha256 orelse SHA256.DefaultImplementation,
.sha512 = provider.sha512 orelse SHA512.DefaultImplementation,
.x25519 = provider.x25519 orelse X25519.DefaultImplementation,
2026-06-13 23:20:25 +02:00
};
}
///////////////// Tests
//
const std = @import("std");
test "AES encryption defaults" {
const crypto = resolveEngine(.{});
2026-06-13 23:20:25 +02:00
var data = [_]u8{ 1, 2, 3, 4 };
const key = [_]u8{ 1, 2, 3, 4 };
const iv = [_]u8{ 1, 2, 3, 4 };
crypto.Aes.CBC_265.encrypt(&data, &key, &iv);
}