Sally is a purpose-built verification service and reporting server for the vLEI ecosystem that receives credential presentations and revocation notices, verifies their structural and cryptographic integrity, and forwards validated data via HTTP POST to configured webhook URLs, enabling the GLEIF Reporting API to track which vLEIs have been issued to Legal Entities.
Related Concepts
No related concepts available
Comprehensive Explanation
sally
Implementation Overview
Sally is the vLEI Audit Reporting Agent, a specialized Python-based verification service implementation designed specifically for the verifiable Legal Entity Identifier (vLEI) ecosystem governed by GLEIF. The implementation serves as a critical infrastructure component that bridges credential presentations from vLEI ecosystem participants to GLEIF's reporting systems.
Programming Language: Python
Purpose and Scope: Sally functions as both a verification service and a reporting server, handling the complete workflow of receiving ACDC credential presentations, performing cryptographic validation, and forwarding verified data to external systems via webhooks. The implementation is purpose-built for the vLEI ecosystem and is not a general-purpose credential verifier.
Relationship to Protocol Specifications: Sally implements the verification side of the IPEX (Issuance and Presentation EXchange) protocol, specifically handling the presentation exchange workflow defined in the ACDC and KERI specifications. It operates as a verifier in the credential ecosystem, validating presentations against KERIkey event logs and ACDC schemas.
Key Features & Capabilities
Core Verification Functionality
Implementation Notes
Critical Implementation Details
Verification Service Architecture
Sally implements a stateless verification service that does not maintain long-term credential storage. Each verification is performed independently, with no persistent state beyond configuration.
Webhook Reliability
Implementers should note that Sally's webhook mechanism requires:
Idempotent webhook handlers: The same credential may be posted multiple times due to retries
Asynchronous processing: Webhook handlers should return quickly to avoid blocking Sally
Error handling: Failed webhook deliveries should be logged but not block verification
Schema Resolution Performance
Sally's performance is heavily dependent on schema resolution speed:
OOBI caching: Implementations should cache resolved schemas to avoid repeated network lookups
Schema preloading: For known credential types, schemas can be preloaded at startup
Timeout handling: Schema resolution failures should have appropriate timeouts
KEL Verification Complexity
Verifying KELs involves:
Chain validation: Every event in the KEL must be cryptographically verified
Witness receipt validation: If present, witness receipts must be verified
Key state computation: Current key state must be computed from the event sequence
Delegation verification: For delegated AIDs, the delegation chain must be verified
Direct Mode Security Trade-offs
Sally's direct mode operation provides:
Advantages: Simple deployment, fast verification, no witness coordination
Disadvantages: Lower security guarantees, vulnerable to eclipse attacks, no distributed consensus
Mitigation: Future watcher network integration will address these limitations
Integration with vLEI Ecosystem
When integrating Sally into vLEI workflows:
Credential presentation timing: Presentations should occur after credential issuance is complete
Revocation handling: Revocation events must be processed before subsequent presentations
Sally performs three primary verification operations:
Structural Validation: Verifies that received credential presentations conform to the expected ACDC schema structure, ensuring all required fields are present and properly formatted according to JSON Schema definitions.
Cryptographic Verification: Validates the cryptographic integrity of presented credentials by:
Transparency: Provides transparency into the vLEI credential lifecycle
Auditability: Creates an audit trail of credential presentations and revocations
Ecosystem Monitoring: Enables GLEIF to monitor the health and activity of the vLEI ecosystem
Direct Mode Operation
Sally operates in what KERI terms direct mode, implementing a synchronous, peer-to-peer communication model:
Synchronous Validation: Credential presentations are validated immediately upon receipt
No Witness Dependency: Unlike indirect mode validators, Sally performs validation without requiring witness consensus
Lower Security Posture: The direct mode architecture provides simpler bootstrapping but lower security guarantees compared to witness-based validation
Future Enhancement: Documentation indicates potential future enhancement using watcher networks to establish verification thresholds, similar to distributed consensus systems
Installation & Setup
Based on the source documentation, Sally is available as open-source software maintained by GLEIF-IT on GitHub at the repository GLEIF-IT/sally.
Dependencies
Sally requires the following components to be operational:
KERI Infrastructure: Access to KERI witnesses or watchers for key event log verification
Schema Server: Access to a vLEI-server instance hosting ACDC schemas for validation
Network Connectivity: Ability to receive incoming credential presentations and make outbound webhook calls
Configuration
The implementation requires configuration of:
Webhook URLs: Target endpoints for forwarding verified credential data
Schema Sources: OOBI (Out-Of-Band Introduction) endpoints for resolving ACDC schemas
Verification Parameters: Thresholds and policies for credential acceptance
Usage & API
Credential Presentation Workflow
The typical workflow for Sally involves:
Presentation Receipt: Sally receives a credential presentation from a vLEI ecosystem participant (typically via HTTP POST to Sally's endpoint)
Schema Resolution: Sally resolves the credential's schema using the schema SAID and configured OOBI endpoints
Structural Validation: The credential is validated against its JSON Schema to ensure structural correctness
Cryptographic Verification: Sally performs the following cryptographic checks:
Verifies the issuer's AID signature on the credential
Validates the credential's SAID matches its content
Checks the issuer's KEL for current key state
Verifies any attached witness receipts
Webhook Notification: Upon successful verification, Sally POSTs the verified credential data to configured webhook URLs
Revocation Handling
For revocation events:
Revocation Notice Receipt: Sally receives a revocation event notification
Event Verification: The revocation event is cryptographically verified:
Signature validation against the revoking authority's AID
Maintains no persistent trust relationships with presenters
Ecosystem Role
Sally occupies a specific niche in the vLEI ecosystem:
Not a Wallet: Sally doesn't store credentials or manage keys
Not an Issuer: Sally doesn't create or sign credentials
Not a Holder: Sally doesn't present credentials to other verifiers
Pure Verifier: Sally's sole role is verification and reporting
This focused role makes Sally a critical but specialized component in the vLEI infrastructure, enabling GLEIF to maintain oversight of the ecosystem without becoming a centralized authority over credential issuance or usage.
Registry synchronization: Sally must have access to up-to-date TEL registries
Production Deployment Considerations
Scalability:
Sally's synchronous processing model may limit throughput
Consider load balancing across multiple Sally instances
Monitor webhook delivery latency
Monitoring:
Track verification success/failure rates
Monitor schema resolution performance
Alert on webhook delivery failures
Security:
Implement rate limiting on presentation endpoints
Validate presentation sources
Log all verification attempts for audit trails
Testing Strategies
When testing Sally integration:
Use the vlei-e2e test suite for end-to-end validation
Test with both valid and invalid credentials
Verify webhook delivery under various failure scenarios
Test revocation handling with both pre-revoked and post-revoked credentials