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.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::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(())
}