* Move One-Time Pad encryption to the browser; delete backend OTP module OTP encryption/decryption is now performed entirely in the browser so messages, keys, and generated pads never leave the originating device. - Add app/src/components/otp.js: a JS port of the former modules/otp/lib.py (encrypt/decrypt, message formatting, validation, and secure pad generation via crypto.getRandomValues with rejection sampling). - Encrypt/Decrypt now run live as the user types or pastes, with inline error messages instead of submit buttons. - Generate New Pad builds the printable HTML locally (blob URL) instead of hitting /api/otp/html. - Migrate all backend OTP tests to app/src/components/otp.test.js with identical data. - Delete the modules/otp backend module and its blueprint registration. * Revoke the One-Time Pad blob URL after the new tab loads Addresses a minor blob-handle leak: handleGenerateNewPad created an object URL on every click but never released it. * Let users choose the One-Time Pad character set Add an "Advanced" accordion under the buttons with three options: A-Z, A-Z/0-9 (default, unchanged), and a custom character set. The chosen set is shared by encrypt, decrypt, and pad generation. - otp.js: parameterize encrypt/decrypt/generate on the alphabet (default OTP_CHARS for back-compat); add OTP_CHARS_ALPHA and validateCharset; input is auto-uppercased only when the set is all-uppercase, so custom sets with lowercase are case-sensitive; the printable pad is labeled with its set. - Apps.js: lift charset state into OTP(); gate encrypt/decrypt/generate on a valid set with inline validation errors. - otp.test.js: add A-Z, custom round-trip, auto-uppercase, validateCharset, and pad-label tests. * Scope inverted-accordion dark background to direct children The rule forcing #171616 on .ui.inverted.accordion .title/.content used a descendant selector, so it leaked onto any nested element using the `content` class — e.g. an ErrorMessage's Message.Content rendered inside SimpleAccordion got a dark band behind its text. Scope to direct children so the accordion still styles its own title/content but not nested components. * Add optional error-detection checksum to the One-Time Pad Adapts the position-weighted checksum from otp-checksum.md to the frontend-only OTP. checksum = sum(position * value) mod N, parameterized on the selected character set (N = chars.length), so it follows whichever pad alphabet is chosen. Position weighting catches transposition errors. - otp.js: add calculateChecksum/appendChecksum/verifyChecksum. - Apps.js: opt-in "Append error-detection checksum" toggle in Advanced (default off). When on, encrypt appends a checksum char; decrypt verifies it, warns on mismatch, and still shows the decrypted text. - otp.test.js: checksum unit tests, charset-variation, and end-to-end vectors. * Show compact checksum status instead of a large warning box Replace the bulky semantic-ui WarningMessage on decrypt with a small inline status line: a green check + "Checksum is valid" or a red x + "Checksum is invalid", shown whenever the checksum option is on and a message is being decrypted. * Fix checksum-mode decrypt truncating messages without a checksum When the "Append error-detection checksum" option was on, Decrypt always stripped the last ciphertext character before decrypting, so a message that carried no trailing checksum (wrong sender setting, body pasted alone, etc.) lost its final character and decrypted to garbage. Add stripChecksum(received, chars), which removes the trailing character only when it actually verifies as the checksum of the preceding characters; a message without a valid checksum is returned intact and flagged invalid. The decrypt UI now uses it. Also broaden test coverage: - stripChecksum tests, including a regression for the truncation bug. - validation error classes (InvalidOTP/Plaintext/Ciphertext) and the longer-than-OTP length guards. - deterministic encrypt/decrypt roundtrip fuzz across several character sets. - generateMessage character-count and charset-membership checks. - end-to-end checksummed encrypt -> format -> strip -> decrypt flow. Use a dedicated InvalidMessage error for the checksum helpers instead of the misleading InvalidPlaintext. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| cypress | ||
| public | ||
| scripts | ||
| src | ||
| .gitignore | ||
| cypress.config.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| serve.json | ||
| tsconfig.json | ||
Getting Started with Create React App
This project was bootstrapped with Create React App.
Available Scripts
In the project directory, you can run:
npm start
Runs the app in the development mode.
Open http://localhost:3000 to view it in your browser.
The page will reload when you make changes.
You may also see any lint errors in the console.
npm test
Launches the test runner in the interactive watch mode.
See the section about running tests for more
information.
npm run build
Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.
Your app is ready to be deployed!
See the section about deployment for more information.
npm run eject
Note: this is a one-way operation. Once you eject, you can't go back!
If you aren't satisfied with the build tool and configuration choices, you can eject at any time. This command will
remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right
into your project so you have full control over them. All of the commands except eject will still work, but they will
point to the copied scripts so you can tweak them. At this point you're on your own.
You don't have to ever use eject. The curated feature set is suitable for small and middle deployments, and you
shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't
customize it when you are ready for it.
Learn More
You can learn more in the Create React App documentation.
To learn React, check out the React documentation.
Code Splitting
This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
Analyzing the Bundle Size
This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
Making a Progressive Web App
This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
Advanced Configuration
This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
Deployment
This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
npm run build fails to minify
This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify