• Skip to content
  • Skip to link menu
KDE 4.4 API Reference
  • KDE API Reference
  • KDE Support
  • Sitemap
  • Contact Us
 

qca

cms.cpp

Go to the documentation of this file.
00001 
00026 #include <QtCrypto>
00027 #include <QtTest/QtTest>
00028 
00029 class CMSut : public QObject
00030 {
00031 
00032   Q_OBJECT
00033 
00034 private slots:
00035     void initTestCase();
00036     void cleanupTestCase();
00037     void xcrypt_data();
00038     void xcrypt();
00039     void signverify_data();
00040     void signverify();
00041     void signverify_message_data();
00042     void signverify_message();
00043     void signverify_message_invalid_data();
00044     void signverify_message_invalid();
00045 private:
00046     QCA::Initializer* m_init;
00047 
00048 };
00049 
00050 
00051 void CMSut::initTestCase()
00052 {
00053     m_init = new QCA::Initializer;
00054 #include "../fixpaths.include"
00055 }
00056 
00057 void CMSut::cleanupTestCase()
00058 {
00059     delete m_init;
00060 }
00061 
00062 void CMSut::xcrypt_data()
00063 {
00064     QTest::addColumn<QByteArray>("testText");
00065 
00066     QTest::newRow("empty") << QByteArray("");
00067     QTest::newRow("0") << QByteArray("0");
00068     QTest::newRow("07") << QByteArray("07899847jkjjfasjaJKJLJkljklj&kjlj;/**-+.01");
00069     QTest::newRow("dubious") << QByteArray("~!#**$#&&%^@#^&()");
00070 }
00071 
00072 void CMSut::xcrypt()
00073 {
00074     QStringList providersToTest;
00075     providersToTest.append("qca-ossl");
00076 
00077     foreach(const QString provider, providersToTest) {
00078         if( !QCA::isSupported( "cert", provider ) )
00079             QWARN( QString( "Certificate not supported for "+provider).toLocal8Bit() );
00080         else if( !QCA::isSupported( "cms", provider ) )
00081         QWARN( QString( "CMS not supported for "+provider).toLocal8Bit() );
00082     else {
00083         QCA::Certificate pubCert = QCA::Certificate::fromPEMFile( "QcaTestClientCert.pem",0, provider );
00084         QCOMPARE( pubCert.isNull(), false );
00085 
00086         QCA::SecureMessageKey secMsgKey;
00087         QCA::CertificateChain chain;
00088         chain += pubCert;
00089         secMsgKey.setX509CertificateChain( chain );
00090 
00091         QCA::CMS cms;
00092         QCA::SecureMessage msg(&cms);
00093         QCOMPARE( msg.canClearsign(), false );
00094         QCOMPARE( msg.canSignAndEncrypt(), false );
00095         QCOMPARE( msg.type(), QCA::SecureMessage::CMS );
00096 
00097         msg.setRecipient(secMsgKey);
00098 
00099         QFETCH( QByteArray, testText );
00100 
00101         msg.startEncrypt();
00102         msg.update(testText);
00103         msg.end();
00104 
00105         msg.waitForFinished(-1);
00106 
00107         QByteArray encryptedResult1 = msg.read();
00108         QCOMPARE( encryptedResult1.isEmpty(), false );
00109 
00110         msg.reset();
00111         msg.setRecipient(secMsgKey);
00112         msg.startEncrypt();
00113         msg.update( testText );
00114         msg.end();
00115 
00116         msg.waitForFinished(-1);
00117         QVERIFY( msg.success() );
00118 
00119         QByteArray encryptedResult2 = msg.read();
00120         QCOMPARE( encryptedResult2.isEmpty(), false );
00121 
00122         QCA::ConvertResult res;
00123         QCA::SecureArray passPhrase = "start";
00124         QCA::PrivateKey privKey = QCA::PrivateKey::fromPEMFile( "QcaTestClientKey.pem", passPhrase, &res );
00125         QCOMPARE( res, QCA::ConvertGood );
00126 
00127         secMsgKey.setX509PrivateKey( privKey );
00128         QCA::SecureMessageKeyList privKeyList;
00129         privKeyList += secMsgKey;
00130         QCA::CMS cms2;
00131         cms2.setPrivateKeys( privKeyList );
00132 
00133         QCA::SecureMessage msg2( &cms2 );
00134 
00135         msg2.startDecrypt();
00136         msg2.update( encryptedResult1 );
00137         msg2.end();
00138         msg2.waitForFinished(-1);
00139         QVERIFY( msg2.success() );
00140         QByteArray decryptedResult1 = msg2.read();
00141         QCOMPARE( decryptedResult1, testText );
00142 
00143         msg2.reset();
00144         msg2.startDecrypt();
00145         msg2.update( encryptedResult1 );
00146         msg2.end();
00147         msg2.waitForFinished(-1);
00148         QVERIFY( msg2.success() );
00149         QByteArray decryptedResult2 = msg2.read();
00150 
00151         QCOMPARE( decryptedResult1, decryptedResult2 );
00152 
00153         QCOMPARE( msg2.canClearsign(), false );
00154         QCOMPARE( msg2.canSignAndEncrypt(), false );
00155         QCOMPARE( msg2.type(), QCA::SecureMessage::CMS );
00156     }
00157     }
00158 }
00159 
00160 void CMSut::signverify_data()
00161 {
00162     QTest::addColumn<QByteArray>("testText");
00163 
00164     QTest::newRow("empty") << QByteArray("");
00165     QTest::newRow("0") << QByteArray("0");
00166     QTest::newRow("07") << QByteArray("07899847jkjjfasjaJKJLJkljklj&kjlj;/**-+.01");
00167     QTest::newRow("dubious") << QByteArray("~!#**$#&&%^@#^&()");
00168 }
00169 
00170 // This one tests Detached format.
00171 void CMSut::signverify()
00172 {
00173     QStringList providersToTest;
00174     providersToTest.append("qca-ossl");
00175 
00176     foreach(const QString provider, providersToTest) {
00177         if( !QCA::isSupported( "cert", provider ) )
00178             QWARN( QString( "Certificate not supported for "+provider).toLocal8Bit() );
00179         else if( !QCA::isSupported( "cms", provider ) )
00180         QWARN( QString( "CMS not supported for "+provider).toLocal8Bit() );
00181     else {
00182         QCA::ConvertResult res;
00183         QCA::SecureArray passPhrase = "start";
00184         QCA::PrivateKey privKey = QCA::PrivateKey::fromPEMFile( "QcaTestClientKey.pem", passPhrase, &res, provider );
00185         QCOMPARE( res, QCA::ConvertGood );
00186 
00187         QCA::Certificate pubCert = QCA::Certificate::fromPEMFile( "QcaTestClientCert.pem", &res, provider);
00188         QCOMPARE( res, QCA::ConvertGood );
00189         QCOMPARE( pubCert.isNull(), false );
00190 
00191         QCA::CertificateChain chain;
00192         chain += pubCert;
00193         QCA::SecureMessageKey secMsgKey;
00194         secMsgKey.setX509CertificateChain( chain );
00195         secMsgKey.setX509PrivateKey( privKey );
00196 
00197         QCA::SecureMessageKeyList privKeyList;
00198         privKeyList += secMsgKey;
00199         QCA::CMS cms2;
00200         cms2.setPrivateKeys( privKeyList );
00201 
00202         QCA::SecureMessage msg2( &cms2 );
00203         msg2.setSigners( privKeyList );
00204         QCOMPARE( msg2.canClearsign(), false );
00205         QCOMPARE( msg2.canSignAndEncrypt(), false );
00206         QCOMPARE( msg2.type(), QCA::SecureMessage::CMS );
00207 
00208         QFETCH( QByteArray, testText );
00209 
00210         msg2.startSign(QCA::SecureMessage::Detached);
00211         msg2.update( testText );
00212         msg2.end();
00213         msg2.waitForFinished(-1);
00214         QVERIFY( msg2.success() );
00215         QByteArray signedResult1 = msg2.signature();
00216         QCOMPARE( signedResult1.isEmpty(), false );
00217 
00218         msg2.reset();
00219 
00220         msg2.setSigners( privKeyList );
00221         msg2.startSign(QCA::SecureMessage::Detached);
00222         msg2.update( testText );
00223         msg2.end();
00224         msg2.waitForFinished(-1);
00225         QVERIFY( msg2.success() );
00226         QByteArray signedResult2 = msg2.signature();
00227 
00228         QCOMPARE( signedResult2.isEmpty(), false );
00229 
00230         QCA::CMS cms;
00231         QCA::Certificate caCert = QCA::Certificate::fromPEMFile( "QcaTestRootCert.pem", &res, provider );
00232         QCOMPARE( res, QCA::ConvertGood );
00233         QCA::CertificateCollection caCertCollection;
00234         caCertCollection.addCertificate(caCert);
00235 
00236         cms.setTrustedCertificates( caCertCollection );
00237         QCA::SecureMessage msg( &cms );
00238         QCOMPARE( msg.canClearsign(), false );
00239         QCOMPARE( msg.canSignAndEncrypt(), false );
00240         QCOMPARE( msg.type(), QCA::SecureMessage::CMS );
00241 
00242         msg.startVerify( signedResult1 );
00243         msg.update( testText );
00244         msg.end();
00245 
00246         msg.waitForFinished(-1);
00247         QVERIFY( msg.wasSigned() );
00248         QVERIFY( msg.success() );
00249         QEXPECT_FAIL( "empty", "We don't seem to be able to verify signature of a zero length message", Continue);
00250         QVERIFY( msg.verifySuccess() );
00251 
00252         msg.reset();
00253 
00254         msg.startVerify( signedResult2);
00255         msg.update( testText );
00256         msg.end();
00257 
00258         msg.waitForFinished(-1);
00259         QVERIFY( msg.wasSigned() );
00260         QVERIFY( msg.success() );
00261         QEXPECT_FAIL( "empty", "We don't seem to be able to verify signature of a zero length message", Continue);
00262         QVERIFY( msg.verifySuccess() );
00263 
00264         msg.reset();
00265 
00266         // This tests junk on the end of the signature - should fail
00267         msg.startVerify( signedResult2 + "junk");
00268         msg.update( testText );
00269         msg.end();
00270 
00271         msg.waitForFinished(-1);
00272         QVERIFY( msg.wasSigned() );
00273         QVERIFY( msg.success() );
00274         QCOMPARE( msg.verifySuccess(), false );
00275 
00276         msg.reset();
00277 
00278         // This tests junk on the end of the message - should fail
00279         msg.startVerify( signedResult2 );
00280         msg.update( testText+"junk" );
00281         msg.end();
00282 
00283         msg.waitForFinished(-1);
00284         QVERIFY( msg.wasSigned() );
00285         QVERIFY( msg.success() );
00286         QCOMPARE( msg.verifySuccess(), false );
00287     }
00288     }
00289 }
00290 
00291 
00292 void CMSut::signverify_message_data()
00293 {
00294     QTest::addColumn<QByteArray>("testText");
00295 
00296     QTest::newRow("empty") << QByteArray("");
00297     QTest::newRow("0") << QByteArray("0");
00298     QTest::newRow("07") << QByteArray("07899847jkjjfasjaJKJLJkljklj&kjlj;/**-+.01");
00299     QTest::newRow("dubious") << QByteArray("~!#**$#&&%^@#^&()");
00300 }
00301 
00302 // This one tests Message format
00303 void CMSut::signverify_message()
00304 {
00305     QStringList providersToTest;
00306     providersToTest.append("qca-ossl");
00307 
00308     foreach(const QString provider, providersToTest) {
00309         if( !QCA::isSupported( "cert", provider ) )
00310             QWARN( QString( "Certificate not supported for "+provider).toLocal8Bit() );
00311         else if( !QCA::isSupported( "cms", provider ) )
00312         QWARN( QString( "CMS not supported for "+provider).toLocal8Bit() );
00313     else {
00314         QCA::ConvertResult res;
00315         QCA::SecureArray passPhrase = "start";
00316         QCA::PrivateKey privKey = QCA::PrivateKey::fromPEMFile( "QcaTestClientKey.pem", passPhrase, &res, provider );
00317         QCOMPARE( res, QCA::ConvertGood );
00318 
00319         QCA::Certificate pubCert = QCA::Certificate::fromPEMFile( "QcaTestClientCert.pem", &res, provider );
00320         QCOMPARE( res, QCA::ConvertGood );
00321         QCOMPARE( pubCert.isNull(), false );
00322 
00323         QCA::CertificateChain chain;
00324         chain += pubCert;
00325         QCA::SecureMessageKey secMsgKey;
00326         secMsgKey.setX509CertificateChain( chain );
00327         secMsgKey.setX509PrivateKey( privKey );
00328 
00329         QCA::SecureMessageKeyList privKeyList;
00330         privKeyList += secMsgKey;
00331         QCA::CMS cms2;
00332         cms2.setPrivateKeys( privKeyList );
00333 
00334         QCA::SecureMessage msg2( &cms2 );
00335         msg2.setSigners( privKeyList );
00336         QCOMPARE( msg2.canClearsign(), false );
00337         QCOMPARE( msg2.canSignAndEncrypt(), false );
00338         QCOMPARE( msg2.type(), QCA::SecureMessage::CMS );
00339 
00340         QFETCH( QByteArray, testText );
00341 
00342         msg2.startSign( QCA::SecureMessage::Message );
00343         msg2.update( testText );
00344         msg2.end();
00345         msg2.waitForFinished(-1);
00346         QVERIFY( msg2.success() );
00347         QByteArray signedResult1 = msg2.read();
00348         QCOMPARE( signedResult1.isEmpty(), false );
00349 
00350         msg2.reset();
00351 
00352         msg2.setSigners( privKeyList );
00353         msg2.startSign(QCA::SecureMessage::Message);
00354         msg2.update( testText );
00355         msg2.end();
00356         msg2.waitForFinished(-1);
00357         QVERIFY( msg2.success() );
00358         QByteArray signedResult2 = msg2.read();
00359 
00360         QCOMPARE( signedResult2.isEmpty(), false );
00361 
00362         QCA::CMS cms;
00363         QCA::Certificate caCert = QCA::Certificate::fromPEMFile( "QcaTestRootCert.pem", &res, provider );
00364         QCOMPARE( res, QCA::ConvertGood );
00365 
00366         QCA::CertificateCollection caCertCollection;
00367         caCertCollection.addCertificate(caCert);
00368 
00369         cms.setTrustedCertificates( caCertCollection );
00370         QCA::SecureMessage msg( &cms );
00371         QCOMPARE( msg.canClearsign(), false );
00372         QCOMPARE( msg.canSignAndEncrypt(), false );
00373         QCOMPARE( msg.type(), QCA::SecureMessage::CMS );
00374 
00375         msg.startVerify( );
00376         msg.update( signedResult1 );
00377         msg.end();
00378 
00379         msg.waitForFinished(-1);
00380         QVERIFY( msg.wasSigned() );
00381         QVERIFY( msg.success() );
00382         QVERIFY( msg.verifySuccess() );
00383 
00384         msg.reset();
00385 
00386         msg.startVerify( );
00387         msg.update( signedResult2 );
00388         msg.end();
00389 
00390         msg.waitForFinished(-1);
00391         QVERIFY( msg.wasSigned() );
00392         QVERIFY( msg.success() );
00393         QVERIFY( msg.verifySuccess() );
00394 
00395         msg.reset();
00396 
00397         msg.startVerify( );
00398         msg.update( signedResult2 );
00399         msg.end();
00400 
00401         msg.waitForFinished(-1);
00402         QVERIFY( msg.wasSigned() );
00403         QVERIFY( msg.success() );
00404         QCOMPARE( msg.verifySuccess(), true );
00405     }
00406     }
00407 }
00408 
00409 void CMSut::signverify_message_invalid_data()
00410 {
00411     QTest::addColumn<QByteArray>("testText");
00412 
00413     QTest::newRow("empty") << QByteArray("");
00414     QTest::newRow("0") << QByteArray("0");
00415     QTest::newRow("07") << QByteArray("07899847jkjjfasjaJKJLJkljklj&kjlj;/**-+.01");
00416     QTest::newRow("dubious") << QByteArray("~!#**$#&&%^@#^&()");
00417 }
00418 
00419 
00420 // This one tests Message format
00421 void CMSut::signverify_message_invalid()
00422 {
00423     QStringList providersToTest;
00424     providersToTest.append("qca-ossl");
00425 
00426     foreach(const QString provider, providersToTest) {
00427         if( !QCA::isSupported( "cert", provider ) )
00428             QWARN( QString( "Certificate not supported for "+provider).toLocal8Bit() );
00429         else if( !QCA::isSupported( "cms", provider ) )
00430         QWARN( QString( "CMS not supported for "+provider).toLocal8Bit() );
00431     else {
00432         QCA::ConvertResult res;
00433         QCA::SecureArray passPhrase = "start";
00434         QCA::PrivateKey privKey = QCA::PrivateKey::fromPEMFile( "QcaTestClientKey.pem", passPhrase, &res, provider );
00435         QCOMPARE( res, QCA::ConvertGood );
00436 
00437         QCA::Certificate pubCert = QCA::Certificate::fromPEMFile( "QcaTestClientCert.pem", &res, provider );
00438         QCOMPARE( res, QCA::ConvertGood );
00439         QCOMPARE( pubCert.isNull(), false );
00440 
00441         QCA::CertificateChain chain;
00442         chain += pubCert;
00443         QCA::SecureMessageKey secMsgKey;
00444         secMsgKey.setX509CertificateChain( chain );
00445         secMsgKey.setX509PrivateKey( privKey );
00446 
00447         QCA::SecureMessageKeyList privKeyList;
00448         privKeyList += secMsgKey;
00449         QCA::CMS cms2;
00450         cms2.setPrivateKeys( privKeyList );
00451 
00452         QCA::SecureMessage msg2( &cms2 );
00453         msg2.setSigners( privKeyList );
00454         QCOMPARE( msg2.canClearsign(), false );
00455         QCOMPARE( msg2.canSignAndEncrypt(), false );
00456         QCOMPARE( msg2.type(), QCA::SecureMessage::CMS );
00457 
00458         QFETCH( QByteArray, testText );
00459 
00460         msg2.startSign( QCA::SecureMessage::Message );
00461         msg2.update( testText );
00462         msg2.end();
00463         msg2.waitForFinished(-1);
00464         QVERIFY( msg2.success() );
00465         QByteArray signedResult1 = msg2.read();
00466         QCOMPARE( signedResult1.isEmpty(), false );
00467 
00468         QCA::CMS cms;
00469         QCA::Certificate caCert = QCA::Certificate::fromPEMFile( "QcaTestRootCert.pem", &res, provider );
00470         QCOMPARE( res, QCA::ConvertGood );
00471 
00472         QCA::CertificateCollection caCertCollection;
00473         caCertCollection.addCertificate(caCert);
00474 
00475         cms.setTrustedCertificates( caCertCollection );
00476         QCA::SecureMessage msg( &cms );
00477         QCOMPARE( msg.canClearsign(), false );
00478         QCOMPARE( msg.canSignAndEncrypt(), false );
00479         QCOMPARE( msg.type(), QCA::SecureMessage::CMS );
00480 
00481         // This is just to break things
00482         // signedResult1[30] = signedResult1[30] + 1;
00483         signedResult1[signedResult1.size()-2] = 0x00;
00484 
00485         msg.startVerify( );
00486         msg.update( signedResult1 );
00487         msg.end();
00488 
00489         msg.waitForFinished(-1);
00490         QVERIFY( msg.wasSigned() );
00491         QVERIFY( msg.success() );
00492         QCOMPARE( msg.verifySuccess(), false );
00493     }
00494     }
00495 }
00496 
00497 
00498 QTEST_MAIN(CMSut)
00499 
00500 #include "cms.moc"
00501 

qca

Skip menu "qca"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

KDE Support

Skip menu "KDE Support"
  • akonadi
  • Decibel
  • grantlee
  • kdewin
  • phonon
  •     Backend
  • polkit-qt
  • qca
  • qimageblitz
  • soprano
  • strigi
  •     searchclient
  •     streamanalyzer
  •     streams
Generated for KDE Support by doxygen 1.5.9-20090814
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal