JubJubFq.fromBytes constructor
JubJubFq.fromBytes(
- List<int> bytes
)
Implementation
factory JubJubFq.fromBytes(List<int> bytes) {
if (bytes.length != 32) {
throw ArgumentException.invalidOperationArguments(
"fromBytes",
reason: "Invalid field encoding bytes length.",
);
}
final tmp = JubJubFq([
BigintUtils.fromBytes(bytes.sublist(0, 8), byteOrder: Endian.little),
BigintUtils.fromBytes(bytes.sublist(8, 16), byteOrder: Endian.little),
BigintUtils.fromBytes(bytes.sublist(16, 24), byteOrder: Endian.little),
BigintUtils.fromBytes(bytes.sublist(24, 32), byteOrder: Endian.little),
]);
BigInt borrow = BigInt.zero;
var temp = BigintUtils.sbb(
tmp.limbs[0],
JubJubFqConst.modulus.limbs[0],
borrow,
);
borrow = temp[1];
temp = BigintUtils.sbb(
tmp.limbs[1],
JubJubFqConst.modulus.limbs[1],
borrow,
);
borrow = temp[1];
temp = BigintUtils.sbb(
tmp.limbs[2],
JubJubFqConst.modulus.limbs[2],
borrow,
);
borrow = temp[1];
temp = BigintUtils.sbb(
tmp.limbs[3],
JubJubFqConst.modulus.limbs[3],
borrow,
);
borrow = temp[1];
// Convert to Montgomery form: tmp = tmp * r2
final result = tmp * JubJubFq.r2();
if ((borrow & BigInt.one) != BigInt.one) {
throw ArgumentException.invalidOperationArguments(
"fromBytes",
reason: "Invalid field encoding bytes.",
);
}
return result;
}