summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2018-01-26 18:04:17 (GMT)
committerTobias Markmann <tm@ayena.de>2018-03-12 09:02:00 (GMT)
commitff600776577ce4e3bbf9aa66f5980bc9cf1042a0 (patch)
treef4dcd3484d481d8a7b78bdbf29a3481f0e6b7e83 /Swiften/TLS/UnitTest/ClientServerTest.cpp
parent3a540816280691e7ca3191867d3c73beba465674 (diff)
downloadswift-ff600776577ce4e3bbf9aa66f5980bc9cf1042a0.zip
swift-ff600776577ce4e3bbf9aa66f5980bc9cf1042a0.tar.bz2
Add getPeerFinishMessage() method and OpenSSL TLS backend
This method allows to calculate the TLS finish message of the peer of a TLS connection. It can be used to provide SASL channel binding for TLS servers. Test-Information: Added unit test that verifies the finish messages of a server TLS context with the finish messages of a client TLS context. Tests pass on macOS 10.13.3 with OpenSSL. Change-Id: Ia5ba539e1fb6d1bef6b4436bb59c7384b57a69b0
Diffstat (limited to 'Swiften/TLS/UnitTest/ClientServerTest.cpp')
-rw-r--r--Swiften/TLS/UnitTest/ClientServerTest.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/Swiften/TLS/UnitTest/ClientServerTest.cpp b/Swiften/TLS/UnitTest/ClientServerTest.cpp
index 692b3c0..5777856 100644
--- a/Swiften/TLS/UnitTest/ClientServerTest.cpp
+++ b/Swiften/TLS/UnitTest/ClientServerTest.cpp
@@ -655,3 +655,26 @@ TEST(ClientServerTest, testClientServerSNIRequestedHostUnavailable) {
ASSERT_EQ("client", events.events[3].first);
ASSERT_EQ("TLSFault()", boost::apply_visitor(TLSEventToStringVisitor(), events.events[3].second));
}
+
+TEST(ClientServerTest, testClientServerEqualFinishedMessage) {
+ auto clientContext = createTLSContext(TLSContext::Mode::Client);
+ auto serverContext = createTLSContext(TLSContext::Mode::Server);
+
+ TLSClientServerEventHistory events(clientContext.get(), serverContext.get());
+
+ ClientServerConnector connector(clientContext.get(), serverContext.get());
+
+ auto tlsFactories = std::make_shared<PlatformTLSFactories>();
+
+ ASSERT_EQ(true, serverContext->setCertificateChain(tlsFactories->getCertificateFactory()->createCertificateChain(createByteArray(certificatePEM["capulet.example"]))));
+
+ auto privateKey = tlsFactories->getCertificateFactory()->createPrivateKey(createSafeByteArray(privateKeyPEM["capulet.example"]));
+ ASSERT_NE(nullptr, privateKey.get());
+ ASSERT_EQ(true, serverContext->setPrivateKey(privateKey));
+
+ serverContext->accept();
+ clientContext->connect();
+
+ ASSERT_EQ(serverContext->getPeerFinishMessage(), clientContext->getFinishMessage());
+ ASSERT_EQ(clientContext->getPeerFinishMessage(), serverContext->getFinishMessage());
+}