diff options
Diffstat (limited to 'src/omemo/omemo.c')
-rw-r--r-- | src/omemo/omemo.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index 66793085..98448a73 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -577,10 +577,20 @@ omemo_on_message_recv(const char *const from, uint32_t sid, return NULL; } + if (signal_buffer_len(plaintext_key) != AES128_GCM_KEY_LENGTH + AES128_GCM_TAG_LENGTH) { + log_error("OMEMO: invalid key length"); + signal_buffer_free(plaintext_key); + return NULL; + } + size_t plaintext_len = payload_len; unsigned char *plaintext = malloc(plaintext_len + 1); - res = aes128gcm_decrypt(plaintext, &plaintext_len, payload, payload_len, iv, signal_buffer_data(plaintext_key)); + res = aes128gcm_decrypt(plaintext, &plaintext_len, payload, payload_len, iv, + signal_buffer_data(plaintext_key), + signal_buffer_data(plaintext_key) + AES128_GCM_KEY_LENGTH); if (res != 0) { + log_error("OMEMO: cannot decrypt message: %s", gcry_strerror(res)); + signal_buffer_free(plaintext_key); free(plaintext); return NULL; } |