UNPKG

isock

Version:

Web -> Non-Web connectionusing Socket.io

132 lines (131 loc) 3.97 kB
if (module !== undefined) { isock = require("./isock.client.js"); simplersa = require("simplersa"); } isocks = (function (o, cb = (function () { })) { var d = (function (want, def) { return want || def; }); o = d(o, {}); o.server = d(o.server, "localhost"); o.port = d(o.port, 24681); var conn = isock({ server: o.server, port: o.port }); var secure = false; var server_rsa = false; var client_rsa = false; var rsa = false; var on_data = (function () { }); var on_disconnect = (function () { }); var encrypt = (function (rsa, data) { if (rsa !== null) { return rsa.enc(data); } return false; }); var decrypt = (function (rsa, data) { if (rsa !== null) { return rsa.dec(data); } return false; }); conn.on_disconnect(function () { conn.close(); conn.start(); }); conn.on_receive(function (data) { if (data.secure) { data.data = JSON.parse(decrypt(rsa, data.data), true)[0]; } on_data(data.data); }); conn.on_connect(function () { conn.on("secure-1", function (data) { var key = data.key; var rsa1 = simplersa(); rsa1.set.pub(key); server_rsa = rsa1; var rsa2 = simplersa(); rsa2.gen.pri(); client_rsa = rsa2; key = rsa1.enc(rsa2.get.pub()); conn.emit("secure-2", { key: key }); }); conn.on("secure-2", function (data) { var key = data.key; var dkey = decrypt(client_rsa, key); var rsa1 = simplersa(); rsa1.set.pub(dkey); server_rsa = rsa1; var rsa2 = simplersa(); rsa2.gen.pri(); client_rsa = rsa2; key = rsa1.enc(rsa2.get.pub()); conn.emit("secure-3", { key: key }); }); conn.on("secure-3", function (data) { var key = data.key; var dkey = decrypt(client_rsa, key); var rsa1 = simplersa(); rsa1.set.pub(dkey); server_rsa = rsa1; var rsa2 = simplersa(); rsa2.gen.pri(); client_rsa = rsa2; key = rsa1.enc(rsa2.get.pri()); rsa = rsa2; conn.emit("secure-done", { key: key }); }); conn.on("secure-done", function (data) { if (data) { secure = true; cb({ send: send, rsend: rsend, on_data: (function (IN) { on_data = IN; }), on_disconnect: (function (IN) { on_disconnect = IN; }), close: (function () { conn.close(); }) }); } }); conn.on("get-secure", function (data) { //console.log(data); //console.log("nice request"); conn.emit("secure-1", true); }); }); var send = (function (data) { if (secure) { data = encrypt(rsa, data); } conn.send({ secure: secure, data: data }); }); var rsend = (function (data, reply) { if (secure) { data = encrypt(rsa, data); } conn.rsend({ secure: secure, data: data }, function (data) { if (secure) { data = JSON.parse(decrypt(rsa, data), true)[0]; } reply(data); }); }); conn.start(); }); isocks_client = isocks; if (module !== undefined) { module.exports = isocks; }