childKey method
Derives a child key from the current key, based on the provided index.
Implementation
@override
Bip32Slip10Nist256p1Hybrid childKey(Bip32KeyIndex index) {
final isPublic = isPublicOnly;
if (isPublicOnly) {
throw Bip32KeyError(
'Nist256p1 Hyprid Derivation without private key is not supported',
);
}
final secpPublicKey = Bip32PublicKey(
IPrivateKey.fromBytes(
privateKey.raw,
EllipticCurveTypes.secp256k1,
).publicKey,
publicKey.keyData,
publicKey.keyNetVer,
);
// final secPP
if (!isPublic) {
if (!index.isHardened && !isPublicDerivationSupported) {
throw Bip32KeyError.notHardenedIndexNotSupported;
}
final result = keyDerivator.deriveFromSecret(
parent: privateKey,
ctx: secpPublicKey,
index: index,
type: EllipticCurveTypes.secp256k1,
);
return Bip32Slip10Nist256p1Hybrid._(
keyData: Bip32KeyData(
chainCode: result.chainCode,
depth: depth.increase(),
index: index,
fingerPrint: fingerPrint,
),
keyNetVer: keyNetVersions,
privKey: result.key,
pubKey: null,
);
}
if (!isPublicDerivationSupported) {
throw Bip32KeyError.publicDerivationNotSupported;
}
if (index.isHardened) {
throw Bip32KeyError.publicHardenedIndexNotSupported;
}
final result = keyDerivator.deriveFromPublic(
parent: secpPublicKey,
index: index,
type: EllipticCurveTypes.secp256k1,
);
return Bip32Slip10Nist256p1Hybrid._(
keyData: Bip32KeyData(
chainCode: result.chainCode,
depth: depth.increase(),
index: index,
fingerPrint: fingerPrint,
),
keyNetVer: keyNetVersions,
privKey: null,
pubKey: result.key,
);
}