WeaveDocs
Weave Identity

Keys and Signatures

Key and signature plumbing in Weave Identity — keypair lifecycle, signature verification, and rotation flows.

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.

Primary types to know

  • DelegationCertificate — adapters/weave-identity/src/ed25519_adapter.rs
  • Ed25519Adapter — adapters/weave-identity/src/ed25519_adapter.rs
  • Identity — adapters/weave-identity/src/identity.rs
  • IdentityDocument — adapters/weave-identity/src/resolver.rs
  • KeyPair — adapters/weave-identity/src/keypair.rs
  • PublicKey — adapters/weave-identity/src/keypair.rs
  • Signature — adapters/weave-identity/src/signature.rs
  • VerificationMethod — adapters/weave-identity/src/resolver.rs
  • IdentityError — adapters/weave-identity/src/error.rs
  • IdentityType — adapters/weave-identity/src/identity.rs
  • IdentityResolver — adapters/weave-identity/src/resolver.rs
  • WeaveIdentityAdapter — adapters/weave-identity/src/adapter.rs

Example shape

use weave_identity::keypair::KeyPair;
use weave_identity::signature::Signature;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // KeyPair::generate mints a fresh Ed25519 keypair; the id is a deterministic
    // DID derived from the public key.
    let kp = KeyPair::generate()?;

    let payload = b"weave audit block";
    let sig = kp.sign(payload)?;
    assert!(kp.verify(payload, &sig)?);

    // Signature wraps Ed25519 signatures with codec conversions for storage.
    let wire = Signature::from_ed25519(&sig);
    let bytes = wire.to_bytes();
    assert_eq!(bytes.len(), 64);

    println!(
        "kp_id={} pubkey_len={} signature_bytes={}",
        kp.id(),
        kp.public_key().as_bytes().len(),
        bytes.len(),
    );
    Ok(())
}