Bls12Fp.fromBytes constructor
Creates a BLS12-381 field element from a byte array.
Implementation
factory Bls12Fp.fromBytes(List<int> bytes) {
if (bytes.length != 48) {
throw ArgumentException.invalidOperationArguments(
"Bls12Fp",
reason: "Invalid field bytes length.",
);
}
final tmp = Bls12Fp([
BigintUtils.fromBytes(bytes.sublist(40), byteOrder: Endian.big),
BigintUtils.fromBytes(bytes.sublist(32, 40), byteOrder: Endian.big),
BigintUtils.fromBytes(bytes.sublist(24, 32), byteOrder: Endian.big),
BigintUtils.fromBytes(bytes.sublist(16, 24), byteOrder: Endian.big),
BigintUtils.fromBytes(bytes.sublist(8, 16), byteOrder: Endian.big),
BigintUtils.fromBytes(bytes.sublist(0, 8), byteOrder: Endian.big),
]);
BigInt borrow = BigInt.zero;
List<BigInt> temp = BigintUtils.sbb(
tmp.limbs[0],
Bls12FpConst.modulus.limbs[0],
borrow,
);
borrow = temp[1];
temp = BigintUtils.sbb(tmp.limbs[1], Bls12FpConst.modulus.limbs[1], borrow);
borrow = temp[1];
temp = BigintUtils.sbb(tmp.limbs[2], Bls12FpConst.modulus.limbs[2], borrow);
borrow = temp[1];
temp = BigintUtils.sbb(tmp.limbs[3], Bls12FpConst.modulus.limbs[3], borrow);
borrow = temp[1];
temp = BigintUtils.sbb(tmp.limbs[4], Bls12FpConst.modulus.limbs[4], borrow);
borrow = temp[1];
temp = BigintUtils.sbb(tmp.limbs[5], Bls12FpConst.modulus.limbs[5], borrow);
borrow = temp[1];
// final result = tmp * Bls12FpConst.r2;
if ((borrow & BigInt.one) != BigInt.one) {
throw ArgumentException.invalidOperationArguments(
"Bls12Fp",
reason: "Invalid field encoding bytes.",
);
}
return tmp * Bls12Fp.r2();
}