Example #1
0
def testTrusteeCannotChangeVerkey(trustee, trusteeWallet, looper, nodeSet,
                                  anotherTrustee, anotherTGB, anotherSteward,
                                  anotherTrustAnchor):
    for identity in (anotherTrustee, anotherTGB, anotherSteward,
                     anotherTrustAnchor):
        # Trustee cannot change verkey
        _, wallet = identity
        signer = DidSigner()
        changeVerkey(looper,
                     trustee,
                     trusteeWallet,
                     wallet.defaultId,
                     signer.verkey,
                     nAckReasonContains='TRUSTEE cannot update verkey')
        # Identity owner can change verkey
        changeVerkey(looper, *identity, wallet.defaultId, signer.verkey)
Example #2
0
def updatedPoolTxnData(poolTxnData):
    data = deepcopy(poolTxnData)
    trusteeSeed = 'thisistrusteeseednotsteward12345'
    signer = DidSigner(seed=trusteeSeed.encode())
    t = {
        TARGET_NYM: signer.identifier,
        VERKEY: signer.verkey,
        ROLE: TRUSTEE,
        TYPE: NYM,
        ALIAS: "Trustee1",
        TXN_ID:
        "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4a"
    }
    data["seeds"]["Trustee1"] = trusteeSeed
    data["txns"].insert(0, t)
    return data
def req(poolTxnClientData):
    _, seed = poolTxnClientData
    signer = DidSigner(seed=seed)

    request = {
        f.IDENTIFIER.nm: signer.identifier,
        f.REQ_ID.nm: int(time.time() * 10**6),
        OPERATION: {
            'amount': 62,
            'type': 'buy'
        },
        f.PROTOCOL_VERSION.nm: CURRENT_PROTOCOL_VERSION
    }

    request[f.SIG.nm] = signer.sign(request)

    return request
Example #4
0
def addRole(looper,
            creatorClient,
            creatorWallet,
            name,
            addVerkey=True,
            role=None):
    wallet = Wallet(name)
    signer = DidSigner()
    idr, _ = wallet.addIdentifier(signer=signer)
    verkey = wallet.getVerkey(idr) if addVerkey else None
    createNym(looper,
              idr,
              creatorClient,
              creatorWallet,
              verkey=verkey,
              role=role)
    return wallet
Example #5
0
def testNonTrustAnchoredNymCanDoGetNym(nodeSet, addedTrustAnchor,
                                       trustAnchorWallet,
                                       tdirWithClientPoolTxns, looper):
    signer = DidSigner()
    someClient, _ = genTestClient(nodeSet,
                                  tmpdir=tdirWithClientPoolTxns,
                                  usePoolLedger=True)
    wallet = Wallet(someClient.name)
    wallet.addIdentifier(signer=signer)
    someClient.registerObserver(wallet.handleIncomingReply)
    looper.add(someClient)
    looper.run(someClient.ensureConnectedToNodes())
    needle = trustAnchorWallet.defaultId
    makeGetNymRequest(someClient, wallet, needle)
    timeout = waits.expectedTransactionExecutionTime(len(nodeSet))
    looper.run(
        eventually(someClient.hasNym, needle, retryWait=1, timeout=timeout))
Example #6
0
def build_wallet_core(wallet_name, seed_file):
    config = getConfig()
    baseDir = os.path.expanduser(config.baseDir)

    seedFilePath = '{}/{}'.format(baseDir, seed_file)
    seed = wallet_name + '0' * (32 - len(wallet_name))

    # if seed file is available, read seed from it
    if os.path.isfile(seedFilePath):
        with open(seedFilePath, mode='r+') as file:
            seed = file.read().strip(' \t\n\r')
    wallet = Wallet(wallet_name)

    seed = bytes(seed, encoding='utf-8')
    wallet.addIdentifier(signer=DidSigner(seed=seed))

    return wallet
