C2SP Manual

The Community Cryptography Specification Project (C2SP) is a project that facilitates the maintenance of cryptography specifications using software development methodologies. In other words, C2SP applies the successful processes of open source software development and maintenance to specification documents.

A small team of stewards maintains the overall project, enforces the C2SP Code of Conduct, assigns new specifications to proposed maintainers, and may intervene in case of maintainer conflict or to replace lapsed maintainers, but they are otherwise not involved in the development of individual specs (in their steward capacity).

Consuming specifications §

Specifications should be linked using their c2sp.org short-links, like https://c2sp.org/<spec-name> and https://c2sp.org/<spec-name>@<version>.

https://c2sp.org/<spec-name> redirects to the latest non-prerelease tagged version of the specification, if any. Otherwise, it redirects to the latest prerelease version, if any. Otherwise, it renders the main branch of the specification.

@latest always renders the latest tagged version of the specification, with the same logic as above (non-prerelease preferred over prerelease).

@main always renders the main branch of the specification.

@<version> contents are immutable.

GitHub URLs should not be considered stable.

License §

All C2SP specifications are licensed under CC BY 4.0.

All code and data in the C2SP repository is licensed under the BSD 1-Clause License (LICENSE-BSD-1-CLAUSE).

Maintaining specifications §

Anyone is welcome to contribute new specifications or collaborate on existing documents, in accordance with the C2SP Code of Conduct and the relevant licenses.

Note that when contributing to a certain specification, its maintainers are responsible for accepting or rejecting changes, and different maintainers may have different preferences for contributions.

New specifications §

New specifications are approved by a quorum of two stewards and assigned to one or more maintainers.

If you wish to maintain a new spec, open an issue with a New spec: prefix. The specification proposal must include:

See #45 for an example.

Formatting §

Specifications are rendered from Markdown in the GitHub flavor, with footnote support.

A YAML front-matter block is required at the top of each specification, with a description field containing a short description of the specification, for the homepage.

After the front-matter, the following warning boilerplate must be included. It will be removed by the c2sp.org renderer.

> [!WARNING]
> This is the editor's copy of this specification.
> For a stable rendered reference, use [c2sp.org/<spec-name>](https://c2sp.org/<spec-name>).

Next, a single top-level heading must be included with the title of the specification.

GitHub permissions §

Each maintainer has access to approve and merge any PR to their specifications (both to the .md file in the root of the repository and to anything under a directory named like the spec), as well as to manage the issue tracker.

Please only take maintainer actions on issues related to your spec.

Maintainers also have write access to the CCTV repository, which is used to store test vectors for specifications.

GitHub commits §

Please use <spec-name>: prefixes in commit messages to indicate which specification the commit is related to.

For example:

age: add new recipient type for hybrid tagged native age

GitHub issues §

Like commits, please use <spec-name>: prefixes in issue titles to indicate which specification the issue is related to.

Tagging new versions §

Versions are tracked as git tags of the form <spec-name>/vX.Y.Z like age/v1.2.3.

To tag a new version, a maintainer creates a file named <spec-name>/.new-tag (e.g. age/.new-tag) with the following contents:

vX.Y.Z
<full 40-character commit hash>

The first line is the version (a valid semver like v1.2.3), and the second line is the full commit hash to tag. The commit must be reachable from the main branch.

Merge this file to main, and a GitHub Action will create the tag <spec-name>/v1.2.3 and remove the .new-tag file.

Updating maintainers §

The set of maintainers for a specification can unanimously request to add or remove maintainers by opening an issue with a Maintainers: prefix. The request will be serviced by a steward, without requiring a quorum.

If unanimous agreement cannot be reached, that can be treated as either a maintainer conflict, or a lapsed maintainer, and the stewards may intervene to resolve the situation.

OIDs §

Specification maintainers may request OID assignments for their specifications under the C2SP Private Enterprise Number (PEN) arc 1.3.6.1.4.1.64829 by opening an issue with a OID: prefix. The request will be serviced by a steward, without requiring a quorum.

Assigned OIDs are recorded in the C2SP OID registry.

Stewarding C2SP §

New specification playbook §

Stewards follow these instructions when creating a new spec, after it was approved per the process described in the "New specifications" section above.

---
description: <!-- insert spec description here -->
---

> [!WARNING]
> This is the editor's copy of this specification.
> For a stable rendered reference, use [c2sp.org/<spec-name>](https://c2sp.org/<spec-name>).

# <!-- insert spec title here -->