print_helpers.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "print_helpers.hpp"
  2. Fp12e::Fp12e(const fp12e_t& input)
  3. {
  4. fp12e_set(data, input);
  5. }
  6. Fp12e::Fp12e()
  7. {
  8. fp12e_setzero(data);
  9. }
  10. Fp6e::Fp6e(const fp6e_t& input)
  11. {
  12. fp6e_set(data, input);
  13. }
  14. Fp6e::Fp6e()
  15. {
  16. fp6e_setzero(data);
  17. }
  18. Fp2e::Fp2e(const fp2e_t& input)
  19. {
  20. fp2e_set(data, input);
  21. }
  22. Fp2e::Fp2e()
  23. {
  24. fp2e_setzero(data);
  25. }
  26. Fpe::Fpe(const fpe_t& input)
  27. {
  28. fpe_set(data, input);
  29. }
  30. Fpe::Fpe()
  31. {
  32. fpe_setzero(data);
  33. }
  34. std::ostream& operator<<(std::ostream& os, const Fp12e& output)
  35. {
  36. os << Fp6e(output.data->m_a) << Fp6e(output.data->m_b);
  37. return os;
  38. }
  39. std::istream& operator>>(std::istream& is, Fp12e& input)
  40. {
  41. Fp6e a, b;
  42. is >> a >> b;
  43. fp6e_set(input.data->m_a, a.data);
  44. fp6e_set(input.data->m_b, b.data);
  45. return is;
  46. }
  47. std::ostream& operator<<(std::ostream& os, const Fp6e& output)
  48. {
  49. os << Fp2e(output.data->m_a) << Fp2e(output.data->m_b) << Fp2e(output.data->m_c);
  50. return os;
  51. }
  52. std::istream& operator>>(std::istream& is, Fp6e& input)
  53. {
  54. Fp2e a, b, c;
  55. is >> a >> b >> c;
  56. fp2e_set(input.data->m_a, a.data);
  57. fp2e_set(input.data->m_b, b.data);
  58. fp2e_set(input.data->m_c, c.data);
  59. return is;
  60. }
  61. std::ostream& operator<<(std::ostream& os, const Fp2e& output)
  62. {
  63. fpe_t a, b;
  64. fp2e_to_2fpe(a, b, output.data);
  65. os << Fpe(a) << Fpe(b);
  66. return os;
  67. }
  68. std::istream& operator>>(std::istream& is, Fp2e& input)
  69. {
  70. Fpe a, b;
  71. is >> a >> b;
  72. _2fpe_to_fp2e(input.data, a.data, b.data);
  73. return is;
  74. }
  75. std::ostream& operator<<(std::ostream& os, const Fpe& output)
  76. {
  77. for (int i = 0; i < 12; i++)
  78. hex_double(os, output.data->v[i]);
  79. return os;
  80. }
  81. std::istream& operator>>(std::istream& is, Fpe& input)
  82. {
  83. for (int i = 0; i < 12; i++)
  84. hex_double(is, input.data->v[i]);
  85. return is;
  86. }
  87. std::ostream& hex_double(std::ostream& os, double d)
  88. {
  89. uint64_t u;
  90. memcpy(&u, &d, sizeof(d));
  91. os << std::hex << std::setw(16) << std::setfill('0');
  92. os << u;
  93. os << std::setfill(' ') << std::setw(0) << std::dec;
  94. return os;
  95. }
  96. std::istream& hex_double(std::istream& is, double& d)
  97. {
  98. char buffer[17];
  99. is.get(buffer, 17);
  100. uint64_t u = std::stoull(buffer, 0, 16);
  101. memcpy(&d, &u, sizeof(u));
  102. return is;
  103. }