Commit Graph

30 Commits

Author SHA1 Message Date
6d775b3817 feat(pki): recover revocation index from checkpoints
Recover the disk-backed revocation current-state index from the newest
valid immutable checkpoint and replay only the authoritative log suffix.

Preserve bounded memory, deterministic seed convergence, and the global
transition log as the sole revocation authority.
2026-08-02 13:54:37 +02:00
8582ad6fd4 feat(pki): build revocation checkpoints with bounded memory
Build immutable revocation checkpoints from frozen current-index views
using bounded external sorting and canonical multi-pass merging.

Keep the transition log authoritative while preserving exact historical
revision binding, atomic checkpoint publication, and bounded resources.
2026-08-02 12:56:16 +02:00
7b63f139bf feat(pki): add derived revocation current-state index
Add a crash-safe rebuildable disk-backed index for expected constant-time
current revocation lookup and bounded-memory suffix replay.

Keep the global transition log as the sole authority and validate every
derived lookup against its authoritative transition frame.
2026-08-02 11:58:35 +02:00
6545b7b5b6 feat(pki): add immutable revocation checkpoints
Add strict log-bound immutable current-state checkpoint generations
with atomic POSIX publication and constant-memory ordered cursors.

Keep the global revocation transition log as the sole authority while
providing the derived snapshot primitive required for scalable CRL
generation and later index integration.
2026-08-02 10:52:20 +02:00
7e11129332 feat(pki): add append-only revocation transition log
Add a strict authenticated global revocation-transition log with
bounded-memory append and recovery scanning.

Preserve current revocation semantics while establishing the scalable
persistence substrate for later authority cutover, derived indexing,
checkpointing, and streamed CRL snapshots.
2026-08-02 01:24:54 +02:00
83131c3e72 refactor(pki): make status authority transactional
Persist immutable status records and STATUS_OBJECT_RECORD content-owner
edges atomically through the transactional metadata store.

Remove the former status/by-id file authority and scan-derived content
retention while keeping CRL payloads external and publication as a
separate post-commit lifecycle.
2026-08-02 00:04:14 +02:00
c2112f58fc test(pki): align revocation fixtures with store authority
Rebuild revocation test credentials through the target staged-content
store and real credential persistence path.

Preserve strict foreign-store rejection while restoring full coverage
of revocation transitions, corruption handling, concurrency, and
durability semantics.
2026-08-01 22:29:30 +02:00
0a07dc6ee2 refactor(pki): normalize credential authority and snapshots
Make standalone Credential records the sole durable certificate-content
authority and replace embedded CaRecord credentials with stable
credential ID references.

Rework snapshot export and restore to stream certificate content,
mint target-store references, preserve dependency ordering, and reject
legacy embedded-credential and v2 persistence formats.

Validated:
- lib tests: 516/516
- FilesystemPkiStoreTest: 16/16
- PMD and JavaDoc pass
- app compilation passes
- only the 29 independently classified revocation fixture failures remain
2026-08-01 22:18:08 +02:00
aa89c09238 feat(pki): confine local private-key signing to lib
Move local key resolution and signing execution behind the lib-owned
KeyringSignatureExecutor boundary.

Ensure production PKI code operates only with KeyRef and never obtains,
stores, encodes, or exposes PrivateKey material. Preserve streaming,
cancellation, workflow persistence, and terminal outcome semantics.
2026-08-01 20:37:46 +02:00
08db857e05 feat(pki): migrate signing authority to transactional metadata
Atomically persist signing workflow records and SIGNING_OPERATION
content-owner edges through the transactional metadata store.

Use the canonical SigningSubmissionId directly as the MetadataKey,
remove the former current.bin and signing-specific .owners authority,
and recover pending signing operations only from consistent metadata
record/owner pairs.

Keep immutable staged payload and reference metadata external.

Validated:
- focused migration tests pass
- lib tests pass
- PMD and JavaDoc pass
- app compilation passes
- pki retains only the 31 independently classified credential and
  revocation failures
2026-08-01 17:58:16 +02:00
5420c19d08 wip(pki): checkpoint Phase A metadata foundation
Checkpoint the current pre-release Phase A work before production
persistence integration continues.

Includes the consolidated transactional metadata SPI, POSIX append-only
metadata log, recovery epochs, mutation codec, state reducer, internal
transaction engine, transactional adapter, staged-content foundations,
and the related current lib/pki changes.

Validated baseline:
- lib tests pass
- focused metadata tests pass
- PMD passes with zero findings
- JavaDoc passes
- app compilation passes
- pki retains exactly 31 independently classified failures:
  2 credential snapshot/model cases and 29 revocation fixture/reference
  cases

This is a work-in-progress safety checkpoint, not a release-ready
milestone.
2026-08-01 16:45:14 +02:00
2d35e61466 refactor(lib): normalize source headers and close PMD findings 2026-07-30 21:33:30 +02:00
dedd16f584 chore(text): source code format 2026-07-30 20:28:43 +02:00
bc68e0433c chore(import): fix invalid imports 2026-07-30 20:26:14 +02:00
849c8c82cb security(pki): enforce configuration-driven CA profiles
* add versioned root and intermediate CA profile documents
* extend the strict profile schema with closed certificate kinds
* package canonical built-in root and intermediate profiles
* enforce immutable import and explicit activation for CA profiles
* bind CA credentials to exact profile ID, version, and canonical hash
* resolve active profiles for root and intermediate issuance
* validate issuer-controlled CA requests before backend execution
* enforce complete CA DER and extension postconditions
* reject inactive, mismatched, and malicious profile/backend inputs
* preserve historical credential bindings across profile activation changes
* add root and intermediate profile version-switch coverage

BREAKING CHANGE: root and intermediate CA issuance now requires an explicitly imported and activated versioned CA profile.
2026-07-30 20:14:11 +02:00
9e40e8b5a2 security(pki): enforce configuration-driven certificate profiles
* add strict versioned JSON profile documents and canonical serialization
* package validated built-in end-entity profile templates
* persist immutable profile versions with canonical hashes
* require explicit atomic profile activation
* resolve issuance profiles only from validated active store references
* enforce deny-by-default subject and SAN policies
* support typed DNS, IP, URI, and RFC822 SAN identities
* remove requester control over certificate serials and reserved fields
* bind issued credentials to exact profile ID, version, and hash
* enforce closed end-entity and CA credential profile-binding variants
* validate issued DER against the complete approved profile
* add real SAN issuance, CSR rejection, malicious-backend, lifecycle, snapshot, and redaction coverage

BREAKING CHANGE: replaces direct and mutable pre-release profile handling with strict JSON import,
immutable version persistence, explicit activation, and exact credential profile bindings.
2026-07-30 17:15:33 +02:00
f06b25fa39 security(pki): enforce authoritative revocation state 2026-07-30 10:11:26 +02:00
8b2f3df41f security(lib,storage): enforce single-use encryption contexts, encrypt keyring and harden key import 2026-07-29 23:18:22 +02:00
8af75a9508 security(pki): replace reflective persistence decoding with strict schemas 2026-07-29 16:33:37 +02:00
07e04e0eed security(pki): enforce proof gates and durable signing workflows 2026-07-29 14:20:21 +02:00
49dc080c65 refactor!: consolidate crypto architecture and security model
* make ZeroEchoSession the sole policy, audit, and runtime boundary
* replace combined key builders with operation-specific SPI and typed metadata
* remove obsolete pre-release compatibility APIs and global crypto operations
* finalize JCA agreement contexts and replace inheritance with composition
* harden secret lifecycle, key destruction, hybrid KEX, PBKDF2, and audit handling
* standardize PairSeq I/O and introduce immutable validated value types
* migrate app, ext, samples, and required pki integration points
* expand correctness, security, concurrency, and malformed-input coverage

BREAKING CHANGE: removes deprecated pre-release global configuration, legacy
context factories, combined key-builder contracts, String-based password APIs,
unchecked PairSeq writing, BlockGeometry public fields, and other compatibility
facades.
2026-07-28 19:20:30 +02:00
de55ea909f Integrate CredentialFrameworkProvider bootstrap SPI and harden provider config validation
feat: add SPI-based CredentialFrameworkProvider resolution to PkiBootstrap via ServiceLoader
feat: add PkiBootstrap.openCredentialFramework() for provider-driven credential framework initialization
feat: register BcX509CredentialFrameworkProvider in META-INF/services
feat: introduce ConfigurableProvider.validateConfig(ProviderConfig) as a standard provider-side validation hook
fix: move generic backendId consistency validation into the default ConfigurableProvider validation routine
fix: enforce provider-local configuration validation from allocate() so direct provider use remains safe outside bootstrap
fix: add provider-specific validateConfig implementations for bootstrap-managed providers based on consumed configuration keys
fix: report unknown provider configuration keys through provider-local JUL warning logs without exposing values
fix: fail fast on malformed consumed configuration values instead of silently falling back where invalid input would mask operator error
fix: extend PkiBootstrapTest to cover CredentialFrameworkProvider bootstrap path
fix: extend PkiBootstrapTest to cover async and crypto.workflow initialization paths whose prefixed properties are cleared in test setup
fix: add negative bootstrap/provider validation coverage for backend mismatch and invalid configured values
docs: expand JavaDoc and package-level documentation for CredentialFrameworkProvider bootstrap wiring, ServiceLoader usage, and configuration validation behavior
chore: keep PkiBootstrap independent from implementation-specific BC framework classes and preserve provider autonomy over validation and diagnostics

