Crypto engine design enhancements and new library entry point
This commit is contained in:
parent
cd83af4ef9
commit
693d7cfe51
9 changed files with 132 additions and 45 deletions
|
|
@ -6,17 +6,55 @@
|
|||
//
|
||||
|
||||
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");
|
||||
|
||||
|
||||
///////////////// Public functions
|
||||
///////////////// Structs
|
||||
//
|
||||
|
||||
pub fn CryptoEngine(comptime Provider: anytype) type {
|
||||
return struct {
|
||||
const Self = @This();
|
||||
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,
|
||||
};
|
||||
|
||||
pub const Aes = AES.AesEngine(Provider);
|
||||
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,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -27,7 +65,7 @@ const std = @import("std");
|
|||
|
||||
test "AES encryption defaults" {
|
||||
|
||||
const crypto = CryptoEngine();
|
||||
const crypto = resolveEngine(.{});
|
||||
|
||||
var data = [_]u8{ 1, 2, 3, 4 };
|
||||
const key = [_]u8{ 1, 2, 3, 4 };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue