Skip to content

Commit cf3e908

Browse files
authored
Merge pull request #1194 from gpotter2/tests-cert
Cert: Tests, Python 3 and Cryptography update
2 parents e42ecdc + 7a8cc1f commit cf3e908

2 files changed

Lines changed: 240 additions & 13 deletions

File tree

scapy/layers/tls/cert.py

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
from cryptography.hazmat.backends import default_backend
3838
from cryptography.hazmat.primitives import serialization
3939
from cryptography.hazmat.primitives.asymmetric import rsa
40+
if conf.crypto_valid_advanced:
41+
from cryptography.hazmat.backends.openssl.ec import InvalidSignature
4042

4143
from scapy.error import warning
4244
from scapy.utils import binrepr
@@ -325,9 +327,16 @@ def encrypt(self, msg, h="sha256", **kwargs):
325327
@crypto_validator
326328
def verify(self, msg, sig, h="sha256", **kwargs):
327329
# 'sig' should be a DER-encoded signature, as per RFC 3279
328-
verifier = self.pubkey.verifier(sig, ec.ECDSA(_get_hash(h)))
329-
verifier.update(msg)
330-
return verifier.verify()
330+
if conf.crypto_valid_advanced:
331+
try:
332+
self.pubkey.verify(sig, msg, ec.ECDSA(_get_hash(h)))
333+
return True
334+
except InvalidSignature:
335+
return False
336+
else:
337+
verifier = self.pubkey.verifier(sig, ec.ECDSA(_get_hash(h)))
338+
verifier.update(msg)
339+
return verifier.verify()
331340

332341

333342
################
@@ -519,15 +528,25 @@ def import_from_asn1pkt(self, privkey):
519528
@crypto_validator
520529
def verify(self, msg, sig, h="sha256", **kwargs):
521530
# 'sig' should be a DER-encoded signature, as per RFC 3279
522-
verifier = self.pubkey.verifier(sig, ec.ECDSA(_get_hash(h)))
523-
verifier.update(msg)
524-
return verifier.verify()
531+
if conf.crypto_valid_advanced:
532+
try:
533+
self.pubkey.verify(sig, msg, ec.ECDSA(_get_hash(h)))
534+
return True
535+
except InvalidSignature:
536+
return False
537+
else:
538+
verifier = self.pubkey.verifier(sig, ec.ECDSA(_get_hash(h)))
539+
verifier.update(msg)
540+
return verifier.verify()
525541

526542
@crypto_validator
527543
def sign(self, data, h="sha256", **kwargs):
528-
signer = self.key.signer(ec.ECDSA(_get_hash(h)))
529-
signer.update(data)
530-
return signer.finalize()
544+
if conf.crypto_valid_advanced:
545+
return self.key.sign(data, ec.ECDSA(_get_hash(h)))
546+
else:
547+
signer = self.key.signer(ec.ECDSA(_get_hash(h)))
548+
signer.update(data)
549+
return signer.finalize()
531550

532551

533552
################
@@ -577,6 +596,7 @@ def import_from_asn1pkt(self, cert):
577596
self.subject = tbsCert.get_subject()
578597
self.subject_str = tbsCert.get_subject_str()
579598
self.subject_hash = hash(self.subject_str)
599+
self.authorityKeyID = None
580600

581601
self.notBefore_str = tbsCert.validity.not_before.pretty_time
582602
notBefore = tbsCert.validity.not_before.val
@@ -912,7 +932,7 @@ def verifyChainFromCAFile(self, cafile, untrusted_file=None):
912932
certificates can be passed (as a file, this time).
913933
"""
914934
try:
915-
f = open(cafile)
935+
f = open(cafile, "rb")
916936
ca_certs = f.read()
917937
f.close()
918938
except:
@@ -923,7 +943,7 @@ def verifyChainFromCAFile(self, cafile, untrusted_file=None):
923943
untrusted = None
924944
if untrusted_file:
925945
try:
926-
f = open(untrusted_file)
946+
f = open(untrusted_file, "rb")
927947
untrusted_certs = f.read()
928948
f.close()
929949
except:
@@ -943,14 +963,14 @@ def verifyChainFromCAPath(self, capath, untrusted_file=None):
943963
try:
944964
anchors = []
945965
for cafile in os.listdir(capath):
946-
anchors.append(Cert(open(cafile).read()))
966+
anchors.append(Cert(open(os.path.join(capath, cafile), "rb").read()))
947967
except:
948968
raise Exception("capath provided is not a valid cert path")
949969

950970
untrusted = None
951971
if untrusted_file:
952972
try:
953-
f = open(untrusted_file)
973+
f = open(untrusted_file, "rb")
954974
untrusted_certs = f.read()
955975
f.close()
956976
except:

test/cert.uts

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,85 @@ weDU+RsFxcyU/QxD9WYORzYarqxbcA==
127127
""")
128128
type(y) is PrivKeyECDSA
129129

130+
= PrivKeyECDSA sign & verify
131+
a = PrivKeyECDSA()
132+
a.fill_and_store()
133+
msg = b"Scapy test message"
134+
data = a.sign(msg)
135+
assert a.verify(msg, data)
136+
137+
= PubKeyECDSA verify
138+
b = PubKeyECDSA()
139+
b.pubkey = a.pubkey
140+
assert b.verify(msg, data)
141+
130142
= PrivKey class : Checking public attributes
131143
assert(y.key.curve.name == "secp256k1")
132144
y.key.public_key().public_numbers().y == 86290575637772818452062569410092503179882738810918951913926481113065456425840
133145

134146
= PrivKey class : Checking private attributes
135147
y.key.private_numbers().private_value == 90719786431263082134670936670180839782031078050773732489701961692235185651857
136148

149+
+ PrivKey/Pubkey test signatures
150+
151+
= PrivKey class : sign tbs cert
152+
153+
pkey_sign = PrivKey("""
154+
-----BEGIN RSA PRIVATE KEY-----
155+
MIIEowIBAAKCAQEA1L8KacejlbFJ18bvAz5/W9mF+0GglJs6qyv8pAPPiX1mWaLZ
156+
Y42Kf/axHYrxUPXEqitRG3VkOy1HONAZhl90rY0jVUyYps94om4S98NECbY3eiVc
157+
02ZqQng5HyzBYJQeTh+EYrDaxPUXcVXjthmrt/6vbUHI1Kgk/gok8IBFMSzilxeO
158+
ZMJJ+dQigeDiaJGwHb3U5KzOm+hFb/IbwjdXJm3CG/58bCQp0rp6RD2qI/D6Xtvj
159+
pc/ms6q7vfBVpquSLeEIt4Jq2XC9RKGR7TGHaVe8vmU5rb/Y36ReYCw5+fMJqcP4
160+
fFlC6iexBDhgy1sqV0o0tu4TzJodn8n3SFResQIDAQABAoIBAHcXEe8w0AOloJ5n
161+
P7hjLcvusi96BzfoxSi4kM4HTA+84KRgoqw1uUf0giT1eCxHx3Uylk52okr2B55n
162+
70HnAVt9XEANho4qKW9Tis6iwd1l4RxA+ftkoyrePauT1BQKFgTJY8QTGAOU5zCM
163+
UdHIAPYYXX8dihxwm3SRnSf7xb/GSRkj5sMr0ioiBOZ91fwzbtOEbVXE58DyPNJm
164+
w/tBCFbibpr4iCU/6US8OyCxR/X4heRyKCcANXlHyE/eUO6TY8J2RaKbSQi+c3/y
165+
Y11ypSboyM3cGJ/URS5wRd0oQMQMANck4w+MlNU5jxsfN9wF32HWII8wq/6n3hHR
166+
M+H+3YECgYEA79nc8BLzFPrzuJud9JvCFEh0pNb0gLRb/MvIsaVUT7ac8/89tfvQ
167+
6qxWgP81ldJ7S+d/uh80CKg0lVwaxF4sQ6yNn/cvebW8tCCm0RkD8q3R9kxOd3Q/
168+
kLNeeBS/gPzh2xOmVuTE0ruv7ovYowU8WfJG2z20lv7WNsrN/Jm526kCgYEA4xH+
169+
EBVqoPYxzKoa0LNxSPfVOBO7wT19pS5Ny7yjI9oy724cNXn39H5KaCHC3ZnR0mII
170+
0znf7cbtbFHLSkR2MNzy1MC1VhIxFQ5yHLRCjZcKkjd+gZuJp0tCgY/r2dNYsBCR
171+
7W1vMz/wNsbufkOhi/DqC0Ru7onFbouGBdpID8kCgYEAjamr6NAIarfeA4dGQBdP
172+
BhPVcRbUyr+8JQ9ntiTkK0C8axCyLi5RMooffYk+6QKseCR/ODr9zK8sf5sq5BiL
173+
JF1iOL0SeVxx3CH85TtVLZykikh/f+ZVNO38OghnI5Q5AeAVOvVbmuvn+Yj3pzGM
174+
d8O1PgCwDQ7vDuWxzCQvtiECgYAGWA9YFbEX9CjqBeqf4BOPLVVorqx1NqmW/tcv
175+
lQKd0s/Pfq0NFW5HB2w+woq2NED3dsO2WwyVkRQ7DYH3fjgrH1EtfoDSecmjQ/cO
176+
ND8Tw5+I/EHtjxHmeaTPB91YBZ6ZtKzPDFqp/ORSM3agUnVl+oIfdHcA9Rpt/zns
177+
We/feQKBgGimvdIrurKPTrV49ltAKdkHmglpYeCaDr6aZKwWMcsrLmTZ6a4uRPFF
178+
TdK+rCyGyjmibTVRjdg5+7KXshSlBleNR3v+AySAxzpjwySVhTfRirCogHRFHrnK
179+
kXqy5xUkg11ETv6v91n3u5NVBlXVN4iwFRGSKsecw0qxSgKjbP4n
180+
-----END RSA PRIVATE KEY-----
181+
""")
182+
183+
c_tosign = Cert("""
184+
-----BEGIN CERTIFICATE-----
185+
MIIC/TCCAeWgAwIBAgIJALkQBZa7rCRFMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV
186+
BAMMCnNlY2Rldi5vcmcwHhcNMTgwMjI3MTY1NjIyWhcNMjgwMjI1MTY1NjIyWjAV
187+
MRMwEQYDVQQDDApzZWNkZXYub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
188+
CgKCAQEA1L8KacejlbFJ18bvAz5/W9mF+0GglJs6qyv8pAPPiX1mWaLZY42Kf/ax
189+
HYrxUPXEqitRG3VkOy1HONAZhl90rY0jVUyYps94om4S98NECbY3eiVc02ZqQng5
190+
HyzBYJQeTh+EYrDaxPUXcVXjthmrt/6vbUHI1Kgk/gok8IBFMSzilxeOZMJJ+dQi
191+
geDiaJGwHb3U5KzOm+hFb/IbwjdXJm3CG/58bCQp0rp6RD2qI/D6Xtvjpc/ms6q7
192+
vfBVpquSLeEIt4Jq2XC9RKGR7TGHaVe8vmU5rb/Y36ReYCw5+fMJqcP4fFlC6iex
193+
BDhgy1sqV0o0tu4TzJodn8n3SFResQIDAQABo1AwTjAdBgNVHQ4EFgQUf98kGOpM
194+
CVBFdHxFb8DaL6tPe+8wHwYDVR0jBBgwFoAUf98kGOpMCVBFdHxFb8DaL6tPe+8w
195+
DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAmw0lTyEVH8YfytbVS9AW
196+
rTJ1wWhDGf+9jHHEjX/OIq5ii0Ks38WyybhD7cMQNfkZCgIjrutrLHN/m/wn9aDx
197+
y9vuubWvrcbqhur82YZbVnlvEiqEEyY/ULqCaW2X7UC2K/2NAy14oF6bClLX8LBq
198+
3G/lc6GUOToN6i4OuKeB9xxvJaBxsVIdnUW9IqesHatqV4yIhH1/flhqWM47LjHP
199+
a/uIGboyhl8p5bt3aVbXFwm/NeqsOVPDcQsBdWGldCN6loLE7b4eJDhjHbsuR2C3
200+
aomWcyGW1mRxNJUI0GQ5EHB5Vvy4mcxKG1DMYxG/rGf/EHk+xPJXpITIugbispbm
201+
uA==
202+
-----END CERTIFICATE-----
203+
""")
204+
tbs_signed = pkey_sign.signTBSCert(c_tosign.tbsCertificate)
205+
assert raw(tbs_signed.signatureValue) == b"BH\xdb@>\x82\x08b\xbc\xaf\x04%_\xeaV\xf5_\xa8\xf4\xf3\xd1\x0f\x86\xbd\x1b\xe2U\xfb\xf5/\rN\xc2\r\xbc\xa0Hn\xed\xb7\x18\xb2\xb3\xa5\x08m9\x9fY\xa6\xb32\xcd:\xd7\xab\xac\x8c\xcf@\xbb\x08Gt2\xb7\x93\x95\x92\x17\xa7j\x99\xa7)\xab\xbc\x07HP\xca\x00M$\xfb.\xb9\xb8\xac%i\x8c\xa2+\xe7ny!\xa1\xd2l\x0f>j\xd6\xb0\x9e\xcat)+\xbc\x16'\x9d\x1e\x80\x89\x01.\x9dS\xbb\xa0-\xb8\x0c\xe9\xe9:a\xbe\x14p\xd1\xbb\xf0I\xa2\x8fio`2\x1b7\xb8]\t3\xced`\x86\x97\x01\x82t\xd0\xc3c%\xa7\xda\\[]9\xfa\xba\r\x83\x8b\r\xa2(\x87\xe87C\xb7\\\x11\x163\x8e\xbf\xe2\x80\x7f\xf2\x93\xa4\x04w\xddG\x88\x1e#\xa6l\x15\xa1\xc6\xda\x1f\xd4\xb4$T\xa1\xd0\xe9\xd5t\xc4\xe4q\xbe\xa2\xd2\xba\x1b!/\x1dK\x17}\xc6.\xba\x81;\x00ft\x8du)\x15\n\t\x08\x1b\xb2Ol\xe1\x94g\xc8\xc0\xd6>"
206+
pkey_sign.resignCert(c_tosign)
207+
assert pkey_sign.verifyCert(c_tosign)
208+
137209

