Skip to content

baseid-did

The DID crate implements creation and resolution for did:key, did:web, did:jwk, did:peer, and did:webvh methods.

[dependencies]
baseid-did = "0.1.0-alpha.1"
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);
use baseid_did::resolve;
// did:key resolves locally
let doc = resolve("did:key:z6MkhaXg...").await?;
// did:web fetches over HTTPS
let doc = resolve("did:web:example.com").await?;
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>,
}

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 endpoint
let 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}");

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:webvh
let result = DidWebvhResolver.resolve("did:webvh:example.com:abc123").await?;
MethodCreateResolveKey Types
did:keyYesYesEd25519, P-256, P-384, secp256k1
did:webYesYesAll
did:jwkYesYesAll
did:peerYes (0/2/3/4)YesEd25519, P-256
did:webvhYesYesAll
use baseid_did::extract_public_key;
let public_key = extract_public_key(&doc, &doc.verification_method[0].id)?;

Full API Reference