From 931a414a3c06a85174038f344eff7c9dedd186f3 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 1 Sep 2021 12:48:51 +1000 Subject: [PATCH] Allow passing decryption keys in hex string format --- CHANGELOG.md | 1 + src/lib/waku_relay/index.ts | 11 +++++++---- src/lib/waku_store/index.ts | 15 ++++++++++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3f12b8a2d..9d24360ca7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Examples (eth-pm): Encrypt Public Key Messages using symmetric encryption. - Guides: Encrypt messages using Waku Message Version 1. +- Allow passing decryption keys in hex string format. ### Changed - **Breaking**: Moved `startTime` and `endTime` for history queries to a `timeFilter` property as both or neither must be passed; passing only one parameter is not supported. diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index 5844e4f211..440640ee99 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -17,6 +17,7 @@ import { InMessage } from 'libp2p-interfaces/src/pubsub'; import { SignaturePolicy } from 'libp2p-interfaces/src/pubsub/signature-policy'; import PeerId from 'peer-id'; +import { hexToBuf } from '../utils'; import { CreateOptions, DefaultPubSubTopic } from '../waku'; import { WakuMessage } from '../waku_message'; @@ -128,17 +129,19 @@ export class WakuRelay extends Gossipsub { * of messages received on the given content topic. This can either be a * private key for asymmetric encryption or a symmetric key. Waku relay will * attempt to decrypt messages using both methods. + * Strings must be in hex format. */ - addDecryptionKey(privateKey: Uint8Array): void { - this.decryptionKeys.add(privateKey); + addDecryptionKey(key: Uint8Array | string): void { + this.decryptionKeys.add(hexToBuf(key)); } /** * Delete a decryption key to attempt decryption of messages received on the * given content topic. + * Strings must be in hex format. */ - deleteDecryptionKey(privateKey: Uint8Array): void { - this.decryptionKeys.delete(privateKey); + deleteDecryptionKey(key: Uint8Array | string): void { + this.decryptionKeys.delete(hexToBuf(key)); } /** diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 43b93aa0cc..40fadb83e5 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -8,6 +8,7 @@ import PeerId from 'peer-id'; import { HistoryResponse_Error } from '../../proto/waku/v2/store'; import { getPeersForProtocol, selectRandomPeer } from '../select_peer'; +import { hexToBuf } from '../utils'; import { DefaultPubSubTopic } from '../waku'; import { WakuMessage } from '../waku_message'; @@ -43,7 +44,7 @@ export interface QueryOptions { pageSize?: number; timeFilter?: TimeFilter; callback?: (messages: WakuMessage[]) => void; - decryptionKeys?: Uint8Array[]; + decryptionKeys?: Array; } /** @@ -114,6 +115,13 @@ export class WakuStore { const connection = this.libp2p.connectionManager.get(peer.id); if (!connection) throw 'Failed to get a connection to the peer'; + const decryptionKeys: Uint8Array[] = []; + if (opts.decryptionKeys) { + opts.decryptionKeys.forEach((key) => { + decryptionKeys.push(hexToBuf(key)); + }); + } + const messages: WakuMessage[] = []; let cursor = undefined; while (true) { @@ -154,10 +162,7 @@ export class WakuStore { const pageMessages: WakuMessage[] = []; await Promise.all( response.messages.map(async (protoMsg) => { - const msg = await WakuMessage.decodeProto( - protoMsg, - opts.decryptionKeys - ); + const msg = await WakuMessage.decodeProto(protoMsg, decryptionKeys); if (msg) { messages.push(msg);