Example #7
0
def test_non_trust_anchor_cannot_create_user(nodeSet, looper, trustAnchor, addedTrustAnchor, client1):
    with whitelistextras("UnknownIdentifier"):
        non_trust_anchor = Wallet()
        signer = DidSigner()
        non_trust_anchor.addIdentifier(signer=signer)

        createNym(looper,
                  non_trust_anchor.defaultId,
                  trustAnchor,
                  addedTrustAnchor,
                  role=None,
                  verkey=non_trust_anchor.getVerkey())

        op = add_nym_operation(seed=b'a secret trust anchor seed......')

        submitAndCheckRejects(looper=looper, client=client1, wallet=non_trust_anchor, op=op,
                              identifier=non_trust_anchor.defaultId,
                              contains="UnauthorizedClientRequest")
Example #8
0
def testTrustAnchorSuspendingHimselfByVerkeyFlush(be, do, trusteeCli,
                                                  trustAnchorAdded,
                                                  nymAddedOut, trustAnchorCli):
    # The trust anchor has already lost its role due to previous tests,
    # but it is ok for this test where the trust anchor flushes its verkey
    # and then he is unable to send NYM due to empty verkey.
    be(trustAnchorCli)
    do('send NYM dest={remote} verkey=',
       within=5,
       expect=nymAddedOut,
       mapper=trustAnchorAdded)

    s = DidSigner().identifier
    errorMsg = "CouldNotAuthenticate('Can not find verkey for"
    do('send NYM dest={remote}',
       within=5,
       expect=[errorMsg],
       mapper={'remote': s})
Example #9
0
    def gen_trustee_def(cls, trustee_seeds):

        if (trustee_seeds == None):
            trustee_seeds = []
            seed = "Trustee1"
            seed = ('0' * (32 - len(seed)) + seed)
            trustee_seeds.append(seed)

        trustee_defs = []
        for i in range(1, len(trustee_seeds) + 1):
            d = adict()
            d.name = "Trustee" + str(i)
            d.sigseed = cls.get_signing_seed(trustee_seeds[i - 1])
            t_signer = DidSigner(seed=d.sigseed)
            d.nym = t_signer.identifier
            d.verkey = t_signer.verkey
            trustee_defs.append(d)

        return trustee_defs
Example #10
0
def anotherTrustAnchor(nodeSet, steward, stewardWallet, tdirWithClientPoolTxns,
                       looper):
    sseed = b'1 secret trust anchor seed......'
    signer = DidSigner(seed=sseed)
    c, _ = genTestClient(nodeSet,
                         tmpdir=tdirWithClientPoolTxns,
                         usePoolLedger=True)
    w = Wallet(c.name)
    w.addIdentifier(signer=signer)
    c.registerObserver(w.handleIncomingReply)
    looper.add(c)
    looper.run(c.ensureConnectedToNodes())
    createNym(looper,
              signer.identifier,
              steward,
              stewardWallet,
              role=TRUST_ANCHOR,
              verkey=signer.verkey)
    return c, w
Example #11
0
def addNyms():
    with Looper(debug=getConfig().LOOPER_DEBUG) as looper:

        from indy_client.test.helper import createNym

        # Starting clients
        print("Spawning client")
        client, wallet = spawnClient(stewardName, 5678, stewardSeed)
        client.registerObserver(wallet.handleIncomingReply)
        print("Adding it to looper")
        looper.add(client)
        print("Running it")
        looper.run(ensureConnectedToNodes(client))

        # Creating request
        print("Creating request")
        bad = []
        for seed in trustAnchorSeeds:
            signer = DidSigner(seed=seed.encode())
            nym = signer.identifier
            verkey = signer.verkey
            # Sending requests
            print("Creating nym for seed {}".format(seed))
            try:
                createNym(looper=looper,
                          nym=nym,
                          creatorClient=client,
                          creatorWallet=wallet,
                          verkey=verkey,
                          role=TRUST_ANCHOR)
                print("Successfully created nym for {}".format(seed))
            except Exception as ex:
                bad.append(seed)
                print("Failed to create nym for {}".format(seed))

        print("=======================")
        if not bad:
            print("All nyms created successfully")
        else:
            print("Failed to created nyms for:")
            for nym in bad:
                print("-", nym)
        print("=======================")
