Line data Source code
1 : #ifndef GNUTLS_LIB_ACCELERATED_X86_AES_GCM_AEAD_H
2 : # define GNUTLS_LIB_ACCELERATED_X86_AES_GCM_AEAD_H
3 :
4 : static int
5 0 : aes_gcm_aead_encrypt(void *ctx,
6 : const void *nonce, size_t nonce_size,
7 : const void *auth, size_t auth_size,
8 : size_t tag_size,
9 : const void *plain, size_t plain_size,
10 : void *encr, size_t encr_size)
11 : {
12 : /* proper AEAD cipher */
13 0 : if (encr_size < plain_size + tag_size)
14 0 : return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);
15 :
16 0 : aes_gcm_setiv(ctx, nonce, nonce_size);
17 0 : aes_gcm_auth(ctx, auth, auth_size);
18 :
19 0 : aes_gcm_encrypt(ctx, plain, plain_size, encr, encr_size);
20 :
21 0 : aes_gcm_tag(ctx, ((uint8_t*)encr) + plain_size, tag_size);
22 0 : return 0;
23 : }
24 :
25 : static int
26 0 : aes_gcm_aead_decrypt(void *ctx,
27 : const void *nonce, size_t nonce_size,
28 : const void *auth, size_t auth_size,
29 : size_t tag_size,
30 : const void *encr, size_t encr_size,
31 : void *plain, size_t plain_size)
32 : {
33 0 : uint8_t tag[MAX_HASH_SIZE];
34 :
35 0 : if (encr_size < tag_size)
36 0 : return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED);
37 :
38 0 : aes_gcm_setiv(ctx, nonce, nonce_size);
39 0 : aes_gcm_auth(ctx, auth, auth_size);
40 :
41 0 : encr_size -= tag_size;
42 0 : aes_gcm_decrypt(ctx, encr, encr_size, plain, plain_size);
43 :
44 0 : aes_gcm_tag(ctx, tag, tag_size);
45 :
46 0 : if (gnutls_memcmp(((uint8_t*)encr)+encr_size, tag, tag_size) != 0)
47 0 : return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED);
48 :
49 : return 0;
50 : }
51 :
52 : #endif /* GNUTLS_LIB_ACCELERATED_X86_AES_GCM_AEAD_H */
|