systemSealerWrapper.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <stdlib.h>
  2. #include <unistd.h> // Read/write
  3. #include <string>
  4. #include <iostream>
  5. #include <vector>
  6. #include "SgxSealer.h"
  7. //class SealerWrapper {
  8. uint32_t init() {
  9. return initialize_pse_and_counter();
  10. }
  11. uint32_t seal_message_to_file(int fd, std::string& plaintext, uint32_t* actual_sealed_msg_length)
  12. {
  13. uint32_t ret; ssize_t bytes_written; std::string sgx_sealed_msg;
  14. ret = seal_message(plaintext, sgx_sealed_msg);
  15. if(ret!=0)
  16. return ret;
  17. bytes_written = write(fd, sgx_sealed_msg.c_str(), sgx_sealed_msg.length());
  18. if(bytes_written > 0)
  19. {
  20. fsync(fd);
  21. *actual_sealed_msg_length = bytes_written;
  22. return 0;
  23. }
  24. else
  25. return 0xFFFFFFFF;
  26. }
  27. // need to return a msg of the length returned by the get_encrypt_txt_len call.
  28. uint32_t unseal_message_from_file(int fd, std::string& plaintext, uint32_t* expected_sealed_msg_length)
  29. {
  30. uint32_t ret; ssize_t bytes_read; char* sgx_sealed_msg; std::string sgx_sealed_msg_str;
  31. sgx_sealed_msg = (char*) malloc(*expected_sealed_msg_length);
  32. lseek(fd, 0, SEEK_SET);
  33. bytes_read = read(fd, sgx_sealed_msg, *expected_sealed_msg_length);
  34. if(bytes_read <= 0)
  35. {
  36. free(sgx_sealed_msg);
  37. return 0xFFFFFFFF;
  38. }
  39. sgx_sealed_msg_str = std::string(sgx_sealed_msg, *expected_sealed_msg_length);
  40. free(sgx_sealed_msg);
  41. ret = unseal_and_verify_sealed_message(sgx_sealed_msg_str, plaintext);
  42. return ret;
  43. }
  44. //};