Example #12
0
def createAgent(agentClass, name, wallet=None, basedirpath=None, port=None,
                loop=None, clientClass=Client):
    config = getConfig()

    if not wallet:
        wallet = Wallet(name)
        wallet.addIdentifier(signer=DidSigner(
            seed=randomString(32).encode('utf-8')))
    if not basedirpath:
        basedirpath = config.baseDir
    if not port:
        _, port = genHa()

    client = create_client(base_dir_path=basedirpath, client_class=clientClass)

    return agentClass(basedirpath=basedirpath,
                      client=client,
                      wallet=wallet,
                      port=port,
                      loop=loop)
    def gen_defs(cls, ips, nodeCount, starting_port):
        """
        Generates some default steward and node definitions for tests
        :param ips: array of ip addresses
        :param nodeCount: number of stewards/nodes
        :param starting_port: ports are assigned incremental starting with this
        :return: duple of steward and node definitions
        """
        if not ips:
            ips = ['127.0.0.1'] * nodeCount
        else:
            if len(ips) != nodeCount:
                if len(ips) > nodeCount:
                    ips = ips[:nodeCount]
                else:
                    ips += ['127.0.0.1'] * (nodeCount - len(ips))

        steward_defs = []
        node_defs = []
        for i in range(1, nodeCount + 1):
            d = adict()
            d.name = "Steward" + str(i)
            d.sigseed = cls.getSigningSeed(d.name)
            s_signer = DidSigner(seed=d.sigseed)
            d.nym = s_signer.identifier
            d.verkey = s_signer.verkey
            steward_defs.append(d)

            name = "Node" + str(i)
            sigseed = cls.getSigningSeed(name)
            node_defs.append(NodeDef(
                name=name,
                ip=ips[i - 1],
                port=starting_port + (i * 2) - 1,
                client_port=starting_port + (i * 2),
                idx=i,
                sigseed=sigseed,
                verkey=Signer(sigseed).verhex,
                steward_nym=d.nym))
        return steward_defs, node_defs
Example #14
0
def changeHA(looper,
             config,
             nodeName,
             nodeSeed,
             newNodeHA,
             stewardName,
             stewardsSeed,
             newClientHA=None,
             basedir=None):
    if not newClientHA:
        newClientHA = HA(newNodeHA.host, newNodeHA.port + 1)

    assert basedir is not None

    # prepare steward wallet
    stewardSigner = DidSigner(seed=stewardsSeed)
    stewardWallet = Wallet(stewardName)
    stewardWallet.addIdentifier(signer=stewardSigner)

    # prepare client to submit change ha request
    _, randomClientPort = genHa()
    client = Client(stewardName,
                    ha=('0.0.0.0', randomClientPort),
                    config=config,
                    basedirpath=basedir)
    looper.add(client)
    timeout = waits.expectedClientToPoolConnectionTimeout(4)
    looper.run(
        eventually(__checkClientConnected,
                   client,
                   retryWait=1,
                   timeout=timeout))

    nodeVerKey = SimpleSigner(seed=nodeSeed).verkey

    # send request
    req = submitNodeIpChange(client, stewardWallet, nodeName, nodeVerKey,
                             newNodeHA, newClientHA)
    return client, req
