]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
aes key stored using ev/odd cw
authorspdfrk1 <spdfrk1@github>
Tue, 8 Jul 2014 20:51:56 +0000 (22:51 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 6 Aug 2014 06:54:32 +0000 (08:54 +0200)
src/descrambler/libaesdec/libaesdec.c
src/descrambler/libaesdec/libaesdec_interface.c

index f0baa8d3bb4bbc44b3acf9a503c0378638c2fe56..bb6733e0a699be0fbd7eced156f3e9937a2e955b 100644 (file)
 
 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) {
index 0975dc3ce2e135edf90dee1db03f219f573d23d5..1631cdd98765caceff29f6d48fb469bfd7e834ba 100644 (file)
@@ -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) {