From d2ef0fee71bec00aa53093a7bd618db155b25ed7 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 14 Sep 2022 23:48:12 +0200 Subject: [PATCH] nightly: support OpenSSL 3.0 with Paramiko OpenSSL 3.0 changed the default output format from PKCS#1 to PKCS#8, which paramiko does not support. https://www.openssl.org/docs/man3.0/man1/openssl-rsa.html#traditional https://github.com/paramiko/paramiko/issues/1015 --- .gitlab-ci.yml | 1 + MANIFEST.in | 1 + fdroidserver/nightly.py | 20 +++++-- tests/aosp_testkey_debug.keystore | Bin 0 -> 2557 bytes tests/nightly.TestCase | 91 ++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 tests/aosp_testkey_debug.keystore diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f3964b93..887a0855 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -245,6 +245,7 @@ black: tests/lint.TestCase tests/metadata.TestCase tests/ndk-release-checksums.py + tests/nightly.TestCase tests/rewritemeta.TestCase diff --git a/MANIFEST.in b/MANIFEST.in index 3435bee0..010563c3 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -43,6 +43,7 @@ include locale/zh_Hant/LC_MESSAGES/fdroidserver.po include makebuildserver include README.md include tests/androguard_test.py +include tests/aosp_testkey_debug.keystore include tests/bad-unicode-*.apk include tests/build.TestCase include tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index 4d0d80ad..7ca8b863 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -25,6 +25,7 @@ import os import paramiko import platform import shutil +import ssl import subprocess import sys import tempfile @@ -47,7 +48,11 @@ DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US' NIGHTLY = '-nightly' -def _ssh_key_from_debug_keystore(keystore=KEYSTORE_FILE): +def _ssh_key_from_debug_keystore(keystore=None): + if keystore is None: + # set this here so it can be overridden in the tests + # TODO convert this to a class to get rid of this nonsense + keystore = KEYSTORE_FILE tmp_dir = tempfile.mkdtemp(prefix='.') privkey = os.path.join(tmp_dir, '.privkey') key_pem = os.path.join(tmp_dir, '.key.pem') @@ -94,10 +99,17 @@ def _ssh_key_from_debug_keystore(keystore=KEYSTORE_FILE): ], env={'LC_ALL': 'C.UTF-8'}, ) + + # OpenSSL 3.0 changed the default output format from PKCS#1 to + # PKCS#8, which paramiko does not support. + # https://www.openssl.org/docs/man3.0/man1/openssl-rsa.html#traditional + # https://github.com/paramiko/paramiko/issues/1015 + openssl_rsa_cmd = ['openssl', 'rsa'] + if ssl.OPENSSL_VERSION_INFO[0] >= 3: + openssl_rsa_cmd += ['-traditional'] subprocess.check_call( - [ - 'openssl', - 'rsa', + openssl_rsa_cmd + + [ '-in', key_pem, '-out', diff --git a/tests/aosp_testkey_debug.keystore b/tests/aosp_testkey_debug.keystore new file mode 100644 index 0000000000000000000000000000000000000000..ecbdcb4dc59dfbacd33f24d6f1690900c6ee16b0 GIT binary patch literal 2557 zcmd6o`8(A88pr25Gsf1C21Ajd5n1XxcCr+aeG3nh9D^a-sIg`rYKlB0Tcf6IMGx7F z!r0f;v6X$-NJu1GH6A^ub57TF&L8mna9{Uzzwgfv_vdrH@7IU5%vy#(Ake)4{t8|K z$&Kvi>E=ds3H0zLUfI(_)jo=wK_F}Z7z6(f@*ucm5da*Jf${+W8w4H$UtknmK#bJ! zhV)t`=U>ek<&Q8?=!q``vPP3p5JNv%tF$wt>5xnOR`a^_KV~WK6m~TuG#Wp;KM9vn z<`{Hx!n+xc$i~ov&a2^MYfA z@j`!x<_Pl|kHsos$>-#>(~Qz3Walt&n83262lUZTD6Q)=CO0AI?nJ%w`sCmFgx6Fn zoDj~@>g~l&>i1a@Xn8}r&g3f>Gcwf8h+;HSowZ}RP9r?ztsb}?$P(qvXws`l<0-ik zR>OR}f3oPIG~U~j-XC`DDRFE14e^S~eeOZh&VenbK5C;FshH&-Ieu?mpeWAUbxBg4 zxREfSVljn1INlJ>s~8YFt^#dKDdx#%Ce5st%X8g*ep*po(O_d5m*9!dyumB|+xIbN zw$I^yOOR~m%Bb}y%7Dd{IqU7!N|N)tH})AX4VvqdqzB875fB{GyVAXP9zqZ1y4Xe%)Yo%_^G z35AfH+MPh#hdWXlmV;c|LyHKc$yiSC5tq_4B0_hzjk>MP1e4;j-K{UY#glzA1U*s+`HZe(1zcIxs?Po?p^y^(XQPqh}@4T&ozvun%41?L#58 zpEiT;lZq^_IS$~nwE94Gl@+ZP8?5kj#ml*`0(oM?h?^z{^@aPT8O&%#O(|K&J{#vR zXTUw^%SG0RYbnsIoicF2e7XA)NAK%}IM#07=?H9JlksrGbtvsJObJTjUa2UeK8fnn z97GOLgZ1RZ=s2mYcvjZ=1_9^VImZ)Ytxh!sD6wnc!}h;9d!weayR1a#R_QX`%EZpK zr{4Xv0hI<=GatEl%f(XwL+JeB> zM@jdt>t8zvIz z%r|&d4qg6mZ)bYZx2X$Re5pr|&>2&?eOd8P#^7O`Gp$HyKzo%4i*s9^ZIyMbU-Hkv z&MV7wwANmX{mvGq^Y&`9mRNzn^n7eW>($tLM{G?N2kO!vUcoNcpYK;zvEY}K*AA|d zs)DLj3A_-gR?e0Cz0*HUuXW1@iqUI8a=A1Rqa#KQhUafD;7ye~9cTq?unJDS+Tf!q|BdgK_)! zh`XnAq1aFVi_HI4xc^6i{a29yG5?u?6A(oGr246!`M9f}FL)S@1l2$V1$7XosHmiZ zMPAXp55gn%&s2Q&r%Aa7HI;S+7#*s|qzm#N_)Np0;{ zK8vC=yNHB>_q7GDy!%5)`CR!vOr9EEnzF<0uy*icz4`ZACT`Vptek$P-Rg`-!J+zc z@M%aBT#sQ&7OFP*A}&Dvq?ThTk92O3Dex~uj=lPnmed*8sB5ufqq zYOKAmAy6UdhO(%ixYH>eY&iPG!^;LqvFWJkVt+n!)>e_P#XED;Z(^xC(R02drzbJw zC?-{hMvl;gv&b}2+T`70wXAY6oBPYzJZi&P;}2YqC9XxIKQC-#7;{} z&Y+l&%9a-(T*TRxzz0$~fAo*QDUBe75&eJ9WK%NpC>eiKC&c`+ar=H;1qEjVVF0lE zt3CGiZ_ge8B(x+wVbQYXG@F%B&q!eja6Uc=FO@Hl(^P38!7s2o@*2j8ug{a;Wal9J zU_9S7lg5kT5XLcmIS!Mi$YVdz>oP&ULr>QL0tBQQ3qqXQ*IjK)by}*aA4