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