libaacs | branch: master | npzacs <npz...@gmail.com> | Sun Apr 26 19:38:48 2015 
+0300| [7d4d26a53e80e71749693fd95864bdc03c07b963] | committer: npzacs

Add aacs_get_bdj_root_cert_hash() and aacs_get_content_cert_id()

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

 ChangeLog                  |    2 ++
 src/examples/aacs_info.c   |    8 +++++++-
 src/libaacs/aacs.c         |   16 ++++++++++++++++
 src/libaacs/aacs.h         |    2 ++
 src/libaacs/content_cert.c |    2 ++
 src/libaacs/content_cert.h |    3 +++
 6 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index d5d7e18..2192144 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+- Add aacs_get_bdj_root_cert_hash().
+- Add aacs_get_content_cert_id().
 - Verify content certificate signature.
 - Fix build with gcrypt < 1.6.0.
 
diff --git a/src/examples/aacs_info.c b/src/examples/aacs_info.c
index 39c72c2..552d3fe 100644
--- a/src/examples/aacs_info.c
+++ b/src/examples/aacs_info.c
@@ -114,6 +114,9 @@ int main (int argc, char **argv)
     const uint8_t *pmsn = aacs_get_pmsn(aacs);
     const int      bec  = aacs_get_bus_encryption(aacs);
     const uint8_t *binding_id = aacs_get_device_binding_id(aacs);
+    const uint8_t *bdj_hash   = aacs_get_bdj_root_cert_hash(aacs);
+    const uint8_t *cc_id      = aacs_get_content_cert_id(aacs);
+
     printf("Disc ID: %s\n", id  ? _hex2str(id,  20) : "???");
     printf("VID    : %s\n", vid ? _hex2str(vid, 16) : "???");
     printf("MKBv   : %d\n", aacs_get_mkb_version(aacs));
@@ -121,7 +124,10 @@ int main (int argc, char **argv)
     printf("Bus encryption:\n");
     printf("  Device support:   %s\n", (bec & AACS_BUS_ENCRYPTION_CAPABLE) ? 
"yes" : "no");
     printf("  Enabled in media: %s\n", (bec & AACS_BUS_ENCRYPTION_ENABLED) ? 
"yes" : "no");
-    printf("Device binding ID:  %s\n", binding_id ? _hex2str(binding_id, 16) : 
"???");
+    printf("Content Certificate ID: %s\n", cc_id      ? _hex2str(cc_id,      
6)  : "???");
+    printf("BD-J Root Cert hash:    %s\n", bdj_hash   ? _hex2str(bdj_hash,   
20) : "???");
+    printf("Device binding ID:      %s\n", binding_id ? _hex2str(binding_id, 
16) : "???");
+
 
     aacs_close(aacs);
 
diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c
index 60a1a1f..9c2414a 100644
--- a/src/libaacs/aacs.c
+++ b/src/libaacs/aacs.c
@@ -1179,6 +1179,22 @@ const uint8_t *aacs_get_disc_id(AACS *aacs)
     return aacs->disc_id;
 }
 
+const uint8_t *aacs_get_content_cert_id(AACS *aacs)
+{
+    if (aacs && aacs->cc) {
+        return aacs->cc->cc_id;
+    }
+    return NULL;
+}
+
+const uint8_t *aacs_get_bdj_root_cert_hash(AACS *aacs)
+{
+    if (aacs && aacs->cc) {
+        return aacs->cc->bdj_root_cert_hash;
+    }
+    return NULL;
+}
+
 const uint8_t *aacs_get_mk(AACS *aacs)
 {
     if (!memcmp(aacs->mk, empty_key, 16)) {
diff --git a/src/libaacs/aacs.h b/src/libaacs/aacs.h
index 0d306ef..8753b11 100644
--- a/src/libaacs/aacs.h
+++ b/src/libaacs/aacs.h
@@ -58,6 +58,8 @@ AACS_PUBLIC const uint8_t *aacs_get_disc_id(AACS *aacs);
 AACS_PUBLIC const uint8_t *aacs_get_vid(AACS *aacs);  /* may fail even if disc 
can be decrypted */
 AACS_PUBLIC const uint8_t *aacs_get_pmsn(AACS *aacs); /* may fail even if disc 
can be decrypted */
 AACS_PUBLIC const uint8_t *aacs_get_mk(AACS *aacs);   /* may fail even if disc 
can be decrypted */
+AACS_PUBLIC const uint8_t *aacs_get_content_cert_id(AACS *aacs);
+AACS_PUBLIC const uint8_t *aacs_get_bdj_root_cert_hash(AACS *aacs);
 
 /* AACS Online */
 AACS_PUBLIC const uint8_t *aacs_get_device_binding_id(AACS *aacs);
diff --git a/src/libaacs/content_cert.c b/src/libaacs/content_cert.c
index 995537a..c3b9bc5 100644
--- a/src/libaacs/content_cert.c
+++ b/src/libaacs/content_cert.c
@@ -66,6 +66,8 @@ CONTENT_CERT *cc_parse(const void *data, size_t len)
     CONTENT_CERT *c = calloc(1, sizeof(CONTENT_CERT));
 
     c->bus_encryption_enabled_flag = p[1] >> 7;
+    memcpy(c->cc_id,              p + 14, 6);
+    memcpy(c->bdj_root_cert_hash, p + 46, 20);
 
     return c;
 }
diff --git a/src/libaacs/content_cert.h b/src/libaacs/content_cert.h
index b491aba..2a8949c 100644
--- a/src/libaacs/content_cert.h
+++ b/src/libaacs/content_cert.h
@@ -29,6 +29,9 @@ typedef struct content_cert CONTENT_CERT;
 
 struct content_cert {
     uint8_t bus_encryption_enabled_flag;
+
+    uint8_t cc_id[6];
+    uint8_t bdj_root_cert_hash[20];
 };
 
 

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

Reply via email to