libaacs | branch: master | npzacs <npz...@gmail.com> | Mon Jan  5 15:22:33 2015 
+0200| [5c95d0dd58ae004b8a9dd902fd5ca8b2318ab12b] | committer: npzacs

Factorize

> http://git.videolan.org/gitweb.cgi/libaacs.git/?a=commit;h=5c95d0dd58ae004b8a9dd902fd5ca8b2318ab12b
---

 src/libaacs/aacs.c |   68 +++++++++++++++++++---------------------------------
 1 file changed, 25 insertions(+), 43 deletions(-)

diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c
index 1fcacd0..2307155 100644
--- a/src/libaacs/aacs.c
+++ b/src/libaacs/aacs.c
@@ -366,6 +366,18 @@ static int _calc_pk_mk(MKB *mkb, dk_list *dkl, uint8_t *mk)
     return AACS_ERROR_NO_DK;
 }
 
+static AACS_FILE_H *_file_open(AACS *aacs, const char *file)
+{
+    AACS_FILE_H *fp;
+    char        *f_name;
+
+    f_name = str_printf("%s/%s", aacs->path, file);
+    fp = file_open(f_name, "rb");
+    X_FREE(f_name);
+
+    return fp;
+}
+
 static int _calc_mk(AACS *aacs, uint8_t *mk, pk_list *pkl, dk_list *dkl)
 {
     int a, num_uvs = 0;
@@ -615,38 +627,6 @@ static void _read_uks_map(AACS *aacs, AACS_FILE_H *fp)
     }
 }
 
-static AACS_FILE_H *_open_unit_key_file(const char *path)
-{
-    AACS_FILE_H *fp;
-    char        *f_name;
-
-    f_name = str_printf("%s/AACS/Unit_Key_RO.inf", path);
-    fp = file_open(f_name, "rb");
-
-    if (!fp) {
-        DEBUG(DBG_AACS | DBG_CRIT, "Error opening unit key file %s\n", f_name);
-    }
-
-    X_FREE(f_name);
-    return fp;
-}
-
-static AACS_FILE_H *_open_content_certificate_file(const char *path)
-{
-    AACS_FILE_H *fp;
-    char        *f_name;
-
-    f_name = str_printf("%s/AACS/Content000.cer", path);
-    fp = file_open(f_name, "rb");
-
-    if (!fp) {
-        DEBUG(DBG_AACS | DBG_CRIT, "Error opening content certificate file 
%s\n", f_name);
-    }
-
-    X_FREE(f_name);
-    return fp;
-}
-
 /* Function that collects keys from keydb config entry */
 static void _find_config_entry(AACS *aacs, title_entry_list *ce,
                                uint8_t *mk, uint8_t *vuk)
@@ -739,8 +719,9 @@ static int _calc_uks(AACS *aacs, config_file *cf)
 
     DEBUG(DBG_AACS, "Calculate CPS unit keys...\n");
 
-    fp = _open_unit_key_file(aacs->path);
+    fp = _file_open(aacs, "AACS/Unit_Key_RO.inf");
     if (!fp) {
+        DEBUG(DBG_AACS | DBG_CRIT, "Error opening unit key file 
(AACS/Unit_Key_RO.inf)\n");
         return AACS_ERROR_CORRUPTED_DISC;
     }
 
@@ -796,7 +777,7 @@ static int _calc_uks(AACS *aacs, config_file *cf)
     return AACS_ERROR_CORRUPTED_DISC;
 }
 
-static int _calc_title_hash(const char *path, uint8_t *title_hash)
+static int _calc_title_hash(AACS *aacs)
 {
     AACS_FILE_H *fp = NULL;
     uint8_t *ukf_buf;
@@ -804,8 +785,9 @@ static int _calc_title_hash(const char *path, uint8_t 
*title_hash)
     int64_t  f_size;
     int      result = AACS_SUCCESS;
 
-    fp = _open_unit_key_file(path);
+    fp = _file_open(aacs, "AACS/Unit_Key_RO.inf");
     if (!fp) {
+        DEBUG(DBG_AACS | DBG_CRIT, "Error opening unit key file 
(AACS/Unit_Key_RO.inf)\n");
         return AACS_ERROR_CORRUPTED_DISC;
     }
 
@@ -816,12 +798,12 @@ static int _calc_title_hash(const char *path, uint8_t 
*title_hash)
     ukf_buf = malloc(f_size);
 
     if ((file_read(fp, ukf_buf, f_size)) == f_size) {
-        crypto_aacs_title_hash(ukf_buf, f_size, title_hash);
-        DEBUG(DBG_AACS, "Disc ID: %s\n", print_hex(str, title_hash, 20));
+        crypto_aacs_title_hash(ukf_buf, f_size, aacs->disc_id);
+        DEBUG(DBG_AACS, "Disc ID: %s\n", print_hex(str, aacs->disc_id, 20));
 
     } else {
         result = AACS_ERROR_CORRUPTED_DISC;
-        DEBUG(DBG_AACS | DBG_CRIT, "Failed to read %lu bytes from unit key 
file %s/AACS/Unit_Key_RO.inf", (unsigned long)f_size, path);
+        DEBUG(DBG_AACS | DBG_CRIT, "Failed to read %lu bytes from unit key 
file (AACS/Unit_Key_RO.inf)", (unsigned long)f_size);
     }
 
     file_close(fp);
@@ -830,15 +812,15 @@ static int _calc_title_hash(const char *path, uint8_t 
*title_hash)
     return result;
 }
 
-static int _get_bus_encryption_enabled(const char *path)
+static int _get_bus_encryption_enabled(AACS *aacs)
 {
     AACS_FILE_H *fp = NULL;
     uint8_t buf[2];
     int bee = 0;
 
-    fp = _open_content_certificate_file(path);
+    fp = _file_open(aacs, "AACS/Content000.cer");
     if (!fp) {
-        DEBUG(DBG_AACS | DBG_CRIT, "Unable to open content certificate\n");
+        DEBUG(DBG_AACS | DBG_CRIT, "Unable to open content certificate 
(AACS/Content000.cer)\n");
         return 0;
     }
 
@@ -989,7 +971,7 @@ AACS *aacs_open2(const char *path, const char 
*configfile_path, int *error_code)
 
     aacs->path = str_printf("%s", path);
 
-    *error_code = _calc_title_hash(path, aacs->disc_id);
+    *error_code = _calc_title_hash(aacs);
     if (*error_code != AACS_SUCCESS) {
         aacs_close(aacs);
         return NULL;
@@ -1003,7 +985,7 @@ AACS *aacs_open2(const char *path, const char 
*configfile_path, int *error_code)
         DEBUG(DBG_AACS, "Failed to initialize AACS!\n");
     }
 
-    aacs->bee = _get_bus_encryption_enabled(path);
+    aacs->bee = _get_bus_encryption_enabled(aacs);
     aacs->bec = _get_bus_encryption_capable(path);
 
     if (*error_code == AACS_SUCCESS && aacs->bee && aacs->bec) {

_______________________________________________
libaacs-devel mailing list
libaacs-devel@videolan.org
https://mailman.videolan.org/listinfo/libaacs-devel

Reply via email to