Canonical serialization of a licence.
Contract: two structurally equal licences produce identical bytes, on any host, in any JVM. Signatures are computed over these bytes, so any divergence here invalidates every licence in the field.
Canonical serialization of a licence. Contract: two structurally equal licences produce identical bytes, on any host, in any JVM. Signatures are computed over these bytes, so any divergence here invalidates every licence in the field.
Facade: issue a licence, verify one offline.
Verification performs no IO. The caller supplies the clock and the host identity, so the same inputs always yield the same verdict.
Facade: issue a licence, verify one offline. Verification performs no IO. The caller supplies the clock and the host identity, so the same inputs always yield the same verdict.
Ed25519 primitives over raw bytes, from the JDK provider (Java 15+).
Keys cross this boundary as X.509 (public) and PKCS#8 (private) encodings, which is what KeyFactory consumes and what a keyring stores.
Ed25519 primitives over raw bytes, from the JDK provider (Java 15+). Keys cross this boundary as X.509 (public) and PKCS#8 (private) encodings, which is what KeyFactory consumes and what a keyring stores.
Key material derived from a signed licence, and AES-GCM sealing under it.
Contract: the derived key depends on the signature, which cannot be produced
without the private key. A caller that needs unseal to obtain a value it
depends on therefore cannot be satisfied by deleting the licence check.
Key material derived from a signed licence, and AES-GCM sealing under it. Contract: the derived key depends on the signature, which cannot be produced without the private key. A caller that needs `unseal` to obtain a value it depends on therefore cannot be satisfied by deleting the licence check.
A licence gate as a plain function of a mount spec.
Returns nil to permit and a DenyReason keyword to refuse, which is the contract hive-addon's mounter consumes. Neither library depends on the other: the gate is an ordinary fn, so the coupling is a calling convention rather than a classpath edge.
A licence gate as a plain function of a mount spec. Returns nil to permit and a DenyReason keyword to refuse, which is the contract hive-addon's mounter consumes. Neither library depends on the other: the gate is an ordinary fn, so the coupling is a calling convention rather than a classpath edge.
Key-id -> public key registry. The DIP swap point for signing-key rotation: a verifier gains a new key by registering data, never by changing code.
Key-id -> public key registry. The DIP swap point for signing-key rotation: a verifier gains a new key by registering data, never by changing code.
Malli value objects for licences.
Times are ISO-8601 strings, not Date instances: a licence must round-trip through bytes unchanged for its signature to verify.
Malli value objects for licences. Times are ISO-8601 strings, not Date instances: a licence must round-trip through bytes unchanged for its signature to verify.
Binds licence signing and verification to the ISigner port.
The default implementation is this library's own JDK adapter, so a shipped artifact keeps verifying with no crypto dependency on the classpath. A host that already carries a crypto stack may install its own; both speak the same base64 PKCS#8/X.509 encodings and produce byte-identical signatures, so the two are interchangeable over the same key files.
verify is total by contract — a foreign signer that throws still yields
false here, because a verdict of "invalid" is the only safe reading of a
signature that could not be checked.
Binds licence signing and verification to the ISigner port. The default implementation is this library's own JDK adapter, so a shipped artifact keeps verifying with no crypto dependency on the classpath. A host that already carries a crypto stack may install its own; both speak the same base64 PKCS#8/X.509 encodings and produce byte-identical signatures, so the two are interchangeable over the same key files. `verify` is total by contract — a foreign signer that throws still yields false here, because a verdict of "invalid" is the only safe reading of a signature that could not be checked.
Licence validity as an ordered rule chain. Pure.
A rule returns nil to pass, or a DenyReason keyword to stop the chain.
Extending the policy = registering another rule; decide never changes.
Licence validity as an ordered rule chain. Pure. A rule returns nil to pass, or a DenyReason keyword to stop the chain. Extending the policy = registering another rule; `decide` never changes.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |