Changeset 4656 for TI12-security


Ignore:
Timestamp:
16/12/08 11:48:22 (11 years ago)
Author:
pjkersha
Message:

#884: added addtional validity checks to AttributeAuthority?.getAttCert and wssecurity.BaseSignatureHandler?

Location:
TI12-security/trunk/python
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/XMLSec.py

    r4404 r4656  
    5555    """Exception handling for NDG XML Security class.""" 
    5656 
    57 class SignError(Exception):   
     57class SignError(XMLSecDocError):   
    5858    """Raised from sign method if an error occurs generating the signature""" 
    5959      
    60 class VerifyError(Exception): 
     60class VerifyError(XMLSecDocError): 
    6161    """Raised from verify method if an error occurs""" 
    6262    
    63 class InvalidSignature(Exception): 
     63class InvalidSignature(XMLSecDocError): 
    6464    """Raised from verify method for an invalid signature""" 
    6565 
    6666 
    67 #_____________________________________________________________________________ 
    6867class XMLSecDoc(object): 
    6968    """Implements XML Signature and XML Encryption for a Document. 
     
    156155         
    157156        if filePath is None or not isinstance(filePath, basestring):             
    158             raise XMLSecDocError, "Document file path must be a valid string" 
     157            raise XMLSecDocError("Document file path must be a valid string") 
    159158         
    160159        self.__filePath = filePath 
     
    163162    def __delFilePath(self): 
    164163        """Prevent file path being deleted.""" 
    165         raise AttributeError, "\"filePath\" cannot be deleted" 
     164        raise AttributeError("\"filePath\" cannot be deleted") 
    166165  
    167166   
     
    180179    def __delDocNode(self): 
    181180        """Prevent file path being deleted.""" 
    182         raise AttributeError, "\"docNode\" cannot be deleted" 
     181        raise AttributeError("\"docNode\" cannot be deleted") 
    183182  
    184183   
     
    188187                       doc="DOM document node for XML") 
    189188 
    190     #_________________________________________________________________________ 
     189 
     190    def __getCertFilePathList(self): 
     191        """@rtype: list 
     192        @return: list of certificates used in digital signature 
     193        """ 
     194        return self.__certFilePathList 
     195     
    191196    def __setCertFilePathList(self, filePath): 
    192197        """File path for certificate used to sign document /  
     
    214219 
    215220        else: 
    216             raise XMLSecDocError, \ 
    217             "Signing Certificate file path must be a valid string or list" 
     221            raise XMLSecDocError("Signing Certificate file path must be a " 
     222                                 "valid string or list") 
    218223  
    219224   
    220225    # Publish attribute as write only 
    221     certFilePathList = property(fset=__setCertFilePathList, 
    222         doc="File Path of certificate used to sign document / " + \ 
    223             "list of certificates used to check the signature of a doc") 
    224  
    225  
    226     #_________________________________________________________________________ 
     226    certFilePathList = property(fget=__getCertFilePathList, 
     227                                fset=__setCertFilePathList, 
     228                                doc="File Path of certificate used to sign " 
     229                                    "document / list of certificates used to " 
     230                                    "check the signature of a doc") 
     231 
     232 
    227233    def __setSigningKeyFilePath(self, filePath): 
    228234        """Set file path for certificate private key used to sign doc.""" 
    229235         
    230236        if filePath is None or not isinstance(filePath, basestring):             
    231             raise XMLSecDocError, \ 
    232                 "Certificate key file path must be a valid string" 
     237            raise XMLSecDocError( 
     238                "Certificate key file path must be a valid string") 
    233239         
    234240        self.__signingKeyFilePath = filePath 
     
    239245 
    240246 
    241     #_________________________________________________________________________ 
    242247    def __setSigningKeyPwd(self, pwd): 
    243248        """Set password to read private key from file 
     
    247252         
    248253        if pwd is not None and not isinstance(pwd, basestring):             
    249             raise XMLSecDocError, \ 
    250             "Private key password must be set to None or to a valid string" 
     254            raise XMLSecDocError( 
     255            "Private key password must be set to None or to a valid string") 
    251256         
    252257        self.__signingKeyPwd = pwd 
     
    257262 
    258263 
    259  
    260     #_________________________________________________________________________ 
    261264    def __setEncrCertFilePath(self, filePath): 
    262265        """Set file path for X.509 certificate file containing public 
     
    266269         
    267270        if filePath is None or not isinstance(filePath, basestring):             
    268             raise XMLSecDocError, \ 
    269                 "Certificate key file path must be a valid string" 
     271            raise XMLSecDocError( 
     272                "Certificate key file path must be a valid string") 
    270273 
    271274        self.__encrCertFilePath = filePath 
     
    276279 
    277280 
    278     #_________________________________________________________________________ 
    279281    def __setEncrPriKeyFilePath(self, filePath): 
    280282        """Set file path for private key used to decrypt doc. 
     
    283285         
    284286        if filePath is None or not isinstance(filePath, basestring):             
    285             raise XMLSecDocError, \ 
    286                 "Certificate key file path must be a valid string" 
     287            raise XMLSecDocError( 
     288                "Certificate key file path must be a valid string") 
    287289         
    288290        self.__encrPriKeyFilePath = filePath 
     
    293295 
    294296 
    295     #_________________________________________________________________________ 
    296297    def toString(self, inclXMLhdr=True): 
    297298        """Return certificate file content as a string 
     
    311312 
    312313 
    313     #_________________________________________________________________________ 
    314314    def parse(self, xmlTxt): 
    315315        """Parse string containing XML into a DOM to allow signature or  
     
    321321 
    322322 
    323     #_________________________________________________________________________ 
    324323    def read(self, stream=None): 
    325324        """Read XML into a document to allow signature validation 
     
    334333 
    335334 
    336     #_________________________________________________________________________ 
    337335    def write(self): 
    338336        """Write XML document""" 
     
    340338 
    341339 
    342     #_________________________________________________________________________ 
    343340    def applyEnvelopedSignature(self, 
    344341                        xmlTxt=None, 
     
    372369 
    373370        if self.__docNode is None: 
    374             raise XMLSecDocError, \ 
    375                             "XML to be signed has not been read in or parsed." 
     371            raise XMLSecDocError( 
     372                            "XML to be signed has not been read in or parsed.") 
    376373 
    377374        try: 
    378375            parentNode = getParentNode(self.__docNode) 
    379376        except Exception, e: 
    380             raise SignError, "Locating parent node: " + str(e) 
     377            raise SignError("Locating parent node: " + str(e)) 
    381378 
    382379        parentNode.setAttributeNS(XMLNS.BASE, 'xmlns:%s' % 'ds', DSIG.BASE) 
     
    515512        if inclX509Cert: 
    516513            if not len(self.__certFilePathList): 
    517                 raise XMLSecDocError, \ 
    518                     "No X.509 Certificate set for inclusion in signature" 
     514                raise XMLSecDocError( 
     515                    "No X.509 Certificate set for inclusion in signature") 
    519516                     
    520517            # Add X.509 cert data 
     
    538535 
    539536 
    540     #_________________________________________________________________________ 
    541537    def verifyEnvelopedSignature(self, xmlTxt=None): 
    542538        """Verify enveloped signature of XML document.  Raises  
     
    551547                                 
    552548        if self.__docNode is None: 
    553             raise XMLSecDocError, \ 
    554                             "verify signature: no document has been parsed" 
     549            raise XMLSecDocError( 
     550                            "verify signature: no document has been parsed") 
    555551 
    556552        try: 
    557553            parentNode = getParentNode(self.__docNode) 
    558554        except Exception, e: 
    559             raise VerifyError, "Locating parent node: " + str(e) 
     555            raise VerifyError("Locating parent node: " + str(e)) 
    560556         
    561557        processorNss = \ 
     
    571567                                        context=ctx) 
    572568        if len(signatureNodes) > 1: 
    573             raise VerifyError, 'Multiple ds:Signature elements found' 
     569            raise VerifyError('Multiple ds:Signature elements found') 
    574570         
    575571        try: 
     
    592588                                            context=ctx)[0] 
    593589        except Exception, e: 
    594             raise VerifyError, "CanonicalizationMethod element not found: " +\ 
    595                                 str(e) 
     590            raise VerifyError("CanonicalizationMethod element not found: " + 
     591                                str(e)) 
    596592         
    597593        refNodes = xpath.Evaluate('//ds:Reference',  
     
    599595                                  context=ctx) 
    600596        if len(refNodes) != 1: 
    601             raise VerifyError, \ 
    602                     "Expecting one reference element for enveloped signature" 
     597            raise VerifyError( 
     598                    "Expecting one reference element for enveloped signature") 
    603599         
    604600        refNode = refNodes[0] 
     
    607603        refURIattrNode = refNode.getAttributeNode('URI') 
    608604        if refURIattrNode and refURIattrNode.value: 
    609             raise VerifyError, "Reference URI value is expected to be " + \ 
    610                                "null for enveloped type signature" 
     605            raise VerifyError("Reference URI value is expected to be " 
     606                               "null for enveloped type signature") 
    611607         
    612608         
     
    642638                    envelopedAlgorithmSet = True 
    643639        except Exception, e: 
    644             raise VerifyError, 'Failed to parse tranform node: %s' % str(e) 
     640            raise VerifyError('Failed to parse tranform node: %s' % e) 
    645641        
    646642         
    647643        if not envelopedAlgorithmSet: 
    648             raise VerifyError, \ 
    649             "Expecting enveloped type signature to be specified in transform" 
     644            raise VerifyError( 
     645            "Expecting enveloped type signature to be specified in transform") 
    650646         
    651647         
     
    656652             
    657653        except Exception, e: 
    658             raise VerifyError, "Error reading reference digest value" 
     654            raise VerifyError("Error reading reference digest value") 
    659655         
    660656 
     
    664660                                            context=ctx)[0] 
    665661        except Exception, e: 
    666             raise VerifyError, "Error reading SignedInfo element: " + str(e) 
     662            raise VerifyError("Error reading SignedInfo element: " + str(e)) 
    667663 
    668664 
     
    682678                                                pfxListAttNode.value.split() 
    683679        except Exception, e: 
    684             raise VerifyError, 'failed to handle exclusive ' + \ 
    685                                 'canonicalisation for SignedInfo: %s' % str(e) 
     680            raise VerifyError('failed to handle exclusive ' 
     681                              'canonicalisation for SignedInfo: %s' % e) 
    686682         
    687683        # Get the signature value in order to check against the digest just 
     
    695691                    str(signatureValueNode.childNodes[0].nodeValue).strip() 
    696692        except Exception, e: 
    697             raise VerifyError, "Error reading signatureValue: " + str(e) 
     693            raise VerifyError("Error reading signatureValue: " + str(e)) 
    698694                     
    699695        signatureValue = base64.decodestring(b64EncSignatureValue) 
     
    716712             
    717713        except Exception, e: 
    718             raise VerifyError, \ 
    719                 'Unable to read certificate from "ds:X509Certificate" element' 
     714            raise VerifyError( 
     715                'Unable to read certificate from "ds:X509Certificate" element') 
    720716 
    721717 
     
    759755                                      signatureValue) 
    760756        except RSA.RSAError, e: 
    761             raise VerifyError, "Error in Signature: " + str(e) 
     757            raise VerifyError("Error in Signature: " + str(e)) 
    762758         
    763759        if not verify: 
     
    777773 
    778774 
    779     #_________________________________________________________________________ 
    780775    def encrypt(self, 
    781776                xmlTxt=None,  
     
    801796        signature""" 
    802797         
    803         raise NotImplementedError, \ 
    804                         "Encryption algorithm not implemented in this version" 
     798        raise NotImplementedError( 
     799                        "Encryption algorithm not implemented in this version") 
    805800  
    806801  
    807     #_________________________________________________________________________ 
    808802    def decrypt(self,  
    809803                xmlTxt=None,  
     
    818812        omitted the file set by self.__filePath is read instead.""" 
    819813         
    820         raise NotImplementedError, \ 
    821                         "Encryption algorithm not implemented in this version" 
     814        raise NotImplementedError( 
     815                        "Encryption algorithm not implemented in this version") 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/wssecurity/BaseSignatureHandler.py

    r4527 r4656  
    441441        if not cert or isinstance(cert, X509Cert): 
    442442            # ndg.security.common.X509.X509Cert type / None 
    443             return cert 
     443            x509Cert = cert 
    444444             
    445445        elif isinstance(cert, X509.X509): 
    446446            # M2Crypto.X509.X509 type 
    447             return X509Cert(m2CryptoX509=cert) 
     447            x509Cert = X509Cert(m2CryptoX509=cert) 
    448448             
    449449        elif isinstance(cert, basestring): 
    450             return X509CertParse(cert) 
     450            x509Cert = X509CertParse(cert) 
    451451         
    452452        else: 
    453             raise AttributeError, "X.509 Cert. must be type: " + \ 
    454                 "ndg.security.common.X509.X509Cert, M2Crypto.X509.X509 or " +\ 
    455                 "a base64 encoded string" 
     453            raise AttributeError("X.509 Cert. must be type: ndg.security." 
     454                                 "common.X509.X509Cert, M2Crypto.X509.X509 or " 
     455                                 "a base64 encoded string") 
     456         
     457        # Check for expired certificate 
     458        if x509Cert:    
     459            x509Cert.isValidTime(raiseExcep=True) 
    456460 
    457461     
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/attributeauthority.py

    r4654 r4656  
    534534        attCert = AttCert() 
    535535 
    536         # First cert in list corresponds to the private key 
     536        # First certificate in list contains the public key corresponding to  
     537        # the private key 
    537538        attCert.certFilePathList = [self.__prop['signingCertFilePath']] + \ 
    538539                                                                self.__prop['caCertFilePathList'] 
     540              
     541        # Check for expiry of each certificate                    
     542        for x509Cert in attCert.certFilePathList: 
     543            x509Cert.isValidTime(raiseExcep=True) 
    539544                                                                 
    540545        attCert.signingKeyFilePath = self.__prop['signingPriKeyFilePath'] 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sessionmanager.py

    r4573 r4656  
    905905                                      "input username") 
    906906 
     907            if userSess.credentialWallet.userX509Cert: 
     908                userDN = userSess.credentialWallet.userX509Cert.dn 
     909            else: 
     910                userDN = None 
     911                 
    907912            log.info("Connecting to session userDN=%s; sessID=%s using " 
    908                      "username=%s"%(userSess.credentialWallet.userX509Cert.dn,  
    909                                     userSess.sessIdList, 
    910                                     username))             
     913                     "username=%s" % (userDN, userSess.sessIdList, username))             
    911914        elif sessID: 
    912915            userSess = self.__sessDict.get(sessID) 
     
    915918                raise SessionNotFound("No user session found matching input " 
    916919                                      "session ID") 
     920                 
    917921            if userSess.credentialWallet.userX509Cert: 
    918922                userDN = userSess.credentialWallet.userX509Cert.dn 
Note: See TracChangeset for help on using the changeset viewer.