Browse Source

Generate spend proof via librustzcash

z_signmessage
Duke Leto 4 years ago
parent
commit
1b13ac5b52
  1. 30
      src/wallet/rpcwallet.cpp

30
src/wallet/rpcwallet.cpp

@ -920,12 +920,6 @@ UniValue z_signmessage(const UniValue& params, bool fHelp, const CPubKey& mypk)
SaplingNoteEntry noteEntry;
// TODO: get sig data, serialized, encode, return
CHashWriter ss(SER_GETHASH, 0);
// TODO: different magic?
ss << strMessageMagic;
ss << strMessage;
auto ctx = librustzcash_sapling_proving_ctx_init();
// Empty output script.
uint256 dataToBeSigned;
@ -953,13 +947,33 @@ UniValue z_signmessage(const UniValue& params, bool fHelp, const CPubKey& mypk)
uint256 anchor;
SaplingWitness witness;
SpendDescriptionInfo spend = SpendDescriptionInfo(expsk, fakenote, anchor, witness);
// Generate spendAuthSig
librustzcash_sapling_spend_sig(
spend.expsk.ask.begin(),
spend.alpha.begin(),
dataToBeSigned.begin(),
shieldedSpend.spendAuthSig.data());
//if (!key.SignCompact(ss.GetHash(), vchSig))
// throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Sign failed");
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss << shieldedSpend.witness.path();
std::vector<unsigned char> witness(ss.begin(), ss.end());
if (!librustzcash_sapling_spend_proof(
ctx,
spend.expsk.full_viewing_key().ak.begin(),
spend.expsk.nsk.begin(),
spend.note.d.data(),
spend.note.r.begin(),
spend.alpha.begin(),
spend.note.value(),
spend.anchor.begin(),
witness.data(),
shieldedSpend.cv.begin(),
shieldedSpend.rk.begin(),
shieldedSpend.zkproof.data())) {
librustzcash_sapling_proving_ctx_free(ctx);
return obj;
}
//TODO: Copy final data to vchSig
return EncodeBase64(&vchSig[0], vchSig.size());

Loading…
Cancel
Save