Skip to content

Commit 7240b3c

Browse files
xdustinfacehoffmang9
authored andcommitted
test: Implement some tests for the class PrivateKey
1 parent 736bb1b commit 7240b3c

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

src/test.cpp

+87
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,93 @@ void TestHKDF(string ikm_hex, string salt_hex, string info_hex, string prk_expec
5252
}
5353
}
5454

55+
TEST_CASE("class PrivateKey") {
56+
uint8_t buffer[PrivateKey::PRIVATE_KEY_SIZE];
57+
memcmp(buffer, getRandomSeed().data(), PrivateKey::PRIVATE_KEY_SIZE);
58+
SECTION("Copy {constructor|assignment operator}") {
59+
PrivateKey pk1 = PrivateKey::FromByteVector(getRandomSeed(), true);
60+
PrivateKey pk2 = PrivateKey::FromByteVector(getRandomSeed(), true);
61+
PrivateKey pk3 = PrivateKey(pk2);
62+
REQUIRE(!pk1.IsZero());
63+
REQUIRE(!pk2.IsZero());
64+
REQUIRE(!pk3.IsZero());
65+
REQUIRE(pk1 != pk2);
66+
REQUIRE(pk3 == pk2);
67+
pk2 = pk1;
68+
REQUIRE(pk1 == pk2);
69+
REQUIRE(pk3 != pk2);
70+
}
71+
SECTION("Move {constructor|assignment operator}") {
72+
PrivateKey pk1 = PrivateKey::FromByteVector(getRandomSeed(), true);
73+
std::vector<uint8_t> vec1 = pk1.Serialize();
74+
PrivateKey pk2 = PrivateKey::FromByteVector(getRandomSeed(), true);
75+
std::vector<uint8_t> vec2 = pk2.Serialize();
76+
PrivateKey pk3 = PrivateKey(std::move(pk2));
77+
REQUIRE(!pk1.IsZero());
78+
REQUIRE_THROWS(pk2.IsZero());
79+
REQUIRE(!pk3.IsZero());
80+
REQUIRE(vec2 == pk3.Serialize());
81+
pk3 = std::move(pk1);
82+
REQUIRE_THROWS(pk1.IsZero());
83+
REQUIRE_THROWS(pk2.IsZero());
84+
REQUIRE(!pk3.IsZero());
85+
REQUIRE(vec1 == pk3.Serialize());
86+
pk3 = std::move(pk1);
87+
REQUIRE_THROWS(pk1.IsZero());
88+
REQUIRE_THROWS(pk2.IsZero());
89+
REQUIRE_THROWS(pk3.IsZero());
90+
}
91+
SECTION("Equality operators") {
92+
PrivateKey pk1 = PrivateKey::FromByteVector(getRandomSeed(), true);
93+
PrivateKey pk2 = PrivateKey::FromByteVector(getRandomSeed(), true);
94+
PrivateKey pk3 = pk2;
95+
REQUIRE(pk1 != pk2);
96+
REQUIRE(pk1 != pk3);
97+
REQUIRE(pk2 == pk3);
98+
}
99+
SECTION("(De)Serialization") {
100+
PrivateKey pk1 = PrivateKey::FromByteVector(getRandomSeed(), true);
101+
pk1.Serialize(buffer);
102+
REQUIRE(memcmp(buffer, pk1.Serialize().data(), PrivateKey::PRIVATE_KEY_SIZE) == 0);
103+
PrivateKey pk2 = PrivateKey:: FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE}, true);
104+
REQUIRE(pk1 == pk2);
105+
REQUIRE_THROWS(PrivateKey::FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE - 1}, true));
106+
REQUIRE_THROWS(PrivateKey::FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE + 1}, true));
107+
REQUIRE_NOTHROW(PrivateKey::FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE}, true));
108+
bn_t order;
109+
bn_new(order);
110+
g1_get_ord(order);
111+
bn_write_bin(buffer, PrivateKey::PRIVATE_KEY_SIZE, order);
112+
REQUIRE_NOTHROW(PrivateKey::FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE}, false));
113+
REQUIRE_NOTHROW(PrivateKey::FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE}, true));
114+
bn_add(order, order, order);
115+
bn_write_bin(buffer, PrivateKey::PRIVATE_KEY_SIZE, order);
116+
REQUIRE_THROWS(PrivateKey::FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE}, false));
117+
REQUIRE_NOTHROW(PrivateKey::FromBytes({buffer, PrivateKey::PRIVATE_KEY_SIZE}, true));
118+
}
119+
SECTION("keydata checks") {
120+
PrivateKey pk1 = PrivateKey::FromByteVector(getRandomSeed(), true);
121+
G1Element g1 = pk1.GetG1Element();
122+
G2Element g2 = pk1.GetG2Element();
123+
PrivateKey pk2 = std::move(pk1);
124+
REQUIRE_THROWS(PrivateKey(pk1));
125+
REQUIRE_THROWS(pk1 = pk2);
126+
REQUIRE_THROWS(pk1.GetG1Element());
127+
REQUIRE_THROWS(pk1.GetG2Element());
128+
REQUIRE_THROWS(g1 * pk1);
129+
REQUIRE_THROWS(pk1 * g1);
130+
REQUIRE_THROWS(g2 * pk1);
131+
REQUIRE_THROWS(pk1 * g2);
132+
REQUIRE_THROWS(pk1.GetG2Power(g2));
133+
REQUIRE_THROWS(PrivateKey::Aggregate({pk1, pk2}));
134+
REQUIRE_THROWS(pk1.IsZero());
135+
REQUIRE_THROWS(pk1 == pk2);
136+
REQUIRE_THROWS(pk1 != pk2);
137+
REQUIRE_THROWS(pk1.Serialize(buffer));
138+
REQUIRE_THROWS(pk1.Serialize());
139+
REQUIRE_THROWS(pk1.SignG2(buffer, sizeof(buffer), buffer, sizeof(buffer)));
140+
}
141+
}
55142

56143
TEST_CASE("HKDF") {
57144
// https://tools.ietf.org/html/rfc5869 test vectors

0 commit comments

Comments
 (0)