Example #15
0
 def acceptInvitation(self, link: Union[str, Link]):
     if isinstance(link, str):
         link = self.wallet.getLink(link, required=True)
     elif isinstance(link, Link):
         pass
     else:
         raise TypeError("Type of link must be either string or Link but "
                         "provided {}".format(type(link)))
     # TODO should move to wallet in a method like accept(link)
     if not link.localIdentifier:
         signer = DidSigner()
         self.wallet.addIdentifier(signer=signer)
         link.localIdentifier = signer.identifier
     msg = {
         TYPE: ACCEPT_INVITE,
         # TODO should not send this... because origin should be the sender
         NONCE: link.invitationNonce,
         VERKEY: self.wallet.getVerkey(link.localIdentifier)
     }
     logger.debug("{} accepting invitation from {} with id {}".format(
         self.name, link.name, link.localIdentifier))
     self.signAndSend(msg, None, None, link.name)
Example #16
0
    def _add_did(role, did_name, with_verkey=True):
        nonlocal data

        data['seeds'][did_name] = did_name + '0' * (32 - len(did_name))
        t_sgnr = DidSigner(seed=data['seeds'][did_name].encode())
        verkey = t_sgnr.full_verkey if with_verkey else None
        data['txns'].append(
            Member.nym_txn(nym=t_sgnr.identifier,
                           verkey=verkey,
                           role=role.value,
                           name=did_name,
                           creator=trustee.did))

        if verkey:
            (sdk_did, sdk_verkey) = looper.loop.run_until_complete(
                create_and_store_my_did(
                    trustee.wallet_handle,
                    json.dumps({'seed': data['seeds'][did_name]})))

        return DID(did=t_sgnr.identifier,
                   role=role,
                   verkey=verkey,
                   creator=trustee,
                   wallet_handle=trustee.wallet_handle)
Example #17
0
def testNewverkeyAddedToCID(be, do, philCli, trustAnchorSigner,
                            verkeyRemovedFromExistingCID):
    newSigner = DidSigner()
    addNym(be, do, philCli, trustAnchorSigner.identifier, newSigner.verkey)
    getNym(be, do, philCli, trustAnchorSigner.identifier,
           getCurrentVerkeyIsgMsgs(trustAnchorSigner.identifier, newSigner.verkey))
def newFullKeySigner(wallet, fullKeyIdr):
    return DidSigner(identifier=fullKeyIdr)
Example #19
0
from indy_client.client.wallet.wallet import Wallet
from indy_client.test.client.TestClient import TestClient
from indy_client.test.constants import primes

from stp_core.common.log import getlogger
from indy_client.agent.runnable_agent import RunnableAgent
from indy_client.agent.agent import create_client
from indy_client.test.agent.mock_backend_system import MockBackendSystem

from anoncreds.protocol.types import AttribType, AttribDef, ID, SchemaKey
from indy_client.agent.walleted_agent import WalletedAgent

logger = getlogger()

FABER_SEED = b'Faber000000000000000000000000000'
FABER_SIGNER = DidSigner(seed=FABER_SEED)
FABER_ID = FABER_SIGNER.identifier
FABER_VERKEY = FABER_SIGNER.verkey


def create_faber(name=None,
                 wallet=None,
                 base_dir_path=None,
                 port=5555,
                 client=None):

    if client is None:
        client = create_client(base_dir_path=base_dir_path,
                               client_class=TestClient)

    endpoint_args = {'onlyListener': True}
Example #20
0
def updateWalletIdrWithFullKeySigner(wallet, idr):
    newSigner = DidSigner(identifier=idr)
    wallet.updateSigner(idr, newSigner)
    assertEquality(newSigner.verkey, wallet.getVerkey(idr))
    checkFullVerkeySize(wallet.getVerkey(idr))
    return newSigner.verkey
def newFullKeySigner(wallet, abbrevIdr):
    return DidSigner(identifier=abbrevIdr)
def newAbbrvKey(wallet, abbrevIdr):
    newSigner = DidSigner(identifier=abbrevIdr)
    wallet.updateSigner(abbrevIdr, newSigner)
    assertEquality(newSigner.verkey, wallet.getVerkey(abbrevIdr))
    return newSigner.verkey
