]> Git Repo - VerusCoin.git/blame - src/zcash/JoinSplit.hpp
Refactoring: Rename class libzcash::Note to libzcash::SproutNote.
[VerusCoin.git] / src / zcash / JoinSplit.hpp
CommitLineData
4e4aa5b6 1#ifndef ZC_JOINSPLIT_H_
2#define ZC_JOINSPLIT_H_
369df065
SB
3
4#include "Zcash.h"
f0dab51c 5#include "Proof.hpp"
369df065
SB
6#include "Address.hpp"
7#include "Note.hpp"
8#include "IncrementalMerkleTree.hpp"
9#include "NoteEncryption.hpp"
10
11#include "uint256.h"
defe37a6 12#include "uint252.h"
369df065
SB
13
14#include <boost/array.hpp>
15
16namespace libzcash {
17
18class JSInput {
19public:
20 ZCIncrementalWitness witness;
b230fe68 21 SproutNote note;
369df065
SB
22 SpendingKey key;
23
24 JSInput();
25 JSInput(ZCIncrementalWitness witness,
b230fe68 26 SproutNote note,
369df065
SB
27 SpendingKey key) : witness(witness), note(note), key(key) { }
28
29 uint256 nullifier() const {
30 return note.nullifier(key);
31 }
32};
33
34class JSOutput {
35public:
36 PaymentAddress addr;
37 uint64_t value;
4eb1a96f 38 boost::array<unsigned char, ZC_MEMO_SIZE> memo = {{0xF6}}; // 0xF6 is invalid UTF8 as per spec, rest of array is 0x00
369df065
SB
39
40 JSOutput();
41 JSOutput(PaymentAddress addr, uint64_t value) : addr(addr), value(value) { }
42
b230fe68 43 SproutNote note(const uint252& phi, const uint256& r, size_t i, const uint256& h_sig) const;
369df065
SB
44};
45
46template<size_t NumInputs, size_t NumOutputs>
47class JoinSplit {
48public:
7ee82c43
SB
49 virtual ~JoinSplit() {}
50
1a9543d0
SB
51 static void Generate(const std::string r1csPath,
52 const std::string vkPath,
53 const std::string pkPath);
54 static JoinSplit<NumInputs, NumOutputs>* Prepared(const std::string vkPath,
55 const std::string pkPath);
56
369df065
SB
57 static uint256 h_sig(const uint256& randomSeed,
58 const boost::array<uint256, NumInputs>& nullifiers,
59 const uint256& pubKeyHash
60 );
61
f0dab51c 62 virtual ZCProof prove(
369df065
SB
63 const boost::array<JSInput, NumInputs>& inputs,
64 const boost::array<JSOutput, NumOutputs>& outputs,
b230fe68 65 boost::array<SproutNote, NumOutputs>& out_notes,
369df065
SB
66 boost::array<ZCNoteEncryption::Ciphertext, NumOutputs>& out_ciphertexts,
67 uint256& out_ephemeralKey,
68 const uint256& pubKeyHash,
69 uint256& out_randomSeed,
70 boost::array<uint256, NumInputs>& out_hmacs,
71 boost::array<uint256, NumInputs>& out_nullifiers,
72 boost::array<uint256, NumOutputs>& out_commitments,
73 uint64_t vpub_old,
74 uint64_t vpub_new,
5db5e42e 75 const uint256& rt,
45232b19
S
76 bool computeProof = true,
77 // For paymentdisclosure, we need to retrieve the esk.
78 // Reference as non-const parameter with default value leads to compile error.
79 // So use pointer for simplicity.
80 uint256 *out_esk = nullptr
369df065
SB
81 ) = 0;
82
83 virtual bool verify(
f0dab51c 84 const ZCProof& proof,
bc59f537 85 ProofVerifier& verifier,
369df065
SB
86 const uint256& pubKeyHash,
87 const uint256& randomSeed,
88 const boost::array<uint256, NumInputs>& hmacs,
89 const boost::array<uint256, NumInputs>& nullifiers,
90 const boost::array<uint256, NumOutputs>& commitments,
91 uint64_t vpub_old,
92 uint64_t vpub_new,
93 const uint256& rt
94 ) = 0;
95
96protected:
97 JoinSplit() {}
98};
99
100}
101
102typedef libzcash::JoinSplit<ZC_NUM_JS_INPUTS,
103 ZC_NUM_JS_OUTPUTS> ZCJoinSplit;
104
4e4aa5b6 105#endif // ZC_JOINSPLIT_H_
This page took 0.083687 seconds and 4 git commands to generate.