diff --git a/src/main.zig b/src/main.zig index 97aa33b..6875ac0 100644 --- a/src/main.zig +++ b/src/main.zig @@ -201,3 +201,31 @@ fn digest(ally: std.mem.Allocator, data: []const u8, case: std.fmt.Case) ![]cons } 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)); +}