Exemple #1
0
def test_direct_mode_bob_eve_demo():
    """
    Test direct mode bob and eve
    """
    help.ogler.resetLevel(level=logging.DEBUG)

    # set of secrets  (seeds for private keys)
    bobSecrets = [
        'ArwXoACJgOleVZ2PY7kXn7rA0II0mHYDhc6WrBH8fDAc',
        'A6zz7M08-HQSFq92sJ8KJOT2cZ47x7pXFQLPB0pckB3Q',
        'AcwFTk-wgk3ZT2buPRIbK-zxgPx-TKbaegQvPEivN90Y',
        'Alntkt3u6dDgiQxTATr01dy8M72uuaZEf9eTdM-70Gk8',
        'A1-QxDkso9-MR1A8rZz_Naw6fgaAtayda8hrbkRVVu1E',
        'AKuYMe09COczwf2nIoD5AE119n7GLFOVFlNLxZcKuswc',
        'AxFfJTcSuEE11FINfXMqWttkZGnUZ8KaREhrnyAXTsjw',
        'ALq-w1UKkdrppwZzGTtz4PWYEeWm0-sDHzOv5sq96xJY'
    ]

    bobSecrecies = []
    for secret in bobSecrets:  # convert secrets to secrecies
        bobSecrecies.append([secret])

    #  create bob signers
    bobSigners = [coring.Signer(qb64=secret) for secret in bobSecrets]
    assert [signer.qb64 for signer in bobSigners] == bobSecrets

    # bob inception transferable (nxt digest not empty)
    bobSerder = eventing.incept(
        keys=[bobSigners[0].verfer.qb64],
        nxt=coring.Nexter(keys=[bobSigners[1].verfer.qb64]).qb64,
        code=coring.MtrDex.Blake3_256)

    bob = bobSerder.ked["i"]
    assert bob == 'EH7Oq9oxCgYa-nnNLvwhp9sFZpALILlRYyB-6n4WDi7w'

    # set of secrets (seeds for private keys)
    eveSecrets = [
        'AgjD4nRlycmM5cPcAkfOATAp8wVldRsnc9f1tiwctXlw',
        'AKUotEE0eAheKdDJh9QvNmSEmO_bjIav8V_GmctGpuCQ',
        'AK-nVhMMJciMPvmF5VZE_9H-nhrgng9aJWf7_UHPtRNM',
        'AT2cx-P5YUjIw_SLCHQ0pqoBWGk9s4N1brD-4pD_ANbs',
        'Ap5waegfnuP6ezC18w7jQiPyQwYYsp9Yv9rYMlKAYL8k',
        'Aqlc_FWWrxpxCo7R12uIz_Y2pHUH2prHx1kjghPa8jT8',
        'AagumsL8FeGES7tYcnr_5oN6qcwJzZfLKxoniKUpG4qc',
        'ADW3o9m3udwEf0aoOdZLLJdf1aylokP0lwwI_M2J9h0s'
    ]

    eveSecrecies = []
    for secret in eveSecrets:  # convert secrets to secrecies
        eveSecrecies.append([secret])

    #  create eve signers
    eveSigners = [coring.Signer(qb64=secret) for secret in eveSecrets]
    assert [signer.qb64 for signer in eveSigners] == eveSecrets

    # eve inception transferable (nxt digest not empty)
    eveSerder = eventing.incept(
        keys=[eveSigners[0].verfer.qb64],
        nxt=coring.Nexter(keys=[eveSigners[1].verfer.qb64]).qb64,
        code=coring.MtrDex.Blake3_256)

    eve = eveSerder.ked["i"]
    assert eve == 'EpDA1n-WiBA0A8YOqnKrB-wWQYYC49i5zY_qrIZIicQg'

    with dbing.openDB(name="eve") as eveDB, keeping.openKS(name="eve") as eveKS, \
         dbing.openDB(name="bob") as bobDB, keeping.openKS(name="bob") as bobKS:

        limit = 1.0
        tock = 0.03125
        doist = doing.Doist(limit=limit, tock=tock)

        bobPort = 5620  # bob's TCP listening port for server
        evePort = 5621  # eve's TCP listneing port for server
        bobKevers = dict()
        eveKevers = dict()

        # setup bob
        bobHab = directing.Habitat(name='Bob',
                                   ks=bobKS,
                                   db=bobDB,
                                   kevers=bobKevers,
                                   secrecies=bobSecrecies,
                                   temp=True)
        assert bobHab.ks == bobKS
        assert bobHab.db == bobDB
        assert bobHab.iserder.dig == bobSerder.dig
        assert bobHab.pre == bob

        bobClient = clienting.Client(tymth=doist.tymen(),
                                     host='127.0.0.1',
                                     port=evePort)
        bobClientDoer = doing.ClientDoer(client=bobClient)

        bobDirector = demoing.BobDirector(hab=bobHab,
                                          client=bobClient,
                                          tock=0.125)
        assert bobDirector.hab == bobHab
        assert bobDirector.client == bobClient
        assert bobDirector.hab.kvy.kevers == bobKevers
        assert bobDirector.hab.kvy.db == bobDB
        assert bobDirector.tock == 0.125

        bobReactor = directing.Reactor(hab=bobHab, client=bobClient)
        assert bobReactor.hab == bobHab
        assert bobReactor.client == bobClient
        assert bobReactor.hab.kvy.kevers == bobKevers
        assert bobReactor.hab.kvy.db == bobDB
        assert bobReactor.hab.kvy.ims == bobReactor.client.rxbs

        bobServer = serving.Server(host="", port=bobPort)
        bobServerDoer = doing.ServerDoer(server=bobServer)

        bobDirectant = directing.Directant(hab=bobHab, server=bobServer)
        assert bobDirectant.hab == bobHab
        assert bobDirectant.server == bobServer
        # Bob's Reactants created on demand

        # setup eve
        eveHab = directing.Habitat(name='Eve',
                                   ks=eveKS,
                                   db=eveDB,
                                   kevers=eveKevers,
                                   secrecies=eveSecrecies,
                                   temp=True)

        assert eveHab.ks == eveKS
        assert eveHab.db == eveDB
        assert eveHab.iserder.dig == eveSerder.dig
        assert eveHab.pre == eve

        eveClient = clienting.Client(tymth=doist.tymen(),
                                     host='127.0.0.1',
                                     port=bobPort)
        eveClientDoer = doing.ClientDoer(client=eveClient)

        eveDirector = demoing.EveDirector(hab=eveHab,
                                          client=eveClient,
                                          tock=0.125)
        assert eveDirector.hab == eveHab
        assert eveDirector.client == eveClient
        assert eveDirector.hab.kvy.kevers == eveKevers
        assert eveDirector.hab.kvy.db == eveDB

        eveReactor = directing.Reactor(hab=eveHab, client=eveClient)
        assert eveReactor.hab == eveHab
        assert eveReactor.client == eveClient
        assert eveReactor.hab.kvy.kevers == eveKevers
        assert eveReactor.hab.kvy.db == eveDB
        assert eveReactor.hab.kvy.ims == eveReactor.client.rxbs

        eveServer = serving.Server(host="", port=evePort)
        eveServerDoer = doing.ServerDoer(server=eveServer)

        eveDirectant = directing.Directant(hab=eveHab, server=eveServer)
        assert eveDirectant.hab == eveHab
        assert eveDirectant.server == eveServer
        # Eve's Reactants created on demand

        doers = [
            bobClientDoer, bobDirector, bobReactor, bobServerDoer,
            bobDirectant, eveClientDoer, eveDirector, eveReactor,
            eveServerDoer, eveDirectant
        ]
        doist.do(doers=doers)
        assert doist.tyme == limit

        assert bobClient.opened == False
        assert bobServer.opened == False
        assert eveClient.opened == False
        assert eveServer.opened == False

        assert bobHab.pre in bobHab.kevers
        assert eveHab.pre in eveHab.kevers

        assert not bobClient.txbs

        assert bobHab.pre in eveHab.kevers

        #  verify final event states

    assert not os.path.exists(eveDB.path)
    assert not os.path.exists(bobDB.path)

    help.ogler.resetLevel(level=help.ogler.level)
    """End Test"""
