A => crypto.js +27 -0
@@ 1,27 @@
+var fs = require('fs')
+var nacl = require('tweetnacl')
+ nacl.util = require('tweetnacl-util')
+
+function keys () {
+
+ if (!fs.existsSync(__dirname + '/keypair')) {
+ var keypair = nacl.box.keyPair()
+ var keys = {
+ publicKey: nacl.util.encodeBase64(keypair.publicKey),
+ secretKey: nacl.util.encodeBase64(keypair.secretKey)
+ }
+ fs.writeFileSync(__dirname + '/keypair', JSON.stringify(keys), 'UTF-8')
+ } else {
+ var keys = JSON.parse(fs.readFileSync(__dirname + '/keypair', 'UTF-8'))
+ var keypair = {
+ publicKey: nacl.util.decodeBase64(keys.publicKey),
+ secretKey: nacl.util.decodeBase64(keys.secretKey)
+ }
+ }
+ console.log('Your public key is: ' + keys.publicKey)
+ return keypair
+}
+
+module.exports = {
+ keys
+}
A => dexbox.js +28 -0
@@ 1,28 @@
+var fs = require('fs')
+var nacl = require('tweetnacl')
+ nacl.util = require('tweetnacl-util')
+
+var dex = require('./crypto.js')
+
+var keys = dex.keys()
+
+var recp = nacl.util.decodeBase64(process.argv[2])
+
+var message = nacl.util.decodeUTF8(fs.readFileSync(__dirname + '/' + process.argv[3], 'UTF-8'))
+
+var nonce = nacl.randomBytes(nacl.box.nonceLength)
+
+var boxed = nacl.box(message, nonce, recp, keys.secretKey)
+
+var messagetosave = nacl.util.encodeBase64(keys.publicKey) + '~' + nacl.util.encodeBase64(nonce) + '~' + nacl.util.encodeBase64(boxed)
+
+console.log(messagetosave)
+
+fs.writeFile(__dirname + '/outmsg', messagetosave, 'UTF-8', function (err, success) {
+ if (err) { throw err }
+ if (success) {
+ console.log('saved your message to a file called private message')
+ }
+})
+
+
A => dexunbox.js +40 -0
@@ 1,40 @@
+var fs = require('fs')
+var nacl = require('tweetnacl')
+ nacl.util = require('tweetnacl-util')
+
+var dex = require('./crypto.js')
+
+var keys = dex.keys()
+
+var path = process.argv[2]
+
+function unbox (message) {
+ var sep = message.split('~')
+ if (sep.length === 3) {
+ var unboxed = nacl.box.open(
+ nacl.util.decodeBase64(sep[2]),
+ nacl.util.decodeBase64(sep[1]),
+ nacl.util.decodeBase64(sep[0]),
+ keys.secretKey
+ )
+ if (unboxed) {
+ console.log('Message from: ' + sep[0])
+ console.log(nacl.util.encodeUTF8(unboxed))
+ }
+ }
+}
+
+fs.lstat(path, function (err, stats) {
+ if (stats.isFile()) {
+ var message = fs.readFileSync(path, 'UTF-8')
+ unbox(message)
+ }
+ if (stats.isDirectory()) {
+ fs.readdir(path, (err, files) => {
+ files.forEach(file => {
+ var message = fs.readFileSync(path + '/' + file, 'UTF-8')
+ unbox(message)
+ })
+ })
+ }
+})
A => package-lock.json +16 -0
@@ 1,16 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "tweetnacl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz",
+ "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A=="
+ },
+ "tweetnacl-util": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz",
+ "integrity": "sha1-RXbBzuXi1j0gf+5S8boCgZSAvHU="
+ }
+ }
+}
A => package.json +16 -0
@@ 1,16 @@
+{
+ "name": "dexbox",
+ "version": "1.0.0",
+ "description": "A dead simple way to encrypt and decrypt messages using TweetNaCl.js",
+ "main": "dexbox.js",
+ "dependencies": {
+ "tweetnacl": "^1.0.1",
+ "tweetnacl-util": "^0.15.0"
+ },
+ "devDependencies": {},
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "MIT"
+}
A => readme.md +51 -0
@@ 1,51 @@
+### dexbox
+
+This is a dead stupid simple way to encrypt a message using `tweetnacl.box` to a recp.
+
+The idea for this dexbox wasn't mine, but was first put into words by former roomie of mine in Oakland named "Johnny" who at last known contact was hoboing around the San Francisco bay area.
+
+The idea for the app is to collect a bunch of messages and see if you can decrypt them, if you can't decrypt the messages then you're out of the loop!
+
+You'll know who sent the messages, but not who can decrypt them.
+
+How you distribute those messages is up to you; use your imagination.
+
+
+### usage
+
+To use this you'll need Node.js and you'll need to type `npm install`.
+
+To encrypt a message you'll need to write a message and save it as a file. Then type
+
+```
+node dexbox <publickey> filename
+```
+
+If you don't already have a keypair, `dexbox` will generate you an `ed25519curve` keypair and save it to disk as `keypair`.
+
+example:
+```
+node dexbox 'aW83Fju6D89MZJdZrOb39++9br5S+TYKPXjg2SSEhXE=' file.txt
+```
+
+If you've done everything right, dexbox will encrypt the message to the recp you've specified and then save the file as 'outmsg'. It'll also console.log the boxed message.
+
+### protocol
+
+The dexbox protocol is three base64 objects:
+
+```
+<publickey>~<nonce>~<boxedmessage>
+```
+
+To decrypt a message...
+
+
+
+
+
+
+
+
+
+