fvkDeriveInternal method

Implementation

SaplingExtendedFullViewKey fvkDeriveInternal(
  SaplingExtendedFullViewKey master,
) {
  final generator = SaplingKeyUtils.proofGenerationKeyGeneratorNative;
  final fvk = master.fvk;
  final i = QuickCrypto.blake2b256Hash(
    fvk.toBytes(),
    extraBlocks: [master.keyData.dk.toBytes()],
    personalization: SaplingKeyUtils.saplingInternalPersonalization.codeUnits,
  );
  final iNsk = JubJubNativeFr.fromBytes64(
    PrfExpand.saplingZip32InternalNsk.apply(i),
  );
  final r = PrfExpand.saplingZip32InternalDkOvk.apply(i);
  final nkInternal = generator * iNsk + fvk.vk.nk.inner;
  final dkInternal = r.sublist(0, 32);
  final ovkInternal = r.sublist(32);
  return SaplingExtendedFullViewKey(
    fvk: SaplingFullViewingKey(
      vk: SaplingViewingKey(
        ak: fvk.vk.ak,
        nk: SaplingNullifierDerivingKey(nkInternal),
      ),
      ovk: SaplingOutgoingViewingKey(ovkInternal),
    ),
    keyData: SaplingZip32KeyData(
      dk: SaplingDiversifierKey(dkInternal),
      chainCode: master.keyData.chainCode,
      depth: master.keyData.depth,
      fingerPrint: master.keyData.fingerPrint,
      index: master.keyData.index,
    ),
  );
}