Commit Graph
5 Commits
Author SHA1 Message Date
woggioni 987fdc0e12 Fix SSH private-key import/export for Paramiko 5.1.0 and remove unconditional DSSKey reference
- Replace paramiko-based OpenSSH private key serialization with
  cryptography's PrivateFormat.OpenSSH backend.
  The old code relied on paramiko.RSAKey, paramiko.DSSKey, etc. to write
  private keys, but Paramiko 5.1.0 removed DSSKey entirely and changed
  constructor APIs, causing crashes.

- Add explicit fallback path in _load_ssh_private_with_paramiko that
  guards against missing DSSKey (getattr paramiko 'DSSKey', append only
  when present), modern private_key attribute vs legacy signing_key,
  and Ed25519 PyNaCl key material conversion.

- Add two new test coverage methods:
  test_ssh_private_roundtrip  – round-trip RSA/DSA/EC/Ed25519
    unencrypted and password-encrypted, verifying OpenSSH PEM header
    and DER preservation.
  test_ssh_private_paramiko_fallback – explicitly exercise the
    Paramiko fallback for RSA and EC keys, confirming it still works
    under locked Paramiko 5.1.0.

Also clean up the comment in load_key_bytes to reflect the new fallback
behavior rather than the old 'encrypted OpenSSH keys not supported' note.
2026-10-26 12:06:16 +08:00
woggioni bd352051e0 Typed but unhandled extensions preserve DER via public_bytes() 2026-10-26 12:06:16 +08:00
woggioni 1032b10c49 Fix EC JWK: fixed-width x, y, d encoding; restrict to registered curve names
- Encode EC coordinates and private d with curve-width (32/48/66 bytes) to satisfy RFC 7518,
  preserving leading zero octets.
- Restrict JWK  values to registered JOSE names: P-256, P-384, P-521, secp256k1.
  Raise ValueError for unregistered curves (P-192, P-224, Brainpool).
- Add regression tests: deterministic coordinate/private-value widths, leading-zero
  preservation, supported curve names, and rejection of unsupported curves.
- Mypy clean; all core and backend tests pass.
2026-10-26 12:06:16 +08:00
woggioni b59b935d1b Fix quadratic ReDoS in PEM import block scanning
Replace the backtracking _PEM_BLOCK regex with a forward-only scanner
that indexes END markers by label, so repeated unterminated headers do
not cause the regex to rescan the remaining input.

Impact: 80 KiB payload went from 8.34 s to 0.001 s.
2026-10-26 12:06:15 +08:00
woggioni 4f3a632f4b Implement KCA: web reimplementation of XCA PKI workflows
- kaya backend with OIDC sessions, API tokens, Postgres/Tortoise models
- AES-256-GCM private key storage and full certificate/CSR/CRL domain logic
- Sycamore/WASM SPA for vaults, keys, requests, certificates, CRLs and templates
- imports/exports, XCA .xdb migration, Docker Compose stack and tests
2026-10-23 02:06:55 +00:00