libaacs | branch: master | npzacs <npz...@gmail.com> | Fri Feb  5 12:12:02 2016 
+0200| [2658af6505be2f951d3bc5f237f6e130e0c9b5aa] | committer: npzacs

Document core API functions

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

 src/libaacs/aacs.h |  118 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 109 insertions(+), 9 deletions(-)

diff --git a/src/libaacs/aacs.h b/src/libaacs/aacs.h
index 3b547a3..c4eac77 100644
--- a/src/libaacs/aacs.h
+++ b/src/libaacs/aacs.h
@@ -27,7 +27,9 @@
 #  define AACS_PUBLIC
 #endif
 
-/* aacs_open2() error codes */
+/**
+ * aacs_open_device() error codes
+ */
 #define AACS_SUCCESS               0 /* no errors */
 #define AACS_ERROR_CORRUPTED_DISC -1 /* opening or reading of AACS files 
failed */
 #define AACS_ERROR_NO_CONFIG      -2 /* missing config file */
@@ -38,22 +40,112 @@
 #define AACS_ERROR_MMC_FAILURE    -7 /* MMC failed */
 #define AACS_ERROR_NO_DK          -8 /* no matching device key */
 
+/**
+ * Opaque type for AACS object
+ */
 typedef struct aacs AACS;
 
+/**
+ * Get version of AACS library.
+ *
+ * @param major  where to store libaacs major version
+ * @param minor  where to store libaacs minor version
+ * @param micro  where to store libaacs micro version
+ */
 AACS_PUBLIC void aacs_get_version(int *major, int *minor, int *micro);
 
-AACS_PUBLIC AACS *aacs_init       (void);
-AACS_PUBLIC int   aacs_open_device(AACS *, const char *path, const char 
*keyfile_path);
+/*
+ * open / close a disc
+ */
+
+/**
+ * Initialize an AACS object.
+ *
+ * Disc must be opened with aacs_open_device().
+ *
+ * @return  AACS object, NULL on error
+ */
+AACS_PUBLIC AACS *aacs_init(void);
 
+/**
+ * Open AACS disc / device.
+ *
+ * If device is not accessible (reading from .iso file or network stream),
+ * path can be NULL.
+ *
+ * If files stored in AACS/ are not accessible from the file system (ex. 
unmounted disc),
+ * application should provide file system access for libaacs (see 
aacs_set_fopen()).
+ *
+ * @param  aacs  AACS object
+ * @param  path  path to device or disc root or NULL
+ * @param  keyfile_path  optional path to AACS key file
+ * @return  AACS_SUCCESS or ACS_ERROR_* error code
+ */
+AACS_PUBLIC int aacs_open_device(AACS *, const char *path, const char 
*keyfile_path);
+
+/* deprecated */
 AACS_PUBLIC AACS *aacs_open(const char *path, const char *keyfile_path);
+
+/* deprecated */
 AACS_PUBLIC AACS *aacs_open2(const char *path, const char *keyfile_path, int 
*error_code);
 
+/**
+ * Closes and cleans up the AACS object.
+ *
+ * @param aacs  AACS object
+ */
 AACS_PUBLIC void aacs_close(AACS *aacs);
-AACS_PUBLIC void aacs_select_title(AACS *aacs, uint32_t title); /* 0 - top 
menu, 0xffff - first play */
+
+/*
+ * decryption
+ */
+
+#define AACS_TITLE_FIRST_PLAY  0
+#define AACS_TITLE_TOP_MENU    0xffff
+
+/**
+ * Select title (optional).
+ *
+ * Titles can be stored in different CPS units and use different encryption 
key.
+ *
+ * If current title is not set, CPS unit is autodetected (with minor 
performance cost).
+ * If application does not provide current title to libaacs, current CPS unit
+ * should be reset by selecting First Play title (0xffff) when a new playlist 
is
+ * started.
+ *
+ * @param aacs  AACS object
+ * @param title  Current title from disc index
+ */
+AACS_PUBLIC void aacs_select_title(AACS *aacs, uint32_t title_number);
+
+/**
+ * Decrypt data unit
+ *
+ * Remove possible bus encryption and AACS encryption.
+ *
+ * NOTE: only units from the same CPS unit may be decrypted in paraller.
+ *
+ * @param aacs  AACS object
+ * @param buf  unit to decrypt
+ * @return  1 on success, 0 on error
+ */
 AACS_PUBLIC int  aacs_decrypt_unit(AACS *aacs, uint8_t *buf);
+
+/**
+ * Remove bus encryption.
+ *
+ * If bus encryption is used, remove bus encryption.
+ * Like aacs_decrypt_unit(), but does not perform AACS decryption.
+ *
+ * @param aacs  AACS object
+ * @param buf  unit to decrypt
+ * @return  1 on success, 0 on error
+ */
 AACS_PUBLIC int  aacs_decrypt_bus(AACS *aacs, uint8_t *buf);
 
-/* Disc information */
+/*
+ * Disc information
+ */
 AACS_PUBLIC int aacs_get_mkb_version(AACS *aacs);
 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 */
@@ -62,11 +154,15 @@ AACS_PUBLIC const uint8_t *aacs_get_mk(AACS *aacs);   /* 
may fail even if disc c
 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 Online
+ */
 AACS_PUBLIC const uint8_t *aacs_get_device_binding_id(AACS *aacs);
 AACS_PUBLIC const uint8_t *aacs_get_device_nonce(AACS *aacs);
 
-/* revocation lists */
+/*
+ * Revocation lists
+ */
 typedef struct {
     uint16_t  range;
     uint8_t   id[6];
@@ -76,14 +172,18 @@ AACS_PUBLIC AACS_RL_ENTRY *aacs_get_hrl(int *num_entries, 
int *mkb_version);
 AACS_PUBLIC AACS_RL_ENTRY *aacs_get_drl(int *num_entries, int *mkb_version);
 AACS_PUBLIC void           aacs_free_rl(AACS_RL_ENTRY **rl);
 
-/* bus encryption info */
+/*
+ * Bus encryption information
+ */
 
 #define AACS_BUS_ENCRYPTION_ENABLED  0x01  /* Bus encryption enabled in the 
media */
 #define AACS_BUS_ENCRYPTION_CAPABLE  0x02  /* Bus encryption capable drive */
 
 AACS_PUBLIC uint32_t aacs_get_bus_encryption(AACS *);
 
-/* Copy Control Information */
+/*
+ * Copy Control Information
+ */
 
 struct aacs_basic_cci;
 

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

Reply via email to