Package tlslite :: Module x509certchain
[hide private]
[frames] | no frames]

Source Code for Module tlslite.x509certchain

 1  # Author: Trevor Perrin 
 2  # See the LICENSE file for legal information regarding use of this file. 
 3   
 4  """Class representing an X.509 certificate chain.""" 
 5   
 6  from .utils import cryptomath 
 7  from .utils.tackwrapper import * 
 8  from .utils.pem import * 
 9  from .x509 import X509 
10   
11 -class X509CertChain(object):
12 """This class represents a chain of X.509 certificates. 13 14 @type x509List: list 15 @ivar x509List: A list of L{tlslite.x509.X509} instances, 16 starting with the end-entity certificate and with every 17 subsequent certificate certifying the previous. 18 """ 19
20 - def __init__(self, x509List=None):
21 """Create a new X509CertChain. 22 23 @type x509List: list 24 @param x509List: A list of L{tlslite.x509.X509} instances, 25 starting with the end-entity certificate and with every 26 subsequent certificate certifying the previous. 27 """ 28 if x509List: 29 self.x509List = x509List 30 else: 31 self.x509List = []
32
33 - def parsePemList(self, s):
34 """Parse a string containing a sequence of PEM certs. 35 36 Raise a SyntaxError if input is malformed. 37 """ 38 x509List = [] 39 bList = dePemList(s, "CERTIFICATE") 40 for b in bList: 41 x509 = X509() 42 x509.parseBinary(b) 43 x509List.append(x509) 44 self.x509List = x509List
45
46 - def getNumCerts(self):
47 """Get the number of certificates in this chain. 48 49 @rtype: int 50 """ 51 return len(self.x509List)
52
53 - def getEndEntityPublicKey(self):
54 """Get the public key from the end-entity certificate. 55 56 @rtype: L{tlslite.utils.rsakey.RSAKey} 57 """ 58 if self.getNumCerts() == 0: 59 raise AssertionError() 60 return self.x509List[0].publicKey
61
62 - def getFingerprint(self):
63 """Get the hex-encoded fingerprint of the end-entity certificate. 64 65 @rtype: str 66 @return: A hex-encoded fingerprint. 67 """ 68 if self.getNumCerts() == 0: 69 raise AssertionError() 70 return self.x509List[0].getFingerprint()
71
72 - def checkTack(self, tack):
73 if self.x509List: 74 tlsCert = TlsCertificate(self.x509List[0].bytes) 75 if tlsCert.matches(tack): 76 return True 77 return False
78
79 - def getTackExt(self):
80 """Get the TACK and/or Break Sigs from a TACK Cert in the chain.""" 81 tackExt = None 82 # Search list in backwards order 83 for x509 in self.x509List[::-1]: 84 tlsCert = TlsCertificate(x509.bytes) 85 if tlsCert.tackExt: 86 if tackExt: 87 raise SyntaxError("Multiple TACK Extensions") 88 else: 89 tackExt = tlsCert.tackExt 90 return tackExt
91