deriveExtendedPublicChildKey function
CKDpub in the specification
Implementation
ExtendedPublicKey deriveExtendedPublicChildKey(
ExtendedPublicKey parent, int childNumber) {
if (childNumber >= firstHardenedChild) {
throw InvalidChildNumber();
}
var message = _derivePublicMessage(parent, childNumber);
var hash = hmacSha512(parent.chainCode!, message);
var leftSide = utils.decodeBigIntWithSign(1, _leftFrom(hash));
if (leftSide >= curve.n) {
throw KeyBiggerThanOrder();
}
var childPublicKey = publicKeyFor(leftSide) + parent.q;
if (childPublicKey!.isInfinity) {
throw KeyInfinite();
}
return ExtendedPublicKey(
q: childPublicKey,
chainCode: _rightFrom(hash),
childNumber: childNumber,
depth: parent.depth! + 1,
parentFingerprint: parent.fingerprint,
);
}