From 97c6fd5055ba5c07a0cd633cf7fe84771b8736ba Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20G=C3=B3rny?= Date: Tue, 11 Feb 2020 08:04:26 +0100 Subject: [PATCH] dev-python/pyjwt: Fix tests, add py3.8 & pypy3 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Michał Górny --- .../pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch | 27 +++++++++ dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild | 56 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 dev-python/pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch create mode 100644 dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild diff --git a/dev-python/pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch b/dev-python/pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch new file mode 100644 index 000000000000..ebd9236c7994 --- /dev/null +++ b/dev-python/pyjwt/files/pyjwt-1.7.1-ecdsa-fix.patch @@ -0,0 +1,27 @@ +From 36a3f9bd0cc7029e5150b1931efbd62da975e8b9 Mon Sep 17 00:00:00 2001 +From: StefanBruens +Date: Mon, 21 Oct 2019 02:07:19 +0200 +Subject: [PATCH] Catch BadSignatureError raised by ecdsa 0.13.3 on + verification errors (#448) + +The new ecdsa no longer uses AssertionError when the signature is too long. +This happens in the test suite, where "123" is appended to the signature. + +Fixes #447 +--- + jwt/contrib/algorithms/py_ecdsa.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/jwt/contrib/algorithms/py_ecdsa.py b/jwt/contrib/algorithms/py_ecdsa.py +index bf0dea5..f1170a6 100644 +--- a/jwt/contrib/algorithms/py_ecdsa.py ++++ b/jwt/contrib/algorithms/py_ecdsa.py +@@ -56,5 +56,7 @@ def verify(self, msg, key, sig): + try: + return key.verify(sig, msg, hashfunc=self.hash_alg, + sigdecode=ecdsa.util.sigdecode_string) +- except AssertionError: ++ # ecdsa <= 0.13.2 raises AssertionError on too long signatures, ++ # ecdsa >= 0.13.3 raises BadSignatureError for verification errors. ++ except (AssertionError, ecdsa.BadSignatureError): + return False diff --git a/dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild b/dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild new file mode 100644 index 000000000000..1cb2f6e14153 --- /dev/null +++ b/dev-python/pyjwt/pyjwt-1.7.1-r1.ebuild @@ -0,0 +1,56 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +DISTUTILS_USE_SETUPTOOLS=rdepend +PYTHON_COMPAT=( python{2_7,3_{6,7,8}} pypy3 ) + +inherit distutils-r1 eutils + +MY_PN="PyJWT" +DESCRIPTION="JSON Web Token implementation in Python" +HOMEPAGE="https://github.com/progrium/pyjwt https://pypi.org/project/PyJWT/" +SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_PN}-${PV}.tar.gz" +S="${WORKDIR}"/${MY_PN}-${PV} + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~x86 ~amd64-linux ~x86-linux" + +RDEPEND="" +DEPEND=" + test? ( + >=dev-python/cryptography-1.4.0[${PYTHON_USEDEP}] + )" + +distutils_enable_tests pytest + +python_prepare_all() { + find . -name '__pycache__' -prune -exec rm -rf {} + || die + find . -name '*.pyc' -delete || die + + # enables coverage, we don't need that + rm setup.cfg || die + # kill tests using pycrypto that break with pycryptodome + sed -i -e '/has_pycrypto/s:True:False:' \ + tests/contrib/test_algorithms.py || die + + local PATCHES=( + "${FILESDIR}"/pyjwt-1.7.1-ecdsa-fix.patch + ) + + distutils-r1_python_prepare_all +} + +python_test() { + pytest -vv || die "Tests fail with ${EPYTHON}" +} + +pkg_postinst() { + elog "Available optional features:" + optfeature "cryptography" dev-python/cryptography + optfeature "flake8" dev-python/flake8{,-import-order} + + ewarn "flake8 feature requires 'pep8-naming' which is not packaged yet" +} -- 2.26.2