Identity Documents
DID-like identity documents in Weave Identity: verification methods, services, and capability bindings.
Purpose
Identity abstraction with DID-like documents, adapters, keypairs, public keys, signatures, delegation, and resolvers.
This page follows the real source shape for Weave Identity and explains the workflow a developer is likely to use first.
Trust contract
Document which keys authorize the operation, what is signed, what is encrypted, what is deliberately public, and which policy hook can deny the call. Security examples should use deterministic test vectors where possible.
Identity revocation lives outside Weave. The local document is whatever the adapter resolves; for time-bound revocation, consult the chain-side identity store (e.g., Sigil MARS) before trusting a long-lived signature.
Primary types to know
DelegationCertificate— adapters/weave-identity/src/ed25519_adapter.rsEd25519Adapter— adapters/weave-identity/src/ed25519_adapter.rsIdentity— adapters/weave-identity/src/identity.rsIdentityDocument— adapters/weave-identity/src/resolver.rsKeyPair— adapters/weave-identity/src/keypair.rsPublicKey— adapters/weave-identity/src/keypair.rsSignature— adapters/weave-identity/src/signature.rsVerificationMethod— adapters/weave-identity/src/resolver.rsIdentityError— adapters/weave-identity/src/error.rsIdentityType— adapters/weave-identity/src/identity.rsIdentityResolver— adapters/weave-identity/src/resolver.rsWeaveIdentityAdapter— adapters/weave-identity/src/adapter.rs
Example shape
use weave_identity::resolver::{IdentityDocument, VerificationMethod};
use weave_identity::{Identity, PublicKey};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let owner = Identity::agent_from_public_key(vec![1u8; 32], Some("alice"))?;
// IdentityDocument is the DID document surface: an Identity plus a list of
// VerificationMethods scoped by purpose ("assertionMethod", "keyAgreement").
let mut doc = IdentityDocument::new(owner.clone());
let public_key = PublicKey::new(vec![2u8; 32]);
let method = VerificationMethod::new(format!("{}#key-0", owner.id()), public_key)
.with_purpose("assertionMethod")
.with_controller(owner.clone());
doc.add_verification_method(method);
let methods = doc.verification_methods_for_purpose("assertionMethod");
let lookup = doc.verification_method_by_id(&format!("{}#key-0", owner.id()));
println!(
"did={} verification_methods={} resolved_by_id={}",
owner.id(),
methods.len(),
lookup.is_some(),
);
Ok(())
}