Function timingSafeSub [src]
Alias for std.crypto.timing_safe.sub
Subtract two integers serialized as arrays of the same size, in constant time.
The result is stored into result, and true is returned if an underflow occurred.
Prototype
pub fn sub(comptime T: type, a: []const T, b: []const T, result: []T, endian: Endian) bool
Parameters
T: type
a: []const T
b: []const T
result: []T
endian: Endian
Source
pub fn sub(comptime T: type, a: []const T, b: []const T, result: []T, endian: Endian) bool {
const len = a.len;
assert(len == b.len and len == result.len);
var borrow: u1 = 0;
if (endian == .little) {
var i: usize = 0;
while (i < len) : (i += 1) {
const ov1 = @subWithOverflow(a[i], b[i]);
const ov2 = @subWithOverflow(ov1[0], borrow);
result[i] = ov2[0];
borrow = ov1[1] | ov2[1];
}
} else {
var i: usize = len;
while (i != 0) {
i -= 1;
const ov1 = @subWithOverflow(a[i], b[i]);
const ov2 = @subWithOverflow(ov1[0], borrow);
result[i] = ov2[0];
borrow = ov1[1] | ov2[1];
}
}
return @as(bool, @bitCast(borrow));
}