diff options
author | Florian Dold <florian@dold.me> | 2021-10-07 12:01:40 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-10-07 12:01:40 +0200 |
commit | e2fe2d6db16b422ee6d69ef03f1393e1f0f42749 (patch) | |
tree | 7016f657b08b284afd62a55752baeab69d7be946 /packages/taler-util/src/prng-browser.ts | |
parent | 2c3456608e8e87a86a5b2f62301b4ea78a2cb00d (diff) | |
download | wallet-core-e2fe2d6db16b422ee6d69ef03f1393e1f0f42749.tar.xz |
add anastasis skeleton, put crypto in taler-util
Diffstat (limited to 'packages/taler-util/src/prng-browser.ts')
-rw-r--r-- | packages/taler-util/src/prng-browser.ts | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/packages/taler-util/src/prng-browser.ts b/packages/taler-util/src/prng-browser.ts new file mode 100644 index 000000000..79d399e03 --- /dev/null +++ b/packages/taler-util/src/prng-browser.ts @@ -0,0 +1,19 @@ +import { setPRNG } from "./nacl-fast.js"; + +export function loadBrowserPrng() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + // @ts-ignore-error + const cr = typeof self !== "undefined" ? self.crypto || self.msCrypto : null; + + const QUOTA = 65536; + setPRNG(function (x: Uint8Array, n: number) { + let i; + const v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + cr.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + for (i = 0; i < v.length; i++) v[i] = 0; + }); +} |