What?
Separate the Rust functionality from the Python wrapper in a neater way.
Why?
This would allow people who just care about Rust to use FSS directly, without the Python/Syft-friendly wrapper.
It will also make it easier to maintain, implement new FSS schemes, and attract contributors.
Breakdown
In Syft, our use-case for FSS is to generate large arrays of DPF and DIF keys with random alphas. This is not the most general use-case, where a user might just want to generate a single (alpha, beta)-DPF key. To support this, we would need to:
- Separate the alpha/mask randomness generation from the (alpha, beta)-key generation. It means moving this line out of the Rust keygen:
|
let mut rng = rand::thread_rng(); |
. We can generate the randomness either in the Python wrapper, or in the SyMPC call.
- It's a good opportunity to use cryptographically secure randomness (e.g. Torch CSPRNG)
- Add support for arbitrary beta instead of beta=1
What?
Separate the Rust functionality from the Python wrapper in a neater way.
Why?
This would allow people who just care about Rust to use FSS directly, without the Python/Syft-friendly wrapper.
It will also make it easier to maintain, implement new FSS schemes, and attract contributors.
Breakdown
In Syft, our use-case for FSS is to generate large arrays of DPF and DIF keys with random alphas. This is not the most general use-case, where a user might just want to generate a single (alpha, beta)-DPF key. To support this, we would need to:
sycret/src/eq.rs
Line 47 in 368276c