test in-place encrypt decrypt. it works
This commit is contained in:
28
src/main.zig
28
src/main.zig
@@ -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));
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user