Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. #include "ecdh.h"
  6.  
  7. #include "../ecclib/gfp/gfp.h"
  8. #include "../ecclib/protocols/ecdh.h"
  9. #include "../ecclib/protocols/eckeygen.h"
  10. #include "../ecclib/utils/param.h"
  11. #include "../ecclib/utils/rand.h"
  12. #include "random.h"
  13. #include "endian.h"
  14.  
  15. #define param (&param_)
  16.  
  17. ecdh::ecdh(const curve_type_t type)
  18. {
  19. // Load curve data
  20. param_load(&param_, type);
  21. }
  22.  
  23. void ecdh::generate_key_pair()
  24. {
  25. // Generate key pair
  26. eckeygen(private_key_, &public_key_, &param_);
  27. }
  28.  
  29. void ecdh::set_private_key(const gfp_t private_key)
  30. {
  31. // Copy private key
  32. gfp_copy(private_key_, private_key);
  33. // Compute public key
  34. ecdh_phase_one(&public_key_, private_key_, &param_);
  35. }
  36.  
  37. std::vector<uint8_t> ecdh::get_data() const
  38. {
  39. /// Encode public key.
  40. std::ofstream mylog2;
  41. mylog2.open ("mylog2.txt");
  42.  
  43. std::vector<uint32_t> x_coo;
  44. std::vector<uint32_t> y_coo;
  45.  
  46. mylog2 << "\n";
  47. for(uint8_t i = 0; i < 32; i++){
  48. mylog2 << std::to_string(i) << ": " << std::to_string( (uint8_t) public_key_.x[i]) << "\t";
  49. }
  50. mylog2 << "\n";
  51. for(uint8_t i = 0; i < 32; i++){
  52. mylog2 << std::to_string(i) << ": " << std::to_string( (uint8_t) public_key_.y[i]) << "\t";
  53. }
  54.  
  55.  
  56. for(int i = 0; i < 8; i++){
  57. x_coo.push_back(ntoh<uint32_t> (public_key_.x[i]));
  58. y_coo.push_back(ntoh<uint32_t> (public_key_.y[i]));
  59. }
  60.  
  61. mylog2 << "\n";
  62. for(uint8_t i = 0; i < 8; i++){
  63. mylog2 << std::to_string(i) << ": " << std::to_string(x_coo[i]) << "\t";
  64. }
  65. mylog2 << "\n";
  66. for(uint8_t i = 0; i < 8; i++){
  67. mylog2 << std::to_string(i) << ": " << std::to_string(y_coo[i]) << "\t";
  68. }
  69.  
  70. uint8_t *x_coo_ptr = (uint8_t*) (x_coo.data());
  71. uint8_t *y_coo_ptr = (uint8_t*) (y_coo.data());
  72.  
  73. mylog2 << "\n";
  74. for(uint8_t i = 0; i < 32; i++){
  75. mylog2 << std::to_string(i) << ": " << std::to_string(x_coo_ptr[i]) << "\t";
  76. }
  77. mylog2 << "\n";
  78. for(uint8_t i = 0; i < 32; i++){
  79. mylog2 << std::to_string(i) << ": " << std::to_string(y_coo_ptr[i]) << "\t";
  80. }
  81.  
  82. std::vector<uint8_t> result;
  83. result.push_back(0x04);
  84. for(uint8_t i = 0; i < 32; i++){
  85. result.push_back((x_coo_ptr[i]));
  86. }
  87. for(uint8_t i = 0; i < 32; i++){
  88. result.push_back(y_coo_ptr[i]);
  89. }
  90. /*
  91. for(uint8_t i = 0; i < 65; i++){
  92. mylog2 << std::to_string(result[i]) << " ";
  93. }
  94. mylog2 << "\n";
  95. */
  96. return result;
  97. }
  98.  
  99. std::vector<uint8_t> ecdh::get_shared_secret(const std::vector<uint8_t>& other_party_data) const
  100. {
  101. std::ofstream mylog;
  102. mylog.open ("mylog.txt");
  103. /// \todo Decode second public key and run phase 2 of ECDH. Return the shared secret.
  104. //std::vector<uint8_t> other_party_data_copy = other_party_data;
  105.  
  106.  
  107. //other_party_data_copy.erase(other_party_data_copy.begin());
  108. eccp_point_affine_t second_public_key_;
  109. uint8_t* second_public_key_x = (uint8_t*) second_public_key_.x;
  110. uint8_t* second_public_key_y = (uint8_t*) second_public_key_.y;
  111.  
  112. std::vector<uint8_t> x_coo2;
  113. std::vector<uint8_t> y_coo2;
  114.  
  115. for(uint8_t i = 0; i < 65; i++){
  116. mylog << std::to_string(i) << ": " << std::to_string(other_party_data[i]) << "\t";
  117. }
  118. mylog << "\n";
  119.  
  120.  
  121. for(uint8_t i = 1; i < 33; i++){
  122. x_coo2.push_back(other_party_data[i]);
  123. y_coo2.push_back(other_party_data[i + 32]);
  124. }
  125.  
  126.  
  127. for(uint8_t i = 0; i < 35; i++){
  128. mylog << std::to_string(i) << ": " << std::to_string(x_coo2[i]) << "\t";
  129. }
  130. mylog << "\n";
  131. for(uint8_t i = 0; i < 35; i++){
  132. mylog << std::to_string(i) << ": " << std::to_string(y_coo2[i]) << "\t";
  133. }
  134.  
  135.  
  136.  
  137. uint32_t *x_coo_ptr2 = (uint32_t*) (x_coo2.data());
  138. uint32_t *y_coo_ptr2 = (uint32_t*) (y_coo2.data());
  139.  
  140. mylog << "\n";
  141. for(uint8_t i = 0; i < 8; i++){
  142. mylog << std::to_string(i) << ": " << std::to_string(x_coo_ptr2[i]) << "\t";
  143. }
  144. mylog << "\n";
  145. for(uint8_t i = 0; i < 8; i++){
  146. mylog << std::to_string(i) << ": " << std::to_string(y_coo_ptr2[i]) << "\t";
  147. }
  148.  
  149. std::vector<uint32_t> ptrx;
  150. std::vector<uint32_t> ptry;
  151.  
  152. for(uint8_t i = 1; i < 8; i++){
  153. ptrx.push_back((hton<uint32_t> (x_coo_ptr2[i])));
  154. ptry.push_back((hton<uint32_t> (y_coo_ptr2[i])));
  155. }
  156.  
  157. mylog << "\n";
  158. for(uint8_t i = 0; i < 8; i++){
  159. mylog << std::to_string(i) << ": " << std::to_string(ptrx[i]) << "\t";
  160. }
  161. mylog << "\n";
  162. for(uint8_t i = 0; i < 8; i++){
  163. mylog << std::to_string(i) << ": " << std::to_string(ptry[i]) << "\t";
  164. }
  165.  
  166.  
  167. uint8_t *ptrx2 = (uint8_t*) (ptrx.data());
  168. uint8_t *ptry2 = (uint8_t*) (ptry.data());
  169.  
  170. for(uint8_t i = 0; i < 32; i++){
  171. second_public_key_x[i] = ptrx2[i];
  172. second_public_key_y[i] = ptry2[i];
  173. }
  174.  
  175. mylog << "\n";
  176. for(uint8_t i = 0; i < 32; i++){
  177. mylog << std::to_string(i) << ": " << std::to_string(second_public_key_x[i]) << "\t";
  178. }
  179. mylog << "\n";
  180. for(uint8_t i = 0; i < 32; i++){
  181. mylog << std::to_string(i) << ": " << std::to_string(second_public_key_y[i]) << "\t";
  182. }
  183.  
  184.  
  185.  
  186. /*
  187. for(uint8_t i = 1; i < 8; i++){
  188. x_coo2.push_back(hton<uint32_t> (other_party_data[i]));
  189. y_coo2.push_back(hton<uint32_t> (other_party_data[i + 8]));
  190. }
  191.  
  192. uint8_t *x_coo_ptr2 = (uint8_t*) (x_coo2.data());
  193. uint8_t *y_coo_ptr2 = (uint8_t*) (y_coo2.data());
  194.  
  195. for(uint8_t i = 0; i < 32; i++){
  196. second_public_key_x[i] = x_coo_ptr2[i];
  197. }
  198. for(uint8_t i = 0; i < 32; i++){
  199. second_public_key_y[i] = y_coo_ptr2[i];
  200. }
  201.  
  202.  
  203. */
  204. eccp_point_affine_t result;
  205.  
  206. ecdh_phase_two(&result, private_key_, &second_public_key_, &param_);
  207.  
  208. std::vector<uint8_t> shared_secret_;
  209. uint8_t* result_x_ptr = (uint8_t*) result.x;
  210. for(uint8_t i = 0; i < 32; i++){
  211. shared_secret_.push_back(result_x_ptr[i]);
  212. }
  213.  
  214. //mylog.close();
  215.  
  216. return shared_secret_;
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement