Skip to content
/ C2SP Public

Community Cryptography Specification Project

Notifications You must be signed in to change notification settings


Repository files navigation

Community Cryptography Specification Project


What if we wrote specifications like we write software? C2SP is an experiment to create usable specifications by following common software methodologies, like semantic versioning.


C2SP maintains a collection of specification documents. Each specification is small and focused, with a limited scope.

Every specification has an assigned maintainer, who is responsible for reviewing and accepting changes to that specification.

There is a team of stewards that maintains the general repository, assigns and removes maintainers for specifications, and is the final decision level. Individual maintainers manage development of specifications on a day-to-day basis.


All specifications use Semantic Versioning. Since this is normally intended for software, we adapt it to our specifications with the following semantics:

  • 0.Y.Z indicates draft specifications.
    • Bump the version as often as you need!
    • Always bump the minor version on any material change.
  • 1.Y.Z indicates "final" specifications, but these are not set in stone.
    • At this point a specification's meaning should not change.
    • Bump the patch version when making changes to the text of a specification (to improve it, or fix errata).
    • An extension could be defined in a separate specification, and the "main" specification's minor version would be incremented to include the extension.
  • 2.Y.Z and above will ideally never be needed! But if we make a mistake in a finalised specification, this would be the pathway to recovery.
    • Otherwise these are identical to 1.Y.Z.


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

Adding a new specification

New specifications are approved by the stewards and assigned to a maintainer.

If you wish to maintain a new spec, open an issue with a New spec: prefix.

Pick a meaningful, short name for the specification. This will become part of its URL (e.g.

Updating an existing specification

You can either clone this repository and make changes locally, or you can edit a specification directly in the GitHub UI. In either case, once you are finished, open a pull request with your proposed updates.


All specifications in this repository are licensed under CC BY 4.0 (

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


Community Cryptography Specification Project


Code of conduct





No releases published