blautenb    2003/10/13 04:08:39

  Modified:    c/src/xenc/impl XENCAlgorithmHandlerDefault.cpp
                        XENCCipherImpl.cpp
  Log:
  Implementation of Symmetric Encryption in WinCAPI
  
  Revision  Changes    Path
  1.3       +6 -6      
xml-security/c/src/xenc/impl/XENCAlgorithmHandlerDefault.cpp
  
  Index: XENCAlgorithmHandlerDefault.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-security/c/src/xenc/impl/XENCAlgorithmHandlerDefault.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XENCAlgorithmHandlerDefault.cpp   3 Oct 2003 09:50:05 -0000       1.2
  +++ XENCAlgorithmHandlerDefault.cpp   13 Oct 2003 11:08:39 -0000      1.3
  @@ -179,7 +179,7 @@
                        aesBuf[7] ^= ((n * j) + i);
   
                        // do decrypt
  -                     sk->decryptInit();
  +                     sk->decryptInit(false);         // No padding
                        int sz = sk->decrypt(aesBuf, aesOutBuf, 16, 16);
                        sz += sk->decryptFinish(&aesOutBuf[sz], 16 - sz);
   
  @@ -218,7 +218,7 @@
        XMLByte buf[_MY_MAX_KEY_SIZE + 8];
        memcpy(buf, s_AES_IV, 8);
        XMLByte aesBuf[16];
  -     XMLByte aesOutBuf[16];
  +     XMLByte aesOutBuf[32];  // Give this an extra block for WinCAPI
        TXFMBase * b = cipherText->getLastTxfm();
        int sz = b->readBytes(&buf[8], _MY_MAX_KEY_SIZE);
   
  @@ -255,9 +255,9 @@
                        memcpy(&aesBuf[8], &buf[8 * i], 8);
   
                        // do encrypt
  -                     sk->encryptInit();
  -                     int sz = sk->encrypt(aesBuf, aesOutBuf, 16, 16);
  -                     sz += sk->encryptFinish(&aesOutBuf[sz], 16 - sz);
  +                     sk->encryptInit(false);
  +                     int sz = sk->encrypt(aesBuf, aesOutBuf, 16, 32);
  +                     sz += sk->encryptFinish(&aesOutBuf[sz], 32 - sz);
   
                        if (sz != 16) {
                                throw XSECException(XSECException::CipherError, 
  
  
  
  1.8       +27 -18    xml-security/c/src/xenc/impl/XENCCipherImpl.cpp
  
  Index: XENCCipherImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCCipherImpl.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XENCCipherImpl.cpp        6 Oct 2003 12:16:37 -0000       1.7
  +++ XENCCipherImpl.cpp        13 Oct 2003 11:08:39 -0000      1.8
  @@ -412,28 +412,37 @@
                                if (kil->item(i)->getKeyInfoType() == 
DSIGKeyInfo::KEYINFO_ENCRYPTEDKEY) {
   
                                        XENCEncryptedKey * ek = 
dynamic_cast<XENCEncryptedKey*>(kil->item(i));
  -                                     XMLByte buffer[1024];
  -                                     int keySize = decryptKey(ek, buffer, 
1024);
  +                                     volatile XMLByte buffer[1024];
  +                                     try {
  +                                             // Have to cast off volatile
  +                                             int keySize = decryptKey(ek, 
(XMLByte *) buffer, 1024);
   
  -                                     if (keySize > 0) {
  -                                             // Try to map the key
  +                                             if (keySize > 0) {
  +                                                     // Try to map the key
   
  -                                             XENCEncryptionMethod * 
encryptionMethod = 
  -                                                     
mp_encryptedData->getEncryptionMethod();
  +                                                     XENCEncryptionMethod * 
encryptionMethod = 
  +                                                             
mp_encryptedData->getEncryptionMethod();
   
  -                                             if (encryptionMethod != NULL) {
  -             
  -                                                     handler = 
  -                                                             
XSECPlatformUtils::g_algorithmMapper->mapURIToHandler(
  -                                                                     
mp_encryptedData->getEncryptionMethod()->getAlgorithm());
  +                                                     if (encryptionMethod != 
NULL) {
  +                     
  +                                                             handler = 
  +                                                                     
XSECPlatformUtils::g_algorithmMapper->mapURIToHandler(
  +                                                                             
mp_encryptedData->getEncryptionMethod()->getAlgorithm());
   
  -                                                     if (handler != NULL)
  -                                                             mp_key = 
handler->createKeyForURI(
  -                                                                             
        mp_encryptedData->getEncryptionMethod()->getAlgorithm(),
  -                                                                             
        buffer,
  -                                                                             
        keySize);
  +                                                             if (handler != 
NULL)
  +                                                                     mp_key 
= handler->createKeyForURI(
  +                                                                             
                mp_encryptedData->getEncryptionMethod()->getAlgorithm(),
  +                                                                             
                (XMLByte *) buffer,
  +                                                                             
                keySize);
  +                                                     }
                                                }
  +                                     } catch (...) {
  +                                             memset((void *) buffer, 0, 
1024);
  +                                             throw;
                                        }
  +
  +                                     // Clear out the key buffer
  +                                     memset((void *) buffer, 0, 1024);
                                }
                        }
                }
  
  
  

Reply via email to