js-waku/modules/_waku_message-encryption.html

11 lines
19 KiB
HTML
Raw Normal View History

2025-11-06 17:00:49 +00:00
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@waku/message-encryption - v0.0.38 | Documentation</title><meta name="description" content="Documentation for Documentation"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">Documentation</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">@waku/message-encryption</a></li></ul><h1>Module @waku/message-encryption - v0.0.38</h1></div><section class="tsd-panel tsd-typography"><h1 id="wakumessage-encryption" class="tsd-anchor-link"><code>@waku/message-encryption</code><a href="#wakumessage-encryption" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1><p>Provide Waku Message Version 1 payload encryption as defined in <a href="https://rfc.vac.dev/spec/26/">26/WAKU2-PAYLOAD</a>.</p>
<h2 id="symmetric-encryption" class="tsd-anchor-link">Symmetric Encryption<a href="#symmetric-encryption" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Symmetric encryption uses a unique key to encrypt and decrypt messages.</p>
<pre><code class="typescript"><span class="hl-8">import</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">createDecoder</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">createEncoder</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">generateSymmetricKey</span><br/><span class="hl-1">} </span><span class="hl-8">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@waku/message-encryption/symmetric&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">// Generate a random key</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-7">key</span><span class="hl-1"> = </span><span class="hl-0">generateSymmetricKey</span><span class="hl-1">();</span><br/><br/><span class="hl-3">// To send messages, create an encoder</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-7">encoder</span><span class="hl-1"> = </span><span class="hl-0">createEncoder</span><span class="hl-1">(</span><span class="hl-5">contentTopic</span><span class="hl-1">, </span><span class="hl-5">key</span><span class="hl-1">);</span><br/><br/><span class="hl-3">// For example</span><br/><span class="hl-5">waku</span><span class="hl-1">.</span><span class="hl-5">lightPush</span><span class="hl-1">.</span><span class="hl-0">push</span><span class="hl-1">(</span><span class="hl-5">encoder</span><span class="hl-1">, { </span><span class="hl-5">payload</span><span class="hl-1"> });</span><br/><br/><span class="hl-3">// To receive messages, create a decoder</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-7">decoder</span><span class="hl-1"> = </span><span class="hl-0">createDecoder</span><span class="hl-1">(</span><span class="hl-5">contentTopic</span><span class="hl-1">, </span><span class="hl-5">key</span><span class="hl-1">);</span><br/><br/><span class="hl-3">// For example</span><br/><span class="hl-8">await</span><span class="hl-1"> </span><span class="hl-5">waku</span><span class="hl-1">.</span><span class="hl-5">store</span><span class="hl-1">.</span><span class="hl-0">queryOrderedCallback</span><span class="hl-1">([</span><span class="hl-5">decoder</span><span class="hl-1">], (</span><span class="hl-5">msg</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">// ...</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
<h2 id="ecies-encryption" class="tsd-anchor-link">ECIES Encryption<a href="#ecies-encryption" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><p>ECIES encryption enables encryption for a public key and decryption using a private key.</p>
<pre><code class="typescript"><span class="hl-8">import</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">createDecoder</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">createEncoder</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">generatePrivateKey</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">getPublicKey</span><br/><span class="hl-1">} </span><span class="hl-8">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@waku/message-encryption/ecies&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">// Generate a random private key</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-7">privateKey</span><span class="hl-1"> = </span><span class="hl-0">generatePrivateKey</span><span class="hl-1">();</span><br/><br/><span class="hl-3">// Keep the private key secure, provide the public key to the sender</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-7">publicKey</span><span class="hl-1"> = </span><span class="hl-0">getPublicKey</span><span class="hl-1">(</span><span class="hl-5">privateKey</span><span class="hl-1">);</span><br/><br/><span class="hl-3">// To send messages, create an encoder</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-7">encoder</span><span class="hl-1"> = </span><span class="hl-0">createEncoder</span><span class="hl-1">(</span><span class="hl-5">contentTopic</span><span class="hl-1">, </span><span class="hl-5">publicKey</span><span class="hl-1">);</span><br/><br/><span class="hl-3">// For example</span><br/><span class="hl-5">waku</span><span class="hl-1">.</span><span class="hl-5">lightPush</span><span class="hl-1">.</span><span class="hl-0">push</span><span class="hl-1">(</span><span class="hl-5">encoder</span><span class="hl-1">, { </span><span class="hl-5">payload</span><span class="hl-1"> });</span><br/><br/><span class="hl-3">// To receive messages, create a decoder</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-7">decoder</span><span class="hl-1"> = </span><span class="hl-0">createDecoder</span><span class="hl-1">(</span><span class="hl-5">contentTopic</span><span class="hl-1">, </span><span class="hl-5">privateKey</span><span class="hl-1">);</span><br/><br/><span class="hl-3">// For example</span><br/><span class="hl-8">await</span><span class="hl-1"> </span><span class="hl-5">waku</span><span class="hl-1">.</span><span class="hl-5">store</span><span class="hl-1">.</span><span class="hl-0">queryOrderedCallback</span><span class="hl-1">([</span><span class="hl-5">decoder</span><span class="hl-1">], (</span><span class="hl-5">msg</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">// ...</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Namespaces"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Namespaces</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="crypto"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Namespace"><use href="../assets/icons.svg#icon-4"></use></svg><a href="_waku_message-encryption.crypto.html">crypto</a><a href="#crypto" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="ecies"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Namespace"><use href="../assets/icons.svg#icon-4"></use></svg><a href="_waku_message-encryption.ecies.html">ecies</a><a href="#ecies" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd><dt class="tsd-member-summary" id="symmetric"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Namespace"><use href="../assets/icons.svg#icon-4"></use></svg><a href="_waku_message-encryption.symmetric.html">symmetric</a><a href="#symmetric" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd></dl></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Classes"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Classes</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="decodedmessage"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="../assets/icons.svg#icon-128"></use></svg><a href="../classes/_waku_message-encryption.DecodedMessage.html">DecodedMessage</a><a href="#decodedmessage" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd></dl></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Variables"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Variables</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="getpublickey"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Variable"><use href="../assets/icons.svg#icon-32"></use></svg><a href="../variables/_waku_message-encryption.getPublicKey.html">getPublicKey</a><a href="#getpublickey" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></span></dt><dd class="tsd-member-summary"></dd></dl></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Functions"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Functions</h2></summary><dl class="tsd-member-summaries"><dt class="tsd-member-summary" id="generateprivatekey"><span class="tsd-member-summary-name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Function"><use href="../assets/icons.svg#icon-64"></use></svg><a href=".