From b64979674dcf68fde5704a49f384fb40563862d8 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Sun, 29 Apr 2018 14:12:25 +0000 Subject: [PATCH] Update Private Group Client --- Private-Group-Client.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Private-Group-Client.md b/Private-Group-Client.md index 26989af..680c3c9 100644 --- a/Private-Group-Client.md +++ b/Private-Group-Client.md @@ -1,10 +1,14 @@ -The private group client is a [BSP client](BSP) that synchronises messages among groups of devices. Only the creator of a group can invite other members. Any member can post messages to a group. Messages are signed by their authors. +The private group client is a [BSP client](BSP) that synchronises messages among groups of devices. It is used in conjunction with the [private group sharing client](private group sharing client). -### Group identifiers +The creator of each private group is the only user who can invite other members. Any member can post messages to a group. Messages are signed by their authors. -The client's identifier is `org.briarproject.briar.privategroup`. +### Identifier -Each private group has its own BSP group. The [group descriptor](BSP#group-identifiers) is a [BDF list](BDF) with three elements: `creator` (list), `name` (string), and `salt` (raw). +The client's identifier is `org.briarproject.briar.privategroup`. The major version is 0. + +### Groups + +Each private group is represented by a separate BSP group. The [group descriptor](BSP#group-identifiers) is a [BDF list](BDF) with three elements: `creator` (list), `name` (string), and `salt` (raw). `creator` is a list with three elements: `formatVersion` (int), `nickname` (string), and `publicKey` (raw). This identifies the user who created the private group. The salt is 32 random bytes, to prevent collisions between private groups with the same creator and name. @@ -16,9 +20,9 @@ Each private group has its own BSP group. The [group descriptor](BSP#group-ident `invite` is null if the member created the private group. Otherwise it is a list with two elements: `inviteTimestamp` (int) and `inviteSignature` (raw). These are copied from the [invitation](Private-Group-Sharing-Client#message-types) sent by the creator. -`inviteSignature` covers a BDF list with three elements: `inviteTimestamp` (int), `contactGroupId` (unique ID), and `privateGroupId` (unique ID). `contactGroupId` is the ID of the group used by the creator and the member for [private group invitations](Private-Group-Sharing-Client#group-identifiers) - it can be calculated from the identities of the creator and the member. The public key from the private group descriptor is used to verify `inviteSignature`. +`inviteSignature` covers a BDF list with three elements: `inviteTimestamp` (int), `contactGroupId` (unique ID), and `privateGroupId` (unique ID). `contactGroupId` is the ID of the group used by the creator and the member for [private group invitations](Private-Group-Sharing-Client#group-identifiers) - it can be calculated from the identities of the creator and the member. The public key from the private group descriptor is used to verify `inviteSignature`. The signature label is `org.briarproject.briar.privategroup.invitation/INVITE`. -`memberSignature` covers a BDF list with four elements: `privateGroupId` (unique ID), `timestamp` (int), `member` (list), and `invite` (list or null). The group ID and timestamp are taken from the message header. The public key from `member` is used to verify `memberSignature`. +`memberSignature` covers a BDF list with four elements: `privateGroupId` (unique ID), `timestamp` (int), `member` (list), and `invite` (list or null). The group ID and timestamp are taken from the message header. The public key from `member` is used to verify `memberSignature`. The signature label is `org.briarproject.briar.privategroup/JOIN`. **1: POST** - The message body is a BDF list with six elements: `messageType` (int), `member` (list), `parentId` (unique ID or null), `previousMessageId` (unique ID), `content` (string), and `signature` (raw). @@ -26,7 +30,7 @@ Each private group has its own BSP group. The [group descriptor](BSP#group-ident `parentId` is the optional ID of a message in the same private group to which this message replies. `previousMessageId` is the ID of the previous join or post message sent by this member to this private group. -The signature covers a BDF list with six elements: `groupId` (unique ID), `timestamp` (int), `member` (list), `parentId` (unique ID or null), `previousMessageId` (unique ID), and `content` (string). The group ID and timestamp are taken from the message header. +The signature covers a BDF list with six elements: `groupId` (unique ID), `timestamp` (int), `member` (list), `parentId` (unique ID or null), `previousMessageId` (unique ID), and `content` (string). The group ID and timestamp are taken from the message header. The public key from `member` is used to verify the signature. The signature label is `org.briarproject.briar.privategroup/POST`. ### Validity policy