Exemple #2
0
def test_crypt_signer_suber():
    """
    test Manager class with aeid
    """
    # preseed = pysodium.randombytes(pysodium.crypto_sign_SEEDBYTES)
    seed0 = (
        b'\x18;0\xc4\x0f*vF\xfa\xe3\xa2Eee\x1f\x96o\xce)G\x85\xe3X\x86\xda\x04\xf0\xdc'
        b'\xde\x06\xc0+')
    signer0 = coring.Signer(raw=seed0, code=coring.MtrDex.Ed25519_Seed)
    assert signer0.verfer.code == coring.MtrDex.Ed25519
    assert signer0.verfer.transferable  # default
    assert signer0.qb64b == b'AGDswxA8qdkb646JFZWUflm_OKUeF41iG2gTw3N4GwCs'
    assert signer0.verfer.qb64b == b'DhixhZjC1Wj2bLR1QdADT79kS2zwHld29ekca0elxHiE'

    # preseed = pysodium.randombytes(pysodium.crypto_sign_SEEDBYTES)
    seed1 = (
        b'`\x05\x93\xb9\x9b6\x1e\xe0\xd7\x98^\x94\xc8Et\xf2\xc4\xcd\x94\x18'
        b'\xc6\xae\xb9\xb6m\x12\xc4\x80\x03\x07\xfc\xf7')

    signer1 = coring.Signer(raw=seed1, code=coring.MtrDex.Ed25519_Seed)
    assert signer1.verfer.code == coring.MtrDex.Ed25519
    assert signer1.verfer.transferable  # default
    assert signer1.qb64b == b'AYAWTuZs2HuDXmF6UyEV08sTNlBjGrrm2bRLEgAMH_Pc'
    assert signer1.verfer.qb64b == b'Dgekf6SB_agwx96mVSZI6PTC09j4Sp8qUbgKglN8uLjY'

    # rawsalt =pysodium.randombytes(pysodium.crypto_pwhash_SALTBYTES)
    rawsalt = b'0123456789abcdef'
    salter = coring.Salter(raw=rawsalt)
    salt = salter.qb64
    assert salt == '0AMDEyMzQ1Njc4OWFiY2RlZg'
    stem = "blue"

    # cryptseed0 = pysodium.randombytes(pysodium.crypto_sign_SEEDBYTES)
    cryptseed0 = b'h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf'
    cryptsigner0 = coring.Signer(raw=cryptseed0,
                                 code=coring.MtrDex.Ed25519_Seed,
                                 transferable=False)
    seed0 = cryptsigner0.qb64
    aeid0 = cryptsigner0.verfer.qb64
    assert aeid0 == 'BJruYr3oXDGRTRN0XnhiqDeoENdRak6FD8y2vsTvvJkE'

    decrypter = coring.Decrypter(seed=seed0)
    encrypter = coring.Encrypter(verkey=aeid0)
    assert encrypter.verifySeed(seed=seed0)

    # cryptseed1 = pysodium.randombytes(pysodium.crypto_sign_SEEDBYTES)
    cryptseed1 = (
        b"\x89\xfe{\xd9'\xa7\xb3\x89#\x19\xbec\xee\xed\xc0\xf9\x97\xd0\x8f9\x1dyNI"
        b'I\x98\xbd\xa4\xf6\xfe\xbb\x03')
    cryptsigner1 = coring.Signer(raw=cryptseed1,
                                 code=coring.MtrDex.Ed25519_Seed,
                                 transferable=False)

    with dbing.openLMDB() as db, keeping.openKS() as ks:
        assert isinstance(db, dbing.LMDBer)
        assert db.name == "test"
        assert db.opened

        sdb = subing.CryptSignerSuber(db=db,
                                      subkey='bags.')  # default klas is Signer
        assert isinstance(sdb, subing.CryptSignerSuber)
        assert issubclass(sdb.klas, coring.Signer)

        # Test without encrypter or decrypter
        keys = (signer0.verfer.qb64,
                )  # must be verfer as key to get transferable
        sdb.put(keys=keys, val=signer0)
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        sdb.rem(keys)
        actual = sdb.get(keys=keys)
        assert actual is None

        sdb.put(keys=keys, val=signer0)
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        #  try put different val when already put
        result = sdb.put(keys=keys, val=signer1)
        assert not result
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        #  now overwrite with pin. Key is wrong but transferable property is
        #  the same so that is all that matters to get back signer
        result = sdb.pin(keys=keys, val=signer1)
        assert result
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer1.qb64
        assert actual.verfer.qb64 == signer1.verfer.qb64

        # test with keys as string not tuple
        keys = signer0.verfer.qb64

        sdb.pin(keys=keys, val=signer0)
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        sdb.rem(keys)
        assert not sdb.get(keys=keys)

        # test missing entry at keys
        badkey = b'D1QdADT79kS2zwHld29hixhZjC1Wj2bLRekca0elxHiE'
        assert not sdb.get(badkey)

        # test iteritems
        sdb = subing.CryptSignerSuber(db=db, subkey='pugs.')
        assert isinstance(sdb, subing.CryptSignerSuber)
        assert sdb.put(keys=signer0.verfer.qb64b, val=signer0)
        assert sdb.put(keys=signer1.verfer.qb64b, val=signer1)

        items = [(keys, sgnr.qb64) for keys, sgnr in sdb.getItemIter()]
        assert items == [((signer1.verfer.qb64, ), signer1.qb64),
                         ((signer0.verfer.qb64, ), signer0.qb64)]

        # now test with encrypter and decrypter
        encrypter0 = coring.Encrypter(verkey=cryptsigner0.verfer.qb64)
        decrypter0 = coring.Decrypter(seed=cryptsigner0.qb64b)

        # first pin with encrypter
        assert sdb.pin(keys=signer0.verfer.qb64b,
                       val=signer0,
                       encrypter=encrypter0)
        assert sdb.pin(keys=signer1.verfer.qb64b,
                       val=signer1,
                       encrypter=encrypter0)

        # now get
        actual0 = sdb.get(keys=signer0.verfer.qb64b, decrypter=decrypter0)
        assert isinstance(actual0, coring.Signer)
        assert actual0.qb64 == signer0.qb64
        assert actual0.verfer.qb64 == signer0.verfer.qb64

        actual1 = sdb.get(keys=signer1.verfer.qb64b, decrypter=decrypter0)
        assert isinstance(actual1, coring.Signer)
        assert actual1.qb64 == signer1.qb64
        assert actual1.verfer.qb64 == signer1.verfer.qb64

        # now get without decrypter
        with pytest.raises(ValueError):
            actual0 = sdb.get(keys=signer0.verfer.qb64b)

        with pytest.raises(ValueError):
            actual1 = sdb.get(keys=signer1.verfer.qb64b)

        # remove and test put
        sdb.rem(keys=signer0.verfer.qb64b)
        assert not sdb.get(keys=signer0.verfer.qb64b)
        sdb.rem(keys=signer1.verfer.qb64b)
        assert not sdb.get(keys=signer1.verfer.qb64b)

        assert sdb.put(keys=signer0.verfer.qb64b,
                       val=signer0,
                       encrypter=encrypter0)
        assert sdb.put(keys=signer1.verfer.qb64b,
                       val=signer1,
                       encrypter=encrypter0)

        items = [(keys, sgnr.qb64)
                 for keys, sgnr in sdb.getItemIter(decrypter=decrypter0)]
        assert items == [((signer1.verfer.qb64, ), signer1.qb64),
                         ((signer0.verfer.qb64, ), signer0.qb64)]

        # test re-encrypt
        encrypter1 = coring.Encrypter(verkey=cryptsigner1.verfer.qb64)
        decrypter1 = coring.Decrypter(seed=cryptsigner1.qb64b)
        for keys, sgnr in sdb.getItemIter(decrypter=decrypter0):
            sdb.pin(keys, sgnr, encrypter=encrypter1)

        items = [(keys, sgnr.qb64)
                 for keys, sgnr in sdb.getItemIter(decrypter=decrypter1)]
        assert items == [((signer1.verfer.qb64, ), signer1.qb64),
                         ((signer0.verfer.qb64, ), signer0.qb64)]

        # now test with manager
        manager = keeping.Manager(
            ks=ks,
            seed=seed0,
            salt=salt,
            aeid=aeid0,
        )
        assert manager.ks.opened
        assert manager.inited
        assert manager._inits == {
            'aeid': 'BJruYr3oXDGRTRN0XnhiqDeoENdRak6FD8y2vsTvvJkE',
            'salt': '0AMDEyMzQ1Njc4OWFiY2RlZg'
        }
        assert manager.encrypter.qb64 == encrypter.qb64  #  aeid provided
        assert manager.decrypter.qb64 == decrypter.qb64  # aeid and seed provided
        assert manager.seed == seed0  # in memory only
        assert manager.aeid == aeid0  # on disk only
        assert manager.salt == salt  # encrypted on disk but property decrypts if seed
        assert manager.pidx == 0
        assert manager.tier == coring.Tiers.low
        saltCipher0 = coring.Cipher(qb64=manager.ks.gbls.get('salt'))
        assert saltCipher0.decrypt(seed=seed0).qb64 == salt

        manager.updateAeid(aeid=cryptsigner1.verfer.qb64,
                           seed=cryptsigner1.qb64)
        assert manager.aeid == cryptsigner1.verfer.qb64 == 'BRw6sysb_uv81ZouXqHxQlqnAh9BYiSOsg9eQJmbZ8Uw'
        assert manager.salt == salt
        saltCipher1 = coring.Cipher(qb64=manager.ks.gbls.get('salt'))
        assert not saltCipher0.qb64 == saltCipher1.qb64  # old cipher different
    """End Test"""
