secp256k1FeImplIsSquareVar static method

int secp256k1FeImplIsSquareVar(
  1. Secp256k1Fe x
)

Implementation

static int secp256k1FeImplIsSquareVar(Secp256k1Fe x) {
  Secp256k1Fe tmp = Secp256k1Fe();
  Secp256k1ModinvSigned s = Secp256k1ModinvSigned();
  int jac, ret;

  tmp = x.clone();
  secp256k1FeNormalizeVar(tmp);

  /// secp256k1Jacobi64MaybeVar cannot deal with input 0.
  if (secp256k1FeIsZero(tmp).toBool) {
    return 1;
  }
  secp256k1FeToSigned62(s, tmp);
  jac = secp256k1Jacobi64MaybeVar(s, Secp256k1Const.secp256k1ConstModinfoFe);
  if (jac == 0) {
    Secp256k1Fe dummy = Secp256k1Fe();
    ret = secp256k1FeSqrt(dummy, tmp);
  } else {
    ret = (jac >= 0).toInt;
  }
  return ret;
}