aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Mathieson <martin.r.mathieson@googlemail.com>2014-01-06 11:28:20 +0000
committerMartin Mathieson <martin.r.mathieson@googlemail.com>2014-01-06 11:28:20 +0000
commitf6bf6285ef5405c82e71fb05a3a3a81f53c65107 (patch)
tree0e2e86367a4fa53624b07f8ab854175f06c63b42
parent5a3ba6c19bb44cf11d124c7e75a1a9106b39e981 (diff)
Do EEA2 deciphering in-place, from Pascal
svn path=/trunk/; revision=54615
-rw-r--r--epan/dissectors/packet-pdcp-lte.c12
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;