Cloudflare Workers · Off-Render

Edge verification.
Off Render. Sub-50ms p99.

Deploy the Hive certificate verifier to your own Cloudflare account in 5 minutes. Ed25519 + ML-DSA-65 hybrid verification — completely independent of hivemorph.onrender.com on the hot path.

<50ms p99 warm (JWKS cached)
<500ms cold path (JWKS miss)
5min JWKS cache TTL per POP
2 sig schemes (Ed25519 + ML-DSA-65)

Off-Render edge layer

The verifier runs in your Cloudflare account — not on hivemorph.onrender.com. JWKS public keys are cached at each Cloudflare POP with a 5-minute TTL via Workers KV. The hot verification path makes zero outbound requests.

Cold JWKS fetches (once per 5 min per POP) hit hivemorph in the background via ctx.waitUntil, so the response to your caller is never blocked.

Live MIT License Workers KV FIPS 204 RFC 8949 CBOR
CLIENT POST /v1/verify CLOUDFLARE WORKERS EDGE POP index.ts router verify.ts orchestrator ed25519.ts WebCrypto subtle.verify mldsa65.ts @noble/post -quantum cbor.ts RFC 8949 deterministic Workers KV JWKS cache · 5 min TTL hivemorph.onrender.com /v1/prov/pubkey (JWKS) miss { valid, signers, age_ms, posture, errors } back to client HOT PATH: 0 outbound requests

Deploy in 5 minutes

The verifier ships as a Cloudflare Worker. You need a Cloudflare account (free tier works) and Node.js 18+.

1

Clone the repo

Request access at [email protected] — you'll receive a private GitHub link within 24 hours.

bash
git clone [email protected]:hiveciv/hive-edge-verifier.git
cd hive-edge-verifier
npm install
2

Create KV namespace

The verifier uses Cloudflare KV to cache the JWKS public keys at each edge POP.

bash
npx wrangler kv:namespace create JWKS_CACHE

Copy the output id and paste it into wrangler.toml under [[kv_namespaces]].

3

Authenticate with Cloudflare

bash
npx wrangler login
4

Deploy to Workers

bash
npx wrangler deploy

Your verifier is live at https://hive-edge-verifier.<account>.workers.dev

5

Verify your first cert

bash
# Health check
curl https://hive-edge-verifier.<account>.workers.dev/v1/health

# Verify a Hive cert
curl -X POST https://hive-edge-verifier.<account>.workers.dev/v1/verify \
  -H "Content-Type: application/json" \
  -d '{
    "cert": {
      "cert_id": "04364b3e08d54264b06443693ddf504b",
      "agent_did": "did:hive:agent:edge-verifier-001",
      "controller_did": "did:hive:controller:thehiveryiq",
      "ed25519_signature": "fJD7UEYzekkAGCXIMFfhu5Umw...",
      "mldsa65_signature": "RFNBLVNUVUIt...",
      ...
    }
  }'

Hybrid post-quantum verification

Layer Library / API Standard Status
Ed25519 verification crypto.subtle.verify RFC 8032 · WebCrypto Level 2 Native
ML-DSA-65 verification @noble/post-quantum NIST FIPS 204 Pure JS
Canonical CBOR encoding cbor-x + RFC 8949 RFC 8949 §4.2.1 deterministic Workers-safe
Hash (SHAKE-256) @noble/hashes NIST FIPS 202 XOF Pure JS
JWKS edge cache Cloudflare Workers KV 5-min TTL per POP KV binding required

All libraries run without Node.js APIs — pure Workers runtime compatible. No WASM blobs required for Ed25519 (native WebCrypto). ML-DSA-65 runs as pure JS with @noble/post-quantum.

Target benchmarks

<50ms
p99 — warm cache
JWKS served from Workers KV at the same POP. Ed25519 via WebCrypto native. Zero outbound HTTP.
<500ms
p99 — cold (JWKS miss)
Once per 5 min per edge POP. Background refresh via ctx.waitUntil — doesn't block the caller response.
300+
edge POPs served
Cloudflare's global network. Each POP holds its own JWKS cache — no single-origin bottleneck.

API reference — curl examples

bash
BASE=https://hive-edge-verifier.<account>.workers.dev

# Health — returns { ok, version, edge_pop, ts, runtime }
curl "$BASE/v1/health"

# JWKS — Ed25519 + ML-DSA-65 public keys (5-min cached)
curl "$BASE/v1/verify/jwks"

# Verifier metadata
curl "$BASE/.well-known/hive-verifier"

# Verify a cert (hybrid mode, both sigs checked)
curl -X POST "$BASE/v1/verify" \
  -H "Content-Type: application/json" \
  -d '{"cert": {...}, "mode": "hybrid"}'

# Ed25519 only (skip ML-DSA-65)
curl -X POST "$BASE/v1/verify" \
  -H "Content-Type: application/json" \
  -d '{"cert": {...}, "mode": "ed25519_only"}'

What ships in v1.0

Off-Render architecture

Verifier is 100% independent from hivemorph.onrender.com on the hot path. JWKS cached at the Workers edge.

Hybrid sig verification

Ed25519 (WebCrypto native) + ML-DSA-65 (@noble/post-quantum). Both must pass in hybrid mode.

Canonical CBOR domain

RFC 8949 deterministic CBOR encoding of cert body before signature verification — matches the did:hive spec signing domain.

KV edge cache

Workers KV caches JWKS per POP with 5-min TTL. Background refresh via ctx.waitUntil — no blocking on cache miss.

JSON + CBOR input

Cert body accepted as JSON object or CBOR base64 string. Content-type auto-detected from request headers.

CORS + JWKS metadata

Full CORS support, /.well-known/hive-verifier metadata endpoint, and /v1/verify/jwks for key discovery.

What's coming

Soon

Full ML-DSA-65 key publication

hivemorph will publish the FIPS 204 ML-DSA-65 public key in its JWKS endpoint. The verifier auto-upgrades from stub-mode to full lattice verification — no code change required.

Soon

Combined 24-axis bundle verification (Wave + Loess)

When /v1/purity/cert/issue ships, the verifier will support a unified 24-axis entropy bundle spanning Wave-Lattice (6-axis MAPET) + Loess (18-axis environmental anchor). POST /v1/verify will accept type: "bundle".

Future

ML-KEM-768 KEM receipt unwrapping

Verify the kem_ct field in receipt_envelope using FIPS 203 key encapsulation.

Future

did:hive revocation registry check

Real-time revocation status query against the did:hive registry at verification time, with configurable caching TTL.

Future

Durable Objects rate limiting

Distributed rate limiting for bulk verification workloads using Cloudflare Durable Objects — per-DID and per-IP quotas.

Deploy the verifier to your Cloudflare account

The repo is available to security partners and enterprises on request. Contact [email protected] with subject line Edge Verifier Access — we'll send you the private GitHub link within 24 hours.