From b70f7c5a9564908092447a0aafa6f29f2269878c Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Fri, 9 Jul 2021 15:48:25 +1000 Subject: [PATCH] Use DOM random generator if available --- src/lib/waku_message/version_1.ts | 23 +++++++++++++++++++---- tsconfig.json | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/lib/waku_message/version_1.ts b/src/lib/waku_message/version_1.ts index 0749fbb68e..96c314aac3 100644 --- a/src/lib/waku_message/version_1.ts +++ b/src/lib/waku_message/version_1.ts @@ -1,5 +1,4 @@ import { Buffer } from 'buffer'; -import { randomBytes } from 'crypto'; import * as crypto from 'crypto'; import ecies from 'ecies-parity'; @@ -127,7 +126,7 @@ export async function decryptAsymmetric( * Generate a new private key */ export function generatePrivateKey(): Uint8Array { - return crypto.randomBytes(32); + return randomBytes(32); } /** @@ -161,12 +160,18 @@ function getSizeOfPayloadSizeField(payload: Uint8Array): number { return s; } -function validateDataIntegrity(value: Buffer, expectedSize: number): boolean { +function validateDataIntegrity( + value: Uint8Array, + expectedSize: number +): boolean { if (value.length !== expectedSize) { return false; } - if (expectedSize > 3 && value.equals(Buffer.alloc(value.length))) { + if ( + expectedSize > 3 && + Buffer.from(value).equals(Buffer.alloc(value.length)) + ) { return false; } @@ -193,3 +198,13 @@ function ecRecoverPubKey(messageHash: string, signature: Buffer): Uint8Array { false ); } + +function randomBytes(length: number): Uint8Array { + if (typeof window !== 'undefined' && window && window.crypto) { + const array = new Uint8Array(length); + window.crypto.getRandomValues(array); + return array; + } else { + return crypto.randomBytes(length); + } +} diff --git a/tsconfig.json b/tsconfig.json index 3edb3bcf13..544cde09a7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -41,7 +41,7 @@ // "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, // "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */, - "lib": ["es2017"], + "lib": ["es2017", "dom"], "types": ["node", "mocha"], "typeRoots": ["node_modules/@types", "src/types"] },