diff --git a/www/common/curve.js b/www/common/curve.js index 62432a703..f0707662e 100644 --- a/www/common/curve.js +++ b/www/common/curve.js @@ -2,35 +2,36 @@ define([ '/bower_components/tweetnacl/nacl-fast.min.js', ], function () { var Nacl = window.nacl; - var Curve = {}; // nacl.box(message, nonce, theirPublicKey, mySecretKey) Curve.encrypt = function (message, theirPub, mySecret) { var buffer = Nacl.util.decodeUTF8(message); - var nonce = Nacl.randomBytes(24); - var box = Nacl.box(buffer, nonce, theirPub, mySecret); - - return [Nacl.util.encodeBase64(nonce), Nacl.util.encodeBase64(box)].join('|'); + return Nacl.util.encodeBase64(nonce) + '|' + Nacl.util.encodeBase64(box); }; // nacl.box.open(box, nonce, theirPublicKey, mySecretKey) Curve.decrypt = function (packed, theirPub, mySecret) { var unpacked = packed.split('|'); var nonce = Nacl.util.decodeBase64(unpacked[0]); - var box = Nacl.util.decodeBase64(unpacked[1]); - var message = Nacl.box.open(box, nonce, theirPub, mySecret); - return Nacl.util.encodeUTF8(message); }; - Curve.createEncryptor = function () { - console.log("PEWPEW"); - throw new Error("E_NOT_IMPL"); + Curve.createEncryptor = function (theirPublic, mySecret) { + var theirs = Nacl.util.decodeBase64(theirPublic); + var mine = Nacl.util.decodeBase64(mySecret); + return { + encrypt: function (msg) { + return Curve.encrypt(msg, theirs, mine); + }, + decrypt: function (packed) { + return Curve.decrypt(packed, theirs, mine); + } + }; }; return Curve; diff --git a/www/invite/main.js b/www/invite/main.js index 900c02e58..aa11fca16 100644 --- a/www/invite/main.js +++ b/www/invite/main.js @@ -9,24 +9,8 @@ define([ var Nacl = window.nacl; - var alice = Nacl.box.keyPair(); - var bob = Nacl.box.keyPair(); - - var packed = Curve.encrypt('pewpew', bob.publicKey, alice.secretKey); - console.log(packed); - - var message = Curve.decrypt(packed, alice.publicKey, bob.secretKey); - - console.log(message); - - Cryptpad.removeLoadingScreen(); - Cryptpad.alert(message); - - return {}; - //var Messages = Cryptpad.Messages; var onReady = function () { - if (!APP.initialized) { APP.initialized = true; } @@ -37,22 +21,42 @@ define([ var onDisconnect = function () {}; var onChange = function () {}; - var andThen = function (profileHash) { - var secret = Cryptpad.getSecrets('profile', profileHash); - var readOnly = APP.readOnly = secret.keys && !secret.keys.editKeyStr; + var andThen = function () { + var hash = window.location.hash.slice(1); + + var info = Cryptpad.parseTypeHash('invite', hash); + console.log(info); + + if (!info.pubkey) { + Cryptpad.removeLoadingScreen(); + Cryptpad.alert('invalid invite'); + return; + } + + var proxy = Cryptpad.getProxy(); + var mySecret = proxy.curvePrivate; + + var encryptor = Curve.createEncryptor(info.pubkey, mySecret); + + Cryptpad.removeLoadingScreen(); + var message = 'hello!'; + Cryptpad.alert(message); + var listmapConfig = { data: {}, - websocketURL: Cryptpad.getWebsocketURL(), - channel: secret.channel, - readOnly: readOnly, - validateKey: secret.keys.validateKey || undefined, - crypto: Crypto.createEncryptor(secret.keys), + network: Cryptpad.getNetwork(), + channel: info.channel, + readOnly: false, //undefined, + validateKey: undefined, + crypto: encryptor, userName: 'profile', logLevel: 1, }; var lm = APP.lm = Listmap.create(listmapConfig); lm.proxy.on('create', onInit) - .on('ready', onReady) + .on('ready', function () { + console.log(JSON.stringify(lm.proxy)); + }) .on('disconnect', onDisconnect) .on('change', [], onChange); }; @@ -84,11 +88,7 @@ define([ Cryptpad.ready(function () { Cryptpad.reportAppUsage(); - - if (window.location.hash) { - return void andThen(window.location.hash.slice(1)); - } + andThen(); }); }); - });