Exemple #3
0
def test_signer_suber():
    """
    Test SignerSuber LMDBer sub database class
    """

    with dbing.openLMDB() as db:
        assert isinstance(db, dbing.LMDBer)
        assert db.name == "test"
        assert db.opened

        sdb = subing.SignerSuber(db=db,
                                 subkey='bags.')  # default klas is Signer
        assert isinstance(sdb, subing.SignerSuber)
        assert issubclass(sdb.klas, coring.Signer)

        # preseed = pysodium.randombytes(pysodium.crypto_sign_SEEDBYTES)
        seed0 = (
            b'\x18;0\xc4\x0f*vF\xfa\xe3\xa2Eee\x1f\x96o\xce)G\x85\xe3X\x86\xda\x04\xf0\xdc'
            b'\xde\x06\xc0+')
        signer0 = coring.Signer(raw=seed0, code=coring.MtrDex.Ed25519_Seed)
        assert signer0.verfer.code == coring.MtrDex.Ed25519
        assert signer0.verfer.transferable  # default
        assert signer0.qb64b == b'AGDswxA8qdkb646JFZWUflm_OKUeF41iG2gTw3N4GwCs'
        assert signer0.verfer.qb64b == b'DhixhZjC1Wj2bLR1QdADT79kS2zwHld29ekca0elxHiE'

        # preseed = pysodium.randombytes(pysodium.crypto_sign_SEEDBYTES)
        seed1 = (
            b'`\x05\x93\xb9\x9b6\x1e\xe0\xd7\x98^\x94\xc8Et\xf2\xc4\xcd\x94\x18'
            b'\xc6\xae\xb9\xb6m\x12\xc4\x80\x03\x07\xfc\xf7')

        signer1 = coring.Signer(raw=seed1, code=coring.MtrDex.Ed25519_Seed)
        assert signer1.verfer.code == coring.MtrDex.Ed25519
        assert signer1.verfer.transferable  # default
        assert signer1.qb64b == b'AYAWTuZs2HuDXmF6UyEV08sTNlBjGrrm2bRLEgAMH_Pc'
        assert signer1.verfer.qb64b == b'Dgekf6SB_agwx96mVSZI6PTC09j4Sp8qUbgKglN8uLjY'

        keys = (signer0.verfer.qb64,
                )  # must be verfer as key to get transferable
        sdb.put(keys=keys, val=signer0)
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        sdb.rem(keys)
        actual = sdb.get(keys=keys)
        assert actual is None

        sdb.put(keys=keys, val=signer0)
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        #  try put different val when already put
        result = sdb.put(keys=keys, val=signer1)
        assert not result
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        #  now overwrite with pin. Key is wrong but transferable property is
        #  the same so that is all that matters to get back signer
        result = sdb.pin(keys=keys, val=signer1)
        assert result
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer1.qb64
        assert actual.verfer.qb64 == signer1.verfer.qb64

        # test with keys as string not tuple
        keys = signer0.verfer.qb64

        sdb.pin(keys=keys, val=signer0)
        actual = sdb.get(keys=keys)
        assert isinstance(actual, coring.Signer)
        assert actual.qb64 == signer0.qb64
        assert actual.verfer.qb64 == signer0.verfer.qb64

        sdb.rem(keys)
        assert not sdb.get(keys=keys)

        # test missing entry at keys
        badkey = b'D1QdADT79kS2zwHld29hixhZjC1Wj2bLRekca0elxHiE'
        assert not sdb.get(badkey)

        # test iteritems
        sdb = subing.SignerSuber(db=db, subkey='pugs.')
        assert isinstance(sdb, subing.SignerSuber)
        assert sdb.put(keys=signer0.verfer.qb64b, val=signer0)
        assert sdb.put(keys=signer1.verfer.qb64b, val=signer1)

        items = [(keys, srdr.qb64) for keys, srdr in sdb.getItemIter()]
        assert items == [((signer1.verfer.qb64, ), signer1.qb64),
                         ((signer0.verfer.qb64, ), signer0.qb64)]

    assert not os.path.exists(db.path)
    assert not db.opened
