blautenb    2003/11/09 18:49:04

  Modified:    c/src/tools/xtest xtest.cpp
  Log:
  Added unit tests for encryptElementContent and encryptElement
  
  Revision  Changes    Path
  1.33      +148 -2    xml-security/c/src/tools/xtest/xtest.cpp
  
  Index: xtest.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/tools/xtest/xtest.cpp,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- xtest.cpp 4 Nov 2003 11:28:36 -0000       1.32
  +++ xtest.cpp 10 Nov 2003 02:49:04 -0000      1.33
  @@ -454,10 +454,14 @@
   
        XMLFormatTarget *formatTarget = new StdOutFormatTarget();
   
  +     cerr << endl;
  +
        theSerializer->writeNode(formatTarget, *doc);
        
        cout << endl;
   
  +     cerr << endl;
  +
        delete theSerializer;
        delete formatTarget;
   
  @@ -833,6 +837,114 @@
   //           Unit tests for test encrypt/Decrypt
   // 
--------------------------------------------------------------------------------
   
  +void unitTestElementContentEncrypt(DOMImplementation *impl, XSECCryptoKey * 
key, encryptionMethod em, bool doElementContent) {
  +
  +     if (doElementContent)
  +             cerr << "Encrypting Element Content ... ";
  +     else
  +             cerr << "Encrypting Element ... ";
  +     
  +     // Create a document
  +    
  +     DOMDocument * doc = createTestDoc(impl);
  +     DOMNode * categoryNode = findNode(doc, MAKE_UNICODE_STRING("category"));
  +     if (categoryNode == NULL) {
  +
  +             cerr << "Error finding category node for encryption test" << 
endl;
  +             exit(1);
  +
  +     }
  +
  +     // Create and execute cipher
  +
  +     XSECProvider prov;
  +     XENCCipher * cipher;
  +
  +     try {
  +             
  +             /*
  +              * Now we have a document, find the data node.
  +              */
  +
  +             cipher = prov.newCipher(doc);
  +             cipher->setXENCNSPrefix(MAKE_UNICODE_STRING("xenc"));
  +             cipher->setPrettyPrint(true);
  +
  +             // Set a key
  +
  +             cipher->setKey(key->clone());
  +     
  +             // Now encrypt!
  +             if (doElementContent)
  +                     
cipher->encryptElementContent(doc->getDocumentElement(), em);
  +             else
  +                     cipher->encryptElement((DOMElement *) categoryNode, em);
  +
  +             cerr << "done ... check encrypted ... ";
  +
  +             DOMNode * t = findNode(doc, MAKE_UNICODE_STRING("category"));
  +             if (t != NULL) {
  +
  +                     cerr << "no - a category child still exists" << endl;
  +                     exit(1);
  +
  +             }
  +             else
  +                     cerr << "yes" << endl;
  +             
  +             outputDoc(impl, doc);
  +             
  +             if (doElementContent)
  +                     cerr << "Decrypting Element content ... ";
  +             else
  +                     cerr << "Decrypting Element ... ";
  +
  +             // OK - Now we try to decrypt
  +             // Find the EncryptedData node
  +             DOMNode * n = findXENCNode(doc, "EncryptedData");
  +
  +             XENCCipher * cipher2 = prov.newCipher(doc);
  +
  +             cipher2->setKey(key);
  +
  +             cipher2->decryptElement(static_cast<DOMElement *>(n));
  +
  +             cerr << "done ... check decrypt ... ";
  +             t = findNode(doc, MAKE_UNICODE_STRING("category"));
  +
  +             if (t == NULL) {
  +
  +                     cerr << " failed - category did not decrypt properly" 
<< endl;
  +                     exit(1);
  +
  +             }
  +             else
  +                     cerr << "OK" << endl;
  +
  +             outputDoc(impl, doc);
  +
  +     }
  +     catch (XSECException &e)
  +     {
  +             cerr << "An error occured during encryption processing\n   
Message: ";
  +             char * ce = XMLString::transcode(e.getMsg());
  +             cerr << ce << endl;
  +             delete ce;
  +             exit(1);
  +             
  +     }       
  +     catch (XSECCryptoException &e)
  +     {
  +             cerr << "A cryptographic error occured during encryption 
processing\n   Message: "
  +             << e.getMsg() << endl;
  +             exit(1);
  +     }
  +
  +     doc->release();
  +
  +}
  +
  +
   void unitTestKeyEncrypt(DOMImplementation *impl, XSECCryptoKey * k, 
encryptionMethod em) {
   
        // Create a document that we will embed the encrypted key in
  @@ -1019,6 +1131,41 @@
                ks->setKey((unsigned char *) s_keyStr, 24);
                
                unitTestKeyEncrypt(impl, ks, ENCRYPT_KW_3DES);
  +
  +             // Now do Element encrypts
  +             // 128 AES
  +             ks = 
XSECPlatformUtils::g_cryptoProvider->keySymmetric(XSECCryptoSymmetricKey::KEY_AES_128);
  +             ks->setKey((unsigned char *) s_keyStr, 16);
  +
  +             cerr << "Unit testing AES 128 bit CBC encryption" << endl;
  +             unitTestElementContentEncrypt(impl, ks->clone(), 
ENCRYPT_AES128_CBC, false);
  +             unitTestElementContentEncrypt(impl, ks, ENCRYPT_AES128_CBC, 
true);
  +
  +             //192 AES
  +             ks = 
XSECPlatformUtils::g_cryptoProvider->keySymmetric(XSECCryptoSymmetricKey::KEY_AES_192);
  +             ks->setKey((unsigned char *) s_keyStr, 24);
  +
  +             cerr << "Unit testing AES 192 bit CBC encryption" << endl;
  +             unitTestElementContentEncrypt(impl, ks->clone(), 
ENCRYPT_AES192_CBC, false);
  +             unitTestElementContentEncrypt(impl, ks, ENCRYPT_AES192_CBC, 
true);
  +
  +             // 256 AES
  +             ks = 
XSECPlatformUtils::g_cryptoProvider->keySymmetric(XSECCryptoSymmetricKey::KEY_AES_256);
  +             ks->setKey((unsigned char *) s_keyStr, 32);
  +
  +             cerr << "Unit testing AES 256 bit CBC encryption" << endl;
  +             unitTestElementContentEncrypt(impl, ks->clone(), 
ENCRYPT_AES256_CBC, false);
  +             unitTestElementContentEncrypt(impl, ks, ENCRYPT_AES256_CBC, 
true);
  +
  +             // 192 3DES
  +             ks = 
XSECPlatformUtils::g_cryptoProvider->keySymmetric(XSECCryptoSymmetricKey::KEY_3DES_192);
  +             ks->setKey((unsigned char *) s_keyStr, 24);
  +
  +             cerr << "Unit testing 3DES CBC encryption" << endl;
  +             unitTestElementContentEncrypt(impl, ks->clone(), 
ENCRYPT_3DES_CBC, false);
  +             unitTestElementContentEncrypt(impl, ks, ENCRYPT_3DES_CBC, true);
  +
  +
        }
        catch (XSECCryptoException &e)
        {
  @@ -1027,7 +1174,6 @@
                << e.getMsg() << endl;
                exit(1);
        }
  -
   
   }
   // 
--------------------------------------------------------------------------------
  
  
  

Reply via email to