Changeset 1491


Ignore:
Timestamp:
07/09/06 09:30:22 (13 years ago)
Author:
pjkersha
Message:

Added EncryptionHandler? class to look at XML encryption.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/Tests/xmlsec/WS-Security/wsSecurity.py

    r1469 r1491  
    5959                 certFilePath=None,  
    6060                 priKeyFilePath=None,  
    61                  priKeyPwd=None,  
    62                  sign_body=True,  
    63                  sign_headers=True): 
     61                 priKeyPwd=None): 
    6462         
    6563        self.__certFilePath = certFilePath 
     
    134132        soapWriter.body.node.setAttribute('wsu:Id', "body") 
    135133        soapWriter.body.node.setAttribute('xmlns:wsu', WSU.UTILITY) 
    136  
    137134 
    138135        # Serialize and re-parse prior to reference generation - calculating 
     
    377374         
    378375        print "Signature OK" 
    379      
    380        
     376 
     377 
     378class EncryptionHandler(object): 
     379    """Encrypt/Decrypt SOAP messages using WS-Security"""  
     380        
     381    def __init__(self, 
     382                 certFilePath=None,  
     383                 priKeyFilePath=None,  
     384                 priKeyPwd=None): 
     385         
     386        self.__certFilePath = certFilePath 
     387        self.__priKeyFilePath = priKeyFilePath 
     388        self.__priKeyPwd = priKeyPwd 
     389 
     390 
     391    def encrypt(self, soapWriter): 
     392        """Encrypt an outbound SOAP message""" 
     393         
     394        import pdb;pdb.set_trace() 
     395         
     396        # Use X.509 Cert to encrypt 
     397        x509Cert = X509.load_cert(self.__certFilePath) 
     398         
     399        # Extract RSA public key from the cert 
     400        rsaPubKey = x509Cert.get_pubkey().get_rsa() 
     401         
     402        data = "The Larch" 
     403        padding = ''.join([' ']*7) 
     404        data += padding 
     405        encryptedData = rsaPubKey.public_encrypt(data, RSA.pkcs1_padding) 
     406         
     407        return encryptedData 
     408 
     409        
     410    def decrypt(self, parsedSOAP, encryptedData=None): 
     411        """Decrypt an inbound SOAP message""" 
     412         
     413        # Read Private key to decrypt the data      
     414        priKeyFile = BIO.File(open(self.__priKeyFilePath))                                             
     415        priKey = RSA.load_key_bio(priKeyFile,  
     416                                  callback=lambda *ar, **kw: self.__priKeyPwd) 
     417         
     418        padding = ''.join([' ']*7) 
     419        decryptedData = priKey.private_decrypt(encryptedData, padding) 
     420         
     421        print decryptedData 
     422 
     423         
    381424if __name__ == "__main__": 
    382425    import sys 
    383426    txt = None 
    384427     
    385     s = SignatureHandler(certFilePath='../Junk-cert.pem', 
    386                          priKeyFilePath='../Junk-key.pem', 
    387                          priKeyPwd=open('../tmp2').read().strip()) 
     428    e = EncryptionHandler(certFilePath='../../Junk-cert.pem', 
     429                          priKeyFilePath='../../Junk-key.pem', 
     430                          priKeyPwd=open('../../tmp2').read().strip()) 
    388431     
    389     if 'sign' in sys.argv: 
    390         txt = s.sign()       
    391         print txt 
    392  
    393     if 'verify' in sys.argv: 
    394         if txt is None: 
    395             txt = open('./wsseSign-test-res.xml').read() 
    396              
    397         print "Signature OK? %s" % s.verify(txt) 
     432    print e.decrypt(e.encrypt(None)) 
     433     
Note: See TracChangeset for help on using the changeset viewer.