You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: signed CRL, trust token revocation, async fingerprinting, DID rate limiting
Add pull-based signed CRL endpoint (GET /crl, /.well-known/airlock-crl) with
Ed25519 signatures, monotonic crl_number, ETag caching, and tiered freshness
degradation (NORMAL → DEGRADED → EMERGENCY → FAIL_CLOSED). Separate CRL
signing key support via crl_signing_key_hex config.
Trust token decode now checks revocation status — revoked/suspended DIDs are
rejected at introspect time even if the JWT is unexpired. Default TTL reduced
from 600s to 120s to shrink the revocation gap window.
FingerprintStore converted from threading.Lock to asyncio.Lock for non-blocking
concurrent request handling. Sync wrappers preserved for backward compatibility.
DID-based rate limiting extracted into DIDRateLimiter class with DID format
validation, structured 429 error responses, and Retry-After headers.
IETF BCP 72 Security Considerations document (1,400+ lines) covering threat
model, identity attacks, trust scoring, PoW, semantic challenges, privacy,
network attacks, token security, revocation, federation, and operational
security.
601 tests, 0 failures.
Signed-off-by: Shivdeep Singh <shivdeepsachdeva@gmail.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,25 @@ All notable changes to the Airlock Protocol are documented in this file.
5
5
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.2.1] - 2026-04-05
9
+
10
+
### Fixed
11
+
-**PoW Challenge Replay** (CRITICAL): `verify_pow()` now validates challenges against a server-side store with one-time use enforcement and expiry checks
12
+
-**RFC 8785 Canonical JSON** (CRITICAL): Removed `default=str` from `canonicalize()` — explicit type conversion ensures cross-language signature verification (Go, Rust, JS)
13
+
14
+
### Changed
15
+
-**Revocation model**: `revoke()` is now permanent and irreversible for key compromise scenarios; added `suspend()`/`reinstate()` for reversible holds
16
+
-**Attestation signing**: `AirlockAttestation.airlock_signature` is now populated with a real Ed25519 signature, enabling cryptographic verification by relying parties
17
+
- Added `RevocationReason` enum with 7 reason codes
18
+
- New admin endpoints: `POST /admin/suspend/{did}`, `POST /admin/reinstate/{did}`
19
+
20
+
### Removed
21
+
-`unrevoke()` method — replaced by `suspend()`/`reinstate()`
22
+
-`DELETE /admin/revoke/{did}` endpoint
23
+
24
+
### Security
25
+
- 4 security audit documents added to `docs/security/`
0 commit comments