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