test in-place encrypt decrypt. it works

This commit is contained in:
David Allemang
2024-03-05 10:44:39 -05:00
parent 4fc1436431
commit 3b79a87095

View File

@@ -201,3 +201,31 @@ fn digest(ally: std.mem.Allocator, data: []const u8, case: std.fmt.Case) ![]cons
} }
return res; return res;
} }
// it even works in ReleaseFast so I think it's ok.
test "in-place-encrypt" {
const al = std.testing.allocator;
var key: [AES.key_length]u8 = undefined;
std.crypto.random.bytes(&key);
const iv: [AES.nonce_length]u8 = undefined;
std.crypto.random.bytes(&key);
var tag: [AES.tag_length]u8 = undefined;
// 1mb message. very big. should find an error if one exists.
const original_message: []u8 = try al.alloc(u8, 1 << 20);
defer al.free(original_message);
std.crypto.random.bytes(original_message);
const message = try al.dupe(u8, original_message);
defer al.free(message);
const ad: []u8 = try al.dupe(u8, "u");
defer al.free(ad);
AES.encrypt(message, &tag, message, ad, iv, key);
try std.testing.expect(!std.mem.eql(u8, message, original_message));
try AES.decrypt(message, message, tag, ad, iv, key);
try std.testing.expect(std.mem.eql(u8, message, original_message));
}