@@ -52,6 +52,93 @@ void TestHKDF(string ikm_hex, string salt_hex, string info_hex, string prk_expec
52
52
}
53
53
}
54
54
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
+ }
55
142
56
143
TEST_CASE (" HKDF" ) {
57
144
// https://tools.ietf.org/html/rfc5869 test vectors
0 commit comments