deriveInternal method

Implementation

SaplingDiversifiableFullViewingKey deriveInternal() {
  final generator = SaplingKeyUtils.proofGenerationKeyGeneratorNative;
  final i = QuickCrypto.blake2b256Hash(
    fvk.toBytes(),
    extraBlocks: [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 SaplingDiversifiableFullViewingKey(
    fvk: SaplingFullViewingKey(
      ovk: SaplingOutgoingViewingKey(ovkInternal),
      vk: SaplingViewingKey(
        ak: fvk.vk.ak,
        nk: SaplingNullifierDerivingKey(nkInternal),
      ),
    ),
    dk: SaplingDiversifierKey(dkInternal),
  );
}