{ "info": { "author": "shuxin", "author_email": "shuxin@users.noreply.github.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: BSD", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "\r\n\r\nApkverify\r\n==========================\r\n[![image](https://img.shields.io/pypi/v/apkverify.svg)](https://pypi.org/project/apkverify/)\r\n[![image](https://img.shields.io/pypi/l/apkverify.svg)](https://pypi.org/project/apkverify/)\r\n[![image](https://img.shields.io/pypi/pyversions/apkverify.svg)](https://pypi.org/project/apkverify/)\r\n[![image](https://img.shields.io/github/contributors/shuxin/apk-signature-verify.svg)](https://github.com/shuxin/apk-signature-verify/graphs/contributors)\r\n\r\nJar Signature / APK Signature v2 verify with pure python (support rsa dsa ecdsa)\r\n\r\n- require asn1crypto\r\n- support verification for jar signature(apk signature v1),\r\n- support verification for apk signature v2,\r\n- support algorithm in rsa(md5/sha1/sha256/sha512),\r\n- support algorithm in rsa+pss(sha256/sha512),\r\n- support algorithm in dsa(sha1/sha256/sha512),\r\n- support algorithm in ecdsa(sha256/sha512),\r\n- support python2/python3,\r\n- without build,\r\n- without openssl/cryptography/M2Crypto,\r\n- without any binary file like so/pyd/dll/dylib,\r\n\r\nBasic usage (command line):\r\n```\r\n$ python -m apkverify --path \"path.apk\"\r\n```\r\n\r\nRead the test.py for how to use.\r\n\r\n```python\r\n#!/usr/bin/python\r\n# -*- coding: utf-8 -*-\r\n\r\nfrom __future__ import unicode_literals, print_function\r\n\r\nimport os\r\nimport sys\r\nimport zipfile\r\n\r\ntry:\r\n from .apkverify import ApkSignature\r\nexcept (ValueError, ImportError):\r\n from apkverify import ApkSignature\r\n\r\nif __name__ == '__main__':\r\n test_dir = os.path.join(os.path.abspath('.'), 'apksig')\r\n log = open(test_dir + '.py%d.txt' % (sys.version_info[0]), 'wb')\r\n for filename in os.listdir(test_dir):\r\n file_path = os.path.join(test_dir, filename)\r\n if not (os.path.isfile(file_path) and zipfile.is_zipfile(file_path)):\r\n continue\r\n print('=' * 79)\r\n print('File: {}'.format(file_path))\r\n log_verify = None\r\n try:\r\n a = ApkSignature(os.path.abspath(file_path))\r\n print(a.apkpath)\r\n signature_version = a.is_sigv2()\r\n v_auto = a.verify() # auto check version\r\n v_ver1 = a.verify(1) # force check version 1\r\n v_ver2 = a.verify(2) # force check version 2\r\n print('Verify: {}, {}, {}, {}'.format(signature_version, v_auto, v_ver1, v_ver2))\r\n log_verify = v_ver1, v_ver2\r\n for line in a.errors:\r\n print('Error: {}'.format(line))\r\n all_certs = a.all_certs()\r\n sig_certs = a.get_certs()\r\n all_chain = a.get_chains()\r\n print(all_certs)\r\n print(sig_certs)\r\n print(all_chain)\r\n all_certs = a.all_certs(readable=True)\r\n sig_certs = a.get_certs(readable=True)\r\n all_chain = a.get_chains(readable=True)\r\n print(all_certs)\r\n print(sig_certs)\r\n print(all_chain)\r\n for one_chain in all_chain: # \u7b7e\u540d\u4fe1\u606f(\u4e00\u822c\u53ea\u6709\u4e00\u4e2a)\r\n print('\\t[chain]'.ljust(79, '-'))\r\n for i in range(0, len(one_chain)): # \u7b7e\u540d\u7684\u8bc1\u4e66\u94fe()\r\n cert_prt, cert_sub, cert_iss = one_chain[i]\r\n print('\\t\\t[%2d] [certprt]' % i, cert_prt)\r\n print('\\t\\t\\t [subject]', cert_sub)\r\n print('\\t\\t\\t [ issuer]', cert_iss)\r\n except Exception as e:\r\n import logging\r\n\r\n logging.exception(e)\r\n print(e)\r\n log_verify = type(e)\r\n log.write(('%s\\t%s\\n' % (log_verify, filename)).encode('utf8'))\r\n log.flush()\r\n log.close()\r\n'''\r\n(False, False)\tempty-unsigned.apk\r\n(False, False)\tgolden-aligned-in.apk\r\n(True, True)\tgolden-aligned-out.apk\r\n(True, False)\tgolden-aligned-v1-out.apk\r\n(True, True)\tgolden-aligned-v1v2-out.apk\r\n(False, True)\tgolden-aligned-v2-out.apk\r\n(False, False)\tgolden-legacy-aligned-in.apk\r\n(True, True)\tgolden-legacy-aligned-out.apk\r\n(True, False)\tgolden-legacy-aligned-v1-out.apk\r\n(True, True)\tgolden-legacy-aligned-v1v2-out.apk\r\n(False, True)\tgolden-legacy-aligned-v2-out.apk\r\n(True, True)\tgolden-rsa-minSdkVersion-1-out.apk\r\n(True, True)\tgolden-rsa-minSdkVersion-18-out.apk\r\n(True, True)\tgolden-rsa-minSdkVersion-24-out.apk\r\n(True, True)\tgolden-rsa-out.apk\r\n(False, False)\tgolden-unaligned-in.apk\r\n(True, True)\tgolden-unaligned-out.apk\r\n(True, False)\tgolden-unaligned-v1-out.apk\r\n(True, True)\tgolden-unaligned-v1v2-out.apk\r\n(False, True)\tgolden-unaligned-v2-out.apk\r\n(True, False)\tmismatched-compression-method.apk\r\n(True, True)\toriginal.apk\r\n(True, True)\ttargetSandboxVersion-2.apk\r\n(True, True)\ttwo-signers-second-signer-v2-broken.apk\r\n(True, True)\ttwo-signers.apk\r\n(False, False)\tunsigned-targetSandboxVersion-2.apk\r\n(True, False)\tv1-only-empty.apk\r\n(True, False)\tv1-only-max-sized-eocd-comment.apk\r\n(True, False)\tv1-only-pkcs7-cert-bag-first-cert-not-used.apk\r\n(True, False)\tv1-only-targetSandboxVersion-2.apk\r\n(True, False)\tv1-only-two-signers.apk\r\n(True, False)\tv1-only-with-cr-in-entry-name.apk\r\n(True, False)\tv1-only-with-dsa-sha1-1.2.840.10040.4.1-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha1-1.2.840.10040.4.1-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha1-1.2.840.10040.4.1-3072.apk\r\n(True, False)\tv1-only-with-dsa-sha1-1.2.840.10040.4.3-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha1-1.2.840.10040.4.3-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha1-1.2.840.10040.4.3-3072.apk\r\n(True, False)\tv1-only-with-dsa-sha224-1.2.840.10040.4.1-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha224-1.2.840.10040.4.1-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha224-1.2.840.10040.4.1-3072.apk\r\n(True, False)\tv1-only-with-dsa-sha224-2.16.840.1.101.3.4.3.1-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha224-2.16.840.1.101.3.4.3.1-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha224-2.16.840.1.101.3.4.3.1-3072.apk\r\n(True, False)\tv1-only-with-dsa-sha256-1.2.840.10040.4.1-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha256-1.2.840.10040.4.1-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha256-1.2.840.10040.4.1-3072.apk\r\n(True, False)\tv1-only-with-dsa-sha256-2.16.840.1.101.3.4.3.2-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha256-2.16.840.1.101.3.4.3.2-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha256-2.16.840.1.101.3.4.3.2-3072.apk\r\n(True, False)\tv1-only-with-dsa-sha384-2.16.840.1.101.3.4.3.3-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha384-2.16.840.1.101.3.4.3.3-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha384-2.16.840.1.101.3.4.3.3-3072.apk\r\n(True, False)\tv1-only-with-dsa-sha512-2.16.840.1.101.3.4.3.4-1024.apk\r\n(True, False)\tv1-only-with-dsa-sha512-2.16.840.1.101.3.4.3.4-2048.apk\r\n(True, False)\tv1-only-with-dsa-sha512-2.16.840.1.101.3.4.3.4-3072.apk\r\n(True, False)\tv1-only-with-ecdsa-sha1-1.2.840.10045.2.1-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha1-1.2.840.10045.2.1-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha1-1.2.840.10045.2.1-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha1-1.2.840.10045.4.1-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha1-1.2.840.10045.4.1-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha1-1.2.840.10045.4.1-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha224-1.2.840.10045.2.1-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha224-1.2.840.10045.2.1-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha224-1.2.840.10045.2.1-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha224-1.2.840.10045.4.3.1-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha224-1.2.840.10045.4.3.1-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha224-1.2.840.10045.4.3.1-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha256-1.2.840.10045.2.1-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha256-1.2.840.10045.2.1-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha256-1.2.840.10045.2.1-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha256-1.2.840.10045.4.3.2-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha256-1.2.840.10045.4.3.2-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha256-1.2.840.10045.4.3.2-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha384-1.2.840.10045.2.1-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha384-1.2.840.10045.2.1-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha384-1.2.840.10045.2.1-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha384-1.2.840.10045.4.3.3-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha384-1.2.840.10045.4.3.3-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha384-1.2.840.10045.4.3.3-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha512-1.2.840.10045.2.1-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha512-1.2.840.10045.2.1-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha512-1.2.840.10045.2.1-p521.apk\r\n(True, False)\tv1-only-with-ecdsa-sha512-1.2.840.10045.4.3.4-p256.apk\r\n(True, False)\tv1-only-with-ecdsa-sha512-1.2.840.10045.4.3.4-p384.apk\r\n(True, False)\tv1-only-with-ecdsa-sha512-1.2.840.10045.4.3.4-p521.apk\r\n(True, False)\tv1-only-with-lf-in-entry-name.apk\r\n(True, False)\tv1-only-with-nul-in-entry-name.apk\r\n(True, False)\tv1-only-with-rsa-1024-cert-not-der.apk\r\n(True, False)\tv1-only-with-rsa-1024-cert-not-der2.apk\r\n(True, False)\tv1-only-with-rsa-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.1-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.1-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.1-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.1-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.1-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.1-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.4-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.4-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.4-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.4-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.4-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-md5-1.2.840.113549.1.1.4-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.1-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.1-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.1-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.1-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.1-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.1-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.5-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.5-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.5-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.5-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.5-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha1-1.2.840.113549.1.1.5-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.1-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.1-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.1-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.1-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.1-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.1-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.14-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.14-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.14-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.14-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.14-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha224-1.2.840.113549.1.1.14-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.1-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.1-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.1-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.1-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.1-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.1-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.11-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.11-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.11-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.11-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.11-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha256-1.2.840.113549.1.1.11-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.1-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.1-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.1-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.1-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.1-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.1-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.12-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.12-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.12-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.12-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.12-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha384-1.2.840.113549.1.1.12-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.1-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.1-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.1-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.1-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.1-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.1-8192.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.13-1024.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.13-16384.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.13-2048.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.13-3072.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.13-4096.apk\r\n(True, False)\tv1-only-with-rsa-pkcs1-sha512-1.2.840.113549.1.1.13-8192.apk\r\n(False, False)\tv1-only-with-signed-attrs-missing-content-type.apk\r\n(False, False)\tv1-only-with-signed-attrs-missing-digest.apk\r\n(False, False)\tv1-only-with-signed-attrs-multiple-good-digests.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-good-signerInfo2-good.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-missing-content-type-signerInfo2-good.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-missing-digest-signerInfo2-good.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-multiple-good-digests-signerInfo2-good.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-wrong-content-type-signerInfo2-good.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-wrong-digest-signerInfo2-good.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-wrong-order-signerInfo2-good.apk\r\n(True, False)\tv1-only-with-signed-attrs-signerInfo1-wrong-signature-signerInfo2-good.apk\r\n(False, False)\tv1-only-with-signed-attrs-wrong-content-type.apk\r\n(False, False)\tv1-only-with-signed-attrs-wrong-digest.apk\r\n(False, False)\tv1-only-with-signed-attrs-wrong-order.apk\r\n(False, False)\tv1-only-with-signed-attrs-wrong-signature.apk\r\n(False, False)\tv1-only-with-signed-attrs.apk\r\n(False, False)\tv1-sha1-sha256-manifest-and-sf-with-sha1-wrong-in-manifest.apk\r\n(False, False)\tv1-sha1-sha256-manifest-and-sf-with-sha1-wrong-in-sf.apk\r\n(False, False)\tv1-sha1-sha256-manifest-and-sf-with-sha256-wrong-in-manifest.apk\r\n(False, False)\tv1-sha1-sha256-manifest-and-sf-with-sha256-wrong-in-sf.apk\r\n(True, False)\tv1-sha1-sha256-manifest-and-sf.apk\r\n(True, False)\tv1-sha1-sha256-manifest-and-sha1-sf.apk\r\n(True, False)\tv1-with-apk-sig-block-but-without-apk-sig-scheme-v2-block.apk\r\n(False, False)\tv2-only-apk-sig-block-size-mismatch.apk\r\n(False, False)\tv2-only-cert-and-public-key-mismatch.apk\r\n\tv2-only-garbage-between-cd-and-eocd.apk\r\n(False, True)\tv2-only-max-sized-eocd-comment.apk\r\n(False, True)\tv2-only-missing-classes.dex.apk\r\n(False, False)\tv2-only-no-certs-in-sig.apk\r\n(False, False)\tv2-only-signatures-and-digests-block-mismatch.apk\r\n(False, True)\tv2-only-targetSandboxVersion-2.apk\r\n(False, True)\tv2-only-targetSandboxVersion-3.apk\r\n\tv2-only-truncated-cd.apk\r\n(False, True)\tv2-only-two-signers-second-signer-no-sig.apk\r\n(False, True)\tv2-only-two-signers-second-signer-no-supported-sig.apk\r\n(False, True)\tv2-only-two-signers.apk\r\n(False, True)\tv2-only-unknown-pair-in-apk-sig-block.apk\r\n(False, False)\tv2-only-with-dsa-sha256-1024-sig-does-not-verify.apk\r\n(False, True)\tv2-only-with-dsa-sha256-1024.apk\r\n(False, True)\tv2-only-with-dsa-sha256-2048.apk\r\n(False, True)\tv2-only-with-dsa-sha256-3072.apk\r\n(False, False)\tv2-only-with-ecdsa-sha256-p256-digest-mismatch.apk\r\n(False, False)\tv2-only-with-ecdsa-sha256-p256-sig-does-not-verify.apk\r\n(False, True)\tv2-only-with-ecdsa-sha256-p256.apk\r\n(False, True)\tv2-only-with-ecdsa-sha256-p384.apk\r\n(False, True)\tv2-only-with-ecdsa-sha256-p521.apk\r\n(False, True)\tv2-only-with-ecdsa-sha512-p256.apk\r\n(False, True)\tv2-only-with-ecdsa-sha512-p384.apk\r\n(False, True)\tv2-only-with-ecdsa-sha512-p521.apk\r\n(False, False)\tv2-only-with-ignorable-unsupported-sig-algs.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha256-1024-cert-not-der.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha256-1024.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha256-16384.apk\r\n(False, False)\tv2-only-with-rsa-pkcs1-sha256-2048-sig-does-not-verify.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha256-2048.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha256-3072.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha256-4096.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha256-8192.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha512-1024.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha512-16384.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha512-2048.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha512-3072.apk\r\n(False, False)\tv2-only-with-rsa-pkcs1-sha512-4096-digest-mismatch.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha512-4096.apk\r\n(False, True)\tv2-only-with-rsa-pkcs1-sha512-8192.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha256-1024.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha256-16384.apk\r\n(False, False)\tv2-only-with-rsa-pss-sha256-2048-sig-does-not-verify.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha256-2048.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha256-3072.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha256-4096.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha256-8192.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha512-16384.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha512-2048.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha512-3072.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha512-4096.apk\r\n(False, True)\tv2-only-with-rsa-pss-sha512-8192.apk\r\n(False, False)\tv2-only-wrong-apk-sig-block-magic.apk\r\n(True, False)\tv2-stripped-with-ignorable-signing-schemes.apk\r\n(True, False)\tv2-stripped.apk\r\n\tweird-compression-method.apk\r\n'''\r\n```", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/shuxin/apk-signature-verify", "keywords": "apk", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "apkverify", "package_url": "https://pypi.org/project/apkverify/", "platform": "any", "project_url": "https://pypi.org/project/apkverify/", "project_urls": { "Homepage": "https://github.com/shuxin/apk-signature-verify" }, "release_url": "https://pypi.org/project/apkverify/0.1.1.0/", "requires_dist": null, "requires_python": "", "summary": "Jar Signature / APK Signature v2 verify with pure python (support rsa dsa ecdsa).", "version": "0.1.1.0" }, "last_serial": 4548263, "releases": { "0.1.0.3": [ { "comment_text": "", "digests": { "md5": "03ecbc19d5d98b6d7031e625ec0d1268", "sha256": "0b50800f4950eeb2e8f3ae56d8b4235a80c14e39f7d6754c3bd3ddf917ffc2b2" }, "downloads": -1, "filename": "apkverify-0.1.0.3.tar.gz", "has_sig": false, "md5_digest": "03ecbc19d5d98b6d7031e625ec0d1268", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16746, "upload_time": "2018-05-12T07:04:06", "url": "https://files.pythonhosted.org/packages/d6/8d/0dd3b5b177a9053d6236b0b13087162f51a87fb01c2a30fb7feacba1eb6c/apkverify-0.1.0.3.tar.gz" } ], "0.1.1.0": [ { "comment_text": "", "digests": { "md5": "f1cfea6a243ef5b5995450dc1598c722", "sha256": "0e11a91b77f5471514d9da45c3369adc032ce6c2083a60cd0bd90f7426eec8a2" }, "downloads": -1, "filename": "apkverify-0.1.1.0.tar.gz", "has_sig": false, "md5_digest": "f1cfea6a243ef5b5995450dc1598c722", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28543, "upload_time": "2018-11-30T18:55:42", "url": "https://files.pythonhosted.org/packages/5b/ae/2cee33c86c4cb5e81d732ad8f3f78ccff3106bc5b8c8969467f3c3541dd4/apkverify-0.1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f1cfea6a243ef5b5995450dc1598c722", "sha256": "0e11a91b77f5471514d9da45c3369adc032ce6c2083a60cd0bd90f7426eec8a2" }, "downloads": -1, "filename": "apkverify-0.1.1.0.tar.gz", "has_sig": false, "md5_digest": "f1cfea6a243ef5b5995450dc1598c722", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28543, "upload_time": "2018-11-30T18:55:42", "url": "https://files.pythonhosted.org/packages/5b/ae/2cee33c86c4cb5e81d732ad8f3f78ccff3106bc5b8c8969467f3c3541dd4/apkverify-0.1.1.0.tar.gz" } ] }