]> Git Repo - VerusCoin.git/blame - src/paymentdisclosure.cpp
Streamline dice queue
[VerusCoin.git] / src / paymentdisclosure.cpp
CommitLineData
45232b19
S
1// Copyright (c) 2017 The Zcash developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include "paymentdisclosure.h"
6#include "util.h"
7
8std::string PaymentDisclosureInfo::ToString() const {
9 return strprintf("PaymentDisclosureInfo(version=%d, esk=%s, joinSplitPrivKey=<omitted>, address=%s)",
10 version, esk.ToString(), CZCPaymentAddress(zaddr).ToString());
11}
12
13std::string PaymentDisclosure::ToString() const {
14 std::string s = HexStr(payloadSig.begin(), payloadSig.end());
15 return strprintf("PaymentDisclosure(payload=%s, payloadSig=%s)", payload.ToString(), s);
16}
17
18std::string PaymentDisclosurePayload::ToString() const {
19 return strprintf("PaymentDisclosurePayload(version=%d, esk=%s, txid=%s, js=%d, n=%d, address=%s, message=%s)",
20 version, esk.ToString(), txid.ToString(), js, n, CZCPaymentAddress(zaddr).ToString(), message);
21}
22
23PaymentDisclosure::PaymentDisclosure(const uint256 &joinSplitPubKey, const PaymentDisclosureKey &key, const PaymentDisclosureInfo &info, const std::string &message)
24{
25 // Populate payload member variable
26 payload.version = info.version; // experimental = 0, production = 1 etc.
27 payload.esk = info.esk;
28 payload.txid = key.hash;
29 payload.js = key.js;
30 payload.n = key.n;
31 payload.zaddr = info.zaddr;
32 payload.message = message;
33
34 // Serialize and hash the payload to generate a signature
35 uint256 dataToBeSigned = SerializeHash(payload, SER_GETHASH, 0);
36
37 LogPrint("paymentdisclosure", "Payment Disclosure: signing raw payload = %s\n", dataToBeSigned.ToString());
38
39 // Prepare buffer to store ed25519 key pair in libsodium-compatible format
40 unsigned char bufferKeyPair[64];
41 memcpy(&bufferKeyPair[0], info.joinSplitPrivKey.begin(), 32);
42 memcpy(&bufferKeyPair[32], joinSplitPubKey.begin(), 32);
43
44 // Compute payload signature member variable
45 if (!(crypto_sign_detached(payloadSig.data(), NULL,
46 dataToBeSigned.begin(), 32,
47 &bufferKeyPair[0]
48 ) == 0))
49 {
50 throw std::runtime_error("crypto_sign_detached failed");
51 }
52
53 // Sanity check
54 if (!(crypto_sign_verify_detached(payloadSig.data(),
55 dataToBeSigned.begin(), 32,
56 joinSplitPubKey.begin()) == 0))
57 {
58 throw std::runtime_error("crypto_sign_verify_detached failed");
59 }
60
61 std::string sigString = HexStr(payloadSig.data(), payloadSig.data() + payloadSig.size());
62 LogPrint("paymentdisclosure", "Payment Disclosure: signature = %s\n", sigString);
63}
This page took 0.149653 seconds and 4 git commands to generate.