Skip to content

Commit d636382

Browse files
authored
Merge pull request #166 from jplomas/master
Expose XmssBasic JS object with Emscripten wrapper
2 parents 641ec32 + 9974bf4 commit d636382

File tree

2 files changed

+158
-2
lines changed

2 files changed

+158
-2
lines changed

src/jswrapper/jsqrlwrapper.cpp

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
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

1314
class 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+
132196
std::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

Comments
 (0)