Compare commits
2 commits
ff60995aaa
...
150c5b2e38
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
150c5b2e38 | ||
|
|
1b98394fe4 |
5 changed files with 39 additions and 19 deletions
|
|
@ -1,7 +1,3 @@
|
||||||
// WARNING NOT FUNCTIONAL !!!
|
|
||||||
// This is just a draft
|
|
||||||
// TODO
|
|
||||||
|
|
||||||
///////////////// Imports
|
///////////////// Imports
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
@ -73,5 +69,5 @@ test "AES encryption defaults" {
|
||||||
var data = [_]u8{ 1, 2, 3, 4 };
|
var data = [_]u8{ 1, 2, 3, 4 };
|
||||||
const key = [_]u8{ 1, 2, 3, 4 };
|
const key = [_]u8{ 1, 2, 3, 4 };
|
||||||
const iv = [_]u8{ 1, 2, 3, 4 };
|
const iv = [_]u8{ 1, 2, 3, 4 };
|
||||||
crypto.Aes.CBC_265.encrypt(&data, &key, &iv);
|
crypto.aes_cbc256.encrypt(&data, &key, &iv);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ pub const CBC256_Implementation = struct {
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
pub const CBC265_DefaultImplementation = struct {
|
pub const CBC256_DefaultImplementation = struct {
|
||||||
|
|
||||||
// Zig stdlib seems to provide no support for AES CBC265
|
// Zig stdlib seems to provide no support for AES CBC265
|
||||||
// It may need some custom implementation or another library
|
// It may need some custom implementation or another library
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,29 @@
|
||||||
pub const Implementation = struct {
|
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 {
|
pub const defaultImplementation = struct {
|
||||||
|
|
||||||
const Hkdf = @import("std").crypto.kdf.hkdf.Hkdf;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
pub const Implementation = struct {
|
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 {
|
pub const defaultImplementation = struct {
|
||||||
|
|
||||||
const Hmac = @import("std").crypto.auth.hmac.Hmac;
|
const Sha256 = @import("std").crypto.hash.sha2.Sha256;
|
||||||
|
|
||||||
pub fn create(out: []u8, msg: []const u8, key: []const u8) !void {
|
const HashImpl = Sha256;
|
||||||
_ = out;
|
const Hmac = @import("std").crypto.auth.hmac.Hmac(Sha256);
|
||||||
_ = msg;
|
|
||||||
_ = key;
|
pub const mac_length = Hmac.mac_length;
|
||||||
return error.NotImplemented;
|
|
||||||
|
pub fn create(out: *[mac_length]u8, msg: []const u8, key: []const u8) void {
|
||||||
|
Hmac.create(out, msg, key);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,17 @@
|
||||||
pub const Implementation = struct {
|
pub const Implementation = struct {
|
||||||
|
|
||||||
hash: *const fn (buffer: []const u8, out: []u8) void,
|
hash_length: comptime_int,
|
||||||
|
|
||||||
|
hash: *const fn (buffer: []const u8, out: *[Implementation.hash_length]u8) void,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const defaultImplementation = struct {
|
pub const defaultImplementation = struct {
|
||||||
|
|
||||||
const Sha256 = @import("std").crypto.hash.sha2.Sha256;
|
const Sha256 = @import("std").crypto.hash.sha2.Sha256;
|
||||||
|
|
||||||
const HASH_LEN = 32; // In bytes
|
pub const hash_len = Sha256.digest_length;
|
||||||
|
|
||||||
pub fn hash(buffer: []const u8, out: []u8) !void {
|
pub fn hash(buffer: []const u8, out: *[hash_len]u8) !void {
|
||||||
if (out.len < HASH_LEN) {
|
|
||||||
return error.BufferTooShort;
|
|
||||||
}
|
|
||||||
Sha256.hash(buffer, out, .{});
|
Sha256.hash(buffer, out, .{});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue