Skip to content

Implementation of the Trust DID Web specification in Go

License

Notifications You must be signed in to change notification settings

nuts-foundation/trustdidweb-go

Repository files navigation

trustdidweb-go

Go Reference

This repository contains a highly experimental and unstable implementation of the Trust DID Web DID-Method specification.

Its purpose now is to get some hands-on experience with the specification. If we find it useful, we might continue to develop it further into a more stable implementation.

Do not use this in production!

Example usage

signer, _ := NewSigner("eddsa-jcs-2022")
// create a new log
log := Create("did:tdw:{SCID}:example.com}", signer, nil)
// get the DID Document
doc, _ := log.Document()

// verify a log
if err := log.Verify(); err != nil {
    panic(err)
}

// update the document with a new service
doc["service"] = []interface{}{
    map[string]interface{}{
        "id":              "did:tdw:example.com:123456789abcdefghi#service-1",
        "type":            "Service",
        "serviceEndpoint": "https://example.com/service/1",
    },
}

// Update the log
log, _ = log.Update(LogParams{}, doc, signer)

// verify the log
if err := log.Verify(); err != nil {
    panic(err)
}

// get the updated document:
doc, err := log.Document()

// Marshal the log to a did-log-file which can be hosted on a n well-known endpoint
logFile, _ := log.MarshalText()

// read a log from a did-log-file
newLog := new(DIDLog)
err := newLog.UnmarshalText(logfile)
if err != nil {
    panic(err)
}

TODO

Following things are still missing (not in a particular order):

  • Support for DID portability
  • Better test coverage
  • Add a resolver
  • Generation of a did:web document from a log
  • Cleanup of the code
  • Support for witness signatures

About

Implementation of the Trust DID Web specification in Go

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages