VestaAffineNativePoint.fromBytes constructor
VestaAffineNativePoint.fromBytes(
- List<int> bytes
)
Implementation
factory VestaAffineNativePoint.fromBytes(List<int> bytes) {
if (bytes.length != 32) {
throw ArgumentException.invalidOperationArguments(
"VestaAffineNativePoint",
name: "bytes",
reason: "Invalid point bytes length.",
expecteLen: 32,
);
}
final tmp = bytes.clone();
final ySign = (tmp[31] >> 7) & 1;
tmp[31] &= 0x7F;
final x = VestaNativeFq.fromBytes(tmp);
if (x.isZero() && ySign == 0) {
return VestaAffineNativePoint.identity();
}
final x3 = x.square() * x;
final rhs = (x3 + PastaCurveParams.vestaNative.b);
final y = rhs.sqrt().sqrtOrNull();
if (y == null) {
throw ArgumentException.invalidOperationArguments(
"VestaAffineNativePoint",
name: "bytes",
reason: "Invalid point bytes.",
);
}
final sign = y.isOdd() ? 1 : 0;
final flip = (ySign ^ sign) == 1;
final yFinal = flip ? -y : y;
return VestaAffineNativePoint(x: x, y: yFinal);
}