| ... | @@ -503,8 +503,14 @@ pub fn chacha20poly1305Open(dst: []u8, ciphertext: []const u8, data: []const u8, | ... | @@ -503,8 +503,14 @@ pub fn chacha20poly1305Open(dst: []u8, ciphertext: []const u8, data: []const u8, |
| 503 | var computedTag: [16]u8 = undefined; | 503 | var computedTag: [16]u8 = undefined; |
| 504 | mac.final(computedTag[0..]); | 504 | mac.final(computedTag[0..]); |
| 505 | | 505 | |
| 506 | // verify mac | 506 | // verify mac in constant time |
| 507 | if (!mem.eql(u8, polyTag, computedTag[0..])) { | 507 | // TODO: we can't currently guarantee that this will run in constant time. |
| | 508 | // See https://github.com/ziglang/zig/issues/1776 |
| | 509 | var acc: u8 = 0; |
| | 510 | for (computedTag) |_, i| { |
| | 511 | acc |= (computedTag[i] ^ polyTag[i]); |
| | 512 | } |
| | 513 | if (acc != 0) { |
| 508 | return false; | 514 | return false; |
| 509 | } | 515 | } |
| 510 | | 516 | |