cryspen / cryspen/mls-partial

Negotiation mechanism for partial MLS

Open
#11 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
F*
Stars
0
Forks
2
PR merge metrics
No merged PRs in 30d

Description

The draft currently contains this statement

> This document does not define who generates annotated messages from the base MLS messages, or how this entity learns which clients are partial or full clients.

This is easily solved. We define the following new structs, and an extension type called `partial_mls`. When`partial_mls` is present in the `LeafNode.capabilities.extensions` vector, it contains a `PartialMlsCap` struct, which indicates that the client supports the level of client support for Partial MLS. When `partial_mls` is present in the `GroupContext.required_capabilities.extension_types` vector, it contains a `PartialMlsGroupConfig` struct, which indicates explicit group configuration for Partial MLS.

- `no_partial_clients` allows an explicit policy prohibition of Partial MLS even when all/most member clients support `full_mls_annotations`. Clients must have a `PartialMlsCap` value of `reserved` or `full_mls_annotations`.
- `ds annotates` indicates explicitly that the DS will annotate for any Partial MLS client. Unfortunately this means that full MLS client that are oblivious to the extension would not be able to join. Clients can have any `PartialMlsCap` value.
- `full_clients_annotate` indicates that all full clients MUST annotate. The `PartialMlsCap` value can be `partial_only` or `full_mls_annotations`.
- `either_annotates` indicates that the DS will allow full clients to annotate, and will annotate to partial clients if a full client does not. Clients can have any `PartialMlsCap` value.

```
enum {
reserved(0), /* full MLS only */
partial_only(1), /* only supports partial MLS */
full_mls_annotations(2), /* full MLS client that can send partial MLS annotations */
(255)
} PartialMlsCapEnum;

struct {
PartialMlsCapEnum member_capability;
} PartialMlsCap;

enum {
no_partial_clients(0), /* only use full MLS */
ds_annotates(1), /* The DS is responsible for annotating for partial clients */
full_clients_annotate(2), /* full clients are responsible for annotation for partial clients */
either_annotates(3), /* full clients may annotate. if they do not, the DS will annotate */
(255)
} PartialMlsGroupConfigEnum;

struct {
PartialMlsGroupConfigEnum group_config;
} PartialMlsGroupConfig;
```

When `partial_mls` is not present in the `GroupContext.required_capabilities.extension_types` vector, a partial MLS client needs to be configured out-of-band to understand that the DS will send annotations before using the extensions.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.