RShift function
Implementation
List<int> RShift(List<int> x, int n) {
int bit_shift = n % 8;
int byte_shift = n ~/ 8;
int mask = make_rshift_mask(bit_shift);
int overflow_mask = ~mask;
var result = List<int>.generate(x.length, (i) => 0);
// valtype result(x.size(), 0x00);
for (int i = 0; i < x.length; i++) {
int k = i + byte_shift;
if (k < x.length) {
int val = (x[i] & mask);
val >>= bit_shift;
result[k] |= val;
}
if (k + 1 < x.length) {
int carryval = (x[i] & overflow_mask);
carryval <<= 8 - bit_shift;
result[k + 1] |= carryval;
}
}
return result;
}