Skip to content

Commit dd9e090

Browse files
committed
Automatically check cryptography version
1 parent 8d122f1 commit dd9e090

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
-----BEGIN ENCRYPTED PRIVATE KEY-----
2+
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpDOLr9sNuTwCAggA
3+
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECIWEFMkTyS60BIIEyPvMPGyf1shr
4+
ql0UnZzMWDz/9bqdRIZe5N7F1qYjgZNms/QXVzZOQ2J9YwaLHbwpEv2QigfHXq/3
5+
nLyTm4HFyg3qpCqWa33A0r/v5B6WtjgYbuPePqpM2UV34CMGylkmhMVUUbs1X6j7
6+
ezwmipq/paOslokC0RYl16cQD/uLTD0usTDtWoEs3S4gbcGUj/b9Ll2urG9zBYwI
7+
faSWQcwcRgfYk/OZSbv6zNT74dYMAOW3mjsS/ackc/+h2XWFQSVjN7BBXamfCQ3C
8+
qE27Py85PP8Qt7MbHuoj8rMuoaQ3NIi++1RkW6cyFo5n+HBi7YYCP74loG1OCTN8
9+
H5StIi2aLbls9ZbQJHLM2+J1tBwJqIR/UogITESV++17ZVHfDLk8uaad7i6Kj+u5
10+
6vbruehnFqo5P80lZRuqHfGf/5v8Hbsve/zL24wdQ+tFDHaC6v+kiz9unnO/+k86
11+
9gph/WTly4N4wJhdxhoYxJLMdPcWk6AxA7ZsJ/mI9+t8iHdSOZY91FyN3sDlDB4C
12+
yLi8t1WP+VB9KfMjSN0AuULWrwwQ1YGRUsKaS9pxTy8MbXQ1OgXGGHzHKDm6vqyp
13+
Jow9wD8Ql+V7zPsNgBpeRWXzA5VS6nEyIuOolkJnNoC5d69/LtDaBn58TZQ4z1Ja
14+
wGXG6n9BeFrgwgH5X5kGslLDXZ71V/aT0HHoBbiAPWf90teccGJ5nVXv3kMaC/zc
15+
klzNCrQ2koFphQgW1bU/FZ46yd2rvlFo8wbxAwRieldZpkwRcFVKz+cRh4/QsTpl
16+
uPKtPpI0c2jgiSReNXi2kRlkOPg1UVHnapvv2yRUoq4NvzaOegSVJG1oe/XdLS02
17+
5JoDNajEcIvHQpLZL1ecQSwpge843mW4F5twm8/1MKY8G2CTXjKif77n3WVR2Tvp
18+
RdOm86TbIB4FpbLAqiN11A/8cLNfVmioQkNdULLELfKiOeQZABSMPJMVGVxgODN0
19+
nP31BMibPayqApLLEFIQbSLhZvWIJ5ircZ5XKPHeuqpnxFoeIwrGQuqHo6gvSp5J
20+
CPv4Pul43y0s3vxRpJAqmXO4aAzsPsrYGJiNckbD43OxRV9ZDDeD1Wrc4u82zQxo
21+
frSy5XhVPsKH1lFZ7l6te4Tkro4vMxRVu+W2acToJI6QZct0xrlp+ScmD/9CEOGU
22+
Wj5SN4Y8YW+UfeYhDAhntzruRx4HjdocbvwYsY9gAkim4P9AdiG6eeRUyU9GCUwd
23+
MrjMt5HUzsTQiIyN9jnv9yWNdYmzgJ2V0ZOwVHaEZhZnkgYoK0O/NXSg0FsPo5LU
24+
qdYncK+BMAGnEl/riaJRmnsIH29jKPjZDOvfo1+0UJM3+zPjYy4985+CH7xWGWnb
25+
NQFBtwiPyWzlDyV3119T4rY+Ad6z90vG4hgvpvue1Qcuaure8NwkUEEh1/d8PN20
26+
kP4vWhpDeHbO5R5byXlJMNzmgVm3mc2t6mA/ouUcMmUOTvjdYALXqgw9RgOsqkob
27+
DNjEK4VZUu3Vd6AsK+s796KTLgQvZhrcahoer/88j7Nu0PyQGrVN202IfmbjIwer
28+
NNcieLmok6r2k8GvyUYP51hpdkXO5j3BsrtBeq4xn3qxzOtEUL8ITZ/BU20+xJq6
29+
GoGDjvCSBpzesnQFlvUtEw==
30+
-----END ENCRYPTED PRIVATE KEY-----
31+
-----BEGIN CERTIFICATE-----
32+
MIIDbTCCAlWgAwIBAgIUHBH8mppwjLI2dFOQ7haLnd6iRjQwDQYJKoZIhvcNAQEL
33+
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
34+
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0yMDAxMDMxODE2MzlaGA8yMTk5
35+
MDYwODE4MTYzOVowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
36+
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN
37+
AQEBBQADggEPADCCAQoCggEBANMXamdgXR+0B2b6zt2nURcYcwC0YrqjvTH/ofF3
38+
MjUzZ1uKziPNxxAYrUY0O0zIcZWo9Aqfi10vS5oNya/aDrKoWxVRCsLltAV9dbLJ
39+
65zF7wbVE7ZnZ7Nknop+ytd1t1VNTlpbxgWdT6z/WTn4ydqH7Hlh0Ucu2Q3QGQL3
40+
G9He0kOMog4Y0myxP2xNGjLoig2kh60KEwtxbudOxVN4rLpqhT/1n/L5s+7rznKc
41+
cB4MRqPJMdycIYhTD2mfp/E9hDWRcVJY+9GlqzyxXFTsDsO1SzGgpMEjdO5mtc6N
42+
A0dd8fZQLt1BHLFJlpsuk5Fk40y7HtT3kYKUcD55Xd0pd6ECAwEAAaNTMFEwHQYD
43+
VR0OBBYEFKG65qd+cChhFLB8y4po+vL3HwxuMB8GA1UdIwQYMBaAFKG65qd+cChh
44+
FLB8y4po+vL3HwxuMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
45+
AAlEqWO8tGKprQrqfdZDsMyKyne+WYYA7RqRxYzKJ5j1zsPa4f7RKhLYzx6TqWK3
46+
keBc6aw9aeNYNqTBeDLGHRHRRwdHwwU5HdqowhE0sEQzOIJvs2JK5L+LcoSkTViy
47+
PzidZ0qoAHRluuFw8Ag9sahcQfao6rqJOFY/16KEjDthATGo/4mHRsuAM+xza+2m
48+
GbqJH/iO/q0lsPb3culm8aoJNxULTHrU5YWhuGvRypSYrfdL7RBkzW4VEt5LcRK6
49+
KcfmfHMrjPl/XxSSvrBmly7nYNH80DGSMRP/lnrQ8OS+hSiDy1KBaCcNhja5Dyzn
50+
K0dXlMGmWrnDMs8m+4cUoIM=
51+
-----END CERTIFICATE-----

