deriveExtendedKey method

(OrchardExtendedSpendingKey, OrchardFullViewingKey) deriveExtendedKey({
  1. required OrchardExtendedSpendingKey parent,
  2. required OrchardExtendedFullViewKey parentFvk,
  3. required Bip32KeyIndex index,
  4. required ZCryptoContext context,
})

Implementation

(OrchardExtendedSpendingKey, OrchardFullViewingKey) deriveExtendedKey({
  required OrchardExtendedSpendingKey parent,
  required OrchardExtendedFullViewKey parentFvk,
  required Bip32KeyIndex index,
  required ZCryptoContext context,
}) {
  final child = deriveFromSecret(parent: parent, index: index);
  final fp = Bip32FingerPrint(
    deriveFingerPrint(
      parentFvk.fvk,
    ).sublist(0, Bip32FingerPrint.fixedLength()),
  );
  final key = OrchardSpendingKey(child.key);
  OrchardSpendAuthorizingKey.fromSpendingKey(key);
  final fvk = OrchardFullViewingKey.fromSpendKey(key);
  OrchardKeyAgreementPrivateKey.deriveInner(fvk: fvk, context: context);
  OrchardKeyAgreementPrivateKey.deriveInner(
    fvk: fvk.deriveInternal(),
    context: context,
  );
  return (
    OrchardExtendedSpendingKey(
      sk: key,
      keyData: Bip32KeyData(
        depth: parent.keyData.depth.increase(),
        chainCode: child.chainCode,
        index: index,
        fingerPrint: fp,
      ),
    ),
    fvk,
  );
}