Metadata-Version: 2.4
Name: csclib
Version: 202606191
Summary: csclib
Author-email: Kunihiko Sadakane <sada@mist.i.u-tokyo.ac.jp>
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

## Build
```bash
@server:$ python3 -m venv env
@server:$ source env/bin/activate
@server:$ cd python/csclib
@server:$ make
@server:$ pip3 install .
```
To compute precomputed tables, in the same directory as config.txt
```bash
@server:$ mkdir PRE
@server:$ python3 -c "from csclib import *; Csclib_precompute()"
```

## Environment
Computation is performed on 3 PCs (or 1 PC). They are called `server`, `party_1`, and `party_2`.
The server receives input data in plaintext, converts it into shares, and sends them to party 1 and 2. It also generates correlated randomness and sends it to party 1 and 2.
Currently, the server also performs all computations in plaintext for answer checking.
`party_1` and `party_2` perform computation while communicating with each other.

## Execution
Set the IP addresses and ports of the 3 PCs in `config.txt`.
```config.txt
127.0.0.1 9800 # server
127.0.0.1 9810 # party 1
127.0.0.1 9820 # party 2
```
Each line specifies a PC IP address and base port. Three ports are used starting from that value.
(In this example, the server uses 9800, 9801, 9802.)
When running on one PC, set all IP addresses to localhost (127.0.0.1). All port numbers must be different.
When using multiple PCs, specify each IP address. Also, if communicating with other PCs, firewall settings may need to be changed.

Assuming the script is `script.py`, run the following in the same directory as config.txt on each of the 3 PCs (terminals):
```
@server:$  python3 dbtest.py 0
@party_1:$ python3 dbtest.py 1
@party_2:$ python3 dbtest.py 2
```



## `config.txt` format
```
[options]
parties 3                   # number of parties (party 0, 1, 2)
channels 1                  # number of channels when using multithreading
comm_no_delay 1             # use whichever communication mode is faster between 1 and 0
warn_precomp 1              # warn when precomputation tables do not exist
[parties]
127.0.0.1 9800 # server      # IP address and port number for party 0
127.0.0.1 9810 # party 1     # IP address and port number for party 1
127.0.0.1 9820 # party 2     # IP address and port number for party 2
[mt_seeds] # party seed*5
0 123 456 789 0 0            # random seeds used by party 0 (5 integers)
1 234 567 890 0 1
2 345 678 234 0 2
3 456 789 345 0 3
[pre_bt]                    # correlated randomness for Beaver triples
0 PRE/PRE_BT.dat            # file storing correlated randomness used by channel 0
[pre_of] # bits channel filename
1 0 PRE/PRE_OF1.dat         # whether overflow occurs for 1-bit values (whether both party bits are 1)
[pre_b2a] # bit expansion (convert 1-bit value to log q bits)
0 PRE/PRE_B2A.dat
[pre_onehot] # bits xor channel filename
1 0 0 PRE/PRE_OHA1.dat
[pre_onehot_shamir] # bits channel filename
1 0 PRE/PRE_OHS1.dat
[pre_onehot_shamir3] # bits irr_poly channel filename
4 13 0 PRE/PRE_OHS3_0x13.dat
[pre_onehot_rss] # bits irr_poly channel filename
4 13 0 PRE/PRE_OHR_0x13.dat
[pre_ds] # n bs inverse channel filename      # double shares for permutation; n = permutation length, bs = block size
2 1 0 0 PRE/PRE_DS_n1_w30.dat
4 1 0 0 PRE/PRE_DS_n2_w30.dat
8 1 0 0 PRE/PRE_DS_n3_w30.dat
2 1 1 0 PRE/PRE_DSi_n1_w30.dat
4 1 1 0 PRE/PRE_DSi_n2_w30.dat
8 1 1 0 PRE/PRE_DSi_n3_w30.dat
[pre_uv] #n old_q new_q channel fname         # create unit vectors
2 32 4 0 PRE/PRE_UV_n2_oq32_nq4.dat
```
