JubJubFr.fromBytes constructor
JubJubFr.fromBytes(
- List<int> bytes
)
Implementation
factory JubJubFr.fromBytes(List<int> bytes) {
bytes = bytes.exc(
length: 32,
operation: "fromBytes",
reason: "Invalid field bytes length.",
);
final tmp = JubJubFr([
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;
List<BigInt> temp = BigintUtils.sbb(
tmp.limbs[0],
JubJubFrConst.modulus.limbs[0],
borrow,
);
borrow = temp[1];
temp = BigintUtils.sbb(
tmp.limbs[1],
JubJubFrConst.modulus.limbs[1],
borrow,
);
borrow = temp[1];
temp = BigintUtils.sbb(
tmp.limbs[2],
JubJubFrConst.modulus.limbs[2],
borrow,
);
borrow = temp[1];
temp = BigintUtils.sbb(
tmp.limbs[3],
JubJubFrConst.modulus.limbs[3],
borrow,
);
borrow = temp[1];
final result = tmp * JubJubFr.r2();
if ((borrow & BigInt.one) != BigInt.one) {
throw ArgumentException.invalidOperationArguments(
"JubJubFr",
reason: "Invalid point encoding bytes.",
);
}
return result;
}