signal-channel
Version:
A signal channel that empowers webrtc
78 lines (56 loc) • 1.85 kB
JavaScript
var crypto = require('crypto')
var fs = require('fs')
var assert = require('assert')
var mac = require('macgyver')()
var PRIVATE = fs.readFileSync(__dirname + '/keys/test1')
var PUBLIC = fs.readFileSync(__dirname + '/keys/test1.pem')
var PRIVATE2 = fs.readFileSync(__dirname + '/keys/test2')
var PUBLIC2 = fs.readFileSync(__dirname + '/keys/test2.pem')
var keys = {}
var ids = {
}
function getKey(id) {
return keys[id]
}
var security = require('../security')
var secure = security(keys, PRIVATE, PUBLIC)
var secure2 = security(keys, PRIVATE2, PUBLIC2)
var me_id
keys[me_id = secure.createId()] = PUBLIC
var sign = secure.sign = mac(secure.sign).atLeast(1)
var verify = secure.verify = mac(secure.verify).atLeast(1)
//check the verify and sing methods are correct.
var update = ['id', 'value', Date.now(), me_id]
update.push(sign(update))
var isVerified = false
verify(update, function (err, verified) {
assert.strictEqual(verified, true)
isVerified = true
})
assert.ok(isVerified)
var Emitter = require('../events')
var e = new Emitter(secure)
ids.e = e.id
var d = new Emitter(security(keys, '', ''))
//emitting from f should be ignored. because the signature is no good.
var f = new Emitter(secure2)
ids.f = f.id
e.emit('hello', {world: true})
var es = e.createStream()
es.pipe(d.createStream()).pipe(es)
//this should be the signed update.
d.on('hello', mac(function (message, timestamp, id, sign) {
console.log(message, timestamp, id, sign)
assert.deepEqual(message, {world: true})
assert.equal(id, ids.e)
}).once())
var fs = f.createStream()
fs.pipe(d.createStream()).pipe(fs)
//should be the next update
var n = 0
d.on('unverified_data', mac(function (update) {
assert.equal(update[3], ids.f)
assert.equal(update[1], 'ignore me')
assert.equal(update[0], 'hello')
}).once())
f.emit('hello', 'ignore me')