UNPKG

secure-peer

Version:

peer-to-peer encrypted streams using public key cryptography and signing

43 lines (33 loc) 1.08 kB
var hash = require('./hash'); var verify = require('./verify'); module.exports = Frame; function Frame () { if (!(this instanceof Frame)) return new Frame; this.seq = { pack : 0, unpack : 0 }; } Frame.prototype.pack = function (key, token, msg) { var seq = (this.seq.pack ++) + ','; if (msg === undefined) { // end message return JSON.stringify([ hash(key, seq + token) ]) + '\n'; } var s = msg.toString('base64'); return JSON.stringify([ s, hash(key, seq + token + s) ]) + '\n'; }; Frame.prototype.unpack = function (key, token, buf) { try { var x = JSON.parse(buf); } catch (e) { return undefined } if (!Array.isArray(x)) return undefined; if (x.length !== 2 && x.length !== 1) return undefined; var seq = (this.seq.unpack ++) + ','; var v; if (x.length === 1) { v = verify(key, seq + token, x[0]); if (v) return 'end' else return undefined } v = verify(key, seq + token + x[0], x[1]); if (!v) return undefined; return x; };