Skip to content

Commit

Permalink
deploy: 25d3ab1
Browse files Browse the repository at this point in the history
  • Loading branch information
swcurran committed Nov 29, 2024
0 parents commit 9374e75
Show file tree
Hide file tree
Showing 219 changed files with 17,821 additions and 0 deletions.
Empty file added .nojekyll
Empty file.
9 changes: 9 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Specification License

Specifications in this repository are subject to the W3C Patent Policy (2004), available at http://www.w3.org/Consortium/Patent-Policy-20040205.

# Source Code License

If source code is included in this repository, or for sample or reference code included in the specification itself, that code is subject to the Apache 2.0 license, available at http://www.apache.org/licenses/LICENSE-2.0.html, unless otherwise designated. In the case of any conflict or confusion within this specification repository between the W3C Patent Policy (2004) or other designated license, the terms of the W3C Patent Policy (2004) shall apply.

These terms are inherited from the Decentralized Identity Foundation Project Charter, available at https://github.com/decentralized-identity/org/blob/master/Org%20documents/Membership%20agreements/DIF%20Project%20Charter%20_4.0.2.pdf
154 changes: 154 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# Trust DID Web - A DID Method

The spec repository for did:tdw -- Trust DID Web DID method.

Read the spec: [https://identity.foundation/trustdidweb](https://identity.foundation/trustdidweb)

Proof of concept implementations available:

- Typescript: [https://github.com/bcgov/trustdidweb-ts](https://github.com/bcgov/trustdidweb-ts)
- Python: [https://github.com/bcgov/trustdidweb-py](https://github.com/bcgov/trustdidweb-py)
- Go: [https://github.com/nuts-foundation/trustdidweb-go](https://github.com/nuts-foundation/trustdidweb-go)

## Current Status of the Specification -- updated: 2024-11-29

The current stable version of the specification is **v0.4**. It is the landing page
of the [rendered specification](https://identity.foundation/trustdidweb/) and
has been snapshotted into the `spec-v0.4` folder in this repo. Active work is happening (in
the `spec`) folder on the next version of the specification ([rendered
here](https://identity.foundation/trustdidweb/next)). The editors will announce
when that new version is stable, assigned a version number, and becomes the next
current version of the specification. Updates in that version will included at
least changes in the pre-rotation handling, witnesses, and will include a name
change to the DID Method.

## Abstract

The `did:tdw` (Trust DID Web) method is an enhancement to the
`did:web` protocol, providing a complementary web-based DID method that addresses limitations
of `did:web`. It's features include the following.

- Ongoing publishing of all DID Document (DIDDoc) versions for a DID instead of,
or alongside a `did:web` DID/DIDDoc.
- Uses the same DID-to-HTTPS transformation as `did:web`.
- Provides resolvers the full history of the DID using a verifiable chain of
updates to the DIDDoc from genesis to deactivation.
- A self-certifying identifier (SCID) for the DID that is globally
unique and derived from the initial DIDDoc that enables DID portability, such
as moving the DIDs web location (and so the DID string itself) while retaining
the DID's history.
- DIDDoc updates include a proof signed by the DID Controller(s) *authorized* to
update the DID.
- An optional mechanism for publishing "pre-rotation" keys to prevent loss of
control of the DID in cases where an active private key is compromised.
- An optional mechanism for having collaborating "witnesses"
that approve updates to the DID by the DID Controller before publication.
- DID URL path handling that defaults (but can be overridden) to automatically
resolving `<did>/path/to/file` by using a comparable DID-to-HTTPS translation
as for the DIDDoc.
- A DID URL path `<did>/whois` that defaults to automatically returning (if
published by the DID controller) a Verifiable Presentation containing
Verifiable Credentials with the DID as the `credentialSubject`,
signed by the DID.

Combined, the additional features enable greater trust and security without
compromising the simplicity of `did:web`. The incorporation of the DID Core
compatible "/whois" path, drawing inspiration from the traditional WHOIS
protocol, offers an easy to use, decentralized, trust registry.
This `did:tdw` aims to establish a more trusted and secure web environment by
providing robust verification processes and enabling transparency and
authenticity in the management of decentralized digital identities.

## Contributing to the Specification

Pull requests (PRs) to this repository may be accepted. Each commit of a PR must
have a DCO (Developer Certificate of Origin -
[https://github.com/apps/dco](https://github.com/apps/dco)) sign-off. This can
be done from the command line by adding the `-s` (lower case) option on the `git
commit` command (e.g., `git commit -s -m "Comment about the commit"`).

Rendering and reviewing the spec locally for testing requires `npm` and `node`
installed. Follow these steps:

- Fork and locally clone the repository.
- Install `node` and `npm`.
- Run `npm install` from the root of your local repository.
- Edit the spec documents (in the `/spec` folder).
- Run `npm run render`'
- Use `npm run edit` to interactively edit, render and review the spec.
- Review the resulting `index.html` file in a browser.

The specification is currently in [Spec-Up] format. See the
[Spec-Up Documentation] for a list of Spec-Up features and functionality.

[Spec-Up]: https://github.com/decentralized-identity/spec-up
[Spec-Up Documentation]: https://identity.foundation/spec-up/

## Publishing Previous Spec Versions

[Spec-Up] allows for multiple versions of the spec to be rendered and accessed
on the same site. We use that feature for the `did:tdw` spec to snapshot
previous versions of the spec for reference.

To create a snapshot of a version:

- Make a new folder in the root of the repository for the new version, called `spec-v<ver>`. For example `v0.3`.
- Copy the `spec` folder markdown files from the point of that version into the new folder. If you are doing this process as you are starting a new version, you can just copy the files from the `spec` folder of the main branch. Otherwise, you have to find the last commit of the version and get the files from that point in the GitHub history.
- Update the `specs.json` file to include a new specification:
- Copy the primary spec entry text.
- Paste that text into a new spec entry in the `"specs"` array.
- Update the `"spec_directory"` property to be the name of the new folder you created.
- Update the `"output_path"` property to be `./v<ver>`. For example `"./v0.3"`.
- Append to the `"title"` property the version ` - Version <ver>`, For example ` - Version 0.3`.
- Add a link to the versioned specification in the `Previous Drafts` bullet list, in the `header.md` file in the main spec, so that readers can click on it from the main specification.
- Update the `header.md` file of the new version spec folder (e.g in `spec-v0.3`) to:
- Change the status to `HISTORICAL -- **THIS IS NOT THE CURRENT VERSION OF THE SPECIFICATION**`
- As appropriate, add guidance for readers **WITHOUT** altering the version of the specification itself.
- Remove the `Past Drafts` section and put a relative link back to the current spec -- such as:

```text
**Latest Version:**
- Specification: [https://identity.foundation/trustdidweb/](../)
- Repository: [https://github.com/decentralized-identity/trustdidweb](https://github.com/decentralized-identity/trustdidweb)
```

## Handling Version Transitions

In the lifecycle of the specification, there will be times when the version is
stable, but clarifications may be added, and when new versions are being defined
with breaking changes. We use the Spec-Up feature to have multiple versions
(described above) to enable that, but it gets a little tricky. Notably, we want
the landing page for the specification to **always** be the current version of
the specification, **and** we want all "in progress" work to be to made to the
single, primary specification (the files in the `spec` folder), so that GitHub
holds the full evolution of the specification. To enable that, we adjust as
needed the `"output_path"` in the `specs.json` file to define what version of
the spec is on the specification landing page -- the spec version whose
`"output_path"` is set to `"./"`).

Here's how we do that:

- When the specification is stable, the `spec` folder is the landing page, and
past versions are linked in the `header.md` file as "past versions".
- When a new version of the specification with breaking changes is ready to be worked on:
- Snapshot the stable specification version by creating a new directory (e.g.,
`spec-v0.4`) and copying the files from the `spec` folder into the new
folder
- Create a new entry in the `specs.json` file for the version.
- Set the `output_path` of the new version (e.g., `spec-v0.4`) to be `"./"`,
so that it becomes the landing page.
- Change the `output_path` of the primary `spec` folder entry to `"./next"`.
- Update the `header.json` files in both the new folder and the `spec` folder
to link to one another, adding any notes to help readers understand the
status of the current and next versions of the specification.
- When the "next" version of the specification stabilizes, revert to the
"normal" state of the `spec` folder being the landing page.
- Change the `output_path` of the primary `spec` folder to `"./"`.
- Change the `output_path` of the formerly "current" spec version to a path
that includes its version (e.g., `"./v0.4"`).
- Update the `header.json` files in both the (now past version) folder and the
`spec` folder to link to one another's new `output_path` values, remove any
clarification notes that no longer apply, and make the past version "just
another" past version (e.g., like `spec-v0.3`)
Loading

0 comments on commit 9374e75

Please sign in to comment.