123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #include "../Decryptor/Decryptor_u.h"
- #include "sgx_eid.h"
- #include "sgx_urts.h"
- #define __STDC_FORMAT_MACROS
- #include <inttypes.h>
- #include "dhmsgs.pb.h"
- #include "protobufSgxLATransformsInitiator.h"
- #include <stdio.h>
- int generate_protobuf_dh_msg1(uint32_t own_enclave_id, protobuf_sgx_dh_msg1_t& protobuf_msg1, uint32_t* session_id)
- {
- sgx_dh_msg1_t dh_msg1; //Diffie-Hellman Message 1
- memset(&dh_msg1, 0, sizeof(sgx_dh_msg1_t));
- uint32_t ret_status;
- Decryptor_session_request(own_enclave_id, &ret_status, &dh_msg1, session_id); // TODO: Check Return status
- if(ret_status != SGX_SUCCESS)
- {
- printf("session request returned failure\n"); fflush(stdout); return 0xffffffff;
- }
- encode_msg1_to_protobuf(protobuf_msg1, &dh_msg1);
- print_initialized_msg1(protobuf_msg1, &dh_msg1);
- printf("Done initialization with session id 0x%x", *session_id);
- fflush(stdout);
- return 0;
- }
- 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)
- {
- uint32_t ret_status;
- sgx_dh_msg2_t dh_msg2; //Diffie-Hellman Message 2
- sgx_dh_msg3_t dh_msg3; //Diffie-Hellman Message 3
- sgx_key_128bit_t dh_aek; // Session Key
- memset(&dh_aek,0, sizeof(sgx_key_128bit_t));
- memset(&dh_msg2, 0, sizeof(sgx_dh_msg2_t));
- memset(&dh_msg3, 0, sizeof(sgx_dh_msg3_t));
- if(decode_msg2_from_protobuf(protobuf_msg2, &dh_msg2)!=0)
- return -1;
- printf("Done reading and decoding msg2\n");
- // process msg2 and generate msg3
- Decryptor_exchange_report(own_enclave_id, &ret_status, &dh_msg2, &dh_msg3, session_id, read);
- if(ret_status!=SGX_SUCCESS)
- {
- fflush(stdout);
- printf("exchange report failed:%x\n", ret_status);
- fflush(stdout);
- return -1;
- }
- // convert msg3 sgx_dh_msg3_t object to a protobuf msg3 object.
- encode_msg3_to_protobuf(protobuf_msg3, &dh_msg3);
- printf("about to write msg3\n");
- fflush(stdout);
- return 0;
- }
- int decrypt_wrapper(uint32_t own_enclave_id, uint8_t* ciphertext, uint32_t ciphertext_len, uint8_t* tag , uint8_t* plaintext)
- {
- uint32_t ret_status;
- printf("received tag: \n"); fflush(stdout);
- uint32_t count;
- for(count=0;count<16;count++)
- printf("0x%02x ",tag[count]);
- printf("\n"); fflush(stdout);
- for(count=0;count<ciphertext_len;count++)
- printf("0x%02x ",ciphertext[count]);
- printf("\n"); fflush(stdout);
- Decryptor_decrypt(own_enclave_id, &ret_status, ciphertext, ciphertext_len, tag, plaintext);
- if(ret_status!=0)
- {
- printf("encryption/decryption failed\n"); fflush(stdout);
- // return ret_status;
- }
- // else {
- printf("received ciphertext: \n"); fflush(stdout);
- // uint32_t count;
- for(count=0;count<32;count++)
- printf("0x%x ",ciphertext[count]);
- printf("\n"); fflush(stdout);
- printf("received plaintext: \n"); fflush(stdout);
- for(count=0;count<32;count++)
- printf("0x%x ",plaintext[count]);
- printf("\n"); fflush(stdout);
- // }
- return ret_status;
- }
- int encrypt_wrapper(uint32_t own_enclave_id, uint8_t* ciphertext, uint32_t ciphertext_len, uint8_t* tag , uint8_t* plaintext)
- {
- uint32_t ret_status;
- printf("received tag: \n"); fflush(stdout);
- uint32_t count;
- for(count=0;count<16;count++)
- printf("0x%02x ",tag[count]);
- printf("\n"); fflush(stdout);
- for(count=0;count<ciphertext_len;count++)
- printf("0x%02x ",ciphertext[count]);
- printf("\n"); fflush(stdout);
- Decryptor_encrypt(own_enclave_id, &ret_status, ciphertext, ciphertext_len, tag, plaintext);
- if(ret_status!=0)
- {
- printf("encryption/decryption failed\n"); fflush(stdout);
- // return ret_status;
- }
- // else {
- printf("received ciphertext: \n"); fflush(stdout);
- // uint32_t count;
- for(count=0;count<32;count++)
- printf("0x%x ",ciphertext[count]);
- printf("\n"); fflush(stdout);
- printf("received plaintext: \n"); fflush(stdout);
- for(count=0;count<32;count++)
- printf("0x%x ",plaintext[count]);
- printf("\n"); fflush(stdout);
- // }
- return ret_status;
- }
|