Stop same or I will have you done for fraud you should not have my email ADRESS 
and I didn't give you it.

Sent from my iPod

On 13 Sep 2013, at 08:25, g...@videolan.org (Janusz Dziemidowicz) wrote:

> libaacs | branch: master | Janusz Dziemidowicz <rrapt...@nails.eu.org> | Sat 
> Sep  7 01:16:14 2013 +0200| [7c8c7b43dfa85e5dc34bba11b200e0fb968a2004] | 
> committer: npzacs
> 
> Retrieve bus encryption flags from drive and content certificate
> 
> For bus encryption to be active it must be enabled both by the drive
> and the disc.
> Drive certificate contains Bus Encryption Capable (BEC) flag in the
> least significant bit in the second byte of the certificate.
> Content certificate contains Bus Encryption Enabled (BEE) flag in the
> most significant bit in the second byte of the certificate.
> Retrieve both bits so it is now possible to check if bus encryption is
> active (it will not be active if the disc does not enable it, even on
> bus encryption drive; most discs currently do not enable it).
> 
>> http://git.videolan.org/gitweb.cgi/libaacs.git/?a=commit;h=7c8c7b43dfa85e5dc34bba11b200e0fb968a2004
> ---
> 
> src/libaacs/aacs.c |   67 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> src/libaacs/mmc.c  |   17 ++++++++++---
> src/libaacs/mmc.h  |    1 +
> 3 files changed, 82 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c
> index 3a455e4..3f841e1 100644
> --- a/src/libaacs/aacs.c
> +++ b/src/libaacs/aacs.c
> @@ -65,6 +65,10 @@ struct aacs {
>     /* title -> CPS unit mappings */
>     uint32_t  num_titles;
>     uint16_t *cps_units;  /* [0] = first play ; [1] = top menu ; [2] = title 
> 1 ... */
> +
> +    /* bus encryption */
> +    int       bee;        /* bus encryption enabled flag in content 
> certificate */
> +    int       bec;        /* bus encryption capable flag in drive 
> certificate */
> };
> 
> static const uint8_t empty_key[] = "\x00\x00\x00\x00\x00\x00\x00\x00"
> @@ -441,6 +445,22 @@ static AACS_FILE_H *_open_unit_key_file(const char *path)
>     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)
> @@ -639,6 +659,50 @@ static int _calc_title_hash(const char *path, uint8_t 
> *title_hash)
>     return result;
> }
> 
> +static int _get_bus_encryption_enabled(const char *path)
> +{
> +    AACS_FILE_H *fp = NULL;
> +    uint8_t buf[2];
> +    int bee = 0;
> +
> +    fp = _open_content_certificate_file(path);
> +    if (!fp) {
> +        DEBUG(DBG_AACS | DBG_CRIT, "Unable to open content certificate\n");
> +        return 0;
> +    }
> +
> +    if (file_read(fp, buf, 2) == 2) {
> +        bee = (buf[1] & 0x80) >> 7;
> +        DEBUG(DBG_AACS, "Bus Encryption Enabled flag in content certificate: 
> %d\n", bee);
> +    } else {
> +        DEBUG(DBG_AACS | DBG_CRIT, "Failed to read Bus Encryption Enabled 
> flag from content certificate file\n");
> +    }
> +
> +    file_close(fp);
> +    return bee;
> +}
> +
> +static int _get_bus_encryption_capable(const char *path)
> +{
> +    MMC* mmc = NULL;
> +    uint8_t drive_cert[92];
> +    int bec = 0;
> +
> +    if (!(mmc = mmc_open(path))) {
> +        return 0;
> +    }
> +
> +    if (mmc_read_drive_cert(mmc, drive_cert) == MMC_SUCCESS) {
> +        bec = drive_cert[1] & 1;
> +        DEBUG(DBG_AACS, "Bus Encryption Capable flag in drive certificate: 
> %d\n", bec);
> +    } else {
> +        DEBUG(DBG_AACS | DBG_CRIT, "Unable to read drive certificate\n");
> +    }
> +
> +    mmc_close(mmc);
> +    return bec;
> +}
> +
> static int _verify_ts(uint8_t *buf, size_t size)
> {
>     uint8_t *ptr;
> @@ -751,6 +815,9 @@ AACS *aacs_open2(const char *path, const char 
> *configfile_path, int *error_code)
>     DEBUG(DBG_AACS, "Starting AACS waterfall...\n");
>     *error_code = _calc_uks(aacs, configfile_path);
> 
> +    aacs->bee = _get_bus_encryption_enabled(path);
> +    aacs->bec = _get_bus_encryption_capable(path);
> +
>     if (*error_code == AACS_SUCCESS) {
>         DEBUG(DBG_AACS, "AACS initialized!\n");
>     } else {
> diff --git a/src/libaacs/mmc.c b/src/libaacs/mmc.c
> index 41b1fd2..5afbdae 100644
> --- a/src/libaacs/mmc.c
> +++ b/src/libaacs/mmc.c
> @@ -469,8 +469,8 @@ static int _mmc_send_host_cert(MMC *mmc, uint8_t agid,
>     return _mmc_send_key(mmc, agid, 0x01, buf, 116);
> }
> 
> -static int _mmc_read_drive_cert(MMC *mmc, uint8_t agid, uint8_t *drive_nonce,
> -                                uint8_t *drive_cert)
> +static int _mmc_read_drive_cert_challenge(MMC *mmc, uint8_t agid, uint8_t 
> *drive_nonce,
> +                                          uint8_t *drive_cert)
> {
>     uint8_t buf[116];
>     memset(buf, 0, sizeof(buf));
> @@ -1044,7 +1044,7 @@ static int _mmc_aacs_auth(MMC *mmc, const uint8_t 
> *host_priv_key, const uint8_t
>     }
> 
>     // receive mmc cert + nonce
> -    if (!_mmc_read_drive_cert(mmc, agid, dn, dc)) {
> +    if (!_mmc_read_drive_cert_challenge(mmc, agid, dn, dc)) {
>         DEBUG(DBG_MMC | DBG_CRIT,
>               "Drive doesn't give its certificate\n");
>         return MMC_ERROR;
> @@ -1223,6 +1223,17 @@ int mmc_read_data_keys(MMC *mmc, const uint8_t 
> *host_priv_key, const uint8_t *ho
>     return MMC_ERROR;
> }
> 
> +int mmc_read_drive_cert(MMC *mmc, uint8_t *drive_cert)
> +{
> +    uint8_t buf[116];
> +
> +    if (_mmc_report_key(mmc, 0, 0, 0, 0x38, buf, 116)) {
> +        memcpy(drive_cert,  buf + 4, 92);
> +        return MMC_SUCCESS;
> +    }
> +    return MMC_ERROR;
> +}
> +
> uint8_t *mmc_read_mkb(MMC *mmc, int address, int *size)
> {
>     uint8_t agid = 0;
> diff --git a/src/libaacs/mmc.h b/src/libaacs/mmc.h
> index 57419dc..2bae638 100644
> --- a/src/libaacs/mmc.h
> +++ b/src/libaacs/mmc.h
> @@ -37,6 +37,7 @@ AACS_PRIVATE int  mmc_read_vid(MMC *mmc, const uint8_t 
> *host_priv_key, const uin
>                                uint8_t *vid, uint8_t *pmsn);
> AACS_PRIVATE int  mmc_read_data_keys(MMC *mmc, const uint8_t *host_priv_key, 
> const uint8_t *host_cert,
>                                      uint8_t *read_data_key, uint8_t 
> *write_data_key);
> +AACS_PRIVATE int  mmc_read_drive_cert(MMC *mmc, uint8_t *drive_cert);
> 
> /* read partial MKB */
> AACS_PRIVATE uint8_t *mmc_read_mkb(MMC *mmc, int address, int *size);
> 
> _______________________________________________
> libaacs-devel mailing list
> libaacs-devel@videolan.org
> https://mailman.videolan.org/listinfo/libaacs-devel
_______________________________________________
libaacs-devel mailing list
libaacs-devel@videolan.org
https://mailman.videolan.org/listinfo/libaacs-devel

Reply via email to