Example #23
0
def testNewverkeyAddedToDID(be, do, philCli, abbrevIdr,
                            verkeyRemovedFromExistingDID):
    newSigner = DidSigner()
    addNym(be, do, philCli, abbrevIdr, newSigner.verkey)
    getNym(be, do, philCli, abbrevIdr,
           getCurrentVerkeyIsgMsgs(abbrevIdr, newSigner.verkey))
Example #24
0
def poolTxnData(request):
    nodeCount = getValueFromModule(request, "nodeCount", 4)
    nodes_with_bls = getValueFromModule(request, "nodes_wth_bls", nodeCount)
    data = {'txns': [], 'seeds': {}, 'nodesWithBls': {}}
    for i, node_name in zip(range(1, nodeCount + 1), genNodeNames(nodeCount)):
        data['seeds'][node_name] = node_name + '0' * (32 - len(node_name))
        steward_name = 'Steward' + str(i)
        data['seeds'][steward_name] = steward_name + \
            '0' * (32 - len(steward_name))

        n_idr = SimpleSigner(seed=data['seeds'][node_name].encode()).identifier
        s_idr = DidSigner(seed=data['seeds'][steward_name].encode())

        data['txns'].append({
            TXN_TYPE: NYM,
            ROLE: STEWARD,
            ALIAS: steward_name,
            TARGET_NYM: s_idr.identifier,
            VERKEY: s_idr.verkey,
        })
        node_txn = {
            TXN_TYPE: NODE,
            f.IDENTIFIER.nm: s_idr.identifier,
            TARGET_NYM: n_idr,
            DATA: {
                ALIAS: node_name,
                SERVICES: [VALIDATOR],
                NODE_IP: '127.0.0.1',
                NODE_PORT: genHa()[1],
                CLIENT_IP: '127.0.0.1',
                CLIENT_PORT: genHa()[1],
            }
        }

        if i <= nodes_with_bls:
            _, bls_key = create_default_bls_crypto_factory().generate_bls_keys(
                seed=data['seeds'][node_name])
            node_txn[DATA][BLS_KEY] = bls_key
            data['nodesWithBls'][node_name] = True

        data['txns'].append(node_txn)

    more_data_seeds = \
        {
            "Alice": "99999999999999999999999999999999",
            "Jason": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
            "John": "dddddddddddddddddddddddddddddddd",
            "Les": "ffffffffffffffffffffffffffffffff"
        }
    more_data_users = []
    for more_name, more_seed in more_data_seeds.items():
        signer = DidSigner(seed=more_seed.encode())
        more_data_users.append({
            TXN_TYPE:
            NYM,
            ALIAS:
            more_name,
            TARGET_NYM:
            signer.identifier,
            VERKEY:
            signer.verkey,
            f.IDENTIFIER.nm:
            "5rArie7XKukPCaEwq5XGQJnM9Fc5aZE3M9HAPVfMU2xC"
        })

    data['txns'].extend(more_data_users)
    data['seeds'].update(more_data_seeds)
    return data
Example #25
0
def buildAgentWallet(name, seed):
    wallet = Wallet(name)
    wallet.addIdentifier(signer=DidSigner(seed=seed))
    return wallet