138210
########### Keys crypto tests #######################################
139211

@@ -215,6 +287,10 @@ x.notBefore == (2006, 7, 13, 7, 38, 59, 3, 194, -1)
215287
assert(x.notAfter_str_simple == '03/30/26')
216288
x.notAfter == (2026, 3, 30, 7, 38, 59, 0, 89, -1)
217289

290+
= Cert class : test remainingDays
291+
assert abs(x.remainingDays("02/12/11")) > 5000
292+
assert abs(x.remainingDays("Feb 12 10:00:00 2011 Paris, Madrid")) > 1
293+
218294
= Cert class : Checking RSA public key
219295
assert(type(x.pubKey) is PubKeyRSA)
220296
x_pubNum = x.pubKey.pubkey.public_numbers()
@@ -254,6 +330,17 @@ pubkey.public_numbers().x == 398717868817528174634918001549064694865613744866600
254330
= Cert class : Checking ECDSA signature
255331
y.signatureValue == b'0d\x020%\xa4\x81E\x02k\x12KutO\xc8#\xe3p\xf2ur\xde|\x89\xf0\xcf\x91ra\x9e^\x10\x92YV\xb9\x83\xc7\x10\xe78\xe9X&6}\xd5\xe44\x869\x020|6S\xf00\xe5bc:\x99\xe2\xb6\xa3;\x9b4\xfa\x1e\xda\x10\x92q^\x91\x13\xa7\xdd\xa4n\x92\xcc2\xd6\xf5!f\xc7/\xea\x96cjeE\x92\x95\x01\xb4'
256332

