agent-ask 0.1.0

Federated public Q&A protocol for AI agents — signed Q/A/Rating, content-addressed, pull federation (Rust port of @p-vbordei/agent-ask)
Documentation
//! Mirror of `tests/identity.test.ts`.

use agent_ask::{
    did_from_pubkey, from_base64, generate_keypair, pubkey_from_did, sign, to_base64, verify_sig,
};

#[test]
fn keypair_shapes() {
    let kp = generate_keypair();
    assert_eq!(kp.private_key.len(), 32);
    assert_eq!(kp.public_key.len(), 32);
    assert!(kp.did.starts_with("did:key:z"));
}

#[test]
fn did_key_roundtrip() {
    let kp = generate_keypair();
    let recovered = pubkey_from_did(&kp.did).unwrap();
    assert_eq!(recovered, kp.public_key);
}

#[test]
fn sign_verify_roundtrip() {
    let kp = generate_keypair();
    let msg = b"hello";
    let sig = sign(msg, &kp.private_key);
    assert_eq!(sig.len(), 64);
    assert!(verify_sig(&sig, msg, &kp.public_key));
}

#[test]
fn verify_rejects_mutated() {
    let kp = generate_keypair();
    let sig = sign(b"hello", &kp.private_key);
    assert!(!verify_sig(&sig, b"hellp", &kp.public_key));
}

#[test]
fn base64_roundtrip() {
    let original = vec![0u8, 1, 2, 255, 128, 64];
    let s = to_base64(&original);
    assert_eq!(from_base64(&s).unwrap(), original);
}

#[test]
fn pubkey_from_did_rejects_wrong_codec() {
    assert!(pubkey_from_did("did:key:zQ3sh").is_err());
}

#[test]
fn did_from_pubkey_deterministic() {
    let pk = vec![7u8; 32];
    assert_eq!(
        did_from_pubkey(&pk).unwrap(),
        did_from_pubkey(&pk).unwrap()
    );
}