Petri Hintukainen pushed to branch master at VideoLAN / libaacs


Commits:
693de0c1 by npzacs at 2021-05-04T18:17:40+03:00
Return error code from crypto_aacs_verify()

- - - - -
b9f59265 by npzacs at 2021-05-04T18:22:13+03:00
mmc: error out if AES fails

(Output buffer content is undefined)

- - - - -


2 changed files:

- src/libaacs/crypto.c
- src/libaacs/mmc.c


Changes:

=====================================
src/libaacs/crypto.c
=====================================
@@ -678,7 +678,7 @@ static int _aacs_verify(const uint8_t *signature, enum 
gcry_md_algos hash_type,
 
 int crypto_aacs_verify(const uint8_t *cert, const uint8_t *signature, const 
uint8_t *data, uint32_t len)
 {
-    return !_aacs_verify(signature, GCRY_MD_SHA1, cert + 12, cert + 32, data, 
len);
+    return _aacs_verify(signature, GCRY_MD_SHA1, cert + 12, cert + 32, data, 
len);
 }
 
 int  crypto_aacs_verify_aacsla(const uint8_t *signature, const uint8_t *data, 
uint32_t len)


=====================================
src/libaacs/mmc.c
=====================================
@@ -435,11 +435,17 @@ static int _verify_signature(const uint8_t *cert, const 
uint8_t *signature,
                              const uint8_t *nonce, const uint8_t *point)
 {
     uint8_t data[60];
+    int crypto_error;
 
     memcpy(data,      nonce, 20);
     memcpy(data + 20, point, 40);
 
-    return crypto_aacs_verify(cert, signature, data, 60);
+    crypto_error = crypto_aacs_verify(cert, signature, data, 60);
+    if (crypto_error) {
+        LOG_CRYPTO_ERROR(DBG_MMC, "signature verification failed", 
crypto_error);
+    }
+
+    return (crypto_error == 0);
 }
 
 static int _mmc_aacs_auth(MMC *mmc, uint8_t agid, const uint8_t 
*host_priv_key, const uint8_t *host_cert, uint8_t *bus_key)
@@ -557,9 +563,11 @@ static int _read_vid(MMC *mmc, uint8_t agid, const uint8_t 
*bus_key, uint8_t *vi
         err = crypto_aes_cmac_16(vid, bus_key, calc_mac);
         if (err) {
             LOG_CRYPTO_ERROR(DBG_MMC, "VID MAC calculation failed", err);
+            return MMC_ERROR;
         }
         if (memcmp(calc_mac, mac, 16)) {
             BD_DEBUG(DBG_MMC | DBG_CRIT, "VID MAC is incorrect. This means 
this Volume ID is not correct.\n");
+            return MMC_ERROR;
         }
 
         return MMC_SUCCESS;
@@ -588,9 +596,11 @@ static int _read_pmsn(MMC *mmc, uint8_t agid, const 
uint8_t *bus_key, uint8_t *p
         err = crypto_aes_cmac_16(pmsn, bus_key, calc_mac);
         if (err) {
             LOG_CRYPTO_ERROR(DBG_MMC, "PMSN MAC calculation failed", err);
+            return MMC_ERROR;
         }
         if (memcmp(calc_mac, mac, 16)) {
             BD_DEBUG(DBG_MMC | DBG_CRIT, "PMSN MAC is incorrect. This means 
this Pre-recorded Medial Serial Number is not correct.\n");
+            return MMC_ERROR;
         }
 
         return MMC_SUCCESS;
@@ -614,6 +624,7 @@ static int _read_data_keys(MMC *mmc, uint8_t agid, const 
uint8_t *bus_key,
             int err = crypto_aes128d(bus_key, encrypted_read_data_key, 
read_data_key);
             if (err) {
                 LOG_CRYPTO_ERROR(DBG_MMC, "decrypting read data key failed", 
err);
+                return MMC_ERROR;
             }
             if (DEBUG_KEYS) {
                 BD_DEBUG(DBG_MMC, "READ DATA KEY       : %s\n", 
str_print_hex(str, read_data_key, 16));
@@ -623,6 +634,7 @@ static int _read_data_keys(MMC *mmc, uint8_t agid, const 
uint8_t *bus_key,
             int err = crypto_aes128d(bus_key, encrypted_write_data_key, 
write_data_key);
             if (err) {
                 LOG_CRYPTO_ERROR(DBG_MMC, "decrypting write data key failed", 
err);
+                return MMC_ERROR;
             }
             if (DEBUG_KEYS) {
                 BD_DEBUG(DBG_MMC, "WRITE DATA KEY      : %s\n", 
str_print_hex(str, write_data_key, 16));



View it on GitLab: 
https://code.videolan.org/videolan/libaacs/-/compare/53e37d597fb15a2d3a7cb9a90056d84caf685195...b9f592658d4faba846e2051c9ab37e6986f4bc74

-- 
View it on GitLab: 
https://code.videolan.org/videolan/libaacs/-/compare/53e37d597fb15a2d3a7cb9a90056d84caf685195...b9f592658d4faba846e2051c9ab37e6986f4bc74
You're receiving this email because of your account on code.videolan.org.


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

Reply via email to