Weave documentation
Weave Identity

Keys and Signatures

Key and signature plumbing in Weave Identity — keypair creation, byte conversion, and signature verification.

Purpose

Identity abstraction with DID-like documents, adapters, keypairs, public keys, signatures, delegation, and resolvers.

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 creates a fresh Ed25519 keypair and a random UUID key ID.
    // The key ID is not a DID or chain registration.
    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(())
}

On this page