1 #include <boost/test/unit_test.hpp>
13 static const string strSecret1 (
"6uu5bsZLA2Lm6yCxgwxDxHyZmhYeqBMLQT83Fyq738YhYucQPQf");
14 static const string strSecret2 (
"6vZDRwYgTNidWzmKs9x8QzQGeWCqbdUtNRpEKZMaP67ZSn8XMjb");
15 static const string strSecret1C (
"T6UsJv9hYpvDfM5noKYkB3vfeHxhyegkeWJ4y7qKeQJuyXMK11XX");
16 static const string strSecret2C (
"T9PBs5kq9QrkBPxeGNWKitMi4XuFVr25jaXTnuopLVZxCUAJbixA");
17 static const CBitcoinAddress addr1 (
"LWaFezDtucfCA4xcVEfs3R3xfgGWjSwcZr");
18 static const CBitcoinAddress addr2 (
"LXwHM6mRd432EzLJYwuKQMPhTzrgr7ur9K");
19 static const CBitcoinAddress addr1C(
"LZWK8h7C166niP6GmpUmiGrvn4oxPqQgFV");
20 static const CBitcoinAddress addr2C(
"Lgb6tdqmdW3n5E12johSuEAqRMt4kAr7yu");
23 static const string strAddressBad(
"LRjyUS2uuieEPkhZNdQz8hE5YycxVEqSXA");
26 #ifdef KEY_TESTS_DUMPINFO
27 void dumpKeyInfo(
uint256 privkey)
31 memcpy(&secret[0], &privkey, 32);
32 vector<unsigned char> sec;
34 memcpy(&sec[0], &secret[0], 32);
37 for (
int nCompressed=0; nCompressed<2; nCompressed++)
39 bool fCompressed = nCompressed == 1;
40 printf(
" * %s:\n", fCompressed ?
"compressed" :
"uncompressed");
42 bsecret.SetSecret(secret, fCompressed);
45 key.SetSecret(secret, fCompressed);
46 vector<unsigned char> vchPubKey = key.
GetPubKey();
47 printf(
" * pubkey (hex): %s\n",
HexStr(vchPubKey).c_str());
54 BOOST_AUTO_TEST_SUITE(key_tests)
58 CBitcoinSecret bsecret1, bsecret2, bsecret1C, bsecret2C, baddress1;
59 BOOST_CHECK( bsecret1.
SetString (strSecret1));
60 BOOST_CHECK( bsecret2.
SetString (strSecret2));
61 BOOST_CHECK( bsecret1C.
SetString(strSecret1C));
62 BOOST_CHECK( bsecret2C.
SetString(strSecret2C));
63 BOOST_CHECK(!baddress1.
SetString(strAddressBad));
66 BOOST_CHECK(key1.IsCompressed() ==
false);
68 BOOST_CHECK(key2.IsCompressed() ==
false);
70 BOOST_CHECK(key1C.IsCompressed() ==
true);
72 BOOST_CHECK(key1C.IsCompressed() ==
true);
74 CPubKey pubkey1 = key1. GetPubKey();
75 CPubKey pubkey2 = key2. GetPubKey();
76 CPubKey pubkey1C = key1C.GetPubKey();
77 CPubKey pubkey2C = key2C.GetPubKey();
84 for (
int n=0; n<16; n++)
86 string strMsg =
strprintf(
"Very secret message %i: 11", n);
87 uint256 hashMsg =
Hash(strMsg.begin(), strMsg.end());
91 vector<unsigned char> sign1, sign2, sign1C, sign2C;
93 BOOST_CHECK(key1.Sign (hashMsg, sign1));
94 BOOST_CHECK(key2.Sign (hashMsg, sign2));
95 BOOST_CHECK(key1C.Sign(hashMsg, sign1C));
96 BOOST_CHECK(key2C.Sign(hashMsg, sign2C));
98 BOOST_CHECK( pubkey1.Verify(hashMsg, sign1));
99 BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2));
100 BOOST_CHECK( pubkey1.Verify(hashMsg, sign1C));
101 BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2C));
103 BOOST_CHECK(!pubkey2.
Verify(hashMsg, sign1));
104 BOOST_CHECK( pubkey2.
Verify(hashMsg, sign2));
105 BOOST_CHECK(!pubkey2.
Verify(hashMsg, sign1C));
106 BOOST_CHECK( pubkey2.
Verify(hashMsg, sign2C));
108 BOOST_CHECK( pubkey1C.
Verify(hashMsg, sign1));
109 BOOST_CHECK(!pubkey1C.
Verify(hashMsg, sign2));
110 BOOST_CHECK( pubkey1C.
Verify(hashMsg, sign1C));
111 BOOST_CHECK(!pubkey1C.
Verify(hashMsg, sign2C));
113 BOOST_CHECK(!pubkey2C.
Verify(hashMsg, sign1));
114 BOOST_CHECK( pubkey2C.
Verify(hashMsg, sign2));
115 BOOST_CHECK(!pubkey2C.
Verify(hashMsg, sign1C));
116 BOOST_CHECK( pubkey2C.
Verify(hashMsg, sign2C));
120 vector<unsigned char> csign1, csign2, csign1C, csign2C;
122 BOOST_CHECK(key1.SignCompact (hashMsg, csign1));
123 BOOST_CHECK(key2.SignCompact (hashMsg, csign2));
124 BOOST_CHECK(key1C.SignCompact(hashMsg, csign1C));
125 BOOST_CHECK(key2C.SignCompact(hashMsg, csign2C));
127 CPubKey rkey1, rkey2, rkey1C, rkey2C;
129 BOOST_CHECK(rkey1.RecoverCompact (hashMsg, csign1));
130 BOOST_CHECK(rkey2.RecoverCompact (hashMsg, csign2));
131 BOOST_CHECK(rkey1C.RecoverCompact(hashMsg, csign1C));
132 BOOST_CHECK(rkey2C.RecoverCompact(hashMsg, csign2C));
134 BOOST_CHECK(rkey1 == pubkey1);
135 BOOST_CHECK(rkey2 == pubkey2);
136 BOOST_CHECK(rkey1C == pubkey1C);
137 BOOST_CHECK(rkey2C == pubkey2C);
141 BOOST_AUTO_TEST_SUITE_END()
#define strprintf(format,...)
BOOST_AUTO_TEST_CASE(key_test1)
CTxDestination Get() const
bool SetString(const char *pszSecret)
CPubKey GetPubKey() const
A base58-encoded secret key.
An encapsulated public key.
std::string ToString() const
uint256 Hash(const T1 pbegin, const T1 pend)
boost::variant< CNoDestination, CKeyID, CScriptID > CTxDestination
A txout script template with a specific destination.
An encapsulated private key.
bool Verify(const uint256 &hash, const std::vector< unsigned char > &vchSig) const
std::string HexStr(const T itbegin, const T itend, bool fSpaces=false)