Esempio n. 1
0
def test_append_txn_metadata():
    txn = init_empty_txn(txn_type=NODE, protocol_version="3")
    set_payload_data(txn, {"somekey": "somevalue"})
    append_payload_metadata(txn, frm="DID1", req_id=12345)
    append_txn_metadata(txn, seq_no=144, txn_time=12345678, txn_id="dddd")
    expected = SortedDict({
        "reqSignature": {},
        "txn": {
            "data": {
                "somekey": "somevalue"
            },
            "metadata": {
                "from": "DID1",
                "reqId": 12345,
            },
            "protocolVersion": "3",
            "type": NODE,
        },
        "txnMetadata": {
            "seqNo": 144,
            "txnId": "dddd",
            "txnTime": 12345678,
        },
        "ver": "1"
    })
    assert SortedDict(expected) == SortedDict(txn)
Esempio n. 2
0
def test_append_payload_metadata():
    txn = init_empty_txn(txn_type=NODE, protocol_version="3")
    set_payload_data(txn, {"somekey": "somevalue"})
    append_payload_metadata(txn,
                            frm="DID1",
                            req_id=12345,
                            digest="random req digest",
                            payload_digest="random payload")
    expected = SortedDict({
        "reqSignature": {},
        "txn": {
            "data": {
                "somekey": "somevalue"
            },
            "metadata": {
                "from": "DID1",
                "reqId": 12345,
                "digest": "random req digest",
                "payloadDigest": "random payload"
            },
            "protocolVersion": "3",
            "type": NODE,
        },
        "txnMetadata": {},
        "ver": "1"
    })
    assert SortedDict(expected) == SortedDict(txn)
Esempio n. 3
0
 def node_txn(steward_nym, node_name, nym, ip, node_port, client_port,
              client_ip=None, blskey=None, services=None, txn_id=None,
              seq_no=None,
              protocol_version=CURRENT_PROTOCOL_VERSION, bls_key_proof=None):
     txn = init_empty_txn(txn_type=NODE, protocol_version=protocol_version)
     txn = append_payload_metadata(txn, frm=steward_nym)
     txn_data = {
         TARGET_NYM: nym,
         DATA: {
             CLIENT_IP: client_ip or ip,
             ALIAS: node_name,
             CLIENT_PORT: client_port,
             NODE_IP: ip,
             NODE_PORT: node_port,
             SERVICES: services or [VALIDATOR],
             BLS_KEY: blskey,
             BLS_KEY_PROOF: bls_key_proof
         },
     }
     txn = set_payload_data(txn, txn_data)
     txn_id = txn_id or sha256(node_name.encode()).hexdigest()
     txn = append_txn_metadata(txn, txn_id=txn_id)
     if seq_no:
         txn = append_txn_metadata(txn, seq_no=seq_no)
     return txn
