diff --git a/libwvdrmengine/Android.bp b/libwvdrmengine/Android.bp index 865b57be..20e7e440 100644 --- a/libwvdrmengine/Android.bp +++ b/libwvdrmengine/Android.bp @@ -268,7 +268,6 @@ cc_binary { init_rc: ["src/android.hardware.drm-service.widevine.rc"], vintf_fragments: ["manifest_android.hardware.drm-service.widevine.xml"], - } // ---------------------------------------------------------------------------- @@ -290,8 +289,7 @@ cc_binary { shared_libs: ["libbinder_ndk"], init_rc: ["src/android.hardware.drm-service-lazy.widevine.rc"], - vintf_fragments: ["manifest_android.hardware.drm-service.widevine.xml"], - + vintf_fragments: ["manifest_android.hardware.drm-service-lazy.widevine.xml"], } // ---------------------------------------------------------------------------- @@ -371,7 +369,6 @@ cc_library_static { ], srcs: cdm_util_src_files, - } // ---------------------------------------------------------------------------- @@ -537,13 +534,12 @@ cc_library_shared { owner: "widevine", proprietary: true, - } phony { name: "android.hardware.drm@latest-service.widevine", required: [ - "android.hardware.drm-service.widevine", + "com.google.android.widevine", ], } diff --git a/libwvdrmengine/apex/Android.bp b/libwvdrmengine/apex/Android.bp new file mode 100644 index 00000000..9e969b88 --- /dev/null +++ b/libwvdrmengine/apex/Android.bp @@ -0,0 +1,74 @@ +// Copyright (C) 2022 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +soong_config_module_type { + name: "widevine_apex_defaults", + module_type: "apex_defaults", + config_namespace: "ANDROID", + bool_variables: ["TARGET_ENABLE_MEDIADRM_64"], + properties: ["compile_multilib"], +} + +widevine_apex_defaults { + name: "com.google.android.widevine-defaults", + compile_multilib: "prefer32", + soong_config_variables: { + TARGET_ENABLE_MEDIADRM_64: { + compile_multilib: "first", + }, + }, +} + +apex { + name: "com.google.android.widevine", + vendor: true, + manifest: "apex_manifest.json", + prebuilts: [ + "com.google.android.widevine.rc", + "widevine-linker-config", + ], + defaults: [ + "com.google.android.widevine-defaults", + ], + binaries: ["android.hardware.drm-service.widevine"], + // TODO(b/239054171) embed vintf_fragment in the apex. + vintf_fragments: ["com.google.android.widevine.xml"], + file_contexts: "file_contexts", + use_vndk_as_stable: true, + key: "com.google.android.widevine.key", + certificate: ":com.google.android.widevine.certificate", + updatable: false, +} + +linker_config { + name: "widevine-linker-config", + src: "linker.config.json", + installable: false, +} + +apex_key { + name: "com.google.android.widevine.key", + public_key: "com.google.android.widevine.avbpubkey", + private_key: "com.google.android.widevine.pem", +} + +android_app_certificate { + name: "com.google.android.widevine.certificate", + certificate: "com.google.android.widevine", +} + +prebuilt_etc { + name: "com.google.android.widevine.rc", + src: "com.google.android.widevine.rc", +} \ No newline at end of file diff --git a/libwvdrmengine/apex/apex_manifest.json b/libwvdrmengine/apex/apex_manifest.json new file mode 100644 index 00000000..c6d18914 --- /dev/null +++ b/libwvdrmengine/apex/apex_manifest.json @@ -0,0 +1,4 @@ +{ + "name": "com.google.android.widevine", + "version": 1 +} \ No newline at end of file diff --git a/libwvdrmengine/apex/com.google.android.widevine.avbpubkey b/libwvdrmengine/apex/com.google.android.widevine.avbpubkey new file mode 100644 index 00000000..e748b67d Binary files /dev/null and b/libwvdrmengine/apex/com.google.android.widevine.avbpubkey differ diff --git a/libwvdrmengine/apex/com.google.android.widevine.pem b/libwvdrmengine/apex/com.google.android.widevine.pem new file mode 100644 index 00000000..bb1b4de4 --- /dev/null +++ b/libwvdrmengine/apex/com.google.android.widevine.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDOOLpUo4QRrwlQ +VpaIOK8plveqKbSW++kkCvX4DV1w712W6LR9tfX8JMcKlI1KY3j7cH2Yn0R8AYhW +wRGfB33SQqkoWOQuYKngcTSXpWZsrYgwo8DbShhcbtQIKRs65oK0OLUmzGWKfoKS +u4dp768WsssZrrKU1qZRXqhEybmKrrgxmJT7/vtrLFdrXzuqTiRBBemTlIgACnca +TtHvXUipOkN+Fhn83XmW8hSuWciI80srtiyoTM7fUB4WMgq5kP16x5yViu/wbFWt +v5L0if35fREClFVCLnqqPjROF2YbjB7kucvg6zNNadrP0po7psEKcUX90MW5nojD +DrYMUkKHidCBDFh1RdmdQslUlCcifbdBFgc2uAwu95J20MxoyggsA1m/JEVN/O7a +G7pNq5nSLRO9mAli8MBIAAOgtl5R8E28LEQL6vKAHRuLmaSiB7ztaCdzlBwq9fCd +BI8fe5hH+wVh7RrToRcdZXjDakXa18vwUe8PHbM/ui4x4t1naEaGxPDFI9MzY+Kn +YjMMQk6YDMt+jAPN1u78cb1Q+Mi6WXZViHou2qU9NI7ubrCXVnMgMmtK5hXTb2HF +oKI2gP7+cOFK3323xyDaqzgZ65ZI2FlGZy5JkUoZfOCZEXxwme1eTwmzi6a/qHzg +2zHQJghNTu0ZQsQaF9r3IVBAV3PgGwIDAQABAoICAAXdIBM7CQzVrM6ff61E61oj +5Evu3qcyZ4kyVJcmjiMhc0hQup0eeO2gABbhbXkRhgWkR7X4xWI/Suiomb8rX90E +Lzop+OcGsZ3jqiqrtdNeRdKYPWoe2715G0dWH+OXXV0RhbkiM7rx6PWSJoIRIinj +kJnc2VAZIGaM6fz2vXNfj3Y9j/LwZ6a+/odbkF9B1I8Sw3cCULGrmoJhfl+vh9rk +ALpLl5aUl5n+rS7d97FJNbh6+B8a/ADmjsxzxNFM+aAtn9qytirgcbk8ismwSMv4 +zeyEWj5FAxDnLuaPjMQ4wkIftFfjaDSJz4J8Sw1qKvAIk4RplM2338yoFO4ZwrF5 +3LIw/AskywUJxR+QjHQ5sy4/v1KK7nUIRr9+U5ytlxa2BuAziuw4VpTMIyphW8HF +PIVdq3v9pzrAaBpXRzBt9blBTQOPAO4poEOKcz3idxFIf2UekTtsmeA8o464rQSv +U2Y4pVkOLNehpIHPQx+u51tMDEL1ZtYwG6jItWmw+NYtSYSpyZVTdbDSPR6XMKM5 +nyapKd3VJ6FUNisI3DETjAbtLoY/2pCV5/NYZjCtlBpIdprautaLPA6kUwgwGS/R +HoUS+56kPvcquoZmbIYVzq4992+CaXE11UgrBnmOIMbafrBZASZtEJ69BaDHHAuN +ml9A6/UYl6AKgThZuTCFAoIBAQDiEVI1chhl1iHqnaWT5aEdi0awAY9Npc9RejNw +l93uiVJi49PFRFzsYQWRZdZ4/NNs1kGHomcIKPsEzjMNla/5osf8cR7h19JGd1ZW +xpb0saZJ9+t/YrXMU1A3vF7VDjxYEkQnX6jdQY0ICzOPrpTHARs3X0NlKyFODWPB +Fcb96F7b3AxJeauHgETHrmBfKVYDs6sOqikTxHpHjE/L6/y7wJjIvq1nbzxiJy2Y +P5WhdCcKW+roaAsIhYAjCzji2NcYffHiTQYAGxepL9krENXPLLVkf1Gdqy9cEf1J +jNnFmKa96HirL1ewCvbFh6UNZitImHa5vO1AZXTbiDgOgOefAoIBAQDphrbRGQlx +D2NVIE3aRNVcIdG+wdGxSS+sK2Pa3hBKUjrxFp4tU0Mt+tHDRwAW6cVCkeNYM6bs +M4KbnXTjTT2XCHoxkqc/BpluLVrfb+P2aGJyX2QX+SHviCqXaYqyzSw3Tdi8GvWH +VY5gBONXZ/SHesiMBrGY03ULpH6tmfZ/UFREENBNXkEs0Mv7CHA5P7boI87GkVmd +ZI1QYeBoPwq4RydBWnWD2+SYW+eHlTHSAy6nxC/LcQZqwwLhKdgHDYGgvSo2T9yW +psc9a8OcDvYdm0jeL45DB9pcXE/FGZ16X29Wq6hoVN2aeTjrO+IMXM3uKafr10wW +e/J9qFGDmmYFAoIBADuolIhULsoZI2Q17C9GhykzyxjBoJ6+JiL7W73X5hKAHMTK +GOXTL66VwBFpzZqqJeVv+WUg343QusW+4Mwx93mqkpo1BBBXkz9TWO6Xg9jZVOfq +TDSWySE9z0qWJHSXSCd50pCNdxPEq8I2qom9abfGu/b15eQ56JUfhXa8F4KEIxxk +Sr3NJQ4iNIR5qScT0oYxkO/SyfpUfGyLQ7et9Elb/zXi1AIa4dWJP0gRZ5xu+aqL +LUfdxSOfj3wwBvgef00QV5f/+ZhnjevxG5941uPQiaIW02QHe/0RJkWVrRavPTma +stWCLeLgUdU5Ab6yerOywIotqHK5E4invxtcu0MCggEBAOLqlkaEb5o++6TCKSRI +8pH+AtO7fkko9nv0BamtUmMFmGSgN7+PQp4xNRbtrPaW3akcHa+dMTwfqXARBn3A +lnJmOGZnPMCPZxOaWsz26qqLL+43Jwnseb9JrylF0xJ/L9HlgQ73m1GQHzLKTSan +ywLCmpEGCBiakQdpJfcGvnFj2x3wwJgNWIN1uGAMCRB4CwFzmf91SYEZLf/Hu8lQ +SNhbu5dTkRE54NzzoP0sSibqFLHMfyzOfQ/MwsWMZXAk/ar1ZUk1PQHeuYfDaWYB +W8HVHG9aAoC75sEMqi65/z3j8kpjrtcCb/skg9yAadzdaPVd4N/YawUGF9Fmdx7M +LwkCggEAA7Z1nof0SnAILuaiW4moO368G9wRjIexIZGiooDUQrek5oOLcb7n8EvO +J1n2BDqILpeusEzCOIoEDBDBPX8i4NnFGj+bwfkoop47zaSMwcWHFciTkkaFnGH6 +AlXc/oDBL8/6YXPSpE5ihw7oNzsoap12niHgUYwC91QLfPdlyCvuiysWDWlGWK5d +zqglATmt2Wvir+vF4OPnnxGS4DcqYGu6dOSpjF1Pl7QXxNBRKAQJnlLjxw66y1Wm +jFxf8NXXs1tphpdUdQPuIfmB/g0WzpaGSKpTfL+Ex5+m9FPm+X4Luoe8RfH6lB6P +NeDaCQSbZnEP9SYC+JZstmKE/Uwqyw== +-----END PRIVATE KEY----- diff --git a/libwvdrmengine/apex/com.google.android.widevine.pk8 b/libwvdrmengine/apex/com.google.android.widevine.pk8 new file mode 100644 index 00000000..3048fb53 Binary files /dev/null and b/libwvdrmengine/apex/com.google.android.widevine.pk8 differ diff --git a/libwvdrmengine/apex/com.google.android.widevine.rc b/libwvdrmengine/apex/com.google.android.widevine.rc new file mode 100644 index 00000000..381d0d69 --- /dev/null +++ b/libwvdrmengine/apex/com.google.android.widevine.rc @@ -0,0 +1,10 @@ +on apex-ready + mkdir /data/vendor/mediadrm 0770 media mediadrm + +service vendor.drm-widevine-hal /apex/com.google.android.widevine/bin/hw/android.hardware.drm-service.widevine + interface aidl android.hardware.drm::IDrmFactory/widevine + class hal + user media + group media mediadrm drmrpc system + ioprio rt 4 + task_profiles ProcessCapacityHigh \ No newline at end of file diff --git a/libwvdrmengine/apex/com.google.android.widevine.x509.pem b/libwvdrmengine/apex/com.google.android.widevine.x509.pem new file mode 100644 index 00000000..cada02c7 --- /dev/null +++ b/libwvdrmengine/apex/com.google.android.widevine.x509.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGJzCCBA+gAwIBAgIUCgS86NBn7DoD3rVyOm1iQAcTfPowDQYJKoZIhvcNAQEL +BQAwgaExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQH +DA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYDVQQLDAdBbmRy +b2lkMR0wGwYDVQQDDBRjb20uYW5kcm9pZC53aWRldmluZTEiMCAGCSqGSIb3DQEJ +ARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAgFw0yMjA4MzAyMDQ0MjhaGA80NzYwMDcy +NjIwNDQyOFowgaExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYw +FAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYDVQQL +DAdBbmRyb2lkMR0wGwYDVQQDDBRjb20uYW5kcm9pZC53aWRldmluZTEiMCAGCSqG +SIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBALj/ULAiAD/wWpFRG/MjnnCFB5qNaEzIPs9xXtxCtR8P2/q2 +05VXiEK2uXWUoFSsyfdV7q5wX+B9lRnHAdVRWf2odf7G0/aM9h7F/Vtr5H1Yb9JU +gFArhgcpbFVFxuFyjdTiIdJYFzZxoT/IctDHsGNAFscvcQtzOKk3Plg0Sr6105QE +AZqw3HqZDmnjijgAq1Sc3dznx0DI7B57d3mMMvL/JTQfiwbqKGK6VHFoMYlKUrmD +xDJ4g8iEnVG1RIyoxiGgItbNIQQjh44t9nndDFJC+wIcrv++t8wcYEvkI8wFkCuw +hG8v8/p0lpqo/OPQNBbWSaGOHVMmdQO2dQ5YEwBZOHJ23i654RI8VHgfhm4PH1B7 +b0Qav27Bs0YDJPY6PUrEFgTo2299r4qCfGChxXD6r0WeVqD6lTCkeV76NtQOmBnO +1ZQ2xOhj1NCn7SCHH7GHbHbgBI84sVerUWETtb9+ZpSLItgzho1Fb3XDp9u244kO +pUN5qgPFaipSe4LjZf0r9iXGMXYgQTi+OlUqrYcHR7Oz9SaWCQoqk7J92Pskd7dB +mFZF7ghuKAYSQf6jYCSux60OEtK6jN3sTJW50Zb7Qnz9U0nKoaN2xzmuHR41XKUq +Z0sh4EFYj3kcLeQhSnWPZ65s2t784uYfV1/0i5eHwxj6rLA+1VWQr4evf0k/AgMB +AAGjUzBRMB0GA1UdDgQWBBQqjWyCvgqoov7Ko/eidxfa9+TBJzAfBgNVHSMEGDAW +gBQqjWyCvgqoov7Ko/eidxfa9+TBJzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4ICAQA+sElhd7fMrhtWNaxFajWqhtDjfg2lxRjl4txYITyMC6ITtvuD +3Wi2c9VxDQj3x8M7L1eWEfq5pZOgzrm1wqhgKc0jbpdplm4QdfatdsDWVGPauxmK +C2ZGpPsHwIXgzZ0Zj9gi8Lk6xVN2HAS2aDsaOWhmT1mwkDwW9oMpEQK2ZGA7YHgH +/HsvolI5BAO9XDqdBUMi9+VwfMNGeCSfc1iMb+kDZbVThMHI4yKf6ikIuGgjr0En +G0Q0/ME38vN0c3LWz+Xgy2oHPEEn2NAOAdFSA4NpjR/BEkZk1rJb1jyyfsuFnKbF +0MkrNxnUfsn1tUxdGBT13+BEOMNGB30PoV4U6PsKkH4juFJ0LraSzWpggFy6YGFi +qOJ8hgwrmdC5mWxSDmi4GfeoUacsSppBld1H4lUAwbpJykbr1cNI6ZzuaO6o01DB +u2FmqVEAnItMhTeR0uOsiNJUPX8l/GmpxS7Uh2gzGaTHRPzReCGNVzcGIvez4OEQ +mRNFjdmNjAVGph+Pa2mqj+n7aItgOmPWKArtrGaNxPTgvWV/8GAQanfhwNN3NgPn +wtRdQtwXYv365DnRu3RHmOtQkAZcOOeYybFTntSxnylVvaSJds+4+K7mhQulr1oY +vqbbKP1DY8WOFBVjURDX7BiJDM1EnOOpWdEGbpVL7D1vx/hhvFSWbWm5BQ== +-----END CERTIFICATE----- diff --git a/libwvdrmengine/apex/com.google.android.widevine.xml b/libwvdrmengine/apex/com.google.android.widevine.xml new file mode 100644 index 00000000..cc21f325 --- /dev/null +++ b/libwvdrmengine/apex/com.google.android.widevine.xml @@ -0,0 +1,22 @@ + + + + + android.hardware.drm + 1 + IDrmFactory/widevine + + \ No newline at end of file diff --git a/libwvdrmengine/apex/file_contexts b/libwvdrmengine/apex/file_contexts new file mode 100644 index 00000000..4a6b094a --- /dev/null +++ b/libwvdrmengine/apex/file_contexts @@ -0,0 +1,3 @@ +(/.*)? u:object_r:vendor_file:s0 +/bin/hw/android\.hardware\.drm-service\.widevine u:object_r:hal_drm_widevine_exec:s0 +/etc(/.*)? u:object_r:vendor_configs_file:s0 \ No newline at end of file diff --git a/libwvdrmengine/apex/linker.config.json b/libwvdrmengine/apex/linker.config.json new file mode 100644 index 00000000..ccf5e05e --- /dev/null +++ b/libwvdrmengine/apex/linker.config.json @@ -0,0 +1,3 @@ +{ + "permittedPaths": ["/vendor/${LIB}"] +} \ No newline at end of file diff --git a/libwvdrmengine/cdm/Android.bp b/libwvdrmengine/cdm/Android.bp index dae4e43e..ca3cb2c8 100644 --- a/libwvdrmengine/cdm/Android.bp +++ b/libwvdrmengine/cdm/Android.bp @@ -77,5 +77,4 @@ cc_library_static { ], proprietary: true, - } diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index af144e1d..ca7bd98a 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -42,6 +42,7 @@ using namespace wvoec3; using video_widevine::ProvisioningResponse; using wvcdm::kLevel3; using wvcdm::kLevelDefault; +using namespace std; namespace { @@ -931,7 +932,19 @@ class Adapter { return result; } if (level1_library_ == nullptr) { - level1_library_ = dlopen(library_name.c_str(), RTLD_NOW); + vector library_paths = {"/vendor/", "/system/", "/odm/"}; + string sub_dir; + #if __LP64__ + sub_dir = "lib64/"; + #else + sub_dir = "lib/"; + #endif + + for (auto& path : library_paths) { + level1_library_ = dlopen((path + sub_dir + library_name).c_str(), RTLD_NOW); + if (level1_library_) break; + } + if (level1_library_ == nullptr) { LOGW("Could not load %s. Falling back to L3. %s", library_name.c_str(), dlerror()); diff --git a/libwvdrmengine/level3/Android.bp b/libwvdrmengine/level3/Android.bp index 49a179d1..238bab65 100644 --- a/libwvdrmengine/level3/Android.bp +++ b/libwvdrmengine/level3/Android.bp @@ -74,5 +74,4 @@ cc_library_static { proprietary: true, owner: "widevine", - } diff --git a/libwvdrmengine/manifest_android.hardware.drm-service-lazy.widevine.xml b/libwvdrmengine/manifest_android.hardware.drm-service-lazy.widevine.xml new file mode 100644 index 00000000..cc21f325 --- /dev/null +++ b/libwvdrmengine/manifest_android.hardware.drm-service-lazy.widevine.xml @@ -0,0 +1,22 @@ + + + + + android.hardware.drm + 1 + IDrmFactory/widevine + + \ No newline at end of file