├── README.md ├── chrome-extension ├── .babelrc ├── .gitignore ├── .vscode │ └── settings.json ├── README.md ├── final-extension │ ├── app.bundle.js │ ├── index.html │ ├── jquery.bundle.js │ ├── manifest.json │ ├── tweet_signature128.png │ ├── tweet_signature16.png │ ├── tweet_signature256.png │ ├── tweet_signature32.png │ ├── tweet_signature48.png │ └── tweet_signature64.png ├── images │ ├── extension.png │ ├── result.png │ └── settings.png ├── package.json ├── src │ ├── App.js │ ├── PrivateKeyForm.js │ ├── TwitterGPG.js │ ├── assets │ │ ├── css │ │ │ └── style.css │ │ └── img │ │ │ └── icons │ │ │ ├── tweet_signature128.png │ │ │ ├── tweet_signature16.png │ │ │ ├── tweet_signature256.png │ │ │ ├── tweet_signature32.png │ │ │ ├── tweet_signature48.png │ │ │ └── tweet_signature64.png │ ├── index.html │ └── manifest.json ├── webpack.config.js └── yarn.lock ├── cli ├── bin │ └── tweet ├── package-lock.json └── package.json ├── docs ├── README.md ├── _config.yml ├── index.html ├── javascripts │ └── scale.fix.js ├── params.json └── stylesheets │ ├── github-light.css │ └── styles.css └── website ├── README.md ├── index.html └── static └── bcrypto.bundle.js /README.md: -------------------------------------------------------------------------------- 1 | Tweet Signer: 2 | ============= 3 | 4 | What is it? 5 | ------------ 6 | 7 | A way for you to cryptographically sign tweets, and for others to verify it. 8 | 9 | Signed and verified Tweets ✌ 10 | 11 | Demo: 12 | ---- 13 | 14 | Open: https://nitter.tuxcanfly.me/ 15 | 16 | Paste url: https://twitter.com/shabda/status/1284468335090954242 17 | 18 | Click Fetch. Wait until Public Key, Tweet and Signature fields are auto-populated. 19 | 20 | Click Verify. Should show :✅ 21 | 22 | Video: https://youtu.be/ZbhptAmG__Q 23 | 24 | Spec: 25 | ----- 26 | 27 | * Add a link to your profile bio ending with '.keys' which should be a valid 28 | public key. 29 | 30 | * In case .keys contains multiple keys, the first key will be used. 31 | 32 | * A tweet which needs verification must contain exactly one image attachment 33 | which should be the signature of the tweet as a QR code. 34 | 35 | * The signature must be verifiable against the tweet using the public key from 36 | the profile. 37 | 38 | Why does this exist? 39 | ---------------------- 40 | 41 | "Not Your Keys, Not Your Coin" is a oft-repeated adage. 42 | Exchanges get hacked - but nobody thought Twitter would get hacked, until they did. 43 | 44 | You need to be able to sign your tweets, so even if Twitter gets hacked again, people can verify that the tweet did not come from you. 45 | 46 | How does it work? 47 | -------------------- 48 | 49 | - You install our chrome extension. 50 | - You store your private key in the chrome extension. The private key is only stored locally and never leaves your computer. 51 | - You type your tweet in the extension 52 | - The extension generates the signature and the QR code for the signature 53 | - You download the QR code 54 | - You attach the QR code to the tweet. Your tweet is now signed. Anyone can verify the sanctity of your tweet. Even if posting via twitter gets compromised, nobody can post a signed tweet on your behalf. 55 | 56 | 57 | 58 | Loading the chrome extension 59 | ------------------------------- 60 | 61 | In the `chrome-extension` directory look for the folder => `final-extension`. Follow the steps to below to add the extension to chrome. 62 | 63 | 64 | 1. Open chrome://extensions/ in the chrome browser 65 | 66 | 67 | 2. Enable developer mode by button on the top right 68 | 69 |  70 | 71 | 72 | 3. Click on load unpack button on top left and select the `final-extension` folder 73 | 74 |  75 | 76 | 77 | 4. It will load our chrome extension like below 78 | 79 |  80 | 81 | 5. Enter a private key in settings to get started 82 | 83 |  84 | 85 | 6. Type in the tweet to generate QR Code 86 | 87 |  88 | 89 | 90 | 91 | Usage: 92 | ------------- 93 | 94 | - Install the chrome extension 95 | - Add a private key to the extension 96 | - Host the public key somewhere and add public key url to your profile 97 | - Generate the signature QR code for your tweet and attach it to the tweet 98 | 99 | To verify 100 | ------------- 101 | 102 | - Go to https://nitter.tuxcanfly.me/ 103 | - Paste the url of a tweet you want to verify 104 | - If the tweet is signed, aka has the QR code, it is checked against the tweet contents. If the signature matches, the tweet is marked as verified. 105 | 106 | 107 | LICENSE: 108 | ------------ 109 | 110 | MIT 111 | -------------------------------------------------------------------------------- /chrome-extension/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-react"] 3 | } 4 | -------------------------------------------------------------------------------- /chrome-extension/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/* 3 | node_modules/* 4 | dist/ -------------------------------------------------------------------------------- /chrome-extension/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "standard.autoFixOnSave": true 3 | } -------------------------------------------------------------------------------- /chrome-extension/README.md: -------------------------------------------------------------------------------- 1 | # Tweet Signer Extension for Google Chrome 2 |  3 | 4 | # Running the extension (Method 1): 5 | In the `chrome-extension` directory look for the folder => `final-extension`. Follow the steps to [add the extension](#add-extension-to-chrome) to chrome. 6 | 7 | # Runing Extension (Method 2) 8 | 1. cd into your extension directory 9 | 1. Install dependencies using yarn, i.e. `yarn install` 10 | 2. run `yarn run watch` 11 | 3. webpack will create `dist` directory inside extension directory with the bundled code and keep watching for code changes 12 | 13 | # Add extension to chrome 14 | 15 | To test the extension 16 | 17 | 1. Open chrome://extensions/ in the chrome browser 18 | 19 | 20 | 2. Enable developer mode by button on the top right 21 | 22 |  23 | 24 | 25 | 3. Click on load unpack button on top left and select the `final-extension` folder 26 | 27 |  28 | 29 | 30 | 4. It will load our chrome extension like below 31 | 32 |  33 | 34 | 5. Enter a private key in settings to get started 35 | 36 |  37 | 38 | 6. Type in the tweet to generate QR Code 39 | 40 |  41 | 42 | # Project Structure 43 | 44 | * `src` folder contains everything other than boilerplate code 45 | * `assets` folder contains static assets like css, js files, images and icons 46 | * `index.html` is the default_popup of chrome extension 47 | * `App.js` contains the root component, It renders the TodoList component 48 | * `TwitterGPG.js` contains the TwitterGPG component with all the logic for generating a QRCode from the GPG signature of the tweet 49 | -------------------------------------------------------------------------------- /chrome-extension/final-extension/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |“Not your keys, not your tweets.”
20 | 21 | 22 | 23 |“Not your keys, not your tweets.”
28 |Verified Tweets
Add public key to your profile.
32 |Users will see :
MIT
36 |