From c77b74c10ce8741ba5f015c8baea6179caf3eafd Mon Sep 17 00:00:00 2001 From: Nicholas Molnar Date: Mon, 16 May 2022 08:57:26 -0700 Subject: [PATCH] Add/delete decryption keys --- src/lib/waku.ts | 2 ++ src/lib/waku_filter/index.ts | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 99fb6c9dc6..b38573487f 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -310,6 +310,7 @@ export class Waku { ): void { this.relay.addDecryptionKey(key, options); this.store.addDecryptionKey(key, options); + this.filter.addDecryptionKey(key, options); } /** @@ -321,6 +322,7 @@ export class Waku { deleteDecryptionKey(key: Uint8Array | string): void { this.relay.deleteDecryptionKey(key); this.store.deleteDecryptionKey(key); + this.filter.deleteDecryptionKey(key); } /** diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index 94548af4a7..939f05c8d7 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -6,6 +6,7 @@ import { Peer, PeerId } from "libp2p/src/peer-store"; import { WakuMessage as WakuMessageProto } from "../../proto/waku/v2/message"; import { getPeersForProtocol, selectRandomPeer } from "../select_peer"; +import { hexToBytes } from "../utils"; import { DefaultPubSubTopic } from "../waku"; import { DecryptionMethod, WakuMessage } from "../waku_message/index"; @@ -170,6 +171,30 @@ export class WakuFilter { return peer; } + /** + * Register a decryption key to attempt decryption of messages received in any + * subsequent [[subscribe]] call. This can either be a private key for + * asymmetric encryption or a symmetric key. [[WakuStore]] will attempt to + * decrypt messages using both methods. + * + * Strings must be in hex format. + */ + addDecryptionKey( + key: Uint8Array | string, + options?: { method?: DecryptionMethod; contentTopics?: string[] } + ): void { + this.decryptionKeys.set(hexToBytes(key), options ?? {}); + } + + /**cursorV2Beta4 + * Delete a decryption key so that it cannot be used in future [[subscribe]] calls + * + * Strings must be in hex format. + */ + deleteDecryptionKey(key: Uint8Array | string): void { + this.decryptionKeys.delete(hexToBytes(key)); + } + get peers(): AsyncIterable { return getPeersForProtocol(this.libp2p, [FilterCodec]); }