22#include < emscripten/bind.h>
33#include < iostream>
44#include < xmssFast.h>
5+ #include < xmssBasic.h>
56#include < hashing.h>
67#include < misc.h>
78#include < wordlist.h>
89#include < qrlHelper.h>
910#include < qrlDescriptor.h>
1011
11- namespace {
12+ namespace Xmss {
1213
1314class XmssWrapper {
1415 explicit XmssWrapper (
@@ -129,6 +130,69 @@ class XmssWrapper {
129130 XmssFast _xmss;
130131};
131132
133+ class XmssBasicWrapper {
134+ explicit XmssBasicWrapper (
135+ const std::vector<uint8_t >& seed,
136+ uint8_t height,
137+ eHashFunction hashFunction,
138+ eAddrFormatType addrFormatType,
139+ uint32_t wotsParamW)
140+ :_xmssbasic(seed, height, hashFunction, addrFormatType, wotsParamW) { }
141+ public:
142+ static XmssBasicWrapper fromParameters (
143+ const std::vector<uint8_t >& random_bytes,
144+ uint8_t height,
145+ eHashFunction hash_function,
146+ eAddrFormatType addrFormatType,
147+ uint32_t wotsParamW)
148+ {
149+ return XmssBasicWrapper (random_bytes, height, hash_function, addrFormatType, wotsParamW);
150+ }
151+
152+ unsigned int getIndex ()
153+ {
154+ return _xmssbasic.getIndex ();
155+ }
156+
157+ unsigned int setIndex (unsigned int new_index)
158+ {
159+ return _xmssbasic.setIndex (new_index);
160+ }
161+
162+ TSIGNATURE sign (const TMESSAGE& message)
163+ {
164+ return _xmssbasic.sign (message);
165+ }
166+
167+ std::string getHexSeed ()
168+ {
169+ auto extended_seed = _xmssbasic.getExtendedSeed ();
170+ return bin2hstr (extended_seed);
171+ }
172+
173+ int getHeight ()
174+ {
175+ return _xmssbasic.getHeight ();
176+ }
177+
178+ std::string getPK ()
179+ {
180+ return bin2hstr ( _xmssbasic.getPK () );
181+ }
182+
183+ static bool verify (
184+ const TMESSAGE& message,
185+ const TSIGNATURE& signature,
186+ const TKEY& pk,
187+ const uint32_t wotsParamW)
188+ {
189+ return XmssFast::verify (message, signature, pk, wotsParamW);
190+ }
191+
192+ private:
193+ XmssBasic _xmssbasic;
194+ };
195+
132196std::string EMSCRIPTEN_KEEPALIVE
133197_bin2hstr (const std::vector<unsigned char >& input)
134198{
@@ -294,6 +358,9 @@ EMSCRIPTEN_BINDINGS(my_module) {
294358 enum_<eSignatureType>(" eSignatureType" )
295359 .value (" XMSS" , eSignatureType::XMSS)
296360 ;
361+ enum_<eAddrFormatType>(" eAddrFormatType" )
362+ .value (" SHA256_2X" , eAddrFormatType::SHA256_2X)
363+ ;
297364
298365 // XMSS
299366 class_<XmssWrapper>(" Xmss" )
@@ -316,5 +383,18 @@ EMSCRIPTEN_BINDINGS(my_module) {
316383 .function (" setIndex" , &XmssWrapper::setIndex)
317384 .function (" sign" , &XmssWrapper::sign)
318385 .class_function (" verify" , &XmssWrapper::verify);
386+
387+ // XmssBasic - for variable WOTS (enqlave: Ethereum <-> QRL)
388+ class_<XmssBasicWrapper>(" XmssBasic" )
389+ .class_function (" fromParameters" , &XmssBasicWrapper::fromParameters)
390+ .class_function (" verify" , &XmssBasicWrapper::verify)
391+ .function (" getIndex" , &XmssBasicWrapper::getIndex)
392+ .function (" setIndex" , &XmssBasicWrapper::setIndex)
393+ .function (" sign" , &XmssBasicWrapper::sign)
394+
395+ .function (" getPK" , &XmssBasicWrapper::getPK)
396+ .function (" getHeight" , &XmssBasicWrapper::getHeight)
397+ .function (" getHexSeed" , &XmssBasicWrapper::getHexSeed)
398+ ;
399+ }
319400}
320- }
0 commit comments