Closes #3 spent @2h
2026-04-06 01:51:15 +02:00
d1bdf7d9df Split integrations and export into ext module
feat: move integrations from lib to ext
feat: move content export from lib to ext
feat: rename affected packages for separate module distribution
chore: update Gradle module wiring
chore: adjust JPMS descriptors and dependencies
docs: update module structure documentation
2026-04-01 20:43:10 +02:00
354e9dd9bc Stabilize PKI core persistence, signing interop, and approval workflow
fix: harden FsCodec determinism and persisted type round-trips
fix: align CSR PoP verification with standards-compatible signature validation
fix: make async approval deny propagation deterministic in signing bus tests
chore: reduce IDE/Gradle drift by strengthening regression coverage
2026-03-24 17:36:12 +01:00
414e812150 Keyring naming cleanup and deprecation fix
chore: standardize keyring pub/priv naming
chore: prepare for deprecated assignment replacement
2026-03-22 14:30:16 +01:00
adfa0b4b51 feat: add universal AsyncBus infrastructure
Introduce a generic asynchronous bus used for internal PKI workflows,
with resilient sweep support and symmetric primitive/wrapper type
compatibility for dispatch handling.

Signed-off-by: Leo Galambos <lg@hq.egothor.org>
2026-01-02 22:28:53 +01:00
d2ec77b8e3 feat: introduce SignatureWorkflow SPI and zeroecho-lib implementation
- add SignatureWorkflow SPI for asynchronous sign/verify operations
- define audit-friendly, exception-free failure model
- introduce stable OperationStatus, State and OperationResult semantics
- document trust boundaries, lifecycle, and audit constraints in SPI
  JavaDoc
- add ZeroEchoLibSignatureWorkflow backed by KeyringStore and ZeroEcho
  lib
- enforce opaque KeyRef handling and provider-local parsing
- add deterministic detail codes and UNKNOWN_OPERATION handling
- integrate workflow provider into ServiceLoader bootstrap
- align PkiBootstrap logging and defaults with crypto workflow SPI
- add comprehensive JUnit tests for validation and status semantics

Signed-off-by: Leo Galambos <lg@hq.egothor.org>
2025-12-29 22:41:11 +01:00
0346c5b30f feat: refactor SPI/bootstrap to generic configurable providers
- Introduce a universal ConfigurableProvider/ProviderConfig abstraction
  for ServiceLoader-based components and align PKI bootstrapping
  utilities with it.
- Document deterministic provider selection, property-based
  configuration conventions, and security requirements (never log config
  values), including package-level documentation for spi, spi.store and
  spi.bootstrap.

fix: harden audit runtime, fix gzip scanning, add bounds and docs

- Fix FileAuditSink concatenated gzip scan by shielding underlying
  stream
- Use JUnit @TempDir for filesystem-backed tests
- Bound InMemoryAuditSink with deterministic ring buffer
- Add ServiceLoader smoke test and expand DefaultAuditService coverage
- Improve JavaDoc and logging across audit implementation

feat: add deterministic tests for PkiBootstrap with real SPI providers

- add JUnit 5 test suite for PkiBootstrap
- cover SPI selection for filesystem PkiStore and audit sinks
- use @TempDir for filesystem-backed providers
- register test ServiceLoader providers under src/test/resources
- ensure deterministic bootstrap behavior via system properties

Signed-off-by: Leo Galambos <lg@hq.egothor.org>
2025-12-29 02:09:07 +01:00
cab1eeefe7 feat: add filesystem-based PkiStore reference implementation
Introduce a deterministic filesystem-backed PkiStore implementation
under zeroecho.pki.impl.fs.

Key characteristics:
- write-once semantics for immutable objects with explicit failure on
  overwrite
- history tracking for mutable records with full audit trail
- atomic writes using NIO (temp + move) with best-effort durability
- strict snapshot export supporting time-travel reconstruction
- configurable history retention (ON_WRITE policy)
- no secrets logged; JUL-only diagnostics for anomalies

Includes comprehensive JUnit 5 tests validating:
- write-once enforcement
- history creation and overwrite semantics
- strict snapshot export (failure and positive selection cases)
- deterministic on-disk layout and structure

This implementation is intentionally non-public and serves as a
reference and validation baseline for future persistence backends.

Signed-off-by: Leo Galambos <lg@hq.egothor.org>
2025-12-28 01:15:46 +01:00
7673e7d82f feat: PKI module core design
Signed-off-by: Leo Galambos <lg@hq.egothor.org>
2025-12-27 21:38:32 +01:00