Meadowcap

  1. Overview
    1. Parameters
      1. Capabilities
        1. Communal Namespaces

        Status: Candidate (as of 17.01.2024)

        Meadowcap is a capability system for use with Willow. In this specification, we assume familiarity with the Willow data model.

        Overview

        alj: TODO

        communal namespace owned namespace

        Parameters

        Like the Willow data model, Meadowcap is generic and needs to be instantiated with concrete choices for the parameters we describe in this section.

        Meadowcap makes heavy use of digital signature schemes; it assumes that Willow uses public keys as NamespaceIds and SubspaceIds.

        A signature scheme consists of three algorithms:

        An instantiation of Meadowcap must define concrete choices of the following parameters:

        A Meadowcap instantiation is compatible with Willow ifalj: TODO defref styling is broken in the preview of campatible for some reason

        Throughout the Meadowcap specification, we use these pairs of parameters interchangeably.

        Capabilities

        A neat piece of paper, styled like an admission ticket, with a heading saying "This Capability Grants...". The heading is followed by four sections. The first section states the receiver as "Alfie", the second section states the granting of "read access", the third section gives a time range of "all messages from last week", and, finally, a large stamp mark simply says "valid".Intuitively, a capability should be some piece of data that answers four questions: To whom does it grant access? Does it grant read or write access? For which Entries does it grant access? And finally, is it valid or a forgery?

        We define three types that provide these semantics: one for implementing communal namespaces, one for implementing owned namespaces, and one for combining both.

        Communal Namespaces

        A capability that implements communal namespaces
         
        The kind of access this grants.
         
        The namespace in which this grants access.
         
        alj: fix marginale renderingRemember that we assume SubspaceId and UserPublicKey to be the same types.The subspace for which and to whom this grants access.
         
        Successive authorisations of new UserPublicKey, each restricted to a particular Area.
        }

        The access mode of a CommunalCapability cap is communal_mode_cap.access_mode.

        The receiver of a CommunalCapability is the user to whom it grants access. Formally, the receiver is the final UserPublicKey in the delegations, or the user_key if the delegations are empty.

        The granted namespace of a CommunalCapability is the namespace for which it grants access. Formally, the granted namespace of a CommunalCapability is its namespace_key.

        The granted area of a CommunalCapability is the Area for which it grants access. Formally, the granted area of a CommunalCapability is the final Area in the delegations, or the subspace area of the user_key if the delegations are empty.

        Validity governs how CommunalCapabilities can be delegated and restricted. We define validity based on the number of delegations.

        Every CommunalCapability with zero delegations is valid.

        For a CommunalCapability cap with more than zero delegations, let TODO

        A Meadowcap emblem: A stylised drawing of two meadowcaps (a type of mushroom), next to a hand-lettered cursive of the word "Meadowcap".