Python client library for Cosmian Secure Computation
Project description
Cosmian Secure Computation Client
Overview
Python client library for Cosmian Secure Computation API powered by Intel SGX.
Install
$ pip install .
Example
from pathlib import Path import time from typing import Optional from cosmian_secure_computation_client import CodeProviderAPI, DataProviderAPI, ResultConsumerAPI host: str = "localhost" port: Optional[int] = None ssl: bool = True # # Code Provider # code_provider = CodeProviderAPI(host, port, ssl) # set your public/private keypair or generate a new one code_provider.set_keypair( public_key=bytes.fromhex("1f80306ddf75ee31bc8f71f29c93768bc6eaba2c1f67bcd7f179ca26d4361331"), private_key=bytes.fromhex("deb832a69e996898c835b9779c3a98cd3ba0b437a6aba94dacc33692154a815c") ) # or code_provider.generate_keypair() # say hello to the enclave by sending your public key code_provider.hello() # upload your Python code (could be encrypted or not) code_path: Path = Path("tests/data/cp/enclave-join") code_name: str = code_path.name code_provider.upload(dir_path=code_path, encrypt=False) # get enclave's public key bound to the code and each participant public key code_provider.key_finalize() # send your symmetric key sealed for the enclave code_provider.key_provisioning() # quote to be attested by Intel quote = code_provider.get_quote() # Intel's remote attestation code_provider.remote_attestation(quote) # # Data Provider 1 # data_provider1 = DataProviderAPI(host, port, ssl) # set your own public/private keypair if you don't want the randomly generated one data_provider1.set_keypair( public_key=bytes.fromhex("08278fc6860d83b598e54462e9c5c68e5eb0bff588de413a0e651a65dd540a29"), private_key=bytes.fromhex("dcd1512baa17cb7440078844f3c090dd86c7e3e948065cb6f037f3413b23873f") ) # say hello to the enclave by sending your public key data_provider1.hello() # check participants public key data_provider1.status() # get enclave's public key bound to the code and each participant public key data_provider1.key_finalize() # send your symmetric key sealed for the enclave data_provider1.key_provisioning() # upload your input data for the code (automatically encrypted using a random symmetric key) data_provider1.push_files( code_name, Path("tests/data/dp1").glob("*.csv") ) # check the uploaded datas print(data_provider1.list_data(code_name)) # # Data Provider 1 # data_provider2 = DataProviderAPI(host, port, ssl) # set your own public/private keypair if you don't want the randomly generated one data_provider2.set_keypair( public_key=bytes.fromhex("6b47b13b4fe3efa09334b079b4cd57ad5f263e4010325510c493cdccc3440b50"), private_key=bytes.fromhex("363f07b34144e9b095dfe38b797c6e6012e8d0752a8c621e6d809309e0d83d13") ) # say hello to the enclave by sending your public key data_provider2.hello() # check participants public key data_provider2.status() # get enclave's public key bound to the code and each participant public key data_provider2.key_finalize() # send your symmetric key sealed for the enclave data_provider2.key_provisioning() # upload your input data for the code (automatically encrypted using a random symmetric key) data_provider2.push_files( code_name, Path("tests/data/dp2").glob("*.csv") ) # check the uploaded datas print(data_provider2.list_data(code_name)) # # Result Consumer # result_consumer = ResultConsumerAPI(host, port, ssl) # set your own public/private keypair if you don't want the randomly generated one result_consumer.set_keypair( public_key=bytes.fromhex("bd2c17ec62bf8424fda8e36429be0d73f794fd64d92b57c17c17dccf76d6f62e"), private_key=bytes.fromhex("697d565f2b421e72635329aaa539fca57e8bc8eaf108ff0ce30e114981ad1f23") ) # say hello to the enclave by sending your public key result_consumer.hello() # check participants public key result_consumer.status() # get enclave's public key bound to the code and each participant public key result_consumer.key_finalize() # send your symmetric key sealed for the enclave result_consumer.key_provisioning() # run the code over data send by Data Providers result_consumer.run(algo_name=code_name) # download the results when ready while result := result_consumer.fetch_result(code_name) is None: time.sleep(10) # write the result result_path: Path = Path("result.csv") result_path.write_bytes(result)
Test
$ pytest
Optional arguments:
--host HOST
, default to"127.0.0.1"
--port PORT
, default toNone
--ssl
, default toFalse
--user
, default toNone
(for HTTP auth)--pass
, default toNone
(for HTTP auth)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for cosmian_secure_computation_client-0.2.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7e5b3abbec106c22ee0723149f242fe36251d04243458b195e833b3819328aa |
|
MD5 | ec7abd5a91bb6a97bcfa50a17d9c17d3 |
|
BLAKE2-256 | 936dd80be62fb1ff3dcc5cc104eec3a16197453551c24ea54ecb544f907dbd06 |
Close
Hashes for cosmian_secure_computation_client-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08f2e0ba5c7482f8049403608d405407d5fbb834412860ccec563f1bea97b4a6 |
|
MD5 | 1b523a833ca6efdcb06f50278d54be29 |
|
BLAKE2-256 | 995de90c43a1fb282dbff15c738e5922d248dd9ef5e787cf7df760716488e648 |