libaacs | branch: master | npzacs <npz...@gmail.com> | Sun Jun 30 20:06:41 2013 
+0300| [73c0b1c234fdbed72b6a07d9410806b0d6f50fb3] | committer: npzacs

Store VID in key cache.
VID is required for BD-J and BD+, VUK is not enough.

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

 src/libaacs/aacs.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c
index 76fd1e4..848a9ca 100644
--- a/src/libaacs/aacs.c
+++ b/src/libaacs/aacs.c
@@ -306,6 +306,8 @@ static int _read_vid(AACS *aacs, cert_list *hcl)
             case MMC_SUCCESS:
                 mkb_close(hrl_mkb);
                 mmc_close(mmc);
+                /* cache vid */
+                keycache_save("vid", aacs->disc_id, aacs->vid, 16);
                 return AACS_SUCCESS;
             case MMC_ERROR_CERT_REVOKED:
                 error_code = AACS_ERROR_CERT_REVOKED;
@@ -818,6 +820,12 @@ const uint8_t *aacs_get_disc_id(AACS *aacs)
 const uint8_t *aacs_get_vid(AACS *aacs)
 {
     if (!memcmp(aacs->vid, empty_key, 16)) {
+        /* get cached vid */
+        if (keycache_find("vid", aacs->disc_id, aacs->vid, 16)) {
+            DEBUG(DBG_AACS, "Using cached VID\n");
+            return aacs->vid;
+        }
+
         config_file *cf = keydbcfg_config_load(NULL);
         if (cf) {
             _read_vid(aacs, cf->host_cert_list);
@@ -830,7 +838,7 @@ const uint8_t *aacs_get_vid(AACS *aacs)
 
 const uint8_t *aacs_get_pmsn(AACS *aacs)
 {
-    if (!memcmp(aacs->vid, empty_key, 16)) {
+    if (!memcmp(aacs->pmsn, empty_key, 16)) {
         config_file *cf = keydbcfg_config_load(NULL);
         if (cf) {
             _read_vid(aacs, cf->host_cert_list);

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

Reply via email to