params.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. use crate::{arith::*, ntt::*};
  2. pub struct Params {
  3. pub poly_len: usize,
  4. pub poly_len_log2: usize,
  5. pub ntt_tables: Vec<Vec<Vec<u64>>>,
  6. pub crt_count: usize,
  7. pub moduli: Vec<u64>,
  8. pub modulus: u64,
  9. pub noise_width: f64,
  10. pub n: usize,
  11. pub t_conv: usize,
  12. pub t_exp_left: usize,
  13. pub t_exp_right: usize,
  14. pub t_gsw: usize,
  15. }
  16. impl Params {
  17. pub fn num_words(&self) -> usize {
  18. self.poly_len * self.crt_count
  19. }
  20. pub fn get_ntt_forward_table(&self, i: usize) -> &[u64] {
  21. self.ntt_tables[i][0].as_slice()
  22. }
  23. pub fn get_ntt_forward_prime_table(&self, i: usize) -> &[u64] {
  24. self.ntt_tables[i][1].as_slice()
  25. }
  26. pub fn get_ntt_inverse_table(&self, i: usize) -> &[u64] {
  27. self.ntt_tables[i][2].as_slice()
  28. }
  29. pub fn get_ntt_inverse_prime_table(&self, i: usize) -> &[u64] {
  30. self.ntt_tables[i][3].as_slice()
  31. }
  32. pub fn get_sk_gsw(&self) -> (usize, usize) {
  33. (self.n, 1)
  34. }
  35. pub fn get_sk_reg(&self) -> (usize, usize) {
  36. (1, 1)
  37. }
  38. pub fn m_conv(&self) -> usize {
  39. 2 * self.t_conv;
  40. }
  41. pub fn init(
  42. poly_len: usize,
  43. moduli: &Vec<u64>,
  44. noise_width: f64,
  45. n: usize,
  46. t_conv: usize,
  47. t_exp_left: usize,
  48. t_exp_right: usize,
  49. t_gsw: usize,
  50. ) -> Self {
  51. let poly_len_log2 = log2(poly_len as u64) as usize;
  52. let crt_count = moduli.len();
  53. let ntt_tables = build_ntt_tables(poly_len, moduli.as_slice());
  54. let mut modulus = 1;
  55. for m in moduli {
  56. modulus *= m;
  57. }
  58. Self {
  59. poly_len,
  60. poly_len_log2,
  61. ntt_tables,
  62. crt_count,
  63. moduli: moduli.clone(),
  64. modulus,
  65. noise_width,
  66. n,
  67. t_conv,
  68. t_exp_left,
  69. t_exp_right,
  70. t_gsw,
  71. }
  72. }
  73. }