aboutsummaryrefslogtreecommitdiff
path: root/extension/background
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2015-12-14 08:26:38 +0100
committerFlorian Dold <florian.dold@gmail.com>2015-12-14 08:26:38 +0100
commitde570d55943c1066cb03150cd904a2b57bdb5faf (patch)
tree9c765ad1777803684d2ff607807c24f9abdb22ae /extension/background
parent9da386ed63a3fcc8b9b3b9d189e4f7168c46a579 (diff)
More wrappers.
Diffstat (limited to 'extension/background')
-rw-r--r--extension/background/emscriptif.js170
-rw-r--r--extension/background/emscriptif.ts200
-rw-r--r--extension/background/libwrapper.js91
3 files changed, 388 insertions, 73 deletions
diff --git a/extension/background/emscriptif.js b/extension/background/emscriptif.js
index b72d22bf8..7f3a23f61 100644
--- a/extension/background/emscriptif.js
+++ b/extension/background/emscriptif.js
@@ -26,15 +26,26 @@ var emsc = {
amount_add: getEmsc('TALER_amount_add', 'void', ['number', 'number', 'number']),
amount_subtract: getEmsc('TALER_amount_subtract', 'void', ['number', 'number', 'number']),
amount_normalize: getEmsc('TALER_amount_normalize', 'void', ['number']),
- amount_cmp: getEmsc('TALER_amount_cmp', 'number', ['number', 'number'])
+ amount_cmp: getEmsc('TALER_amount_cmp', 'number', ['number', 'number']),
+ amount_hton: getEmsc('TALER_amount_hton', 'void', ['number', 'number']),
+ amount_ntoh: getEmsc('TALER_amount_ntoh', 'void', ['number', 'number']),
+ hash: getEmsc('GNUNET_CRYPTO_hash', 'void', ['number', 'number', 'number']),
+ memmove: getEmsc('memmove', 'number', ['number', 'number', 'number']),
+ rsa_public_key_free: getEmsc('GNUNET_CRYPTO_rsa_public_key_free', 'void', ['number']),
+ string_to_data: getEmsc('GNUNET_STRINGS_string_to_data', 'void', ['number', 'number', 'number', 'number'])
};
var emscAlloc = {
get_amount: getEmsc('TALER_WRALL_get_amount', 'number', ['number', 'number', 'number', 'string']),
eddsa_key_create: getEmsc('GNUNET_CRYPTO_eddsa_key_create', 'number'),
eddsa_public_key_from_private: getEmsc('TALER_WRALL_eddsa_public_key_from_private', 'number', ['number']),
data_to_string_alloc: getEmsc('GNUNET_STRINGS_data_to_string_alloc', 'number', ['number', 'number']),
+ purpose_create: getEmsc('TALER_WRALL_purpose_create', 'number', ['number', 'number', 'number']),
+ rsa_blind: getEmsc('GNUNET_CRYPTO_rsa_blind', 'number', ['number', 'number', 'number', 'number']),
malloc: (size) => Module._malloc(size),
};
+var SignaturePurpose;
+(function (SignaturePurpose) {
+})(SignaturePurpose || (SignaturePurpose = {}));
class ArenaObject {
constructor(arena) {
this.nativePtr = 0;
@@ -72,6 +83,14 @@ class Amount extends ArenaObject {
emsc.free(this.nativePtr);
}
}
+ toNbo(a) {
+ let x = new AmountNbo(null, a);
+ emsc.amount_hton(x.nativePtr, this.nativePtr);
+ return x;
+ }
+ fromNbo(nbo) {
+ emsc.amount_ntoh(this.nativePtr, nbo.nativePtr);
+ }
get value() {
return emsc.get_value(this.nativePtr);
}
@@ -120,60 +139,151 @@ class Amount extends ArenaObject {
emsc.amount_normalize(this.nativePtr);
}
}
-class SizedArenaObject extends ArenaObject {
+class PackedArenaObject extends ArenaObject {
+ constructor(init, a) {
+ super(a);
+ if (init === null || init === undefined) {
+ this.nativePtr = emscAlloc.malloc(this.size());
+ }
+ else {
+ this.nativePtr = init;
+ }
+ }
encode() {
- var d = emscAlloc.data_to_string_alloc(this.nativePtr, this.size);
+ var d = emscAlloc.data_to_string_alloc(this.nativePtr, this.size());
var s = Module.Pointer_stringify(d);
emsc.free(d);
return s;
}
-}
-class EddsaPrivateKey extends SizedArenaObject {
- static create(a) {
- let k = new EddsaPrivateKey(a);
- k.nativePtr = emscAlloc.eddsa_key_create();
- return k;
- }
- get size() {
- return 32;
+ decode(s) {
+ // We need to get the javascript string
+ // to the emscripten heap first.
+ // XXX: Does this work with multi-bytes code points?
+ let hstr = emscAlloc.malloc(s.length + 1);
+ Module.writeStringToMemory(s, hstr);
+ let res = emsc.string_to_data(hstr, s.length, this.nativePtr, this.size());
+ if (res < 1) {
+ throw { error: "wrong encoding" };
+ }
}
destroy() {
- // TODO
+ emsc.free(this.nativePtr);
+ this.nativePtr = 0;
}
- getPublicKey() {
- let pk = new EddsaPublicKey(this.arena);
- pk.nativePtr = emscAlloc.eddsa_public_key_from_private(this.nativePtr);
- return pk;
+ hash() {
+ var x = new HashCode();
+ emsc.hash(this.nativePtr, this.size(), x.nativePtr);
+ return x;
}
}
-class EddsaPublicKey extends SizedArenaObject {
- destroy() {
- // TODO
+class AmountNbo extends PackedArenaObject {
+ size() { return 24; }
+}
+class EddsaPrivateKey extends PackedArenaObject {
+ static create(a) {
+ let p = emscAlloc.eddsa_key_create();
+ return new EddsaPrivateKey(p, a);
}
- get size() {
- return 32;
+ size() { return 32; }
+ getPublicKey() {
+ let p = emscAlloc.eddsa_public_key_from_private(this.nativePtr);
+ return new EddsaPublicKey(p, this.arena);
}
}
+class EddsaPublicKey extends PackedArenaObject {
+ size() { return 32; }
+}
class RsaBlindingKey extends ArenaObject {
destroy() {
// TODO
}
}
-class HashCode extends ArenaObject {
- destroy() {
- // TODO
+class HashCode extends PackedArenaObject {
+ size() { return 64; }
+}
+class ByteArray extends PackedArenaObject {
+ constructor(desiredSize, init, a) {
+ super(init, a);
+ if (init === undefined || init === null) {
+ this.nativePtr = emscAlloc.malloc(desiredSize);
+ }
+ else {
+ this.nativePtr = init;
+ }
+ this.allocatedSize = desiredSize;
}
+ size() { return this.allocatedSize; }
}
-class ByteArray extends ArenaObject {
- destroy() {
- // TODO
+class EccSignaturePurpose extends PackedArenaObject {
+ constructor(purpose, payload, a) {
+ this.payload = payload;
+ let p = emscAlloc.purpose_create(purpose, payload.nativePtr, payload.size());
+ super(p, a);
+ }
+ size() { return this.payload.size() + 8; }
+}
+class SignatureStruct {
+ constructor() {
+ this.members = {};
+ }
+ toPurpose(a) {
+ let totalSize = 0;
+ for (let f of this.fieldTypes()) {
+ let name = f[0];
+ let member = this.members[name];
+ if (!member) {
+ throw { error: "Member not set", key: name };
+ }
+ totalSize += this.members[name].size();
+ }
+ let buf = emscAlloc.malloc(totalSize);
+ let ptr = buf;
+ for (let f of this.fieldTypes()) {
+ let name = f[0];
+ let member = this.members[name];
+ let size = member.size();
+ emsc.memmove(ptr, member.nativePtr, size);
+ ptr += size;
+ }
+ let ba = new ByteArray(totalSize, buf, a);
+ let x = new EccSignaturePurpose(this.purpose(), ba, a);
+ return x;
+ }
+ set(name, value) {
+ let typemap = {};
+ for (let f of this.fieldTypes()) {
+ typemap[f[0]] = f[1];
+ }
+ if (!(name in typemap)) {
+ throw { error: "Key not found", key: name };
+ }
+ if (!(value instanceof typemap[name])) {
+ throw { error: "Wrong type", key: name };
+ }
+ // TODO: check type!
+ this.members[name] = value;
+ }
+}
+class WithdrawRequestPS extends SignatureStruct {
+ purpose() { return undefined; }
+ fieldTypes() {
+ return [
+ ["reserve_pub", EddsaPublicKey],
+ ["amount_with_fee", Amount],
+ ["withdraw_fee", Amount],
+ ["h_denomination_pub", HashCode],
+ ["h_coin_envelope", HashCode]];
}
}
class RsaPublicKey extends ArenaObject {
destroy() {
- // TODO
+ emsc.rsa_public_key_free(this.nativePtr);
+ this.nativePtr = 0;
}
}
function rsaBlind(hashCode, blindingKey, pkey, arena) {
- return null;
+ let ptr = emscAlloc.malloc(PTR_SIZE);
+ let s = emscAlloc.rsa_blind(hashCode.nativePtr, blindingKey.nativePtr, pkey.nativePtr, ptr);
+ let res = new ByteArray(s, Module.getValue(ptr, '*'), arena);
+ return res;
}
diff --git a/extension/background/emscriptif.ts b/extension/background/emscriptif.ts
index b99b471f1..7a775d19a 100644
--- a/extension/background/emscriptif.ts
+++ b/extension/background/emscriptif.ts
@@ -46,7 +46,25 @@ var emsc = {
['number']),
amount_cmp: getEmsc('TALER_amount_cmp',
'number',
- ['number', 'number'])
+ ['number', 'number']),
+ amount_hton: getEmsc('TALER_amount_hton',
+ 'void',
+ ['number', 'number']),
+ amount_ntoh: getEmsc('TALER_amount_ntoh',
+ 'void',
+ ['number', 'number']),
+ hash: getEmsc('GNUNET_CRYPTO_hash',
+ 'void',
+ ['number', 'number', 'number']),
+ memmove: getEmsc('memmove',
+ 'number',
+ ['number', 'number', 'number']),
+ rsa_public_key_free: getEmsc('GNUNET_CRYPTO_rsa_public_key_free',
+ 'void',
+ ['number']),
+ string_to_data: getEmsc('GNUNET_STRINGS_string_to_data',
+ 'void',
+ ['number', 'number', 'number', 'number'])
};
var emscAlloc = {
@@ -59,11 +77,22 @@ var emscAlloc = {
'number',
['number']),
data_to_string_alloc: getEmsc('GNUNET_STRINGS_data_to_string_alloc',
- 'number',
- ['number', 'number']),
- malloc: (size : number) => Module._malloc(size),
+ 'number',
+ ['number', 'number']),
+ purpose_create: getEmsc('TALER_WRALL_purpose_create',
+ 'number',
+ ['number', 'number', 'number']),
+ rsa_blind: getEmsc('GNUNET_CRYPTO_rsa_blind',
+ 'number',
+ ['number', 'number', 'number', 'number']),
+ malloc: (size: number) => Module._malloc(size),
};
+
+enum SignaturePurpose {
+}
+
+
abstract class ArenaObject {
nativePtr: number;
arena: Arena;
@@ -114,6 +143,16 @@ class Amount extends ArenaObject {
}
}
+ toNbo(a?: Arena): AmountNbo {
+ let x = new AmountNbo(null, a);
+ emsc.amount_hton(x.nativePtr, this.nativePtr);
+ return x;
+ }
+
+ fromNbo(nbo: AmountNbo): void {
+ emsc.amount_ntoh(this.nativePtr, nbo.nativePtr);
+ }
+
get value() {
return emsc.get_value(this.nativePtr);
}
@@ -172,78 +211,185 @@ class Amount extends ArenaObject {
abstract class PackedArenaObject extends ArenaObject {
- size: number;
+ abstract size(): number;
+
+ constructor(init?: number, a?: Arena) {
+ super(a);
+ if (init === null || init === undefined) {
+ this.nativePtr = emscAlloc.malloc(this.size());
+ } else {
+ this.nativePtr = init;
+ }
+ }
encode(): string {
- var d = emscAlloc.data_to_string_alloc(this.nativePtr, this.size);
+ var d = emscAlloc.data_to_string_alloc(this.nativePtr, this.size());
var s = Module.Pointer_stringify(d);
emsc.free(d);
return s;
}
+
+ decode(s: string) {
+ // We need to get the javascript string
+ // to the emscripten heap first.
+ // XXX: Does this work with multi-bytes code points?
+ let hstr = emscAlloc.malloc(s.length + 1);
+ Module.writeStringToMemory(s, hstr);
+ let res = emsc.string_to_data(hstr, s.length, this.nativePtr, this.size());
+ if (res < 1) {
+ throw {error: "wrong encoding"};
+ }
+ }
+
+ destroy() {
+ emsc.free(this.nativePtr);
+ this.nativePtr = 0;
+ }
+
+ hash(): HashCode {
+ var x = new HashCode();
+ emsc.hash(this.nativePtr, this.size(), x.nativePtr);
+ return x;
+ }
+}
+
+
+class AmountNbo extends PackedArenaObject {
+ size() { return 24; }
}
class EddsaPrivateKey extends PackedArenaObject {
static create(a?: Arena): EddsaPrivateKey {
- let k = new EddsaPrivateKey(a);
- k.nativePtr = emscAlloc.eddsa_key_create();
- return k;
+ let p = emscAlloc.eddsa_key_create();
+ return new EddsaPrivateKey(p, a);
}
- get size() { return 32; }
+ size() { return 32; }
getPublicKey(): EddsaPublicKey {
- let pk = new EddsaPublicKey(this.arena);
- pk.nativePtr = emscAlloc.eddsa_public_key_from_private(this.nativePtr);
- return pk;
+ let p = emscAlloc.eddsa_public_key_from_private(this.nativePtr);
+ return new EddsaPublicKey(p, this.arena);
}
}
class EddsaPublicKey extends PackedArenaObject {
+ size() { return 32; }
+}
+
+
+class RsaBlindingKey extends ArenaObject {
destroy() {
// TODO
}
+}
+
+
+class HashCode extends PackedArenaObject {
+ size() { return 64; }
+}
+
- get size() {
- return 32;
+class ByteArray extends PackedArenaObject {
+ private allocatedSize: number;
+ size() { return this.allocatedSize; }
+ constructor(desiredSize: number, init: number, a?: Arena) {
+ super(init, a);
+ if (init === undefined || init === null) {
+ this.nativePtr = emscAlloc.malloc(desiredSize);
+ } else {
+ this.nativePtr = init;
+ }
+ this.allocatedSize = desiredSize;
}
}
-class RsaBlindingKey extends ArenaObject {
- destroy() {
- // TODO
+class EccSignaturePurpose extends PackedArenaObject {
+ size() { return this.payload.size() + 8; }
+ payload: PackedArenaObject;
+ constructor(purpose: SignaturePurpose, payload: PackedArenaObject, a?: Arena) {
+ this.payload = payload;
+ let p = emscAlloc.purpose_create(purpose, payload.nativePtr, payload.size());
+ super(p, a);
}
}
-class HashCode extends ArenaObject {
- destroy() {
- // TODO
+abstract class SignatureStruct {
+ abstract fieldTypes(): Array<any>;
+ abstract purpose(): SignaturePurpose;
+ private members: any = {};
+ toPurpose(a?: Arena): EccSignaturePurpose {
+ let totalSize = 0;
+ for (let f of this.fieldTypes()) {
+ let name = f[0];
+ let member = this.members[name];
+ if (!member) {
+ throw {error: "Member not set", key: name};
+ }
+ totalSize += this.members[name].size();
+ }
+ let buf = emscAlloc.malloc(totalSize);
+ let ptr = buf;
+ for (let f of this.fieldTypes()) {
+ let name = f[0];
+ let member = this.members[name];
+ let size = member.size();
+ emsc.memmove(ptr, member.nativePtr, size);
+ ptr += size;
+ }
+ let ba = new ByteArray(totalSize, buf, a);
+ let x = new EccSignaturePurpose(this.purpose(), ba, a);
+ return x;
+ }
+ set(name: string, value: any) {
+ let typemap: any = {}
+ for (let f of this.fieldTypes()) {
+ typemap[f[0]] = f[1];
+ }
+ if (!(name in typemap)) {
+ throw {error: "Key not found", key: name};
+ }
+ if (!(value instanceof typemap[name])) {
+ throw {error: "Wrong type", key: name};
+ }
+ // TODO: check type!
+ this.members[name] = value;
}
}
-class ByteArray extends PackedArenaObject {
- destroy() {
- // TODO
+class WithdrawRequestPS extends SignatureStruct {
+ purpose() { return undefined; }
+ fieldTypes() {
+ return [
+ ["reserve_pub", EddsaPublicKey],
+ ["amount_with_fee", Amount],
+ ["withdraw_fee", Amount],
+ ["h_denomination_pub", HashCode],
+ ["h_coin_envelope", HashCode]];
}
}
class RsaPublicKey extends ArenaObject {
destroy() {
- // TODO
+ emsc.rsa_public_key_free(this.nativePtr);
+ this.nativePtr = 0;
}
}
function rsaBlind(hashCode: HashCode,
blindingKey: RsaBlindingKey,
- pkey: RsaPublicKey,
+ pkey: EddsaPublicKey,
arena?: Arena): ByteArray
{
- return null;
+ let ptr = emscAlloc.malloc(PTR_SIZE);
+ let s = emscAlloc.rsa_blind(hashCode.nativePtr, blindingKey.nativePtr, pkey.nativePtr, ptr);
+ let res = new ByteArray(s, Module.getValue(ptr, '*'), arena);
+ return res;
}
diff --git a/extension/background/libwrapper.js b/extension/background/libwrapper.js
index c2464c675..900dd3f76 100644
--- a/extension/background/libwrapper.js
+++ b/extension/background/libwrapper.js
@@ -51828,7 +51828,7 @@ function _TALER_WRALL_sign_deposit_permission($h_contract, $h_wire, $timestamp,
} while ((dest | 0) < (stop | 0));
HEAP32[$depperm >> 2] = _htonl(272) | 0;
HEAP32[$depperm + 4 >> 2] = _htonl(1201) | 0;
- $42 = _GNUNET_xmalloc_(64, 18658, 1121) | 0;
+ $42 = _GNUNET_xmalloc_(64, 18658, 1136) | 0;
_GNUNET_CRYPTO_eddsa_sign($coin_priv, $depperm, $42) | 0;
STACKTOP = sp;
return $42 | 0;
@@ -54063,7 +54063,7 @@ function _TALER_WR_verify_denom_enc($denom_enc, $master_enc, $mastersig_enc, $st
$deposit_fee = sp + 24 | 0;
$refresh_fee = sp;
$5 = ~~+Math_floor(+(+(((_strlen($denom_enc) | 0) * 5 | 0) >>> 3 >>> 0))) >>> 0;
- $6 = _GNUNET_xmalloc_($5, 18658, 357) | 0;
+ $6 = _GNUNET_xmalloc_($5, 18658, 372) | 0;
_GNUNET_STRINGS_string_to_data($denom_enc, _strlen($denom_enc) | 0, $6, $5) | 0;
$8 = _GNUNET_CRYPTO_rsa_public_key_decode($6, $5) | 0;
_GNUNET_xfree_($6, 18658, 212);
@@ -57625,6 +57625,7 @@ function __gcry_ecc_eddsa_ensure_compact($value, $nbits) {
}
return 0;
}
+
function ___fdopen($fd, $mode) {
$fd = $fd | 0;
$mode = $mode | 0;
@@ -61577,7 +61578,7 @@ function _TALER_WR_verify_denoms_enc($signkey_enc, $denoms_enc, $ndenoms, $issue
do {
$6 = HEAP32[$denoms_enc + ($i$02 << 2) >> 2] | 0;
$12 = ~~+Math_floor(+(+(((_strlen($6) | 0) * 5 | 0) >>> 3 >>> 0))) >>> 0;
- $13 = _GNUNET_xmalloc_($12, 18658, 357) | 0;
+ $13 = _GNUNET_xmalloc_($12, 18658, 372) | 0;
_GNUNET_STRINGS_string_to_data($6, _strlen($6) | 0, $13, $12) | 0;
$15 = _GNUNET_CRYPTO_rsa_public_key_decode($13, $12) | 0;
_GNUNET_xfree_($13, 18658, 212);
@@ -63322,7 +63323,7 @@ function _TALER_WRALL_amount_add($0, $1, $2, $3, $v1_frac, $v2_frac, $cur) {
STACKTOP = sp;
return $$0 | 0;
}
- $22 = _GNUNET_xmalloc_(24, 18658, 496) | 0;
+ $22 = _GNUNET_xmalloc_(24, 18658, 511) | 0;
HEAP32[$22 >> 2] = HEAP32[$sum >> 2];
HEAP32[$22 + 4 >> 2] = HEAP32[$sum + 4 >> 2];
HEAP32[$22 + 8 >> 2] = HEAP32[$sum + 8 >> 2];
@@ -63994,7 +63995,7 @@ function _WRALL_make_purpose($motivation, $motivation_len, $payload, $payload_si
} while (0);
$10 = $payload_size + 8 | 0;
$11 = _htonl($10) | 0;
- $12 = _GNUNET_xmalloc_($10, 18658, 329) | 0;
+ $12 = _GNUNET_xmalloc_($10, 18658, 328) | 0;
HEAP8[$12 >> 0] = $11;
HEAP8[$12 + 1 >> 0] = $11 >> 8;
HEAP8[$12 + 2 >> 0] = $11 >> 16;
@@ -65732,7 +65733,7 @@ function _TALER_WRALL_make_withdraw_bundle($reserve_pub, $total, $fee, $denom_pu
HEAP32[$wdrw >> 2] = _htonl(216) | 0;
HEAP32[$wdrw + 4 >> 2] = _htonl(1200) | 0;
_GNUNET_CRYPTO_hash($coin_env, $coin_env_size, $wdrw + 152 | 0);
- $8 = _GNUNET_xmalloc_(216, 18658, 551) | 0;
+ $8 = _GNUNET_xmalloc_(216, 18658, 566) | 0;
_memcpy($8 | 0, $wdrw | 0, 216) | 0;
STACKTOP = sp;
return $8 | 0;
@@ -66942,6 +66943,30 @@ function _entropy_collect_cb($buffer, $length, $origin) {
if ((label | 0) == 9) return;
}
+function _TALER_amount_ntoh($res, $dn) {
+ $res = $res | 0;
+ $dn = $dn | 0;
+ var $0 = 0, $1 = 0, $12 = 0, $4 = 0, $6 = 0, $8 = 0, dest = 0, src = 0, stop = 0;
+ $0 = $dn;
+ $1 = $0;
+ $4 = $0 + 4 | 0;
+ $6 = _GNUNET_ntohll(HEAPU8[$1 >> 0] | HEAPU8[$1 + 1 >> 0] << 8 | HEAPU8[$1 + 2 >> 0] << 16 | HEAPU8[$1 + 3 >> 0] << 24, HEAPU8[$4 >> 0] | HEAPU8[$4 + 1 >> 0] << 8 | HEAPU8[$4 + 2 >> 0] << 16 | HEAPU8[$4 + 3 >> 0] << 24) | 0;
+ $8 = $res;
+ HEAP32[$8 >> 2] = $6;
+ HEAP32[$8 + 4 >> 2] = tempRet0;
+ $12 = $dn + 8 | 0;
+ HEAP32[$res + 8 >> 2] = _ntohl(HEAPU8[$12 >> 0] | HEAPU8[$12 + 1 >> 0] << 8 | HEAPU8[$12 + 2 >> 0] << 16 | HEAPU8[$12 + 3 >> 0] << 24) | 0;
+ dest = $res + 12 | 0;
+ src = $dn + 12 | 0;
+ stop = dest + 12 | 0;
+ do {
+ HEAP8[dest >> 0] = HEAP8[src >> 0] | 0;
+ dest = dest + 1 | 0;
+ src = src + 1 | 0;
+ } while ((dest | 0) < (stop | 0));
+ return;
+}
+
function _frexp($x, $e) {
$x = +$x;
$e = $e | 0;
@@ -67156,7 +67181,7 @@ function _TALER_WRALL_get_amount($0, $1, $fraction, $cur) {
HEAP32[$4 >> 2] = $0;
HEAP32[$4 + 4 >> 2] = $1;
HEAP32[$amount + 8 >> 2] = $fraction;
- $9 = _GNUNET_xmalloc_(24, 18658, 1275) | 0;
+ $9 = _GNUNET_xmalloc_(24, 18658, 1290) | 0;
HEAP32[$9 >> 2] = HEAP32[$amount >> 2];
HEAP32[$9 + 4 >> 2] = HEAP32[$amount + 4 >> 2];
HEAP32[$9 + 8 >> 2] = HEAP32[$amount + 8 >> 2];
@@ -68413,6 +68438,28 @@ function ___toread($f) {
return $$0 | 0;
}
+function _TALER_WRALL_purpose_create($purpose, $payload, $payload_size) {
+ $purpose = $purpose | 0;
+ $payload = $payload | 0;
+ $payload_size = $payload_size | 0;
+ var $1 = 0, $2 = 0, $4 = 0, $5 = 0, $6 = 0;
+ $1 = _htonl($payload_size + 4 | 0) | 0;
+ $2 = _GNUNET_xmalloc_($1, 18658, 347) | 0;
+ _memcpy($2 + 8 | 0, $payload | 0, $payload_size | 0) | 0;
+ $4 = _htonl($purpose) | 0;
+ $5 = $2 + 4 | 0;
+ HEAP8[$5 >> 0] = $4;
+ HEAP8[$5 + 1 >> 0] = $4 >> 8;
+ HEAP8[$5 + 2 >> 0] = $4 >> 16;
+ HEAP8[$5 + 3 >> 0] = $4 >> 24;
+ $6 = _htonl($1) | 0;
+ HEAP8[$2 >> 0] = $6;
+ HEAP8[$2 + 1 >> 0] = $6 >> 8;
+ HEAP8[$2 + 2 >> 0] = $6 >> 16;
+ HEAP8[$2 + 3 >> 0] = $6 >> 24;
+ return $2 | 0;
+}
+
function _GNUNET_CRYPTO_hash_context_start() {
var $0 = 0, $vararg_buffer = 0, sp = 0;
sp = STACKTOP;
@@ -68679,7 +68726,7 @@ function _TALER_WRALL_sign_contract($contract, $coin_priv) {
dest = dest + 4 | 0;
src = src + 4 | 0;
} while ((dest | 0) < (stop | 0));
- $2 = _GNUNET_xmalloc_(64, 18658, 577) | 0;
+ $2 = _GNUNET_xmalloc_(64, 18658, 592) | 0;
_GNUNET_CRYPTO_eddsa_sign($coin_priv, $dep_perm, $2) | 0;
STACKTOP = sp;
return $2 | 0;
@@ -68737,7 +68784,6 @@ function ___stdio_seek($f, $off, $whence) {
STACKTOP = sp;
return $5 | 0;
}
-
function ___fmodeflags($mode) {
$mode = $mode | 0;
var $1 = 0, $2 = 0, $4 = 0, $7 = 0, $flags$0 = 0, $flags$0$ = 0, $flags$2 = 0, $flags$2$ = 0, $flags$4 = 0;
@@ -69323,7 +69369,7 @@ function _TALER_WRALL_gen_symmetric_key($salt, $blob, $blob_size) {
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$vararg_buffer = sp;
- $0 = _GNUNET_xmalloc_(64, 18658, 400) | 0;
+ $0 = _GNUNET_xmalloc_(64, 18658, 415) | 0;
$1 = _strlen($salt) | 0;
HEAP32[$vararg_buffer >> 2] = 0;
HEAP32[$vararg_buffer + 4 >> 2] = 0;
@@ -69340,7 +69386,7 @@ function _TALER_WRALL_gen_key_from_blob($salt, $blob, $blob_size) {
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$vararg_buffer = sp;
- $0 = _GNUNET_xmalloc_(64, 18658, 448) | 0;
+ $0 = _GNUNET_xmalloc_(64, 18658, 463) | 0;
$1 = _strlen($salt) | 0;
HEAP32[$vararg_buffer >> 2] = 0;
HEAP32[$vararg_buffer + 4 >> 2] = 0;
@@ -69357,7 +69403,7 @@ function _TALER_WRALL_gen_init_vector($salt, $blob, $blob_size) {
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$vararg_buffer = sp;
- $0 = _GNUNET_xmalloc_(32, 18658, 425) | 0;
+ $0 = _GNUNET_xmalloc_(32, 18658, 440) | 0;
$1 = _strlen($salt) | 0;
HEAP32[$vararg_buffer >> 2] = 0;
HEAP32[$vararg_buffer + 4 >> 2] = 0;
@@ -69979,7 +70025,7 @@ function _TALER_WRALL_rsa_public_key_decode_from_string($base32keyenc) {
$base32keyenc = $base32keyenc | 0;
var $5 = 0, $6 = 0, $8 = 0;
$5 = ~~+Math_floor(+(+(((_strlen($base32keyenc) | 0) * 5 | 0) >>> 3 >>> 0))) >>> 0;
- $6 = _GNUNET_xmalloc_($5, 18658, 357) | 0;
+ $6 = _GNUNET_xmalloc_($5, 18658, 372) | 0;
_GNUNET_STRINGS_string_to_data($base32keyenc, _strlen($base32keyenc) | 0, $6, $5) | 0;
$8 = _GNUNET_CRYPTO_rsa_public_key_decode($6, $5) | 0;
_GNUNET_xfree_($6, 18658, 212);
@@ -72032,7 +72078,7 @@ function _TALER_WRALL_make_eddsa_signature($priv, $purp) {
$priv = $priv | 0;
$purp = $purp | 0;
var $0 = 0;
- $0 = _GNUNET_xmalloc_(64, 18658, 1232) | 0;
+ $0 = _GNUNET_xmalloc_(64, 18658, 1247) | 0;
_GNUNET_CRYPTO_eddsa_sign($priv, $purp, $0) | 0;
return $0 | 0;
}
@@ -72268,7 +72314,7 @@ function _gcry_mpi_ec_mul($w, $n, $u, $ctx) {
function _TALER_WRALL_rsa_public_key_hash($key) {
$key = $key | 0;
var $0 = 0;
- $0 = _GNUNET_xmalloc_(64, 18658, 619) | 0;
+ $0 = _GNUNET_xmalloc_(64, 18658, 634) | 0;
_GNUNET_CRYPTO_rsa_public_key_hash($key, $0);
return $0 | 0;
}
@@ -72523,6 +72569,16 @@ function _getuid() {
return $0 | 0;
}
+function _GNUNET_ntohll($0, $1) {
+ $0 = $0 | 0;
+ $1 = $1 | 0;
+ var $2 = 0, $3 = 0;
+ $2 = _ntohl($0) | 0;
+ $3 = _ntohl($1) | 0;
+ tempRet0 = $2;
+ return $3 | 0;
+}
+
function _GNUNET_htonll($0, $1) {
$0 = $0 | 0;
$1 = $1 | 0;
@@ -73462,7 +73518,7 @@ var FUNCTION_TABLE_viiiiii = [b8,__gcry_aes_cbc_enc];
var FUNCTION_TABLE_iii = [b9,_rsa_generate,_compute_keygrip,_ecc_generate,_compute_keygrip_1819,_pss_verify_cmp,_check_exponent,b9];
var FUNCTION_TABLE_viiii = [b10,_reporter];
- return { _WRALL_make_purpose: _WRALL_make_purpose, _GNUNET_CRYPTO_rsa_blinding_key_encode: _GNUNET_CRYPTO_rsa_blinding_key_encode, _bitshift64Lshr: _bitshift64Lshr, _bitshift64Ashr: _bitshift64Ashr, _GNUNET_CRYPTO_eddsa_key_create: _GNUNET_CRYPTO_eddsa_key_create, _memcpy: _memcpy, _TALER_WR_GNUNET_free: _TALER_WR_GNUNET_free, _TALER_WRALL_amount_add: _TALER_WRALL_amount_add, _GNUNET_CRYPTO_rsa_private_key_decode: _GNUNET_CRYPTO_rsa_private_key_decode, _GNUNET_CRYPTO_rsa_blinding_key_decode: _GNUNET_CRYPTO_rsa_blinding_key_decode, _TALER_WR_verify_sign_key_enc: _TALER_WR_verify_sign_key_enc, _free: _free, _TALER_WRALL_sign_deposit_permission: _TALER_WRALL_sign_deposit_permission, _TALER_WR_verify_denoms: _TALER_WR_verify_denoms, _GNUNET_CRYPTO_rsa_blinding_key_create: _GNUNET_CRYPTO_rsa_blinding_key_create, _TALER_WR_verify_sign_key: _TALER_WR_verify_sign_key, _TALER_WRALL_rsa_public_key_hash: _TALER_WRALL_rsa_public_key_hash, _TALER_WRALL_gen_key_from_blob: _TALER_WRALL_gen_key_from_blob, _GNUNET_CRYPTO_rsa_private_key_get_public: _GNUNET_CRYPTO_rsa_private_key_get_public, _TALER_WRALL_rsa_public_key_decode_from_string: _TALER_WRALL_rsa_public_key_decode_from_string, _GNUNET_CRYPTO_symmetric_encrypt: _GNUNET_CRYPTO_symmetric_encrypt, _TALER_WR_get_fraction: _TALER_WR_get_fraction, _TALER_WR_verify_denoms_enc: _TALER_WR_verify_denoms_enc, _TALER_amount_cmp: _TALER_amount_cmp, _TALER_WRALL_ecdhe_public_key_from_private_key: _TALER_WRALL_ecdhe_public_key_from_private_key, _llvm_cttz_i32: _llvm_cttz_i32, _TALER_WRALL_eddsa_private_key_from_string: _TALER_WRALL_eddsa_private_key_from_string, _TALER_WRALL_gen_init_vector: _TALER_WRALL_gen_init_vector, _WR_verify_test: _WR_verify_test, _GNUNET_CRYPTO_rsa_public_key_free: _GNUNET_CRYPTO_rsa_public_key_free, _GNUNET_CRYPTO_hkdf: _GNUNET_CRYPTO_hkdf, _GNUNET_CRYPTO_eddsa_key_get_public: _GNUNET_CRYPTO_eddsa_key_get_public, _llvm_bswap_i32: _llvm_bswap_i32, _GNUNET_CRYPTO_rsa_private_key_create: _GNUNET_CRYPTO_rsa_private_key_create, _GNUNET_STRINGS_data_to_string_alloc: _GNUNET_STRINGS_data_to_string_alloc, _TALER_WRALL_sign_test: _TALER_WRALL_sign_test, _TALER_WR_verify_confirmation: _TALER_WR_verify_confirmation, _GNUNET_CRYPTO_rsa_public_key_decode: _GNUNET_CRYPTO_rsa_public_key_decode, _GNUNET_CRYPTO_rsa_blinding_key_free: _GNUNET_CRYPTO_rsa_blinding_key_free, _GNUNET_CRYPTO_rsa_signature_encode: _GNUNET_CRYPTO_rsa_signature_encode, _GNUNET_CRYPTO_rsa_verify: _GNUNET_CRYPTO_rsa_verify, _TALER_WR_eddsa_verify: _TALER_WR_eddsa_verify, _GNUNET_STRINGS_string_to_data: _GNUNET_STRINGS_string_to_data, _TALER_WRALL_gen_symmetric_key: _TALER_WRALL_gen_symmetric_key, _TALER_WRALL_ecc_ecdh: _TALER_WRALL_ecc_ecdh, _TALER_WRALL_get_amount: _TALER_WRALL_get_amount, _GNUNET_CRYPTO_rsa_unblind: _GNUNET_CRYPTO_rsa_unblind, _TALER_WR_get_currency: _TALER_WR_get_currency, _DEBUG_WR_get_purpose: _DEBUG_WR_get_purpose, _memset: _memset, _GNUNET_CRYPTO_rsa_private_key_encode: _GNUNET_CRYPTO_rsa_private_key_encode, _GNUNET_CRYPTO_symmetric_decrypt: _GNUNET_CRYPTO_symmetric_decrypt, _i64Subtract: _i64Subtract, _TALER_WR_get_value: _TALER_WR_get_value, _GNUNET_CRYPTO_rsa_signature_free: _GNUNET_CRYPTO_rsa_signature_free, _TALER_WRALL_eddsa_public_key_from_priv_string: _TALER_WRALL_eddsa_public_key_from_priv_string, _GNUNET_CRYPTO_rsa_blind: _GNUNET_CRYPTO_rsa_blind, _TALER_WR_verify_denom_enc: _TALER_WR_verify_denom_enc, _malloc: _malloc, _TALER_WR_hello_world: _TALER_WR_hello_world, _TALER_WRALL_make_withdraw_bundle: _TALER_WRALL_make_withdraw_bundle, _GNUNET_CRYPTO_rsa_signature_decode: _GNUNET_CRYPTO_rsa_signature_decode, _GNUNET_CRYPTO_rsa_sign: _GNUNET_CRYPTO_rsa_sign, _GNUNET_CRYPTO_ecdhe_key_create: _GNUNET_CRYPTO_ecdhe_key_create, _TALER_WRALL_get_encoding_from_rsa_signature: _TALER_WRALL_get_encoding_from_rsa_signature, _TALER_WRALL_hash: _TALER_WRALL_hash, _TALER_amount_normalize: _TALER_amount_normalize, _TALER_WRALL_sign_contract: _TALER_WRALL_sign_contract, _bitshift64Shl: _bitshift64Shl, _GNUNET_CRYPTO_rsa_private_key_free: _GNUNET_CRYPTO_rsa_private_key_free, _fflush: _fflush, _TALER_WRALL_eddsa_public_key_from_private: _TALER_WRALL_eddsa_public_key_from_private, _GNUNET_CRYPTO_ecc_ecdh: _GNUNET_CRYPTO_ecc_ecdh, _TALER_amount_add: _TALER_amount_add, _GNUNET_CRYPTO_ecdhe_key_get_public: _GNUNET_CRYPTO_ecdhe_key_get_public, _TALER_amount_subtract: _TALER_amount_subtract, _i64Add: _i64Add, _GNUNET_CRYPTO_eddsa_sign: _GNUNET_CRYPTO_eddsa_sign, _TALER_WR_verify_denom: _TALER_WR_verify_denom, _TALER_WRALL_get_current_time: _TALER_WRALL_get_current_time, ___errno_location: ___errno_location, _TALER_WR_get_fancy_time: _TALER_WR_get_fancy_time, _TALER_WRALL_make_eddsa_signature: _TALER_WRALL_make_eddsa_signature, _memmove: _memmove, _DEBUG_WR_dump_amount: _DEBUG_WR_dump_amount, _GNUNET_CRYPTO_rsa_public_key_encode: _GNUNET_CRYPTO_rsa_public_key_encode, _GNUNET_CRYPTO_hash: _GNUNET_CRYPTO_hash, _GNUNET_util_cl_init: _GNUNET_util_cl_init, _GNUNET_CRYPTO_random_init: _GNUNET_CRYPTO_random_init, _gpg_err_init: _gpg_err_init, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, establishStackSpace: establishStackSpace, setThrew: setThrew, setTempRet0: setTempRet0, getTempRet0: getTempRet0, dynCall_iiii: dynCall_iiii, dynCall_viiiii: dynCall_viiiii, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_ii: dynCall_ii, dynCall_viii: dynCall_viii, dynCall_v: dynCall_v, dynCall_iiiii: dynCall_iiiii, dynCall_viiiiii: dynCall_viiiiii, dynCall_iii: dynCall_iii, dynCall_viiii: dynCall_viiii };
+ return { _WRALL_make_purpose: _WRALL_make_purpose, _GNUNET_CRYPTO_rsa_blinding_key_encode: _GNUNET_CRYPTO_rsa_blinding_key_encode, _bitshift64Lshr: _bitshift64Lshr, _bitshift64Ashr: _bitshift64Ashr, _GNUNET_CRYPTO_eddsa_key_create: _GNUNET_CRYPTO_eddsa_key_create, _memcpy: _memcpy, _TALER_WR_GNUNET_free: _TALER_WR_GNUNET_free, _TALER_WRALL_amount_add: _TALER_WRALL_amount_add, _GNUNET_CRYPTO_rsa_private_key_decode: _GNUNET_CRYPTO_rsa_private_key_decode, _GNUNET_CRYPTO_rsa_blinding_key_decode: _GNUNET_CRYPTO_rsa_blinding_key_decode, _TALER_amount_hton: _TALER_amount_hton, _TALER_WR_verify_sign_key_enc: _TALER_WR_verify_sign_key_enc, _free: _free, _TALER_WRALL_sign_deposit_permission: _TALER_WRALL_sign_deposit_permission, _TALER_WR_verify_denoms: _TALER_WR_verify_denoms, _GNUNET_CRYPTO_rsa_blinding_key_create: _GNUNET_CRYPTO_rsa_blinding_key_create, _TALER_WR_verify_sign_key: _TALER_WR_verify_sign_key, _TALER_WRALL_rsa_public_key_hash: _TALER_WRALL_rsa_public_key_hash, _TALER_WRALL_gen_key_from_blob: _TALER_WRALL_gen_key_from_blob, _GNUNET_CRYPTO_rsa_private_key_get_public: _GNUNET_CRYPTO_rsa_private_key_get_public, _TALER_WRALL_rsa_public_key_decode_from_string: _TALER_WRALL_rsa_public_key_decode_from_string, _GNUNET_CRYPTO_symmetric_encrypt: _GNUNET_CRYPTO_symmetric_encrypt, _TALER_WR_get_fraction: _TALER_WR_get_fraction, _TALER_WR_verify_denoms_enc: _TALER_WR_verify_denoms_enc, _TALER_amount_cmp: _TALER_amount_cmp, _TALER_WRALL_ecdhe_public_key_from_private_key: _TALER_WRALL_ecdhe_public_key_from_private_key, _llvm_cttz_i32: _llvm_cttz_i32, _TALER_WRALL_eddsa_private_key_from_string: _TALER_WRALL_eddsa_private_key_from_string, _TALER_WRALL_gen_init_vector: _TALER_WRALL_gen_init_vector, _TALER_amount_ntoh: _TALER_amount_ntoh, _WR_verify_test: _WR_verify_test, _GNUNET_CRYPTO_rsa_public_key_free: _GNUNET_CRYPTO_rsa_public_key_free, _GNUNET_CRYPTO_hkdf: _GNUNET_CRYPTO_hkdf, _GNUNET_CRYPTO_eddsa_key_get_public: _GNUNET_CRYPTO_eddsa_key_get_public, _llvm_bswap_i32: _llvm_bswap_i32, _GNUNET_CRYPTO_rsa_private_key_create: _GNUNET_CRYPTO_rsa_private_key_create, _GNUNET_STRINGS_data_to_string_alloc: _GNUNET_STRINGS_data_to_string_alloc, _TALER_WRALL_sign_test: _TALER_WRALL_sign_test, _TALER_WR_verify_confirmation: _TALER_WR_verify_confirmation, _GNUNET_CRYPTO_rsa_public_key_decode: _GNUNET_CRYPTO_rsa_public_key_decode, _GNUNET_CRYPTO_rsa_blinding_key_free: _GNUNET_CRYPTO_rsa_blinding_key_free, _GNUNET_CRYPTO_rsa_signature_encode: _GNUNET_CRYPTO_rsa_signature_encode, _GNUNET_CRYPTO_rsa_verify: _GNUNET_CRYPTO_rsa_verify, _TALER_WR_eddsa_verify: _TALER_WR_eddsa_verify, _GNUNET_STRINGS_string_to_data: _GNUNET_STRINGS_string_to_data, _TALER_WRALL_gen_symmetric_key: _TALER_WRALL_gen_symmetric_key, _TALER_WRALL_ecc_ecdh: _TALER_WRALL_ecc_ecdh, _TALER_WRALL_get_amount: _TALER_WRALL_get_amount, _GNUNET_CRYPTO_rsa_unblind: _GNUNET_CRYPTO_rsa_unblind, _TALER_WR_get_currency: _TALER_WR_get_currency, _DEBUG_WR_get_purpose: _DEBUG_WR_get_purpose, _memset: _memset, _GNUNET_CRYPTO_rsa_private_key_encode: _GNUNET_CRYPTO_rsa_private_key_encode, _GNUNET_CRYPTO_symmetric_decrypt: _GNUNET_CRYPTO_symmetric_decrypt, _i64Subtract: _i64Subtract, _TALER_WR_get_value: _TALER_WR_get_value, _GNUNET_CRYPTO_rsa_signature_free: _GNUNET_CRYPTO_rsa_signature_free, _TALER_WRALL_eddsa_public_key_from_priv_string: _TALER_WRALL_eddsa_public_key_from_priv_string, _GNUNET_CRYPTO_rsa_blind: _GNUNET_CRYPTO_rsa_blind, _TALER_WR_verify_denom_enc: _TALER_WR_verify_denom_enc, _malloc: _malloc, _TALER_WR_hello_world: _TALER_WR_hello_world, _TALER_WRALL_make_withdraw_bundle: _TALER_WRALL_make_withdraw_bundle, _GNUNET_CRYPTO_rsa_signature_decode: _GNUNET_CRYPTO_rsa_signature_decode, _GNUNET_CRYPTO_rsa_sign: _GNUNET_CRYPTO_rsa_sign, _GNUNET_CRYPTO_ecdhe_key_create: _GNUNET_CRYPTO_ecdhe_key_create, _TALER_WRALL_get_encoding_from_rsa_signature: _TALER_WRALL_get_encoding_from_rsa_signature, _TALER_WRALL_hash: _TALER_WRALL_hash, _TALER_amount_normalize: _TALER_amount_normalize, _TALER_WRALL_sign_contract: _TALER_WRALL_sign_contract, _bitshift64Shl: _bitshift64Shl, _GNUNET_CRYPTO_rsa_private_key_free: _GNUNET_CRYPTO_rsa_private_key_free, _fflush: _fflush, _TALER_WRALL_eddsa_public_key_from_private: _TALER_WRALL_eddsa_public_key_from_private, _GNUNET_CRYPTO_ecc_ecdh: _GNUNET_CRYPTO_ecc_ecdh, _TALER_amount_add: _TALER_amount_add, _GNUNET_CRYPTO_ecdhe_key_get_public: _GNUNET_CRYPTO_ecdhe_key_get_public, _TALER_amount_subtract: _TALER_amount_subtract, _i64Add: _i64Add, _TALER_WRALL_purpose_create: _TALER_WRALL_purpose_create, _GNUNET_CRYPTO_eddsa_sign: _GNUNET_CRYPTO_eddsa_sign, _TALER_WR_verify_denom: _TALER_WR_verify_denom, _TALER_WRALL_get_current_time: _TALER_WRALL_get_current_time, ___errno_location: ___errno_location, _TALER_WR_get_fancy_time: _TALER_WR_get_fancy_time, _TALER_WRALL_make_eddsa_signature: _TALER_WRALL_make_eddsa_signature, _memmove: _memmove, _DEBUG_WR_dump_amount: _DEBUG_WR_dump_amount, _GNUNET_CRYPTO_rsa_public_key_encode: _GNUNET_CRYPTO_rsa_public_key_encode, _GNUNET_CRYPTO_hash: _GNUNET_CRYPTO_hash, _GNUNET_util_cl_init: _GNUNET_util_cl_init, _GNUNET_CRYPTO_random_init: _GNUNET_CRYPTO_random_init, _gpg_err_init: _gpg_err_init, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, establishStackSpace: establishStackSpace, setThrew: setThrew, setTempRet0: setTempRet0, getTempRet0: getTempRet0, dynCall_iiii: dynCall_iiii, dynCall_viiiii: dynCall_viiiii, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_ii: dynCall_ii, dynCall_viii: dynCall_viii, dynCall_v: dynCall_v, dynCall_iiiii: dynCall_iiiii, dynCall_viiiiii: dynCall_viiiiii, dynCall_iii: dynCall_iii, dynCall_viiii: dynCall_viiii };
})
// EMSCRIPTEN_END_ASM
(Module.asmGlobalArg, Module.asmLibraryArg, buffer);
@@ -73476,6 +73532,7 @@ var _TALER_WR_GNUNET_free = Module["_TALER_WR_GNUNET_free"] = asm["_TALER_WR_GNU
var _TALER_WRALL_amount_add = Module["_TALER_WRALL_amount_add"] = asm["_TALER_WRALL_amount_add"];
var _GNUNET_CRYPTO_rsa_private_key_decode = Module["_GNUNET_CRYPTO_rsa_private_key_decode"] = asm["_GNUNET_CRYPTO_rsa_private_key_decode"];
var _GNUNET_CRYPTO_rsa_blinding_key_decode = Module["_GNUNET_CRYPTO_rsa_blinding_key_decode"] = asm["_GNUNET_CRYPTO_rsa_blinding_key_decode"];
+var _TALER_amount_hton = Module["_TALER_amount_hton"] = asm["_TALER_amount_hton"];
var _TALER_WRALL_eddsa_private_key_from_string = Module["_TALER_WRALL_eddsa_private_key_from_string"] = asm["_TALER_WRALL_eddsa_private_key_from_string"];
var runPostSets = Module["runPostSets"] = asm["runPostSets"];
var _gpg_err_init = Module["_gpg_err_init"] = asm["_gpg_err_init"];
@@ -73496,6 +73553,7 @@ var _TALER_WRALL_ecdhe_public_key_from_private_key = Module["_TALER_WRALL_ecdhe_
var _llvm_cttz_i32 = Module["_llvm_cttz_i32"] = asm["_llvm_cttz_i32"];
var _TALER_WR_verify_sign_key_enc = Module["_TALER_WR_verify_sign_key_enc"] = asm["_TALER_WR_verify_sign_key_enc"];
var _TALER_WRALL_gen_init_vector = Module["_TALER_WRALL_gen_init_vector"] = asm["_TALER_WRALL_gen_init_vector"];
+var _TALER_amount_ntoh = Module["_TALER_amount_ntoh"] = asm["_TALER_amount_ntoh"];
var _WR_verify_test = Module["_WR_verify_test"] = asm["_WR_verify_test"];
var _GNUNET_CRYPTO_rsa_public_key_free = Module["_GNUNET_CRYPTO_rsa_public_key_free"] = asm["_GNUNET_CRYPTO_rsa_public_key_free"];
var _GNUNET_CRYPTO_hkdf = Module["_GNUNET_CRYPTO_hkdf"] = asm["_GNUNET_CRYPTO_hkdf"];
@@ -73547,6 +73605,7 @@ var _TALER_amount_add = Module["_TALER_amount_add"] = asm["_TALER_amount_add"];
var _GNUNET_CRYPTO_rsa_signature_free = Module["_GNUNET_CRYPTO_rsa_signature_free"] = asm["_GNUNET_CRYPTO_rsa_signature_free"];
var _TALER_amount_subtract = Module["_TALER_amount_subtract"] = asm["_TALER_amount_subtract"];
var _i64Add = Module["_i64Add"] = asm["_i64Add"];
+var _TALER_WRALL_purpose_create = Module["_TALER_WRALL_purpose_create"] = asm["_TALER_WRALL_purpose_create"];
var _GNUNET_CRYPTO_eddsa_sign = Module["_GNUNET_CRYPTO_eddsa_sign"] = asm["_GNUNET_CRYPTO_eddsa_sign"];
var _TALER_WR_verify_denom = Module["_TALER_WR_verify_denom"] = asm["_TALER_WR_verify_denom"];
var _GNUNET_CRYPTO_hash = Module["_GNUNET_CRYPTO_hash"] = asm["_GNUNET_CRYPTO_hash"];