# Canra > Canra is a registry of machine-readable specifications -- library APIs, protocols, data formats, UI flows. An agent fetches a spec, generates a native implementation in any language, and checks it against the spec's test vectors. Everything below is public and read-only; no authentication is needed. ## Fetching specs - Raw markdown, latest version: https://canra.dev/specs/{owner}/{name}.md - Raw markdown, a specific version: https://canra.dev/specs/{owner}/{name}/{version}.md - Metadata as JSON: https://canra.dev/api/specs/{owner}/{name} - Version history as JSON: https://canra.dev/api/specs/{owner}/{name}/versions - Search as JSON: https://canra.dev/api/search?q={query} A spec is markdown with TOML front-matter (between +++ lines). Test vectors are JSONL, inline in fenced `test-vectors` blocks. ## Docs - [API reference](https://canra.dev/docs/api): every agent-facing endpoint - [Writing specs](https://canra.dev/docs): the spec format and publishing guide ## Specs - [canra/email-password-auth](https://canra.dev/specs/canra/email-password-auth.md): This spec defines a complete email/password authentication UI flow covering four screens: signup, login, forgot password, and reset password. It gives an AI agent everything it needs to produce a w... - [canra/hacker-news-api](https://canra.dev/specs/canra/hacker-news-api.md): This spec defines a client library for the Hacker News API, a read-only JSON API backed by Firebase. It covers all public endpoints for fetching items stories, comments, jobs, polls, users, and liv... - [canra/http-client](https://canra.dev/specs/canra/http-client.md): This spec defines an HTTP client library with three functions: - [canra/json](https://canra.dev/specs/canra/json.md): This spec defines a JSON library with two functions: - [canra/url](https://canra.dev/specs/canra/url.md): This spec defines a URL library with three functions: - [canra/uuid](https://canra.dev/specs/canra/uuid.md): This spec defines a UUID library with six functions: - [stormalong/aes](https://canra.dev/specs/stormalong/aes.md): This spec defines the AES block cipher of FIPS 197 for its three key sizes AES-128, AES-192 and AES-256, as two functions on a single 16-byte block: - [stormalong/aes-ctr](https://canra.dev/specs/stormalong/aes-ctr.md): This spec defines AES in the counter CTR mode of NIST SP 800-38A section 6.5, with the counter block layout of GCM: a 96-bit nonce followed by a 32-bit big-endian block counter that is incremented... - [stormalong/aes-gcm](https://canra.dev/specs/stormalong/aes-gcm.md): This spec defines AES-GCM, the authenticated encryption with associated data AEAD of NIST SP 800-38D, restricted to a 96-bit 12-byte nonce and a 128-bit 16-byte tag: - [stormalong/base64](https://canra.dev/specs/stormalong/base64.md): This spec defines the base64 encoding of RFC 4648 section 4: the standard alphabet A-Z a-z 0-9 + / with = padding. - [stormalong/chacha20](https://canra.dev/specs/stormalong/chacha20.md): This spec defines the ChaCha20 cipher of RFC 8439 section 2.4, with a 256-bit key, a 96-bit nonce and a 32-bit block counter, as one function: - [stormalong/chacha20-poly1305](https://canra.dev/specs/stormalong/chacha20-poly1305.md): This spec defines AEAD_CHACHA20_POLY1305, the authenticated encryption with associated data AEAD of RFC 8439 section 2.8, with a 256-bit key, a 96-bit nonce and a 128-bit tag: - [stormalong/ecdh-p256](https://canra.dev/specs/stormalong/ecdh-p256.md): This spec defines elliptic-curve Diffie-Hellman over the NIST P-256 curve secp256r1, as the ECC CDH primitive of NIST SP 800-56A section 5.7.1.2 with cofactor 1, in two functions: - [stormalong/ecdsa-sign-p256](https://canra.dev/specs/stormalong/ecdsa-sign-p256.md): This spec defines ECDSA signature generation on NIST P-256 with SHA-256, with the per-signature nonce k derived deterministically from the private key and the message hash as RFC 6979 section 3.2 s... - [stormalong/ecdsa-sign-p384](https://canra.dev/specs/stormalong/ecdsa-sign-p384.md): This spec defines ECDSA signature generation on NIST P-384 with SHA-384, with the nonce k derived deterministically as RFC 6979 section 3.2 specifies, as one function: - [stormalong/ecdsa-verify](https://canra.dev/specs/stormalong/ecdsa-verify.md): This spec defines ECDSA signature verification FIPS 186-5 section 6.4.2 for the two curve and hash pairs TLS 1.3 uses, as one function: - [stormalong/ed25519-sign](https://canra.dev/specs/stormalong/ed25519-sign.md): This spec defines pure Ed25519 RFC 8032 section 5.1 key derivation and signing, as two functions: - [stormalong/ed25519-verify](https://canra.dev/specs/stormalong/ed25519-verify.md): This spec defines verification of pure Ed25519 signatures, RFC 8032 section 5.1.7, as one function: - [stormalong/hkdf](https://canra.dev/specs/stormalong/hkdf.md): This spec defines HKDF as specified in RFC 5869, over HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512: - [stormalong/hmac](https://canra.dev/specs/stormalong/hmac.md): This spec defines HMAC RFC 2104, FIPS 198-1 over the SHA-2 hashes SHA-256, SHA-384 and SHA-512, and a constant-time byte comparison for checking a received tag: - [stormalong/pem](https://canra.dev/specs/stormalong/pem.md): This spec defines the PEM textual encoding of RFC 7468: binary data, usually DER, wrapped in base64 between ——-BEGIN label——- and ——-END label——- lines. - [stormalong/poly1305](https://canra.dev/specs/stormalong/poly1305.md): This spec defines the Poly1305 one-time authenticator of RFC 8439 section 2.5 as one function: - [stormalong/rsa-pkcs1-sign](https://canra.dev/specs/stormalong/rsa-pkcs1-sign.md): This spec defines RSASSA-PKCS1-v1_5 signature generation RFC 8017 section 8.2.1 with SHA-256, SHA-384 and SHA-512, as one function: - [stormalong/rsa-pss-sign](https://canra.dev/specs/stormalong/rsa-pss-sign.md): This spec defines RSASSA-PSS signature generation RFC 8017 section 8.1.1 with MGF1 over the message hash and a salt as long as the hash, the parameters of the TLS 1.3 rsa_pss_rsae_sha256, rsa_pss_r... - [stormalong/rsa-verify](https://canra.dev/specs/stormalong/rsa-verify.md): This spec defines verification of RSA signatures under the two RFC 8017 schemes TLS uses, as two functions: - [stormalong/secure-random-bytes](https://canra.dev/specs/stormalong/secure-random-bytes.md): This spec defines one function, random_bytes, which returns a requested number of cryptographically secure random bytes taken from the operating system's cryptographically secure pseudorandom numbe... - [stormalong/sha-2](https://canra.dev/specs/stormalong/sha-2.md): This spec defines the SHA-2 message digests SHA-256, SHA-384 and SHA-512 as specified in FIPS 180-4, in two forms: - [stormalong/tls-handshake](https://canra.dev/specs/stormalong/tls-handshake.md): This spec defines the TLS 1.3 client handshake RFC 8446 as a deterministic function over records: - [stormalong/tls-handshake-codec](https://canra.dev/specs/stormalong/tls-handshake-codec.md): This spec defines the byte format of the TLS handshake messages a TLS 1.3 and TLS 1.2 client and server exchange, as two functions: - [stormalong/tls-handshake-negotiation](https://canra.dev/specs/stormalong/tls-handshake-negotiation.md): This spec holds the vectors of the tls-handshake spec's client_handshake that concern version and key-share negotiation, HelloRetryRequest, ALPN and EncryptedExtensions, the record layer, change_ci... - [stormalong/tls-handshake-server](https://canra.dev/specs/stormalong/tls-handshake-server.md): This spec defines the TLS 1.3 server handshake as a deterministic function over records: - [stormalong/tls-record](https://canra.dev/specs/stormalong/tls-record.md): This spec defines how one TLS record is protected and unprotected once traffic keys exist, as four functions: - [stormalong/tls12-handshake](https://canra.dev/specs/stormalong/tls12-handshake.md): This spec defines the TLS 1.2 handshake of a client and a server that also speak TLS 1.3: - [stormalong/tls12-handshake-server](https://canra.dev/specs/stormalong/tls12-handshake-server.md): This spec holds the vectors of server_handshake when it negotiates TLS 1.2: the successful handshakes and the alerts. The behaviour is defined by the tls12-handshake spec "The TLS 1.2 server", the... - [stormalong/tls12-prf](https://canra.dev/specs/stormalong/tls12-prf.md): This spec defines the key derivations of TLS 1.2 RFC 5246 for the ECDHE suites with AEAD ciphers, as six functions: - [stormalong/tls13-key-schedule](https://canra.dev/specs/stormalong/tls13-key-schedule.md): This spec defines the TLS 1.3 key schedule of RFC 8446 section 7 for a full ECDHE handshake without a pre-shared key, as eight functions: - [stormalong/x25519](https://canra.dev/specs/stormalong/x25519.md): This spec defines the X25519 function of RFC 7748 section 5, scalar multiplication on the Montgomery form of Curve25519 using only u-coordinates, and the Diffie-Hellman use of it in section 6.1, as... - [stormalong/x509-parse](https://canra.dev/specs/stormalong/x509-parse.md): This spec defines the decoding of one DER X.509 v3 certificate RFC 5280 section 4 into the fields a TLS client needs for path validation, as one function: - [stormalong/x509-verify](https://canra.dev/specs/stormalong/x509-verify.md): This spec defines how a TLS endpoint decides that its peer's certificate chain is trustworthy — a server's chain for a host name, or a client's chain for client authentication — as one function: - [stormalong/x509-verify-client-auth](https://canra.dev/specs/stormalong/x509-verify-client-auth.md): This spec holds the vectors of the x509-verify spec's purpose parameter: a TLS server verifying a client's certificate chain with purpose = "clientAuth" and no host, and the argument rules that go... - [stormalong/x509-verify-go](https://canra.dev/specs/stormalong/x509-verify-go.md): This spec holds the vectors that reproduce cases of Go's crypto/x509 verifyTests for the x509-verify spec's verify function. The function, its types, its algorithm and its contracts are exactly tho... ## MCP - Remote MCP server (Streamable HTTP, no auth): https://canra.dev/mcp -- tools: search_specs, get_spec, get_test_vectors