decompress method

EdwardsPoint decompress()

Implementation

EdwardsPoint decompress() {
  final FieldElement y = FieldElement.fromByteArray(data);
  final FieldElement ySquare = y.square();
  final FieldElement u = ySquare - FieldElement.one;
  final FieldElement v = ySquare * _d + FieldElement.one;
  final SqrtRatioM1Result sqrt = FieldElement.sqrtRatioM1(u, v);
  if (sqrt.wasSquare != 1) {
    throw const FormatException('not a valid point');
  }
  final FieldElement sqrtResult = sqrt.result;
  final int isNegative = sqrtResult.isNegative();
  final FieldElement x =
      (-sqrt.result).select(sqrt.result, isNegative.fastEqual(data.bit(255)));
  return EdwardsPoint(x, y, FieldElement.one, x * y);
}