{"id":15489566,"url":"https://github.com/catears/private-note","last_synced_at":"2026-01-29T21:02:26.349Z","repository":{"id":40795218,"uuid":"227985233","full_name":"CatEars/private-note","owner":"CatEars","description":"Private note sharing application. Early beta at: ","archived":false,"fork":false,"pushed_at":"2023-01-06T02:21:08.000Z","size":2852,"stargazers_count":2,"open_issues_count":25,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-20T05:10:48.759Z","etag":null,"topics":["end-to-end-encryption","noteshare","subtlecrypto"],"latest_commit_sha":null,"homepage":"https://privnote.catears.xyz","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CatEars.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-14T07:43:28.000Z","updated_at":"2020-12-20T08:45:12.000Z","dependencies_parsed_at":"2023-02-05T02:45:33.054Z","dependency_job_id":null,"html_url":"https://github.com/CatEars/private-note","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/CatEars/private-note","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatEars%2Fprivate-note","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatEars%2Fprivate-note/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatEars%2Fprivate-note/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatEars%2Fprivate-note/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CatEars","download_url":"https://codeload.github.com/CatEars/private-note/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatEars%2Fprivate-note/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28884700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T19:55:09.949Z","status":"ssl_error","status_checked_at":"2026-01-29T19:55:08.490Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["end-to-end-encryption","noteshare","subtlecrypto"],"created_at":"2024-10-02T07:06:26.629Z","updated_at":"2026-01-29T21:02:26.331Z","avatar_url":"https://github.com/CatEars.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Private Note\n\n![Tests](https://github.com/CatEars/private-note/workflows/ci/badge.svg)\n[![](https://images.microbadger.com/badges/version/catears/private-note.svg)](https://microbadger.com/images/catears/private-note 'Get your own version badge on microbadger.com')\n\nA simple and forever free application that uses basic end to end encryption to\nshare secrets. Once read, the secrets are destroyed.\n\n#### Try it out with docker\n\n```\ndocker run -p 3000:3000 catears/private-note\n```\n\nand visit [http://localhost:3000](http://localhost:3000).\n\n## Security\n\nA user, the writer, wants to create a note. When the user has written the\nmessage and entered the time to live for the note, the page will do the\nfollowing:\n\nThe page will generate a a random IV using\n[Crypto.getRandomValues()](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues)\nand generate a key using\n[SubtleCrypto.generateKey()](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey).\n\nThe note will be encrypted, using AES-GCM, with the generated key and the IV\nwith the help of\n[SubtleCrypto.encrypt()](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt).\n\nAdditionally, the page will also generate a fingerprint of the original message,\nwith SHA-512, using\n[SubtleCrypto.digest()](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest).\n\nThe page will then send the encrypted message, the IV, the fingerprint and the\ntime to live for the note to the server, where it will be stored. The server\nwill reply with a unique ID (uuid v4). The page will then create and show a link\nwith the uuid and a urlencoded key. The key is part of the fragment of the url,\nwhich is never sent to the server.\n\nAt this point the user will send the link to the receiver over the appropriate\nchannels. The receiver will go to the link and the server will send the\nencrypted secret, the salt, the fingerprint and the IV to the receiver. The\nserver will redirect to an error page if the note has already been accessed more\ntimes than allowed. Otherwise, the page will automatically decode the key, that\nis part of the URL, and use it to decrypt the encrypted message. If the\nfingerprint of the decrypted text is equal to the fingerprint sent from the\nserver the receiver will be able to view it in a textfield and copy the it to\ntheir clipboard. If the fingerprint is not equal to the expected value, an error\nmessage will be shown.\n\n## Development\n\nFirst time?\n\n```bash\n$ cd frontend \u0026\u0026 npm i \u0026\u0026 npm run bootstrap \u0026\u0026 cd ../backend \u0026\u0026 npm i\n```\n\nStart frontend in one terminal:\n\n```bash\n$ cd frontend \u0026\u0026 npm start\n```\n\nStart backend in another terminal/tab:\n\n```bash\n$ cd backend \u0026\u0026 npm start\n```\n\nand then head to `http://localhost:3000/`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatears%2Fprivate-note","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatears%2Fprivate-note","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatears%2Fprivate-note/lists"}