From d60412c81f07f1a5bad2caf0d7523ae32eaa855b Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 13 Sep 2024 16:24:45 -0400 Subject: [PATCH] breaks the `rp` keys into multiple tags instead of a single list offers guidance for multiple `prp` tags to be a logical OR --- 76.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/76.md b/76.md index 10f7cd4d..3a49700c 100644 --- a/76.md +++ b/76.md @@ -12,26 +12,28 @@ Events with an `rp` or `prp` require AUTH to be downloaded. ## Read Permission -The `rp` tag accepts a list of pubkeys +The `rp` tag takes a pubkey. Multiple `rp` tags represent a logical OR. ```json -["rp", "", "", ""] +["rp", ""] +["rp", ""] +["rp", ""] ``` Relays MUST check if the authed user is one of the keys in the `rp` before sending the event to the client. ## Probabilistic Read Permissions -Probabilistic permissions use bloom filters that include a set of pubkeys. They are represented by a colon-separated value with: -1. the size of the bit array +Probabilistic permissions use bloom filters of a set of authorized pubkeys. They are represented by a colon-separated value with: +1. the number of bits in the bit array 2. the number of hashing rounds used by the filter 3. the bit array in Base64. ```json -["prp", "::"] +["prp", "::"] ``` -Bloom filters MUST use `SHA-256` functions of the key + iterating index as the pseudocode below: +Bloom filters MUST use `SHA256` functions of the key + iterating index as the pseudocode below demonstrates: ```js class BloomFilter(size: Int, rounds: Int, buffer: ByteArray) { @@ -74,6 +76,8 @@ class BloomFilter(size: Int, rounds: Int, buffer: ByteArray) { Relays MUST check if the authed user is in the filter before returning the event. +Multiple `prp` tags represent a logical OR. + ### Test cases The filter below has 100 bits, with 10 rounds of hashes that should be able to match 10,000,000 keys without a single false positive.