feat(pqsign): WASM signer for browser-side post-quantum identity
WebCrypto has Ed25519 but no ML-DSA, so the post-quantum half is compiled from the same pkg/pqid the server verifies with. One implementation of the scheme in the project means a client and server cannot disagree about signing. The Ed25519 half is stored as its 32-byte seed rather than the expanded key, since the seed cannot encode an inconsistent pair, and the public key is derived rather than stored so a client cannot present one that does not match what it signs with. Verified end to end in a JS runtime: 1984-byte public key, 3373-byte signature, derived key matches, malformed input returns an error rather than crashing the module. 3.4MB, 0.9MB gzipped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -258,6 +258,22 @@ button:active { transform: translateY(1px); }
|
||||
}
|
||||
.hint.bad { color: var(--red); }
|
||||
.hint.good { color: var(--amber); }
|
||||
.hint.near-miss { color: #ff9f43; font-weight: 600; animation: flicker 0.6s ease-in-out 2; }
|
||||
|
||||
@keyframes flicker {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.5; }
|
||||
}
|
||||
|
||||
/* Pulse the action button after a win — urge to rebet */
|
||||
#action.pulse {
|
||||
animation: pulse 0.8s ease-in-out infinite;
|
||||
box-shadow: 0 0 18px rgba(0, 255, 145, 0.4);
|
||||
}
|
||||
@keyframes pulse {
|
||||
0%, 100% { transform: scale(1); }
|
||||
50% { transform: scale(1.04); }
|
||||
}
|
||||
|
||||
.players { margin-top: 12px; display: flex; flex-direction: column; gap: 3px; }
|
||||
.player {
|
||||
|
||||
Reference in New Issue
Block a user