{"id":13629649,"url":"https://github.com/osu-crypto/MultipartyPSI","last_synced_at":"2025-04-17T09:35:43.675Z","repository":{"id":86633286,"uuid":"100207769","full_name":"osu-crypto/MultipartyPSI","owner":"osu-crypto","description":"Practical Multi-party Private Set Intersection from Symmetric-Key Techniques[ACM CCS 2017]","archived":false,"fork":false,"pushed_at":"2023-09-22T04:38:28.000Z","size":10032,"stargazers_count":90,"open_issues_count":7,"forks_count":35,"subscribers_count":3,"default_branch":"implement","last_synced_at":"2024-08-01T22:44:06.162Z","etag":null,"topics":["multiparty-psi","oprf","programmable-oprf"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osu-crypto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-13T22:15:27.000Z","updated_at":"2024-06-15T03:31:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"e3ba2bfa-2b24-4537-817f-65eec71c408f","html_url":"https://github.com/osu-crypto/MultipartyPSI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osu-crypto%2FMultipartyPSI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osu-crypto%2FMultipartyPSI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osu-crypto%2FMultipartyPSI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osu-crypto%2FMultipartyPSI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osu-crypto","download_url":"https://codeload.github.com/osu-crypto/MultipartyPSI/tar.gz/refs/heads/implement","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223751357,"owners_count":17196620,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["multiparty-psi","oprf","programmable-oprf"],"created_at":"2024-08-01T22:01:15.682Z","updated_at":"2024-11-08T20:31:41.725Z","avatar_url":"https://github.com/osu-crypto.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# Programmable Oblivious PRF \u0026 multi-party PSI\nThis is the implementation of our [CCS 2017](http://dl.acm.org/xxx)  paper: **Practical Multi-party Private Set Intersection from Symmetric-Key Techniques**[[ePrint](https://eprint.iacr.org/2017/xxx)]. \n\nEvaluating on a single Intel Xeon server (`2 36-cores Intel Xeon CPU E5-2699 v3 @ 2.30GHz and 256GB of RAM`), ours protocol requires only `71` seconds to securely compute the intersection of `5` parties, each has `2^20`-size sets, regardless of the bit length of the items.\n\nFor programmable OPRF, this code implements:\n* Table-based OPPRF\n* Polynomial-based  OPPRF\n* BloomFilter-based OPPRF\n\nFor PSI, we implement multi-party PSI (nPSI) in augmented-semihonest model and standard semihonest model.\n\n## Installations\n\n### Required libraries\n C++ compiler with C++14 support. There are several library dependencies including [`Boost`](https://sourceforge.net/projects/boost/), [`Miracl`](https://github.com/miracl/MIRACL), [`NTL`](http://www.shoup.net/ntl/) , and [`libOTe`](https://github.com/osu-crypto/libOTe). For `libOTe`, it requires CPU supporting `PCLMUL`, `AES-NI`, and `SSE4.1`. Optional: `nasm` for improved SHA1 performance.   Our code has been tested on both Windows (Microsoft Visual Studio) and Linux. To install the required libraries: \n  * windows: open PowerShell,  `cd ./thirdparty`, and `.\\all_win.ps1` (the script works with Visual Studio 2015. For other version, you should modify [`MSBuild`](https://github.com/osu-crypto/MultipartyPSI/blob/implement/thirdparty/win/getNTL.ps1#L3) at several places in the script.)\n  * linux: `cd ./thirdparty`, and `bash .\\all_linux.get`.   \n\nNOTE: If you meet problem with `all_win.ps1` or `all_linux.get` which builds boost, miracl and libOTe, please follow the more manual instructions at [`libOTe`](https://github.com/osu-crypto/libOTe) \n\n### Building the Project\nAfter cloning project from git,\n##### Windows:\n1. build cryptoTools,libOTe, and libOPRF projects in order.\n2. add argument for bOPRFmain project (for example: -u)\n3. run bOPRFmain project\n \n##### Linux:\n1. make (requirements: `CMake`, `Make`, `g++` or similar)\n2. for test:\n\t./bin/frontend.exe -u\n\n\n## Running the code\nThe database is generated randomly. The outputs include the average online/offline/total runtime that displayed on the screen and output.txt. \n#### Flags:\n    -u\t\tunit test which computes PSI of 5 paries, 2 dishonestly colluding, each with set size 2^12 in semihonest setting\n\t-n\t\tnumber of parties\n\t-p\t\tparty ID\n\t-m\t\tset size\n\t-t\t\tnumber of corrupted parties (in semihonest setting)\n\t-a\t\trun in augmented semihonest model. Table-based OPPRF is by default.\n\t\t\t\t0: Table-based; 1: POLY-seperated; 2-POLY-combined; 3-BloomFilter\n\t-r\t\toptimized 3PSI when r = 1\t\t\t\n#### Examples: \n##### 1. Unit test:\n\t./bin/frontend.exe -u\n\t\n##### 2. nPSI:\nCompute PSI of 5 parties, 2 dishonestly colluding, each with set size 2^12 in semihonest setting\n\n\t./bin/frontend.exe -n 5 -t 2 -m 12 -p 0 \n\t\u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 1\n\t\u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 2\n\t\u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 3\n\t\u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 4\n\t\nCompute PSI of 5 parties, each with set size 2^12 in augmented semihonest setting with Bloom filter based OPPRF. Note that, the augmented SH protocol protects from a collusion of n-1 parties\n\n\t./bin/frontend.exe -n 5 -a 3 -m 12 -p 0 \n\t\u0026 ./bin/frontend.exe -n 5 -a 3  -m 12 -p 1\n    \u0026 ./bin/frontend.exe -n 5 -a 3  -m 12 -p 2\n    \u0026 ./bin/frontend.exe -n 5 -a 3  -m 12 -p 3\n    \u0026 ./bin/frontend.exe -n 5 -a 3  -m 12 -p 4\n\t\n## Summary\n\n      1. git clone https://github.com/osu-crypto/MultipartyPSI.git  \n      2. cd thirdparty/\n      3. bash all_linux.get \n      4. cd ..\n      5. cmake .\n      6.  make -j\n      7. ./bin/frontend.exe -n 5 -t 2 -m 12 -p 0 \u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 1  \u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 2 \u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 3 \u0026 ./bin/frontend.exe -n 5 -t 2 -m 12 -p 4\n \t\n\t\n## Help\nFor any questions on building or running the library, please contact [`Ni Trieu`](http://people.oregonstate.edu/~trieun/) at trieun at oregonstate dot edu\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosu-crypto%2FMultipartyPSI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosu-crypto%2FMultipartyPSI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosu-crypto%2FMultipartyPSI/lists"}