From 43aa20f8379bf71a4495cd8e08486eba2ef54572 Mon Sep 17 00:00:00 2001 From: spdfrk1 Date: Tue, 8 Jul 2014 22:51:56 +0200 Subject: [PATCH] aes key stored using ev/odd cw --- src/descrambler/libaesdec/libaesdec.c | 19 ++++++++++++------- .../libaesdec/libaesdec_interface.c | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/descrambler/libaesdec/libaesdec.c b/src/descrambler/libaesdec/libaesdec.c index f0baa8d3..bb6733e0 100644 --- a/src/descrambler/libaesdec/libaesdec.c +++ b/src/descrambler/libaesdec/libaesdec.c @@ -16,29 +16,34 @@ struct aes_keys_t { AES_KEY even; - AES_KEY odd; + AES_KEY odd; // Reserved for future use }; +unsigned char * keybuffer; + +// Even and Odd cw represent one full 128-bit AES key void aes_set_even_control_word(void *keys, const unsigned char *pk) { - //AES_set_decrypt_key(pk, 128, &((struct aes_keys_t *) keys)->even); + memcpy(keybuffer, pk, 8); + AES_set_decrypt_key(keybuffer, 128, &((struct aes_keys_t *) keys)->even); } void aes_set_odd_control_word(void *keys, const unsigned char *pk) { - //AES_set_decrypt_key(pk, 128, &((struct aes_keys_t *) keys)->odd); + memcpy(keybuffer + 8, pk, 8); + AES_set_decrypt_key(keybuffer, 128, &((struct aes_keys_t *) keys)->even); } //-----set control words void aes_set_control_words(void *keys, const unsigned char *ev, const unsigned char *od) { - unsigned char key[16]; - memcpy(key, ev, 8); - memcpy(key + 8, od, 8); - AES_set_decrypt_key(key, 128, &((struct aes_keys_t *) keys)->even); + memcpy(keybuffer, ev, 8); + memcpy(keybuffer + 8, od, 8); + AES_set_decrypt_key(keybuffer, 128, &((struct aes_keys_t *) keys)->even); } //-----key structure void *aes_get_key_struct(void) { + keybuffer = calloc(16, 1); struct aes_keys_t *keys = (struct aes_keys_t *) malloc( sizeof(struct aes_keys_t)); if (keys) { diff --git a/src/descrambler/libaesdec/libaesdec_interface.c b/src/descrambler/libaesdec/libaesdec_interface.c index 0975dc3c..1631cdd9 100644 --- a/src/descrambler/libaesdec/libaesdec_interface.c +++ b/src/descrambler/libaesdec/libaesdec_interface.c @@ -42,7 +42,7 @@ void set_even_control_word(void *keys, const unsigned char *even) { } void set_odd_control_word(void *keys, const unsigned char *odd) { - aes_set_even_control_word(keys, odd); + aes_set_odd_control_word(keys, odd); } int decrypt_packets(void *keys, unsigned char **cluster) {