mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-30 05:50:53 +03:00
38 lines
1.1 KiB
C
38 lines
1.1 KiB
C
|
#include "aes-gcm.h"
|
||
|
|
||
|
int aes_gcm_encrypt(unsigned char* output, const unsigned char* input, size_t input_length, const unsigned char* key, const size_t key_len, const unsigned char * iv, const size_t iv_len) {
|
||
|
|
||
|
int ret = 0; // our return value
|
||
|
gcm_context ctx; // includes the AES context structure
|
||
|
|
||
|
size_t tag_len = 0;
|
||
|
unsigned char * tag_buf = NULL;
|
||
|
|
||
|
gcm_setkey(&ctx, key, (const uint)key_len);
|
||
|
|
||
|
ret = gcm_crypt_and_tag(&ctx, ENCRYPT, iv, iv_len, NULL, 0,
|
||
|
input, output, input_length, tag_buf, tag_len);
|
||
|
|
||
|
gcm_zero_ctx(&ctx);
|
||
|
|
||
|
return(ret);
|
||
|
}
|
||
|
|
||
|
int aes_gcm_decrypt(unsigned char* output, const unsigned char* input, size_t input_length, const unsigned char* key, const size_t key_len, const unsigned char * iv, const size_t iv_len) {
|
||
|
|
||
|
int ret = 0; // our return value
|
||
|
gcm_context ctx; // includes the AES context structure
|
||
|
|
||
|
size_t tag_len = 0;
|
||
|
unsigned char * tag_buf = NULL;
|
||
|
|
||
|
gcm_setkey(&ctx, key, (const uint)key_len);
|
||
|
|
||
|
ret = gcm_crypt_and_tag(&ctx, DECRYPT, iv, iv_len, NULL, 0,
|
||
|
input, output, input_length, tag_buf, tag_len);
|
||
|
|
||
|
gcm_zero_ctx(&ctx);
|
||
|
|
||
|
return(ret);
|
||
|
|
||
|
}
|