def testRaetPreSharedKeysPromiscous(tdir): alphaSigner = NaclSigner() betaSigner = NaclSigner() logger.debug("Alpha's verkey {}".format(alphaSigner.verhex)) logger.debug("Beta's verkey {}".format(betaSigner.verhex)) alpha = RoadStack(name='alpha', ha=genHa(), sigkey=alphaSigner.keyhex, auto=AutoMode.always, basedirpath=tdir) beta = RoadStack(name='beta', ha=genHa(), sigkey=betaSigner.keyhex, main=True, auto=AutoMode.always, basedirpath=tdir) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha, verkey=betaSigner.verhex) alpha.addRemote(betaRemote) alpha.allow(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def testPromiscuousConnection(tdir, keysAndNames): # Simulating node to client connection alphaSighex, alphaPrikey, alphaVerhex, alphaPubkey, alphaName, betaSighex, \ betaPrikey, betaVerhex, betaPubkey, betaName = keysAndNames alpha = RoadStack(name=alphaName, ha=genHa(), sigkey=alphaSighex, prikey=hexlify(alphaPrikey), auto=AutoMode.always, basedirpath=tdir) beta = RoadStack(name=betaName, ha=genHa(), main=True, sigkey=betaSighex, prikey=hexlify(betaPrikey), auto=AutoMode.always, basedirpath=tdir) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def testRaetPreSharedKeysNonPromiscous(tdir): alphaSigner = SimpleSigner() betaSigner = SimpleSigner() alphaPrivateer = Privateer() betaPrivateer = Privateer() logger.debug("Alpha's verkey {}".format(alphaSigner.naclSigner.verhex)) logger.debug("Beta's verkey {}".format(betaSigner.naclSigner.verhex)) alpha = RoadStack(name='alpha', ha=genHa(), sigkey=alphaSigner.naclSigner.keyhex, prikey=alphaPrivateer.keyhex, auto=AutoMode.never, basedirpath=tdir) beta = RoadStack(name='beta', ha=genHa(), sigkey=betaSigner.naclSigner.keyhex, prikey=betaPrivateer.keyhex, main=True, auto=AutoMode.never, basedirpath=tdir) alpha.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": betaSigner.naclSigner.verhex, "pubhex": betaPrivateer.pubhex }, "beta") beta.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": alphaSigner.naclSigner.verhex, "pubhex": alphaPrivateer.pubhex }, "alpha") try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.allow(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def action(self): self.stats_req.value = deque() minionStack = self.road_stack.value # Create Master Stack self.store.stamp = 0.0 masterStack = RoadStack(store=self.store, name='master', ha=('', raeting.RAET_PORT), role='master', main=True, cleanremote=True, period=3.0, offset=0.5) self.event_stack.value = masterStack minionRemoteMaster = RemoteEstate(stack=minionStack, fuid=0, sid=0, ha=masterStack.local.ha) minionStack.addRemote(minionRemoteMaster) # Make life easier masterStack.keep.auto = raeting.AutoMode.always.value minionStack.keep.auto = raeting.AutoMode.always.value minionStack.join(minionRemoteMaster.uid) serviceRoads([minionStack, masterStack]) minionStack.allow(minionRemoteMaster.uid) serviceRoads([minionStack, masterStack])
def postinitio(self): ''' Setup stack instance ''' sigkey = self.local.data.sigkey prikey = self.local.data.prikey name = self.local.data.name dirpath = os.path.abspath( os.path.join(self.opts.value['cachedir'], 'raet')) auto = self.local.data.auto main = self.local.data.main ha = (self.opts.value['interface'], self.opts.value['raet_port']) eid = self.local.data.eid local = LocalEstate(eid=eid, name=name, ha=ha, sigkey=sigkey, prikey=prikey) txMsgs = self.txmsgs.value rxMsgs = self.rxmsgs.value safe = salting.SaltSafe(opts=self.opts.value) self.stack.value = RoadStack(local=local, store=self.store, name=name, auto=auto, main=main, dirpath=dirpath, safe=safe, txMsgs=txMsgs, rxMsgs=rxMsgs) self.stack.value.Bk = raeting.bodyKinds.msgpack
def __init__(self, *args, **kwargs): checkPortAvailable(kwargs['ha']) basedirpath = kwargs.get('basedirpath') keep = RoadKeep(basedirpath=basedirpath, stackname=kwargs['name'], auto=kwargs.get('auto'), baseroledirpath=basedirpath) # type: RoadKeep kwargs['keep'] = keep localRoleData = keep.loadLocalRoleData() sighex = kwargs.pop('sighex', None) or localRoleData['sighex'] if not sighex: (sighex, _), (prihex, _) = getEd25519AndCurve25519Keys() else: prihex = ed25519SkToCurve25519(sighex, toHex=True) kwargs['sigkey'] = sighex kwargs['prikey'] = prihex self.msgHandler = kwargs.pop('msgHandler', None) # type: Callable # if no timeout is set then message will never timeout self.messageTimeout = kwargs.pop('messageTimeout', 0) self.raetStack = RoadStack(*args, **kwargs) if self.ha[1] != kwargs['ha'].port: error("the stack port number has changed, likely due to " "information in the keep. {} passed {}, actual {}".format( kwargs['name'], kwargs['ha'].port, self.ha[1])) self._created = time.perf_counter() self.coro = None self._conns = set() # type: Set[str]
def action(self): ''' enter action should only run once to setup road stack. moved from postinitio so can do clean up before stack is initialized do salt raet road stack setup at enter ''' kind = self.opts.value['__role'] # application kind if kind not in daemons.APPL_KINDS: emsg = ("Invalid application kind = '{0}'.".format(kind)) log.error(emsg + '\n') raise ValueError(emsg) role = self.opts.value.get('id', '') if not role: emsg = ("Missing role required to setup RoadStack.") log.error(emsg + "\n") raise ValueError(emsg) name = "{0}_{1}".format(role, kind) sigkey = self.local.data.sigkey prikey = self.local.data.prikey main = self.opts.value.get('raet_main', self.local.data.main) mutable = self.opts.value.get('raet_mutable', self.local.data.mutable) always = self.opts.value.get('open_mode', False) mutable = mutable or always # open_made when True takes precedence uid = self.local.data.uid ha = (self.opts.value['interface'], self.opts.value['raet_port']) basedirpath = os.path.abspath( os.path.join(self.opts.value['cachedir'], 'raet')) txMsgs = self.txmsgs.value rxMsgs = self.rxmsgs.value keep = salting.SaltKeep(opts=self.opts.value, basedirpath=basedirpath, stackname=name) self.stack.value = RoadStack(store=self.store, keep=keep, name=name, uid=uid, ha=ha, role=role, sigkey=sigkey, prikey=prikey, main=main, kind=daemons.APPL_KINDS[kind], mutable=mutable, txMsgs=txMsgs, rxMsgs=rxMsgs, period=3.0, offset=0.5) if self.opts.value.get('raet_clear_remotes'): for remote in self.stack.value.remotes.values(): self.stack.value.removeRemote(remote, clear=True) self.stack.puid = self.stack.value.Uid # reset puid
def testNonPromiscousConnectionWithOneKey(tdir, keysAndNames): # Simulating node to node connection alphaSighex, alphaPrikey, alphaVerhex, alphaPubkey, alphaName, betaSighex,\ betaPrikey, betaVerhex, betaPubkey, betaName = keysAndNames alpha = RoadStack(name=alphaName, ha=genHa(), sigkey=alphaSighex, prikey=hexlify(alphaPrikey), auto=AutoMode.never, basedirpath=tdir) beta = RoadStack(name=betaName, ha=genHa(), sigkey=betaSighex, prikey=hexlify(betaPrikey), main=True, auto=AutoMode.never, basedirpath=tdir) alpha.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": betaVerhex, "pubhex": hexlify(betaPubkey) }, betaName) beta.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": alphaVerhex, "pubhex": hexlify(alphaPubkey) }, alphaName) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.allow(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def testPromiscuousConnection(tdir): alpha = RoadStack(name='alpha', ha=genHa(), auto=AutoMode.always, basedirpath=tdir) beta = RoadStack(name='beta', ha=genHa(), main=True, auto=AutoMode.always, basedirpath=tdir) try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) finally: cleanup(alpha, beta)
def setupAlpha(ha): nonlocal alpha alpha = RoadStack(name='alpha', ha=ha, sigkey=alphaSigner.keyhex, prikey=alphaPrivateer.keyhex, auto=AutoMode.never, basedirpath=tdir) alpha.keep.dumpRemoteRoleData({ "acceptance": Acceptance.accepted.value, "verhex": betaSigner.verhex, "pubhex": betaPrivateer.pubhex }, "beta")
def action(self): ''' enter action should only run once to setup road stack. moved from postinitio so can do clean up before stack is initialized do salt raet road stack setup at enter ''' role = self.opts.value.get('id', self.local.data.role) kind = self.opts.value['__role'] # application kind sigkey = self.local.data.sigkey prikey = self.local.data.prikey #name = self.opts.value.get('id', self.local.data.name) #name = LocalEstate.nameGuid(prefix='road') # name is guid #name = 'stack_' + role name = role main = self.opts.value.get('raet_main', self.local.data.main) mutable = self.opts.value.get('raet_mutable', self.local.data.mutable) always = self.opts.value.get('open_mode', False) mutable = mutable or always # open_made when True takes precedence uid = self.local.data.uid ha = (self.opts.value['interface'], self.opts.value['raet_port']) basedirpath = os.path.abspath( os.path.join(self.opts.value['cachedir'], 'raet')) txMsgs = self.txmsgs.value rxMsgs = self.rxmsgs.value keep = salting.SaltKeep(opts=self.opts.value, basedirpath=basedirpath, stackname=name) self.stack.value = RoadStack(store=self.store, keep=keep, name=name, uid=uid, ha=ha, role=role, sigkey=sigkey, prikey=prikey, main=main, mutable=mutable, txMsgs=txMsgs, rxMsgs=rxMsgs, period=3.0, offset=0.5)
def action(self): ''' enter action should only run once to setup road stack. moved from postinitio so can do clean up before stack is initialized do salt raet road stack setup at enter ''' name = self.opts.value.get('id', self.local.data.name) sigkey = self.local.data.sigkey prikey = self.local.data.prikey auto = self.local.data.auto main = self.local.data.main eid = self.local.data.eid ha = (self.opts.value['interface'], self.opts.value['raet_port']) basedirpath = os.path.abspath( os.path.join(self.opts.value['cachedir'], 'raet')) local = LocalEstate(eid=eid, name=name, main=main, ha=ha, sigkey=sigkey, prikey=prikey) txMsgs = self.txmsgs.value rxMsgs = self.rxmsgs.value keep = salting.SaltKeep(opts=self.opts.value, basedirpath=basedirpath, stackname=name, auto=auto) self.stack.value = RoadStack(local=local, store=self.store, name=name, main=main, keep=keep, txMsgs=txMsgs, rxMsgs=rxMsgs, period=3.0, offset=0.5)
def testConnectionWithHaChanged(tdir): console = getConsole() console.reinit(verbosity=console.Wordage.verbose) alphaSigner = SimpleSigner() betaSigner = SimpleSigner() alphaPrivateer = Privateer() betaPrivateer = Privateer() logger.debug("Alpha's verkey {}".format(alphaSigner.naclSigner.verhex)) logger.debug("Beta's verkey {}".format(betaSigner.naclSigner.verhex)) alpha = None def setupAlpha(ha): nonlocal alpha alpha = RoadStack(name='alpha', ha=ha, sigkey=alphaSigner.naclSigner.keyhex, prikey=alphaPrivateer.keyhex, auto=AutoMode.never, basedirpath=tdir) alpha.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": betaSigner.naclSigner.verhex, "pubhex": betaPrivateer.pubhex }, "beta") oldHa = genHa() setupAlpha(oldHa) beta = RoadStack(name='beta', ha=genHa(), sigkey=betaSigner.naclSigner.keyhex, prikey=betaPrivateer.keyhex, main=True, auto=AutoMode.never, basedirpath=tdir, mutable=True) beta.keep.dumpRemoteRoleData( { "acceptance": Acceptance.accepted.value, "verhex": alphaSigner.naclSigner.verhex, "pubhex": alphaPrivateer.pubhex }, "alpha") try: betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) logger.debug("beta knows alpha as {}".format( getRemote(beta, "alpha").ha)) cleanup(alpha) newHa = genHa() logger.debug("alpha changing ha to {}".format(newHa)) setupAlpha(newHa) betaRemote = RemoteEstate(stack=alpha, ha=beta.ha) alpha.addRemote(betaRemote) alpha.join(uid=betaRemote.uid, cascade=True) handshake(alpha, beta) sendMsgs(alpha, beta, betaRemote) logger.debug("beta knows alpha as {}".format( getRemote(beta, "alpha").ha)) finally: cleanup(alpha, beta)