From 249404a8df4b1440f0fa3e8bca9f3c694807af77 Mon Sep 17 00:00:00 2001 From: Kyle Zhang Date: Wed, 14 Sep 2022 04:12:24 +0000 Subject: [PATCH] Add widevine vendor apex Bug: 243699259 Change-Id: Ie1ff0aa9c82f19e0c5412508ac6b67d9083c0cab --- libwvdrmengine/Android.bp | 8 +- libwvdrmengine/apex/Android.bp | 74 ++++++++++++++++++ libwvdrmengine/apex/apex_manifest.json | 4 + .../com.google.android.widevine.avbpubkey | Bin 0 -> 1032 bytes .../apex/com.google.android.widevine.pem | 52 ++++++++++++ .../apex/com.google.android.widevine.pk8 | Bin 0 -> 2376 bytes .../apex/com.google.android.widevine.rc | 10 +++ .../apex/com.google.android.widevine.x509.pem | 35 +++++++++ .../apex/com.google.android.widevine.xml | 22 ++++++ libwvdrmengine/apex/file_contexts | 3 + libwvdrmengine/apex/linker.config.json | 3 + libwvdrmengine/cdm/Android.bp | 1 - .../core/src/oemcrypto_adapter_dynamic.cpp | 15 +++- libwvdrmengine/level3/Android.bp | 1 - ...oid.hardware.drm-service-lazy.widevine.xml | 22 ++++++ 15 files changed, 241 insertions(+), 9 deletions(-) create mode 100644 libwvdrmengine/apex/Android.bp create mode 100644 libwvdrmengine/apex/apex_manifest.json create mode 100644 libwvdrmengine/apex/com.google.android.widevine.avbpubkey create mode 100644 libwvdrmengine/apex/com.google.android.widevine.pem create mode 100644 libwvdrmengine/apex/com.google.android.widevine.pk8 create mode 100644 libwvdrmengine/apex/com.google.android.widevine.rc create mode 100644 libwvdrmengine/apex/com.google.android.widevine.x509.pem create mode 100644 libwvdrmengine/apex/com.google.android.widevine.xml create mode 100644 libwvdrmengine/apex/file_contexts create mode 100644 libwvdrmengine/apex/linker.config.json create mode 100644 libwvdrmengine/manifest_android.hardware.drm-service-lazy.widevine.xml 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 0000000000000000000000000000000000000000..e748b67dde2d107bb5d94c392543493f17da113d GIT binary patch literal 1032 zcmV+j1o!&@01yD8n+5I8IJ#7$gb}X^P*#?RIIk&|_o^whmiy@>3ibF6U2yMRmguy7 zwe|cY#|o52XU2Yu2)sVG?FE?}wPaWt2uW^Ap9Fr&cRN*G*j z)CegXI_843IJG9sWr}`+lDmg#@2?iJ%Nee+l-8zEUZ_OLxr(m1F_@J5{`+ezS8HE8 zs!k+91?iKNhyV(A8cxygT}Y`qLw*(+{M~t$@)WLF$cXbxE4D1COwQj>9u_hRxsd&O z$DEal@9=C@t-q4=iT(L~5dxG|LN0o$J~U1jW*dwi>oZMh+RxIOJEp-3aYg;m z#krn{!w$9#QbLD`(18qCbw$~oLdjH=Cn9~fK^6x#xC}1$l6KI{XvzpI16jW$MNRzf z+8eq}tC`X*6TO%TV(`F700W@5UQzH(yevcu>hgdc8;hBwq6fU~XeV=&94htjodk~` zdzeT21!3(P)1em~Wq8ACMcUWP@KNs%9kV~WE-~WWXJ|%-#PG!<(=%h@r(!bjp``SsWwgEP+nA0}V%BYma;v&bO`F*-uJgW(h&#;&d6np#jV zN3vo(LR1`f!#aCYY1%x=Y(+G*U*<}#N2v@mc!c`q>!XTiC1h^826_z&&#H`@yK#1@ zYzPnyX+6YFc3dE+FNMQ^K2i_g)nO<(Ko^#NTXC(PF03EsUs8jJf_N5tv&Ojzde+Evu$erXD<0c1;*9Teq;gaR27 z@tF<|tlOu=-=&*P3wGU2Vz!Jqh8+&GOtgm46q^qsaKN@)LP4D58$^Vq9uYi_LsD-6 z%EsE=YVJ0ItZ-iJ0;|W8_$B7NA%kTx@8wHBV+4P1Yd6`HM2}zw=i>m_yL91~SDo#( z@eF5IyP;qrt=`NrlDdq5xcC0aE+ZK?Py7KxL=1yugWz(#`2n&c_%Kf&Q}dunGWXs#KlN5#*!#uZw= C&;5Y_ literal 0 HcmV?d00001 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----- +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 +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 0000000000000000000000000000000000000000..3048fb534312558fd80eb902d5853a59bf09791f GIT binary patch literal 2376 zcmV-O3Agqzf(b+d0RS)!1_>&LNQUwE--=#Dgprj0)heo0J#59up$6I z@LG{k8}lQcaD@k&jc82BKF@Jp+(NY<58L{-)0J0R#?$tU_8!IkTWjQfSZ~r)fKV%j2Pte-MaJQBjnv{H(pVQZaiKrRa?r=H zV?Y+iFL4WVIH@;2STst$wbPUY0h+MfdYKMszY$m||_cX^C5^8Y0? zABzU+C}O%)acD7#N>aIl#4>n;$b_9ywM2}l#v!00*3BUVBZrPH_Ice5QbPLz9IpSq zx6B-1OXMTW1&}MSgl{kN`gE3>sQly5G#1uLp^hC>CUpb0bq-h)09iP4cHSrjxl`y1vUivoF z4wxCv)s!~G=wsB-r|lqzAF+pQcHjh$II&l&QDGCczkX(viz3)FhK)sUb;GCIw&RHo zr9*kD1I218QhS2qW&JDmCB`v!AVE03I#nvIhX+Tqv-KvH2?{EcvVGY5BzLz#m{vvZ z2yQ3_5<&i>U?i@`tqu~>x{TfIOqIFOmit0{{ZmQGp`&)kIj$WZHC&}CXGIdB|yG-@T>5pqtM9LL zMyBdoy$9@Sla(pV=Rm>`&X|Kur+H@DG|m&nj!r3Ms5?|@&c7D^_#KlB2ikZ$O-kK) zEXp|cY%>Q>;4^V({7ayFGEPE%KJ`!VFH7`5J>d}ZbvMN<70{6Eg=q5`%9K4xb94cQa|;yIxo9d(M3;?ViQNz+Dgg z)?A^~_PHR4&cFMI{D@Fo<#cfmh9}b}J002dBS;&`%SGGAXeQR*BeNSAbKRvo(OlQ` z@lEU2RFb00IrDOh|Qg?){1}_{2)@pIl68EuCH^>Q|0dR^zmy$%kr9fglnOZ)5 zmpiAgC9^iT6-16@lPsf$01~Viqt7fy()Kvp#s&bE=Q* zvdm?y?g4a(uYwvyyzL!KVKCNCA;d#!@@M-Hdu8s6O!mjYU$84Hh|wVGDtn!7f&0NN z&=fH}_A4~XuXwB;`b1)e{Z-s@lhr$&cfQiWuKl5NaH2rpQMbqg!Ked!9H2v>L)`=H!fl!c~|gAJ!X1 zKH`!Ts7Kw9oFC0gJQtF)0$B^3LVI_4n;3{PKnrTzu~<l7zfI{j4-VGpVN9NgIPwoT>t6HVbz!SgXKZ8x`rZ(`8@sIVVKW{jg*O>vzD`*E_n z#`KreLV?6|0k%kI)H@Z9vqq-PGG=%=yw9RV>2q9}XI zIyd=8AedqHNJjz>b2BrF`9)NPa~?*&@4uvi!I-t9I>j(o-!eCKAc5fjaM-6kJJ zt5lMgqRtf6TPxhU?b?;rP{E)h3S$f1Ac)3|Xe72|fM8;nWitZyI3V)FAl(|5Teyb$ zI!im>cKv(@t+%$oG>jg5pb8@tn-xL(knQACur^h$E|U_zpKXa&%kQ7Jwvs#KrJT4N zzxL1cGr`#T!G6qNkd+e65dY{V^}`s)%gb-bk#aEXOBg=#9zMZs%P`w z&4w1I$z(}_f#^OFjM&#la1y>x5dTAECD`7I6JMn1E&z$*g-t-&XQgp)VN{0<+9*HG zAfA<5ozr+{Jo-X_v#gu+^sV9hJO9d(Ng0twlk+Fvm11a~%2&p`!=HI~Dg>Xih4yTo zsVPEmc`hv-8#eGqLBEK9;jqaO*O4Ipy1BRYF3np{(Lnztx7xAlBI(8Xgm;o!iQ6%V z7lQZ4+-*S?IT!!I6dq2*sh$YTT6=r%-!U~NhiNlG6GL})!E61OMDYTG0RaH01vwmI zkJP)++ZEI(WPeGU19;JeQQB{oQZquJJC+NmHT%lfT!^1IEm@%e>jHFXJpk4C8@+mu zE!)D!l7Cd=Yvmhwv6m1{ULHQT7V>tO`o23sr%$E(SS;aJQ%4SVqCv*T-tqB0A-2pyclT9 uM!6tG-O<)HZHigg3U`VT-C + + + + 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