secp256k1EckeyPubkeyParse static method
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;
}