Context
The CLI and Skills Hub need one SDK-owned implementation of Ed25519 signature parsing and verification so signing behavior does not drift across repos.
Scope
Non-Goals
- Does not implement the Hub publish endpoint.
- Does not accept
bundled for community-distributed skills.
- Does not use PyNaCl.
Technical Specification
verify_skill_signature(tarball_bytes: bytes, signature_str: str, public_key_b64: str) -> bool verifies ed25519:<base64> signatures. sign_skill(tarball_bytes: bytes, private_key_bytes: bytes) -> str returns the same format. Missing cryptography must fail clearly.
Acceptance Criteria
Tests Required
| Test |
Verifies |
test_verify_signature_vector |
Spec vector verifies. |
test_rejects_bad_prefix |
Non-ed25519 signature rejected. |
test_sign_skill_round_trip |
Generated signature verifies. |
Additional Test Coverage / Edge Cases
Invariants — Do Not Violate
- Security-sensitive Ed25519 work uses
cryptography for runtime interoperability.
Dependencies
Blocked by:
Unblocks:
Contract References
ori-specs/signing/v1.md
- Runtime
ori/skills/signing.py
Priority
poc-critical
Suggested Labels
blocked, poc-critical, security-sensitive
Context
The CLI and Skills Hub need one SDK-owned implementation of Ed25519 signature parsing and verification so signing behavior does not drift across repos.
Scope
ori_sdk/signing.py.verify_skill_signature,sign_skill, andBUNDLED_SENTINEL = "bundled".cryptographyfor Ed25519 operations.ori-specs/signing/v1.md.SignatureVerificationError.Non-Goals
bundledfor community-distributed skills.Technical Specification
verify_skill_signature(tarball_bytes: bytes, signature_str: str, public_key_b64: str) -> boolverifiesed25519:<base64>signatures.sign_skill(tarball_bytes: bytes, private_key_bytes: bytes) -> strreturns the same format. Missingcryptographymust fail clearly.Acceptance Criteria
cryptography, not PyNaCl.pytest,mypy, andruffpass.Tests Required
test_verify_signature_vectortest_rejects_bad_prefixtest_sign_skill_round_tripAdditional Test Coverage / Edge Cases
ori-specs/signing/v1.md.sign_skillverify withverify_skill_signature.cryptographyare interoperable with runtime verification expectations.bundledis treated as a sentinel value only where explicitly allowed, not as a valid community signature.Invariants — Do Not Violate
cryptographyfor runtime interoperability.Dependencies
Blocked by:
Unblocks:
Contract References
ori-specs/signing/v1.mdori/skills/signing.pyPriority
poc-criticalSuggested Labels
blocked,poc-critical,security-sensitive