tests/test_cryptography.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import configparser
2+
import os
3+
import re
4+
from unittest import TestCase
5+
import warnings
6+
import xml.etree.ElementTree as ET
7+
8+
import requests
9+
10+
from msal.application import _str2bytes
11+
12+
13+
latest_cryptography_version = ET.fromstring(
14+
requests.get("https://pypi.org/rss/project/cryptography/releases.xml").text
15+
).findall("./channel/item/title")[0].text
16+
17+
18+
def get_current_ceiling():
19+
parser = configparser.ConfigParser()
20+
parser.read("setup.cfg")
21+
for line in parser["options"]["install_requires"].splitlines():
22+
if line.startswith("cryptography"):
23+
match = re.search(r"<(\d+)", line)
24+
if match:
25+
return int(match.group(1))
26+
raise RuntimeError("Unable to find cryptography info from setup.cfg")
27+
28+
29+
class CryptographyTestCase(TestCase):
30+
31+
def test_should_be_run_with_latest_version_of_cryptography(self):
32+
import cryptography
33+
self.assertEqual(
34+
cryptography.__version__, latest_cryptography_version,
35+
"We are using cryptography {} but we should test with latest {} instead. "
36+
"Run 'pip install -U cryptography'.".format(
37+
cryptography.__version__, latest_cryptography_version))
38+
39+
def test_latest_cryptography_should_support_our_usage_without_warnings(self):
40+
with open(os.path.join(
41+
os.path.dirname(__file__), "certificate-with-password.pem")) as f:
42+
cert = f.read()
43+
with warnings.catch_warnings(record=True) as encountered_warnings:
44+
# The usage was copied from application.py
45+
from cryptography.hazmat.primitives import serialization
46+
from cryptography.hazmat.backends import default_backend
47+
unencrypted_private_key = serialization.load_pem_private_key(
48+
_str2bytes(cert),
49+
_str2bytes("password"),
50+
backend=default_backend(), # It was a required param until 2020
51+
)
52+
self.assertEqual(0, len(encountered_warnings),
53+
"Did cryptography deprecate the functions that we used?")
54+
55+
def test_ceiling_should_be_latest_cryptography_version_plus_three(self):
56+
expected_ceiling = int(latest_cryptography_version.split(".")[0]) + 3
57+
self.assertEqual(
58+
expected_ceiling, get_current_ceiling(),
59+
"Test passed with latest cryptography, so we shall bump ceiling to N+3={}, "
60+
"based on their latest deprecation policy "
61+
"https://cryptography.io/en/latest/api-stability/#deprecation".format(
62+
expected_ceiling))
63+

0 commit comments

Comments
 (0)