Skip to main content

Crate atproto_record

Crate atproto_record 

Source
Expand description

Cryptographic signature operations and utilities for AT Protocol records.

This library provides comprehensive functionality for working with AT Protocol records, including cryptographic signature creation and verification, AT-URI parsing, and datetime serialization utilities. Built on IPLD DAG-CBOR for deterministic encoding with support for P-256, P-384, and K-256 elliptic curve cryptography.

§Main Features

  • Signature Operations: Create and verify cryptographic signatures following the community.lexicon.attestation.signature specification
  • AT-URI Support: Parse and validate AT Protocol URIs for record identification
  • DateTime Utilities: RFC 3339 datetime serialization with millisecond precision
  • Type-Safe Errors: Structured error types following project conventions

§Example Usage

use atproto_record::attestation;
use atproto_identity::key::{identify_key, sign, to_public};
use base64::engine::general_purpose::STANDARD;
use serde_json::json;

let private_key = identify_key("did:key:zPrivate...")?;
let public_key = to_public(&private_key)?;
let key_reference = format!("{}", &public_key);

let record = json!({
    "$type": "app.example.record",
    "text": "Hello from attestation helpers!"
});

let sig_metadata = json!({
    "$type": "com.example.inlineSignature",
    "key": &key_reference,
    "purpose": "demo"
});

let signing_record = attestation::prepare_signing_record(&record, &sig_metadata)?;
let cid = attestation::create_cid(&signing_record)?;
let signature_bytes = sign(&private_key, &cid.to_bytes())?;

let inline_attestation = json!({
    "$type": "com.example.inlineSignature",
   "key": key_reference,
    "purpose": "demo",
    "signature": {"$bytes": STANDARD.encode(signature_bytes)}
});

let signed = attestation::create_inline_attestation_reference(&record, &inline_attestation)?;
let reports = tokio_test::block_on(async {
    attestation::verify_all_signatures(&signed, None).await
})?;
assert!(matches!(reports[0].status, attestation::VerificationStatus::Valid { .. }));

Modules§

aturi
AT-URI parsing and validation.
bytes
Byte array serialization utilities.
datetime
DateTime serialization utilities.
errors
Structured error types for record operations.
lexicon
AT Protocol lexicon type definitions.
tid
Timestamp Identifier (TID) generation and parsing.
typed
Generic wrapper for handling lexicon types with $type fields.