Omer Shlomovits on Tue, 05 Nov 2019 16:46:55 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Pari Library used with Rust : help with parallelism


Hello ,

My name is Omer Shlomovits and I work as a cryptographer for KZen Research (https://zengo.com/research/).
As part of my work we implemented a Rust library that is using Pari c library for class groups operations: https://github.com/KZen-networks/class-groups
The library is supposed to provide implementation for cryptographic primitives based on class groups. 
Our first primitive is based on a zero-knowledge proof from https://eprint.iacr.org/2019/503.pdf
Our version of the zk proof is non interactive and require repeating binary quadratic form exponentiation with n different values (and also n composition of two QFs). These operations should be good fit to run in parallel since the exponentiations are independent. However, working with Rust and calling the library functions from Rust, I can’t find a good way to support the necessary parallelism. This is unfortunate because this is exactly the gap between making the protocol from 2019/503 practical for our needs. 
What I have tried: 
- using the Rust "parallel for" over Pari library calls to “nupow” : I am getting stack overflow every time. No mattar what is the max size of the stack
- I tried Pari parfor: This option went better but I got illegal instruction error eventually. I think that it is because I don’t know how to write  “ i = 1 “ where i is a "formal variable” (I am not sure what is a formal variable). In my code I just use j (instead of writing i  = 1) as some Gen repressing a number. 
- I looked into parapply but I have no idea (maybe you do?) on how to write the function name as a "Gen f” when trying to invoke this method from Rust. 

To conclude: I exhausted my options and looking for new ways / ideas of what I am doing wrong with what I tried above.

Thanks in advance, 
Omer.