ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Browser-based Schnorr signature demo — BIP-340. Sign and verify over secp256k1, then reuse one nonce across two messages and watch the private key fall out by algebra. Real curve arithmetic. No backend.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
An interactive, browser-only lab for BIP-340 Schnorr signatures. Generate a key, sign a message, and verify it with real elliptic-curve arithmetic — then step through the signing equation, reuse a nonce to watch the private key fall out by algebra, and see how two signatures add into one.
Not production cryptography — a teaching demo. Keys are generated per-session in memory and never stored or transmitted. There is no backend. For real signing, use the audited @noble/curves schnorr implementation — which this demo cross-checks against byte-for-byte.檢視完整 README ↗Schnorr Signatures · BIP-340 · secp256k1
An interactive, browser-only lab for BIP-340 Schnorr signatures. Generate a key, sign a message, and verify it with real elliptic-curve arithmetic — then step through the signing equation, reuse a nonce to watch the private key fall out by algebra, and see how two signatures add into one.
Not production cryptography — a teaching demo. Keys are generated per-session in memory and never stored or transmitted. There is no backend. For real signing, use the audited
@noble/curvesschnorrimplementation — which this demo cross-checks against byte-for-byte.
Schnorr is the signature ECDSA wishes it were: one clean, linear equation.
sign: s = k + e·x e = tagged-hash(R.x ‖ P.x ‖ m)
verify: s·G = R + e·P R = k·G, P = x·G
The primitives are BIP-340 Schnorr over secp256k1 (x-only public keys, tagged hashes, 64-byte signatures) with BIP-340 deterministic nonce derivation. Group arithmetic comes from @noble/curves; the BIP-340 layer itself — tagged hashes, the commit/challenge/respond equation, x-only/even-y encoding, and verification — is hand-rolled in src/schnorr/bip340.ts so every intermediate value is inspectable. The security model is standard EUF-CMA signatures: unforgeable without the private key, provided the nonce is never reused.
That last clause is the whole drama of this lab. Schnorr's linearity is exactly what makes multisig and threshold signing possible — and exactly what turns one reused nonce into total key compromise.
R, challenge e, respond s), the 64-byte signature, and a compute-both-sides verification that shows s·G and R + e·P byte-for-byte. A "Break it" button flips one message byte and watches the real verifier reject it, an optional BIP-340 details disclosure exposes the even-y/parity normalization on real intermediates, and copy/export/shareable-verify-link actions handle only public artifacts (private key copy is separately marked).s·G against R + e·P. Curated presets cover a valid signature and the malformed rejections (off-curve key, out-of-range scalar, changed message, wrong length).s·G = (k + e·x)·G = R + e·P. Motion is tied to your clicks; nothing loops on its own.x = (s₁ − s₂)·(e₁ − e₂)⁻¹ mod n and shows the recovered key equals the real secret. Isolated and clearly marked broken — never the default path.verify(), including the malformed cases that must be rejected (point off the curve, out-of-range scalars, negated values). Each row expands to its full artifacts and the exact failing stage, and can be sent to the Verify Workbench. Green means our verdict matched the spec.s₁, s₂ that literally add into one combined signature the ordinary verifier accepts against the summed key — the seed of Schnorr multisig, pointing to MuSig2 and FROST.Several exhibits end with an optional quick check — a one-question prediction with an immediate explanation — targeting a common misconception. The lab stays fully usable whether or not you answer them.
@noble/curves, libsecp256k1, or an equivalent audited library.https://systemslibrarian.github.io/crypto-lab-schnorr-forge/
Sign a message, flip a byte and watch verification fail, force a nonce reuse and recover a key, and combine two signers into one signature — all in the browser, no install.
k leak the private key by subtraction (Exhibit 4). The same root cause sank the Sony PlayStation 3 signing key (2010) and has drained Bitcoin wallets — those were ECDSA, where the recovery algebra differs in detail, but the fatal ingredient is identical: one k used twice.R/s, off-curve points, and out-of-range scalars (Exhibit 5).BIP-340 Schnorr is deployed in Bitcoin Taproot (activated 2021) for single-key and multisig spending, and underpins MuSig2 key aggregation and FROST threshold signing. The same commit-challenge-respond structure is the Schnorr identification protocol behind much of the zero-knowledge and threshold-signature literature.
What "not production crypto" concretely means here:
@noble/curves (which is independently audited) and the official vectors — but it has not itself received an independent security audit.bitcoin/bips bip-0340/test-vectors.csv; the differential oracle is @noble/curves v2. Group arithmetic (point mul/add, field sqrt, scalar inverse) is Noble's; tagged hashes, the sign/verify equation, x-only/even-y encoding, nonce-reuse recovery, and the textbook aggregation teaser are hand-rolled. The aggregation panel is intentionally textbook full-point Schnorr, not BIP-340.Bottom line: great for learning exactly what BIP-340 signs and why a signature passes or fails; never for protecting real funds.
npm install
npm run dev # http://localhost:5173/crypto-lab-schnorr-forge/
npm run build # typecheck + production build to dist/
npm test # unit tests incl. BIP-340 KATs
npm run size-budget # compressed-bundle budget (build first)
npm run test:a11y # WCAG 2.1 AA axe gate, both themes (build first)
npm run test:e2e # functional flows on Chromium + a mobile viewport
npm run test:e2e:all # full matrix: Chromium, Firefox, WebKit, mobile
src/**/*.test.ts), run in CI on every push and before every merge.src/schnorr/vectors.ts holds all 19 official test vectors; src/schnorr/vectors.test.ts checks verification against every row and reproduces the exact expected signature for the 8 signing vectors. Our signatures are additionally cross-checked byte-for-byte against @noble/curves schnorr in a differential sweep across 40 keys/messages/aux/lengths (src/schnorr/bip340.test.ts), and every verifier rejection branch and pipeline stage is named in a test.src/schnorr/field.test.ts proves malformed hex fails closed (no partial parse) and exercises scalar/coordinate boundaries (0, 1, n-1, p).src/schnorr/attack.test.ts proves nonce-reuse recovery returns the exact private key across many keys, and fails closed when nonces differ or messages coincide.@axe-core/playwright scans the production build for zero WCAG 2.1 A/AA violations in both themes (e2e/a11y.spec.ts).All arithmetic runs in the browser in a few milliseconds per operation. There is no backend and no network I/O after the initial static load. A CI compressed-size budget (scripts/size-budget.mjs) holds the bundle to ≤ 35 kB gzip JS and ≤ 10 kB gzip CSS (currently ~27 kB / ~3 kB).
Part of the Crypto Lab suite.
"So whether you eat or drink or whatever you do, do it all for the glory of God." — 1 Corinthians 10:31
e2e/flows.spec.ts.github/workflows/ci.yml) runs typecheck, unit tests, build, the size budget, the a11y gate, and the cross-browser flows before merge, with no Pages write permissions; deploy.yml re-runs the gates and ships to Pages only from main.