protobufLAInitiator.cpp 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "../Decryptor/Decryptor_u.h"
  2. #include "sgx_eid.h"
  3. #include "sgx_urts.h"
  4. #define __STDC_FORMAT_MACROS
  5. #include <inttypes.h>
  6. #include "dhmsgs.pb.h"
  7. #include "protobufSgxLATransformsInitiator.h"
  8. #include <stdio.h>
  9. int generate_protobuf_dh_msg1(uint32_t own_enclave_id, protobuf_sgx_dh_msg1_t& protobuf_msg1, uint32_t* session_id)
  10. {
  11. sgx_dh_msg1_t dh_msg1; //Diffie-Hellman Message 1
  12. memset(&dh_msg1, 0, sizeof(sgx_dh_msg1_t));
  13. uint32_t ret_status;
  14. Decryptor_session_request(own_enclave_id, &ret_status, &dh_msg1, session_id); // TODO: Check Return status
  15. if(ret_status != SGX_SUCCESS)
  16. {
  17. printf("session request returned failure\n"); fflush(stdout); return 0xffffffff;
  18. }
  19. encode_msg1_to_protobuf(protobuf_msg1, &dh_msg1);
  20. print_initialized_msg1(protobuf_msg1, &dh_msg1);
  21. printf("Done initialization with session id 0x%x", *session_id);
  22. fflush(stdout);
  23. return 0;
  24. }
  25. int process_protobuf_dh_msg2_generate_protobuf_dh_msg3(uint32_t own_enclave_id, protobuf_sgx_dh_msg2_t& protobuf_msg2, protobuf_sgx_dh_msg3_t& protobuf_msg3, uint32_t* session_id, uint8_t* read)
  26. {
  27. uint32_t ret_status;
  28. sgx_dh_msg2_t dh_msg2; //Diffie-Hellman Message 2
  29. sgx_dh_msg3_t dh_msg3; //Diffie-Hellman Message 3
  30. sgx_key_128bit_t dh_aek; // Session Key
  31. memset(&dh_aek,0, sizeof(sgx_key_128bit_t));
  32. memset(&dh_msg2, 0, sizeof(sgx_dh_msg2_t));
  33. memset(&dh_msg3, 0, sizeof(sgx_dh_msg3_t));
  34. if(decode_msg2_from_protobuf(protobuf_msg2, &dh_msg2)!=0)
  35. return -1;
  36. printf("Done reading and decoding msg2\n");
  37. // process msg2 and generate msg3
  38. Decryptor_exchange_report(own_enclave_id, &ret_status, &dh_msg2, &dh_msg3, session_id, read);
  39. if(ret_status!=SGX_SUCCESS)
  40. {
  41. fflush(stdout);
  42. printf("exchange report failed:%x\n", ret_status);
  43. fflush(stdout);
  44. return -1;
  45. }
  46. // convert msg3 sgx_dh_msg3_t object to a protobuf msg3 object.
  47. encode_msg3_to_protobuf(protobuf_msg3, &dh_msg3);
  48. printf("about to write msg3\n");
  49. fflush(stdout);
  50. return 0;
  51. }
  52. int decrypt_wrapper(uint32_t own_enclave_id, uint8_t* ciphertext, uint32_t ciphertext_len, uint8_t* tag , uint8_t* plaintext)
  53. {
  54. uint32_t ret_status;
  55. printf("received tag: \n"); fflush(stdout);
  56. uint32_t count;
  57. for(count=0;count<16;count++)
  58. printf("0x%02x ",tag[count]);
  59. printf("\n"); fflush(stdout);
  60. for(count=0;count<ciphertext_len;count++)
  61. printf("0x%02x ",ciphertext[count]);
  62. printf("\n"); fflush(stdout);
  63. Decryptor_decrypt(own_enclave_id, &ret_status, ciphertext, ciphertext_len, tag, plaintext);
  64. if(ret_status!=0)
  65. {
  66. printf("encryption/decryption failed\n"); fflush(stdout);
  67. // return ret_status;
  68. }
  69. // else {
  70. printf("received ciphertext: \n"); fflush(stdout);
  71. // uint32_t count;
  72. for(count=0;count<32;count++)
  73. printf("0x%x ",ciphertext[count]);
  74. printf("\n"); fflush(stdout);
  75. printf("received plaintext: \n"); fflush(stdout);
  76. for(count=0;count<32;count++)
  77. printf("0x%x ",plaintext[count]);
  78. printf("\n"); fflush(stdout);
  79. // }
  80. return ret_status;
  81. }