diff --git a/ForumClient.markdown b/ForumClient.markdown index f0fb7bf..f06cf96 100644 --- a/ForumClient.markdown +++ b/ForumClient.markdown @@ -1,4 +1,6 @@ -ForumClient is a [BSP client](BSP) that synchronises forum posts among groups of devices. Any subscriber to a forum can invite new subscribers, and any subscriber can post to the forum. +ForumClient is a [BSP client](BSP) that synchronises forum posts among groups of devices. Any subscriber to a forum can invite new subscribers, and any subscriber can post to the forum. Posts may be anonymous or signed. + +> Implementation note: We propose to use Ed25519 for signatures. ### Channel identifiers @@ -19,11 +21,13 @@ The descriptor for a forum channel is a list with two elements: `title` (string) **3: POST** - The content is a list with three elements: `author` (list or null), `content` (list), and `signature` (raw or null). -If `author` is null, the post is anonymous and `signature` must also be null. Otherwise `author` is a list with two elements: `name` (string) and `public_key` (raw). +`author` is a list with two elements: `name` (string) and `public_key` (raw). -`content` is a list with three elements: `parent_id` (raw or null), `body` (string), and `attachments` (dictionary or null). `parent_id` is the identifier of a post to which this is a response. Each key in `attachments` is the name of an attachment, and the value is a list with two elements: `mime_type` (string) and `message_id` (raw). +`content` is a list with three elements: `parent_id` (raw or null), `subject` (string), `body` (string), and `attachments` (dictionary or null). `parent_id` is the identifier of a post to which this is a response. Each key in `attachments` is the name of an attachment, and the value is a list with two elements: `mime_type` (string) and `message_id` (raw). -If `signature` is null, the post is anonymous and `author` must also be null. Otherwise `signature` is a signature over a list with four elements: `channel_id` (raw), `timestamp` (int), `author` (list), and `content` (list). `channel_id` and `timestamp` are taken from the [message header](BSP#message-format). `author` and `content` are described above. +`signature` is a signature over a list with five elements: `channel_id` (raw), `salt` (raw), `timestamp` (int), `author` (list), and `content` (list). `channel_id`, `salt` and `timestamp` are taken from the [message header](BSP#message-format). `author` and `content` are described above. + +If `author` and `signature` are null, the post is anonymous. **4: ATTACHMENT** - The content is raw data.