rewrite for eet 2.0 api version v4
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#include "eetv4signer.h"
|
||||
|
||||
#include <QProcess>
|
||||
#include <QTemporaryDir>
|
||||
#include <QtTest>
|
||||
|
||||
class EetV4SignerTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private slots:
|
||||
void signsSoapWithPkcs12();
|
||||
};
|
||||
|
||||
void EetV4SignerTest::signsSoapWithPkcs12()
|
||||
{
|
||||
QTemporaryDir directory;
|
||||
QVERIFY(directory.isValid());
|
||||
|
||||
const QString keyPath = directory.filePath(QStringLiteral("key.pem"));
|
||||
const QString certificatePath = directory.filePath(QStringLiteral("certificate.pem"));
|
||||
const QString bundlePath = directory.filePath(QStringLiteral("certificate.p12"));
|
||||
auto runOpenSsl = [](const QStringList &arguments) {
|
||||
QProcess process;
|
||||
process.start(QStringLiteral("openssl"), arguments);
|
||||
QVERIFY2(process.waitForFinished(30000), qPrintable(process.errorString()));
|
||||
QVERIFY2(process.exitStatus() == QProcess::NormalExit && process.exitCode() == 0,
|
||||
process.readAllStandardError().constData());
|
||||
};
|
||||
runOpenSsl({QStringLiteral("req"), QStringLiteral("-x509"), QStringLiteral("-newkey"),
|
||||
QStringLiteral("rsa:2048"), QStringLiteral("-nodes"), QStringLiteral("-subj"),
|
||||
QStringLiteral("/CN=EetCppTest"), QStringLiteral("-keyout"), keyPath,
|
||||
QStringLiteral("-out"), certificatePath, QStringLiteral("-days"), QStringLiteral("1")});
|
||||
runOpenSsl({QStringLiteral("pkcs12"), QStringLiteral("-export"), QStringLiteral("-out"),
|
||||
bundlePath, QStringLiteral("-inkey"), keyPath, QStringLiteral("-in"),
|
||||
certificatePath, QStringLiteral("-passout"), QStringLiteral("pass:test")});
|
||||
|
||||
const QByteArray unsignedSoap =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
||||
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""
|
||||
" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\""
|
||||
" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">"
|
||||
"<soap:Header/><soap:Body wsu:Id=\"body-id\"><test/></soap:Body></soap:Envelope>";
|
||||
QString error;
|
||||
const QByteArray signedSoap = EetV4Signer::signSoap(
|
||||
unsignedSoap, bundlePath, QByteArrayLiteral("test"), &error);
|
||||
QVERIFY2(!signedSoap.isEmpty(), qPrintable(error));
|
||||
QVERIFY(signedSoap.contains("<ds:Signature"));
|
||||
QVERIFY(signedSoap.contains("URI=\"#body-id\""));
|
||||
QVERIFY(signedSoap.contains("BinarySecurityToken"));
|
||||
|
||||
QString verificationError;
|
||||
QVERIFY2(EetV4Signer::verifySoap(signedSoap, &verificationError),
|
||||
qPrintable(verificationError));
|
||||
|
||||
QByteArray tamperedSoap = signedSoap;
|
||||
tamperedSoap.replace("<test/>", "<test>changed</test>");
|
||||
QVERIFY(!EetV4Signer::verifySoap(tamperedSoap, &verificationError));
|
||||
}
|
||||
|
||||
QTEST_MAIN(EetV4SignerTest)
|
||||
#include "eetv4signer_test.moc"
|
||||
Reference in New Issue
Block a user