333+
= Cert class : Test show
334+
awaited = """
335+
Serial: 15459312981008553731928384953135426796
336+
Issuer: /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Assured ID Root G3
337+
Subject: /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Assured ID Root G3
338+
Validity: Aug 01 12:00:00 2013 GMT to Jan 15 12:00:00 2038 GMT
339+
"""
340+
341+
with ContextManagerCaptureOutput() as cmco:
342+
y.show()
343+
assert cmco.get_output().strip() == awaited.strip()
257344

258345
########### CRL class ###############################################
259346

@@ -295,6 +382,26 @@ len(x.revoked_cert_serials) == 7
295382
= CRL class : Checking presence of one revoked certificate
296383
(94673785334145723688625287778885438961, '030109180612') in x.revoked_cert_serials
297384

385+
= Cert/CRL class : Checking isRevoked
386+
cx = X509_Cert()
387+
cx.tbsCertificate.serialNumber.val = 59577943160751197113872490992424857032
388+
cx.tbsCertificate.issuer = x.x509CRL.tbsCertList.issuer
389+
cx = Cert(raw(cx))
390+
assert cx.isRevoked([x])
391+
392+
= CRL class : Test show
393+
awaited = """
394+
Version: 1
395+
sigAlg: sha1_with_rsa_signature
396+
Issuer: /C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority
397+
lastUpdate: Nov 02 00:00:00 2006 GMT
398+
nextUpdate: Feb 17 23:59:59 2007 GMT
399+
"""
400+
401+
with ContextManagerCaptureOutput() as cmco:
402+
x.show()
403+
assert cmco.get_output().strip() == awaited.strip()
404+
298405
########### High-level methods ###############################################
299406

300407
= Cert class : Checking isIssuerCert()
@@ -404,3 +511,103 @@ len(Chain([c0], c2)) == 1
404511
assert(Chain([], c0).verifyChain([c2], [c1]))
405512
not Chain([c1]).verifyChain([c0])
406513

