@@ -101,6 +101,69 @@ TEST(XmssFast, Verify)
101101 EXPECT_FALSE (XmssBasic::verify (data, signature, xmss.getPK ()));
102102}
103103
104+ TEST (XmssFast, SignWithW4)
105+ {
106+ std::vector<unsigned char > seed (48 , 0 );
107+
108+ XmssFast xmss (seed, XMSS_HEIGHT);
109+ xmss.initialize_tree (4 );
110+
111+ std::string message = " This is a test message" ;
112+ std::vector<unsigned char > data (message.begin (), message.end ());
113+ EXPECT_EQ (xmss.getIndex (), 0 );
114+
115+ auto signature = xmss.sign (data);
116+
117+ std::cout << std::endl;
118+ std::cout << std::endl;
119+ std::cout << " data :" << data.size () << " bytes\n " << bin2hstr (data, 64 ) << std::endl;
120+ std::cout << " signature :" << signature.size () << " bytes\n " << bin2hstr (signature, 64 ) << std::endl;
121+ EXPECT_EQ (xmss.getIndex (), 1 );
122+
123+ auto signature2 = xmss.sign (data);
124+
125+ std::cout << std::endl;
126+ std::cout << std::endl;
127+ std::cout << " data :" << data.size () << " bytes\n " << bin2hstr (data, 64 ) << std::endl;
128+ std::cout << " signature :" << signature.size () << " bytes\n " << bin2hstr (signature, 64 ) << std::endl;
129+
130+ EXPECT_NE (bin2hstr (signature), bin2hstr (signature2));
131+ EXPECT_EQ (xmss.getIndex (), 2 );
132+ }
133+
134+ TEST (XmssFast, VerifyWithW4)
135+ {
136+ std::vector<unsigned char > seed (48 , 0 );
137+
138+ XmssBasic xmss (seed, 10 , eHashFunction::SHA2_256,
139+ eAddrFormatType::SHA256_2X, 4 );
140+
141+ std::string message = " 56454c9621c549cd05c112de496ba32f" ;
142+
143+ std::vector<unsigned char > data_ref (message.begin (), message.end ());
144+ std::vector<unsigned char > data = hstr2bin (" 56454c9621c549cd05c112de496ba32f" );
145+
146+ auto pk = xmss.getPK ();
147+ auto sk = xmss.getSK ();
148+ std::cout << std::endl;
149+ std::cout << " seed:" << seed.size () << " bytes\n " << bin2hstr (seed, 32 ) << std::endl;
150+ std::cout << " pk :" << pk.size () << " bytes\n " << bin2hstr (pk, 32 ) << std::endl;
151+ std::cout << " sk :" << sk.size () << " bytes\n " << bin2hstr (sk, 32 ) << std::endl;
152+
153+ auto signature = xmss.sign (data);
154+
155+ std::cout << std::endl;
156+ std::cout << std::endl;
157+ std::cout << " data :" << data.size () << " bytes\n " << bin2hstr (data, 64 ) << std::endl;
158+ std::cout << " signature :" << signature.size () << " bytes\n " << bin2hstr (signature, 64 ) << std::endl;
159+
160+ EXPECT_TRUE (XmssBasic::verify (data, signature, pk, 4 ));
161+ EXPECT_FALSE (XmssBasic::verify (data, signature, xmss.getPK ()));
162+
163+ signature[1 ] += 1 ;
164+ EXPECT_FALSE (XmssBasic::verify (data, signature, xmss.getPK (), 4 ));
165+ }
166+
104167TEST (XmssFast, SignIndexShift)
105168{
106169 std::vector<unsigned char > seed (48 , 0 );
0 commit comments