implement and use prototype curve encryptors

This commit is contained in:
ansuz 2017-07-06 10:22:20 +02:00
parent d293ba4d44
commit df53166b37
2 changed files with 42 additions and 41 deletions

View file

@ -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;

View file

@ -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();
});
});
});