Exemplo n.º 1
0
def RunEnclaveService(config, enclave):
    httpport = config['EnclaveService']['HttpPort']
    logger.info('service started on port %s', httpport)

    root = ContractEnclaveServer(config, enclave)
    site = server.Site(root)

    threadpool = reactor.getThreadPool()
    threadpool.start()
    threadpool.adjustPoolsize(
        8, 100)  # Min & Max number of request to service at a time
    logger.info('# of workers: %d', threadpool.workers)

    reactor.listenTCP(httpport, site)

    @defer.inlineCallbacks
    def shutdown_twisted():
        logger.info("Stopping Twisted")
        yield reactor.callFromThread(reactor.stop)

    reactor.addSystemEventTrigger('before', 'shutdown', shutdown_twisted)

    try:
        reactor.run()
    except ReactorNotRunning:
        logger.warn('shutdown')
    except:
        logger.warn('shutdown')

    pdo_enclave_helper.shutdown()
    sys.exit(0)
Exemplo n.º 2
0
def ErrorShutdown():
    """
    Perform a clean shutdown after an error
    """
    try:
        enclave_helper.shutdown()
    except Exception as e:
        logger.exception('shutdown failed')

    sys.exit(-1)
Exemplo n.º 3
0
def LocalMain(config):
    # create the enclave
    ledger_config = config.get('Sawtooth')

    # keys of the contract creator
    contract_creator_keys = keys.ServiceKeys.create_service_keys()

    # --------------------------------------------------
    logger.info('create and register the enclave')
    # --------------------------------------------------
    enclave = CreateAndRegisterEnclave(config)

    # --------------------------------------------------
    logger.info('create the contract and register it')
    # --------------------------------------------------
    contract = CreateAndRegisterContract(config, enclave,
                                         contract_creator_keys)

    # --------------------------------------------------
    logger.info('invoke a few methods on the contract, load from file')
    # --------------------------------------------------
    data_dir = config['Contract']['DataDirectory']

    try:
        if use_ledger:
            logger.info('reload the contract from local file')
            contract_save_file = config['Contract']['SaveFile']
            contract = contract_helper.Contract.read_from_file(
                ledger_config, contract_save_file, data_dir=data_dir)
    except Exception as e:
        logger.error('failed to load the contract from a file; %s', str(e))
        ErrorShutdown()

    try:
        UpdateTheContract(config, enclave, contract, contract_creator_keys)
    except Exception as e:
        logger.error('contract execution failed; %s', str(e))
        ErrorShutdown()

    enclave_helper.shutdown()
    sys.exit(0)
Exemplo n.º 4
0
try:
    bad_contract_id = crypto.byte_array_to_hex(crypto.random_bit_string(256))[:32]
    secret_list = secret_helper.create_secret_list(3, enclave_keys, contract_id, contract_creator_id)

    secretinfo = enclave_client.verify_secrets(bad_contract_id, contract_creator_id, secret_list)
    logger.error('failed to catch invalid secret list')
    ErrorShutdown()
except :
    pass

# -----------------------------------------------------------------
logger.info('test with invalid creator id')
logger.info('expected error: failed to verify the secret signature')
# -----------------------------------------------------------------
try:
    bad_contract_creator_keys = keys.ServiceKeys.create_service_keys()
    bad_contract_creator_id = bad_contract_creator_keys.identity

    bad_contract_id = crypto.byte_array_to_hex(crypto.random_bit_string(256))[:32]
    secret_list = secret_helper.create_secret_list(3, enclave_keys, contract_id, contract_creator_id)

    secretinfo = enclave_client.verify_secrets(contract_id, bad_contract_creator_id, secret_list)
    logger.error('failed to catch invalid secret list')
    ErrorShutdown()
except :
    pass

# this is necessary for a clean shutdown
enclave_helper.shutdown()
sys.exit(0)