commit 424dfa61689637221ef70d2a9a4bf824933e4552 Author: Tristan Seligmann Date: Fri Jun 9 23:14:39 2017 +0200 Import python-cryptography_1.7.1-3~bpo8+1.debian.tar.xz [dgit import tarball python-cryptography 1.7.1-3~bpo8+1 python-cryptography_1.7.1-3~bpo8+1.debian.tar.xz] diff --git a/.git-dpm b/.git-dpm new file mode 100644 index 0000000..377fc85 --- /dev/null +++ b/.git-dpm @@ -0,0 +1,11 @@ +# see git-dpm(1) from git-dpm package +6fee9abaaa16550faaacf10e51053f36614a804b +6fee9abaaa16550faaacf10e51053f36614a804b +55816224b8c57c07982677ad261a11520141b97e +55816224b8c57c07982677ad261a11520141b97e +python-cryptography_1.7.1.orig.tar.gz +6ef868de80378546a42b3b49995d7017d33f03e5 +420673 +debianTag="debian/%e%v" +patchedTag="patched/%e%v" +upstreamTag="upstream/%e%u" diff --git a/changelog b/changelog new file mode 100644 index 0000000..779143c --- /dev/null +++ b/changelog @@ -0,0 +1,330 @@ +python-cryptography (1.7.1-3~bpo8+1) jessie-backports; urgency=medium + + * Rebuild for jessie-backports. + + -- Tristan Seligmann Fri, 09 Jun 2017 23:14:39 +0200 + +python-cryptography (1.7.1-3) unstable; urgency=medium + + * Apply patch 6e7ea2e7 from upstream to fix compilation against OpenSSL + 1.1.0f (closes: #863474). + + -- Tristan Seligmann Sun, 28 May 2017 04:20:33 +0200 + +python-cryptography (1.7.1-2) unstable; urgency=medium + + * Apply upstream patch from #3328 to fix test suite on 32-bit arches. + + -- Tristan Seligmann Mon, 19 Dec 2016 19:49:14 +0200 + +python-cryptography (1.7.1-1) unstable; urgency=medium + + * New upstream release. + + -- Tristan Seligmann Wed, 14 Dec 2016 07:59:21 +0200 + +python-cryptography (1.5.3-1) unstable; urgency=medium + + * New upstream release. + - Fixes a security issue where HKDF would generate a 0-length key when + asked for a short length key. Urgency medium, because no software in + Debian appears to be affected. + + -- Tristan Seligmann Tue, 08 Nov 2016 05:36:00 +0200 + +python-cryptography (1.5.2-1) unstable; urgency=medium + + * New upstream release. + - Fixes failure on OpenSSL 1.0.2j (closes: #839369) + + -- Tristan Seligmann Sat, 01 Oct 2016 17:26:32 +0200 + +python-cryptography (1.5-2) unstable; urgency=medium + + * Add missing test dependency on python{,3}-tz. + + -- Tristan Seligmann Sat, 10 Sep 2016 15:40:13 +0200 + +python-cryptography (1.5-1) unstable; urgency=medium + + * New upstream release. + - Compatible with OpenSSL 1.1.0 (closes: #828518). + * Version setuptools dependency. + + -- Tristan Seligmann Fri, 26 Aug 2016 18:25:12 +0200 + +python-cryptography (1.4-2) unstable; urgency=medium + + * Fix typo in overrides file. + * Add Breaks: on python{,3}-openssl because of incompatibilities between + older PyOpenSSL and Cryptography (see + https://github.com/pyca/pyopenssl/pull/406 for details). + + -- Tristan Seligmann Sat, 16 Jul 2016 07:12:08 +0200 + +python-cryptography (1.4-1) unstable; urgency=medium + + * New upstream release. + * Depend on a new enough dh-python (necessary to handle the python-cffi + mapping correctly) (closes: #827925; technically not present in + testing/unstable anyway). + + -- Tristan Seligmann Thu, 23 Jun 2016 00:26:35 +0200 + +python-cryptography (1.3.4-1~bpo8+2) jessie-backports; urgency=medium + + * Restore cffi workaround that is still necessary. + + -- Tristan Seligmann Wed, 22 Jun 2016 23:22:02 +0200 + +python-cryptography (1.3.4-1~bpo8+1) jessie-backports; urgency=medium + + * Rebuild for jessie-backports. + + -- Tristan Seligmann Mon, 20 Jun 2016 18:06:58 +0200 + +python-cryptography (1.3.4-1) unstable; urgency=medium + + * New upstream release. + * Remove some workarounds from rules that should no longer be necessary. + * Fix cffi build-dependency version (closes: #826204). + * Update py{,3}dist-overrides to get correct version bounds on + everything (closes: #821030). + + -- Tristan Seligmann Fri, 03 Jun 2016 15:20:10 +0200 + +python-cryptography (1.3.1-2) unstable; urgency=medium + + * Actually build and ship the Sphinx documentation (closes: #823375). + - The "nodoc" build profile is now supported. + * Bump Standards-Version to 3.9.8 (no changes). + + -- Tristan Seligmann Wed, 04 May 2016 04:50:24 +0200 + +python-cryptography (1.3.1-1) unstable; urgency=medium + + * New upstream release. + + -- Tristan Seligmann Wed, 06 Apr 2016 22:49:34 +0200 + +python-cryptography (1.2.3-1) unstable; urgency=medium + + * New upstream release. + + -- Tristan Seligmann Sat, 05 Mar 2016 05:40:58 +0200 + +python-cryptography (1.2.2-3) unstable; urgency=medium + + * Add autopkgtest and support "nocheck" profile. + * Bump Standards-Version to 3.9.7 (no changes). + * Turn on "bindnow" hardening option. + + -- Tristan Seligmann Mon, 22 Feb 2016 02:29:44 +0200 + +python-cryptography (1.2.2-2) unstable; urgency=medium + + * Import a0bef9dfde0e94bd1a01db1b4fa51632ac842ee7 from upstream: fixes + memory corruption in test suite (probably only affects 32-bit + architectures). + + -- Tristan Seligmann Mon, 08 Feb 2016 20:44:24 +0200 + +python-cryptography (1.2.2-1) unstable; urgency=medium + + * New upstream version. + * Switch to https in Vcs-Git. + + -- Tristan Seligmann Thu, 04 Feb 2016 07:28:12 +0200 + +python-cryptography (1.2.1-1) unstable; urgency=medium + + * New upstream version. + + -- Tristan Seligmann Sat, 23 Jan 2016 04:19:44 +0200 + +python-cryptography (1.1.1-1~bpo8+1) jessie-backports; urgency=medium + + * Rebuild for jessie-backports. + + -- Tristan Seligmann Mon, 18 Jan 2016 21:05:27 +0200 + +python-cryptography (1.1.1-1) unstable; urgency=medium + + * New upstream release. + + -- Tristan Seligmann Tue, 24 Nov 2015 22:52:31 +0200 + +python-cryptography (1.1-1) unstable; urgency=medium + + * New upstream release. + - Add new testing dependencies (pyasn1_modules and hypothesis). + + -- Tristan Seligmann Thu, 29 Oct 2015 09:13:24 +0200 + +python-cryptography (1.0.2-1) unstable; urgency=medium + + * New upstream release. + - Fix a potential security issue when running Python in -O mode. + + -- Tristan Seligmann Mon, 28 Sep 2015 06:36:07 +0200 + +python-cryptography (1.0.1-4) unstable; urgency=medium + + * Remove cffi from requires.txt after dh_python[23] runs + (closes: #799628). + + -- Tristan Seligmann Mon, 21 Sep 2015 01:28:46 +0200 + +python-cryptography (1.0.1-3) unstable; urgency=medium + + * Drop cffi pydist overrides, as cffi now ships pydist files which are + important not to override due to ABI versioning. + + -- Tristan Seligmann Sat, 19 Sep 2015 00:23:26 +0200 + +python-cryptography (1.0.1-2) unstable; urgency=medium + + * Fix build-dependencies and pydist-overrides to make sure the correct + versioned dependencies are used everywhere (closes: #799077). + + -- Tristan Seligmann Thu, 17 Sep 2015 16:35:29 +0200 + +python-cryptography (1.0.1-1) unstable; urgency=medium + + * New upstream release. + + -- Tristan Seligmann Wed, 09 Sep 2015 12:31:22 +0200 + +python-cryptography (1.0-2) unstable; urgency=medium + + * Upload to unstable. + + -- Tristan Seligmann Sun, 30 Aug 2015 01:42:07 +0200 + +python-cryptography (1.0-1) experimental; urgency=medium + + * New upstream release. + - Requires at least cffi 1.1. + * Ship pydist files for cryptography. + + -- Tristan Seligmann Thu, 13 Aug 2015 10:18:48 +0200 + +python-cryptography (0.9.3-1) unstable; urgency=low + + * New upstream release (closes: #789768). + * Drop unneeded python3-enum34 dependency (Python versions earlier than + 3.4 were dropped in jessie; restore this dependency if backporting to + wheezy or before; closes: #793615). + + -- Tristan Seligmann Sun, 26 Jul 2015 13:04:14 +0200 + +python-cryptography (0.8.2-3) unstable; urgency=medium + + * Add needs-root for autopkgtest (via patch from Matthias Klose in + Ubuntu). + * Remove unnecessary versioned build-depends. + * Remove unnecessary control field prefixes. + + -- Tristan Seligmann Tue, 12 May 2015 15:09:49 +0200 + +python-cryptography (0.8.2-2) unstable; urgency=medium + + * Reupload to unstable (no changes, closes: #783585). + + -- Tristan Seligmann Tue, 28 Apr 2015 16:30:16 +0200 + +python-cryptography (0.8.2-1) experimental; urgency=low + + * New upstream release. + - Fixed a race condition when initializing the OpenSSL or CommonCrypto + backends in a multi-threaded scenario. + * Relax libssl-dev dependency as all versions currently in Debian should + be compatible (closes: #780715). + + -- Tristan Seligmann Sat, 11 Apr 2015 04:01:24 +0200 + +python-cryptography (0.8-1) experimental; urgency=low + + * New upstream release. + + -- Tristan Seligmann Mon, 09 Mar 2015 01:58:33 +0200 + +python-cryptography (0.7.2-1) experimental; urgency=low + + * New upstream release. + + -- Tristan Seligmann Fri, 16 Jan 2015 16:19:19 +0200 + +python-cryptography (0.7.1-1) experimental; urgency=low + + * New upstream release. + + -- Tristan Seligmann Mon, 29 Dec 2014 03:53:14 +0200 + +python-cryptography (0.7-1) experimental; urgency=medium + + * New upstream release. + - Fix FTBFS with OpenSSL in experimental due to missing SSL3 + support (closes: #772842). + + -- Tristan Seligmann Thu, 18 Dec 2014 16:36:42 +0200 + +python-cryptography (0.6.1-1) unstable; urgency=medium + + * New upstream release. + - Fixes FTBFS with OpenSSL 1.0.1j caused by API change (closes: #765544). + - No other upstream changes that affect Debian. + * Bump Standard-Version to 3.9.6 (no changes). + + -- Tristan Seligmann Thu, 16 Oct 2014 06:45:38 +0200 + +python-cryptography (0.6-1) unstable; urgency=medium + + * New upstream release. + - Copy .egg-info into build directory so entry points can be found by the + tests. + + -- Tristan Seligmann Tue, 30 Sep 2014 06:33:34 +0200 + +python-cryptography (0.5.4-1) unstable; urgency=medium + + * New upstream release. + + -- Tristan Seligmann Thu, 21 Aug 2014 19:45:02 +0200 + +python-cryptography (0.5.2-1) unstable; urgency=medium + + * New upstream release. + * Add python{,3}-cryptography-vectors to Suggests. + + -- Tristan Seligmann Sun, 27 Jul 2014 18:07:42 +0200 + +python-cryptography (0.4-2) unstable; urgency=medium + + * Enable test suite at build time. + * Enable test suite via autopkgtest. + + -- Tristan Seligmann Mon, 16 Jun 2014 21:29:23 +0200 + +python-cryptography (0.4-1) unstable; urgency=medium + + * New upstream release. + + -- Tristan Seligmann Sat, 03 May 2014 18:00:14 +0200 + +python-cryptography (0.3-1) unstable; urgency=medium + + * New upstream release. + - The test vectors are now in a separate top-level package (will be + packaged in a separate source package, see #742911). + - Upstream now ships their docs (the previous release was accidentally + missing the docs); these are placed in a new Debian package + python-cryptography-doc. + + -- Tristan Seligmann Sat, 29 Mar 2014 01:01:04 +0200 + +python-cryptography (0.2-1) unstable; urgency=medium + + * Initial release. (Closes: #737356) + + -- Tristan Seligmann Fri, 21 Feb 2014 18:36:35 +0200 diff --git a/compat b/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +9 diff --git a/control b/control new file mode 100644 index 0000000..e865aed --- /dev/null +++ b/control @@ -0,0 +1,114 @@ +Source: python-cryptography +Maintainer: Tristan Seligmann +Section: python +Priority: optional +Build-Depends: + debhelper (>= 9.20141010), + dh-python (>= 2.20151103), + dpkg-dev (>= 1.17.14), + libssl-dev, + python-all-dev, + python-cffi (>= 1.4.1~), + python-cryptography-vectors (<< 1.7.2~) , + python-cryptography-vectors (>= 1.7.1~) , + python-enum34, + python-hypothesis , + python-idna (>= 2.0~), + python-ipaddress, + python-iso8601 , + python-pretend , + python-pyasn1 (>= 0.1.8~), + python-pyasn1-modules , + python-pytest (>= 2.9.0) , + python-setuptools (>= 11.3~), + python-six (>= 1.4.1~), + python-sphinx-rtd-theme , + python-tz , + python3-all-dev, + python3-cffi (>= 1.4.1~), + python3-cryptography-vectors (<< 1.7.2~) , + python3-cryptography-vectors (>= 1.7.1~) , + python3-hypothesis , + python3-idna (>= 2.0~), + python3-iso8601 , + python3-pretend , + python3-pyasn1 (>= 0.1.8~), + python3-pyasn1-modules , + python3-pytest (>= 2.9.0) , + python3-setuptools (>= 11.3~), + python3-six (>= 1.4.1~), + python3-sphinx , + python3-tz , +Standards-Version: 3.9.8 +Homepage: https://cryptography.io/ +Vcs-Git: https://anonscm.debian.org/git/python-modules/packages/python-cryptography.git +Vcs-Browser: https://anonscm.debian.org/cgit/python-modules/packages/python-cryptography.git +X-Python-Version: >= 2.6 +X-Python3-Version: >= 3.4 +Testsuite: autopkgtest + +Package: python-cryptography +Architecture: any +Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends} +Breaks: python-openssl (<< 16.0.0) +Suggests: python-cryptography-doc, python-cryptography-vectors +Description: Python library exposing cryptographic recipes and primitives (Python 2) + The cryptography library is designed to be a "one-stop-shop" for + all your cryptographic needs in Python. + . + As an alternative to the libraries that came before it, cryptography + tries to address some of the issues with those libraries: + - Lack of PyPy and Python 3 support. + - Lack of maintenance. + - Use of poor implementations of algorithms (i.e. ones with known + side-channel attacks). + - Lack of high level, "Cryptography for humans", APIs. + - Absence of algorithms such as AES-GCM. + - Poor introspectability, and thus poor testability. + - Extremely error prone APIs, and bad defaults. + . + This package contains the Python 2 version of cryptography. + +Package: python3-cryptography +Architecture: any +Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends} +Breaks: python3-openssl (<< 16.0.0) +Suggests: python-cryptography-doc, python3-cryptography-vectors +Description: Python library exposing cryptographic recipes and primitives (Python 3) + The cryptography library is designed to be a "one-stop-shop" for + all your cryptographic needs in Python. + . + As an alternative to the libraries that came before it, cryptography + tries to address some of the issues with those libraries: + - Lack of PyPy and Python 3 support. + - Lack of maintenance. + - Use of poor implementations of algorithms (i.e. ones with known + side-channel attacks). + - Lack of high level, "Cryptography for humans", APIs. + - Absence of algorithms such as AES-GCM. + - Poor introspectability, and thus poor testability. + - Extremely error prone APIs, and bad defaults. + . + This package contains the Python 3 version of cryptography. + +Package: python-cryptography-doc +Architecture: all +Depends: ${misc:Depends}, ${sphinxdoc:Depends} +Section: doc +Build-Profiles: +Description: Python library exposing cryptographic recipes and primitives (documentation) + The cryptography library is designed to be a "one-stop-shop" for + all your cryptographic needs in Python. + . + As an alternative to the libraries that came before it, cryptography + tries to address some of the issues with those libraries: + - Lack of PyPy and Python 3 support. + - Lack of maintenance. + - Use of poor implementations of algorithms (i.e. ones with known + side-channel attacks). + - Lack of high level, "Cryptography for humans", APIs. + - Absence of algorithms such as AES-GCM. + - Poor introspectability, and thus poor testability. + - Extremely error prone APIs, and bad defaults. + . + This package contains the documentation for cryptography. diff --git a/copyright b/copyright new file mode 100644 index 0000000..9f95f29 --- /dev/null +++ b/copyright @@ -0,0 +1,51 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: cryptography +Upstream-Contact: cryptography-dev@python.org +Source: http://cryptography.io/ +License: Apache + +Files: * +Copyright: 2013-2014 The cryptography developers +License: Apache + +Files: debian/* +Copyright: 2014 Tristan Seligmann +License: Expat + +License: Apache + 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. + . + On Debian systems, the full text of the Apache license, Version 2.0 + can be found in the file + `/usr/share/common-licenses/Apache-2.0'. + +License: Expat + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/patches/0001-add-memory-limit-check-for-scrypt.patch b/patches/0001-add-memory-limit-check-for-scrypt.patch new file mode 100644 index 0000000..9559218 --- /dev/null +++ b/patches/0001-add-memory-limit-check-for-scrypt.patch @@ -0,0 +1,78 @@ +From ced38e7dcb84cd11039fe6b7c078593c2a4968ff Mon Sep 17 00:00:00 2001 +From: Paul Kehrer +Date: Sun, 18 Dec 2016 18:36:05 -0600 +Subject: add memory limit check for scrypt + +fixes #3323 +--- + src/cryptography/hazmat/backends/openssl/backend.py | 8 +++++--- + tests/hazmat/primitives/test_scrypt.py | 19 +++++++++++++++++++ + 2 files changed, 24 insertions(+), 3 deletions(-) + +diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py +index 71063c1..9e101a3 100644 +--- a/src/cryptography/hazmat/backends/openssl/backend.py ++++ b/src/cryptography/hazmat/backends/openssl/backend.py +@@ -143,6 +143,7 @@ class Backend(object): + self._cipher_registry = {} + self._register_default_ciphers() + self.activate_osrandom_engine() ++ self._scrypt_mem_limit = sys.maxsize // 2 + + def openssl_assert(self, ok): + return binding._openssl_assert(self._lib, ok) +@@ -1894,9 +1895,10 @@ class Backend(object): + + def derive_scrypt(self, key_material, salt, length, n, r, p): + buf = self._ffi.new("unsigned char[]", length) +- res = self._lib.EVP_PBE_scrypt(key_material, len(key_material), salt, +- len(salt), n, r, p, sys.maxsize // 2, +- buf, length) ++ res = self._lib.EVP_PBE_scrypt( ++ key_material, len(key_material), salt, len(salt), n, r, p, ++ self._scrypt_mem_limit, buf, length ++ ) + self.openssl_assert(res == 1) + return self._ffi.buffer(buf)[:] + +diff --git a/tests/hazmat/primitives/test_scrypt.py b/tests/hazmat/primitives/test_scrypt.py +index 49b304e..450eb82 100644 +--- a/tests/hazmat/primitives/test_scrypt.py ++++ b/tests/hazmat/primitives/test_scrypt.py +@@ -22,10 +22,28 @@ vectors = load_vectors_from_file( + os.path.join("KDF", "scrypt.txt"), load_nist_vectors) + + ++def _skip_if_memory_limited(memory_limit, params): ++ # Memory calc adapted from OpenSSL (URL split over 2 lines, thanks PEP8) ++ # https://github.com/openssl/openssl/blob/6286757141a8c6e14d647ec733634a ++ # e0c83d9887/crypto/evp/scrypt.c#L189-L221 ++ blen = int(params["p"]) * 128 * int(params["r"]) ++ vlen = 32 * int(params["r"]) * (int(params["n"]) + 2) * 4 ++ memory_required = blen + vlen ++ if memory_limit < memory_required: ++ pytest.skip("Test exceeds Scrypt memory limit. " ++ "This is likely a 32-bit platform.") ++ ++ ++def test_memory_limit_skip(): ++ with pytest.raises(pytest.skip.Exception): ++ _skip_if_memory_limited(1000, {"p": 16, "r": 64, "n": 1024}) ++ ++ + @pytest.mark.requires_backend_interface(interface=ScryptBackend) + class TestScrypt(object): + @pytest.mark.parametrize("params", vectors) + def test_derive(self, backend, params): ++ _skip_if_memory_limited(backend._scrypt_mem_limit, params) + password = params["password"] + work_factor = int(params["n"]) + block_size = int(params["r"]) +@@ -77,6 +95,7 @@ class TestScrypt(object): + + @pytest.mark.parametrize("params", vectors) + def test_verify(self, backend, params): ++ _skip_if_memory_limited(backend._scrypt_mem_limit, params) + password = params["password"] + work_factor = int(params["n"]) + block_size = int(params["r"]) diff --git a/patches/0002-fix-compilation-on-1.1.0f-3603.patch b/patches/0002-fix-compilation-on-1.1.0f-3603.patch new file mode 100644 index 0000000..450ea37 --- /dev/null +++ b/patches/0002-fix-compilation-on-1.1.0f-3603.patch @@ -0,0 +1,33 @@ +From 6fee9abaaa16550faaacf10e51053f36614a804b Mon Sep 17 00:00:00 2001 +From: Paul Kehrer +Date: Thu, 25 May 2017 12:26:08 -0500 +Subject: fix compilation on 1.1.0f (#3603) + +--- + src/_cffi_src/openssl/asn1.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/_cffi_src/openssl/asn1.py b/src/_cffi_src/openssl/asn1.py +index 4afca3d..5074248 100644 +--- a/src/_cffi_src/openssl/asn1.py ++++ b/src/_cffi_src/openssl/asn1.py +@@ -77,8 +77,6 @@ int ASN1_INTEGER_set(ASN1_INTEGER *, long); + /* ASN1 TIME */ + ASN1_TIME *ASN1_TIME_new(void); + void ASN1_TIME_free(ASN1_TIME *); +-ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *, +- ASN1_GENERALIZEDTIME **); + ASN1_TIME *ASN1_TIME_set(ASN1_TIME *, time_t); + + /* ASN1 UTCTIME */ +@@ -112,6 +110,10 @@ int ASN1_STRING_to_UTF8(unsigned char **, ASN1_STRING *); + long ASN1_ENUMERATED_get(ASN1_ENUMERATED *); + int i2a_ASN1_INTEGER(BIO *, ASN1_INTEGER *); + ++/* This became const ASN1_TIME in 1.1.0f */ ++ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *, ++ ASN1_GENERALIZEDTIME **); ++ + ASN1_UTF8STRING *ASN1_UTF8STRING_new(void); + void ASN1_UTF8STRING_free(ASN1_UTF8STRING *); + diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..5264b4c --- /dev/null +++ b/patches/series @@ -0,0 +1,2 @@ +0001-add-memory-limit-check-for-scrypt.patch +0002-fix-compilation-on-1.1.0f-3603.patch diff --git a/py3dist-overrides b/py3dist-overrides new file mode 100644 index 0000000..71ba444 --- /dev/null +++ b/py3dist-overrides @@ -0,0 +1,4 @@ +idna python3-idna; PEP386 +pyasn1 python3-pyasn1; PEP386 +six python3-six; PEP386 +setuptools python3-setuptools; PEP386 diff --git a/pydist-overrides b/pydist-overrides new file mode 100644 index 0000000..e07296a --- /dev/null +++ b/pydist-overrides @@ -0,0 +1,6 @@ +idna python-idna; PEP386 +pyasn1 python-pyasn1; PEP386 +six python-six; PEP386 +setuptools python-setuptools; PEP386 +enum34 python-enum34; PEP386 +ipaddress python-ipaddress; PEP386 diff --git a/python-cryptography-doc.docs b/python-cryptography-doc.docs new file mode 100644 index 0000000..1618a62 --- /dev/null +++ b/python-cryptography-doc.docs @@ -0,0 +1,2 @@ +.pybuild/docs/* +README.rst diff --git a/python-cryptography.pydist b/python-cryptography.pydist new file mode 100644 index 0000000..ea7cd3c --- /dev/null +++ b/python-cryptography.pydist @@ -0,0 +1 @@ +cryptography python-cryptography; PEP386 diff --git a/python3-cryptography.pydist b/python3-cryptography.pydist new file mode 100644 index 0000000..470c333 --- /dev/null +++ b/python3-cryptography.pydist @@ -0,0 +1 @@ +cryptography python3-cryptography; PEP386 diff --git a/rules b/rules new file mode 100755 index 0000000..7b80cf1 --- /dev/null +++ b/rules @@ -0,0 +1,51 @@ +#!/usr/bin/make -f + +export DEB_BUILD_MAINT_OPTIONS=hardening=+bindnow + +export PYBUILD_NAME=cryptography +export PYBUILD_TEST_PYTEST=1 +export PYBUILD_TEST_ARGS={dir}/tests/ +export PYBUILD_BEFORE_TEST=cp -R {dir}/src/${PYBUILD_NAME}.egg-info {build_dir} +export PYBUILD_AFTER_TEST=rm -r {build_dir}/.hypothesis + + +ifeq ($(filter nodoc,$(DEB_BUILD_PROFILES)),) +SPHINXDOC=,sphinxdoc +else +SPHINXDOC= +endif +%: + dh $@ --with python2,python3$(SPHINXDOC) --buildsystem=pybuild + + +override_dh_auto_clean: + dh_auto_clean + rm -rf cryptography/hazmat/bindings/__pycache__ \ + cryptography/hazmat/primitives/__pycache__ + + +ifeq ($(filter nodoc,$(DEB_BUILD_PROFILES)),) +override_dh_auto_build: + dh_auto_build + PYTHONPATH=. \ + http_proxy='127.0.0.1:9' \ + https_proxy='127.0.0.1:9' \ + sphinx-build -N -b html docs/ $(CURDIR)/.pybuild/docs/html/ +endif + + +override_dh_python2: + dh_python2 + # Remove "cffi" from requires after dh_python has seen it (so that the + # pydist file takes effect), because it is not actually needed at + # runtime. + sed -i '/^cffi/d' \ + debian/python-cryptography/usr/lib/python*/dist-packages/cryptography*.egg-info/requires.txt + + +override_dh_python3: + dh_python3 + rm -rf debian/python3-cryptography/usr/lib/python3.? + # See comment in override_dh_python2 + sed -i '/^cffi/d' \ + debian/python3-cryptography/usr/lib/python3/dist-packages/cryptography*.egg-info/requires.txt diff --git a/source/format b/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/tests/control b/tests/control new file mode 100644 index 0000000..75b9148 --- /dev/null +++ b/tests/control @@ -0,0 +1,20 @@ +Test-Command: for p in $(pyversions -s) $(py3versions -s); do $p -m pytest tests/; done +Depends: + python-all, + python-cryptography, + python-cryptography-vectors, + python-hypothesis, + python-iso8601, + python-pretend, + python-pyasn1-modules, + python-pytest, + python-tz, + python3-all, + python3-cryptography, + python3-cryptography-vectors, + python3-hypothesis, + python3-iso8601, + python3-pretend, + python3-pyasn1-modules, + python3-pytest, + python3-tz, diff --git a/upstream/signing-key.asc b/upstream/signing-key.asc new file mode 100644 index 0000000..681ea17 --- /dev/null +++ b/upstream/signing-key.asc @@ -0,0 +1,394 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +2pOVp6XTYdUW +=HDSq +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mQENBFIirTsBCADAeRXlWJkJ9SaKmR6+ox2aXOF3TCyfgtoJpf6WvBxbtoEpD//m +5789KO9lPHQrJGR34E36kOkmkHfrLLtmnELCx/UNvLm3VuW31rL3RvTTrxe1Fyft +5JQyYF/WSm6Bnj9yu8fVJUhSGe12SvODD7053bY1bSleMX5I6tGeIXJtih8b5u9u +1WNv0rxZqGLKaYTzgmtNcyKGK9jLKtkRwPivpjgrjeGQ+OHf/mwFY+HEOQUw+Cj4 +5FsCo6jvj+n4r9mYu+Ut6zDOx0cWf66QhZvawDyB2TSSulJsudUETDmoJJ5X9PqH +F/bHBdzc5I6HYy+CezSvDmjC+3DnIB//nXMPABEBAAG0JVBhdWwgS2VocmVyIDxw +YXVsLmwua2VocmVyQGdtYWlsLmNvbT6JATgEEwECACIFAlIirTsCGwMGCwkIBwMC +BhUIAgkKCwQWAgMBAh4BAheAAAoJECNa5fEp+e2YnM0H/i8bU3gQ/lMGli97Puui +Sm5es3AwE+dC/ubaAB8Hcdm8UH50uOI6JcmLYYcjglnFEQSDzrKg649Dcvjx7hDN +XoCx5V6dC8LcTVES5gGrRr/+ZXtsCVZn2TcLUMQ9bq1yb3jAYxOmWQ1rUvu0Kq+Z +1j9IERKpt3MZcXBlOxHP6zIhaaerLLRn5+SjCHCAZQYsKh9f6fMoRvbmaLyKrLBn +/n9/esn1b0joWEphwOER8UF5fckqDopovGojDXyNEKGGkXTkWtLk69AcaXcBI97X +SqYUmzvnHcAPilpKmfdnvcGPrS/wSY/F4T71aeQ+1QoE83CfavNMQ09g4rETSr3e +Vlq5AQ0EUiKtOwEIANRWXywm/B46dy2paG/dd1ApwdX3siIfnCKXEsLB1iTA5/HW +BZ5+hHRYmI24RyBj9lVhS9UJzpKZE+KLOZRFwMGGp3TxntInflamuI3iC1N7XqCz +gLMFJdHPO60LctbvOHTOx1Scb+AycmymF1HuUFbj1jlYUkwRPOiPvHHWkYQlfeUP +MPFo/M7Ae5FxKA4PYfJRQl62wsBRNE5k7IwOmstyUUnDZXIxpB+wNvpxQpAvWT8B +IyAvtlrkrE53frfyd0KUOR0iSHNcWcUL0L6XvsaOYb4i20bP7YE5XoVzzANbXTa1 +wVtz2yNoI7/8BLb2NMIacykUxryYtu6E9cmnwkkAEQEAAYkBHwQYAQIACQUCUiKt +OwIbDAAKCRAjWuXxKfntmM/yB/91f/17kL4iAS05WgM1xvgmyYJ3FOgP3hyqD5Ur +YkkmoFoF+r6bfBlW8AeOawYTvXinKdv9sM6q0EmiO+iqAuRRfaXZWCDqZdEpy+lv +Ev3jhVyuf8O+d8VEILsKia0cmzn6F1UMdp3E9TDgXr1/hMCuABvbfWzEkRQrGHc2 +cWLXXxko3mykZMLkl0MPGjmzEh87RE55hLk5HroXaMtdyz1knfybVnXgOUxMuqc+ ++wj499FP1jHvTEEknRopxsMe59+CdsoFBR9xs0Ets7K011P4CMKZZAXVwxF551QL +xnqe0Tn1t76rxPJKpyvUM+WtakEVPffuQqSkU8dIJgwwXrZo +=3pQn +-----END PGP PUBLIC KEY BLOCK----- diff --git a/watch b/watch new file mode 100644 index 0000000..8b608e8 --- /dev/null +++ b/watch @@ -0,0 +1,3 @@ +version=3 +opts=uversionmangle=s/(rc|a|b|c)/~$1/,pgpsigurlmangle=s/$/.asc/ \ +http://pypi.debian.net/cryptography/cryptography-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))