From ad7a4e5605b564ff5a03b58e2f966220bff50e18 Mon Sep 17 00:00:00 2001 From: Jun FENG <99384777+6fj@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:43:38 +0800 Subject: [PATCH] repo-sync-2024-02-22T16:58:09+0800 (#88) --- RELEASE.md | 3 + docs/_static/rr22_psi.png | Bin 0 -> 338290 bytes docs/development/psi_protocol_intro.rst | 54 +++- docs/reference/index.rst | 1 + docs/reference/launch_config.md | 1 + docs/reference/pir_config.md | 149 ++++++++++ docs/reference/pir_config_md.tmpl | 75 +++++ docs/reference/psi_v2_config.md | 4 +- docs/update_data.sh | 6 + docs/user_guide/pir.rst | 215 ++++++++++++-- docs/user_guide/psi_v2.rst | 2 +- examples/pir/BUILD.bazel | 75 +---- examples/pir/README.md | 58 ++++ examples/pir/config/apsi_client.json | 26 ++ examples/pir/config/apsi_server_full.json | 34 +++ examples/pir/config/apsi_server_online.json | 22 ++ examples/pir/config/apsi_server_setup.json | 23 ++ examples/pir/generate_pir_data.cc | 5 +- examples/pir/keyword_pir_client.cc | 72 ----- examples/pir/keyword_pir_mem_server.cc | 97 ------- examples/pir/keyword_pir_server.cc | 73 ----- examples/pir/keyword_pir_setup.cc | 99 ------- examples/pir/utils.cc | 34 --- examples/pir/utils.h | 24 -- examples/psi/config/ecdh_client_full.json | 4 +- examples/psi/config/ecdh_client_offline.json | 4 +- .../ecdh_client_offline_transfer_cache.json | 4 +- examples/psi/config/ecdh_client_online.json | 4 +- examples/psi/config/ecdh_server_full.json | 8 +- examples/psi/config/ecdh_server_offline.json | 8 +- .../config/ecdh_server_offline_gen_cache.json | 8 +- .../ecdh_server_offline_transfer_cache.json | 4 +- examples/psi/config/ecdh_server_online.json | 8 +- psi/BUILD.bazel | 2 + psi/apsi/BUILD.bazel | 1 + psi/apsi/pir.cc | 270 +++++++++--------- psi/apsi/pir.h | 25 +- psi/apsi/pir_test.cc | 37 +-- psi/ecdh/client.cc | 10 +- psi/ecdh/server.cc | 20 +- psi/launch.cc | 10 + psi/launch.h | 4 + psi/main.cc | 35 ++- psi/prelude.h | 4 + psi/proto/BUILD.bazel | 1 + psi/proto/entry.proto | 4 +- psi/proto/pir.proto | 126 ++++---- psi/proto/psi_v2.proto | 4 +- psi/version.h | 2 +- 49 files changed, 945 insertions(+), 814 deletions(-) create mode 100644 docs/_static/rr22_psi.png create mode 100644 docs/reference/pir_config.md create mode 100644 docs/reference/pir_config_md.tmpl create mode 100644 examples/pir/README.md create mode 100644 examples/pir/config/apsi_client.json create mode 100644 examples/pir/config/apsi_server_full.json create mode 100644 examples/pir/config/apsi_server_online.json create mode 100644 examples/pir/config/apsi_server_setup.json delete mode 100644 examples/pir/keyword_pir_client.cc delete mode 100644 examples/pir/keyword_pir_mem_server.cc delete mode 100644 examples/pir/keyword_pir_server.cc delete mode 100644 examples/pir/keyword_pir_setup.cc delete mode 100644 examples/pir/utils.cc delete mode 100644 examples/pir/utils.h diff --git a/RELEASE.md b/RELEASE.md index 819569a..0c08b86 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -5,6 +5,9 @@ > - `[API]` prefix for API changes. > - `[Improvement]` prefix for implementation improvement. +## v0.2.0.dev240222 +- [API] expose PIR API. + ## v0.2.0.dev240219 - [Feature] add ecdh logger for debug purposes. diff --git a/docs/_static/rr22_psi.png b/docs/_static/rr22_psi.png new file mode 100644 index 0000000000000000000000000000000000000000..55776b69cf199a9f92c9086ea752acfd10734ee0 GIT binary patch literal 338290 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

^2+)Aowxrs0K-H<4XI6X))mpz#I>d*p0#mRJ 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�`>yUV8RrTlT)O-Nov{AUj?$BNnz>d{tm-zoKT8tcS0FP3 zQ$@Qk%0A~W7;lxh-@`+SOY-_O`EH!nS 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 provides VOLE code implementation. +LPN-friendly coeds now support [CRR21]_ silver codes(LDPC) and [BCGI+22]_ Expand-Accumulate Codes. +Silver is Most efficient, but not recommended to use due to its security flaw. + +Semi-honest Protocol: + +.. figure:: ../_static/rr22_psi.png + +1. The Receiver samples :math:`r \leftarrow \{0,1\}^\kappa` and computes + :math:`\vec{P} := \mathrm{Encode} (L,r)` where + :math:`L := \{(H^{n*m}(x,r),H(x))|x \in X\}`. + +2. Sender and Receiver Run (sub)VOLE protocol, Sender gets :math:`\Delta` and + :math:`\vec{B}`, Receiver gets :math:`\vec{A}` and :math:`\vec{C}`, such that: + :math:`\vec{C}=\Delta *\vec{A'}+\vec{B}`. + +3. Receiver sends :math:`r, \vec{A}=\vec{A'}+\vec{P}` to Sender. Sender defines + :math:`\vec{K}=\vec{B}+\Delta \cdot \vec{A}`. + +4. Sender sends :math:`Y'=H^{n*m}(\vec{Y},r)\cdot \vec{K}-\Delta \cdot H(\vec{Y})` + to the Receiver. + +5. Receiver compares :math:`X'=H^{n*m}(\vec{X},r)\cdot \vec{C}` and :math:`Y'`, outputs + intersection result :math:`X \cap Y`. Reference ------------ @@ -375,9 +414,12 @@ Reference .. [Ber06] Daniel J. Bernstein. Curve25519: new diffie-hellman speed records. In In Public Key Cryptography (PKC), Springer-Verlag LNCS 3958, page 2006, 2006. (Cited on page 4.) +.. [BCGI+22] Elette Boyle, Geoffroy Couteau, Niv Gilboa, Yuval Ishai, Lisa Kohl, Nicolas Resch, Peter Scholl. + Correlated Pseudorandomness from Expand-Accumulate Codes. Crypto2022. + .. [BBCD+11] Baldi, P., Baronio, R., Cristofaro, E.D., Gasti, P., Tsudik, G.: Countering GATTACA: Efficient and Secure Testing of Fully-sequenced Human Genomes. In: ACM - Conference on Computer and Communications Security. pp. 691–702. ACM (2011) + Conference on Computer and Communications Security. pp. 691–702. ACM (2011). .. [CIK+20] G. Couteau, Y. Ishai, L. Kohl, E. Boyle, P. Scholl, and N. Gilboa. Efficient pseudorandom correlation generators from ring-lpn. Springer-Verlag, 2020. @@ -394,6 +436,9 @@ Reference Michael Rosenberg. Labeled PSI from Homomorphic Encryption with Reduced Computation and Communication CCS'21: Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications SecurityNovember 2021 +.. [CRR21] Geoffroy Couteau, Peter Rindal, and Srinivasan Raghuraman. Silver: Silent VOLE and Oblivious Transfer + from Hardness of Decoding Structured LDPC Codes. Crypto2021. + .. [DP-PSI] Differentially-Private PSI https://arxiv.org/pdf/2208.13249.pdf .. [FourQ] Costello, C., Longa, P.: Fourq: four-dimensional decompositions on a q-curve over the mersenne prime. @@ -422,6 +467,13 @@ Reference .. [RA18] Resende, A.C.D., Aranha, D.F.: Faster unbalanced private set intersection. In: Meiklejohn, S., Sako, K. (eds.) FC2018. LNCS, vol. 10957, pp. 203{221. Springer, Heidelberg (Feb / Mar 2018) +.. [RR22] Srinivasan Raghuraman and Peter Rindal. Blazing Fast PSI from Improved OKVS and Subfield VOLE. CCS'22. + +.. [RRT23] Srinivasan Raghuraman, Peter Rindal, Titouan Tanguy. Expand-Convolute Codes for Pseudorandom + Correlation Generators from LPN. Crypto2023. + +.. [RS21] Peter Rindal and Phillipp Schoppmann. VOLE-PSI: fast OPRF and circuit-psi from vector-ole. EUROCRYPT2021. + .. [SEAL] Microsoft SEAL (release 4.0). https://github.com/Microsoft/SEAL (Sep 2022), microsoft Research, Redmond, WA. diff --git a/docs/reference/index.rst b/docs/reference/index.rst index e58af5c..66b8e85 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -8,4 +8,5 @@ This page covers all Protocol Buffers message as APIs. psi_config psi_v2_config + pir_config launch_config diff --git a/docs/reference/launch_config.md b/docs/reference/launch_config.md index bd6622f..eb5abeb 100644 --- a/docs/reference/launch_config.md +++ b/docs/reference/launch_config.md @@ -44,6 +44,7 @@ Please check psi.v2.PsiConfig and psi.v2.UbPsiConfig at **PSI v2 Configuration** | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) runtime_config.legacy_psi_config | [ BucketPsiConfig](#bucketpsiconfig) | Please check at psi.proto. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) runtime_config.psi_config | [ v2.PsiConfig](#v2psiconfig) | Please check at psi_v2.proto. | | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) runtime_config.ub_psi_config | [ v2.UbPsiConfig](#v2ubpsiconfig) | Please check at psi_v2.proto. | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) runtime_config.pir_config | [ PirConfig](#pirconfig) | Please check at pir.proto. | diff --git a/docs/reference/pir_config.md b/docs/reference/pir_config.md new file mode 100644 index 0000000..0ec6853 --- /dev/null +++ b/docs/reference/pir_config.md @@ -0,0 +1,149 @@ +# PIR Configuration + +## Table of Contents + + + +- Messages + - [ApsiServerConfig](#apsiserverconfig) + - [PirClientConfig](#pirclientconfig) + - [PirConfig](#pirconfig) + - [PirResultReport](#pirresultreport) + - [PirServerConfig](#pirserverconfig) + + + +- Enums + - [PirConfig.Mode](#pirconfigmode) + - [PirProtocol](#pirprotocol) + + + +- [Scalar Value Types](#scalar-value-types) + + + + + +## Messages + + +### ApsiServerConfig +Server config for APSI protocol. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| oprf_key_path | [ string](#string) | The path of oprf_key file path. This field is not required for MODE_SERVER_FULL. | +| num_per_query | [ uint32](#uint32) | The number of per query. | +| compressed | [ bool](#bool) | compressed Seal ciphertext | +| max_items_per_bin | [ uint32](#uint32) | max items per bin, i.e. Interpolate polynomial max degree. optional. | + + + + +### PirClientConfig +Client configs. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| input_path | [ string](#string) | The input csv file path of pir. | +| key_columns | [repeated string](#string) | The key columns name of input data. | +| output_path | [ string](#string) | The path of query output csv file path. | + + + + +### PirConfig +The config for PIR. This is the entrypoint for all PIR tasks. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| mode | [ PirConfig.Mode](#pirconfigmode) | none | +| pir_protocol | [ PirProtocol](#pirprotocol) | The PIR protocol. | +| pir_server_config | [ PirServerConfig](#pirserverconfig) | Required for MODE_SERVER_SETUP, MODE_SERVER_ONLINE and MODE_SERVER_FULL. | +| pir_client_config | [ PirClientConfig](#pirclientconfig) | Required for MODE_CLIENT. | + + + + +### PirResultReport +The report of pir result. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| data_count | [ int64](#int64) | The data count of input/query. | + + + + +### PirServerConfig +Server configs. +setup_path is only required field for MODE_SERVER_ONLINE. +setup_path is not required for MODE_SERVER_FULL. + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| input_path | [ string](#string) | The input csv file path. | +| setup_path | [ string](#string) | The path of setup output path. | +| key_columns | [repeated string](#string) | The key columns name of input data. | +| label_columns | [repeated string](#string) | The label columns name of input data. | +| label_max_len | [ uint32](#uint32) | The max number bytes of label. | +| bucket_size | [ uint32](#uint32) | split data bucket to do pir query | +| apsi_server_config | [ ApsiServerConfig](#apsiserverconfig) | For APSI protocol only | + + + + +## Enums + + +### PirConfig.Mode + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| MODE_UNSPECIFIED | 0 | none | +| MODE_SERVER_SETUP | 1 | Server with setup stage. | +| MODE_SERVER_ONLINE | 2 | Server with online stage. | +| MODE_SERVER_FULL | 3 | Server with both online and offline stages. | +| MODE_CLIENT | 4 | Client | + + + + +### PirProtocol +The algorithm type of pir. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| PIR_PROTOCOL_UNSPECIFIED | 0 | none | +| PIR_PROTOCOL_KEYWORD_PIR_APSI | 1 | Keyword PIR APSI Reference: https://github.com/microsoft/APSI | + + + + + +## Scalar Value Types + +| .proto Type | Notes | C++ Type | Java Type | Python Type | +| ----------- | ----- | -------- | --------- | ----------- | +|