Exemple #4
0
def test_directing_basic():
    """
    Test directing
    """
    help.ogler.resetLevel(level=logging.DEBUG)

    # set of secrets  (seeds for private keys)
    bobSecrets = [
        'ArwXoACJgOleVZ2PY7kXn7rA0II0mHYDhc6WrBH8fDAc',
        'A6zz7M08-HQSFq92sJ8KJOT2cZ47x7pXFQLPB0pckB3Q',
        'AcwFTk-wgk3ZT2buPRIbK-zxgPx-TKbaegQvPEivN90Y',
        'Alntkt3u6dDgiQxTATr01dy8M72uuaZEf9eTdM-70Gk8',
        'A1-QxDkso9-MR1A8rZz_Naw6fgaAtayda8hrbkRVVu1E',
        'AKuYMe09COczwf2nIoD5AE119n7GLFOVFlNLxZcKuswc',
        'AxFfJTcSuEE11FINfXMqWttkZGnUZ8KaREhrnyAXTsjw',
        'ALq-w1UKkdrppwZzGTtz4PWYEeWm0-sDHzOv5sq96xJY'
    ]

    bobSecrecies = []
    for secret in bobSecrets:  # convert secrets to secrecies
        bobSecrecies.append([secret])

    #  create bob signers
    bobSigners = [coring.Signer(qb64=secret) for secret in bobSecrets]
    assert [signer.qb64 for signer in bobSigners] == bobSecrets

    # bob inception transferable (nxt digest not empty)
    bobSerder = eventing.incept(
        keys=[bobSigners[0].verfer.qb64],
        nxt=coring.Nexter(keys=[bobSigners[1].verfer.qb64]).qb64,
        code=coring.MtrDex.Blake3_256)

    bob = bobSerder.ked["i"]
    assert bob == 'EQf1hzB6s5saaQPdDAsEzSMEFoQx_WLsq93bjPu5wuqA'

    # set of secrets (seeds for private keys)
    eveSecrets = [
        'AgjD4nRlycmM5cPcAkfOATAp8wVldRsnc9f1tiwctXlw',
        'AKUotEE0eAheKdDJh9QvNmSEmO_bjIav8V_GmctGpuCQ',
        'AK-nVhMMJciMPvmF5VZE_9H-nhrgng9aJWf7_UHPtRNM',
        'AT2cx-P5YUjIw_SLCHQ0pqoBWGk9s4N1brD-4pD_ANbs',
        'Ap5waegfnuP6ezC18w7jQiPyQwYYsp9Yv9rYMlKAYL8k',
        'Aqlc_FWWrxpxCo7R12uIz_Y2pHUH2prHx1kjghPa8jT8',
        'AagumsL8FeGES7tYcnr_5oN6qcwJzZfLKxoniKUpG4qc',
        'ADW3o9m3udwEf0aoOdZLLJdf1aylokP0lwwI_M2J9h0s'
    ]

    eveSecrecies = []
    for secret in eveSecrets:  # convert secrets to secrecies
        eveSecrecies.append([secret])

    #  create eve signers
    eveSigners = [coring.Signer(qb64=secret) for secret in eveSecrets]
    assert [signer.qb64 for signer in eveSigners] == eveSecrets

    # eve inception transferable (nxt digest not empty)
    eveSerder = eventing.incept(
        keys=[eveSigners[0].verfer.qb64],
        nxt=coring.Nexter(keys=[eveSigners[1].verfer.qb64]).qb64,
        code=coring.MtrDex.Blake3_256)

    eve = eveSerder.ked["i"]
    assert eve == 'ED9EB3sA5u2vCPOEmX3d7bEyHiSh7Xi8fjew2KMl3FQM'

    with dbing.openDB(name="eve") as eveDB, keeping.openKS(name="eve") as eveKS, \
         dbing.openDB(name="bob") as bobDB, keeping.openKS(name="bob") as bobKS:

        limit = 0.125
        tock = 0.03125
        doist = doing.Doist(limit=limit, tock=tock)

        bobPort = 5620  # bob's TCP listening port for server
        evePort = 5621  # eve's TCP listneing port for server
        bobKevers = dict()
        eveKevers = dict()

        # setup bob
        bobHab = directing.Habitat(ks=bobKS,
                                   db=bobDB,
                                   kevers=bobKevers,
                                   secrecies=bobSecrecies,
                                   temp=True)
        assert bobHab.ks == bobKS
        assert bobHab.db == bobDB
        assert bobHab.iserder.dig == bobSerder.dig
        assert bobHab.pre == bob

        bobClient = clienting.Client(tymth=doist.tymen(),
                                     host='127.0.0.1',
                                     port=evePort)
        bobClientDoer = doing.ClientDoer(tymth=doist.tymen(), client=bobClient)

        bobDirector = directing.Director(hab=bobHab, client=bobClient)
        assert bobDirector.hab == bobHab
        assert bobDirector.client == bobClient
        assert id(bobDirector.hab.kvy.kevers) == id(bobKevers)
        assert bobDirector.hab.kvy.db == bobDB

        bobReactor = directing.Reactor(hab=bobHab, client=bobClient)
        assert bobReactor.hab == bobHab
        assert bobReactor.client == bobClient
        assert id(bobReactor.hab.kvy.kevers) == id(bobKevers)
        assert bobReactor.hab.kvy.db == bobDB
        assert id(bobReactor.kevery.ims) == id(bobReactor.client.rxbs)
        assert id(bobReactor.client.rxbs) == id(bobDirector.client.rxbs)

        bobServer = serving.Server(host="", port=bobPort)
        bobServerDoer = doing.ServerDoer(server=bobServer)

        bobDirectant = directing.Directant(hab=bobHab, server=bobServer)
        assert bobDirectant.hab == bobHab
        assert bobDirectant.server == bobServer
        # Bob's Reactants created on demand

        # setup eve
        eveHab = directing.Habitat(ks=eveKS,
                                   db=eveDB,
                                   kevers=eveKevers,
                                   secrecies=eveSecrecies,
                                   temp=True)
        assert eveHab.ks == eveKS
        assert eveHab.db == eveDB
        assert eveHab.iserder.dig == eveSerder.dig
        assert eveHab.pre == eve

        eveClient = clienting.Client(tymth=doist.tymen(),
                                     host='127.0.0.1',
                                     port=bobPort)
        eveClientDoer = doing.ClientDoer(tymth=doist.tymen(), client=eveClient)

        eveDirector = directing.Director(hab=eveHab, client=eveClient)
        assert eveDirector.hab == eveHab
        assert eveDirector.client == eveClient
        assert id(eveDirector.hab.kvy.kevers) == id(eveKevers)
        assert eveDirector.hab.kvy.db == eveDB

        eveReactor = directing.Reactor(hab=eveHab, client=eveClient)
        assert eveReactor.hab == eveHab
        assert eveReactor.client == eveClient
        assert id(eveReactor.hab.kvy.kevers) == id(eveKevers)
        assert eveReactor.hab.kvy.db == eveDB
        assert id(eveReactor.kevery.ims) == id(eveReactor.client.rxbs)
        assert id(eveReactor.client.rxbs) == id(eveDirector.client.rxbs)

        eveServer = serving.Server(host="", port=evePort)
        eveServerDoer = doing.ServerDoer(server=eveServer)

        eveDirectant = directing.Directant(hab=eveHab, server=eveServer)
        assert eveDirectant.hab == eveHab
        assert eveDirectant.server == eveServer
        # Eve's Reactants created on demand

        bobMsgTx = b"Hi Eve I am  Bob"
        bobDirector.client.tx(bobMsgTx)

        eveMsgTx = b"Hi Bob its me Eve"
        eveDirector.client.tx(eveMsgTx)

        doers = [
            bobClientDoer, bobDirector, bobReactor, bobServerDoer,
            bobDirectant, eveClientDoer, eveDirector, eveReactor,
            eveServerDoer, eveDirectant
        ]
        doist.do(doers=doers)
        assert doist.tyme == limit

        assert bobClient.opened == False
        assert bobServer.opened == False
        assert eveClient.opened == False
        assert eveServer.opened == False

        assert not bobClient.txbs
        ca, ix = list(eveServer.ixes.items())[0]
        eveMsgRx = bytes(ix.rxbs)  # ColdStart Error fluhes buffer
        assert eveMsgRx == b''
        # assert eveMsgRx == bobMsgTx

        assert not eveClient.txbs
        ca, ix = list(bobServer.ixes.items())[0]
        bobMsgRx = bytes(ix.rxbs)  # ColdStart Error fluhes buffer
        assert bobMsgRx == b''
        # assert bobMsgRx == eveMsgTx

    assert not os.path.exists(eveDB.path)
    assert not os.path.exists(bobDB.path)

    help.ogler.resetLevel(level=help.ogler.level)
    """End Test"""
Exemple #5
0
def test_indirect_mode_sam_cam_wit_demo():
    """ Test indirect mode, bob and eve with witness """

    help.ogler.resetLevel(level=logging.DEBUG)
    # set of secrets (seeds for private keys)
    camSecrets = [
        'AgjD4nRlycmM5cPcAkfOATAp8wVldRsnc9f1tiwctXlw',
        'AKUotEE0eAheKdDJh9QvNmSEmO_bjIav8V_GmctGpuCQ',
        'AK-nVhMMJciMPvmF5VZE_9H-nhrgng9aJWf7_UHPtRNM',
        'AT2cx-P5YUjIw_SLCHQ0pqoBWGk9s4N1brD-4pD_ANbs',
        'Ap5waegfnuP6ezC18w7jQiPyQwYYsp9Yv9rYMlKAYL8k',
        'Aqlc_FWWrxpxCo7R12uIz_Y2pHUH2prHx1kjghPa8jT8',
        'AagumsL8FeGES7tYcnr_5oN6qcwJzZfLKxoniKUpG4qc',
        'ADW3o9m3udwEf0aoOdZLLJdf1aylokP0lwwI_M2J9h0s'
    ]

    camSecrecies = []
    for secret in camSecrets:  # convert secrets to secrecies
        camSecrecies.append([secret])

    #  create cam signers
    camSigners = [coring.Signer(qb64=secret) for secret in camSecrets]
    assert [signer.qb64 for signer in camSigners] == camSecrets

    # set of secrets  (seeds for private keys)
    samSecrets = [
        'ArwXoACJgOleVZ2PY7kXn7rA0II0mHYDhc6WrBH8fDAc',
        'A6zz7M08-HQSFq92sJ8KJOT2cZ47x7pXFQLPB0pckB3Q',
        'AcwFTk-wgk3ZT2buPRIbK-zxgPx-TKbaegQvPEivN90Y',
        'Alntkt3u6dDgiQxTATr01dy8M72uuaZEf9eTdM-70Gk8',
        'A1-QxDkso9-MR1A8rZz_Naw6fgaAtayda8hrbkRVVu1E',
        'AKuYMe09COczwf2nIoD5AE119n7GLFOVFlNLxZcKuswc',
        'AxFfJTcSuEE11FINfXMqWttkZGnUZ8KaREhrnyAXTsjw',
        'ALq-w1UKkdrppwZzGTtz4PWYEeWm0-sDHzOv5sq96xJY'
    ]

    samSecrecies = []
    for secret in samSecrets:  # convert secrets to secrecies
        samSecrecies.append([secret])

    #  create sam signers
    samSigners = [coring.Signer(qb64=secret) for secret in samSecrets]
    assert [signer.qb64 for signer in samSigners] == samSecrets

    with basing.openDB(name="cam") as camDB, keeping.openKS(name="cam") as camKS, \
         basing.openDB(name="sam") as samDB, keeping.openKS(name="sam") as samKS, \
         basing.openDB(name="wit") as witDB, keeping.openKS(name="wit") as witKS:

        samPort = 5620  # sam's TCP listening port for server
        witPort = 5621  # wit' TCP listneing port for server

        # setup the witness
        witHab = habbing.Habitat(name='Wit',
                                 ks=witKS,
                                 db=witDB,
                                 isith=1,
                                 icount=1,
                                 temp=True,
                                 transferable=False)
        wit = witHab.pre
        assert witHab.ks == witKS
        assert witHab.db == witDB
        witServer = serving.Server(host="", port=witPort)
        witServerDoer = serving.ServerDoer(server=witServer)
        witDirectant = directing.Directant(hab=witHab, server=witServer)

        witDoers = [witServerDoer, witDirectant]

        # setup cam
        # cam inception transferable (nxt digest not empty)
        camSerder = eventing.incept(
            keys=[camSigners[0].verfer.qb64],
            nxt=coring.Nexter(keys=[camSigners[1].verfer.qb64]).qb64,
            code=coring.MtrDex.Blake3_256)

        cam = camSerder.ked["i"]
        assert cam == 'ED9EB3sA5u2vCPOEmX3d7bEyHiSh7Xi8fjew2KMl3FQM'

        # sam inception transferable (nxt digest not empty)
        samSerder = eventing.incept(
            keys=[samSigners[0].verfer.qb64],
            wits=[wit],
            nxt=coring.Nexter(keys=[samSigners[1].verfer.qb64]).qb64,
            code=coring.MtrDex.Blake3_256)

        sam = samSerder.ked["i"]
        assert sam == 'EhnaYUqhHoo8kZaXJuTDCZ-h5ZDx3st4NemgqSITWp48'

        samHab = habbing.Habitat(name='Sam',
                                 ks=samKS,
                                 db=samDB,
                                 wits=[wit],
                                 secrecies=samSecrecies,
                                 temp=True)
        assert samHab.ks == samKS
        assert samHab.db == samDB
        assert samHab.iserder.dig == samSerder.dig
        assert samHab.pre == sam

        samClient = clienting.Client(host='127.0.0.1', port=witPort)
        samClientDoer = clienting.ClientDoer(client=samClient)

        samDirector = demoing.SamDirector(hab=samHab,
                                          client=samClient,
                                          tock=0.125)
        assert samDirector.hab == samHab
        assert samDirector.client == samClient
        assert id(samDirector.hab.kvy.kevers) == id(samHab.kevers)
        assert samDirector.hab.kvy.db == samDB
        assert samDirector.tock == 0.125

        samReactor = directing.Reactor(hab=samHab, client=samClient)
        assert samReactor.hab == samHab
        assert samReactor.client == samClient
        assert id(samReactor.hab.kvy.kevers) == id(samHab.kevers)
        assert samReactor.hab.kvy.db == samDB
        assert samReactor.hab.psr.ims == samReactor.client.rxbs

        samServer = serving.Server(host="", port=samPort)
        samServerDoer = serving.ServerDoer(server=samServer)

        samDirectant = directing.Directant(hab=samHab, server=samServer)
        assert samDirectant.hab == samHab
        assert samDirectant.server == samServer
        # Sam's Reactants created on demand

        samDoers = [
            samClientDoer, samDirector, samReactor, samServerDoer, samDirectant
        ]

        # setup cam
        camHab = habbing.Habitat(name='Cam',
                                 ks=camKS,
                                 db=camDB,
                                 secrecies=camSecrecies,
                                 temp=True)

        assert camHab.ks == camKS
        assert camHab.db == camDB
        assert camHab.iserder.dig == camSerder.dig
        assert camHab.pre == cam

        camClient = clienting.Client(host='127.0.0.1', port=witPort)
        camClientDoer = clienting.ClientDoer(client=camClient)

        camDirector = demoing.CamDirector(hab=camHab,
                                          remotePre=sam,
                                          client=camClient,
                                          tock=0.125)
        assert camDirector.hab == camHab
        assert camDirector.client == camClient
        assert id(camDirector.hab.kvy.kevers) == id(camHab.kevers)
        assert camDirector.hab.kvy.db == camDB
        assert camDirector.tock == 0.125

        camReactor = directing.Reactor(hab=camHab,
                                       client=camClient,
                                       indirect=True)
        assert camReactor.hab == camHab
        assert camReactor.client == camClient
        assert id(camReactor.hab.kvy.kevers) == id(camHab.kevers)
        assert camReactor.hab.kvy.db == camDB
        assert camReactor.hab.psr.ims == camReactor.client.rxbs

        camDoers = [camClientDoer, camDirector, camReactor]

        # Manually stage SamDoers and wit doers and then camDoers

        tock = 0.03125
        doist = doing.Doist(doers=samDoers + witDoers, tock=tock)

        # manually prep doers
        doist.done = False
        doist.enter()  # injects doist.tymth() dependency to all doers
        assert len(doist.deeds) == len(samDoers + witDoers)
        while doist.tyme < doist.tock * 16:
            doist.recur()  # iterate 16 times
            time.sleep(doist.tock)

        assert len(doist.deeds) == len(samDoers + witDoers)
        assert not doist.done
        assert samHab.pre in samHab.kevers

        # now start up cam doers
        doist.extend(camDoers)
        assert len(doist.deeds) == len(samDoers + witDoers + camDoers)

        while doist.tyme < doist.tock * 32:
            doist.recur()  # iterate 16 times
            time.sleep(doist.tock)

        assert len(doist.deeds) == len(samDoers + witDoers + camDoers) - 1
        # camDirector completes
        assert camDirector.done
        assert not doist.done
        assert camHab.pre in camHab.kevers
        assert samHab.pre in camHab.kevers

        #  verify final event states

        doist.exit()
        assert samClient.opened is False
        assert samServer.opened is False
        assert camClient.opened is False

    assert not os.path.exists(camDB.path)
    assert not os.path.exists(samDB.path)

    help.ogler.resetLevel(level=help.ogler.level)
    """End Test"""
Exemple #6
0
def test_direct_mode_sam():
    """
    Test direct mode demo


    """
    # set of secrets  (seeds for private keys)
    bobSecrets = [
        'ArwXoACJgOleVZ2PY7kXn7rA0II0mHYDhc6WrBH8fDAc',
        'A6zz7M08-HQSFq92sJ8KJOT2cZ47x7pXFQLPB0pckB3Q',
        'AcwFTk-wgk3ZT2buPRIbK-zxgPx-TKbaegQvPEivN90Y',
        'Alntkt3u6dDgiQxTATr01dy8M72uuaZEf9eTdM-70Gk8',
        'A1-QxDkso9-MR1A8rZz_Naw6fgaAtayda8hrbkRVVu1E',
        'AKuYMe09COczwf2nIoD5AE119n7GLFOVFlNLxZcKuswc',
        'AxFfJTcSuEE11FINfXMqWttkZGnUZ8KaREhrnyAXTsjw',
        'ALq-w1UKkdrppwZzGTtz4PWYEeWm0-sDHzOv5sq96xJY'
    ]

    #  create bob signers
    bobSigners = [coring.Signer(qb64=secret) for secret in bobSecrets]
    assert [signer.qb64 for signer in bobSigners] == bobSecrets

    # bob inception transferable (nxt digest not empty)
    bobSerder = eventing.incept(
        keys=[bobSigners[0].verfer.qb64],
        nxt=coring.Nexter(keys=[bobSigners[1].verfer.qb64]).qb64,
        code=coring.CryOneDex.Blake3_256)

    bob = bobSerder.ked['pre']
    assert bob == 'ETT9n-TCGn8XfkGkcNeNmZgdZSwHPLyDsojFXotBXdSo'

    # set of secrets (seeds for private keys)
    eveSecrets = [
        'AgjD4nRlycmM5cPcAkfOATAp8wVldRsnc9f1tiwctXlw',
        'AKUotEE0eAheKdDJh9QvNmSEmO_bjIav8V_GmctGpuCQ',
        'AK-nVhMMJciMPvmF5VZE_9H-nhrgng9aJWf7_UHPtRNM',
        'AT2cx-P5YUjIw_SLCHQ0pqoBWGk9s4N1brD-4pD_ANbs',
        'Ap5waegfnuP6ezC18w7jQiPyQwYYsp9Yv9rYMlKAYL8k',
        'Aqlc_FWWrxpxCo7R12uIz_Y2pHUH2prHx1kjghPa8jT8',
        'AagumsL8FeGES7tYcnr_5oN6qcwJzZfLKxoniKUpG4qc',
        'ADW3o9m3udwEf0aoOdZLLJdf1aylokP0lwwI_M2J9h0s'
    ]

    #  create eve signers
    eveSigners = [coring.Signer(qb64=secret) for secret in eveSecrets]
    assert [signer.qb64 for signer in eveSigners] == eveSecrets

    # eve inception transferable (nxt digest not empty)
    eveSerder = eventing.incept(
        keys=[eveSigners[0].verfer.qb64],
        nxt=coring.Nexter(keys=[eveSigners[1].verfer.qb64]).qb64,
        code=coring.CryOneDex.Blake3_256)

    eve = eveSerder.ked['pre']
    assert eve == 'EwBwUb2eZcA5GDcN7g-87wpreM0nNkLqzkwviBHTcV1A'



    with dbing.openLogger(name="eve") as eveDB, \
         dbing.openLogger(name="bob") as bobDB:

        bobPort = 5620  # bob's TCP listening port for server
        evePort = 5621  # eve's TCP listneing port for server
        bobKevers = dict()
        eveKevers = dict()

        # setup bob
        bobHab = directing.Habitat(secrets=bobSecrets,
                                   kevers=bobKevers,
                                   db=bobDB)
        assert bobHab.db == bobDB
        assert ([signer.verfer.qb64 for signer in bobHab.signers
                 ] == [signer.verfer.qb64 for signer in bobSigners])
        assert bobHab.inception.dig == bobSerder.dig
        assert bobHab.pre == bob

        bobClient = clienting.Client(host='127.0.0.1', port=evePort)
        bobClientDoer = doing.ClientDoer(client=bobClient)

        bobDirector = directing.SamDirector(hab=bobHab,
                                            client=bobClient,
                                            tock=0.125)
        assert bobDirector.hab == bobHab
        assert bobDirector.client == bobClient
        assert bobDirector.kevery.kevers == bobKevers
        assert bobDirector.kevery.logger == bobDB
        assert bobDirector.tock == 0.125

        bobReactor = directing.Reactor(hab=bobHab, client=bobClient)
        assert bobReactor.hab == bobHab
        assert bobReactor.client == bobClient
        assert bobReactor.kevery.kevers == bobKevers
        assert bobReactor.kevery.logger == bobDB
        assert bobReactor.kevery.ims == bobReactor.client.rxbs

        bobServer = serving.Server(host="", port=bobPort)
        bobServerDoer = doing.ServerDoer(server=bobServer)

        bobDirectant = directing.Directant(hab=bobHab, server=bobServer)
        assert bobDirectant.hab == bobHab
        assert bobDirectant.server == bobServer
        # Bob's Reactants created on demand

        # setup eve
        eveHab = directing.Habitat(secrets=eveSecrets,
                                   kevers=eveKevers,
                                   db=eveDB)
        assert eveHab.db == eveDB
        assert ([signer.verfer.qb64 for signer in eveHab.signers
                 ] == [signer.verfer.qb64 for signer in eveSigners])
        assert eveHab.inception.dig == eveSerder.dig
        assert eveHab.pre == eve

        eveClient = clienting.Client(host='127.0.0.1', port=bobPort)
        eveClientDoer = doing.ClientDoer(client=eveClient)

        eveDirector = directing.EveDirector(hab=eveHab,
                                            client=eveClient,
                                            tock=0.125)
        assert eveDirector.hab == eveHab
        assert eveDirector.client == eveClient
        assert eveDirector.kevery.kevers == eveKevers
        assert eveDirector.kevery.logger == eveDB

        eveReactor = directing.Reactor(hab=eveHab, client=eveClient)
        assert eveReactor.hab == eveHab
        assert eveReactor.client == eveClient
        assert eveReactor.kevery.kevers == eveKevers
        assert eveReactor.kevery.logger == eveDB
        assert eveReactor.kevery.ims == eveReactor.client.rxbs

        eveServer = serving.Server(host="", port=evePort)
        eveServerDoer = doing.ServerDoer(server=eveServer)

        eveDirectant = directing.Directant(hab=eveHab, server=eveServer)
        assert eveDirectant.hab == eveHab
        assert eveDirectant.server == eveServer
        # Eve's Reactants created on demand

        limit = 1.0
        tock = 0.03125
        doist = doing.Doist(limit=limit, tock=tock)

        #eveMsgTx = b"Hi Bob its me Eve"
        #eveDirector.client.tx(eveMsgTx)

        doers = [
            bobClientDoer, bobDirector, bobReactor, bobServerDoer,
            bobDirectant, eveClientDoer, eveDirector, eveReactor,
            eveServerDoer, eveDirectant
        ]
        doist.do(doers=doers)
        assert doist.tyme == limit

        assert bobClient.opened == False
        assert bobServer.opened == False
        assert eveClient.opened == False
        assert eveServer.opened == False

        assert bobHab.pre in bobHab.kevers
        assert eveHab.pre in eveHab.kevers

        assert not bobClient.txes

        assert bobHab.pre in eveHab.kevers

        #  verify final bob event state

        #  verify final val event state

    assert not os.path.exists(eveDB.path)
    assert not os.path.exists(bobDB.path)
    """End Test"""