childKey method

  1. @override
Bip32Slip10Nist256p1Hybrid childKey(
  1. Bip32KeyIndex index
)
override

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,
  );
}