Example #26
0
def poolTxnData(request):
    nodeCount = getValueFromModule(request, "nodeCount", 4)
    nodes_with_bls = getValueFromModule(request, "nodes_wth_bls", nodeCount)
    data = {'txns': [], 'seeds': {}, 'nodesWithBls': {}}
    for i, node_name in zip(range(1, nodeCount + 1), genNodeNames(nodeCount)):
        data['seeds'][node_name] = node_name + '0' * (32 - len(node_name))
        steward_name = 'Steward' + str(i)
        data['seeds'][steward_name] = steward_name + \
                                      '0' * (32 - len(steward_name))

        n_idr = SimpleSigner(seed=data['seeds'][node_name].encode()).identifier
        s_idr = DidSigner(seed=data['seeds'][steward_name].encode())

        data['txns'].append(
            Member.nym_txn(nym=s_idr.identifier,
                           verkey=s_idr.verkey,
                           role=STEWARD,
                           name=steward_name,
                           seq_no=i))

        node_txn = Steward.node_txn(steward_nym=s_idr.identifier,
                                    node_name=node_name,
                                    nym=n_idr,
                                    ip='127.0.0.1',
                                    node_port=genHa()[1],
                                    client_port=genHa()[1],
                                    client_ip='127.0.0.1',
                                    services=[VALIDATOR],
                                    seq_no=i)

        if i <= nodes_with_bls:
            _, bls_key, bls_key_proof = create_default_bls_crypto_factory(
            ).generate_bls_keys(seed=data['seeds'][node_name])
            get_payload_data(node_txn)[DATA][BLS_KEY] = bls_key
            get_payload_data(node_txn)[DATA][BLS_KEY_PROOF] = bls_key_proof
            data['nodesWithBls'][node_name] = True

        data['txns'].append(node_txn)

    # Add 4 Trustees
    for i in range(4):
        trustee_name = 'Trs' + str(i)
        data['seeds'][trustee_name] = trustee_name + '0' * (32 -
                                                            len(trustee_name))
        t_sgnr = DidSigner(seed=data['seeds'][trustee_name].encode())
        data['txns'].append(
            Member.nym_txn(nym=t_sgnr.identifier,
                           verkey=t_sgnr.verkey,
                           role=TRUSTEE,
                           name=trustee_name))

    more_data_seeds = \
        {
            "Alice": "99999999999999999999999999999999",
            "Jason": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
            "John": "dddddddddddddddddddddddddddddddd",
            "Les": "ffffffffffffffffffffffffffffffff"
        }
    more_data_users = []
    for more_name, more_seed in more_data_seeds.items():
        signer = DidSigner(seed=more_seed.encode())
        more_data_users.append(
            Member.nym_txn(
                nym=signer.identifier,
                verkey=signer.verkey,
                name=more_name,
                creator="5rArie7XKukPCaEwq5XGQJnM9Fc5aZE3M9HAPVfMU2xC"))

    data['txns'].extend(more_data_users)
    data['seeds'].update(more_data_seeds)
    return data
Example #27
0
def ensurePoolIsOperable(be, do, cli):
    randomNymMapper = {'remote': DidSigner(seed=randomSeed()).identifier}
    addAgent(be, do, cli, randomNymMapper)
Example #28
0
from sovrin_client.agent.agent import create_client
from sovrin_client.test.agent.mock_backend_system import MockBackendSystem

from sovrin_client.agent.walleted_agent import WalletedAgent
from sovrin_client.test.constants import primes
from sovrin_client.test.agent.helper import buildAcmeWallet
from sovrin_client.test.client.TestClient import TestClient

from anoncreds.protocol.types import AttribType, AttribDef, ID

logger = getlogger()

schema_id = None

ACME_SEED = b'Acme0000000000000000000000000000'
ACME_ID = DidSigner(seed=ACME_SEED).identifier
ACME_VERKEY = DidSigner(seed=ACME_SEED).verkey
ACME_SIGNER = DidSigner(seed=ACME_SEED)


class AcmeAgent(WalletedAgent):
    async def postProofVerif(self, claimName, link, frm):
        if claimName == "Job-Application":

            for schema in await self.issuer.wallet.getAllSchemas():

                if schema.name == 'Job-Certificate':
                    await self._set_available_claim_by_internal_id(
                        link.internalId,
                        ID(schemaKey=schema.getKey(), schemaId=schema.seqId))
Example #29
0
 def create_identifier_for_link(self, link):
     signer = DidSigner()
     self.wallet.addIdentifier(signer=signer)
     link.localIdentifier = signer.identifier
     link.localVerkey = signer.verkey
Example #30
0
 def _(name):
     wallet = Wallet(name)
     wallet.addIdentifier(signer=DidSigner())
     return wallet