Skip to content

refactor(did): ecdsa- und base58-Abhängigkeit durch pure-Python ersetzen#34

Merged
lepy merged 1 commit into
masterfrom
refactor/did-dependency-free
Jun 25, 2026
Merged

refactor(did): ecdsa- und base58-Abhängigkeit durch pure-Python ersetzen#34
lepy merged 1 commit into
masterfrom
refactor/did-dependency-free

Conversation

@lepy

@lepy lepy commented Jun 25, 2026

Copy link
Copy Markdown
Owner

Macht sdata.did krypto-/encoding-seitig abhängigkeitsfrei. Beide bisherigen [did]-Extra-Dependencies (ecdsa, base58) entfallen — nur noch requests (Core-Dependency) für die HTTP-Auflösung von did:web/did:github.

Motivation

Es wurde nur Ed25519 aus python-ecdsa genutzt (kein echtes ECDSA/NIST). Eine geprüfte pure-Python-RFC-8032-Implementierung lag bereits im Repo (ed25519.py, von diddoc.py schon genutzt) — und did_peer4.py brachte bereits eine eigene base58btc-Kodierung mit. Die Abhängigkeiten waren also redundant.

Änderungen

Neu

  • eddsa.py — drop-in-Teilmenge der ecdsa-API (SigningKey/VerifyingKey/Ed25519/BadSignatureError) über die RFC-8032-Primitive; Schlüsselerzeugung via os.urandom(32).
  • base58btc.py — konsolidierte base58btc-Kodierung (vorher inline), zentral + saubere Fehlerbehandlung.

Umstellungen

  • jose.py, keys.py: from .eddsa import … statt ecdsa.
  • did_web.py, utils_didkey.py: from .base58btc import …; did_peer4.py re-exportiert b58encode/b58decode.
  • setup.py: [did]-Extra ohne ecdsa/base58 (no-op, bleibt installierbar). Docstrings aktualisiert.

Sicherheit

Kein Constant-time-Regress: python-ecdsa war ebenfalls pure-Python/nicht seitenkanalresistent. Der ehrliche Sicherheitshinweis bleibt; für Hochsicherheit weiterhin PyNaCl/cryptography empfohlen. Korrektheit ist gegen die offiziellen RFC-8032-Testvektoren (§7.1) abgesichert (tests/test_eddsa.py).

Verifikation

Mit deinstalliertem ecdsa/base58: 377 passed, 5 skipped, Coverage 100 % (inkl. neuer Module). did:key + JWS sign/verify-Roundtrip pure-Python bestätigt.

…on-Code ersetzen

sdata.did ist damit krypto-/encoding-seitig abhängigkeitsfrei (nur noch
'requests' für die HTTP-Auflösung von did:web/did:github).

Neu:
- eddsa.py: drop-in-Teilmenge der ecdsa-API (SigningKey/VerifyingKey/Ed25519/
  BadSignatureError), gestützt auf die vorhandenen RFC-8032-Primitive in
  ed25519.py. Schlüsselerzeugung via os.urandom(32).
- base58btc.py: konsolidierte base58btc-Kodierung (zuvor inline in did_peer4),
  jetzt zentral und mit klarer Fehlerbehandlung.

Umstellungen:
- jose.py, keys.py: Import von .eddsa statt ecdsa.
- did_web.py, utils_didkey.py: Import von .base58btc statt base58;
  did_peer4.py re-exportiert b58encode/b58decode aus dem neuen Modul.
- setup.py: [did]-Extra ohne ecdsa/base58 (no-op, bleibt installierbar);
  tests_require entschlackt. Docstrings aktualisiert.

Tests:
- tests/test_eddsa.py: offizielle RFC-8032-Testvektoren (§7.1) sichern die
  bitgenaue Korrektheit von sign/verify/publickey; Adapter- und base58-Tests.
- test_did.py: obsolete importorskip(ecdsa/base58) entfernt.

Verifiziert ohne ecdsa/base58 im Environment: 377 passed, 5 skipped,
Coverage 100% (inkl. neuer Module).
@lepy lepy merged commit ac471e5 into master Jun 25, 2026
1 of 2 checks passed
@lepy lepy deleted the refactor/did-dependency-free branch June 25, 2026 15:06
@codacy-production

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 19 high · 1 medium · 20 minor

Alerts:
⚠ 40 issues (≤ 0 issues of at least minor severity)

Results:
40 new issues

Category Results
UnusedCode 1 medium
1 minor
Documentation 19 minor
ErrorProne 2 high
Security 17 high

View in Codacy

🟢 Metrics 25 complexity · 0 duplication

Metric Results
Complexity 25
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant