diff options
author | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2014-01-06 11:28:20 +0000 |
---|---|---|
committer | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2014-01-06 11:28:20 +0000 |
commit | f6bf6285ef5405c82e71fb05a3a3a81f53c65107 (patch) | |
tree | 0e2e86367a4fa53624b07f8ab854175f06c63b42 | |
parent | 5a3ba6c19bb44cf11d124c7e75a1a9106b39e981 (diff) |
Do EEA2 deciphering in-place, from Pascal
svn path=/trunk/; revision=54615
-rw-r--r-- | epan/dissectors/packet-pdcp-lte.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/epan/dissectors/packet-pdcp-lte.c b/epan/dissectors/packet-pdcp-lte.c index 5777ae2609..6e799d6dcb 100644 --- a/epan/dissectors/packet-pdcp-lte.c +++ b/epan/dissectors/packet-pdcp-lte.c @@ -1339,7 +1339,6 @@ static tvbuff_t *decipher_payload(tvbuff_t *tvb, packet_info *pinfo, int *offset unsigned char ctr_block[16]; gcry_cipher_hd_t cypher_hd; int gcrypt_err; - guint8* encrypted_data; guint8* decrypted_data; gint payload_length; tvbuff_t *decrypted_tvb; @@ -1391,19 +1390,15 @@ static tvbuff_t *decipher_payload(tvbuff_t *tvb, packet_info *pinfo, int *offset /* Extract the encrypted data into a buffer */ payload_length = tvb_length_remaining(tvb, *offset); - encrypted_data = (guint8 *)g_malloc0(payload_length); - tvb_memcpy(tvb, encrypted_data, *offset, payload_length); - - /* Allocate memory to receive decrypted payload */ decrypted_data = (guint8 *)g_malloc0(payload_length); + tvb_memcpy(tvb, decrypted_data, *offset, payload_length); /* Decrypt the actual data */ gcrypt_err = gcry_cipher_decrypt(cypher_hd, decrypted_data, payload_length, - encrypted_data, payload_length); + NULL, 0); if (gcrypt_err != 0) { gcry_cipher_close(cypher_hd); - g_free(encrypted_data); g_free(decrypted_data); return tvb; } @@ -1416,9 +1411,6 @@ static tvbuff_t *decipher_payload(tvbuff_t *tvb, packet_info *pinfo, int *offset tvb_set_free_cb(decrypted_tvb, g_free); add_new_data_source(pinfo, decrypted_tvb, "Deciphered Payload"); - /* Free temp buffer */ - g_free(encrypted_data); - /* Return deciphered data, i.e. beginning of new tvb */ *offset = 0; *deciphered = TRUE; |