baseid-did
The DID crate implements creation and resolution for did:key, did:web, did:jwk, did:peer, and did:webvh methods.
Installation
Section titled “Installation”[dependencies]baseid-did = "0.1.0-alpha.1"Create a DID
Section titled “Create a DID”use baseid_core::types::KeyType;use baseid_crypto::KeyPair;use baseid_did::DidKeyResolver;
let kp = KeyPair::generate(KeyType::Ed25519)?;let doc = DidKeyResolver::create(&kp.public)?;println!("DID: {}", doc.id);Resolve a DID
Section titled “Resolve a DID”use baseid_did::resolve;
// did:key resolves locallylet doc = resolve("did:key:z6MkhaXg...").await?;
// did:web fetches over HTTPSlet doc = resolve("did:web:example.com").await?;DID Document Structure
Section titled “DID Document Structure”pub struct DidDocument { pub id: String, pub verification_method: Vec<VerificationMethod>, pub authentication: Vec<String>, pub assertion_method: Vec<String>, pub key_agreement: Vec<String>,}did:peer
Section titled “did:peer”Create and resolve peer DIDs for direct DIDComm connections. Supports numalgo 0, 2, 3, and 4.
use baseid_crypto::KeyPair;use baseid_core::types::KeyType;use baseid_did::DidPeerResolver;use serde_json::json;
let kp = KeyPair::generate(KeyType::Ed25519)?;
// Create a did:peer:2 with a verification key and service endpointlet services = vec![json!({ "type": "DIDCommMessaging", "serviceEndpoint": "https://example.com/didcomm", "accept": ["didcomm/v2"]})];let (did, doc) = DidPeerResolver::create_peer_2( &[('V', &kp.public)], &services,)?;println!("Peer DID: {did}");did:webvh (formerly did:tdw)
Section titled “did:webvh (formerly did:tdw)”Trust DID Web with verifiable history. Maintains a hash-linked log of DID document updates for full auditability.
use baseid_did::{DidWebvhResolver, WebvhParameters};
// Resolve an existing did:webvhlet result = DidWebvhResolver.resolve("did:webvh:example.com:abc123").await?;Supported Methods
Section titled “Supported Methods”| Method | Create | Resolve | Key Types |
|---|---|---|---|
did:key | Yes | Yes | Ed25519, P-256, P-384, secp256k1 |
did:web | Yes | Yes | All |
did:jwk | Yes | Yes | All |
did:peer | Yes (0/2/3/4) | Yes | Ed25519, P-256 |
did:webvh | Yes | Yes | All |
Extract Public Key
Section titled “Extract Public Key”use baseid_did::extract_public_key;
let public_key = extract_public_key(&doc, &doc.verification_method[0].id)?;