aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-07-13 14:10:38 +0200
committerFlorian Dold <florian@dold.me>2021-07-13 14:10:38 +0200
commite2287d6d5ba01868263d8a08d45ddc60b0ab91fb (patch)
tree3f0c3ed688382a27991b4cdeaaf38680b30599a5
parent50bbaa40db578ea9261099a9da5a2743ff31197b (diff)
make TextEncoder/Decoder creation lazy for polyfill to work
-rw-r--r--packages/taler-wallet-cli/src/index.ts2
-rw-r--r--packages/taler-wallet-core/src/crypto/talerCrypto.ts26
2 files changed, 15 insertions, 13 deletions
diff --git a/packages/taler-wallet-cli/src/index.ts b/packages/taler-wallet-cli/src/index.ts
index 091ca2ff8..ddcf6a645 100644
--- a/packages/taler-wallet-cli/src/index.ts
+++ b/packages/taler-wallet-cli/src/index.ts
@@ -19,7 +19,6 @@
*/
import os from "os";
import fs from "fs";
-import * as clk from "./clk.js";
import { deepStrictEqual } from "assert";
// Polyfill for encoding which isn't present globally in older nodejs versions
import { TextEncoder, TextDecoder } from "util";
@@ -27,6 +26,7 @@ import { TextEncoder, TextDecoder } from "util";
global.TextEncoder = TextEncoder;
// @ts-ignore
global.TextDecoder = TextDecoder;
+import * as clk from "./clk.js";
import { getTestInfo, runTests } from "./integrationtests/testrunner.js";
import {
PreparePayResultType,
diff --git a/packages/taler-wallet-core/src/crypto/talerCrypto.ts b/packages/taler-wallet-core/src/crypto/talerCrypto.ts
index 5739bc464..7e08d2051 100644
--- a/packages/taler-wallet-core/src/crypto/talerCrypto.ts
+++ b/packages/taler-wallet-core/src/crypto/talerCrypto.ts
@@ -18,22 +18,13 @@
* Native implementation of GNU Taler crypto.
*/
+/**
+ * Imports.
+ */
import * as nacl from "./primitives/nacl-fast.js";
import bigint from "big-integer";
import { kdf } from "./primitives/kdf.js";
-// @ts-ignore
-const decoder = new TextDecoder();
-if (typeof decoder !== "object") {
- throw Error("FATAL: TextDecoder not available");
-}
-
-// @ts-ignore
-const encoder = new TextEncoder();
-if (typeof encoder !== "object") {
- throw Error("FATAL: TextEncoder not available");
-}
-
export function getRandomBytes(n: number): Uint8Array {
return nacl.randomBytes(n);
}
@@ -203,11 +194,22 @@ function kdfMod(
}
}
+let encoder: any;
+let decoder: any;
+
export function stringToBytes(s: string): Uint8Array {
+ if (!encoder) {
+ // @ts-ignore
+ encoder = new TextEncoder();
+ }
return encoder.encode(s);
}
export function bytesToString(b: Uint8Array): string {
+ if (!decoder) {
+ // @ts-ignore
+ decoder = new TextDecoder();
+ }
return decoder.decode(b);
}