bgn.hpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #ifndef __BGN_HPP
  2. #define __BGN_HPP
  3. #include <bitset>
  4. #include <cinttypes>
  5. #include <cmath>
  6. #include <typeinfo>
  7. #include <cxxabi.h>
  8. #include <stdlib.h>
  9. #include <time.h>
  10. #include <chrono>
  11. #include <limits.h> /* for CHAR_BIT */
  12. #include "gengetopt.h"
  13. #include "typedef.h"
  14. #include "zout.hpp"
  15. #include "size.hpp"
  16. #include "mydouble.h"
  17. extern "C" {
  18. #include "fpe.h"
  19. }
  20. #include "quadruplet.hpp"
  21. #include "curvepoint_fp.h"
  22. extern "C" {
  23. #include "fp2e.h"
  24. }
  25. #include "twistpoint_fp2.h"
  26. #include "Bipoint.hpp"
  27. #include "BitChiffre.hpp"
  28. #include "fpe2scalar.hpp"
  29. #include "chiffrement.hpp"
  30. #include "circuit_chiffrement.hpp"
  31. #include "Fp.hpp"
  32. #include "keygen.hpp"
  33. #include "circuit_minmaj.hpp"
  34. #include "circuit_additionL1.hpp"
  35. #include "circuit_additionL2.hpp"
  36. #include "circuit_multiplicationL1.hpp"
  37. #include "circuit_multiplicationL1L2.hpp"
  38. #include "circuit_additionL3.hpp"
  39. #include "circuit_multiplicationL2.hpp"
  40. #include "circuit_additionL4.hpp"
  41. #include "circuit_size.hpp"
  42. #include "circuit_minmaj3.hpp"
  43. #include "circuit_minmaj2.hpp"
  44. #include "circuit_time.hpp"
  45. #include "circuit_demo.hpp"
  46. #include "circuit_ip.hpp"
  47. #include "circuit_scalar_product.hpp"
  48. #include "circuit_time2.hpp"
  49. // sans mydouble.h la cible « ../obj/bgn_check.o » a échouée erreur: conflicting declaration of C function ‘CheckDouble round(const CheckDouble&)’ --> ajouter mydouble.h devant le extern
  50. // sans extern "C" la cible « bgn » a échouée référence indéfinie vers « fpe_iszero(fpe_struct const*) »
  51. // macro pour gengetopt
  52. #define DEV 0
  53. #define USR 1
  54. #define MINMAJ 0
  55. #define CHIFFREMENT 1
  56. #define ADDITIONL1 2
  57. #define ADDITIONL2 3
  58. #define ADDITIONL3 4
  59. #define ADDITIONL4 5
  60. #define MULTIPLICATIONL1 6
  61. #define MULTIPLICATIONL1L2 7
  62. #define MULTIPLICATIONL2 8
  63. #define SIZE 9
  64. #define TIME 10
  65. #define MINMAJ2 11
  66. #define MINMAJ3 12
  67. #define DEMO 13
  68. #define IP 14
  69. #define SCALAR_PRODUCT 15
  70. #define TIME2 16
  71. // BGN-Freeman-CF
  72. // en théorie pk:=(p, G, H, G_T, e, g, h, (g^a1,g^b1), (h^a2,h^b2))
  73. // en pratique pk:=(p, g, h, a1, b1, a2, b2)
  74. // en sécurité 128 : p et r sont des entiers de 256 bits
  75. // on peut fixer p,r et t avec le x0 utilisé par Schwabe
  76. // E(Fp)={(x,y) : y^2 = x^3 + 5, x,y in Fp}
  77. // g est un générateur de E(Fp) d'ordre p+1-t
  78. // E[r]={(x,y): y^2 = x^3 + 5, x,y in Fp^12, r*(x,y)=0}
  79. // Ker(Pi-p)={(x,y): (x^p,y^p)=p*(x,y), x,y in Fp^12}
  80. // h est un générateur de E[r] inter Ker (Pi -p)
  81. // a1d1-b1c1 = a2d2-b2c2 = 1 choisis au hasard dans Fp
  82. // générer trois éléments non tous nuls (not all zero) au hasard détermine un unique quatrième élément
  83. #endif /* __BGN_HPP */