aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-09-22 17:18:25 +0200
committerFlorian Dold <florian.dold@gmail.com>2018-09-22 17:18:25 +0200
commit361463a2ff10bd3e536e34ee816b397c23dca6f7 (patch)
tree740748ba74505bfbd7f96a2355b0dbc17bae2d32 /src
parent1f9ca30a9116018ae77c70730536032c8785116d (diff)
downloadwallet-core-361463a2ff10bd3e536e34ee816b397c23dca6f7.tar.xz
wasm
Diffstat (limited to 'src')
-rw-r--r--src/crypto/cryptoWorker.ts76
-rw-r--r--src/crypto/emscInterface.ts72
-rw-r--r--src/i18n/de.po86
-rw-r--r--src/i18n/en-US.po86
-rw-r--r--src/i18n/fr.po86
-rw-r--r--src/i18n/it.po86
-rw-r--r--src/i18n/strings.ts30
-rw-r--r--src/i18n/sv.po86
-rw-r--r--src/i18n/taler-wallet-webex.pot86
9 files changed, 465 insertions, 229 deletions
diff --git a/src/crypto/cryptoWorker.ts b/src/crypto/cryptoWorker.ts
index 3e71794b4..11b21190d 100644
--- a/src/crypto/cryptoWorker.ts
+++ b/src/crypto/cryptoWorker.ts
@@ -549,6 +549,76 @@ namespace RpcFunctions {
time_eddsa_verify += timer.performanceNow() - start;
}
+ /* rsa 2048 */
+
+ let time_rsa_2048_blind = 0;
+ const rsaPriv2048: native.RsaPrivateKey = native.RsaPrivateKey.create(2048);
+ const rsaPub2048 = rsaPriv2048.getPublicKey();
+ const blindingSecret2048 = native.RsaBlindingKeySecret.create();
+ for (let i = 0; i < repetitions; i++) {
+ const start = timer.performanceNow();
+ native.rsaBlind(h, blindingSecret2048, rsaPub2048);
+ time_rsa_2048_blind += timer.performanceNow() - start;
+ }
+
+ const blindedMessage2048 = native.rsaBlind(h, blindingSecret2048, rsaPub2048);
+ if (!blindedMessage2048) {
+ throw Error("should not happen");
+ }
+ const rsaBlindSig2048 = native.rsaSignBlinded(rsaPriv2048, blindedMessage2048);
+
+ let time_rsa_2048_unblind = 0;
+ for (let i = 0; i < repetitions; i++) {
+ const start = timer.performanceNow();
+ native.rsaUnblind(rsaBlindSig2048, blindingSecret2048, rsaPub2048);
+ time_rsa_2048_unblind += timer.performanceNow() - start;
+ }
+
+ const unblindedSig2048 = native.rsaUnblind(rsaBlindSig2048, blindingSecret2048, rsaPub2048);
+
+ let time_rsa_2048_verify = 0;
+ for (let i = 0; i < repetitions; i++) {
+ const start = timer.performanceNow();
+ native.rsaVerify(h, unblindedSig2048, rsaPub2048);
+ time_rsa_2048_verify += timer.performanceNow() - start;
+ }
+
+
+ /* rsa 4096 */
+
+ let time_rsa_4096_blind = 0;
+ const rsaPriv4096: native.RsaPrivateKey = native.RsaPrivateKey.create(4096);
+ const rsaPub4096 = rsaPriv4096.getPublicKey();
+ const blindingSecret4096 = native.RsaBlindingKeySecret.create();
+ for (let i = 0; i < repetitions; i++) {
+ const start = timer.performanceNow();
+ native.rsaBlind(h, blindingSecret4096, rsaPub4096);
+ time_rsa_4096_blind += timer.performanceNow() - start;
+ }
+
+ const blindedMessage4096 = native.rsaBlind(h, blindingSecret4096, rsaPub4096);
+ if (!blindedMessage4096) {
+ throw Error("should not happen");
+ }
+ const rsaBlindSig4096 = native.rsaSignBlinded(rsaPriv4096, blindedMessage4096);
+
+ let time_rsa_4096_unblind = 0;
+ for (let i = 0; i < repetitions; i++) {
+ const start = timer.performanceNow();
+ native.rsaUnblind(rsaBlindSig4096, blindingSecret4096, rsaPub4096);
+ time_rsa_4096_unblind += timer.performanceNow() - start;
+ }
+
+ const unblindedSig4096 = native.rsaUnblind(rsaBlindSig4096, blindingSecret4096, rsaPub4096);
+
+ let time_rsa_4096_verify = 0;
+ for (let i = 0; i < repetitions; i++) {
+ const start = timer.performanceNow();
+ native.rsaVerify(h, unblindedSig4096, rsaPub4096);
+ time_rsa_4096_verify += timer.performanceNow() - start;
+ }
+
+
return {
repetitions,
time: {
@@ -558,6 +628,12 @@ namespace RpcFunctions {
eddsa_sign: time_eddsa_sign,
eddsa_verify: time_eddsa_verify,
ecdsa_create: time_ecdsa_create,
+ rsa_2048_blind: time_rsa_2048_blind,
+ rsa_2048_unblind: time_rsa_2048_unblind,
+ rsa_2048_verify: time_rsa_2048_verify,
+ rsa_4096_blind: time_rsa_4096_blind,
+ rsa_4096_unblind: time_rsa_4096_unblind,
+ rsa_4096_verify: time_rsa_4096_verify,
}
};
}
diff --git a/src/crypto/emscInterface.ts b/src/crypto/emscInterface.ts
index 61289fb75..dcd16e633 100644
--- a/src/crypto/emscInterface.ts
+++ b/src/crypto/emscInterface.ts
@@ -90,7 +90,9 @@ interface EmscFunctions {
random_block(a1: number, a2: number, a3: number): void;
rsa_blinding_key_free(a1: number): void;
rsa_public_key_free(a1: number): void;
+ rsa_private_key_free(a1: number): void;
rsa_signature_free(a1: number): void;
+ rsa_verify(msgHash: number, sig: number, pubKey: number): number;
setup_fresh_coin(a1: number, a2: number, a3: number): void;
string_to_data(a1: number, a2: number, a3: number, a4: number): number;
}
@@ -115,10 +117,15 @@ interface EmscAllocFunctions {
rsa_blinding_key_create(a1: number): number;
rsa_blinding_key_decode(a1: number, a2: number): number;
rsa_blinding_key_encode(a1: number, a2: number): number;
+ rsa_private_key_create(len: number): number;
+ rsa_private_key_decode(a1: number, a2: number): number;
+ rsa_private_key_encode(a1: number, a2: number): number;
+ rsa_private_key_get_public(privKeyPtr: number): number;
rsa_public_key_decode(a1: number, a2: number): number;
rsa_public_key_encode(a1: number, a2: number): number;
- rsa_signature_encode(a1: number, a2: number): number;
rsa_signature_decode(a1: number, a2: number): number;
+ rsa_signature_encode(a1: number, a2: number): number;
+ rsa_sign_blinded(keyPtr: number, msgPtr: number, msgLen: number): number;
rsa_unblind(a1: number, a2: number, a3: number): number;
}
@@ -159,10 +166,15 @@ class EmscEnvironment {
rsa_blinding_key_create: getEmsc("GNUNET_CRYPTO_rsa_blinding_key_create", "number", ["number"]),
rsa_blinding_key_decode: getEmsc("GNUNET_CRYPTO_rsa_blinding_key_decode", "number", ["number", "number"]),
rsa_blinding_key_encode: getEmsc("GNUNET_CRYPTO_rsa_blinding_key_encode", "number", ["number", "number"]),
+ rsa_private_key_create: getEmsc("GNUNET_CRYPTO_rsa_private_key_create", "number", ["number"]),
+ rsa_private_key_decode: getEmsc("GNUNET_CRYPTO_rsa_private_key_decode", "number", ["number", "number"]),
+ rsa_private_key_encode: getEmsc("GNUNET_CRYPTO_rsa_private_key_encode", "number", ["number", "number"]),
+ rsa_private_key_get_public: getEmsc("GNUNET_CRYPTO_rsa_private_key_get_public", "number", ["number"]),
rsa_public_key_decode: getEmsc("GNUNET_CRYPTO_rsa_public_key_decode", "number", ["number", "number"]),
rsa_public_key_encode: getEmsc("GNUNET_CRYPTO_rsa_public_key_encode", "number", ["number", "number"]),
rsa_signature_decode: getEmsc("GNUNET_CRYPTO_rsa_signature_decode", "number", ["number", "number"]),
rsa_signature_encode: getEmsc("GNUNET_CRYPTO_rsa_signature_encode", "number", ["number", "number"]),
+ rsa_sign_blinded: getEmsc("GNUNET_CRYPTO_rsa_sign_blinded", "number", ["number", "number", "number"]),
rsa_unblind: getEmsc("GNUNET_CRYPTO_rsa_unblind", "number", ["number", "number", "number"]),
};
this.funcs = {
@@ -189,7 +201,9 @@ class EmscEnvironment {
random_block: getEmsc("GNUNET_CRYPTO_random_block", "void", ["number", "number", "number"]),
rsa_blinding_key_free: getEmsc("GNUNET_CRYPTO_rsa_blinding_key_free", "void", ["number"]),
rsa_public_key_free: getEmsc("GNUNET_CRYPTO_rsa_public_key_free", "void", ["number"]),
+ rsa_private_key_free: getEmsc("GNUNET_CRYPTO_rsa_private_key_free", "void", ["number"]),
rsa_signature_free: getEmsc("GNUNET_CRYPTO_rsa_signature_free", "void", ["number"]),
+ rsa_verify: getEmsc("GNUNET_CRYPTO_rsa_verify", "number", ["number", "number", "number"]),
setup_fresh_coin: getEmsc("TALER_setup_fresh_coin", "void", ["number", "number", "number"]),
string_to_data: getEmsc("GNUNET_STRINGS_string_to_data", "number", ["number", "number", "number", "number"]),
};
@@ -1358,6 +1372,42 @@ export class PaymentSignaturePS extends SignatureStruct {
/**
+ * Low-level handle to an RsaPrivateKey.
+ */
+export class RsaPrivateKey extends MallocArenaObject {
+ static fromCrock(s: string): RsaPrivateKey {
+ return fromCrockDecoded(s, this, emsc().allocFuncs.rsa_private_key_decode);
+ }
+
+ static create(bitLen: number, a?: Arena): RsaPrivateKey {
+ const obj = new RsaPrivateKey(a);
+ obj.nativePtr = emsc().allocFuncs.rsa_private_key_create(bitLen);
+ return obj;
+ }
+
+ toCrock() {
+ return this.encode().toCrock();
+ }
+
+
+ getPublicKey(a?: Arena): RsaPublicKey {
+ const obj = new RsaPublicKey(a);
+ obj.nativePtr = emsc().allocFuncs.rsa_private_key_get_public(this.nativePtr);
+ return obj;
+ }
+
+ destroy() {
+ emsc().funcs.rsa_public_key_free(this.nativePtr);
+ this.nativePtr = 0;
+ }
+
+ encode(arena?: Arena): ByteArray {
+ return encode(this, emsc().allocFuncs.rsa_private_key_encode);
+ }
+}
+
+
+/**
* Low-level handle to an RsaPublicKey.
*/
export class RsaPublicKey extends MallocArenaObject {
@@ -1470,6 +1520,16 @@ export function eddsaVerify(purposeNum: number,
}
+export function rsaVerify(h: HashCode,
+ sig: RsaSignature,
+ pub: RsaPublicKey) {
+ const r = emsc().funcs.rsa_verify(h.nativePtr,
+ sig.nativePtr,
+ pub.nativePtr);
+ return r === GNUNET_OK;
+}
+
+
/**
* Unblind a blindly signed value.
*/
@@ -1516,6 +1576,16 @@ export function ecdhEddsa(priv: EcdhePrivateKey,
return h;
}
+export function rsaSignBlinded(priv: RsaPrivateKey,
+ msg: ByteArray): RsaSignature {
+ const sig = new RsaSignature();
+ sig.nativePtr = emsc().allocFuncs.rsa_sign_blinded (priv.nativePtr,
+ msg.nativePtr,
+ msg.size());
+ return sig;
+}
+
+
/**
* Derive a fresh coin from the given seed. Used during refreshing.
diff --git a/src/i18n/de.po b/src/i18n/de.po
index 94ad58bb6..1f6ee9010 100644
--- a/src/i18n/de.po
+++ b/src/i18n/de.po
@@ -27,28 +27,38 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/webex/pages/confirm-contract.tsx:76
+#: src/webex/pages/benchmark.tsx:58
+#, c-format
+msgid "Operation"
+msgstr ""
+
+#: src/webex/pages/benchmark.tsx:59
+#, c-format
+msgid "time (ms/op)"
+msgstr ""
+
+#: src/webex/pages/confirm-contract.tsx:78
#, c-format
msgid "show more details"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:90
+#: src/webex/pages/confirm-contract.tsx:92
#, c-format
msgid "Accepted exchanges:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:95
+#: src/webex/pages/confirm-contract.tsx:97
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:217
+#: src/webex/pages/confirm-contract.tsx:219
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:219
+#: src/webex/pages/confirm-contract.tsx:221
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@@ -56,54 +66,54 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:320
+#: src/webex/pages/confirm-contract.tsx:322
#, fuzzy, c-format
msgid "Confirm payment"
msgstr "Bezahlung bestätigen"
-#: src/webex/pages/confirm-contract.tsx:330
+#: src/webex/pages/confirm-contract.tsx:332
#, c-format
msgid "Submitting payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:341
+#: src/webex/pages/confirm-contract.tsx:343
#, c-format
msgid ""
"You already paid for this, clicking \"Confirm payment\" will not cost money "
"again."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:355
+#: src/webex/pages/confirm-contract.tsx:357
#, fuzzy, c-format
msgid "Aborting payment ..."
msgstr "Bezahlung bestätigen"
-#: src/webex/pages/confirm-contract.tsx:357
+#: src/webex/pages/confirm-contract.tsx:359
#, c-format
msgid "Payment aborted!"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:360
+#: src/webex/pages/confirm-contract.tsx:362
#, fuzzy, c-format
msgid "Retry Payment"
msgstr "Bezahlung bestätigen"
-#: src/webex/pages/confirm-contract.tsx:363
+#: src/webex/pages/confirm-contract.tsx:365
#, fuzzy, c-format
msgid "Abort Payment"
msgstr "Bezahlung bestätigen"
-#: src/webex/pages/confirm-contract.tsx:372
+#: src/webex/pages/confirm-contract.tsx:374
#, fuzzy, c-format
msgid "The merchant %1$s offers you to purchase:"
msgstr "Der Händler %1$s möchte einen Vertrag über %2$s mit Ihnen abschließen."
-#: src/webex/pages/confirm-contract.tsx:381
+#: src/webex/pages/confirm-contract.tsx:383
#, c-format
msgid "The total price is %1$s (plus %2$s fees)."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:385
+#: src/webex/pages/confirm-contract.tsx:387
#, c-format
msgid "The total price is %1$s."
msgstr ""
@@ -230,72 +240,72 @@ msgstr ""
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:162
+#: src/webex/pages/popup.tsx:165
#, c-format
msgid "Balance"
msgstr "Saldo"
-#: src/webex/pages/popup.tsx:165
+#: src/webex/pages/popup.tsx:168
#, c-format
msgid "History"
msgstr "Verlauf"
-#: src/webex/pages/popup.tsx:168
+#: src/webex/pages/popup.tsx:171
#, c-format
msgid "Debug"
msgstr "Debug"
-#: src/webex/pages/popup.tsx:248
+#: src/webex/pages/popup.tsx:251
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:253
+#: src/webex/pages/popup.tsx:256
#, fuzzy, c-format
msgid "You have no balance to show. Need some %1$s getting started?"
msgstr "Sie haben kein Digitalgeld. Wollen Sie %1$s? abheben?"
-#: src/webex/pages/popup.tsx:270
+#: src/webex/pages/popup.tsx:273
#, c-format
msgid "%1$s incoming"
msgstr ""
-#: src/webex/pages/popup.tsx:283
+#: src/webex/pages/popup.tsx:286
#, c-format
msgid "%1$s being spent"
msgstr ""
-#: src/webex/pages/popup.tsx:310
+#: src/webex/pages/popup.tsx:313
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:340
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:341
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:339
+#: src/webex/pages/popup.tsx:342
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:351
+#: src/webex/pages/popup.tsx:354
#, fuzzy, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgstr "Bank bestätig anlegen der Reserve (%1$s) bei %2$s"
-#: src/webex/pages/popup.tsx:361
+#: src/webex/pages/popup.tsx:364
#, fuzzy, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:370
+#: src/webex/pages/popup.tsx:373
#, fuzzy, c-format
msgid "Merchant %1$s offered contract %2$s."
msgstr ""
@@ -303,17 +313,17 @@ msgstr ""
" möchte einen Vertrag über %2$s\n"
" mit Ihnen abschließen."
-#: src/webex/pages/popup.tsx:381
+#: src/webex/pages/popup.tsx:384
#, fuzzy, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:391
+#: src/webex/pages/popup.tsx:394
#, fuzzy, c-format
msgid "Paid %1$s to merchant %2$s. %3$s (%4$s)"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:401
+#: src/webex/pages/popup.tsx:404
#, fuzzy, c-format
msgid "Merchant %1$s gave a refund over %2$s."
msgstr ""
@@ -321,12 +331,12 @@ msgstr ""
" möchte einen Vertrag über %2$s\n"
" mit Ihnen abschließen."
-#: src/webex/pages/popup.tsx:411
+#: src/webex/pages/popup.tsx:414
#, c-format
msgid "tip"
msgstr ""
-#: src/webex/pages/popup.tsx:415
+#: src/webex/pages/popup.tsx:418
#, fuzzy, c-format
msgid "Merchant %1$s gave a %2$s of %3$s."
msgstr ""
@@ -334,22 +344,22 @@ msgstr ""
" möchte einen Vertrag über %2$s\n"
" mit Ihnen abschließen."
-#: src/webex/pages/popup.tsx:419
+#: src/webex/pages/popup.tsx:422
#, c-format
msgid "You did not accept the tip yet."
msgstr ""
-#: src/webex/pages/popup.tsx:424
+#: src/webex/pages/popup.tsx:427
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:467
+#: src/webex/pages/popup.tsx:470
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:492
+#: src/webex/pages/popup.tsx:495
#, c-format
msgid "Your wallet has no events recorded."
msgstr "Ihre Geldbörse verzeichnet keine Vorkommnisse."
diff --git a/src/i18n/en-US.po b/src/i18n/en-US.po
index b9625d921..5d68c6167 100644
--- a/src/i18n/en-US.po
+++ b/src/i18n/en-US.po
@@ -27,28 +27,38 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/webex/pages/confirm-contract.tsx:76
+#: src/webex/pages/benchmark.tsx:58
+#, c-format
+msgid "Operation"
+msgstr ""
+
+#: src/webex/pages/benchmark.tsx:59
+#, c-format
+msgid "time (ms/op)"
+msgstr ""
+
+#: src/webex/pages/confirm-contract.tsx:78
#, c-format
msgid "show more details"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:90
+#: src/webex/pages/confirm-contract.tsx:92
#, c-format
msgid "Accepted exchanges:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:95
+#: src/webex/pages/confirm-contract.tsx:97
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:217
+#: src/webex/pages/confirm-contract.tsx:219
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:219
+#: src/webex/pages/confirm-contract.tsx:221
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@@ -56,54 +66,54 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:320
+#: src/webex/pages/confirm-contract.tsx:322
#, c-format
msgid "Confirm payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:330
+#: src/webex/pages/confirm-contract.tsx:332
#, c-format
msgid "Submitting payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:341
+#: src/webex/pages/confirm-contract.tsx:343
#, c-format
msgid ""
"You already paid for this, clicking \"Confirm payment\" will not cost money "
"again."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:355
+#: src/webex/pages/confirm-contract.tsx:357
#, c-format
msgid "Aborting payment ..."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:357
+#: src/webex/pages/confirm-contract.tsx:359
#, c-format
msgid "Payment aborted!"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:360
+#: src/webex/pages/confirm-contract.tsx:362
#, c-format
msgid "Retry Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:363
+#: src/webex/pages/confirm-contract.tsx:365
#, c-format
msgid "Abort Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:372
+#: src/webex/pages/confirm-contract.tsx:374
#, c-format
msgid "The merchant %1$s offers you to purchase:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:381
+#: src/webex/pages/confirm-contract.tsx:383
#, c-format
msgid "The total price is %1$s (plus %2$s fees)."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:385
+#: src/webex/pages/confirm-contract.tsx:387
#, c-format
msgid "The total price is %1$s."
msgstr ""
@@ -230,117 +240,117 @@ msgstr ""
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:162
+#: src/webex/pages/popup.tsx:165
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:165
+#: src/webex/pages/popup.tsx:168
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:168
+#: src/webex/pages/popup.tsx:171
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:248
+#: src/webex/pages/popup.tsx:251
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:253
+#: src/webex/pages/popup.tsx:256
#, c-format
msgid "You have no balance to show. Need some %1$s getting started?"
msgstr ""
-#: src/webex/pages/popup.tsx:270
+#: src/webex/pages/popup.tsx:273
#, c-format
msgid "%1$s incoming"
msgstr ""
-#: src/webex/pages/popup.tsx:283
+#: src/webex/pages/popup.tsx:286
#, c-format
msgid "%1$s being spent"
msgstr ""
-#: src/webex/pages/popup.tsx:310
+#: src/webex/pages/popup.tsx:313
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:340
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:341
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:339
+#: src/webex/pages/popup.tsx:342
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:351
+#: src/webex/pages/popup.tsx:354
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:361
+#: src/webex/pages/popup.tsx:364
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:370
+#: src/webex/pages/popup.tsx:373
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:381
+#: src/webex/pages/popup.tsx:384
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:391
+#: src/webex/pages/popup.tsx:394
#, c-format
msgid "Paid %1$s to merchant %2$s. %3$s (%4$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:401
+#: src/webex/pages/popup.tsx:404
#, c-format
msgid "Merchant %1$s gave a refund over %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:411
+#: src/webex/pages/popup.tsx:414
#, c-format
msgid "tip"
msgstr ""
-#: src/webex/pages/popup.tsx:415
+#: src/webex/pages/popup.tsx:418
#, c-format
msgid "Merchant %1$s gave a %2$s of %3$s."
msgstr ""
-#: src/webex/pages/popup.tsx:419
+#: src/webex/pages/popup.tsx:422
#, c-format
msgid "You did not accept the tip yet."
msgstr ""
-#: src/webex/pages/popup.tsx:424
+#: src/webex/pages/popup.tsx:427
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:467
+#: src/webex/pages/popup.tsx:470
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:492
+#: src/webex/pages/popup.tsx:495
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/fr.po b/src/i18n/fr.po
index 7f9fc14cf..f097767a8 100644
--- a/src/i18n/fr.po
+++ b/src/i18n/fr.po
@@ -27,28 +27,38 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/webex/pages/confirm-contract.tsx:76
+#: src/webex/pages/benchmark.tsx:58
+#, c-format
+msgid "Operation"
+msgstr ""
+
+#: src/webex/pages/benchmark.tsx:59
+#, c-format
+msgid "time (ms/op)"
+msgstr ""
+
+#: src/webex/pages/confirm-contract.tsx:78
#, c-format
msgid "show more details"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:90
+#: src/webex/pages/confirm-contract.tsx:92
#, c-format
msgid "Accepted exchanges:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:95
+#: src/webex/pages/confirm-contract.tsx:97
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:217
+#: src/webex/pages/confirm-contract.tsx:219
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:219
+#: src/webex/pages/confirm-contract.tsx:221
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@@ -56,54 +66,54 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:320
+#: src/webex/pages/confirm-contract.tsx:322
#, c-format
msgid "Confirm payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:330
+#: src/webex/pages/confirm-contract.tsx:332
#, c-format
msgid "Submitting payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:341
+#: src/webex/pages/confirm-contract.tsx:343
#, c-format
msgid ""
"You already paid for this, clicking \"Confirm payment\" will not cost money "
"again."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:355
+#: src/webex/pages/confirm-contract.tsx:357
#, c-format
msgid "Aborting payment ..."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:357
+#: src/webex/pages/confirm-contract.tsx:359
#, c-format
msgid "Payment aborted!"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:360
+#: src/webex/pages/confirm-contract.tsx:362
#, c-format
msgid "Retry Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:363
+#: src/webex/pages/confirm-contract.tsx:365
#, c-format
msgid "Abort Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:372
+#: src/webex/pages/confirm-contract.tsx:374
#, c-format
msgid "The merchant %1$s offers you to purchase:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:381
+#: src/webex/pages/confirm-contract.tsx:383
#, c-format
msgid "The total price is %1$s (plus %2$s fees)."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:385
+#: src/webex/pages/confirm-contract.tsx:387
#, c-format
msgid "The total price is %1$s."
msgstr ""
@@ -230,117 +240,117 @@ msgstr ""
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:162
+#: src/webex/pages/popup.tsx:165
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:165
+#: src/webex/pages/popup.tsx:168
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:168
+#: src/webex/pages/popup.tsx:171
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:248
+#: src/webex/pages/popup.tsx:251
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:253
+#: src/webex/pages/popup.tsx:256
#, c-format
msgid "You have no balance to show. Need some %1$s getting started?"
msgstr ""
-#: src/webex/pages/popup.tsx:270
+#: src/webex/pages/popup.tsx:273
#, c-format
msgid "%1$s incoming"
msgstr ""
-#: src/webex/pages/popup.tsx:283
+#: src/webex/pages/popup.tsx:286
#, c-format
msgid "%1$s being spent"
msgstr ""
-#: src/webex/pages/popup.tsx:310
+#: src/webex/pages/popup.tsx:313
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:340
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:341
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:339
+#: src/webex/pages/popup.tsx:342
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:351
+#: src/webex/pages/popup.tsx:354
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:361
+#: src/webex/pages/popup.tsx:364
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:370
+#: src/webex/pages/popup.tsx:373
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:381
+#: src/webex/pages/popup.tsx:384
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:391
+#: src/webex/pages/popup.tsx:394
#, c-format
msgid "Paid %1$s to merchant %2$s. %3$s (%4$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:401
+#: src/webex/pages/popup.tsx:404
#, c-format
msgid "Merchant %1$s gave a refund over %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:411
+#: src/webex/pages/popup.tsx:414
#, c-format
msgid "tip"
msgstr ""
-#: src/webex/pages/popup.tsx:415
+#: src/webex/pages/popup.tsx:418
#, c-format
msgid "Merchant %1$s gave a %2$s of %3$s."
msgstr ""
-#: src/webex/pages/popup.tsx:419
+#: src/webex/pages/popup.tsx:422
#, c-format
msgid "You did not accept the tip yet."
msgstr ""
-#: src/webex/pages/popup.tsx:424
+#: src/webex/pages/popup.tsx:427
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:467
+#: src/webex/pages/popup.tsx:470
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:492
+#: src/webex/pages/popup.tsx:495
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/it.po b/src/i18n/it.po
index 7f9fc14cf..f097767a8 100644
--- a/src/i18n/it.po
+++ b/src/i18n/it.po
@@ -27,28 +27,38 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/webex/pages/confirm-contract.tsx:76
+#: src/webex/pages/benchmark.tsx:58
+#, c-format
+msgid "Operation"
+msgstr ""
+
+#: src/webex/pages/benchmark.tsx:59
+#, c-format
+msgid "time (ms/op)"
+msgstr ""
+
+#: src/webex/pages/confirm-contract.tsx:78
#, c-format
msgid "show more details"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:90
+#: src/webex/pages/confirm-contract.tsx:92
#, c-format
msgid "Accepted exchanges:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:95
+#: src/webex/pages/confirm-contract.tsx:97
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:217
+#: src/webex/pages/confirm-contract.tsx:219
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:219
+#: src/webex/pages/confirm-contract.tsx:221
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@@ -56,54 +66,54 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:320
+#: src/webex/pages/confirm-contract.tsx:322
#, c-format
msgid "Confirm payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:330
+#: src/webex/pages/confirm-contract.tsx:332
#, c-format
msgid "Submitting payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:341
+#: src/webex/pages/confirm-contract.tsx:343
#, c-format
msgid ""
"You already paid for this, clicking \"Confirm payment\" will not cost money "
"again."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:355
+#: src/webex/pages/confirm-contract.tsx:357
#, c-format
msgid "Aborting payment ..."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:357
+#: src/webex/pages/confirm-contract.tsx:359
#, c-format
msgid "Payment aborted!"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:360
+#: src/webex/pages/confirm-contract.tsx:362
#, c-format
msgid "Retry Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:363
+#: src/webex/pages/confirm-contract.tsx:365
#, c-format
msgid "Abort Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:372
+#: src/webex/pages/confirm-contract.tsx:374
#, c-format
msgid "The merchant %1$s offers you to purchase:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:381
+#: src/webex/pages/confirm-contract.tsx:383
#, c-format
msgid "The total price is %1$s (plus %2$s fees)."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:385
+#: src/webex/pages/confirm-contract.tsx:387
#, c-format
msgid "The total price is %1$s."
msgstr ""
@@ -230,117 +240,117 @@ msgstr ""
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:162
+#: src/webex/pages/popup.tsx:165
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:165
+#: src/webex/pages/popup.tsx:168
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:168
+#: src/webex/pages/popup.tsx:171
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:248
+#: src/webex/pages/popup.tsx:251
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:253
+#: src/webex/pages/popup.tsx:256
#, c-format
msgid "You have no balance to show. Need some %1$s getting started?"
msgstr ""
-#: src/webex/pages/popup.tsx:270
+#: src/webex/pages/popup.tsx:273
#, c-format
msgid "%1$s incoming"
msgstr ""
-#: src/webex/pages/popup.tsx:283
+#: src/webex/pages/popup.tsx:286
#, c-format
msgid "%1$s being spent"
msgstr ""
-#: src/webex/pages/popup.tsx:310
+#: src/webex/pages/popup.tsx:313
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:340
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:341
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:339
+#: src/webex/pages/popup.tsx:342
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:351
+#: src/webex/pages/popup.tsx:354
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:361
+#: src/webex/pages/popup.tsx:364
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:370
+#: src/webex/pages/popup.tsx:373
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:381
+#: src/webex/pages/popup.tsx:384
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:391
+#: src/webex/pages/popup.tsx:394
#, c-format
msgid "Paid %1$s to merchant %2$s. %3$s (%4$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:401
+#: src/webex/pages/popup.tsx:404
#, c-format
msgid "Merchant %1$s gave a refund over %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:411
+#: src/webex/pages/popup.tsx:414
#, c-format
msgid "tip"
msgstr ""
-#: src/webex/pages/popup.tsx:415
+#: src/webex/pages/popup.tsx:418
#, c-format
msgid "Merchant %1$s gave a %2$s of %3$s."
msgstr ""
-#: src/webex/pages/popup.tsx:419
+#: src/webex/pages/popup.tsx:422
#, c-format
msgid "You did not accept the tip yet."
msgstr ""
-#: src/webex/pages/popup.tsx:424
+#: src/webex/pages/popup.tsx:427
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:467
+#: src/webex/pages/popup.tsx:470
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:492
+#: src/webex/pages/popup.tsx:495
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/strings.ts b/src/i18n/strings.ts
index b0d2208d4..cb5ee7e62 100644
--- a/src/i18n/strings.ts
+++ b/src/i18n/strings.ts
@@ -24,6 +24,12 @@ strings['de'] = {
"plural_forms": "nplurals=2; plural=(n != 1);",
"lang": ""
},
+ "Operation": [
+ ""
+ ],
+ "time (ms/op)": [
+ ""
+ ],
"show more details": [
""
],
@@ -258,6 +264,12 @@ strings['en-US'] = {
"plural_forms": "nplurals=2; plural=(n != 1);",
"lang": ""
},
+ "Operation": [
+ ""
+ ],
+ "time (ms/op)": [
+ ""
+ ],
"show more details": [
""
],
@@ -492,6 +504,12 @@ strings['fr'] = {
"plural_forms": "nplurals=2; plural=(n != 1);",
"lang": ""
},
+ "Operation": [
+ ""
+ ],
+ "time (ms/op)": [
+ ""
+ ],
"show more details": [
""
],
@@ -726,6 +744,12 @@ strings['it'] = {
"plural_forms": "nplurals=2; plural=(n != 1);",
"lang": ""
},
+ "Operation": [
+ ""
+ ],
+ "time (ms/op)": [
+ ""
+ ],
"show more details": [
""
],
@@ -960,6 +984,12 @@ strings['sv'] = {
"plural_forms": "nplurals=2; plural=(n != 1);",
"lang": ""
},
+ "Operation": [
+ ""
+ ],
+ "time (ms/op)": [
+ ""
+ ],
"show more details": [
"visa mer"
],
diff --git a/src/i18n/sv.po b/src/i18n/sv.po
index cff28fd3c..890505c07 100644
--- a/src/i18n/sv.po
+++ b/src/i18n/sv.po
@@ -27,28 +27,38 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/webex/pages/confirm-contract.tsx:76
+#: src/webex/pages/benchmark.tsx:58
+#, c-format
+msgid "Operation"
+msgstr ""
+
+#: src/webex/pages/benchmark.tsx:59
+#, c-format
+msgid "time (ms/op)"
+msgstr ""
+
+#: src/webex/pages/confirm-contract.tsx:78
#, fuzzy, c-format
msgid "show more details"
msgstr "visa mer"
-#: src/webex/pages/confirm-contract.tsx:90
+#: src/webex/pages/confirm-contract.tsx:92
#, c-format
msgid "Accepted exchanges:"
msgstr "Accepterade tjänsteleverantörer:"
-#: src/webex/pages/confirm-contract.tsx:95
+#: src/webex/pages/confirm-contract.tsx:97
#, c-format
msgid "Exchanges in the wallet:"
msgstr "Tjänsteleverantörer i plånboken:"
-#: src/webex/pages/confirm-contract.tsx:217
+#: src/webex/pages/confirm-contract.tsx:219
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr "plånboken"
#. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:219
+#: src/webex/pages/confirm-contract.tsx:221
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@@ -56,17 +66,17 @@ msgid ""
"wallet."
msgstr "plånboken"
-#: src/webex/pages/confirm-contract.tsx:320
+#: src/webex/pages/confirm-contract.tsx:322
#, c-format
msgid "Confirm payment"
msgstr "Godkän betalning"
-#: src/webex/pages/confirm-contract.tsx:330
+#: src/webex/pages/confirm-contract.tsx:332
#, c-format
msgid "Submitting payment"
msgstr "Bekräftar betalning"
-#: src/webex/pages/confirm-contract.tsx:341
+#: src/webex/pages/confirm-contract.tsx:343
#, c-format
msgid ""
"You already paid for this, clicking \"Confirm payment\" will not cost money "
@@ -75,37 +85,37 @@ msgstr ""
"Du har redan betalat för det här, om du trycker \"Godkän betalning\" "
"debiteras du inte igen"
-#: src/webex/pages/confirm-contract.tsx:355
+#: src/webex/pages/confirm-contract.tsx:357
#, c-format
msgid "Aborting payment ..."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:357
+#: src/webex/pages/confirm-contract.tsx:359
#, c-format
msgid "Payment aborted!"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:360
+#: src/webex/pages/confirm-contract.tsx:362
#, c-format
msgid "Retry Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:363
+#: src/webex/pages/confirm-contract.tsx:365
#, c-format
msgid "Abort Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:372
+#: src/webex/pages/confirm-contract.tsx:374
#, fuzzy, c-format
msgid "The merchant %1$s offers you to purchase:"
msgstr "Säljaren %1$s erbjuder följande:"
-#: src/webex/pages/confirm-contract.tsx:381
+#: src/webex/pages/confirm-contract.tsx:383
#, fuzzy, c-format
msgid "The total price is %1$s (plus %2$s fees)."
msgstr "Det totala priset är %1$s (plus %2$s avgifter).\n"
-#: src/webex/pages/confirm-contract.tsx:385
+#: src/webex/pages/confirm-contract.tsx:387
#, fuzzy, c-format
msgid "The total price is %1$s."
msgstr "Det totala priset är %1$s."
@@ -234,119 +244,119 @@ msgstr ""
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:162
+#: src/webex/pages/popup.tsx:165
#, c-format
msgid "Balance"
msgstr "Balans"
-#: src/webex/pages/popup.tsx:165
+#: src/webex/pages/popup.tsx:168
#, c-format
msgid "History"
msgstr "Historia"
-#: src/webex/pages/popup.tsx:168
+#: src/webex/pages/popup.tsx:171
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:248
+#: src/webex/pages/popup.tsx:251
#, c-format
msgid "help"
msgstr "hjälp"
-#: src/webex/pages/popup.tsx:253
+#: src/webex/pages/popup.tsx:256
#, fuzzy, c-format
msgid "You have no balance to show. Need some %1$s getting started?"
msgstr ""
"Du har ingen balans att visa. Behöver du\n"
" %1$s att börja?\n"
-#: src/webex/pages/popup.tsx:270
+#: src/webex/pages/popup.tsx:273
#, fuzzy, c-format
msgid "%1$s incoming"
msgstr "%1$s inkommande"
-#: src/webex/pages/popup.tsx:283
+#: src/webex/pages/popup.tsx:286
#, c-format
msgid "%1$s being spent"
msgstr ""
-#: src/webex/pages/popup.tsx:310
+#: src/webex/pages/popup.tsx:313
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:340
#, c-format
msgid "Payback"
msgstr "Återbetalning"
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:341
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr "Återlämna elektroniska pengar till bank konto"
-#: src/webex/pages/popup.tsx:339
+#: src/webex/pages/popup.tsx:342
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:351
+#: src/webex/pages/popup.tsx:354
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:361
+#: src/webex/pages/popup.tsx:364
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:370
+#: src/webex/pages/popup.tsx:373
#, fuzzy, c-format
msgid "Merchant %1$s offered contract %2$s."
msgstr "Säljaren %1$s erbjöd kontrakt %2$s.\n"
-#: src/webex/pages/popup.tsx:381
+#: src/webex/pages/popup.tsx:384
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:391
+#: src/webex/pages/popup.tsx:394
#, c-format
msgid "Paid %1$s to merchant %2$s. %3$s (%4$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:401
+#: src/webex/pages/popup.tsx:404
#, fuzzy, c-format
msgid "Merchant %1$s gave a refund over %2$s."
msgstr "Säljaren %1$sgav en återbetalning på %2$s.\n"
-#: src/webex/pages/popup.tsx:411
+#: src/webex/pages/popup.tsx:414
#, c-format
msgid "tip"
msgstr ""
-#: src/webex/pages/popup.tsx:415
+#: src/webex/pages/popup.tsx:418
#, fuzzy, c-format
msgid "Merchant %1$s gave a %2$s of %3$s."
msgstr "Säljaren %1$sgav en återbetalning på %2$s.\n"
-#: src/webex/pages/popup.tsx:419
+#: src/webex/pages/popup.tsx:422
#, c-format
msgid "You did not accept the tip yet."
msgstr ""
-#: src/webex/pages/popup.tsx:424
+#: src/webex/pages/popup.tsx:427
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:467
+#: src/webex/pages/popup.tsx:470
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:492
+#: src/webex/pages/popup.tsx:495
#, c-format
msgid "Your wallet has no events recorded."
msgstr "plånboken"
diff --git a/src/i18n/taler-wallet-webex.pot b/src/i18n/taler-wallet-webex.pot
index 7f9fc14cf..f097767a8 100644
--- a/src/i18n/taler-wallet-webex.pot
+++ b/src/i18n/taler-wallet-webex.pot
@@ -27,28 +27,38 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/webex/pages/confirm-contract.tsx:76
+#: src/webex/pages/benchmark.tsx:58
+#, c-format
+msgid "Operation"
+msgstr ""
+
+#: src/webex/pages/benchmark.tsx:59
+#, c-format
+msgid "time (ms/op)"
+msgstr ""
+
+#: src/webex/pages/confirm-contract.tsx:78
#, c-format
msgid "show more details"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:90
+#: src/webex/pages/confirm-contract.tsx:92
#, c-format
msgid "Accepted exchanges:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:95
+#: src/webex/pages/confirm-contract.tsx:97
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:217
+#: src/webex/pages/confirm-contract.tsx:219
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:219
+#: src/webex/pages/confirm-contract.tsx:221
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@@ -56,54 +66,54 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:320
+#: src/webex/pages/confirm-contract.tsx:322
#, c-format
msgid "Confirm payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:330
+#: src/webex/pages/confirm-contract.tsx:332
#, c-format
msgid "Submitting payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:341
+#: src/webex/pages/confirm-contract.tsx:343
#, c-format
msgid ""
"You already paid for this, clicking \"Confirm payment\" will not cost money "
"again."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:355
+#: src/webex/pages/confirm-contract.tsx:357
#, c-format
msgid "Aborting payment ..."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:357
+#: src/webex/pages/confirm-contract.tsx:359
#, c-format
msgid "Payment aborted!"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:360
+#: src/webex/pages/confirm-contract.tsx:362
#, c-format
msgid "Retry Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:363
+#: src/webex/pages/confirm-contract.tsx:365
#, c-format
msgid "Abort Payment"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:372
+#: src/webex/pages/confirm-contract.tsx:374
#, c-format
msgid "The merchant %1$s offers you to purchase:"
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:381
+#: src/webex/pages/confirm-contract.tsx:383
#, c-format
msgid "The total price is %1$s (plus %2$s fees)."
msgstr ""
-#: src/webex/pages/confirm-contract.tsx:385
+#: src/webex/pages/confirm-contract.tsx:387
#, c-format
msgid "The total price is %1$s."
msgstr ""
@@ -230,117 +240,117 @@ msgstr ""
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:162
+#: src/webex/pages/popup.tsx:165
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:165
+#: src/webex/pages/popup.tsx:168
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:168
+#: src/webex/pages/popup.tsx:171
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:248
+#: src/webex/pages/popup.tsx:251
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:253
+#: src/webex/pages/popup.tsx:256
#, c-format
msgid "You have no balance to show. Need some %1$s getting started?"
msgstr ""
-#: src/webex/pages/popup.tsx:270
+#: src/webex/pages/popup.tsx:273
#, c-format
msgid "%1$s incoming"
msgstr ""
-#: src/webex/pages/popup.tsx:283
+#: src/webex/pages/popup.tsx:286
#, c-format
msgid "%1$s being spent"
msgstr ""
-#: src/webex/pages/popup.tsx:310
+#: src/webex/pages/popup.tsx:313
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:340
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:341
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:339
+#: src/webex/pages/popup.tsx:342
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:351
+#: src/webex/pages/popup.tsx:354
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:361
+#: src/webex/pages/popup.tsx:364
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:370
+#: src/webex/pages/popup.tsx:373
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:381
+#: src/webex/pages/popup.tsx:384
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgstr ""
-#: src/webex/pages/popup.tsx:391
+#: src/webex/pages/popup.tsx:394
#, c-format
msgid "Paid %1$s to merchant %2$s. %3$s (%4$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:401
+#: src/webex/pages/popup.tsx:404
#, c-format
msgid "Merchant %1$s gave a refund over %2$s."
msgstr ""
-#: src/webex/pages/popup.tsx:411
+#: src/webex/pages/popup.tsx:414
#, c-format
msgid "tip"
msgstr ""
-#: src/webex/pages/popup.tsx:415
+#: src/webex/pages/popup.tsx:418
#, c-format
msgid "Merchant %1$s gave a %2$s of %3$s."
msgstr ""
-#: src/webex/pages/popup.tsx:419
+#: src/webex/pages/popup.tsx:422
#, c-format
msgid "You did not accept the tip yet."
msgstr ""
-#: src/webex/pages/popup.tsx:424
+#: src/webex/pages/popup.tsx:427
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:467
+#: src/webex/pages/popup.tsx:470
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:492
+#: src/webex/pages/popup.tsx:495
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""