aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extension/background/emscriptif.js26
-rw-r--r--extension/background/emscriptif.ts39
-rw-r--r--extension/background/wallet.js9
-rw-r--r--extension/background/wallet.ts10
4 files changed, 77 insertions, 7 deletions
diff --git a/extension/background/emscriptif.js b/extension/background/emscriptif.js
index 7f3a23f61..f90f41ec2 100644
--- a/extension/background/emscriptif.js
+++ b/extension/background/emscriptif.js
@@ -41,6 +41,10 @@ var emscAlloc = {
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']),
+ rsa_blinding_key_create: getEmsc('GNUNET_CRYPTO_rsa_blinding_key_create', 'void', ['number']),
+ rsa_blinding_key_encode: getEmsc('GNUNET_CRYPTO_rsa_blinding_key_encode', 'void', ['number', 'number']),
+ rsa_blinding_key_decode: getEmsc('GNUNET_CRYPTO_rsa_blinding_key_decode', 'number', ['number', 'number']),
+ rsa_public_key_decode: getEmsc('GNUNET_CRYPTO_rsa_public_key_decode', 'number', ['number', 'number']),
malloc: (size) => Module._malloc(size),
};
var SignaturePurpose;
@@ -194,6 +198,20 @@ class EddsaPublicKey extends PackedArenaObject {
size() { return 32; }
}
class RsaBlindingKey extends ArenaObject {
+ static create(len, a) {
+ let o = new RsaBlindingKey(a);
+ o.nativePtr = emscAlloc.rsa_blinding_key_create(len);
+ return o;
+ }
+ encode() {
+ let ptr = emscAlloc.malloc(PTR_SIZE);
+ let size = emscAlloc.rsa_blinding_key_encode(this.nativePtr, ptr);
+ let res = new ByteArray(size, Module.getValue(ptr, '*'));
+ let s = res.encode();
+ emsc.free(ptr);
+ res.destroy();
+ return s;
+ }
destroy() {
// TODO
}
@@ -276,6 +294,14 @@ class WithdrawRequestPS extends SignatureStruct {
}
}
class RsaPublicKey extends ArenaObject {
+ static decode(s, a) {
+ let obj = new RsaPublicKey(a);
+ let hstr = emscAlloc.malloc(s.length + 1);
+ Module.writeStringToMemory(s, hstr);
+ obj.nativePtr = emscAlloc.rsa_public_key_decode(hstr, s.length);
+ emsc.free(hstr);
+ return obj;
+ }
destroy() {
emsc.rsa_public_key_free(this.nativePtr);
this.nativePtr = 0;
diff --git a/extension/background/emscriptif.ts b/extension/background/emscriptif.ts
index 7a775d19a..ef14065a7 100644
--- a/extension/background/emscriptif.ts
+++ b/extension/background/emscriptif.ts
@@ -85,6 +85,18 @@ var emscAlloc = {
rsa_blind: getEmsc('GNUNET_CRYPTO_rsa_blind',
'number',
['number', 'number', 'number', 'number']),
+ rsa_blinding_key_create: getEmsc('GNUNET_CRYPTO_rsa_blinding_key_create',
+ 'void',
+ ['number']),
+ rsa_blinding_key_encode: getEmsc('GNUNET_CRYPTO_rsa_blinding_key_encode',
+ 'void',
+ ['number', 'number']),
+ rsa_blinding_key_decode: getEmsc('GNUNET_CRYPTO_rsa_blinding_key_decode',
+ 'number',
+ ['number', 'number']),
+ rsa_public_key_decode: getEmsc('GNUNET_CRYPTO_rsa_public_key_decode',
+ 'number',
+ ['number', 'number']),
malloc: (size: number) => Module._malloc(size),
};
@@ -280,6 +292,22 @@ class EddsaPublicKey extends PackedArenaObject {
class RsaBlindingKey extends ArenaObject {
+ static create(len: number, a?: Arena) {
+ let o = new RsaBlindingKey(a);
+ o.nativePtr = emscAlloc.rsa_blinding_key_create(len);
+ return o;
+ }
+
+ encode(): string {
+ let ptr = emscAlloc.malloc(PTR_SIZE);
+ let size = emscAlloc.rsa_blinding_key_encode(this.nativePtr, ptr);
+ let res = new ByteArray(size, Module.getValue(ptr, '*'));
+ let s = res.encode();
+ emsc.free(ptr);
+ res.destroy();
+ return s;
+ }
+
destroy() {
// TODO
}
@@ -375,6 +403,15 @@ class WithdrawRequestPS extends SignatureStruct {
class RsaPublicKey extends ArenaObject {
+ static decode(s: string, a?: Arena): RsaPublicKey {
+ let obj = new RsaPublicKey(a);
+ let hstr = emscAlloc.malloc(s.length + 1);
+ Module.writeStringToMemory(s, hstr);
+ obj.nativePtr = emscAlloc.rsa_public_key_decode(hstr, s.length);
+ emsc.free(hstr);
+ return obj;
+ }
+
destroy() {
emsc.rsa_public_key_free(this.nativePtr);
this.nativePtr = 0;
@@ -384,7 +421,7 @@ class RsaPublicKey extends ArenaObject {
function rsaBlind(hashCode: HashCode,
blindingKey: RsaBlindingKey,
- pkey: EddsaPublicKey,
+ pkey: RsaPublicKey,
arena?: Arena): ByteArray
{
let ptr = emscAlloc.malloc(PTR_SIZE);
diff --git a/extension/background/wallet.js b/extension/background/wallet.js
index 4f245588b..7011280fa 100644
--- a/extension/background/wallet.js
+++ b/extension/background/wallet.js
@@ -115,9 +115,12 @@ function withdraw(denom, reserve, mint) {
denom_pub: denom.denom_pub,
reserve_pub: reserve.reserve_pub,
};
- let coinPub = EddsaPrivateKey.create();
- // create RSA blinding key
- // blind coin
+ let denomPub = RsaPublicKey.decode(denom.denom_pub);
+ let coinPriv = EddsaPrivateKey.create();
+ let coinPub = coinPriv.getPublicKey();
+ let blindingFactor = RsaBlindingKey.create(1024);
+ let pubHash = coinPub.hash();
+ let ev = rsaBlind(pubHash, blindingFactor, denomPub);
// generate signature
}
/**
diff --git a/extension/background/wallet.ts b/extension/background/wallet.ts
index b04babb68..040b7b6a9 100644
--- a/extension/background/wallet.ts
+++ b/extension/background/wallet.ts
@@ -128,9 +128,13 @@ function withdraw(denom, reserve, mint) {
denom_pub: denom.denom_pub,
reserve_pub: reserve.reserve_pub,
};
- let coinPub = EddsaPrivateKey.create();
- // create RSA blinding key
- // blind coin
+ let denomPub = RsaPublicKey.decode(denom.denom_pub);
+ let coinPriv = EddsaPrivateKey.create();
+ let coinPub = coinPriv.getPublicKey();
+ let blindingFactor = RsaBlindingKey.create(1024);
+ let pubHash = coinPub.hash();
+ let ev = rsaBlind(pubHash, blindingFactor, denomPub);
+
// generate signature
}