in samplecode/crypto/app/app.c [230:316]
int aes_gcm_128(){
// AES-GCM-128 test case comes from
// http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf
// Test case 2
printf("[+] Starting aes-gcm-128 encrypt calculation\n");
uint8_t aes_gcm_plaintext[16] = {0};
uint8_t aes_gcm_key[16] = {0};
uint8_t aes_gcm_iv[12] = {0};
uint8_t aes_gcm_ciphertext[16] = {0};
uint8_t aes_gcm_mac[16] = {0};
sgx_status_t enclave_ret = SGX_SUCCESS;
sgx_status_t sgx_ret = SGX_SUCCESS;
printf("[+] aes-gcm-128 args prepared!\n");
printf("[+] aes-gcm-128 expected ciphertext: %s\n",
"0388dace60b6a392f328c2b971b2fe78");
sgx_ret = aes_gcm_128_encrypt(global_eid,
&enclave_ret,
aes_gcm_key,
aes_gcm_plaintext,
16,
aes_gcm_iv,
aes_gcm_ciphertext,
aes_gcm_mac);
printf("[+] aes-gcm-128 returned from enclave!\n");
if(sgx_ret != SGX_SUCCESS) {
print_error_message(sgx_ret);
return -1;
}
if(enclave_ret != SGX_SUCCESS) {
print_error_message(enclave_ret);
return -1;
}
printf("[+] aes-gcm-128 ciphertext is: ");
int i;
for(i = 0; i < 16; i ++) {
printf("%02x", aes_gcm_ciphertext[i]);
}
printf("\n");
printf("[+] aes-gcm-128 result mac is: ");
for(i = 0; i < 16; i ++) {
printf("%02x", aes_gcm_mac[i]);
}
printf("\n");
printf("[+] Starting aes-gcm-128 decrypt calculation\n");
printf("[+] aes-gcm-128 expected plaintext:");
for(i = 0; i < 16; i ++) {
printf("%02x", aes_gcm_plaintext[i]);
}
printf("\n");
uint8_t aes_gcm_decrypted_text[16] = {0};
sgx_ret = aes_gcm_128_decrypt(global_eid,
&enclave_ret,
aes_gcm_key,
aes_gcm_ciphertext,
16,
aes_gcm_iv,
aes_gcm_mac,
aes_gcm_decrypted_text);
if(sgx_ret != SGX_SUCCESS) {
print_error_message(sgx_ret);
return -1;
}
if(enclave_ret != SGX_SUCCESS) {
print_error_message(enclave_ret);
return -1;
}
printf("[+] aes-gcm-128 decrypted plaintext is: ");
for(i = 0; i < 16; i ++) {
printf("%02x", aes_gcm_decrypted_text[i]);
}
printf("\n");
printf("[+] aes-gcm-128 decrypt complete \n");
return 0;
}