double | | double | double | float | +|

float | | float | float | float | +|

int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | +|

int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | +|

uint32 | Uses variable-length encoding. | uint32 | int | int/long | +|

uint64 | Uses variable-length encoding. | uint64 | long | int/long | +|

sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | +|

sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | +|

fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | +|

fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | +|

sfixed32 | Always four bytes. | int32 | int | int | +|

sfixed64 | Always eight bytes. | int64 | long | int/long | +|

bool | | bool | boolean | boolean | +|

string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | +|

bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | diff --git a/docs/reference/pir_config_md.tmpl b/docs/reference/pir_config_md.tmpl new file mode 100644 index 0000000..a39f474 --- /dev/null +++ b/docs/reference/pir_config_md.tmpl @@ -0,0 +1,75 @@ +# PIR Configuration + +## Table of Contents +{{range .Files}} +{{if .HasServices}} +- Services + {{range .Services}} - [{{.Name}}](#{{.FullName | lower | replace "." ""}}) + {{end}} +{{end}} +{{if .HasMessages}} +- Messages + {{range .Messages}} - [{{.LongName}}](#{{.LongName | lower | replace "." ""}}) + {{end}} +{{end}} +{{if .HasEnums}} +- Enums + {{range .Enums}} - [{{.LongName}}](#{{.LongName | lower | replace "." ""}}) + {{end}} +{{end}} +{{end}} +- [Scalar Value Types](#scalar-value-types) + +{{range .Files}} + +{{range .Services -}} +## {{.Name}} {#{{.FullName | lower | replace "." ""}}} +{{.Description}} + +{{range .Methods -}} +### {{.Name}} + +> **rpc** {{.Name}}([{{.RequestLongType}}](#{{.RequestLongType | lower | replace "." ""}})) + [{{.ResponseLongType}}](#{{.ResponseLongType | lower | replace "." ""}}) + +{{ .Description}} +{{end}} +{{end}} + +## Messages +{{range .Messages}} + +### {{.LongName}} +{{.Description}} + +{{if .HasFields}} +| Field | Type | Description | +| ----- | ---- | ----------- | +{{range .Fields -}} + | {{if .IsOneof}}[**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) {{.OneofDecl}}.{{end}}{{.Name}} | [{{if .IsMap}}map {{else}}{{.Label}} {{end}}{{.LongType}}](#{{.LongType | lower | replace "." ""}}) | {{if .Description}}{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}}{{else}}none{{end}} | +{{end}} +{{end}} +{{end}} + +## Enums +{{range .Enums}} + +### {{.LongName}} +{{.Description}} + +| Name | Number | Description | +| ---- | ------ | ----------- | +{{range .Values -}} + | {{.Name}} | {{.Number}} | {{if .Description}}{{nobr .Description}}{{else}}none{{end}} | +{{end}} + +{{end}} +{{end}} + +## Scalar Value Types + +| .proto Type | Notes | C++ Type | Java Type | Python Type | +| ----------- | ----- | -------- | --------- | ----------- | +{{range .Scalars -}} + |

