From fa657ce720074b2b2537c8ab5d295b3fb41e12ea Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 15 Mar 2017 21:23:44 +0100 Subject: [PATCH] move update.signjar() to common so it can also be used in signindex --- fdroidserver/common.py | 23 +++++++++++++++++++++++ fdroidserver/signindex.py | 14 +------------- fdroidserver/update.py | 27 ++------------------------- tests/common.TestCase | 20 ++++++++++++++++++++ tests/signindex/guardianproject.jar | Bin 0 -> 15703 bytes tests/signindex/testy.jar | Bin 0 -> 22091 bytes 6 files changed, 46 insertions(+), 38 deletions(-) create mode 100644 tests/signindex/guardianproject.jar create mode 100644 tests/signindex/testy.jar diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 34267787..17ea4c2f 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -387,6 +387,29 @@ def write_password_file(pwtype, password=None): config[pwtype + 'file'] = filename +def signjar(jar): + ''' + sign a JAR file with Java's jarsigner. + + This does use old hashing algorithms, i.e. SHA1, but that's not + broken yet for file verification. This could be set to SHA256, + but then Android < 4.3 would not be able to verify it. + https://code.google.com/p/android/issues/detail?id=38321 + ''' + args = [config['jarsigner'], '-keystore', config['keystore'], + '-storepass:file', config['keystorepassfile'], + '-digestalg', 'SHA1', '-sigalg', 'SHA1withRSA', + jar, config['repo_keyalias']] + if config['keystore'] == 'NONE': + args += config['smartcardoptions'] + else: # smardcards never use -keypass + args += ['-keypass:file', config['keypassfile']] + p = FDroidPopen(args) + if p.returncode != 0: + logging.critical("Failed to sign %s!" % jar) + sys.exit(1) + + def get_local_metadata_files(): '''get any metadata files local to an app's source repo diff --git a/fdroidserver/signindex.py b/fdroidserver/signindex.py index caf9adb3..658d4cb8 100644 --- a/fdroidserver/signindex.py +++ b/fdroidserver/signindex.py @@ -22,7 +22,6 @@ from argparse import ArgumentParser import logging from . import common -from .common import FDroidPopen config = None options = None @@ -56,18 +55,7 @@ def main(): unsigned = os.path.join(output_dir, 'index_unsigned.jar') if os.path.exists(unsigned): - args = [config['jarsigner'], '-keystore', config['keystore'], - '-storepass:file', config['keystorepassfile'], - '-digestalg', 'SHA1', '-sigalg', 'SHA1withRSA', - unsigned, config['repo_keyalias']] - if config['keystore'] == 'NONE': - args += config['smartcardoptions'] - else: # smardcards never use -keypass - args += ['-keypass:file', config['keypassfile']] - p = FDroidPopen(args) - if p.returncode != 0: - logging.critical("Failed to sign index") - sys.exit(1) + common.signjar(unsigned) os.rename(unsigned, os.path.join(output_dir, 'index.jar')) logging.info('Signed index in ' + output_dir) signed += 1 diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 47cdd915..19a13368 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1287,7 +1287,7 @@ def make_index_v1(apps, packages, repodir, repodict, requestsdict): jar_file = os.path.join(repodir, 'index-v1.jar') with zipfile.ZipFile(jar_file, 'w', zipfile.ZIP_DEFLATED) as jar: jar.write(index_file, json_name) - signjar(jar_file) + common.signjar(jar_file) os.remove(index_file) @@ -1540,7 +1540,7 @@ def make_index_v0(apps, apks, repodir, repodict, requestsdict): if os.path.exists(signed): os.remove(signed) else: - signjar(signed) + common.signjar(signed) # Copy the repo icon into the repo directory... icon_dir = os.path.join(repodir, 'icons') @@ -1548,29 +1548,6 @@ def make_index_v0(apps, apks, repodir, repodict, requestsdict): shutil.copyfile(config['repo_icon'], iconfilename) -def signjar(jar): - ''' - sign a JAR file with Java's jarsigner. - - This does use old hashing algorithms, i.e. SHA1, but that's not - broken yet for file verification. This could be set to SHA256, - but then Android < 4.3 would not be able to verify it. - https://code.google.com/p/android/issues/detail?id=38321 - ''' - args = [config['jarsigner'], '-keystore', config['keystore'], - '-storepass:file', config['keystorepassfile'], - '-digestalg', 'SHA1', '-sigalg', 'SHA1withRSA', - jar, config['repo_keyalias']] - if config['keystore'] == 'NONE': - args += config['smartcardoptions'] - else: # smardcards never use -keypass - args += ['-keypass:file', config['keypassfile']] - p = FDroidPopen(args) - if p.returncode != 0: - logging.critical("Failed to sign index") - sys.exit(1) - - def make_categories_txt(repodir, categories): '''Write a category list in the repo to allow quick access''' catdata = '' diff --git a/tests/common.TestCase b/tests/common.TestCase index 9e00904f..98939985 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -157,6 +157,26 @@ class CommonTest(unittest.TestCase): p = fdroidserver.common.FDroidPopen(commands, stderr_to_stdout=False) self.assertEqual(p.output, 'stdout message\n') + def test_signjar(self): + fdroidserver.common.config = None + config = fdroidserver.common.read_config(fdroidserver.common.options) + config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') + fdroidserver.common.config = config + + basedir = os.path.dirname(__file__) + tmpdir = os.path.join(basedir, '..', '.testfiles') + if not os.path.exists(tmpdir): + os.makedirs(tmpdir) + sourcedir = os.path.join(basedir, 'signindex') + testsdir = tempfile.mkdtemp(prefix='test_signjar', dir=tmpdir) + for f in ('testy.jar', 'guardianproject.jar',): + sourcefile = os.path.join(sourcedir, f) + testfile = os.path.join(testsdir, f) + shutil.copy(sourcefile, testsdir) + fdroidserver.common.signjar(testfile) + # these should be resigned, and therefore different + self.assertNotEqual(open(sourcefile, 'rb').read(), open(testfile, 'rb').read()) + if __name__ == "__main__": parser = optparse.OptionParser() diff --git a/tests/signindex/guardianproject.jar b/tests/signindex/guardianproject.jar new file mode 100644 index 0000000000000000000000000000000000000000..946c69ac07cd1f6b52f94dfc422aa122bc150f34 GIT binary patch literal 15703 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 literal 0 HcmV?d00001 diff --git a/tests/signindex/testy.jar b/tests/signindex/testy.jar new file mode 100644 index 0000000000000000000000000000000000000000..6d7dd3590ba268b583450c49eff524f615fcee19 GIT binary patch literal 22091 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