LA.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // Created by miti on 2020-01-01.
  3. //
  4. #include "LA.h"
  5. #include <stdio.h>
  6. #include "Decryptor_u.h"
  7. #include "sgx_eid.h"
  8. #include "sgx_urts.h"
  9. #define __STDC_FORMAT_MACROS
  10. #include <inttypes.h>
  11. #include "ProtobufLAMessages.pb.h"
  12. #include "Transforms.h"
  13. uint32_t LA::generate_protobuf_dh_msg1(protobuf_sgx_dh_msg1_t& protobuf_msg1)
  14. {
  15. sgx_dh_msg1_t dh_msg1; //Diffie-Hellman Message 1
  16. memset(&dh_msg1, 0, sizeof(sgx_dh_msg1_t));
  17. uint32_t ret_status;
  18. Decryptor_session_request_wrapper(enclave_id, &ret_status, &dh_msg1);
  19. if(ret_status != SGX_SUCCESS)
  20. return 0xffffffff;
  21. Transforms::encode_msg1_to_protobuf(protobuf_msg1, &dh_msg1);
  22. printf("Generated the following Msg1: ------------- \n"); fflush(stdout);
  23. Transforms::print_initialized_msg1(protobuf_msg1);
  24. return 0;
  25. }
  26. uint32_t LA::process_protobuf_dh_msg2_generate_protobuf_dh_msg3(protobuf_sgx_dh_msg2_t& protobuf_msg2, protobuf_sgx_dh_msg3_t& protobuf_msg3)
  27. {
  28. uint32_t ret_status;
  29. sgx_dh_msg2_t dh_msg2; //Diffie-Hellman Message 2
  30. sgx_dh_msg3_t dh_msg3; //Diffie-Hellman Message 3
  31. sgx_key_128bit_t dh_aek; // Session Key
  32. memset(&dh_aek,0, sizeof(sgx_key_128bit_t));
  33. memset(&dh_msg2, 0, sizeof(sgx_dh_msg2_t));
  34. memset(&dh_msg3, 0, sizeof(sgx_dh_msg3_t));
  35. if(Transforms::decode_msg2_from_protobuf(protobuf_msg2, &dh_msg2)!=0)
  36. return -1;
  37. // process msg2 and generate msg3
  38. Decryptor_exchange_report_wrapper(enclave_id, &ret_status, &dh_msg2, &dh_msg3);
  39. if(ret_status!=SGX_SUCCESS)
  40. return 0x35;
  41. // convert msg3 sgx_dh_msg3_t object to a protobuf msg3 object.
  42. Transforms::encode_msg3_to_protobuf(protobuf_msg3, &dh_msg3);
  43. return 0;
  44. }
  45. uint32_t LA::conduct_la(int fd)
  46. {
  47. // declare msg1, msg2, msg3 protobuf objects
  48. protobuf_sgx_dh_msg1_t protobuf_msg1;
  49. protobuf_sgx_dh_msg2_t protobuf_msg2;
  50. protobuf_sgx_dh_msg3_t protobuf_msg3;
  51. uint32_t protobuf_sgx_ret;
  52. setbuf(stdout,NULL);
  53. protobufReaderWriter.set_fd(fd);
  54. protobuf_sgx_ret = generate_protobuf_dh_msg1(protobuf_msg1);
  55. if(protobuf_sgx_ret != 0)
  56. {
  57. printf("Error in generate_protobuf_dh_msg1: 0x%x", protobuf_sgx_ret); fflush(stdout); return protobuf_sgx_ret;
  58. }
  59. printf("Writing message 1\n"); fflush(stdout);
  60. if(protobufReaderWriter.write_msg(protobuf_msg1)!=0)
  61. return 0x1;
  62. printf("Reading message 2\n"); fflush(stdout);
  63. if(protobufReaderWriter.read_msg(protobuf_msg2)!=0)
  64. return 0x2;
  65. protobuf_sgx_ret = process_protobuf_dh_msg2_generate_protobuf_dh_msg3(protobuf_msg2, protobuf_msg3);
  66. if(protobuf_sgx_ret != 0)
  67. {
  68. printf("Error in process_protobuf_dh_msg2_generate_protobuf_dh_msg3: 0x%x", protobuf_sgx_ret);
  69. fflush(stdout);
  70. return protobuf_sgx_ret;
  71. }
  72. printf("Writing message 3\n"); fflush(stdout);
  73. if(protobufReaderWriter.write_msg(protobuf_msg3)!=0)
  74. return 0x3;
  75. return 0;
  76. }
  77. void LA::set_enclave_id(uint32_t given_eid)
  78. {
  79. enclave_id = given_eid;
  80. }