Changeset 407


Ignore:
Timestamp:
03/05/05 17:44:33 (15 years ago)
Author:
pjkersha
Message:

AttrAuthority?: createAttrCert - added test to check user certificates
DN matches the holder field of the external Attribute Certificate
provided.

AttrCert?: fix to setProvenance() - corrected call to isValidProvenance
method. Fixed XML text formatting in createXML(). Fix to repr()

  • return string type.

X509: fix to repr() - return string type. serialise() method
now ignores empty fields.

xmlSigDoc: write method - ensure libxml2Doc object is created even
when document is not to be signed.

Location:
security/trunk/python
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • security/trunk/python/NDG.BAK/AttAuthority.py

    r405 r407  
    199199            # TODO: 
    200200            # P J Kershaw 29/04/05 
     201            pdb.set_trace() 
     202            holderDN = X500DN(dn=extAttrCert['holder']) 
     203            if holderDN != usrDN: 
     204                raise "User certificate and Attribute Certificate DNs " + \ 
     205                      "don't match: " + usrDN + " and " + holderDN 
    201206             
    202207   
  • security/trunk/python/NDG.BAK/AttCert.py

    r404 r407  
    133133    def __repr__(self): 
    134134        """Override default behaviour to return internal dictionary content""" 
    135         return self.__dat 
     135        return str(self.__dat) 
    136136 
    137137                 
     
    325325        """Set the provenance for the certificate: 'original' or 'mapped'.""" 
    326326 
    327         if not validProvenance(provenance): 
     327        if not self.isValidProvenance(provenance): 
    328328            raise "Provenance must be set to \"" + \ 
    329329                "\" or \"".join(AttrCert.__provenance) + "\"" 
     
    477477        xmlTxt = \ 
    478478"""<attributeCertificate> 
    479         <acInfo> 
    480             <version>""" + self.__dat['version'] + """</version> 
    481             <holder>""" + self.__dat['holder'] + """</holder> 
    482             <issuer>""" + self.__dat['issuer'] + """</issuer> 
    483             <issuerName>""" + self.__dat['issuerName'] + """</issuerName> 
    484             <issuerSerialNumber>""" + str(self.__dat['issuerSerialNumber']) +\ 
     479    <acInfo> 
     480        <version>""" + self.__dat['version'] + """</version> 
     481        <holder>""" + self.__dat['holder'] + """</holder> 
     482        <issuer>""" + self.__dat['issuer'] + """</issuer> 
     483        <issuerName>""" + self.__dat['issuerName'] + """</issuerName> 
     484        <issuerSerialNumber>""" + str(self.__dat['issuerSerialNumber']) +\ 
    485485            """</issuerSerialNumber>  
    486486        <validity> 
  • security/trunk/python/NDG.BAK/X509.py

    r404 r407  
    3030             
    3131        self.__filePath = filePath 
    32  
     32        self.__dn = None 
     33         
    3334 
    3435    def read(self, filePath=None): 
     
    142143 
    143144 
     145 
     146 
    144147    def __repr__(self): 
    145148        """Override default behaviour to return internal dictionary content""" 
    146         return self.__dat 
    147  
    148      
     149        return self.serialise() 
     150 
     151 
     152 
     153 
     154    def __str__(self): 
     155        """Behaviour for print and string statements - convert DN into 
     156        serialised format.""" 
     157        return self.serialise() 
     158 
     159 
     160 
     161         
    149162    def __eq__(self, x500dn): 
    150163 
     
    156169        return self.__dat.items() == x500dn.items() 
    157170     
     171 
     172 
    158173     
    159174    def __delitem__(self, key): 
    160175         
    161176        raise 'Keys cannot be deleted from the X500DN' 
     177 
     178 
    162179 
    163180 
     
    180197            # key not recognised as a short or long name version 
    181198            raise 'Key "' + key + '" not recognised for X500DN' 
     199 
     200 
    182201 
    183202 
     
    202221 
    203222 
     223 
     224 
    204225    def clear(self): 
    205226        raise "Data cannot be cleared from " + X500DN.__name__ 
     
    215236        return self.__dat.keys() 
    216237 
     238 
    217239    def items(self): 
    218240        return self.__dat.items() 
    219241 
     242 
    220243    def values(self): 
    221244        return self.__dat.values() 
    222245 
     246 
    223247    def has_key(self): 
    224248        return self.__dat.has_key() 
     249 
     250 
    225251 
    226252     
     
    234260                 
    235261            self.__separator = separator 
    236  
    237         dn = self.__separator.join(["%s=%s" % i for i in self.__dat.items()]) 
    238         return dn 
    239  
    240  
    241     def deserialise(self, dn): 
     262             
     263 
     264        return self.__separator.join(["%s=%s" % field \ 
     265                                for field in self.__dat.items() if field[1]]) 
     266        
     267 
     268 
     269 
     270    def deserialise(self, dn, separator=None): 
    242271 
    243272        """Break up a DN string into it's constituent fields and use to 
    244273        update the object's dictionary""" 
    245274         
     275        if separator: 
     276            if not isinstance(separator, basestring): 
     277                raise "Separator must be a valid string" 
     278 
     279            self.__separator = separator 
     280 
     281         
    246282        dnFields = dn.split(self.__separator) 
    247  
     283        if len(dnFields) < 2: 
     284            raise "Error parsing DN string: \"%s\"" % dn 
     285 
     286         
    248287        # Split fields into key/value 
    249288        keyVals = [field.split('=') for field in dnFields] 
  • security/trunk/python/NDG.BAK/xmlSigDoc.py

    r404 r407  
    291291 
    292292 
    293     def write(self, filePath=None, bSign=False, **signArgs): 
     293 
     294    def write(self, filePath=None, bSign=True, xmlTxt=None, **signKeys): 
    294295 
    295296        """Write XML document applying digital signature 
    296297 
    297         filePath:            file path for XML output 
     298        filePath:               file path for XML output 
    298299                             
     300        bSign:                  flag defaults to True to sign the new 
     301                                certificate using the private key and 
     302                                certificate to sign the certificate. 
     303                                Set to False to NOT sign the document. 
     304 
     305        xmlTxt:                 string containing formatted xml text for 
     306                                signing.  If no text is provided, the method 
     307                                createXML() is called to return the text. 
     308                                Derived classes should implement this method. 
     309 
     310        Keyword arguments required by xmlSigDoc.sign(): 
     311         
    299312        signingKeyFilePath:     file path to private key file of Attribute 
    300313                                Authority - may also be set in  __init__ 
    301314 
     315        signingKeyPwd:          password for signing key file. 
     316 
    302317        signingCertFilePath:    file path to certificate file of Attribute 
    303318                                Authority  - may also be set in  __init__ 
    304  
    305         bSign:                  flag defaults to False to NOT sign the new 
    306                                 certificate.  Set to True to use the private 
    307                                 key and certificate to sign the certificate. 
    308319                                """ 
    309320 
     
    316327 
    317328         
     329        # Set up libxml2 object from string containing XML for writing 
     330        if xmlTxt is None: xmlTxt = self.createXML() 
     331 
     332         
    318333        # Apply digital signature of Attribute Authority 
    319         if bSign: self.sign(**signArgs) 
    320  
    321  
     334        if bSign: self.sign(xmlTxt=xmlTxt, **signKeys) 
     335 
     336 
     337        # Ensure libxml2 doc has been created for document to be written 
     338        #  A valid one should be present if sign() was called above 
     339        if self.__libxml2Doc is None: self.__libxml2ParseDoc(xmlTxt) 
     340 
     341             
    322342        # Updated content is held in libxml2 doc instance.  Use this to 
    323343        # write new certificate to file 
     
    325345 
    326346 
     347 
     348 
    327349    def getFilePath(self): 
    328350        """Get file path for file to be signed.""" 
    329351        return self.__filePath 
     352 
     353 
    330354 
    331355 
     
    341365        self.__filePath = filePath 
    342366 
     367 
     368 
    343369     
    344370    def createXML(self): 
     
    350376 
    351377        return None 
     378 
     379 
    352380 
    353381     
     
    368396                                Authority - may also be set in  __init__ 
    369397 
     398        signingKeyPwd:          password for signing key file. 
     399         
    370400        signingCertFilePath:    file path to certificate file of Attribute 
    371401                                Authority  - may also be set in  __init__ 
     
    482512 
    483513 
     514 
     515 
    484516    def isValidSig(self, 
    485517                   xmlTxt=None, 
  • security/trunk/python/NDG/AttAuthority.py

    r405 r407  
    199199            # TODO: 
    200200            # P J Kershaw 29/04/05 
     201            pdb.set_trace() 
     202            holderDN = X500DN(dn=extAttrCert['holder']) 
     203            if holderDN != usrDN: 
     204                raise "User certificate and Attribute Certificate DNs " + \ 
     205                      "don't match: " + usrDN + " and " + holderDN 
    201206             
    202207   
  • security/trunk/python/NDG/AttCert.py

    r404 r407  
    133133    def __repr__(self): 
    134134        """Override default behaviour to return internal dictionary content""" 
    135         return self.__dat 
     135        return str(self.__dat) 
    136136 
    137137                 
     
    325325        """Set the provenance for the certificate: 'original' or 'mapped'.""" 
    326326 
    327         if not validProvenance(provenance): 
     327        if not self.isValidProvenance(provenance): 
    328328            raise "Provenance must be set to \"" + \ 
    329329                "\" or \"".join(AttrCert.__provenance) + "\"" 
     
    477477        xmlTxt = \ 
    478478"""<attributeCertificate> 
    479         <acInfo> 
    480             <version>""" + self.__dat['version'] + """</version> 
    481             <holder>""" + self.__dat['holder'] + """</holder> 
    482             <issuer>""" + self.__dat['issuer'] + """</issuer> 
    483             <issuerName>""" + self.__dat['issuerName'] + """</issuerName> 
    484             <issuerSerialNumber>""" + str(self.__dat['issuerSerialNumber']) +\ 
     479    <acInfo> 
     480        <version>""" + self.__dat['version'] + """</version> 
     481        <holder>""" + self.__dat['holder'] + """</holder> 
     482        <issuer>""" + self.__dat['issuer'] + """</issuer> 
     483        <issuerName>""" + self.__dat['issuerName'] + """</issuerName> 
     484        <issuerSerialNumber>""" + str(self.__dat['issuerSerialNumber']) +\ 
    485485            """</issuerSerialNumber>  
    486486        <validity> 
  • security/trunk/python/NDG/X509.py

    r404 r407  
    3030             
    3131        self.__filePath = filePath 
    32  
     32        self.__dn = None 
     33         
    3334 
    3435    def read(self, filePath=None): 
     
    142143 
    143144 
     145 
     146 
    144147    def __repr__(self): 
    145148        """Override default behaviour to return internal dictionary content""" 
    146         return self.__dat 
    147  
    148      
     149        return self.serialise() 
     150 
     151 
     152 
     153 
     154    def __str__(self): 
     155        """Behaviour for print and string statements - convert DN into 
     156        serialised format.""" 
     157        return self.serialise() 
     158 
     159 
     160 
     161         
    149162    def __eq__(self, x500dn): 
    150163 
     
    156169        return self.__dat.items() == x500dn.items() 
    157170     
     171 
     172 
    158173     
    159174    def __delitem__(self, key): 
    160175         
    161176        raise 'Keys cannot be deleted from the X500DN' 
     177 
     178 
    162179 
    163180 
     
    180197            # key not recognised as a short or long name version 
    181198            raise 'Key "' + key + '" not recognised for X500DN' 
     199 
     200 
    182201 
    183202 
     
    202221 
    203222 
     223 
     224 
    204225    def clear(self): 
    205226        raise "Data cannot be cleared from " + X500DN.__name__ 
     
    215236        return self.__dat.keys() 
    216237 
     238 
    217239    def items(self): 
    218240        return self.__dat.items() 
    219241 
     242 
    220243    def values(self): 
    221244        return self.__dat.values() 
    222245 
     246 
    223247    def has_key(self): 
    224248        return self.__dat.has_key() 
     249 
     250 
    225251 
    226252     
     
    234260                 
    235261            self.__separator = separator 
    236  
    237         dn = self.__separator.join(["%s=%s" % i for i in self.__dat.items()]) 
    238         return dn 
    239  
    240  
    241     def deserialise(self, dn): 
     262             
     263 
     264        return self.__separator.join(["%s=%s" % field \ 
     265                                for field in self.__dat.items() if field[1]]) 
     266        
     267 
     268 
     269 
     270    def deserialise(self, dn, separator=None): 
    242271 
    243272        """Break up a DN string into it's constituent fields and use to 
    244273        update the object's dictionary""" 
    245274         
     275        if separator: 
     276            if not isinstance(separator, basestring): 
     277                raise "Separator must be a valid string" 
     278 
     279            self.__separator = separator 
     280 
     281         
    246282        dnFields = dn.split(self.__separator) 
    247  
     283        if len(dnFields) < 2: 
     284            raise "Error parsing DN string: \"%s\"" % dn 
     285 
     286         
    248287        # Split fields into key/value 
    249288        keyVals = [field.split('=') for field in dnFields] 
  • security/trunk/python/NDG/XMLSecDoc.py

    r404 r407  
    291291 
    292292 
    293     def write(self, filePath=None, bSign=False, **signArgs): 
     293 
     294    def write(self, filePath=None, bSign=True, xmlTxt=None, **signKeys): 
    294295 
    295296        """Write XML document applying digital signature 
    296297 
    297         filePath:            file path for XML output 
     298        filePath:               file path for XML output 
    298299                             
     300        bSign:                  flag defaults to True to sign the new 
     301                                certificate using the private key and 
     302                                certificate to sign the certificate. 
     303                                Set to False to NOT sign the document. 
     304 
     305        xmlTxt:                 string containing formatted xml text for 
     306                                signing.  If no text is provided, the method 
     307                                createXML() is called to return the text. 
     308                                Derived classes should implement this method. 
     309 
     310        Keyword arguments required by xmlSigDoc.sign(): 
     311         
    299312        signingKeyFilePath:     file path to private key file of Attribute 
    300313                                Authority - may also be set in  __init__ 
    301314 
     315        signingKeyPwd:          password for signing key file. 
     316 
    302317        signingCertFilePath:    file path to certificate file of Attribute 
    303318                                Authority  - may also be set in  __init__ 
    304  
    305         bSign:                  flag defaults to False to NOT sign the new 
    306                                 certificate.  Set to True to use the private 
    307                                 key and certificate to sign the certificate. 
    308319                                """ 
    309320 
     
    316327 
    317328         
     329        # Set up libxml2 object from string containing XML for writing 
     330        if xmlTxt is None: xmlTxt = self.createXML() 
     331 
     332         
    318333        # Apply digital signature of Attribute Authority 
    319         if bSign: self.sign(**signArgs) 
    320  
    321  
     334        if bSign: self.sign(xmlTxt=xmlTxt, **signKeys) 
     335 
     336 
     337        # Ensure libxml2 doc has been created for document to be written 
     338        #  A valid one should be present if sign() was called above 
     339        if self.__libxml2Doc is None: self.__libxml2ParseDoc(xmlTxt) 
     340 
     341             
    322342        # Updated content is held in libxml2 doc instance.  Use this to 
    323343        # write new certificate to file 
     
    325345 
    326346 
     347 
     348 
    327349    def getFilePath(self): 
    328350        """Get file path for file to be signed.""" 
    329351        return self.__filePath 
     352 
     353 
    330354 
    331355 
     
    341365        self.__filePath = filePath 
    342366 
     367 
     368 
    343369     
    344370    def createXML(self): 
     
    350376 
    351377        return None 
     378 
     379 
    352380 
    353381     
     
    368396                                Authority - may also be set in  __init__ 
    369397 
     398        signingKeyPwd:          password for signing key file. 
     399         
    370400        signingCertFilePath:    file path to certificate file of Attribute 
    371401                                Authority  - may also be set in  __init__ 
     
    482512 
    483513 
     514 
     515 
    484516    def isValidSig(self, 
    485517                   xmlTxt=None, 
Note: See TracChangeset for help on using the changeset viewer.