diff --git a/src/crypto.zig b/src/crypto.zig index 4fa74f6..83abb09 100644 --- a/src/crypto.zig +++ b/src/crypto.zig @@ -1,3 +1,7 @@ +// WARNING NOT FUNCTIONAL !!! +// This is just a draft +// TODO + ///////////////// Imports // @@ -69,5 +73,5 @@ test "AES encryption defaults" { var data = [_]u8{ 1, 2, 3, 4 }; const key = [_]u8{ 1, 2, 3, 4 }; const iv = [_]u8{ 1, 2, 3, 4 }; - crypto.aes_cbc256.encrypt(&data, &key, &iv); + crypto.Aes.CBC_265.encrypt(&data, &key, &iv); } diff --git a/src/crypto/aes.zig b/src/crypto/aes.zig index aceb2c9..df886b2 100644 --- a/src/crypto/aes.zig +++ b/src/crypto/aes.zig @@ -9,7 +9,7 @@ pub const CBC256_Implementation = struct { }; // TODO -pub const CBC256_DefaultImplementation = struct { +pub const CBC265_DefaultImplementation = struct { // Zig stdlib seems to provide no support for AES CBC265 // It may need some custom implementation or another library diff --git a/src/crypto/hkdf.zig b/src/crypto/hkdf.zig index 05a93a8..f1e9458 100644 --- a/src/crypto/hkdf.zig +++ b/src/crypto/hkdf.zig @@ -1,29 +1,9 @@ pub const Implementation = struct { - prk_length: comptime_int, - - expand: *const fn (out: []u8, ctx: []const u8, prk: *[Implementation.prk_length]u8) void, - extract: *const fn (out: *[Implementation.prk_length]u8, salt: []const u8, ikm: []const u8) void, - }; pub const defaultImplementation = struct { - const Sha256 = @import("std").crypto.hash.sha2.Sha256; - - const HashImpl = Sha256; - const HmacImpl = @import("std").crypto.auth.hmac.Hmac(HashImpl); - - const Hkdf = @import("std").crypto.kdf.hkdf.Hkdf(HmacImpl); - - pub const prk_length = Hkdf.prk_length; - - pub fn expand(out: []u8, ctx: []const u8, prk: *[prk_length]u8) void { - Hkdf.expand(out, ctx, prk); - } - - pub fn extract(out: *[prk_length]u8, salt: []const u8, ikm: []const u8) void { - out *= Hkdf.extract(salt, ikm); - } + const Hkdf = @import("std").crypto.kdf.hkdf.Hkdf; }; diff --git a/src/crypto/hmac.zig b/src/crypto/hmac.zig index 131bb20..cb096e8 100644 --- a/src/crypto/hmac.zig +++ b/src/crypto/hmac.zig @@ -1,20 +1,15 @@ pub const Implementation = struct { - mac_length: comptime_int, - - create: *const fn (out: *[Implementation.mac_length]u8, msg: []const u8, key: []const u8) void, }; pub const defaultImplementation = struct { - const Sha256 = @import("std").crypto.hash.sha2.Sha256; + const Hmac = @import("std").crypto.auth.hmac.Hmac; - const HashImpl = Sha256; - const Hmac = @import("std").crypto.auth.hmac.Hmac(Sha256); - - pub const mac_length = Hmac.mac_length; - - pub fn create(out: *[mac_length]u8, msg: []const u8, key: []const u8) void { - Hmac.create(out, msg, key); + pub fn create(out: []u8, msg: []const u8, key: []const u8) !void { + _ = out; + _ = msg; + _ = key; + return error.NotImplemented; } }; diff --git a/src/crypto/sha256.zig b/src/crypto/sha256.zig index 0d913a1..70478e0 100644 --- a/src/crypto/sha256.zig +++ b/src/crypto/sha256.zig @@ -1,17 +1,18 @@ pub const Implementation = struct { - hash_length: comptime_int, - - hash: *const fn (buffer: []const u8, out: *[Implementation.hash_length]u8) void, + hash: *const fn (buffer: []const u8, out: []u8) void, }; pub const defaultImplementation = struct { const Sha256 = @import("std").crypto.hash.sha2.Sha256; - pub const hash_len = Sha256.digest_length; + const HASH_LEN = 32; // In bytes - pub fn hash(buffer: []const u8, out: *[hash_len]u8) !void { + pub fn hash(buffer: []const u8, out: []u8) !void { + if (out.len < HASH_LEN) { + return error.BufferTooShort; + } Sha256.hash(buffer, out, .{}); } };