secp256k1EckeyPubkeyParse static method

bool secp256k1EckeyPubkeyParse(
  1. Secp256k1Ge elem,
  2. List<int> pub
)

Implementation

static bool secp256k1EckeyPubkeyParse(Secp256k1Ge elem, List<int> pub) {
  if (pub.length == 33 &&
      (pub[0] == Secp256k1Const.secp256k1TagPubkeyEven ||
          pub[0] == Secp256k1Const.secp256k1TagPubkeyOdd)) {
    Secp256k1Fe x = Secp256k1Fe();
    final n =
        secp256k1FeImplSetB32Limit(x, pub.sublist(1)) == 1 &&
        secp256k1GeSetXoVar(
              elem,
              x,
              (pub[0] == Secp256k1Const.secp256k1TagPubkeyOdd) ? 1 : 0,
            ) ==
            1;
    return n;
  } else if (pub.length == 65 &&
      (pub[0] == Secp256k1Const.secp256k1TagPubkeyUncompressed ||
          pub[0] == Secp256k1Const.secp256k1TagPubkeyHybridEven ||
          pub[0] == Secp256k1Const.secp256k1TagPubkeyHybridOdd)) {
    Secp256k1Fe x = Secp256k1Fe();
    Secp256k1Fe y = Secp256k1Fe();
    if (secp256k1FeImplSetB32Limit(x, pub.sublist(1, 33)) != 1 ||
        secp256k1FeImplSetB32Limit(y, pub.sublist(33)) != 1) {
      return false;
    }
    secp256k1GeSetXy(elem, x, y);
    final isOdd = secp256k1FeIsOdd(y);
    if ((pub[0] == Secp256k1Const.secp256k1TagPubkeyHybridEven ||
            pub[0] == Secp256k1Const.secp256k1TagPubkeyHybridOdd) &&
        isOdd !=
            ((pub[0] == Secp256k1Const.secp256k1TagPubkeyHybridOdd)
                ? 1
                : 0)) {
      return false;
    }
    return secp256k1GeIsValidVar(elem) == 1;
  }
  return false;
}