Petri Hintukainen pushed to branch master at VideoLAN / libaacs


Commits:
9927a98a by npzacs at 2021-05-05T17:11:22+03:00
Return error code from crypto_aacs_verify_aacsla()

- - - - -
1812614a by npzacs at 2021-05-05T17:14:02+03:00
Return error code from crypto_aacs_verify_aacscc()

- - - - -


3 changed files:

- src/libaacs/aacs.c
- src/libaacs/content_cert.c
- src/libaacs/crypto.c


Changes:

=====================================
src/libaacs/aacs.c
=====================================
@@ -136,6 +136,8 @@ static int _validate_pk(const uint8_t *pk,
 
 static int _rl_verify_signature(const uint8_t *rl, size_t size)
 {
+    int crypto_err;
+
     if (size < 40) {
         BD_DEBUG(DBG_AACS, "too small revocation list\n");
         return 0;
@@ -153,7 +155,13 @@ static int _rl_verify_signature(const uint8_t *rl, size_t 
size)
         return 0;
     }
 
-    return crypto_aacs_verify_aacsla(rl + len, rl, len);
+    crypto_err = crypto_aacs_verify_aacsla(rl + len, rl, len);
+    if (crypto_err) {
+        LOG_CRYPTO_ERROR(DBG_AACS, "revocation list signature verification 
failed", crypto_err);
+        return 0;
+    }
+
+    return 1;
 }
 
 static void _save_rl(const char *name, uint32_t version, const uint8_t 
*version_rec,
@@ -173,9 +181,7 @@ static void _save_rl(const char *name, uint32_t version, 
const uint8_t *version_
     if (data) {
         memcpy(data,      version_rec, 12);
         memcpy(data + 12, rl_rec,      rl_len);
-        if (!_rl_verify_signature(data, rl_len + 12)) {
-            BD_DEBUG(DBG_AACS | DBG_CRIT, "invalid %s signature, not using 
it\n", name);
-        } else {
+        if (_rl_verify_signature(data, rl_len + 12)) {
             cache_save(name, version, data, rl_len + 12);
         }
         X_FREE(data);


=====================================
src/libaacs/content_cert.c
=====================================
@@ -72,6 +72,7 @@ CONTENT_CERT *cc_parse(const void *data, size_t len)
     size_t num_digest = MKINT_BE16(p + 12);
 
     size_t cert_data_len = 26 + length_format_specific + num_digest*8;
+    int crypto_error;
 
     if (len < cert_data_len + signature_size) {
         BD_DEBUG(DBG_AACS | DBG_CRIT, "Invalid content certificate (length %zu 
< %zu)\n",
@@ -81,8 +82,9 @@ CONTENT_CERT *cc_parse(const void *data, size_t len)
 
     /* check signature */
 
-    if (!crypto_aacs_verify_aacscc(p + cert_data_len, p, cert_data_len)) {
-        BD_DEBUG(DBG_AACS | DBG_CRIT, "Invalid content certificate 
signature\n");
+    crypto_error = crypto_aacs_verify_aacscc(p + cert_data_len, p, 
cert_data_len);
+    if (crypto_error) {
+        LOG_CRYPTO_ERROR(DBG_AACS, "content certificate signature verification 
failed", crypto_error);
         return NULL;
     }
 


=====================================
src/libaacs/crypto.c
=====================================
@@ -652,8 +652,8 @@ static int _aacs_verify(const uint8_t *signature, enum 
gcry_md_algos hash_type,
         key_len = 32;
         break;
     default:
-        BD_ASSERT_UNREACHABLE ("invalid signature size");
-        return 0;
+        BD_ASSERT_UNREACHABLE ("invalid signature algorithm");
+        return GPG_ERR_UNSUPPORTED_ALGORITHM;
     }
 
     GCRY_VERIFY("_aacs_sexp_key",
@@ -681,14 +681,14 @@ int crypto_aacs_verify(const uint8_t *cert, const uint8_t 
*signature, const uint
     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)
+int crypto_aacs_verify_aacsla(const uint8_t *signature, const uint8_t *data, 
uint32_t len)
 {
     static const uint8_t aacs_la_pubkey_x[] = {0x63, 0xC2, 0x1D, 0xFF, 0xB2, 
0xB2, 0x79, 0x8A, 0x13, 0xB5,
                                                0x8D, 0x61, 0x16, 0x6C, 0x4E, 
0x4A, 0xAC, 0x8A, 0x07, 0x72 };
     static const uint8_t aacs_la_pubkey_y[] = {0x13, 0x7E, 0xC6, 0x38, 0x81, 
0x8F, 0xD9, 0x8F, 0xA4, 0xC3,
                                                0x0B, 0x99, 0x67, 0x28, 0xBF, 
0x4B, 0x91, 0x7F, 0x6A, 0x27 };
 
-    return !_aacs_verify(signature, GCRY_MD_SHA1, aacs_la_pubkey_x, 
aacs_la_pubkey_y, data, len);
+    return _aacs_verify(signature, GCRY_MD_SHA1, aacs_la_pubkey_x, 
aacs_la_pubkey_y, data, len);
 }
 
 int  crypto_aacs_verify_aacscc(const uint8_t *signature, const uint8_t *data, 
uint32_t len)
@@ -703,15 +703,14 @@ int  crypto_aacs_verify_aacscc(const uint8_t *signature, 
const uint8_t *data, ui
                                                  0x54, 0x5E, 0xCC, 0x27, 0x1E, 
0xE4, 0x6C, 0x4A, 0xEF, 0x81, 0xD9, 0x16, 0x9B, 0xF8, 0x41, 0x72 };
     switch (data[0]) {
     case 0x00: /* AACS 1 */
-        return !_aacs_verify(signature, GCRY_MD_SHA1, aacs_cc_pubkey_x, 
aacs_cc_pubkey_y, data, len);
+        return _aacs_verify(signature, GCRY_MD_SHA1, aacs_cc_pubkey_x, 
aacs_cc_pubkey_y, data, len);
     case 0x10: /* AACS 2 */
-        return !_aacs_verify(signature, GCRY_MD_SHA256, aacs2_cc_pubkey_x, 
aacs2_cc_pubkey_y, data, len);
+        return _aacs_verify(signature, GCRY_MD_SHA256, aacs2_cc_pubkey_x, 
aacs2_cc_pubkey_y, data, len);
     default:
-        BD_DEBUG(DBG_AACS | DBG_CRIT, "Unknown content certificate type 
0x%02x\n", data[0]);
         break;
     }
 
-    return 0;
+    return GPG_ERR_UNSUPPORTED_CERT;
 }
 
 static int _aacs_verify_cert(const uint8_t *cert)
@@ -722,7 +721,7 @@ static int _aacs_verify_cert(const uint8_t *cert)
         return 0;
     }
 
-    return crypto_aacs_verify_aacsla(cert + 52, cert, 52);
+    return !crypto_aacs_verify_aacsla(cert + 52, cert, 52);
 }
 
 int crypto_aacs_verify_host_cert(const uint8_t *cert)



View it on GitLab: 
https://code.videolan.org/videolan/libaacs/-/compare/b9f592658d4faba846e2051c9ab37e6986f4bc74...1812614a53fc6971cdf55e8da68232b329fef877

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


_______________________________________________
libaacs-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/libaacs-devel

Reply via email to