# Private Groups | 2019-11-07
## simplest thing
mix sends notification to group: bbq is cancelled. pure broadcasts, no tangles.
`sbot.privateGroups.add({key, id})`
`sbot.backlinks.read(query)`
things we're not doing:
- optimisations like "only try keys from people I'm in groups with"
- possible future: `sbot.privateGroups.add({key, feeds: [id...]})`
- indexing past messages
```
content: {
type: 'gathering',
name: 'private group call',
startTime: {
epoch: 1573074104361
},
// user doesn't need to know this
tangles: {
group: { root, previous },
gathering: { root, previous }
}
}
```
what features does adding someone to a key look like
```
content: {
type: 'group/update',
writers: {
<@dominicFeed>: 1,
<@keksFeed>: 1
},
tangles: {
group: { root, previous },
membership: { root, previous }
}
}
```
// agree ^this is more sugary than needed immediately
```
content: {
type: 'entrust',
key: <groupKey.base64>
tangles: {
group: {root, previous}
},
recps: [mixFeed, group.id] // << NOTE group.id
}
```
// ^this one is a minimal entrust message for a group.
**Properties**:
- `tangles.group` is present so as a new person I can traverse (up the tangle) the history of things I need to decrypt
- `recps` includes the person being added and the group, meaning
- mix receives the messages about being added to the group
- the group received a message seeing that mix has read-access
- // this is polite / transparent :heart:
- `ssb-server` now needs to know when it sees `group.id` to encrypt to that group as well
- what `group.id` is still needs determining:
- could be a hash of the group's root %messageId ?
- could be a hash of the group's private key?
- some past prototyping https://github.com/dominictarr/ssb-private-groups/blob/master/index.js#L65
- if id is @feedId, just use that
- if it's a @messageId (or unique group.id), check if it's a valid group id and then look up / derive the encryption key for that group and use that for encryption
publishing fails if:
- any recps are duds
- if recps === []
Q? How how does encryption work when there's a feedId + a group.id ?
- plan to change the format to box2
- box2 is specified? yes
- it will use a slot
Q? does this work for multiFeed.id just the same?
- mix : we would want asymmetric keys for this
### Parts of the system
High
-
- backlinks index
Low
---
## simple thing (simplest ++ / v2)
how to solve the "I received the key later" problem
- could do this in backlinks.read or in the backlinks indexing
- could tangle all messages for a group