SignedShot Validator
Verify SignedShot media authenticity proofs. Available as a Rust CLI and Python library.
Overview
SignedShot is an open protocol for proving photos and videos haven't been altered since capture. This validator verifies the cryptographic proofs (sidecars) generated by the SignedShot iOS SDK.
Installation
Python (PyPI)
Rust (Cargo)
Python Library
# Validate from files
=
# True/False
# Sidecar format version
# Error message if validation failed
# Capture trust (JWT verification)
=
# JWT signature verified
# API that issued the token
# Publisher ID
# Device ID
# Capture session ID
# Attestation: "sandbox", "app_check", or "app_attest"
# App bundle ID (if attested)
# Unix timestamp
# Media integrity (content verification)
=
# SHA-256 hash matches
# ECDSA signature verified
# Capture IDs match
# SHA-256 of media
# ISO8601 timestamp
Validate from Bytes
# Validate from in-memory data
=
=
=
Validate with Pre-loaded JWKS
# Avoid HTTP call by providing JWKS directly
= .
=
Convert to Dict/JSON
# Get result as dictionary
=
# Get result as JSON string
=
CLI Usage
Validate Media
# Basic validation
# Output as JSON
Parse Sidecar (without validation)
Example Output
Validating sidecar: photo.sidecar.json
Media file: photo.jpg
[OK] Sidecar parsed
[OK] JWT decoded
Issuer: https://api.signedshot.io
Publisher: 9a5b1062-a8fe-4871-bdc1-fe54e96cbf1c
Device: ea5c9bfe-6bbc-4ee2-b82d-0bcfcc185ef1
Capture: ac85dbd2-d8a8-4d0b-9e39-2feef5f7b19f
Method: app_check
App ID: io.signedshot.capture
[OK] JWT signature verified
[OK] Content hash matches
[OK] Media signature verified
[OK] Capture IDs match
✓ VALID - Media authenticity verified
What It Validates
1. Capture Trust (JWT)
- Fetches JWKS from issuer (or uses provided keys)
- Verifies ES256 (P-256 ECDSA) signature
- Extracts claims: publisher, device, capture ID, attestation method
2. Media Integrity
- Computes SHA-256 hash of media file
- Compares with
content_hashin sidecar - Verifies ECDSA signature over integrity data
- Confirms
capture_idmatches JWT
3. Cross-Validation
- Ensures capture_id in JWT matches capture_id in media_integrity
- Validates all timestamps and formats
Building from Source
Rust CLI
Python Wheels
# Install maturin
# Build wheel
# Install locally
Development
# Format
# Lint
# Test
# Build
Related Repositories
- signedshot-api - Backend API
- signedshot-ios - iOS SDK
Links
License
MIT License - see LICENSE for details.