atproto-record
A Rust library for AT Protocol record signature operations, providing cryptographic signing and verification capabilities for AT Protocol records.
Overview
This crate provides functionality for:
- Record Signing: Create cryptographic signatures for AT Protocol records
- Signature Verification: Verify existing signatures against records and public keys
- Error Handling: Structured error types for signature operations
- Multi-curve Support: Support for P-256 and K-256 elliptic curves via
atproto-identity
Features
- Create signatures for AT Protocol records with proper
$sigobject handling - Required signature object validation (must include
issuerandissued_atfields) - Verify record signatures against issuer public keys
- IPLD DAG-CBOR serialization for consistent signature generation
- Multibase encoding for signature representation
- Integration with
atproto-identityfor cryptographic key operations - Repository and collection context support in signature objects
- Comprehensive error handling with structured error types including creation and verification errors
Usage
Creating Signatures
use signature;
use ;
use json;
use VerificationError;
# async
Verifying Signatures
use signature;
use identify_key;
use VerificationError;
# async
Command Line Tools
The crate includes two command-line tools for AT Protocol record signature operations:
atproto-record-sign
Creates cryptographic signatures for AT Protocol records with proper $sig object handling and embedded signature metadata. This tool reads JSON records, applies cryptographic signatures using DID keys, and outputs signed records ready for AT Protocol repository storage.
Features:
- Flexible Input: Reads records from files or stdin
- DID Key Support: Works with both P-256 and K-256 cryptographic keys
- Signature Object Creation: Automatically creates required signature metadata with issuer and timestamp
- Repository Context: Includes repository and collection context in signatures
- IPLD Serialization: Uses DAG-CBOR serialization for consistent signature generation
- Multibase Encoding: Outputs signatures in multibase format for AT Protocol compatibility
# Sign a record from a file with all required parameters
# Sign a record from stdin
| \
# Example output: JSON record with embedded signatures array
Arguments:
<signing_key>- DID key string for signing (did:key:...)<issuer_did>- DID of the signing entity<record_file>- JSON file containing the record (optional, uses stdin if omitted)repository=<did>- Repository DID where record will be storedcollection=<nsid>- Collection NSID (e.g., app.bsky.feed.post)
atproto-record-verify
Verifies cryptographic signatures of AT Protocol records using embedded signature metadata. This tool validates that signed records contain authentic signatures from specified issuers, ensuring record integrity and authenticity.
Features:
- Signature Validation: Verifies embedded signatures against public keys
- Issuer Authentication: Confirms signatures are from specified DID issuers
- Context Verification: Validates repository and collection context in signatures
- Multi-Signature Support: Handles records with multiple signatures
- IPLD Deserialization: Uses DAG-CBOR for signature verification consistency
- Detailed Error Reporting: Provides specific feedback on verification failures
# Verify a signed record from a file
# Verify a signed record from stdin
| \
# Successful verification returns exit code 0
# Failed verification returns exit code 1 with error details
Arguments:
<issuer_did>- DID of the expected signature issuer<public_key>- DID key string for verification (did:key:...)<record_file>- JSON file containing the signed record (optional, uses stdin if omitted)repository=<did>- Repository DID context for verificationcollection=<nsid>- Collection NSID context for verification
Exit Codes:
0- Signature verification successful1- Signature verification failed or invalid arguments2- File I/O or parsing errors
Modules
- [
signature] - Core signature creation and verification functions - [
errors] - Structured error types for signature operations
Error Handling
The crate uses structured error types defined in the errors module:
use VerificationError;
use json;
// Example error handling for signature creation
let signature_object = json!;
match create.await
// Example error handling for signature verification
match verify.await
Dependencies
This crate builds on:
atproto-identity- Cryptographic key operations and DID resolutionserde_ipld_dagcbor- IPLD DAG-CBOR serialization for signature contentmultibase- Base encoding for signature representationserde_json- JSON handling for AT Protocol recordsanyhow- Error handling utilitiesthiserror- Structured error type derivation
License
Licensed under the MIT License.