if (unlikely(ctx->finished))
return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+ if (unlikely(dst_size < src_size))
+ return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);
+
gcm_ghash(ctx, src, src_size);
ctx->gcm.len.u[1] += src_size;
uint8_t tag[MAX_HASH_SIZE];
size_t s = 0;
- if (encr_size < tag_size)
+ if (unlikely(encr_size < tag_size))
return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED);
aes_gcm_setiv(ctx, nonce, nonce_size);
encr_size -= tag_size;
+ if (unlikely(plain_size < encr_size))
+ return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);
+
if (encr_size >= 96) {
s = aesni_gcm_decrypt(encr, plain, encr_size, ALIGN16(&ctx->expanded_key),
ctx->gcm.Yi.c, ctx->gcm.Xi.u);