#did #ssi #peer #document #service #cargo #uri

did-peer

Implementation of the did:peer method in Rust, uses the ssi crate

10 releases

new 0.2.2 Dec 8, 2024
0.2.1 Nov 12, 2024
0.1.13 Oct 1, 2024
0.1.12 Sep 23, 2024

#513 in Authentication

Download history 662/week @ 2024-09-09 486/week @ 2024-09-16 532/week @ 2024-09-23 204/week @ 2024-09-30 213/week @ 2024-10-07 82/week @ 2024-10-14 5/week @ 2024-10-21 2/week @ 2024-10-28 20/week @ 2024-11-04 128/week @ 2024-11-11 19/week @ 2024-11-18 16/week @ 2024-11-25

184 downloads per month
Used in 5 crates (3 directly)

Apache-2.0

64KB
1K SLoC

Rust 1K SLoC // 0.0% comments JavaScript 223 SLoC // 0.1% comments

did-peer Rust implementation

Only supports did:peer numalgo 0,2 (did:peer:0, did:peer:2)

NOTE: serviceEndpoint.id should be an IRI (e.g. #service). Due to a limitation of the SSI Crate Document type, we must use a URI. Instead of #service we resolve to did:peer:#service

Build a WebAssembly package

Prerequisite: wasm-pack

wasm-pack build --target web --out-dir www/pkg

this places compiled wasm files into the ./www/pkg/ directory.

Serve the website locally, run from the ./www/ directory of the project python3 -m http.server

Website available here

Examples

To run examples cargo run --example <command>

Generate a random did:peer and corresponding DID document cargo run --example generate

Resolve a did:peer to a DID Document cargo run --example resolve <did:peer:2.*>


lib.rs:

DID Peer Method

The did-peer method is a DID method that is designed to be used for peer-to-peer communication. It is based on did:key which can be used for Verification (V) and Encryption (E) purposes. It also supports services (S) which can be used to define endpoints for communication.

Example:

let peer = DIDPeer;
match peer.resolve(DID::new::<str>("did:peer:2.Vabc...").unwrap()).await {
   Ok(res) => {
       println!("DID DOcument: {:#?}", res.document.into_document()),
   },
   Err(e) => {
     println!("Error: {:?}", e);
  }
}

Dependencies

~35–51MB
~1M SLoC