Esempio n. 4
0
def test_no_state_proofs_if_protocol_version_less(request_handler):
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'
    role = "2"
    verkey = "~7TYfekw4GUagBnBVCqPjiC"
    seq_no = 0
    txn_time = int(time.time())
    # Adding nym
    data = {
        f.IDENTIFIER.nm: nym,
        ROLE: role,
        VERKEY: verkey,
        f.SEQ_NO.nm: seq_no,
        TXN_TIME: txn_time,
    }
    txn = append_txn_metadata(reqToTxn(Request(operation=data)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)
    request_handler.updateNym(nym, txn)
    request_handler.state.commit()
    multi_sig = save_multi_sig(request_handler)

    # Getting nym
    request = Request(operation={TARGET_NYM: nym}, signatures={})
    result = request_handler.handleGetNymReq(request)
    assert STATE_PROOF not in result
Esempio n. 5
0
 def node_txn(steward_nym,
              node_name,
              nym,
              ip,
              node_port,
              client_port,
              client_ip=None,
              blskey=None,
              services=None,
              txn_id=None,
              seq_no=None):
     txn = init_empty_txn(txn_type=NODE)
     txn = append_payload_metadata(txn, frm=steward_nym)
     txn_data = {
         TARGET_NYM: nym,
         DATA: {
             CLIENT_IP: client_ip or ip,
             ALIAS: node_name,
             CLIENT_PORT: client_port,
             NODE_IP: ip,
             NODE_PORT: node_port,
             SERVICES: services or [VALIDATOR],
             BLS_KEY: blskey
         },
     }
     txn = set_payload_data(txn, txn_data)
     txn_id = txn_id or sha256(node_name.encode()).hexdigest()
     txn = append_txn_metadata(txn, txn_id=txn_id)
     if seq_no:
         txn = append_txn_metadata(txn, seq_no=seq_no)
     return txn
Esempio n. 6
0
def test_no_state_proofs_if_protocol_version_less(write_manager, read_manager,
                                                  db_manager):
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'
    role = "2"
    verkey = "~7TYfekw4GUagBnBVCqPjiC"
    identifier = "6ouriXMZkLeHsuXrN1X1fd"

    seq_no = 0
    txn_time = int(time.time())
    # Adding nym
    data = {
        TARGET_NYM: nym,
        ROLE: role,
        VERKEY: verkey,
    }
    txn = append_txn_metadata(reqToTxn(
        Request(operation=data,
                protocolVersion=CURRENT_PROTOCOL_VERSION,
                identifier=identifier)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = set_type(txn, NYM)
    txn = append_payload_metadata(txn, frm=nym)
    write_manager.update_state(txn)
    db_manager.get_state(DOMAIN_LEDGER_ID).commit()
    multi_sig = save_multi_sig(db_manager)

    # Getting nym
    request = Request(operation={
        TARGET_NYM: nym,
        TXN_TYPE: GET_NYM,
    },
                      signatures={})
    result = read_manager.get_result(request)
    assert STATE_PROOF not in result
Esempio n. 7
0
    def nym_txn(nym,
                name=None,
                verkey=None,
                role=None,
                creator=None,
                txn_id=None,
                seq_no=None):
        txn = init_empty_txn(NYM)

        txn_data = {
            TARGET_NYM: nym,
        }
        if verkey is not None:
            txn_data[VERKEY] = verkey
        if role is not None:
            txn_data[ROLE] = role
        if name is not None:
            txn_data[ALIAS] = name
        set_payload_data(txn, txn_data)

        txn = append_payload_metadata(txn, frm=creator)
        if txn_id:
            txn = append_txn_metadata(txn, txn_id=txn_id)
        if seq_no:
            txn = append_txn_metadata(txn, seq_no=seq_no)

        return txn
Esempio n. 8
0
def test_state_proofs_for_get_claim_def(write_manager, read_manager,
                                        db_manager):
    # Adding claim def
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'

    seq_no = 0
    txn_time = int(time.time())
    identifier = "6ouriXMZkLeHsuXrN1X1fd"

    schema_seqno = 0
    signature_type = 'CL'
    key_components = '{"key_components": []}'
    tag = 'tag1'

    txn = {
        TXN_TYPE: CLAIM_DEF,
        TARGET_NYM: nym,
        CLAIM_DEF_SCHEMA_REF: schema_seqno,
        CLAIM_DEF_PUBLIC_KEYS: key_components,
        CLAIM_DEF_TAG: tag
    }
    txn = append_txn_metadata(reqToTxn(
        Request(operation=txn,
                protocolVersion=CURRENT_PROTOCOL_VERSION,
                identifier=identifier)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)

    write_manager.update_state(txn)
    db_manager.get_state(DOMAIN_LEDGER_ID).commit()
    multi_sig = save_multi_sig(db_manager)

    # Getting claim def
    request = Request(operation={
        IDENTIFIER: nym,
        CLAIM_DEF_FROM: nym,
        CLAIM_DEF_SCHEMA_REF: schema_seqno,
        CLAIM_DEF_SIGNATURE_TYPE: signature_type,
        CLAIM_DEF_TAG: tag,
        TXN_TYPE: GET_CLAIM_DEF,
    },
                      signatures={},
                      protocolVersion=CURRENT_PROTOCOL_VERSION)

    result = read_manager.get_result(request)
    proof = extract_proof(result, multi_sig)
    assert result[DATA] == key_components

    # Verifying signed state proof
    path = domain.make_state_path_for_claim_def(nym, schema_seqno,
                                                signature_type, tag)
    assert is_proof_verified(db_manager, proof, path, key_components, seq_no,
                             txn_time)
 def append_old_payload_metadata(txn,
                                 frm=None,
                                 req_id=None,
                                 digest=None,
                                 payload_digest=None,
                                 taa_acceptance=None):
     txn = append_payload_metadata(txn, frm, req_id, digest, payload_digest,
                                   taa_acceptance)
     metadata = txn[TXN_PAYLOAD][TXN_PAYLOAD_METADATA]
     del metadata[TXN_PAYLOAD_METADATA_PAYLOAD_DIGEST]
     metadata[TXN_PAYLOAD_METADATA_DIGEST] = payload_digest
     return txn
def test_append_payload_metadata():
    txn = init_empty_txn(txn_type=NODE, protocol_version="3")
    set_payload_data(txn, {"somekey": "somevalue"})
    append_payload_metadata(txn, frm="DID1",
                            req_id=12345,
                            digest="random req digest")
    expected = SortedDict({
        "reqSignature": {},
        "txn": {
            "data": {"somekey": "somevalue"},
            "metadata": {
                "from": "DID1",
                "reqId": 12345,
                "digest": "random req digest"
            },
            "protocolVersion": "3",
            "type": NODE,
        },
        "txnMetadata": {
        },
        "ver": "1"
    })
    assert SortedDict(expected) == SortedDict(txn)
Esempio n. 11
0
def test_state_proofs_for_get_claim_def(request_handler):
    # Adding claim def
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'

    seq_no = 0
    txn_time = int(time.time())
    identifier = "6ouriXMZkLeHsuXrN1X1fd"

    schema_seqno = 0
    signature_type = 'CL'
    key_components = '{"key_components": []}'

    txn = {
        TXN_TYPE: CLAIM_DEF,
        TARGET_NYM: nym,
        REF: schema_seqno,
        DATA: key_components
    }
    txn = append_txn_metadata(reqToTxn(
        Request(operation=txn,
                protocolVersion=CURRENT_PROTOCOL_VERSION,
                identifier=identifier)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)

    request_handler._addClaimDef(txn)
    request_handler.state.commit()
    multi_sig = save_multi_sig(request_handler)

    # Getting claim def
    request = Request(operation={
        IDENTIFIER: nym,
        ORIGIN: nym,
        REF: schema_seqno,
        SIGNATURE_TYPE: signature_type
    },
                      signatures={},
                      protocolVersion=CURRENT_PROTOCOL_VERSION)

    result = request_handler.handleGetClaimDefReq(request)
    proof = extract_proof(result, multi_sig)
    assert result[DATA] == key_components

    # Verifying signed state proof
    path = domain.make_state_path_for_claim_def(nym, schema_seqno,
                                                signature_type)
    assert is_proof_verified(request_handler, proof, path, key_components,
                             seq_no, txn_time)
def test_append_txn_metadata():
    txn = init_empty_txn(txn_type=NODE, protocol_version="3")
    set_payload_data(txn, {"somekey": "somevalue"})
    append_payload_metadata(txn, frm="DID1", req_id=12345)
    append_txn_metadata(txn, seq_no=144, txn_time=12345678, txn_id="dddd")
    expected = SortedDict({
        "reqSignature": {},
        "txn": {
            "data": {"somekey": "somevalue"},
            "metadata": {
                "from": "DID1",
                "reqId": 12345,
            },
            "protocolVersion": "3",
            "type": NODE,
        },
        "txnMetadata": {
            "seqNo": 144,
            "txnId": "dddd",
            "txnTime": 12345678,
        },
        "ver": "1"
    })
    assert SortedDict(expected) == SortedDict(txn)
Esempio n. 13
0
def test_state_proofs_for_get_schema(write_manager, read_manager, db_manager):
    # Adding schema
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'

    seq_no = 0
    txn_time = int(time.time())
    identifier = "6ouriXMZkLeHsuXrN1X1fd"

    schema_name = "schema_a"
    schema_version = "1.0"
    # data = '{"name": "schema_a", "version": "1.0"}'
    schema_key = {SCHEMA_NAME: schema_name, SCHEMA_VERSION: schema_version}
    data = {**schema_key, SCHEMA_ATTR_NAMES: ["Some_Attr", "Attr1"]}
    txn = {
        TXN_TYPE: SCHEMA,
        DATA: data,
    }
    txn = append_txn_metadata(reqToTxn(
        Request(operation=txn,
                protocolVersion=CURRENT_PROTOCOL_VERSION,
                identifier=identifier)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)

    write_manager.update_state(txn)
    db_manager.get_state(DOMAIN_LEDGER_ID).commit()
    multi_sig = save_multi_sig(db_manager)

    # Getting schema
    request = Request(operation={
        TARGET_NYM: nym,
        DATA: schema_key,
        TXN_TYPE: GET_SCHEMA
    },
                      signatures={},
                      protocolVersion=CURRENT_PROTOCOL_VERSION)

    result = read_manager.get_result(request)
    proof = extract_proof(result, multi_sig)
    assert result[DATA] == data

    data.pop(NAME)
    data.pop(VERSION)

    # Verifying signed state proof
    path = domain.make_state_path_for_schema(nym, schema_name, schema_version)
    assert is_proof_verified(db_manager, proof, path, data, seq_no, txn_time)
def test_state_proofs_for_get_context(write_manager, read_manager, db_manager):
    # Adding context
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'

    seq_no = 0
    txn_time = int(time.time())
    identifier = "6ouriXMZkLeHsuXrN1X1fd"

    context_name = "context_a"
    context_version = "1.0"
    meta = {
        CONTEXT_NAME: context_name,
        CONTEXT_VERSION: context_version,
        RS_TYPE: CONTEXT_TYPE
    }
    data = {CONTEXT_CONTEXT: {"ex": "https://example.org/examples#"}}
    txn = {TXN_TYPE: SET_CONTEXT, DATA: data, META: meta}
    txn = append_txn_metadata(reqToTxn(
        Request(operation=txn,
                protocolVersion=CURRENT_PROTOCOL_VERSION,
                identifier=identifier)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)

    write_manager.update_state(txn)
    db_manager.get_state(DOMAIN_LEDGER_ID).commit()
    multi_sig = save_multi_sig(db_manager)

    # Getting context
    request = Request(operation={
        TARGET_NYM: nym,
        META: meta,
        TXN_TYPE: GET_CONTEXT
    },
                      signatures={},
                      protocolVersion=CURRENT_PROTOCOL_VERSION)

    result = read_manager.get_result(request)
    proof = extract_proof(result, multi_sig)
    assert result[DATA][DATA] == data

    # Verifying signed state proof
    path = domain.make_state_path_for_context(nym, context_name,
                                              context_version)
    value = {META: meta, DATA: data}
    assert is_proof_verified(db_manager, proof, path, value, seq_no, txn_time)
Esempio n. 15
0
def test_state_proofs_for_get_schema(request_handler):
    # Adding schema
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'

    seq_no = 0
    txn_time = int(time.time())

    schema_name = "schema_a"
    schema_version = "1.0"
    # data = '{"name": "schema_a", "version": "1.0"}'
    schema_key = {NAME: schema_name, VERSION: schema_version}
    data = {**schema_key, "Some_Attr": "Attr1"}
    txn = {
        TXN_TYPE: SCHEMA,
        DATA: data,
    }
    txn = append_txn_metadata(reqToTxn(Request(operation=txn)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)

    request_handler._addSchema(txn)
    request_handler.state.commit()
    multi_sig = save_multi_sig(request_handler)

    # Getting schema
    request = Request(operation={
        TARGET_NYM: nym,
        DATA: schema_key
    },
                      signatures={},
                      protocolVersion=CURRENT_PROTOCOL_VERSION)

    result = request_handler.handleGetSchemaReq(request)
    proof = extract_proof(result, multi_sig)
    assert result[DATA] == data

    data.pop(NAME)
    data.pop(VERSION)

    # Verifying signed state proof
    path = domain.make_state_path_for_schema(nym, schema_name, schema_version)
    assert is_proof_verified(request_handler, proof, path, data, seq_no,
                             txn_time)
Esempio n. 16
0
def test_state_proofs_for_get_nym(request_handler):
    nym = 'Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv'
    role = "2"
    verkey = "~7TYfekw4GUagBnBVCqPjiC"
    seq_no = 0
    txn_time = int(time.time())
    # Adding nym
    data = {
        f.IDENTIFIER.nm: nym,
        ROLE: role,
        VERKEY: verkey,
        f.SEQ_NO.nm: seq_no,
        TXN_TIME: txn_time,
    }
    txn = append_txn_metadata(reqToTxn(Request(operation=data)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)
    request_handler.updateNym(nym, txn)
    request_handler.state.commit()
    multi_sig = save_multi_sig(request_handler)

    # Getting nym
    request = Request(operation={TARGET_NYM: nym},
                      signatures={},
                      protocolVersion=CURRENT_PROTOCOL_VERSION)
    result = request_handler.handleGetNymReq(request)
    proof = extract_proof(result, multi_sig)

    # Verifying signed state proof
    path = request_handler.nym_to_state_key(nym)
    encoded_value = request_handler.stateSerializer.serialize(data)
    proof_nodes = base64.b64decode(proof[PROOF_NODES])
    root_hash = base58.b58decode(proof[ROOT_HASH])
    verified = request_handler.state.verify_state_proof(root_hash,
                                                        path,
                                                        encoded_value,
                                                        proof_nodes,
                                                        serialized=True)
    assert verified
Esempio n. 17
0
def prep_multi_sig(write_manager, db_manager, nym, role, verkey, seq_no):
    txn_time = int(time.time())
    identifier = "6ouriXMZkLeHsuXrN1X1fd"

    # Adding nym
    data = {
        TARGET_NYM: nym,
        ROLE: role,
        VERKEY: verkey,
    }
    txn = append_txn_metadata(reqToTxn(
        Request(operation=data,
                protocolVersion=CURRENT_PROTOCOL_VERSION,
                identifier=identifier)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = set_type(txn, NYM)
    txn = append_payload_metadata(txn, frm=nym)
    write_manager.update_state(txn)
    db_manager.get_state(DOMAIN_LEDGER_ID).commit()
    multi_sig = save_multi_sig(db_manager)
    return data, multi_sig
Esempio n. 18
0
    def nym_txn(nym, name=None, verkey=None, role=None, creator=None, txn_id=None, seq_no=None,
                protocol_version=CURRENT_PROTOCOL_VERSION):
        txn = init_empty_txn(NYM, protocol_version=protocol_version)

        txn_data = {
            TARGET_NYM: nym,
        }
        if verkey is not None:
            txn_data[VERKEY] = verkey
        if role is not None:
            txn_data[ROLE] = role
        if name is not None:
            txn_data[ALIAS] = name
        set_payload_data(txn, txn_data)

        txn = append_payload_metadata(txn,
                                      frm=creator)
        if txn_id:
            txn = append_txn_metadata(txn, txn_id=txn_id)
        if seq_no:
            txn = append_txn_metadata(txn, seq_no=seq_no)

        return txn
def prep_multi_sig(request_handler, nym, role, verkey, seq_no):
    txn_time = int(time.time())
    identifier = "6ouriXMZkLeHsuXrN1X1fd"

    # Adding nym
    data = {
        f.IDENTIFIER.nm: nym,
        ROLE: role,
        VERKEY: verkey,
        f.SEQ_NO.nm: seq_no,
        TXN_TIME: txn_time,
    }
    txn = append_txn_metadata(reqToTxn(
        Request(operation=data,
                protocolVersion=CURRENT_PROTOCOL_VERSION,
                identifier=identifier)),
                              seq_no=seq_no,
                              txn_time=txn_time)
    txn = append_payload_metadata(txn, frm=nym)
    request_handler.updateNym(nym, txn)
    request_handler.state.commit()
    multi_sig = save_multi_sig(request_handler)
    return data, multi_sig