{{.ProtoType}} | {{.Notes}} | {{.CppType}} | {{.JavaType}} | {{.PythonType}} | +{{end}} diff --git a/docs/reference/psi_v2_config.md b/docs/reference/psi_v2_config.md index aaa67bc..ff21ffe 100644 --- a/docs/reference/psi_v2_config.md +++ b/docs/reference/psi_v2_config.md @@ -343,8 +343,8 @@ config for unbalanced psi. | role | [ Role](#role) | Required for all modes except MODE_OFFLINE_GEN_CACHE. | | input_config | [ IoConfig](#ioconfig) | Config for origin input. Servers: Required for MODE_OFFLINE_GEN_CACHE, MODE_OFFLINE, MODE_FULL. Clients: Required for MODE_ONLINE and MODE_FULL. | | keys | [repeated string](#string) | Join keys. Servers: Required for MODE_OFFLINE_GEN_CACHE, MODE_OFFLINE, MODE_FULL. Clients: Required for MODE_ONLINE and MODE_FULL. | -| server_secret_key_config | [ IoConfig](#ioconfig) | Servers: Required for MODE_OFFLINE_GEN_CACHE, MODE_OFFLINE, MODE_ONLINE and MODE_FULL. | -| cache_config | [ IoConfig](#ioconfig) | Required. | +| server_secret_key_path | [ string](#string) | Servers: Required for MODE_OFFLINE_GEN_CACHE, MODE_OFFLINE, MODE_ONLINE and MODE_FULL. | +| cache_path | [ string](#string) | Required. | | server_get_result | [ bool](#bool) | none | | client_get_result | [ bool](#bool) | none | | disable_alignment | [ bool](#bool) | It true, output is not promised to be aligned. Valid if both server_get_result and client_get_result are true. | diff --git a/docs/update_data.sh b/docs/update_data.sh index 3548374..e91f110 100644 --- a/docs/update_data.sh +++ b/docs/update_data.sh @@ -6,6 +6,12 @@ docker run --rm -v $(pwd)/reference/:/out \ pseudomuto/protoc-gen-doc \ --doc_opt=/out/psi_config_md.tmpl,psi_config.md psi/proto/psi.proto +# pir_config_md.tmpl is adapted from https://github.com/pseudomuto/protoc-gen-doc/blob/master/examples/templates/grpc-md.tmpl. +docker run --rm -v $(pwd)/reference/:/out \ + -v $(pwd)/../:/protos \ + pseudomuto/protoc-gen-doc \ + --doc_opt=/out/pir_config_md.tmpl,pir_config.md psi/proto/pir.proto + # psi_v2_config_md.tmpl is adapted from https://github.com/pseudomuto/protoc-gen-doc/blob/master/examples/templates/grpc-md.tmpl. docker run --rm -v $(pwd)/reference/:/out \ diff --git a/docs/user_guide/pir.rst b/docs/user_guide/pir.rst index bc3fee2..d8fc9ff 100644 --- a/docs/user_guide/pir.rst +++ b/docs/user_guide/pir.rst @@ -6,61 +6,224 @@ Quick start with SPU Private Information Retrival (PIR). Supported Protocols ------------------- -+---------------+--------------+---------------+ -| PIR protocols | Type | Server Number | -+===============+==============+===============+ -| SealPIR | IndexPIR | Single Server | -+---------------+--------------+---------------+ -| Labeled PS |KeywordPIR | Single Server | -+---------------+--------------+---------------+ ++---------------+---------------+---------------+ +| PIR protocols | Type | Server Number | ++===============+===============+===============+ +| SealPIR | Index PIR | Single Server | ++---------------+---------------+---------------+ +| APSI | Keyword PIR | Single Server | ++---------------+---------------+---------------+ +At this moment, SealPIR is not available in public APIs. -Run keyword PIR c++ example ---------------------------- -First build pir examples. +Release Docker +-------------- -.. code-block:: bash +Check official release docker image at `dockerhub `_. We also have mirrors at Alibaba Cloud: secretflow-registry.cn-hangzhou.cr.aliyuncs.com/secretflow/psi-anolis8. - bazel build //examples/pir/... -c opt -setup phase ->>>>>>>>>>> +Run keyword PIR example(APSI) +----------------------------- -Generate test usage oprf_key.bin +Please check details of configs at :doc:`/reference/pir_config`. -.. code-block:: bash +To launch PIR, please check LaunchConfig at :doc:`/reference/launch_config` and fillin **runtime_config.pir_config**. + + +Prepare data and config +>>>>>>>>>>>>>>>>>>>>>>> + + +You need to prepare following files: - dd if=/dev/urandom of=oprf_key.bin bs=32 count=1 ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ +| File(Folder) Name | Location | Description | ++==========================+================================================+===============================================================================+ +| apsi_client.json | /tmp/client/apsi_client.json | Config for PIR client. | ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ +| apsi_server_setup.json | /tmp/server/apsi_server_setup.json | Config for PIR server setup stage. | ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ +| apsi_server_online.json | /tmp/server/apsi_server_online | Config for PIR server online stage. | ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ +| pir_server_setup | /tmp/server/pir_server_setup | Folder for PIR server setup files. | ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ +| server_secret_key.bin | /tmp/server/server_secret_key.bin | Secret key for PIR server. | ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ +| pir_server.csv | /tmp/server/pir_server.csv | Input for PIR server. | ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ +| pir_client.csv | /tmp/client/pir_client.csv | Input for PIR client. | ++--------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ -Start server's terminal. + + + +1. pir_server.csv and pir_client.csv .. code-block:: bash - ./bazel-bin/examples/pir/keyword_pir_setup -in_path / - -key_columns id -label_columns label -count_per_query 256 -max_label_length 40 / - -oprf_key_path oprf_key.bin -setup_path pir_setup_dir + bazel run //examples/pir:generate_pir_data -c opt -- -data_count 10000 -label_len 32 -server_out_path /tmp/pir_server.csv -client_out_path /tmp/pir_client.csv + + +The files looks like + +.. code-block:: + :caption: pir_server.csv + + id,id1,label,label1 + 0000000000900000000,111111,cad43884c86ccb2e9236d7bd6bff976e,a508c64755636d08a2d18516ea5d6448 + 0000000001900000001,111111,058f29d20bcf7e85ba641e2b62ea4fd2,3ff60253b7e740ff49652836b366dd32 + 0000000002900000002,111111,381776671df03957919a922b9a8b0bae,a249a8608d401ee9998a2d8f1e942595 + 0000000003900000003,111111,85d7befe77ab793e5ec409cd5e808463,7fca0e741c7b4115bb93fc575a1c18fa + 0000000004900000004,111111,a4fc01b0e0a5c65c2c5b2af9dc1b70bc,934fb0334ab777471bb58009ad0b255b + 0000000005900000005,111111,abb8da0d4e1cf8b7952cbe321f5f4c63,a0e37158c9f9afe1a50563bfcf84bf4f + 0000000006900000006,111111,c1016b1bdd0521db256487bbd56d5c2e,14ba1f1624861f68a6eb8e3cbece53a1 + 0000000007900000007,111111,b8453bb94b50c231df4bcfdb7b3be9a6,e6a677b128d8355dafafbe0f0c96d536 + 0000000008900000008,111111,0cc97ec32e5768b67e25608724e7ccd8,3b3aaf41662e764a9baa9487ef20da6c -query phase + +.. code-block:: + :caption: pir_client.csv + + id,id1 + 0000000974900000974,111111 + 0000002122900002122,111111 + 0000003839900003839,111111 + 0000004198900004198,111111 + 0000004773900004773,111111 + 0000006269900006269,111111 + 0000006641900006641,111111 + 0000006881900006881,111111 + 0000007237900007237,111111 + +If source code is not available to you, you may create the file by yourself. + + +2. server_secret_key.bin + +.. code-block:: bash + + dd if=/dev/urandom of=server_secret_key.bin bs=32 count=1 + + +3. configs + +.. code-block:: + :caption: apsi_client.json + + { + "pir_config": { + "mode": "MODE_CLIENT", + "pir_protocol": "PIR_PROTOCOL_KEYWORD_PIR_APSI", + "pir_client_config": { + "input_path": "/root/client/pir_client.csv", + "key_columns": [ + "id" + ], + "output_path": "/root/client/pir_output.csv" + } + }, + "link_config": { + "parties": [ + { + "id": "server", + "host": "127.0.0.1:5300" + }, + { + "id": "client", + "host": "127.0.0.1:5400" + } + ] + }, + "self_link_party": "client" + } + +.. code-block:: + :caption: apsi_server_setup.json + + { + "pir_config": { + "mode": "MODE_SERVER_SETUP", + "pir_protocol": "PIR_PROTOCOL_KEYWORD_PIR_APSI", + "pir_server_config": { + "input_path": "/root/server/pir_server.csv", + "setup_path": "/root/server/pir_server_setup", + "key_columns": [ + "id" + ], + "label_columns": [ + "label" + ], + "label_max_len": 288, + "bucket_size": 1000000, + "apsi_server_config": { + "oprf_key_path": "/root/server/server_secret_key.bin", + "num_per_query": 1, + "compressed": false + } + } + } + } + + +.. code-block:: + :caption: apsi_server_online.json + + { + "pir_config": { + "mode": "MODE_SERVER_ONLINE", + "pir_protocol": "PIR_PROTOCOL_KEYWORD_PIR_APSI", + "pir_server_config": { + "setup_path": "/root/server/pir_server_setup" + } + }, + "link_config": { + "parties": [ + { + "id": "server", + "host": "127.0.0.1:5300" + }, + { + "id": "client", + "host": "127.0.0.1:5400" + } + ] + }, + "self_link_party": "server" + } + + +Setup Phase >>>>>>>>>>> +.. code-block:: bash + + docker run -it --rm --network host --mount type=bind,source=/tmp/server,target=/root/server --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --cap-add=NET_ADMIN --privileged=true secretflow-registry.cn-hangzhou.cr.aliyuncs.com/secretflow/psi-anolis8:0.1.0beta bash -c "./main --config server/apsi_server_setup.json" + +Online Phase +>>>>>>>>>>>> + Start two terminals. In the server's terminal. .. code-block:: bash - ./bazel-bin/examples/pir/keyword_pir_server -rank 0 -setup_path pir_setup_dir -oprf_key_path oprf_key.bin + docker run -it --rm --network host --mount type=bind,source=/tmp/server,target=/root/server --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --cap-add=NET_ADMIN --privileged=true secretflow-registry.cn-hangzhou.cr.aliyuncs.com/secretflow/psi-anolis8:0.1.0beta bash -c "./main --config server/apsi_server_online.json" In the client's terminal. .. code-block:: bash - ./bazel-bin/examples/pir/keyword_pir_client -rank 1 -in_path -key_columns id -out_path pir_out.csv + docker run -it --rm --network host --mount type=bind,source=/tmp/client,target=/root/client --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --cap-add=NET_ADMIN --privileged=true secretflow-registry.cn-hangzhou.cr.aliyuncs.com/secretflow/psi-anolis8:0.1.0beta bash -c "./main --config client/apsi_client.json" + + +More examples +------------- -PIR query results write to pir_out.csv. -Run examples on two host, Please add '-parties ip1:port1,ip2:port2'. +Please read https://github.com/secretflow/psi/tree/main/examples/pir/README.md +Please check more demo configs at https://github.com/secretflow/psi/tree/main/examples/pir/config Run keyword PIR python example ------------------------------ diff --git a/docs/user_guide/psi_v2.rst b/docs/user_guide/psi_v2.rst index eff234d..9d341c4 100644 --- a/docs/user_guide/psi_v2.rst +++ b/docs/user_guide/psi_v2.rst @@ -123,7 +123,7 @@ You need to prepare following files: +------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ | sender.config | /tmp/sender/sender.config | Config for sender. | +------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ -| receiver_input.csv | /tmp/receiver/receiver_input.config | Input for receiver. Make sure the file contains two id keys - id0 and id1. | +| receiver_input.csv | /tmp/receiver/receiver_input.config | Input for receiver. Make sure the file contains two id keys - id0 and id1. | +------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ | sender_input.csv | /tmp/sender/sender_input.config | Input for sender. Make sure the file contains two id keys - id0 and id1. | +------------------------+------------------------------------------------+-------------------------------------------------------------------------------+ diff --git a/examples/pir/BUILD.bazel b/examples/pir/BUILD.bazel index 20cf9d1..0aaa5d7 100644 --- a/examples/pir/BUILD.bazel +++ b/examples/pir/BUILD.bazel @@ -12,86 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("//bazel:psi.bzl", "psi_cc_binary", "psi_cc_library") +load("//bazel:psi.bzl", "psi_cc_binary") package(default_visibility = ["//visibility:public"]) -psi_cc_library( - name = "utils", - srcs = ["utils.cc"], - hdrs = ["utils.h"], - deps = [ - "@com_github_gflags_gflags//:gflags", - "@com_google_absl//absl/strings", - "@yacl//yacl/link:factory", - ], -) - -psi_cc_binary( - name = "keyword_pir_setup", - srcs = ["keyword_pir_setup.cc"], - linkopts = [ - "-lm", - ], - deps = [ - ":utils", - "//psi/apsi:pir", - "@com_google_absl//absl/strings", - "@yacl//yacl/crypto/utils:rand", - ], -) - -psi_cc_binary( - name = "keyword_pir_server", - srcs = ["keyword_pir_server.cc"], - linkopts = [ - "-lm", - ], - deps = [ - ":utils", - "//psi/apsi:pir", - "//psi/utils:serialize", - "@com_google_absl//absl/strings", - "@yacl//yacl/crypto/utils:rand", - ], -) - -psi_cc_binary( - name = "keyword_pir_mem_server", - srcs = ["keyword_pir_mem_server.cc"], - linkopts = [ - "-lm", - ], - deps = [ - ":utils", - "//psi/apsi:pir", - "//psi/utils:serialize", - "@com_google_absl//absl/strings", - "@yacl//yacl/crypto/utils:rand", - ], -) - -psi_cc_binary( - name = "keyword_pir_client", - srcs = ["keyword_pir_client.cc"], - linkopts = [ - "-lm", - ], - deps = [ - ":utils", - "//psi/apsi:pir", - "//psi/utils:serialize", - "@com_google_absl//absl/strings", - "@yacl//yacl/crypto/utils:rand", - "@yacl//yacl/io/rw:csv_writer", - ], -) - psi_cc_binary( name = "generate_pir_data", srcs = ["generate_pir_data.cc"], deps = [ - ":utils", + "@com_github_gflags_gflags//:gflags", "@com_google_absl//absl/strings", "@yacl//yacl/crypto/utils:rand", ], diff --git a/examples/pir/README.md b/examples/pir/README.md new file mode 100644 index 0000000..074ea34 --- /dev/null +++ b/examples/pir/README.md @@ -0,0 +1,58 @@ +# PIR Examples + +## Prepare Data + +1. Generate test data. + +```bash +bazel run //examples/pir:generate_pir_data -c opt -- -data_count 10000 -label_len 32 -server_out_path /tmp/pir_server.csv -client_out_path /tmp/pir_client.csv +``` + +## Server Setup Stage + +1. Create server setup folder. + +```bash +mkdir -p /tmp/pir_server_setup +``` + + +2. Create test server key. + +```bash +dd if=/dev/urandom of=/tmp/server_secret_key.bin bs=32 count=1 +``` + +3. Run server setup stage. + +```bash +./bazel-bin/psi/main --config $(pwd)/examples/pir/config/apsi_server_setup.json +``` + +## Online stage. + +At server terminal, run + +```bash +./bazel-bin/psi/main --config $(pwd)/examples/pir/config/apsi_server_online.json +``` + +At client terminal, run + +```bash +./bazel-bin/psi/main --config $(pwd)/examples/pir/config/apsi_client.json +``` + +## Run Server with Full Mode (No Seperate Setup Stage) + +At server terminal, run + +```bash +./bazel-bin/psi/main --config $(pwd)/examples/pir/config/apsi_server_full.json +``` + +At client terminal, run + +```bash +./bazel-bin/psi/main --config $(pwd)/examples/pir/config/apsi_client.json +``` diff --git a/examples/pir/config/apsi_client.json b/examples/pir/config/apsi_client.json new file mode 100644 index 0000000..ae3be19 --- /dev/null +++ b/examples/pir/config/apsi_client.json @@ -0,0 +1,26 @@ +{ + "pir_config": { + "mode": "MODE_CLIENT", + "pir_protocol": "PIR_PROTOCOL_KEYWORD_PIR_APSI", + "pir_client_config": { + "input_path": "/tmp/pir_client.csv", + "key_columns": [ + "id" + ], + "output_path": "/tmp/pir_output.csv" + } + }, + "link_config": { + "parties": [ + { + "id": "server", + "host": "127.0.0.1:5300" + }, + { + "id": "client", + "host": "127.0.0.1:5400" + } + ] + }, + "self_link_party": "client" +} \ No newline at end of file diff --git a/examples/pir/config/apsi_server_full.json b/examples/pir/config/apsi_server_full.json new file mode 100644 index 0000000..d66ca05 --- /dev/null +++ b/examples/pir/config/apsi_server_full.json @@ -0,0 +1,34 @@ +{ + "pir_config": { + "mode": "MODE_SERVER_FULL", + "pir_protocol": "PIR_PROTOCOL_KEYWORD_PIR_APSI", + "pir_server_config": { + "input_path": "/tmp/pir_server.csv", + "key_columns": [ + "id" + ], + "label_columns": [ + "label" + ], + "label_max_len": 288, + "bucket_size": 1000000, + "apsi_server_config": { + "num_per_query": 1, + "compressed": false + } + } + }, + "link_config": { + "parties": [ + { + "id": "server", + "host": "127.0.0.1:5300" + }, + { + "id": "client", + "host": "127.0.0.1:5400" + } + ] + }, + "self_link_party": "server" +} \ No newline at end of file diff --git a/examples/pir/config/apsi_server_online.json b/examples/pir/config/apsi_server_online.json new file mode 100644 index 0000000..3ca4297 --- /dev/null +++ b/examples/pir/config/apsi_server_online.json @@ -0,0 +1,22 @@ +{ + "pir_config": { + "mode": "MODE_SERVER_ONLINE", + "pir_protocol": "PIR_PROTOCOL_KEYWORD_PIR_APSI", + "pir_server_config": { + "setup_path": "/tmp/pir_server_setup" + } + }, + "link_config": { + "parties": [ + { + "id": "server", + "host": "127.0.0.1:5300" + }, + { + "id": "client", + "host": "127.0.0.1:5400" + } + ] + }, + "self_link_party": "server" +} \ No newline at end of file diff --git a/examples/pir/config/apsi_server_setup.json b/examples/pir/config/apsi_server_setup.json new file mode 100644 index 0000000..324f044 --- /dev/null +++ b/examples/pir/config/apsi_server_setup.json @@ -0,0 +1,23 @@ +{ + "pir_config": { + "mode": "MODE_SERVER_SETUP", + "pir_protocol": "PIR_PROTOCOL_KEYWORD_PIR_APSI", + "pir_server_config": { + "input_path": "/tmp/pir_server.csv", + "setup_path": "/tmp/pir_server_setup", + "key_columns": [ + "id" + ], + "label_columns": [ + "label" + ], + "label_max_len": 288, + "bucket_size": 1000000, + "apsi_server_config": { + "oprf_key_path": "/tmp/server_secret_key.bin", + "num_per_query": 1, + "compressed": false + } + } + } +} \ No newline at end of file diff --git a/examples/pir/generate_pir_data.cc b/examples/pir/generate_pir_data.cc index 84b6262..9793948 100644 --- a/examples/pir/generate_pir_data.cc +++ b/examples/pir/generate_pir_data.cc @@ -23,8 +23,8 @@ #include #include "absl/strings/escaping.h" -#include "examples/pir/utils.h" #include "fmt/format.h" +#include "gflags/gflags.h" #include "spdlog/spdlog.h" #include "yacl/crypto/utils/rand.h" @@ -63,8 +63,7 @@ int main(int argc, char **argv) { psi1_out_file.open(FLAGS_server_out_path, std::ios::out); psi2_out_file.open(FLAGS_client_out_path, std::ios::out); - psi1_out_file << "id,id1" - << ",label,label1" << '\r' << std::endl; + psi1_out_file << "id,id1,label,label1" << '\r' << std::endl; psi2_out_file << "id,id1" << '\r' << std::endl; for (size_t idx = 0; idx < alice_item_size; idx++) { diff --git a/examples/pir/keyword_pir_client.cc b/examples/pir/keyword_pir_client.cc deleted file mode 100644 index 533849e..0000000 --- a/examples/pir/keyword_pir_client.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2023 Ant Group Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// clang-format off -// To run the example, start terminals: -// > bazel run //examples/pir:keyword_pir_client -c opt -- -rank 1 -in_path ../../data/psi_client_data.csv.csv -// > -key_columns id -out_path pir_out.csv -// clang-format on - -#include -#include -#include - -#include "examples/pir/utils.h" -#include "yacl/io/rw/csv_writer.h" - -#include "psi/apsi/pir.h" -#include "psi/apsi/psi_params.h" -#include "psi/apsi/receiver.h" -#include "psi/utils/batch_provider.h" -#include "psi/utils/serialize.h" - -#include "psi/proto/pir.pb.h" - -using DurationMillis = std::chrono::duration; - -DEFINE_string(in_path, "data.csv", "pir data in file path"); - -DEFINE_string(key_columns, "id", "key columns"); - -DEFINE_string(out_path, ".", "[out] pir query output path for db setup data"); - -namespace { - -constexpr uint32_t kLinkRecvTimeout = 30 * 60 * 1000; - -} - -int main(int argc, char **argv) { - gflags::ParseCommandLineFlags(&argc, &argv, true); - - auto link_ctx = MakeLink(); - - link_ctx->SetRecvTimeout(kLinkRecvTimeout); - - std::vector ids = absl::StrSplit(FLAGS_key_columns, ','); - - psi::PirClientConfig config; - - config.set_pir_protocol(psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - - config.set_input_path(FLAGS_in_path); - config.mutable_key_columns()->Add(ids.begin(), ids.end()); - config.set_output_path(FLAGS_out_path); - - psi::PirResultReport report = psi::apsi::PirClient(link_ctx, config); - - SPDLOG_INFO("data count:{}", report.data_count()); - - return 0; -} diff --git a/examples/pir/keyword_pir_mem_server.cc b/examples/pir/keyword_pir_mem_server.cc deleted file mode 100644 index 1037295..0000000 --- a/examples/pir/keyword_pir_mem_server.cc +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2023 Ant Group Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// clang-format off -// To run the example, start terminals: -// > bazel run //examples/pir:keyword_pir_server -c opt -- -rank 0 -setup_path pir_setup_dir -// > -oprf_key_path secret_key.bin -// clang-format on - -#include -#include -#include - -#include "examples/pir/utils.h" -#include "spdlog/spdlog.h" -#include "yacl/link/test_util.h" - -#include "psi/apsi/pir.h" -#include "psi/apsi/psi_params.h" -#include "psi/apsi/receiver.h" -#include "psi/apsi/sender.h" -#include "psi/ecdh//ecdh_oprf_selector.h" -#include "psi/utils/serialize.h" - -#include "psi/proto/pir.pb.h" - -using DurationMillis = std::chrono::duration; - -DEFINE_string(in_path, "data.csv", "[in] pir data in file path"); - -DEFINE_int32(count_per_query, 256, "data count per query"); - -DEFINE_string(key_columns, "id", "key columns"); - -DEFINE_string(label_columns, "label", "label columns"); - -DEFINE_int32(max_label_length, 288, "pad label data to max len"); - -DEFINE_bool(compress, false, "compress seal he plaintext"); - -DEFINE_int32(bucket, 1000000, "bucket size of pir query"); - -DEFINE_int32(max_items_per_bin, 0, - "max items per bin, i.e. Interpolate polynomial max degree "); - -namespace { - -constexpr uint32_t kLinkRecvTimeout = 30 * 60 * 1000; - -} - -int main(int argc, char **argv) { - gflags::ParseCommandLineFlags(&argc, &argv, true); - - SPDLOG_INFO("setup"); - - auto link_ctx = MakeLink(); - - link_ctx->SetRecvTimeout(kLinkRecvTimeout); - - std::vector ids = absl::StrSplit(FLAGS_key_columns, ','); - std::vector labels = absl::StrSplit(FLAGS_label_columns, ','); - - psi::PirSetupConfig config; - - config.set_pir_protocol(psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_store_type(psi::KvStoreType::LEVELDB_KV_STORE); - config.set_input_path(FLAGS_in_path); - - config.mutable_key_columns()->Add(ids.begin(), ids.end()); - config.mutable_label_columns()->Add(labels.begin(), labels.end()); - - config.set_num_per_query(FLAGS_count_per_query); - config.set_label_max_len(FLAGS_max_label_length); - config.set_oprf_key_path(""); - config.set_setup_path("::memory"); - config.set_compressed(FLAGS_compress); - config.set_bucket_size(FLAGS_bucket); - config.set_max_items_per_bin(FLAGS_max_items_per_bin); - - psi::PirResultReport report = psi::apsi::PirMemoryServer(link_ctx, config); - - SPDLOG_INFO("data count:{}", report.data_count()); - - return 0; -} diff --git a/examples/pir/keyword_pir_server.cc b/examples/pir/keyword_pir_server.cc deleted file mode 100644 index 2d9d49c..0000000 --- a/examples/pir/keyword_pir_server.cc +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2023 Ant Group Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// clang-format off -// To run the example, start terminals: -// > bazel run //examples/pir:keyword_pir_server -c opt -- -rank 0 -setup_path pir_setup_dir -// > -oprf_key_path secret_key.bin -// clang-format on - -#include -#include -#include - -#include "examples/pir/utils.h" -#include "spdlog/spdlog.h" -#include "yacl/link/test_util.h" - -#include "psi/apsi/pir.h" -#include "psi/apsi/psi_params.h" -#include "psi/apsi/receiver.h" -#include "psi/apsi/sender.h" -#include "psi/ecdh//ecdh_oprf_selector.h" -#include "psi/utils/serialize.h" - -#include "psi/proto/pir.pb.h" - -using DurationMillis = std::chrono::duration; - -DEFINE_string(oprf_key_path, "oprf_key.bin", - "[in] ecc oprf secretkey file path, 32bytes binary file"); - -DEFINE_string(setup_path, ".", "[in] db setup data path"); - -namespace { - -constexpr uint32_t kLinkRecvTimeout = 30 * 60 * 1000; - -} - -int main(int argc, char **argv) { - gflags::ParseCommandLineFlags(&argc, &argv, true); - - SPDLOG_INFO("server"); - - auto link_ctx = MakeLink(); - - link_ctx->SetRecvTimeout(kLinkRecvTimeout); - - psi::PirServerConfig config; - - config.set_pir_protocol(psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_store_type(psi::KvStoreType::LEVELDB_KV_STORE); - - config.set_oprf_key_path(FLAGS_oprf_key_path); - config.set_setup_path(FLAGS_setup_path); - - psi::PirResultReport report = psi::apsi::PirServer(link_ctx, config); - - SPDLOG_INFO("data count:{}", report.data_count()); - - return 0; -} diff --git a/examples/pir/keyword_pir_setup.cc b/examples/pir/keyword_pir_setup.cc deleted file mode 100644 index f9f82dc..0000000 --- a/examples/pir/keyword_pir_setup.cc +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2023 Ant Group Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// clang-format off -// To generate ecc oprf secret key, start terminals: -// > dd if=/dev/urandom of=secret_key.bin bs=32 count=1 -// To run the example, start terminals: -// > bazel run //examples/pir:keyword_pir_setup -c opt -- -in_path ../../data/psi_server_data.csv -oprf_key_path secret_key.bin -// > -key_columns id -label_columns label -data_per_query 1 -label_max_len 40 -// > -setup_path pir_setup_dir -// clang-format on - -#include -#include -#include -#include - -#include "examples/pir/utils.h" -#include "spdlog/spdlog.h" -#include "yacl/link/test_util.h" - -#include "psi/apsi/pir.h" -#include "psi/apsi/psi_params.h" -#include "psi/apsi/receiver.h" -#include "psi/apsi/sender.h" -#include "psi/ecdh//ecdh_oprf_selector.h" - -#include "psi/proto/pir.pb.h" - -using DurationMillis = std::chrono::duration; - -DEFINE_string(in_path, "data.csv", "[in] pir data in file path"); - -DEFINE_string(oprf_key_path, "oprf_key.bin", - "[in] ecc oprf secretkey file path, 32bytes binary file"); - -DEFINE_int32(count_per_query, 256, "data count per query"); - -DEFINE_string(key_columns, "id", "key columns"); - -DEFINE_string(label_columns, "label", "label columns"); - -DEFINE_bool(compress, false, "compress seal he plaintext"); - -DEFINE_int32(bucket, 1000000, "bucket size of pir query"); - -DEFINE_int32(max_label_length, 288, "pad label data to max len"); - -DEFINE_string(setup_path, ".", "[out] output path for db setup data"); - -DEFINE_int32(max_items_per_bin, 0, - "max items per bin, i.e. Interpolate polynomial max degree"); - -int main(int argc, char **argv) { - gflags::ParseCommandLineFlags(&argc, &argv, true); - - SPDLOG_INFO("setup"); - - std::vector ids = absl::StrSplit(FLAGS_key_columns, ','); - std::vector labels = absl::StrSplit(FLAGS_label_columns, ','); - - SPDLOG_INFO("in_path: {}", FLAGS_in_path); - SPDLOG_INFO("key columns: {}", FLAGS_key_columns); - SPDLOG_INFO("label columns: {}", FLAGS_label_columns); - - psi::PirSetupConfig config; - - config.set_pir_protocol(psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_store_type(psi::KvStoreType::LEVELDB_KV_STORE); - config.set_input_path(FLAGS_in_path); - - config.mutable_key_columns()->Add(ids.begin(), ids.end()); - config.mutable_label_columns()->Add(labels.begin(), labels.end()); - - config.set_num_per_query(FLAGS_count_per_query); - config.set_label_max_len(FLAGS_max_label_length); - config.set_oprf_key_path(FLAGS_oprf_key_path); - config.set_setup_path(FLAGS_setup_path); - config.set_compressed(FLAGS_compress); - config.set_bucket_size(FLAGS_bucket); - config.set_max_items_per_bin(FLAGS_max_items_per_bin); - - psi::PirResultReport report = psi::apsi::PirSetup(config); - - SPDLOG_INFO("data count:{}", report.data_count()); - - return 0; -} diff --git a/examples/pir/utils.cc b/examples/pir/utils.cc deleted file mode 100644 index 4c21f3d..0000000 --- a/examples/pir/utils.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2021 Ant Group Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "examples/pir/utils.h" - -#include "absl/strings/str_split.h" -#include "yacl/link/factory.h" - -DEFINE_string(parties, "127.0.0.1:61530,127.0.0.1:61531", - "server list, format: host1:port1[,host2:port2, ...]"); -DEFINE_uint32(rank, 0, "self rank"); - -std::shared_ptr MakeLink() { - yacl::link::ContextDesc lctx_desc; - std::vector hosts = absl::StrSplit(FLAGS_parties, ','); - for (size_t rank = 0; rank < hosts.size(); rank++) { - const auto id = fmt::format("party{}", rank); - lctx_desc.parties.emplace_back(id, hosts[rank]); - } - auto lctx = yacl::link::FactoryBrpc().CreateContext(lctx_desc, FLAGS_rank); - lctx->ConnectToMesh(); - return lctx; -} diff --git a/examples/pir/utils.h b/examples/pir/utils.h deleted file mode 100644 index 96af77e..0000000 --- a/examples/pir/utils.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2021 Ant Group Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "gflags/gflags.h" -#include "yacl/link/context.h" - -DECLARE_string(parties); -DECLARE_uint32(rank); - -// -std::shared_ptr MakeLink(); diff --git a/examples/psi/config/ecdh_client_full.json b/examples/psi/config/ecdh_client_full.json index f2c24ba..d738e31 100644 --- a/examples/psi/config/ecdh_client_full.json +++ b/examples/psi/config/ecdh_client_full.json @@ -12,9 +12,7 @@ "id0", "id1" ], - "cache_config": { - "path": "/tmp/client_cache" - } + "cache_path": "/tmp/client_cache" }, "link_config": { "parties": [ diff --git a/examples/psi/config/ecdh_client_offline.json b/examples/psi/config/ecdh_client_offline.json index 1b0c8bc..1eb76b1 100644 --- a/examples/psi/config/ecdh_client_offline.json +++ b/examples/psi/config/ecdh_client_offline.json @@ -2,9 +2,7 @@ "ub_psi_config": { "mode": "MODE_OFFLINE", "role": "ROLE_CLIENT", - "cache_config": { - "path": "/tmp/client_cache" - } + "cache_path": "/tmp/client_cache" }, "link_config": { "parties": [ diff --git a/examples/psi/config/ecdh_client_offline_transfer_cache.json b/examples/psi/config/ecdh_client_offline_transfer_cache.json index fa1f56e..21e65e4 100644 --- a/examples/psi/config/ecdh_client_offline_transfer_cache.json +++ b/examples/psi/config/ecdh_client_offline_transfer_cache.json @@ -2,9 +2,7 @@ "ub_psi_config": { "mode": "MODE_OFFLINE_TRANSFER_CACHE", "role": "ROLE_CLIENT", - "cache_config": { - "path": "/tmp/client_cache" - } + "cache_path": "/tmp/client_cache" }, "link_config": { "parties": [ diff --git a/examples/psi/config/ecdh_client_online.json b/examples/psi/config/ecdh_client_online.json index 6aec9ed..c624de7 100644 --- a/examples/psi/config/ecdh_client_online.json +++ b/examples/psi/config/ecdh_client_online.json @@ -12,9 +12,7 @@ "id0", "id1" ], - "cache_config": { - "path": "/tmp/client_cache" - } + "cache_path": "/tmp/client_cache" }, "link_config": { "parties": [ diff --git a/examples/psi/config/ecdh_server_full.json b/examples/psi/config/ecdh_server_full.json index 01baada..586b2fe 100644 --- a/examples/psi/config/ecdh_server_full.json +++ b/examples/psi/config/ecdh_server_full.json @@ -2,12 +2,8 @@ "ub_psi_config": { "mode": "MODE_FULL", "role": "ROLE_SERVER", - "server_secret_key_config": { - "path": "/tmp/server_secret_key.key" - }, - "cache_config": { - "path": "/tmp/server_cache.sf" - }, + "server_secret_key_path": "/tmp/server_secret_key.key", + "cache_path": "/tmp/server_cache.sf", "input_config": { "path": "/tmp/server_input.csv" }, diff --git a/examples/psi/config/ecdh_server_offline.json b/examples/psi/config/ecdh_server_offline.json index 6ed0edf..c43438d 100644 --- a/examples/psi/config/ecdh_server_offline.json +++ b/examples/psi/config/ecdh_server_offline.json @@ -2,9 +2,7 @@ "ub_psi_config": { "mode": "MODE_OFFLINE", "role": "ROLE_SERVER", - "cache_config": { - "path": "/tmp/server_cache.sf" - }, + "cache_path": "/tmp/server_cache.sf", "input_config": { "path": "/tmp/server_input.csv" }, @@ -12,9 +10,7 @@ "id0", "id1" ], - "server_secret_key_config": { - "path": "/tmp/server_secret_key.key" - } + "server_secret_key_path": "/tmp/server_secret_key.key" }, "link_config": { "parties": [ diff --git a/examples/psi/config/ecdh_server_offline_gen_cache.json b/examples/psi/config/ecdh_server_offline_gen_cache.json index 8377bb0..1285955 100644 --- a/examples/psi/config/ecdh_server_offline_gen_cache.json +++ b/examples/psi/config/ecdh_server_offline_gen_cache.json @@ -9,11 +9,7 @@ "id0", "id1" ], - "server_secret_key_config": { - "path": "/tmp/server_secret_key.key" - }, - "cache_config": { - "path": "/tmp/server_cache.sf" - } + "server_secret_key_path": "/tmp/server_secret_key.key", + "cache_path": "/tmp/server_cache.sf" } } \ No newline at end of file diff --git a/examples/psi/config/ecdh_server_offline_transfer_cache.json b/examples/psi/config/ecdh_server_offline_transfer_cache.json index 4ca68ec..0e94662 100644 --- a/examples/psi/config/ecdh_server_offline_transfer_cache.json +++ b/examples/psi/config/ecdh_server_offline_transfer_cache.json @@ -2,9 +2,7 @@ "ub_psi_config": { "mode": "MODE_OFFLINE_TRANSFER_CACHE", "role": "ROLE_SERVER", - "cache_config": { - "path": "/tmp/server_cache.sf" - } + "cache_path": "/tmp/server_cache.sf" }, "link_config": { "parties": [ diff --git a/examples/psi/config/ecdh_server_online.json b/examples/psi/config/ecdh_server_online.json index a98c9da..8d4bd49 100644 --- a/examples/psi/config/ecdh_server_online.json +++ b/examples/psi/config/ecdh_server_online.json @@ -2,12 +2,8 @@ "ub_psi_config": { "mode": "MODE_ONLINE", "role": "ROLE_SERVER", - "server_secret_key_config": { - "path": "/tmp/server_secret_key.key" - }, - "cache_config": { - "path": "/tmp/server_cache.sf" - } + "server_secret_key_path": "/tmp/server_secret_key.key", + "cache_path": "/tmp/server_cache.sf" }, "link_config": { "parties": [ diff --git a/psi/BUILD.bazel b/psi/BUILD.bazel index fda9b50..3df9a39 100644 --- a/psi/BUILD.bazel +++ b/psi/BUILD.bazel @@ -22,6 +22,7 @@ psi_cc_library( "prelude.h", ], deps = [ + "//psi/proto:pir_cc_proto", "//psi/proto:psi_cc_proto", "//psi/proto:psi_v2_cc_proto", ], @@ -69,6 +70,7 @@ psi_cc_library( deps = [ ":factory", ":trace_categories", + "//psi/apsi:pir", "//psi/legacy:bucket_psi", "@boost//:algorithm", "@boost//:uuid", diff --git a/psi/apsi/BUILD.bazel b/psi/apsi/BUILD.bazel index 7ef4e02..b976a76 100644 --- a/psi/apsi/BUILD.bazel +++ b/psi/apsi/BUILD.bazel @@ -194,6 +194,7 @@ psi_cc_library( deps = [ ":receiver", ":sender", + "//psi:prelude", "//psi/proto:pir_cc_proto", "//psi/utils:serialize", "//psi/utils:sync", diff --git a/psi/apsi/pir.cc b/psi/apsi/pir.cc index 6db91d5..f144615 100644 --- a/psi/apsi/pir.cc +++ b/psi/apsi/pir.cc @@ -33,6 +33,7 @@ #include "psi/apsi/sender_memdb.h" #include "psi/cryptor/ecc_cryptor.h" #include "psi/ecdh//ecdh_oprf_selector.h" +#include "psi/prelude.h" #include "psi/utils/batch_provider.h" #include "psi/utils/io.h" #include "psi/utils/serialize.h" @@ -88,6 +89,7 @@ constexpr char kPsiParams[] = "psi_params"; constexpr char kBucketCount[] = "bucket_count"; constexpr char kBucketSize[] = "bucket_size"; constexpr char kCompressed[] = "compressed"; +constexpr char kOprfKeyPath[] = "oprf_key_path"; constexpr size_t kNonceByteCount = 16; @@ -95,6 +97,7 @@ void WriteMetaInfo(const std::string &setup_path, size_t server_data_count, size_t count_per_query, size_t label_byte_count, const std::vector &label_cloumns, const ::apsi::PSIParams &psi_params, size_t bucket_count, + const std::string &oprf_key_path, size_t bucket_size = 1000000, bool compressed = false) { std::string meta_store_name = fmt::format("{}/{}", setup_path, kMetaInfoStoreName); @@ -106,6 +109,7 @@ void WriteMetaInfo(const std::string &setup_path, size_t server_data_count, meta_info_store->Put(kCountPerQuery, fmt::format("{}", count_per_query)); meta_info_store->Put(kLabelByteCount, fmt::format("{}", label_byte_count)); meta_info_store->Put(kBucketSize, fmt::format("{}", bucket_size)); + meta_info_store->Put(kOprfKeyPath, oprf_key_path); meta_info_store->Put(kCompressed, fmt::format("{}", compressed ? 1 : 0)); ::psi::proto::StrItemsProto proto; @@ -139,8 +143,8 @@ ::apsi::PSIParams ReadMetaInfo(const std::string &setup_path, size_t *count_per_query, size_t *label_byte_count, std::vector *label_cloumns, - size_t *bucket_count, size_t *bucket_size, - bool *compressed) { + size_t *bucket_count, std::string *oprf_key_path, + size_t *bucket_size, bool *compressed) { std::string meta_store_name = fmt::format("{}/{}", setup_path, kMetaInfoStoreName); std::shared_ptr meta_info_store = @@ -164,6 +168,7 @@ ::apsi::PSIParams ReadMetaInfo(const std::string &setup_path, ::apsi::PSIParams psi_params = ParsePsiParamsProto(params_buffer); *bucket_count = GetSizeFromStore(meta_info_store, kBucketCount); + meta_info_store->Get(kOprfKeyPath, oprf_key_path); *bucket_size = GetSizeFromStore(meta_info_store, kBucketSize); size_t compress_flag = GetSizeFromStore(meta_info_store, kCompressed); @@ -180,7 +185,26 @@ ::apsi::PSIParams ReadMetaInfo(const std::string &setup_path, } // namespace -PirResultReport LabeledPirSetup(const PirSetupConfig &config) { +PirResultReport Launch(const PirConfig &config, + const std::shared_ptr &lctx) { + YACL_ENFORCE_EQ(config.pir_protocol(), + PirProtocol::PIR_PROTOCOL_KEYWORD_PIR_APSI); + + switch (config.mode()) { + case PirConfig::MODE_SERVER_SETUP: + return PirServerSetup(config.pir_server_config()); + case PirConfig::MODE_SERVER_ONLINE: + return PirServerOnline(lctx, config.pir_server_config()); + case PirConfig::MODE_SERVER_FULL: + return PirServerFull(lctx, config.pir_server_config()); + case PirConfig::MODE_CLIENT: + return PirClient(lctx, config.pir_client_config()); + default: + YACL_THROW("unsupported pir mode."); + } +} + +PirResultReport PirServerSetup(const PirServerConfig &config) { std::vector key_columns; key_columns.insert(key_columns.end(), config.key_columns().begin(), config.key_columns().end()); @@ -190,13 +214,14 @@ PirResultReport LabeledPirSetup(const PirSetupConfig &config) { config.label_columns().end()); size_t server_data_count = CsvFileDataCount(config.input_path(), key_columns); - size_t count_per_query = config.num_per_query(); + size_t count_per_query = config.apsi_server_config().num_per_query(); size_t bucket_size = config.bucket_size(); size_t bucket_count = (server_data_count + bucket_size - 1) / bucket_size; - std::vector oprf_key = ReadEcSecretKeyFile(config.oprf_key_path()); + std::vector oprf_key = + ReadEcSecretKeyFile(config.apsi_server_config().oprf_key_path()); size_t label_byte_count = config.label_max_len(); size_t nonce_byte_count = kNonceByteCount; @@ -214,7 +239,8 @@ PirResultReport LabeledPirSetup(const PirSetupConfig &config) { std::filesystem::create_directory(kv_store_path); ::apsi::PSIParams psi_params = - GetPsiParams(count_per_query, bucket_size, config.max_items_per_bin()); + GetPsiParams(count_per_query, bucket_size, + config.apsi_server_config().max_items_per_bin()); SPDLOG_INFO("table_params hash_func_count:{}", psi_params.table_params().hash_func_count); @@ -228,7 +254,8 @@ PirResultReport LabeledPirSetup(const PirSetupConfig &config) { WriteMetaInfo(kv_store_path, server_data_count, count_per_query, label_byte_count, label_columns, psi_params, bucket_count, - config.bucket_size(), config.compressed()); + config.apsi_server_config().oprf_key_path(), + config.bucket_size(), config.apsi_server_config().compressed()); std::shared_ptr<::psi::ILabeledBatchProvider> batch_provider = std::make_shared<::psi::CsvBatchProvider>( @@ -252,11 +279,11 @@ PirResultReport LabeledPirSetup(const PirSetupConfig &config) { ::apsi::PSIParams bucket_psi_params = GetPsiParams( count_per_query, std::min(bucket_size, batch_ids.size()), - config.max_items_per_bin()); + config.apsi_server_config().max_items_per_bin()); std::shared_ptr sender_db = std::make_shared( bucket_psi_params, oprf_key, bucket_setup_path, label_byte_count, - nonce_byte_count, config.compressed()); + nonce_byte_count, config.apsi_server_config().compressed()); std::shared_ptr<::psi::IBatchProvider> bucket_batch_provider = std::make_shared<::psi::MemoryBatchProvider>(batch_ids, bucket_size, @@ -272,13 +299,59 @@ PirResultReport LabeledPirSetup(const PirSetupConfig &config) { return report; } -PirResultReport LabeledPirServer( +PirResultReport PirServerOnline( const std::shared_ptr &link_ctx, - const std::shared_ptr &sender_db, - const std::vector &oprf_key, const ::apsi::PSIParams &psi_params, - const std::vector &label_columns, size_t bucket_count, - size_t /*server_data_count*/, size_t count_per_query, - size_t /*label_byte_count*/, uint32_t /*bucket_size*/) { + const PirServerConfig &config) { + YACL_ENFORCE(link_ctx); + + size_t server_data_count; + size_t count_per_query; + size_t label_byte_count; + + std::vector label_columns; + size_t bucket_count; + size_t bucket_size; + std::string oprf_key_path; + bool compressed; + + ::apsi::PSIParams psi_params = + ReadMetaInfo(config.setup_path(), &server_data_count, &count_per_query, + &label_byte_count, &label_columns, &bucket_count, + &oprf_key_path, &bucket_size, &compressed); + + YACL_ENFORCE(label_columns.size() > 0); + + std::vector oprf_key = ReadEcSecretKeyFile(oprf_key_path); + + // server and client sync + auto run_f = std::async([&] { return 0; }); + ::psi::SyncWait(link_ctx, &run_f); + + SPDLOG_INFO("table_params hash_func_count:{}", + psi_params.table_params().hash_func_count); + + size_t nonce_byte_count = kNonceByteCount; + + std::vector> sender_db(bucket_count); + std::vector> sender(bucket_count); + + std::unique_ptr oprf_server = + ecdh::CreateEcdhOprfServer(oprf_key, ecdh::OprfType::Basic, + ::psi::CurveType::CURVE_FOURQ); + + for (size_t bucket_idx = 0; bucket_idx < bucket_count; ++bucket_idx) { + std::string bucket_setup_path = + fmt::format("{}/bucket_{}", config.setup_path(), bucket_idx); + sender_db[bucket_idx] = std::make_shared( + psi_params, oprf_key, bucket_setup_path, label_byte_count, + nonce_byte_count, compressed); + + sender[bucket_idx] = + std::make_shared(sender_db[bucket_idx]); + } + + SPDLOG_INFO("db GetItemCount:{}", sender_db[0]->GetItemCount()); + // send count_per_query link_ctx->SendAsync(link_ctx->NextRank(), ::psi::utils::SerializeSize(count_per_query), @@ -294,7 +367,7 @@ PirResultReport LabeledPirServer( link_ctx->SendAsync(link_ctx->NextRank(), params_buffer, fmt::format("send psi params")); - // bucket_count + // send bucket_count link_ctx->SendAsync(link_ctx->NextRank(), ::psi::utils::SerializeSize(bucket_count), fmt::format("bucket_count:{}", bucket_count)); @@ -304,8 +377,6 @@ PirResultReport LabeledPirServer( size_t query_count = 0; size_t data_count = 0; - LabelPsiSender sender(sender_db); - while (true) { // recv current batch_size size_t batch_data_size = ::psi::utils::DeserializeSize( @@ -323,19 +394,21 @@ PirResultReport LabeledPirServer( ::psi::CurveType::CURVE_FOURQ); // const auto oprf_start = std::chrono::system_clock::now(); - sender.RunOPRF(std::move(oprf_server), link_ctx); + sender[0]->RunOPRF(std::move(oprf_server), link_ctx); - // const auto oprf_end = std::chrono::system_clock::now(); - // const DurationMillis oprf_duration = oprf_end - oprf_start; - // SPDLOG_INFO("*** server oprf duration:{}", oprf_duration.count()); + for (size_t bucket_idx = 0; bucket_idx < bucket_count; ++bucket_idx) { + // const auto oprf_end = std::chrono::system_clock::now(); + // const DurationMillis oprf_duration = oprf_end - oprf_start; + // SPDLOG_INFO("*** server oprf duration:{}", oprf_duration.count()); - // const auto query_start = std::chrono::system_clock::now(); + // const auto query_start = std::chrono::system_clock::now(); - sender.RunQuery(link_ctx); + sender[bucket_idx]->RunQuery(link_ctx); - // const auto query_end = std::chrono::system_clock::now(); - // const DurationMillis query_duration = query_end - query_start; - // SPDLOG_INFO("*** server query duration:{}", query_duration.count()); + // const auto query_end = std::chrono::system_clock::now(); + // const DurationMillis query_duration = query_end - query_start; + // SPDLOG_INFO("*** server query duration:{}", query_duration.count()); + } query_count++; } @@ -349,53 +422,12 @@ PirResultReport LabeledPirServer( PirResultReport LabeledPirServer( const std::shared_ptr &link_ctx, - const PirServerConfig &config) { - size_t server_data_count; - size_t count_per_query; - size_t label_byte_count; - - std::vector label_columns; - size_t bucket_count; - size_t bucket_size; - bool compressed; - - ::apsi::PSIParams psi_params = - ReadMetaInfo(config.setup_path(), &server_data_count, &count_per_query, - &label_byte_count, &label_columns, &bucket_count, - &bucket_size, &compressed); - - YACL_ENFORCE(label_columns.size() > 0); - - std::vector oprf_key = ReadEcSecretKeyFile(config.oprf_key_path()); - - // server and client sync - auto run_f = std::async([&] { return 0; }); - ::psi::SyncWait(link_ctx, &run_f); - - SPDLOG_INFO("table_params hash_func_count:{}", - psi_params.table_params().hash_func_count); - - size_t nonce_byte_count = kNonceByteCount; - - std::vector> sender_db(bucket_count); - std::vector> sender(bucket_count); - - std::unique_ptr oprf_server = - ecdh::CreateEcdhOprfServer(oprf_key, ecdh::OprfType::Basic, - ::psi::CurveType::CURVE_FOURQ); - - for (size_t bucket_idx = 0; bucket_idx < bucket_count; ++bucket_idx) { - std::string bucket_setup_path = - fmt::format("{}/bucket_{}", config.setup_path(), bucket_idx); - sender_db[bucket_idx] = std::make_shared( - psi_params, oprf_key, bucket_setup_path, label_byte_count, - nonce_byte_count, compressed); - - sender[bucket_idx] = - std::make_shared(sender_db[bucket_idx]); - } - - SPDLOG_INFO("db GetItemCount:{}", sender_db[0]->GetItemCount()); + const std::shared_ptr &sender_db, + const std::vector &oprf_key, const ::apsi::PSIParams &psi_params, + const std::vector &label_columns, size_t bucket_count, + size_t /*server_data_count*/, size_t count_per_query, + size_t /*label_byte_count*/, uint32_t /*bucket_size*/) { + YACL_ENFORCE(link_ctx); // send count_per_query link_ctx->SendAsync(link_ctx->NextRank(), @@ -412,7 +444,7 @@ PirResultReport LabeledPirServer( link_ctx->SendAsync(link_ctx->NextRank(), params_buffer, fmt::format("send psi params")); - // send bucket_count + // bucket_count link_ctx->SendAsync(link_ctx->NextRank(), ::psi::utils::SerializeSize(bucket_count), fmt::format("bucket_count:{}", bucket_count)); @@ -422,6 +454,8 @@ PirResultReport LabeledPirServer( size_t query_count = 0; size_t data_count = 0; + LabelPsiSender sender(sender_db); + while (true) { // recv current batch_size size_t batch_data_size = ::psi::utils::DeserializeSize( @@ -439,21 +473,19 @@ PirResultReport LabeledPirServer( ::psi::CurveType::CURVE_FOURQ); // const auto oprf_start = std::chrono::system_clock::now(); - sender[0]->RunOPRF(std::move(oprf_server), link_ctx); + sender.RunOPRF(std::move(oprf_server), link_ctx); - for (size_t bucket_idx = 0; bucket_idx < bucket_count; ++bucket_idx) { - // const auto oprf_end = std::chrono::system_clock::now(); - // const DurationMillis oprf_duration = oprf_end - oprf_start; - // SPDLOG_INFO("*** server oprf duration:{}", oprf_duration.count()); + // const auto oprf_end = std::chrono::system_clock::now(); + // const DurationMillis oprf_duration = oprf_end - oprf_start; + // SPDLOG_INFO("*** server oprf duration:{}", oprf_duration.count()); - // const auto query_start = std::chrono::system_clock::now(); + // const auto query_start = std::chrono::system_clock::now(); - sender[bucket_idx]->RunQuery(link_ctx); + sender.RunQuery(link_ctx); - // const auto query_end = std::chrono::system_clock::now(); - // const DurationMillis query_duration = query_end - query_start; - // SPDLOG_INFO("*** server query duration:{}", query_duration.count()); - } + // const auto query_end = std::chrono::system_clock::now(); + // const DurationMillis query_duration = query_end - query_start; + // SPDLOG_INFO("*** server query duration:{}", query_duration.count()); query_count++; } @@ -465,9 +497,11 @@ PirResultReport LabeledPirServer( return report; } -PirResultReport LabeledPirMemoryServer( +PirResultReport PirServerFull( const std::shared_ptr &link_ctx, - const PirSetupConfig &config) { + const PirServerConfig &config) { + YACL_ENFORCE(link_ctx); + std::vector key_columns; key_columns.insert(key_columns.end(), config.key_columns().begin(), config.key_columns().end()); @@ -477,23 +511,24 @@ PirResultReport LabeledPirMemoryServer( config.label_columns().end()); size_t server_data_count = CsvFileDataCount(config.input_path(), key_columns); - size_t count_per_query = config.num_per_query(); + size_t count_per_query = config.apsi_server_config().num_per_query(); SPDLOG_INFO("server_data_count:{}", server_data_count); YACL_ENFORCE(server_data_count <= config.bucket_size(), "data_count:{} bucket_size:{}", config.bucket_size()); - ::apsi::PSIParams psi_params = GetPsiParams( - count_per_query, server_data_count, config.max_items_per_bin()); + ::apsi::PSIParams psi_params = + GetPsiParams(count_per_query, server_data_count, + config.apsi_server_config().max_items_per_bin()); std::vector oprf_key = yacl::crypto::RandBytes(::psi::kEccKeySize); size_t label_byte_count = config.label_max_len(); size_t nonce_byte_count = kNonceByteCount; - std::shared_ptr sender_db = - std::make_shared(psi_params, oprf_key, label_byte_count, - nonce_byte_count, config.compressed()); + std::shared_ptr sender_db = std::make_shared( + psi_params, oprf_key, label_byte_count, nonce_byte_count, + config.apsi_server_config().compressed()); // server and client sync auto run_f = std::async([&] { @@ -519,9 +554,10 @@ PirResultReport LabeledPirMemoryServer( return report; } -PirResultReport LabeledPirClient( - const std::shared_ptr &link_ctx, - const PirClientConfig &config) { +PirResultReport PirClient(const std::shared_ptr &link_ctx, + const PirClientConfig &config) { + YACL_ENFORCE(link_ctx); + std::vector key_columns; key_columns.insert(key_columns.end(), config.key_columns().begin(), config.key_columns().end()); @@ -692,44 +728,4 @@ PirResultReport LabeledPirClient( return report; } -PirResultReport PirSetup(const PirSetupConfig &config) { - if (config.pir_protocol() != ::psi::KEYWORD_PIR_LABELED_PSI) { - YACL_THROW("Unsupported pir protocol {}", - PirProtocol_Name(config.pir_protocol())); - } - - return LabeledPirSetup(config); -} - -PirResultReport PirServer(const std::shared_ptr &link_ctx, - const PirServerConfig &config) { - if (config.pir_protocol() != ::psi::KEYWORD_PIR_LABELED_PSI) { - YACL_THROW("Unsupported pir protocol {}", - PirProtocol_Name(config.pir_protocol())); - } - - return LabeledPirServer(link_ctx, config); -} - -PirResultReport PirMemoryServer( - const std::shared_ptr &link_ctx, - const PirSetupConfig &config) { - if (config.pir_protocol() != ::psi::KEYWORD_PIR_LABELED_PSI) { - YACL_THROW("Unsupported pir protocol {}", - PirProtocol_Name(config.pir_protocol())); - } - - return LabeledPirMemoryServer(link_ctx, config); -} - -PirResultReport PirClient(const std::shared_ptr &link_ctx, - const PirClientConfig &config) { - if (config.pir_protocol() != ::psi::KEYWORD_PIR_LABELED_PSI) { - YACL_THROW("Unsupported pir protocol {}", - PirProtocol_Name(config.pir_protocol())); - } - - return LabeledPirClient(link_ctx, config); -} - } // namespace psi::apsi diff --git a/psi/apsi/pir.h b/psi/apsi/pir.h index e12fc08..002b2ab 100644 --- a/psi/apsi/pir.h +++ b/psi/apsi/pir.h @@ -24,31 +24,20 @@ namespace psi::apsi { -PirResultReport PirSetup(const PirSetupConfig &config); +PirResultReport Launch(const PirConfig &config, + const std::shared_ptr &lctx); -PirResultReport PirServer(const std::shared_ptr &link_ctx, - const PirServerConfig &config); +PirResultReport PirServerSetup(const PirServerConfig &config); -PirResultReport PirClient(const std::shared_ptr &link_ctx, - const PirClientConfig &config); - -PirResultReport PirMemoryServer( - const std::shared_ptr &link_ctx, - const PirSetupConfig &config); - -// pir protocol based on labeled psi -PirResultReport LabeledPirSetup(const PirSetupConfig &config); - -PirResultReport LabeledPirServer( +PirResultReport PirServerOnline( const std::shared_ptr &link_ctx, const PirServerConfig &config); -PirResultReport LabeledPirMemoryServer( +PirResultReport PirServerFull( const std::shared_ptr &link_ctx, const PirServerConfig &config); -PirResultReport LabeledPirClient( - const std::shared_ptr &link_ctx, - const PirClientConfig &config); +PirResultReport PirClient(const std::shared_ptr &link_ctx, + const PirClientConfig &config); } // namespace psi::apsi diff --git a/psi/apsi/pir_test.cc b/psi/apsi/pir_test.cc index d6d7e1c..963b6e2 100644 --- a/psi/apsi/pir_test.cc +++ b/psi/apsi/pir_test.cc @@ -187,44 +187,34 @@ TEST_P(PirTest, Works) { std::vector labels = {label_cloumn_name}; if (params.use_filedb) { - ::psi::PirSetupConfig config; + ::psi::PirServerConfig config; - config.set_pir_protocol(::psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_store_type(::psi::KvStoreType::LEVELDB_KV_STORE); config.set_input_path(server_csv_path); - config.mutable_key_columns()->Add(ids.begin(), ids.end()); config.mutable_label_columns()->Add(labels.begin(), labels.end()); - config.set_num_per_query(params.nr); + config.mutable_apsi_server_config()->set_num_per_query(params.nr); config.set_label_max_len(params.label_bytes); - config.set_oprf_key_path(oprf_key_path); + config.mutable_apsi_server_config()->set_oprf_key_path(oprf_key_path); config.set_setup_path(setup_path); - config.set_compressed(params.compressed); + config.mutable_apsi_server_config()->set_compressed(params.compressed); config.set_bucket_size(params.bucket_size); - ::psi::PirResultReport setup_report = PirSetup(config); + ::psi::PirResultReport setup_report = PirServerSetup(config); EXPECT_EQ(setup_report.data_count(), params.ns); std::future<::psi::PirResultReport> f_server = std::async([&] { ::psi::PirServerConfig config; - - config.set_pir_protocol(::psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_store_type(::psi::KvStoreType::LEVELDB_KV_STORE); - - config.set_oprf_key_path(oprf_key_path); config.set_setup_path(setup_path); - ::psi::PirResultReport report = PirServer(ctxs[0], config); + ::psi::PirResultReport report = PirServerOnline(ctxs[0], config); return report; }); std::future<::psi::PirResultReport> f_client = std::async([&] { ::psi::PirClientConfig config; - config.set_pir_protocol(::psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_input_path(client_csv_path); config.mutable_key_columns()->Add(ids.begin(), ids.end()); config.set_output_path(pir_result_path); @@ -241,31 +231,24 @@ TEST_P(PirTest, Works) { } else { std::future<::psi::PirResultReport> f_server = std::async([&] { - ::psi::PirSetupConfig config; + ::psi::PirServerConfig config; - config.set_pir_protocol(::psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_store_type(::psi::KvStoreType::LEVELDB_KV_STORE); config.set_input_path(server_csv_path); - config.mutable_key_columns()->Add(ids.begin(), ids.end()); config.mutable_label_columns()->Add(labels.begin(), labels.end()); - config.set_num_per_query(params.nr); + config.mutable_apsi_server_config()->set_num_per_query(params.nr); config.set_label_max_len(params.label_bytes); - config.set_oprf_key_path(""); - config.set_setup_path("::memory"); - config.set_compressed(params.compressed); + config.mutable_apsi_server_config()->set_compressed(params.compressed); config.set_bucket_size(params.bucket_size); - ::psi::PirResultReport report = PirMemoryServer(ctxs[0], config); + ::psi::PirResultReport report = PirServerFull(ctxs[0], config); return report; }); std::future<::psi::PirResultReport> f_client = std::async([&] { ::psi::PirClientConfig config; - config.set_pir_protocol(::psi::PirProtocol::KEYWORD_PIR_LABELED_PSI); - config.set_input_path(client_csv_path); config.mutable_key_columns()->Add(ids.begin(), ids.end()); config.set_output_path(pir_result_path); diff --git a/psi/ecdh/client.cc b/psi/ecdh/client.cc index 2876991..63d3c0d 100644 --- a/psi/ecdh/client.cc +++ b/psi/ecdh/client.cc @@ -33,12 +33,12 @@ void EcdhUbPsiClient::Init() { if (config_.mode() == v2::UbPsiConfig::MODE_OFFLINE_TRANSFER_CACHE || config_.mode() == v2::UbPsiConfig::MODE_OFFLINE || config_.mode() == v2::UbPsiConfig::MODE_FULL) { - YACL_ENFORCE(!config_.cache_config().path().empty()); + YACL_ENFORCE(!config_.cache_path().empty()); } if (config_.mode() == v2::UbPsiConfig::MODE_ONLINE || config_.mode() == v2::UbPsiConfig::MODE_FULL) { - YACL_ENFORCE(!config_.cache_config().path().empty()); + YACL_ENFORCE(!config_.cache_path().empty()); } if (lctx_) { @@ -57,7 +57,7 @@ void EcdhUbPsiClient::OfflineTransferCache() { std::make_shared(psi_options_); auto peer_ec_point_store = std::make_shared( - config_.cache_config().path(), false, "peer", false); + config_.cache_path(), false, "peer", false); ub_psi_client_transfer_cache->RecvFinalEvaluatedItems(peer_ec_point_store); @@ -90,10 +90,10 @@ void EcdhUbPsiClient::Online() { ec_point_store_path1, true, "self", false); auto peer_ec_point_store = std::make_shared( - config_.cache_config().path(), false, "peer", true); + config_.cache_path(), false, "peer", true); SPDLOG_INFO("online protocol CachedCsvCipherStore: {} {}", - ec_point_store_path1, config_.cache_config().path()); + ec_point_store_path1, config_.cache_path()); std::future f_client_send_blind = std::async([&] { return dh_oprf_psi_client_online->SendBlindedItems(batch_provider); diff --git a/psi/ecdh/server.cc b/psi/ecdh/server.cc index 3a9f895..99df737 100644 --- a/psi/ecdh/server.cc +++ b/psi/ecdh/server.cc @@ -32,8 +32,8 @@ void EcdhUbPsiServer::Init() { config_.mode() == v2::UbPsiConfig::MODE_FULL) { YACL_ENFORCE(!config_.input_config().path().empty()); YACL_ENFORCE(!config_.keys().empty()); - YACL_ENFORCE(!config_.server_secret_key_config().path().empty()); - YACL_ENFORCE(!config_.cache_config().path().empty()); + YACL_ENFORCE(!config_.server_secret_key_path().empty()); + YACL_ENFORCE(!config_.cache_path().empty()); } if (config_.mode() == v2::UbPsiConfig::MODE_OFFLINE_GEN_CACHE) { @@ -43,13 +43,13 @@ void EcdhUbPsiServer::Init() { if (config_.mode() == v2::UbPsiConfig::MODE_OFFLINE_TRANSFER_CACHE || config_.mode() == v2::UbPsiConfig::MODE_OFFLINE || config_.mode() == v2::UbPsiConfig::MODE_FULL) { - YACL_ENFORCE(!config_.cache_config().path().empty()); + YACL_ENFORCE(!config_.cache_path().empty()); } if (config_.mode() == v2::UbPsiConfig::MODE_ONLINE || config_.mode() == v2::UbPsiConfig::MODE_FULL) { - YACL_ENFORCE(!config_.server_secret_key_config().path().empty()); - YACL_ENFORCE(!config_.cache_config().path().empty()); + YACL_ENFORCE(!config_.server_secret_key_path().empty()); + YACL_ENFORCE(!config_.cache_path().empty()); } if (lctx_) { @@ -63,7 +63,7 @@ void EcdhUbPsiServer::Init() { void EcdhUbPsiServer::OfflineGenCache() { std::vector server_private_key = - ReadEcSecretKeyFile(config_.server_secret_key_config().path()); + ReadEcSecretKeyFile(config_.server_secret_key_path()); std::shared_ptr dh_oprf_psi_server = std::make_shared(psi_options_, server_private_key); @@ -80,7 +80,7 @@ void EcdhUbPsiServer::OfflineGenCache() { csv_batch_provider, psi_options_.batch_size, true); std::shared_ptr ub_cache = std::make_shared( - config_.cache_config().path(), dh_oprf_psi_server->GetCompareLength(), + config_.cache_path(), dh_oprf_psi_server->GetCompareLength(), selected_keys); size_t self_items_count = @@ -96,7 +96,7 @@ void EcdhUbPsiServer::OfflineTransferCache() { std::shared_ptr batch_provider = std::make_shared( - config_.cache_config().path(), psi_options_.batch_size, + config_.cache_path(), psi_options_.batch_size, ub_psi_server_transfer_cache->GetCompareLength()); size_t self_items_count = @@ -110,7 +110,7 @@ void EcdhUbPsiServer::OfflineTransferCache() { void EcdhUbPsiServer::Offline() { std::vector server_private_key = - ReadEcSecretKeyFile(config_.server_secret_key_config().path()); + ReadEcSecretKeyFile(config_.server_secret_key_path()); std::shared_ptr dh_oprf_psi_server_offline = std::make_shared(psi_options_, server_private_key); @@ -137,7 +137,7 @@ void EcdhUbPsiServer::Offline() { void EcdhUbPsiServer::Online() { std::vector server_private_key = - ReadEcSecretKeyFile(config_.server_secret_key_config().path()); + ReadEcSecretKeyFile(config_.server_secret_key_path()); std::shared_ptr dh_oprf_psi_server_online = std::make_shared(psi_options_, server_private_key); diff --git a/psi/launch.cc b/psi/launch.cc index abd7cbd..f0ea0f8 100644 --- a/psi/launch.cc +++ b/psi/launch.cc @@ -27,7 +27,9 @@ #include "perfetto.h" #include "spdlog/spdlog.h" +#include "psi/apsi/pir.h" #include "psi/factory.h" +#include "psi/prelude.h" #include "psi/trace_categories.h" namespace psi { @@ -165,4 +167,12 @@ PsiResultReport RunLegacyPsi(const BucketPsiConfig& bucket_psi_config, return bucket_psi.Run(progress_callbacks, callbacks_interval_ms); } +PirResultReport RunPir(const PirConfig& pir_config, + const std::shared_ptr& lctx) { + YACL_ENFORCE_EQ(pir_config.pir_protocol(), + PirProtocol::PIR_PROTOCOL_KEYWORD_PIR_APSI); + + return apsi::Launch(pir_config, lctx); +} + } // namespace psi diff --git a/psi/launch.h b/psi/launch.h index 2bc60a7..9eabaa3 100644 --- a/psi/launch.h +++ b/psi/launch.h @@ -21,6 +21,7 @@ #include "psi/legacy/bucket_psi.h" +#include "psi/proto/pir.pb.h" #include "psi/proto/psi.pb.h" #include "psi/proto/psi_v2.pb.h" @@ -37,4 +38,7 @@ PsiResultReport RunPsi(const v2::PsiConfig& psi_config, PsiResultReport RunUbPsi(const v2::UbPsiConfig& ub_psi_config, const std::shared_ptr& lctx); +PirResultReport RunPir(const PirConfig& pir_config, + const std::shared_ptr& lctx); + } // namespace psi diff --git a/psi/main.cc b/psi/main.cc index 27a61a4..230e0df 100644 --- a/psi/main.cc +++ b/psi/main.cc @@ -23,7 +23,9 @@ #include "psi/version.h" #include "psi/proto/entry.pb.h" +#include "psi/proto/pir.pb.h" #include "psi/proto/psi.pb.h" +#include "psi/proto/psi_v2.pb.h" DEFINE_string(config, "", "file path of launch config in JSON format."); DEFINE_string(kuscia, "", "file path of kuscia task config in JSON format."); @@ -83,25 +85,36 @@ int main(int argc, char* argv[]) { lctx = yacl::link::FactoryBrpc().CreateContext(lctx_desc, rank); } - psi::PsiResultReport report; + google::protobuf::util::JsonPrintOptions json_print_options; + json_print_options.preserve_proto_field_names = true; + std::string report_json; if (launch_config.has_legacy_psi_config()) { - report = psi::RunLegacyPsi(launch_config.legacy_psi_config(), lctx); + psi::PsiResultReport report = + psi::RunLegacyPsi(launch_config.legacy_psi_config(), lctx); + YACL_ENFORCE(google::protobuf::util::MessageToJsonString( + report, &report_json, json_print_options) + .ok()); } else if (launch_config.has_psi_config()) { - report = psi::RunPsi(launch_config.psi_config(), lctx); + psi::PsiResultReport report = psi::RunPsi(launch_config.psi_config(), lctx); + YACL_ENFORCE(google::protobuf::util::MessageToJsonString( + report, &report_json, json_print_options) + .ok()); } else if (launch_config.has_ub_psi_config()) { - report = psi::RunUbPsi(launch_config.ub_psi_config(), lctx); + psi::PsiResultReport report = + psi::RunUbPsi(launch_config.ub_psi_config(), lctx); + YACL_ENFORCE(google::protobuf::util::MessageToJsonString( + report, &report_json, json_print_options) + .ok()); + } else if (launch_config.has_pir_config()) { + psi::PirResultReport report = psi::RunPir(launch_config.pir_config(), lctx); + YACL_ENFORCE(google::protobuf::util::MessageToJsonString( + report, &report_json, json_print_options) + .ok()); } else { SPDLOG_WARN("No runtime config is provided."); } - google::protobuf::util::JsonPrintOptions json_print_options; - json_print_options.preserve_proto_field_names = true; - std::string report_json; - YACL_ENFORCE(google::protobuf::util::MessageToJsonString(report, &report_json, - json_print_options) - .ok()); SPDLOG_INFO("Report: {}", report_json); - SPDLOG_INFO("Thank you for trusting SecretFlow PSI Library."); return 0; } diff --git a/psi/prelude.h b/psi/prelude.h index 38ea6d0..ae51e92 100644 --- a/psi/prelude.h +++ b/psi/prelude.h @@ -16,6 +16,7 @@ #include "fmt/ostream.h" +#include "psi/proto/pir.pb.h" #include "psi/proto/psi.pb.h" #include "psi/proto/psi_v2.pb.h" @@ -24,6 +25,9 @@ namespace fmt { template <> struct formatter : ostream_formatter {}; +template <> +struct formatter : ostream_formatter {}; + template <> struct formatter : ostream_formatter {}; diff --git a/psi/proto/BUILD.bazel b/psi/proto/BUILD.bazel index 0e99dad..f0b0d41 100644 --- a/psi/proto/BUILD.bazel +++ b/psi/proto/BUILD.bazel @@ -53,6 +53,7 @@ proto_library( name = "entry_proto", srcs = ["entry.proto"], deps = [ + ":pir_proto", ":psi_proto", ":psi_v2_proto", "@yacl//yacl/link:link_proto", diff --git a/psi/proto/entry.proto b/psi/proto/entry.proto index 92ada2e..f17728b 100644 --- a/psi/proto/entry.proto +++ b/psi/proto/entry.proto @@ -16,6 +16,7 @@ syntax = "proto3"; import "psi/proto/psi.proto"; +import "psi/proto/pir.proto"; import "psi/proto/psi_v2.proto"; import "yacl/link/link.proto"; @@ -38,6 +39,7 @@ message LaunchConfig { // Please check at psi_v2.proto. v2.UbPsiConfig ub_psi_config = 5; - // TODO(junfeng): add PIR config here. + // Please check at pir.proto. + PirConfig pir_config = 6; } } diff --git a/psi/proto/pir.proto b/psi/proto/pir.proto index d2e5f3c..2ecab79 100644 --- a/psi/proto/pir.proto +++ b/psi/proto/pir.proto @@ -18,95 +18,105 @@ syntax = "proto3"; package psi; -// The kv-store type of pir. -enum KvStoreType { - INVALID_STORE_TYPE = 0; - - // based on memory - MEMORY_KV_STORE = 1; - - // based on leveldb - LEVELDB_KV_STORE = 2; -} - // The algorithm type of pir. enum PirProtocol { - INVALID_PIR_TYPE = 0; + PIR_PROTOCOL_UNSPECIFIED = 0; + + // Keyword PIR + // APSI + // Reference: https://github.com/microsoft/APSI + PIR_PROTOCOL_KEYWORD_PIR_APSI = 1; + + // Index PIR + // SealPIR + // Reference: https://github.com/microsoft/SealPIR + // Unsupported at this moment. + // PIR_PROTOCOL_INDEX_PIR_SEALPIR = 10; +} - // based on labeled PSI - KEYWORD_PIR_LABELED_PSI = 1; +// The config for PIR. This is the entrypoint for all PIR tasks. +message PirConfig { + enum Mode { + MODE_UNSPECIFIED = 0; - // based on SealPIR - INDEX_PIR_SEALPIR = 10; -} + // Server with setup stage. + MODE_SERVER_SETUP = 1; -// The Cfg Params of setup phase. -message PirSetupConfig { - // The pir protocol. - PirProtocol pir_protocol = 1; + // Server with online stage. + MODE_SERVER_ONLINE = 2; - // type of kv-store - KvStoreType store_type = 2; + // Server with both online and offline stages. + MODE_SERVER_FULL = 3; - // The input csv file path of pir. - string input_path = 3; + // Client + MODE_CLIENT = 4; + } - // The key columns name of input data. - repeated string key_columns = 4; + Mode mode = 1; - // The label columns name of input data. - repeated string label_columns = 5; + // The PIR protocol. + PirProtocol pir_protocol = 2; - // The number of per query. - uint32 num_per_query = 6; + // Required for MODE_SERVER_SETUP, MODE_SERVER_ONLINE and MODE_SERVER_FULL. + PirServerConfig pir_server_config = 3; - // The max number bytes of label. - uint32 label_max_len = 7; + // Required for MODE_CLIENT. + PirClientConfig pir_client_config = 4; +} +// Server config for APSI protocol. +message ApsiServerConfig { // The path of oprf_key file path. - string oprf_key_path = 8; + // This field is not required for MODE_SERVER_FULL. + string oprf_key_path = 1; - // The path of setup output leveldb path. - string setup_path = 9; + // The number of per query. + uint32 num_per_query = 2; // compressed Seal ciphertext - bool compressed = 10; + bool compressed = 3; - // split data bucket to do pir query - uint32 bucket_size = 11; - - // max items per bin, i.e. Interpolate polynomial max degree - uint32 max_items_per_bin = 12; + // max items per bin, i.e. Interpolate polynomial max degree. + // optional. + uint32 max_items_per_bin = 4; } -// The Server's Cfg Params of query phase. +// Server configs. +// setup_path is only required field for MODE_SERVER_ONLINE. +// setup_path is not required for MODE_SERVER_FULL. message PirServerConfig { - // The pir algorithm. - PirProtocol pir_protocol = 1; + // The input csv file path. + string input_path = 1; - // type of kv-store - KvStoreType store_type = 2; + // The path of setup output path. + string setup_path = 2; - // The path of setup output leveldb path. - string setup_path = 3; + // The key columns name of input data. + repeated string key_columns = 3; - // The path of oprf_key file path. - string oprf_key_path = 4; + // The label columns name of input data. + repeated string label_columns = 4; + + // The max number bytes of label. + uint32 label_max_len = 5; + + // split data bucket to do pir query + uint32 bucket_size = 6; + + // For APSI protocol only + ApsiServerConfig apsi_server_config = 10; } -// The Client's Cfg Params of query phase. +// Client configs. message PirClientConfig { - // The pir algorithm. - PirProtocol pir_protocol = 1; - // The input csv file path of pir. - string input_path = 2; + string input_path = 1; // The key columns name of input data. - repeated string key_columns = 3; + repeated string key_columns = 2; // The path of query output csv file path. - string output_path = 4; + string output_path = 3; } // The report of pir result. diff --git a/psi/proto/psi_v2.proto b/psi/proto/psi_v2.proto index 545dd0c..1b3f044 100644 --- a/psi/proto/psi_v2.proto +++ b/psi/proto/psi_v2.proto @@ -455,10 +455,10 @@ message UbPsiConfig { // Servers: // Required for MODE_OFFLINE_GEN_CACHE, MODE_OFFLINE, MODE_ONLINE and // MODE_FULL. - IoConfig server_secret_key_config = 5; + string server_secret_key_path = 5; // Required. - IoConfig cache_config = 6; + string cache_path = 6; bool server_get_result = 7; diff --git a/psi/version.h b/psi/version.h index 43fbd6f..be5e137 100644 --- a/psi/version.h +++ b/psi/version.h @@ -17,4 +17,4 @@ #define PSI_VERSION_MAJOR 0 #define PSI_VERSION_MINOR 2 #define PSI_VERSION_PATCH 0 -#define PSI_DEV_IDENTIFIER ".dev240219" +#define PSI_DEV_IDENTIFIER ".dev240222"