Every action in IUSign — document upload, envelope creation, field placement, consent capture, signature submission, email delivery, voiding, reminders — is logged to an immutable audit trail.
Every action generates an audit event with timestamp, actor IP, user agent, and action details.
Events are written to the audit_log table via INSERT — no application bypass is possible.
Each event's SHA-256 hash includes the previous event's hash, forming a cryptographic chain.
If any single row is altered in the database, the entire chain from that point forward becomes invalid.
The hash chain can be independently verified by any third party using the exported evidence package.
Audit logs are included in every Certificate of Completion and evidence JSON export.
SQLite AFTER INSERT triggers on envelopes, signatures, and documents tables auto-generate audit log entries.
SQLite AFTER UPDATE triggers log the old and new values for any field modification.
DELETE on audit_log is physically blocked — the trigger raises an exception.
SHA-256 hash computation: hash(event_data + prev_hash + timestamp). Stored as event_hash.
Full evidence package export: single JSON file with metadata, audit trail, hash chain, and compliance summary.
Document upload (filename, size, hash, uploader), Envelope creation (recipients, field layout, order), Consent capture (timestamp, IP, user agent, device fingerprint), Signature application (signature image hash, page, coordinates), Email delivery (recipient, timestamp, template used, SMTP response), Envelope status changes (draft → pending → partially_signed → completed → voided), Change requests (comment location, sender, reason), Reminders (count, timestamps, delivery status).
Application-level logging can be bypassed — a developer could skip the log call, a compromised API key could delete records, a SQL injection could erase evidence. Database triggers operate at the storage engine level — no application code path can circumvent them.
Any recipient can download the evidence package JSON and independently verify the hash chain. Start with the first event's hash, iterate through each subsequent event, recompute SHA-256(data + prev_hash), and compare against the stored event_hash. Any mismatch indicates tampering.
Create your free account and send your first document in under 3 minutes.
Get Started Free