microsoft / SealPIR

Example implementation of the SealPIR protocol
MIT License
140 stars 54 forks source link

A question of the test program main #14

Closed jun1015 closed 1 week ago

jun1015 commented 2 years ago

Hello! I test the program in abeams/sealPIR:master. When I set the polynomial modulu N to 2048, the error is
terminate called after throwing an instance of 'std::logic_error what(): keyswitching is not supported by the context

According to the notes, I tried to set the modulus switching chain enc_params.set_coeff_modulus(CoeffModulus::Create(N, {27,27})); The error is: Client: 1/ 2-th decryption layer started. Client: done.

Client: 2/ 2-th decryption layer started. terminate called after throwing an instance of 'std::invalid_argument' what(): encrypted is not valid for encryption parameters Aborted

What should I do when I set N to 2048?

sga001 commented 2 years ago

That fork uses SEAL version 3.7.2. After SEAL 3.6 or so, the minimum poly degree (N) supported for the galois automorphisms (which SealPIR needs to perform the query compression/decompression) is 4096.

So to answer your question, there is nothing you can do when N is 2048. You could use the older version of SealPIR which uses an older version of SEAL that doesn't have this restriction.

jun1015 commented 2 years ago

Thanks, I got it!

jun1015 commented 2 years ago

Hello! I found that the old version is faster than the new. I tested them at the same enviroment. Is it normal?

sga001 commented 2 years ago

Yes, the old version is slightly faster because we are using larger security parameters in this version.