deriveInternal method
Implementation
SaplingExtendedSpendingKey deriveInternal(SaplingExtendedSpendingKey master) {
final fvk = master.sk.toFvk();
final i = QuickCrypto.blake2b256Hash(
fvk.toBytes(),
extraBlocks: [master.keyData.dk.toBytes()],
personalization: SaplingKeyUtils.saplingInternalPersonalization.codeUnits,
);
final iNsk = JubJubFr.fromBytes64(
PrfExpand.saplingZip32InternalNsk.apply(i),
);
final r = PrfExpand.saplingZip32InternalDkOvk.apply(i);
final nskInternal = iNsk + master.sk.nsk;
final dkInternal = r.sublist(0, 32);
final ovkInternal = r.sublist(32);
return SaplingExtendedSpendingKey(
sk: SaplingExpandedSpendingKey(
ask: master.sk.ask,
nsk: nskInternal,
ovk: SaplingOutgoingViewingKey(ovkInternal),
),
keyData: SaplingZip32KeyData(
dk: SaplingDiversifierKey(dkInternal),
chainCode: master.keyData.chainCode,
depth: master.keyData.depth,
fingerPrint: master.keyData.fingerPrint,
index: master.keyData.index,
),
);
}