Releases
[v0.9.8] — 2026-10-15
Jacobi symbol, Solovay–Strassen primality test & crypto-lab v0.6.0.
Added
- Upgraded
crypto-lab to v0.6.0, introducing quadratic reciprocity and probabilistic primality primitives:
GET /crypto-api/v1/math/jacobi & POST /crypto-api/v1/math/jacobi: evaluates the Jacobi symbol $(a/n)$ for odd positive integers $n$ in $O(\log n)$ Euclidean steps using quadratic reciprocity without integer factorization.
GET /crypto-api/v1/math/solovay & POST /crypto-api/v1/math/solovay: Solovay–Strassen randomized primality test verifying Euler’s criterion $a^{(n-1)/2} \equiv (a/n) \pmod n$ across $k$ rounds with error probability bounded by $2^{-k}$.
- Added
"jacobi" topic to seeded challenge generator (/crypto-api/v1/math/challenge) and interactive challenge mode on lab.html.
- Added interactive cards for Jacobi symbol (
#crypto-jacobi-form) and Solovay–Strassen test (#crypto-solovay-form) to lab.html with real-time telemetry and cURL buttons.
- Updated
API.md and API.html with contract documentation, examples, and updated endpoint catalogue (39 total endpoints).
- All 35
crypto-lab unit and HTTP integration tests passing with 0 compiler or Clippy warnings.
[v0.9.7] — 2026-10-14
Unified arithmetic suite (/v1/math/arith), telemetry race condition fix & crypto-lab v0.5.1.
Added
- Upgraded
crypto-lab to v0.5.1, introducing a unified arithmetic suite endpoint:
GET /crypto-api/v1/math/arith & POST /crypto-api/v1/math/arith: efficiently factorizes $n$ once via Pollard's $\rho$ / trial division, deriving Möbius $\mu(n)$, divisor sum $\sigma_k(n)$, and divisor count $\tau(n)$ in $O(1)$ from the shared factorization.
- Preserved standalone
/v1/math/mobius, /v1/math/sigma, and /v1/math/tau routes for backward-compatible and granular queries.
- Updated
API.md and API.html with contract documentation, examples, and updated endpoint catalogue (35 total endpoints).
- All 33
crypto-lab unit and HTTP integration tests passing.
Fixed
- Fixed a frontend telemetry race condition on
lab.html in #crypto-arith-form:
- Previously,
runCryptoArith fired three concurrent asynchronous requests (mobius, sigma, tau) into Promise.all targeting the same DOM result element. As requests resolved non-deterministically, subsequent responses clobbered the telemetry container, displaying inaccurate latency and partial cURL commands.
- Migrated
runCryptoArith to the single /crypto-api/v1/math/arith endpoint, providing an atomic request with a single, accurate telemetry badge, true total latency, and a complete cURL command.
[v0.9.6] — 2026-10-14
Discrete logarithm (BSGS), classical arithmetic functions & crypto-lab v0.5.0.
Added
- Upgraded
crypto-lab to v0.5.0, adding pure Rust discrete logarithm and classical arithmetic functions:
GET /crypto-api/v1/math/dlog & POST /crypto-api/v1/math/dlog: Baby-step Giant-step discrete log solver ($g^x \equiv h \pmod p$) in $O(\sqrt{\mathrm{ord}_p(g)})$ time and space.
GET /crypto-api/v1/math/mobius & POST /crypto-api/v1/math/mobius: Möbius function $\mu(n)$.
GET /crypto-api/v1/math/sigma & POST /crypto-api/v1/math/sigma: Sum of divisors function $\sigma_k(n)$ (defaults to $k=1$).
GET /crypto-api/v1/math/tau & POST /crypto-api/v1/math/tau: Divisor count function $\tau(n)$.
- Added
dlog topic to seeded challenge generator (/crypto-api/v1/math/challenge) and interactive challenge mode on lab.html.
- Added interactive cards for Discrete Logarithm and Classical Arithmetic Functions to
lab.html.
- Updated FoxMath description and highlights in
projects.html for v0.12.0 parity.
- Documented new math routes and curl examples in
API.md and API.html.
- All 33
crypto-lab unit and HTTP integration tests passing.
[v0.9.5] — 2026-10-14
Euler's totient, Carmichael function, multiplicative order & crypto-lab v0.4.0.
Added
- Upgraded
crypto-lab to v0.4.0, introducing pure Rust modular order and totient primitives:
GET /crypto-api/v1/math/totient & POST /crypto-api/v1/math/totient: Euler's totient $\phi(n)$, Carmichael's $\lambda(n)$, and cyclic group detection.
GET /crypto-api/v1/math/order & POST /crypto-api/v1/math/order: multiplicative order $\mathrm{ord}_m(a)$ via prime-factor stripping over $\lambda(m)$ and primitive root verification.
- Added
totient topic to seeded challenge generator (/crypto-api/v1/math/challenge) and interactive challenge mode on lab.html.
- Added dedicated Pollard's $\rho$ integer factorization card to
lab.html.
- Updated FoxMath project highlights in
projects.html.
- Documented
/crypto-api/v1/math/totient and /crypto-api/v1/math/order contracts and cURL examples in API.md and API.html.
- All 30
crypto-lab unit and HTTP integration tests passing.
[v0.9.4] — 2026-10-13
Integer factorization via Pollard's rho & crypto-lab v0.3.0.
Added
- Upgraded
crypto-lab to v0.3.0, introducing pure Rust prime factorization:
GET /crypto-api/v1/math/factor & POST /crypto-api/v1/math/factor: trial division + Pollard's $\rho$ (Brent's variant) with deterministic Miller-Rabin primality verification.
- Added
factor topic to seeded challenge generator (/crypto-api/v1/math/challenge).
- Added Factorization topic to the interactive challenge generator in
lab.html.
- Documented
/crypto-api/v1/math/factor contract and cURL examples in API.md and API.html.
- All 28
crypto-lab unit and HTTP integration tests passing.
[v0.9.3] — 2026-10-13
FoxMath number theory and elliptic curve cryptography in the Lab.
Added
- Added interactive FoxMath cryptography exploration tools to the live Lab:
- Modular square roots via Tonelli-Shanks algorithm ($\sqrt{a} \pmod p$)
- Legendre symbol evaluation using Euler’s criterion ($a/p$)
- Weierstrass elliptic curve scalar multiplication ($k \cdot G$ on
toy193 and toy97)
- Chinese Remainder Theorem multi-congruence solver ($x \equiv r_i \pmod{m_i}$)
- Seeded practice challenge problem generator with interactive answer reveal
- Documented
crypto-lab v0.2.0 API contract and public routing in API.md.
- Added GitHub Actions continuous integration workflow to
crypto-lab.
- Added
FoxMath and updated crypto-lab project cards in projects.html.
Compatibility & Deployment
- FoxMath exploration endpoints below
/crypto-api/v1/math/* are public and require no authentication.
- Existing SHA-2 hashing, HMAC generation, and constant-time verification endpoints remain secured by Nginx HTTP Basic Authentication.
- All 25 unit and HTTP integration tests passing.
[v0.9.2] — 2026-10-10
Positive-divisor enumeration for the arithmetic Lab.
Added
- Added
GET /v1/math/divisors/{n} for sorted positive divisors.
- Added an interactive Lab tool for listing divisors and verifying the
divisor-count and divisor-sum functions.
Safety
- The endpoint uses the bounded factorisation core and accepts
n ≤ 1,000,000.
[v0.9.1] — 2026-10-10
Divisor-count and divisor-sum arithmetic functions.
Added
- Added
GET /v1/math/divisor-count/{n} for τ(n).
- Added
GET /v1/math/divisor-sum/{n} for σ(n).
- Added interactive Lab tools, telemetry, and cURL support for both endpoints.
Safety
- Both endpoints use the bounded factorisation core and accept
n ≤ 1,000,000.
[v0.9.0] — 2026-10-09
Bounded factorisation and multiplicative number-theory APIs.
Added
- Added prime factorisation: GET /v1/math/factor/{n}
- Added Euler’s totient function: GET /v1/math/totient/{n}
- Added the Möbius function: GET /v1/math/mobius/{n}
- Added shared factorisation utilities for the new number-theory endpoints.
- Added unit and API tests covering edge cases, multiplicative functions, and over-limit requests.
- Updated the public metadata endpoint to advertise the new mathematical routes.
Safety
- Factorisation, totient, and Möbius requests are limited to
n ≤ 1,000,000.
- The endpoints use bounded trial division for lab demonstrations and are not intended to be a general factoring service.
- Existing localhost-only binding, HTTPS, Basic Authentication, snapshot protection, and School Database authorization boundaries remain unchanged.
Compatibility
- Existing Catalan, Fibonacci, GCD, prime, snapshot, metadata, School Database, and importer functionality remain unchanged.
- The new endpoints are public, read-only GET routes and use the existing mathematical response conventions.
Validation
- cargo fmt passes.
- cargo test passes with 75 tests.
- Verified:
- factor(360) → 2³ · 3² · 5
- φ(36) → 12
- μ(30) → -1
- μ(36) → 0
- Verified rejection of values above the configured factorisation limit.
Status
- ✅ Prime factorisation
- ✅ Euler’s totient function φ(n)
- ✅ Möbius function μ(n)
- ✅ Bounded trial-division safety limit
- ✅ API metadata and documentation updated
[v0.8.0] — 2026-10-07
Prime-number module, prime-counting support, and expanded mathematical APIs.
Added
- Added a dedicated prime-number module.
- Added primality testing: GET /v1/math/is-prime/{n}
- Added next-prime computation: GET /v1/math/next-prime/{n}
- Added previous-prime computation: GET /v1/math/previous-prime/{n}
- Added prime-gap computation: GET /v1/math/prime-gap/{n}
- Added prime-counting function support: GET /v1/math/prime-pi/{n}
- Added GET /v1/math/pi/{n} as a convenience alias for the prime-counting function π(n).
- Added module-level tests covering:
- primality testing
- next-prime computation
- previous-prime computation
- prime-gap computation
- prime-counting
- Added API tests covering all prime-number endpoints.
- Implemented π(n) using a sieve-based prime-counting algorithm.
- Added bounded limits for public prime-counting requests to ensure predictable memory usage on low-resource deployments.
Security
- Added validation limits for prime-counting requests.
- Existing localhost-only binding remains unchanged.
- Existing HTTPS, Basic Authentication, snapshot protection, and School Database authorization boundaries remain unchanged.
Compatibility
- Existing Catalan, Fibonacci, GCD, metadata, snapshot, School Database, and importer functionality remain unchanged.
- Added /v1/math/pi/{n} as an alias while preserving the explicit /v1/math/prime-pi/{n} route.
- Existing deployment architecture remains unchanged.
Validation
- cargo fmt passes.
- cargo test passes.
- Debug test suite: 65/65 tests passed.
- Verified:
- is-prime(97) → true
- next-prime(100) → 101
- π(1000) → 168
- prime-gap(1000) → previous=997, next=1009, gap=12
- Verified rejection of prime-counting requests exceeding the configured sieve limit.
Status
- ✅ Prime-number module
- ✅ Prime-counting function π(n)
- ✅ Primality testing
- ✅ Next-prime computation
- ✅ Prime-gap computation
- ✅ Expanded mathematical API coverage
- 🔒 Existing School Database scope preserved
[v0.7.1] — 2026-10-02
School Database student-view toggle for privacy-filtered and admin detail modes.
Added
- Added a portal control to switch between privacy-filtered student details and full admin details when authorized.
- Preserved the existing safe-detail fallback for users without admin access.
Security
- Full student details remain behind Nginx Basic Authentication and the
LAB_API_ADMIN_USERS allowlist.
- The toggle does not grant privileges; backend authorization remains authoritative.
[v0.7.0] — 2026-09-28
Admin-only full student details with authenticated-user authorization.
Added
Security
- The existing privacy-filtered student-detail endpoint remains unchanged.
- Full student details are available only through the dedicated admin endpoint.
- Requests without an authenticated user are rejected with HTTP 403.
- Requests from users not included in
LAB_API_ADMIN_USERS are rejected with HTTP 403.
- The portal does not determine admin privileges itself; a
403 from the admin endpoint is treated as the authorization boundary and triggers the safe fallback.
- Nginx injects
X-Authenticated-User from the authenticated Basic Auth username for the protected /school/ location.
- The public
/school/api/health endpoint remains outside the authenticated-user header boundary.
- The lab API continues to bind to localhost, keeping the authenticated Nginx proxy as the external access boundary.
Configuration
Compatibility
Status
- ✅ Admin-only full student-detail endpoint
- ✅ Configurable admin allowlist
- ✅ Authenticated-user propagation from Nginx
- ✅ 403 enforcement for unauthenticated/non-admin users
- ✅ Existing privacy-filtered endpoint preserved
- 🔒 Sensitive fields remain restricted to the admin endpoint
- 🔒 School Database runtime remains read-only
[v0.6.0] — 2026-09-13
Schema-driven student details with dynamic primary-key discovery and privacy-aware responses.
Added
- Added schema-driven student identification for student-detail lookups.
- Added dynamic discovery of a table’s single-column primary key.
- Added support for student tables using
Roll No as the primary key instead of requiring Student Code.
- Added schema-driven student-detail column selection.
- Added privacy-aware student-detail responses that include ordinary student information while excluding highly sensitive fields.
- Added support for ordinary detail fields such as
Father Name and Mother Name.
- Updated the School Database portal to use the discovered primary key instead of assuming
Student Code.
- Added tests for primary-key discovery, missing primary keys, alternate primary keys, and student-detail lookup using
Roll No.
- Added API coverage for the updated student-detail privacy boundary.
Security
Compatibility
Validation
cargo fmt passes.
- Debug test suite: 44/44 tests passed.
- Database-focused test suite: 29/29 tests passed.
- Verified primary-key discovery for both
Student Code and Roll No.
- Verified rejection of missing and composite primary keys.
- Verified student-detail responses exclude highly sensitive fields.
- Verified ordinary student information, including
Father Name and Mother Name, is available through the detail endpoint.
- Verified the updated School Database API tests pass.
Status
- ✅ Schema-driven student identification
- ✅ Dynamic primary-key discovery
- ✅
Roll No-based student-detail support
- ✅ Privacy-aware student-detail responses
- ✅ Sensitive-field exclusion
- ✅ Schema-driven School Database portal behavior
- ✅ Expanded database and API test coverage
- 🔒 School Database runtime remains read-only
[v0.5.1] — 2026-09-12
School Database importer with validation and rollback-safe activation.
Added
- Added a one-shot School Database importer:
lab-api import <candidate.db>
- Added SQLite integrity validation before activation.
- Added schema validation for imported School Database files.
- Added safe activation of validated database files.
- Added Unix atomic-rename activation.
- Added rollback-safe activation behavior for Windows.
- Failed imports leave the currently active database unchanged.
- Added importer tests covering validation and activation behavior.
Security and Reliability
- Imported databases are validated before becoming active.
- SQLite integrity checks prevent corrupted databases from being activated.
- Schema validation ensures compatibility with the School Database API.
- Database replacement is performed only after successful validation.
- The running API continues using the existing database if import validation fails.
- The importer does not start the HTTP server.
Configuration
Compatibility
- Existing core API endpoints remain unchanged.
- Existing School Database API routes remain available.
- Existing deployment architecture remains unchanged.
- No additional database server, queue, container stack, or external service is required.
Validation
- All 39 tests passed.
cargo clippy -- -D warnings completed successfully.
- The importer was tested against a real School Database file.
- Production deployment and database activation were verified.
Status
- ✅ Validated School Database importer
- ✅ SQLite integrity and schema validation
- ✅ Safe database activation
- ✅ Rollback-safe replacement behavior
- ✅ One-shot import CLI
- ✅ Existing API compatibility maintained
- 🔒 Runtime remains read-only
[v0.5.0] — 2026-09-08
Improved School Database browsing with pagination, search, and student details.
Added
- Added real pagination totals through the
total field.
- Added debounced School Database search.
- Added clickable student rows in the School frontend.
- Added a student-detail route.
- Added safe student-detail responses.
- Added deterministic ordering for School Database results.
- Added tests for pagination, search, ordering, and student-detail behavior.
Security
- Student details are returned through controlled, read-only API responses.
- Search remains bounded and uses literal substring matching.
- Database access continues to use safe column handling and parameterized SQL.
- Existing Nginx HTTPS and Basic Authentication protections remain unchanged.
Compatibility
- Existing API endpoints remain unchanged.
- Existing table discovery and schema routes remain available.
- Existing deployment architecture remains unchanged.
- No additional runtime service or database infrastructure is required.
Validation
- Pagination totals were verified.
- Deterministic ordering was verified.
- Pagination results were checked for consistency and non-overlap.
- School Database API and frontend behavior were tested.
Status
- ✅ Improved School Database pagination
- ✅ Debounced search
- ✅ Clickable student rows
- ✅ Student-detail route
- ✅ Safe student-detail responses
- ✅ Deterministic result ordering
- 🔒 School Database runtime remains read-only
[v0.4.0] — 2026-09-08
Initial read-only School Database API backed by SQLite.
Added
- Added a read-only School Database API backed by SQLite.
-
Added dynamic table discovery:
-
Added dynamic schema discovery:
GET /school/api/tables/{table}/schema
-
Added paginated table access:
GET /school/api/tables/{table}
- Added bounded literal substring search.
-
Added School Database health endpoint:
-
Added the School Database web portal:
- Added comprehensive database-layer tests covering:
- Table and column validation
- Pagination
- Search
- Schema discovery
- Table discovery
- Deterministic ordering
- Sensitive-column filtering
Security
- School Database access is strictly read-only.
- SQLite is opened using read-only flags.
- Only approved columns are exposed.
- Table and column identifiers are validated and safely quoted.
- SQL queries use parameterized values.
LIKE patterns are escaped safely.
- Pagination and search inputs are bounded.
- Public access remains protected by Nginx HTTPS and Basic Authentication.
- The database is stored outside the repository and is not directly exposed.
Configuration
-
Database path is configured through:
-
Production database path:
/var/lib/lab-api/School.db
-
The API binds to:
-
Nginx remains the public HTTPS and authentication boundary.
Compatibility
- Existing API endpoints remain unchanged.
- The Catalan compatibility alias remains available.
- Existing deployment architecture remains unchanged.
- No additional runtime, database server, container, or external service is required.
Validation
cargo fmt completed successfully.
- Debug test suite passed: 22/22.
- Release test suite passed: 22/22.
- Debug and release builds completed successfully.
Status
- ✅ Read-only School Database API
- ✅ Dynamic table and schema discovery
- ✅ Pagination and bounded search
- ✅ School Database web portal
- ✅ Database-layer test coverage
- ✅ Nginx HTTPS and Basic Authentication integration
- 🔒 School Database scope frozen
- 🔒 Runtime remains read-only
[v0.3.0] — 2026-09-08
Math endpoints and protected API snapshot functionality.
Added
Compatibility
- Existing API routes remain available.
- Existing deployment and authentication architecture remains unchanged.
- The service remains lightweight and self-hosted.
Status
- ✅ Catalan numbers
- ✅ Fibonacci numbers
- ✅ Greatest common divisor
- ✅ Public API information
- ✅ Protected API snapshot
- 🔒 Read-only API scope maintained
[v0.2.0] — 2026-08-30
Added
Backend
- Reports service name, API version, package version, route list, build profile, and environment label.
- Keeps the existing authentication model unchanged.
- Only
/api/v1/snapshot remains protected.
- No new infrastructure or separate service was added.
[v1.0.0] — 2026-08-29
Stable production release: site navigation, consistent styling, and complete API documentation.
Added
Site-wide Navigation Consistency
- Unified navigation across all pages:
- Home
- Projects
- Writing
- Now
- Lab
- Lab navigation link points to
/lab.html.
- Added the proper
.active state on the current page.
- Added navigation to the
lab.html header.
Lab API Page Improvements
- Added a header with navigation and subtitle.
- Added a centered layout matching the main content width.
- Added a footer with copyright information.
- Added a favicon for site branding.
- Integrated the main site stylesheet.
API Documentation
Added complete API.md documentation covering:
- Health, Catalan, and snapshot endpoints
- Request and response examples
curl commands
- HTTP status codes
- Error handling
- Authentication behavior
- Security model
- Nginx routing
- systemd deployment
- Rate-limiting recommendations
- Catalan number
u128 limitations
- Monitoring and integration guidance
Fixed
- Standardized the footer format across all pages.
- Fixed Lab page layout centering.
- Fixed the CSS cascade for Lab API overrides.
- Fixed body-width constraints on the Lab page.
Updated Pages
index.html — Renamed navigation label from “Lab API” to “Lab”.
projects.html — Added Lab to navigation.
writing.html — Added Lab to navigation and updated the footer.
now.html — Added Lab to navigation.
lab.html — Complete overhaul with header, navigation, footer, favicon, and styling.
writing/calculating-pi/index.html — Updated footer and added Lab navigation.
writing/golden-ratio/index.html — Updated footer and added Lab navigation.
writing/history-of-cryptography/index.html — Updated footer and added Lab navigation.
writing/pythagorean-triples/index.html — Updated footer and added Lab navigation.
README.md — Added the Lab API section with a link to API.md.
API.md — Added production-quality API reference documentation.
Status
- ✅ Frontend navigation is consistent.
- ✅ Site styling and layouts are consistent.
- ✅ Lab page includes header, navigation, footer, favicon, and centered layout.
- ✅ API is documented and production-ready.
- ✅ Nginx routing, systemd, HTTPS, and authentication were verified.
- 🔒 No further v1.0.0 feature additions planned.
This release marked the completion of the site redesign and API documentation.
[v0.1.0] — 2026-08-29
Initial release of crypto-lab, a small self-hosted Rust cryptography API.
Added
- SHA-256 hashing endpoint.
- SHA-512 hashing endpoint.
- HMAC-SHA256 generation.
- HMAC-SHA512 generation.
- Constant-time HMAC verification.
- Public health endpoint.
- Public service information endpoint.
- JSON-based HTTP API built with Axum and Tokio.
- Input and request-body size limits.
- Production-oriented systemd service configuration.
- Nginx reverse-proxy deployment under
/crypto-api/.
API
GET /health
GET /v1/info
POST /v1/hash
POST /v1/hmac
POST /v1/hmac/verify
Security
- HMAC verification uses constant-time comparison.
- Cryptographic operations are protected by Nginx Basic Authentication.
- The service binds only to
127.0.0.1:8089.
- Request bodies are limited to 64 KiB.
- Individual textual inputs are limited to 32 KiB.
- No private-key storage, wallet functionality, payment processing, or credential-management features are included.
Infrastructure
- Runs as a dedicated systemd service.
- Exposed through the existing Nginx HTTPS endpoint.
- Reuses the existing authentication configuration.
- Requires no database, queue, container stack, or additional monitoring infrastructure.
Status
- ✅ SHA-256 and SHA-512 hashing
- ✅ HMAC generation and verification
- ✅ Constant-time verification
- ✅ Public service metadata
- ✅ Request-size limits
- ✅ systemd deployment
- ✅ Nginx HTTPS integration
- 🔒 v0.1.0 scope frozen
crypto-lab is intentionally minimal and focused on cryptographic hashing and HMAC experimentation.