rippled
Loading...
Searching...
No Matches
PreimageSha256_test.cpp
1#include <xrpld/conditions/Condition.h>
2#include <xrpld/conditions/Fulfillment.h>
3#include <xrpld/conditions/detail/PreimageSha256.h>
4
5#include <xrpl/basics/Buffer.h>
6#include <xrpl/basics/Slice.h>
7#include <xrpl/basics/StringUtilities.h>
8#include <xrpl/basics/strHex.h>
9#include <xrpl/beast/unit_test.h>
10
11#include <algorithm>
12#include <string>
13#include <utility>
14#include <vector>
15
16namespace ripple {
17namespace cryptoconditions {
18
20{
21 inline Buffer
23 {
24 auto blob = strUnHex(s);
25 BEAST_EXPECT(blob);
26 return {blob->data(), blob->size()};
27 }
28
29 void
31 {
32 testcase("Known Vectors");
33
35 {"A0028000",
36 "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7"
37 "852B855810100"},
38 {"A0058003616161",
39 "A02580209834876DCFB05CB167A5C24953EBA58C4AC89B1ADF57F28F2F9D09AF1"
40 "07EE8F0810103"},
41 };
42
44
45 auto f1 = Fulfillment::deserialize(hexblob(known[0].first), ec);
46 BEAST_EXPECT(f1);
47 BEAST_EXPECT(!ec);
48
49 auto c1 = Condition::deserialize(hexblob(known[0].second), ec);
50 BEAST_EXPECT(c1);
51 BEAST_EXPECT(!ec);
52
53 auto f2 = Fulfillment::deserialize(hexblob(known[1].first), ec);
54 BEAST_EXPECT(f2);
55 BEAST_EXPECT(!ec);
56
57 auto c2 = Condition::deserialize(hexblob(known[1].second), ec);
58 BEAST_EXPECT(c2);
59 BEAST_EXPECT(!ec);
60
61 // Check equality and inequality
62 BEAST_EXPECT(f1->condition() == *c1);
63 BEAST_EXPECT(f1->condition() != *c2);
64 BEAST_EXPECT(f2->condition() == *c2);
65 BEAST_EXPECT(f2->condition() != *c1);
66 BEAST_EXPECT(*c1 != *c2);
67 BEAST_EXPECT(*c1 == *c1);
68 BEAST_EXPECT(f1->condition() == f1->condition());
69
70 // Should validate with the empty string
71 BEAST_EXPECT(validate(*f1, *c1));
72 BEAST_EXPECT(validate(*f2, *c2));
73
74 // And with any string - the message doesn't matter for PrefixSha256
75 BEAST_EXPECT(validate(*f1, *c1, makeSlice(known[0].first)));
76 BEAST_EXPECT(validate(*f1, *c1, makeSlice(known[0].second)));
77 BEAST_EXPECT(validate(*f2, *c2, makeSlice(known[0].first)));
78 BEAST_EXPECT(validate(*f2, *c2, makeSlice(known[0].second)));
79
80 // Shouldn't validate if the fulfillment & condition don't match
81 // regardless of the message.
82 BEAST_EXPECT(!validate(*f2, *c1));
83 BEAST_EXPECT(!validate(*f2, *c1, makeSlice(known[0].first)));
84 BEAST_EXPECT(!validate(*f2, *c1, makeSlice(known[0].second)));
85 BEAST_EXPECT(!validate(*f1, *c2));
86 BEAST_EXPECT(!validate(*f1, *c2, makeSlice(known[0].first)));
87 BEAST_EXPECT(!validate(*f1, *c2, makeSlice(known[0].second)));
88 }
89
90 void
92 {
93 testcase("Other Types");
94
96 // PREFIX + PREIMAGE:
97 {"A10B8000810100A204A0028000",
98
99 "A12A8020BB1AC5260C0141B7E54B26EC2330637C5597BF811951AC09E744AD20F"
100 "F77E287810204"
101 "0082020780"},
102
103 // THRESHOLD:
104 {"A208A004A0028000A100",
105
106 "A22A8020B4B84136DF48A71D73F4985C04C6767A778ECB65BA7023B4506823BEE"
107 "E7631B9810204"
108 "0082020780"},
109
110 // RSA:
111 {"A382020880820100E1EF8B24D6F76B09C81ED7752AA262F044F04A874D43809D3"
112 "1CEA612F99B0C97"
113 "A8B4374153E3EEF3D66616843E0E41C293264B71B6173DB1CF0D6CD558C586577"
114 "06FCF097F704C48"
115 "3E59CBFDFD5B3EE7BC80D740C5E0F047F3E85FC0D75815776A6F3F23C5DC5E797"
116 "139A6882E38336A"
117 "4A5FB36137620FF3663DBAE328472801862F72F2F87B202B9C89ADD7CD5B0A076"
118 "F7C53E35039F67E"
119 "D17EC815E5B4305CC63197068D5E6E579BA6DE5F4E3E57DF5E4E072FF2CE4C66E"
120 "B45233973875275"
121 "9639F0257BF57DBD5C443FB5158CCE0A3D36ADC7BA01F33A0BB6DBB2BF989D607"
122 "112F2344D993E77"
123 "E563C1D361DEDF57DA96EF2CFC685F002B638246A5B309B981820100BD42D6569"
124 "F6599AED455F96B"
125 "C0ED08ED1480BF36CD9E1467F9C6F74461C9E3A749334B2F6404AA5F9F6BAFE76"
126 "C347D069250B35D"
127 "1C970C793059EE733A8193F30FA78FEC7CAE459E3DDFD7633805D476940D0CB53"
128 "D7FB389DCDAEAF6"
129 "E8CF48C4B5635430E4F2BCDFE505C2C0FC17B40D93C7EDB7C261EBF43895A705E"
130 "024AA0549A660F7"
131 "0A32150647522DBE6B63520497CFF8F8D5D74768A27C5B86E580BE3FCDC96F197"
132 "6293CBA0D58DFC6"
133 "0B518B632A6DC1E950C43E231FE1A379AA6DDCC52C70EDF851C6C0123A964261C"
134 "FDB3857CD6CD5AD"
135 "C37D8DA2CC924EDAE1D84CF6124587F274C1FA3697DA2901F0269F03B243C03B6"
136 "14E0385E1961FAC"
137 "5000F9BB",
138
139 "A3258020484950515253545548495051525354554849505152535455484950515"
140 "2535455810101"},
141
142 // ED25519:
143 {"A4648020D75A980182B10AB7D54BFED3C964073A0EE172F3DAA62325AF021A68F"
144 "707511A8140E556"
145 "4300C360AC729086E2CC806E828A84877F1EB8E5D974D873E065224901555FB88"
146 "21590A33BACC61E"
147 "39701CF9B46BD25BF5F0595BBE24655141438E7A100B",
148
149 "A4278020799239ABA8FC4FF7EABFBC4C44E69E8BDFED993324E12ED64792ABE28"
150 "9CF1D5F810302"
151 "0000"}};
152
153 for (auto x : others)
154 {
156
157 BEAST_EXPECT(!Fulfillment::deserialize(hexblob(x.first), ec));
158 BEAST_EXPECT(!Condition::deserialize(hexblob(x.second), ec));
159 }
160 }
161
162 void
163 run() override
164 {
167 }
168};
169
170BEAST_DEFINE_TESTSUITE(PreimageSha256, conditions, ripple);
171
172} // namespace cryptoconditions
173
174} // namespace ripple
A testsuite class.
Definition suite.h:52
testcase_t testcase
Memberspace for declaring test cases.
Definition suite.h:152
Like std::vector<char> but better.
Definition Buffer.h:17
static std::unique_ptr< Condition > deserialize(Slice s, std::error_code &ec)
Load a condition from its binary form.
bool validate(Fulfillment const &f, Condition const &c, Slice m)
Verify if the given message satisfies the fulfillment.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
std::optional< Blob > strUnHex(std::size_t strSize, Iterator begin, Iterator end)
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
Definition Slice.h:225
static std::unique_ptr< Fulfillment > deserialize(Slice s, std::error_code &ec)
Load a fulfillment from its binary form.