514+
= Chain class: Checking chain verification with file
515+
516+
import tempfile
517+
518+
tf_folder = tempfile.mkdtemp()
519+
520+
try:
521+
os.makedirs(tf_folder)
522+
except:
523+
pass
524+
525+
tf = os.path.join(tf_folder, "trusted")
526+
utf = os.path.join(tf_folder, "untrusted")
527+
528+
tf
529+
utf
530+
531+
# Create files
532+
trusted = open(tf, "w")
533+
trusted.write("""
534+
-----BEGIN CERTIFICATE-----
535+
MIIFADCCA+igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
536+
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
537+
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
538+
ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTExMDUwMzA3MDAw
539+
MFoXDTMxMDUwMzA3MDAwMFowgcYxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
540+
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
541+
aG5vbG9naWVzLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydHMuc3RhcmZpZWxk
542+
dGVjaC5jb20vcmVwb3NpdG9yeS8xNDAyBgNVBAMTK1N0YXJmaWVsZCBTZWN1cmUg
543+
Q2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
544+
DwAwggEKAoIBAQDlkGZL7PlGcakgg77pbL9KyUhpgXVObST2yxcT+LBxWYR6ayuF
545+
pDS1FuXLzOlBcCykLtb6Mn3hqN6UEKwxwcDYav9ZJ6t21vwLdGu4p64/xFT0tDFE
546+
3ZNWjKRMXpuJyySDm+JXfbfYEh/JhW300YDxUJuHrtQLEAX7J7oobRfpDtZNuTlV
547+
Bv8KJAV+L8YdcmzUiymMV33a2etmGtNPp99/UsQwxaXJDgLFU793OGgGJMNmyDd+
548+
MB5FcSM1/5DYKp2N57CSTTx/KgqT3M0WRmX3YISLdkuRJ3MUkuDq7o8W6o0OPnYX
549+
v32JgIBEQ+ct4EMJddo26K3biTr1XRKOIwSDAgMBAAGjggEsMIIBKDAPBgNVHRMB
550+
Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUJUWBaFAmOD07LSy+
551+
zWrZtj2zZmMwHwYDVR0jBBgwFoAUfAwyH6fZMH/EfWijYqihzqsHWycwOgYIKwYB
552+
BQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vb2NzcC5zdGFyZmllbGR0ZWNo
553+
LmNvbS8wOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5zdGFyZmllbGR0ZWNo
554+
LmNvbS9zZnJvb3QtZzIuY3JsMEwGA1UdIARFMEMwQQYEVR0gADA5MDcGCCsGAQUF
555+
BwIBFitodHRwczovL2NlcnRzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkv
556+
MA0GCSqGSIb3DQEBCwUAA4IBAQBWZcr+8z8KqJOLGMfeQ2kTNCC+Tl94qGuc22pN
557+
QdvBE+zcMQAiXvcAngzgNGU0+bE6TkjIEoGIXFs+CFN69xpk37hQYcxTUUApS8L0
558+
rjpf5MqtJsxOYUPl/VemN3DOQyuwlMOS6eFfqhBJt2nk4NAfZKQrzR9voPiEJBjO
559+
eT2pkb9UGBOJmVQRDVXFJgt5T1ocbvlj2xSApAer+rKluYjdkf5lO6Sjeb6JTeHQ
560+
sPTIFwwKlhR8Cbds4cLYVdQYoKpBaXAko7nv6VrcPuuUSvC33l8Odvr7+2kDRUBQ
561+
7nIMpBKGgc0T0U7EPMpODdIm8QC3tKai4W56gf0wrHofx1l7
562+
-----END CERTIFICATE-----
563+
""")
564+
trusted.close()
565+
566+
untrusted = open(utf, "w")
567+
untrusted.write("""
568+
-----BEGIN CERTIFICATE-----
569+
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
570+
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
571+
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
572+
ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
573+
MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
574+
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
575+
aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
576+
Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
577+
ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
578+
nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
579+
HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
580+
Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
581+
dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
582+
HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
583+
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
584+
CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
585+
sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
586+
4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
587+
8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
588+
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
589+
mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
590+
-----END CERTIFICATE-----
591+
""")
592+
untrusted.close()
593+
594+
assert Chain([], c0).verifyChainFromCAFile(tf, untrusted_file=utf)
595+
assert Chain([], c0).verifyChainFromCAPath(tf_folder, untrusted_file=utf)
596+
597+
= Clear files
598+
599+
try:
600+
os.remove("./certs_test_ca/trusted")
601+
os.remove("./certs_test_ca/untrusted")
602+
except:
603+
pass
604+
605+
try:
606+
os.rmdir("././certs_test_ca")
607+
except:
608+
pass
609+
610+
= Test __repr__
611+
612+
repr_str = Chain([], c0).__repr__()
613+
assert repr_str == '__ /OU=Domain Control Validated/CN=*.tools.ietf.org [Not Self Signed]\n'

0 commit comments

Comments
 (0)