qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From acon...@apache.org
Subject [43/50] qpid-proton git commit: PROTON-1946: [cpp] connection config parser incorrect defaults
Date Fri, 02 Nov 2018 20:47:03 GMT
PROTON-1946: [cpp] connection config parser incorrect defaults

- Change default "host" to "localhost" (was "")
- Only throw proton::error, don't leak jsoncpp exceptions
- Add tests for SASL/TLS behavior
- Treat explicit "null" valued field as equivalent to a missing field


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/b3421517
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/b3421517
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/b3421517

Branch: refs/heads/go1
Commit: b34215170680ebb2f6b60604374c58f598b45803
Parents: 1b554aa
Author: Alan Conway <aconway@redhat.com>
Authored: Mon Oct 1 14:54:35 2018 -0400
Committer: Alan Conway <aconway@redhat.com>
Committed: Tue Oct 2 10:18:46 2018 -0400

----------------------------------------------------------------------
 cpp/CMakeLists.txt                              |  30 ++--
 cpp/src/connect_config.cpp                      | 103 +++++------
 cpp/src/connect_config_test.cpp                 | 171 +++++++++++++++++--
 cpp/testdata/.config/messaging/TEST             |   1 +
 cpp/testdata/certs/bad-server-certificate.p12   | Bin 0 -> 2186 bytes
 cpp/testdata/certs/bad-server-certificate.pem   |  31 ++++
 cpp/testdata/certs/bad-server-private-key.pem   |  21 +++
 cpp/testdata/certs/bad-server.pkcs12            | Bin 0 -> 2223 bytes
 cpp/testdata/certs/ca-certificate.p12           | Bin 0 -> 1408 bytes
 cpp/testdata/certs/ca-certificate.pem           |  32 ++++
 cpp/testdata/certs/ca.pkcs12                    | Bin 0 -> 2263 bytes
 cpp/testdata/certs/client-certificate.p12       | Bin 0 -> 2242 bytes
 cpp/testdata/certs/client-certificate.pem       |  26 +++
 cpp/testdata/certs/client-certificate1.p12      | Bin 0 -> 2300 bytes
 cpp/testdata/certs/client-certificate1.pem      |  27 +++
 .../certs/client-private-key-no-password.pem    |  19 +++
 cpp/testdata/certs/client-private-key.pem       |  21 +++
 cpp/testdata/certs/client-private-key1.pem      |  21 +++
 cpp/testdata/certs/client-request.pem           |  24 +++
 cpp/testdata/certs/client-request1.pem          |  25 +++
 cpp/testdata/certs/client.pkcs12                | Bin 0 -> 2231 bytes
 cpp/testdata/certs/client1.pkcs12               | Bin 0 -> 2345 bytes
 cpp/testdata/certs/make_certs.sh                |  57 +++++++
 cpp/testdata/certs/server-certificate-lh.pem    |  26 +++
 cpp/testdata/certs/server-certificate.p12       | Bin 0 -> 2258 bytes
 cpp/testdata/certs/server-certificate.pem       |  27 +++
 cpp/testdata/certs/server-lh.pkcs12             | Bin 0 -> 2199 bytes
 cpp/testdata/certs/server-private-key-lh.pem    |  21 +++
 cpp/testdata/certs/server-private-key.pem       |  21 +++
 cpp/testdata/certs/server-request-lh.pem        |  23 +++
 cpp/testdata/certs/server-request.pem           |  24 +++
 cpp/testdata/certs/server-wc-certificate.p12    | Bin 0 -> 2320 bytes
 cpp/testdata/certs/server-wc-certificate.pem    |  28 +++
 cpp/testdata/certs/server-wc-private-key.pem    |  21 +++
 cpp/testdata/certs/server-wc-request.pem        |  25 +++
 cpp/testdata/certs/server-wc.pkcs12             | Bin 0 -> 2317 bytes
 cpp/testdata/certs/server.pkcs12                | Bin 0 -> 2263 bytes
 cpp/testdata/sasl-conf/proton-server.conf.in    |   2 +
 38 files changed, 751 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 35f5478..7d399d8 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -245,17 +245,17 @@ install (FILES
   ${CMAKE_CURRENT_BINARY_DIR}/ProtonCppConfigVersion.cmake
   DESTINATION ${LIB_INSTALL_DIR}/cmake/ProtonCpp)
 
+set(testdata "${CMAKE_CURRENT_BINARY_DIR}/testdata")
+set(test_env "PN_SASL_CONFIG_PATH=${testdata}/sasl-conf")
+if (CMAKE_SYSTEM_NAME STREQUAL Windows)
+  set(test_env ${test_env} "PATH=$<TARGET_FILE_DIR:qpid-proton>")
+endif()
+
 macro(add_cpp_test test)
   add_executable (${test} src/${test}.cpp)
   target_link_libraries (${test} qpid-proton-cpp ${PLATFORM_LIBS})
-  if (CMAKE_SYSTEM_NAME STREQUAL Windows)
-    add_test (NAME cpp-${test}
-      COMMAND ${PN_ENV_SCRIPT}
-      "PATH=$<TARGET_FILE_DIR:qpid-proton>"
-      $<TARGET_FILE:${test}> ${ARGN})
-  else ()
-    add_test (NAME cpp-${test} COMMAND ${TEST_EXE_PREFIX_CMD} $<TARGET_FILE:${test}> ${ARGN})
-  endif ()
+  add_test (NAME cpp-${test}
+    COMMAND ${PN_ENV_SCRIPT} -- ${test_env}  ${TEST_EXE_PREFIX_CMD} $<TARGET_FILE:${test}> ${ARGN})
 endmacro(add_cpp_test)
 
 add_cpp_test(codec_test)
@@ -270,9 +270,15 @@ add_cpp_test(url_test)
 add_cpp_test(reconnect_test)
 add_cpp_test(link_test)
 if (ENABLE_JSONCPP)
-  # Directories needed by connect_config tests
-  file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/testdata/.config/messaging")
   add_cpp_test(connect_config_test)
-  set_tests_properties(cpp-connect_config_test PROPERTIES
-    WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
+  target_link_libraries(connect_config_test qpid-proton-core) # For pn_sasl_enabled
+  set_tests_properties(cpp-connect_config_test PROPERTIES WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
+  # Test data and output directories for connect_config_test
+  file(COPY  "${CMAKE_CURRENT_SOURCE_DIR}/testdata" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
+  if(CyrusSASL_Saslpasswd_EXECUTABLE)
+    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/testdata/sasl-conf/proton-server.conf.in"
+      "${testdata}/sasl-conf/proton-server.conf")
+    execute_process(COMMAND echo password
+      COMMAND ${CyrusSASL_Saslpasswd_EXECUTABLE} -c -p -f "${testdata}/sasl-conf/proton.sasldb" -u proton user)
+  endif()
 endif()

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/src/connect_config.cpp
----------------------------------------------------------------------
diff --git a/cpp/src/connect_config.cpp b/cpp/src/connect_config.cpp
index d85eb04..2bcbfc2 100644
--- a/cpp/src/connect_config.cpp
+++ b/cpp/src/connect_config.cpp
@@ -59,19 +59,19 @@ namespace connect_config {
 
 namespace {
 
-void raise(const string& message) {
-    throw proton::error("connection configuration: " + message);
+proton::error err(const string& message) {
+    return proton::error("connection configuration: " + message);
 }
 
 Value validate(ValueType t, const Value& v, const string& name) {
     if (v.type() != t)
-        raise(msg() << " '" << name << "' expected " << t << ", found " << v.type());
+        throw err(msg() << " '" << name << "' expected " << t << ", found " << v.type());
     return v;
 }
 
 Value get(ValueType t, const Value& obj, const char *key, const Value& dflt=Value()) {
-    Value v = (obj.type() != nullValue) ? obj.get(key, dflt) : dflt;
-    return validate(t, v, key);
+    Value v = obj.get(key, dflt);
+    return v.type() == nullValue ? dflt : validate(t, v, key);
 }
 
 bool get_bool(const Value& obj, const char *key, bool dflt) {
@@ -91,11 +91,10 @@ static const string ETC_FILE_NAME("/etc/messaging/" + FILE_NAME);
 bool exists(const string& name) { return std::ifstream(name.c_str()).good(); }
 
 void parse_sasl(Value root, connection_options& opts) {
-    Value sasl = root.get("sasl", Value());
+    Value sasl = get(objectValue, root, "sasl");
     opts.sasl_enabled(get_bool(sasl, "enable", true));
+    opts.sasl_allow_insecure_mechs(get_bool(sasl, "allow_insecure", false));
     if (sasl.type() != nullValue) {
-        validate(objectValue, sasl, "sasl");
-        opts.sasl_allow_insecure_mechs(get_bool(sasl, "allow_insecure", false));
         Value mechs = sasl.get("mechanisms", Value());
         switch (mechs.type()) {
           case nullValue:
@@ -108,7 +107,7 @@ void parse_sasl(Value root, connection_options& opts) {
               for (ArrayIndex i= 0; i < mechs.size(); ++i) {
                   Value v = mechs.get(i, Value());
                   if (v.type() != stringValue) {
-                      raise(msg() << "'sasl/mechanisms' expect string elements, found " << v.type());
+                      throw err(msg() << "'sasl/mechanisms' expect string elements, found " << v.type());
                   }
                   if (i > 0) s << " ";
                   s << v.asString();
@@ -117,61 +116,65 @@ void parse_sasl(Value root, connection_options& opts) {
               break;
           }
           default:
-            raise(msg() << "'mechanisms' expected string or array, found " << mechs.type());
+            throw err(msg() << "'mechanisms' expected string or array, found " << mechs.type());
         }
     }
 }
 
 void parse_tls(const string& scheme, Value root, connection_options& opts) {
-    Value tls = root.get("tls", Value());
-    if (tls.type() != nullValue) {
-        validate(objectValue, tls, "tls");
-        if (scheme != "amqps") {
-            raise(msg() << "'tls' object is not allowed unless scheme is \"amqps\"");
-        }
-        string ca = get_string(tls, "ca", "");
+    Value tls = get(objectValue, root, "tls");
+    if (scheme == "amqps") { // TLS is enabled
         bool verify = get_bool(tls, "verify", true);
-        Value cert = get(stringValue, tls, "cert");
         ssl::verify_mode mode = verify ? ssl::VERIFY_PEER_NAME : ssl::ANONYMOUS_PEER;
-        if (cert.type() != nullValue) {
-            Value key = get(stringValue, tls, "key");
-            ssl_certificate cert2 = (key.type() != nullValue) ?
-                ssl_certificate(cert.asString(), key.asString()) :
-                ssl_certificate(cert.asString());
-            opts.ssl_client_options(ssl_client_options(cert2, ca, mode));
-        } else {
-            ssl_client_options(ssl_client_options(ca, mode));
+        string ca = get_string(tls, "ca", "");
+        string cert = get_string(tls, "cert", "");
+        string key = get_string(tls, "key", "");
+        ssl_client_options ssl_opts;
+        if (!cert.empty()) {
+            ssl_certificate sc = key.empty() ? ssl_certificate(cert) : ssl_certificate(cert, key);
+            ssl_opts = ssl_client_options(sc, ca, mode);
+        } else if (!ca.empty()) {
+            ssl_opts = ssl_client_options(ca, mode);
         }
+        opts.ssl_client_options(ssl_opts);
+    } else if (tls.type() != nullValue) {
+        throw err(msg() << "'tls' object not allowed unless scheme is \"amqps\"");
     }
 }
 
 } // namespace
 
 std::string parse(std::istream& is, connection_options& opts) {
-    Value root;
-    is >> root;
+    try {
+        Value root;
+        is >> root;
 
-    string scheme = get_string(root, "scheme", "amqps");
-    if (scheme != "amqp" && scheme != "amqps") {
-        raise(msg() << "'scheme' must be \"amqp\" or \"amqps\"");
-    }
+        string scheme = get_string(root, "scheme", "amqps");
+        if (scheme != "amqp" && scheme != "amqps") {
+            throw err(msg() << "'scheme' must be \"amqp\" or \"amqps\"");
+        }
 
-    string host = get_string(root, "host", "");
-    opts.virtual_host(host.c_str());
+        string host = get_string(root, "host", "localhost");
+        opts.virtual_host(host.c_str());
 
-    Value port = root.get("port", scheme);
-    if (!port.isIntegral() && !port.isString()) {
-        raise(msg() << "'port' expected string or integer, found " << port.type());
-    }
+        Value port = root.get("port", scheme);
+        if (!port.isIntegral() && !port.isString()) {
+            throw err(msg() << "'port' expected string or integer, found " << port.type());
+        }
 
-    Value user = root.get("user", Value());
-    if (user.type() != nullValue) opts.user(validate(stringValue, user, "user").asString());
-    Value password = root.get("password", Value());
-    if (password.type() != nullValue) opts.password(validate(stringValue, password, "password").asString());
+        Value user = get(stringValue, root, "user");
+        if (user.type() != nullValue) opts.user(user.asString());
+        Value password = get(stringValue, root, "password");
+        if (password.type() != nullValue) opts.password(password.asString());
 
-    parse_sasl(root, opts);
-    parse_tls(scheme, root, opts);
-    return host + ":" + port.asString();
+        parse_sasl(root, opts);
+        parse_tls(scheme, root, opts);
+        return host + ":" + port.asString();
+    } catch (const std::exception& e) {
+        throw err(e.what());
+    } catch (...) {
+        throw err("unknown error");
+    }
 }
 
 string default_file() {
@@ -193,8 +196,7 @@ string default_file() {
     }
     /* /etc/messaging/FILE_NAME */
     if (exists(ETC_FILE_NAME)) return ETC_FILE_NAME;
-    raise("no default configuration");
-    return "";                  // Never get here, keep compiler happy
+    throw err("no default configuration");
 }
 
 string parse_default(connection_options& opts) {
@@ -204,16 +206,15 @@ string parse_default(connection_options& opts) {
         f.exceptions(~std::ifstream::goodbit);
         f.open(name.c_str());
     } catch (const std::exception& e) {
-        raise(msg() << "error opening '" << name << "': " << e.what());
+        throw err(msg() << "error opening '" << name << "': " << e.what());
     }
     try {
         return parse(f, opts);
     } catch (const std::exception& e) {
-        raise(msg() << "error parsing '" << name << "': " << e.what());
+        throw err(msg() << "error parsing '" << name << "': " << e.what());
     } catch (...) {
-        raise(msg() << "error parsing '" << name);
+        throw err(msg() << "error parsing '" << name);
     }
-    return "";                  // Never get here, keep compiler happy
 }
 
 }} // namespace proton::connect_config

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/src/connect_config_test.cpp
----------------------------------------------------------------------
diff --git a/cpp/src/connect_config_test.cpp b/cpp/src/connect_config_test.cpp
index 17f0c4b..0573f8f 100644
--- a/cpp/src/connect_config_test.cpp
+++ b/cpp/src/connect_config_test.cpp
@@ -27,6 +27,12 @@
 #include "proton/listener.hpp"
 #include "proton/messaging_handler.hpp"
 #include "proton/transport.hpp"
+#include "proton/ssl.hpp"
+#include "proton/sasl.hpp"
+
+// The C++ API lacks a way to test for presence of extended SASL or SSL support.
+#include "proton/sasl.h"
+#include "proton/ssl.h"
 
 #include <sstream>
 #include <fstream>
@@ -68,8 +74,8 @@ void test_addr() {
     connection_options opts;
     ASSERT_EQUAL("foo:bar", configure(opts, "{ \"host\":\"foo\", \"port\":\"bar\" }"));
     ASSERT_EQUAL("foo:1234", configure(opts, "{ \"host\":\"foo\", \"port\":\"1234\" }"));
-    ASSERT_EQUAL(":amqps", configure(opts, "{}"));
-    ASSERT_EQUAL(":amqp", configure(opts, "{\"scheme\":\"amqp\"}"));
+    ASSERT_EQUAL("localhost:amqps", configure(opts, "{}"));
+    ASSERT_EQUAL("localhost:amqp", configure(opts, "{\"scheme\":\"amqp\"}"));
     ASSERT_EQUAL("foo:bar", configure(opts, "{ \"host\":\"foo\", /* inline comment */\"port\":\"bar\" // end of line comment\n}"));
 
     ASSERT_THROWS_MSG(error, "'scheme' must be", configure(opts, "{\"scheme\":\"bad\"}"));
@@ -78,17 +84,44 @@ void test_addr() {
     ASSERT_THROWS_MSG(error, "'host' expected string, found boolean", configure(opts, "{\"host\":true}"));
 }
 
+// Hack to write strings with embedded '"' and newlines
+#define RAW_STRING(...) #__VA_ARGS__
+
+void test_invalid() {
+    connection_options opts;
+    ASSERT_THROWS_MSG(proton::error, "Missing '}'", configure(opts, "{"));
+    ASSERT_THROWS_MSG(proton::error, "Syntax error", configure(opts, ""));
+    ASSERT_THROWS_MSG(proton::error, "Missing ','", configure(opts, RAW_STRING({ "user":"x" "host":"y"})));
+    ASSERT_THROWS_MSG(proton::error, "expected string", configure(opts, RAW_STRING({ "scheme":true})));
+    ASSERT_THROWS_MSG(proton::error, "expected object", configure(opts, RAW_STRING({ "tls":""})));
+    ASSERT_THROWS_MSG(proton::error, "expected object", configure(opts, RAW_STRING({ "sasl":true})));
+    ASSERT_THROWS_MSG(proton::error, "expected boolean", configure(opts, RAW_STRING({ "sasl": { "enable":""}})));
+    ASSERT_THROWS_MSG(proton::error, "expected boolean", configure(opts, RAW_STRING({ "tls": { "verify":""}})));
+}
+
 class test_handler : public messaging_handler {
   protected:
-    string config_;
-    listener listener_;
     bool opened_;
-    proton::error_condition error_;
+    connection_options listen_opts_;
+    listener listener_;
 
   public:
+    test_handler(const connection_options& listen_opts = connection_options()) :
+        opened_(false), listen_opts_(listen_opts) {}
+
+    string config_with_port(const string& bare_config) {
+        ostringstream ss;
+        ss << "{" << "\"port\":" << listener_.port() << ", " << bare_config << "}";
+        return ss.str();
+    }
+
+    void connect(container& c, const string& bare_config) {
+        connection_options opts;
+        c.connect(configure(opts, config_with_port(bare_config)), opts);
+    }
 
     void on_container_start(container& c) PN_CPP_OVERRIDE {
-        listener_ = c.listen("//:0");
+        listener_ = c.listen("//:0", listen_opts_);
     }
 
     virtual void check_connection(connection& c) {}
@@ -106,9 +139,9 @@ class test_handler : public messaging_handler {
         FAIL("unexpected error " << e);
     }
 
-    void run(const string& config) {
-        config_ = config;
+    void run() {
         container(*this).run();
+        ASSERT(opened_);
     }
 };
 
@@ -118,15 +151,113 @@ class test_default_connect : public test_handler {
     void on_container_start(container& c) PN_CPP_OVERRIDE {
         test_handler::on_container_start(c);
         ofstream os("connect.json");
-        ASSERT(os << "{ \"port\": " << listener_.port() << "}" << endl);
+        ASSERT(os << config_with_port(RAW_STRING("scheme":"amqp")));
         os.close();
         c.connect();
     }
 
-    void run() {
-        container(*this).run();
-        ASSERT(opened_);
-        ASSERT(!error_);
+    void check_connection(connection& c) PN_CPP_OVERRIDE {
+        ASSERT_EQUAL("localhost", c.virtual_host());
+    }
+};
+
+class test_host_user_pass : public test_handler {
+  public:
+
+    void on_container_start(container& c) PN_CPP_OVERRIDE {
+        test_handler::on_container_start(c);
+        connect(c, RAW_STRING("scheme":"amqp", "host":"127.0.0.1", "user":"user@proton", "password":"password"));
+    }
+
+    void check_connection(connection& c) PN_CPP_OVERRIDE {
+        ASSERT_EQUAL("127.0.0.1", c.virtual_host());
+        if (pn_sasl_extended()) {
+            ASSERT_EQUAL("user@proton", c.user());
+        } else {
+            ASSERT_EQUAL("anonymous", c.user());
+        }
+    }
+};
+
+class test_tls : public test_handler {
+    static connection_options make_opts() {
+        ssl_certificate cert("testdata/certs/server-certificate.pem",
+                             "testdata/certs/server-private-key.pem",
+                             "server-password");
+        connection_options opts;
+        opts.ssl_server_options(ssl_server_options(cert));
+        return opts;
+    }
+
+  public:
+
+    test_tls() : test_handler(make_opts()) {}
+
+    void on_container_start(container& c) PN_CPP_OVERRIDE {
+        test_handler::on_container_start(c);
+        connect(c, RAW_STRING("scheme":"amqps", "tls": { "verify":false }));
+    }
+};
+
+class test_tls_external : public test_handler {
+
+    static connection_options make_opts() {
+        ssl_certificate cert("testdata/certs/server-certificate-lh.pem",
+                             "testdata/certs/server-private-key-lh.pem",
+                             "server-password");
+        connection_options opts;
+        opts.ssl_server_options(ssl_server_options(cert,
+                                                   "testdata/certs/ca-certificate.pem",
+                                                   "testdata/certs/ca-certificate.pem",
+                                                   ssl::VERIFY_PEER));
+        return opts;
+    }
+
+  public:
+
+    test_tls_external() : test_handler(make_opts()) {}
+
+    void on_container_start(container& c) PN_CPP_OVERRIDE {
+        test_handler::on_container_start(c);
+        connect(c, RAW_STRING(
+                    "scheme":"amqps",
+                    "sasl":{ "mechanisms": "EXTERNAL" },
+                    "tls": {
+                            "cert":"testdata/certs/client-certificate.pem",
+                            "key":"testdata/certs/client-private-key-no-password.pem",
+                            "ca":"testdata/certs/ca-certificate.pem",
+                            "verify":true }));
+    }
+};
+
+class test_tls_plain : public test_handler {
+
+    static connection_options make_opts() {
+        ssl_certificate cert("testdata/certs/server-certificate-lh.pem",
+                             "testdata/certs/server-private-key-lh.pem",
+                             "server-password");
+        connection_options opts;
+        opts.ssl_server_options(ssl_server_options(cert,
+                                                   "testdata/certs/ca-certificate.pem",
+                                                   "testdata/certs/ca-certificate.pem",
+                                                   ssl::VERIFY_PEER));
+        return opts;
+    }
+
+  public:
+
+    test_tls_plain() : test_handler(make_opts()) {}
+
+    void on_container_start(container& c) PN_CPP_OVERRIDE {
+        test_handler::on_container_start(c);
+        connect(c, RAW_STRING(
+                    "scheme":"amqps", "user":"user@proton", "password": "password",
+                    "sasl":{ "mechanisms": "PLAIN" },
+                    "tls": {
+                            "cert":"testdata/certs/client-certificate.pem",
+                            "key":"testdata/certs/client-private-key-no-password.pem",
+                            "ca":"testdata/certs/ca-certificate.pem",
+                            "verify":true }));
     }
 };
 
@@ -137,6 +268,20 @@ int main(int argc, char** argv) {
     int failed = 0;
     RUN_ARGV_TEST(failed, test_default_file());
     RUN_ARGV_TEST(failed, test_addr());
+    RUN_ARGV_TEST(failed, test_invalid());
     RUN_ARGV_TEST(failed, test_default_connect().run());
+    RUN_ARGV_TEST(failed, test_host_user_pass().run());
+
+    pn_ssl_domain_t *have_ssl = pn_ssl_domain(PN_SSL_MODE_SERVER);
+    if (have_ssl) {
+        pn_ssl_domain_free(have_ssl);
+        RUN_ARGV_TEST(failed, test_tls().run());
+        RUN_ARGV_TEST(failed, test_tls_external().run());
+        if (pn_sasl_extended()) {
+            RUN_ARGV_TEST(failed, test_tls_plain().run());
+        }
+    } else {
+        std::cout << "SKIP: TLS tests, not available" << std::endl;
+    }
     return failed;
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/.config/messaging/TEST
----------------------------------------------------------------------
diff --git a/cpp/testdata/.config/messaging/TEST b/cpp/testdata/.config/messaging/TEST
new file mode 100644
index 0000000..9537efb
--- /dev/null
+++ b/cpp/testdata/.config/messaging/TEST
@@ -0,0 +1 @@
+Location for test config file
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/bad-server-certificate.p12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/bad-server-certificate.p12 b/cpp/testdata/certs/bad-server-certificate.p12
new file mode 100644
index 0000000..b986651
Binary files /dev/null and b/cpp/testdata/certs/bad-server-certificate.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/bad-server-certificate.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/bad-server-certificate.pem b/cpp/testdata/certs/bad-server-certificate.pem
new file mode 100644
index 0000000..a18b890
--- /dev/null
+++ b/cpp/testdata/certs/bad-server-certificate.pem
@@ -0,0 +1,31 @@
+Bag Attributes
+    friendlyName: bad-server
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 36 34 33 33 37 
+subject=/CN=127.0.0.1/O=Not Trusted Inc
+issuer=/CN=127.0.0.1/O=Not Trusted Inc
+-----BEGIN CERTIFICATE-----
+MIIEWjCCBAWgAwIBAgIEZQJ1MDANBglghkgBZQMEAwIFADAuMRIwEAYDVQQDEwkx
+MjcuMC4wLjExGDAWBgNVBAoTD05vdCBUcnVzdGVkIEluYzAgFw0xODEwMDIwMjU3
+NDRaGA8yMjkyMDcxNjAyNTc0NFowLjESMBAGA1UEAxMJMTI3LjAuMC4xMRgwFgYD
+VQQKEw9Ob3QgVHJ1c3RlZCBJbmMwggNCMIICNQYHKoZIzjgEATCCAigCggEBAI95
+Ndm5qum/q+2Ies9JUbbzLsWeO683GOjqxJYfPv02BudDUanEGDM5uAnnwq4cU5un
+R1uF0BGtuLR5h3VJhGlcrA6PFLM2CCiiL/onEQo9YqmTRTQJoP5pbEZY+EvdIIGc
+NwmgEFexla3NACM9ulSEtikfnWSO+INEhneXnOwEtDSmrC516Zhd4j2wKS/BEYyf
++p2BgeczjbeStzDXueNJWS9oCZhyFTkV6j1ri0ZTxjNFj4A7MqTC4PJykCVuTj+K
+Owg4ocRQ5OGMGimjfd9eoUPeS2b/BJA+1c8WI+FY1IfGCOl/IRzYHcojy244B2X4
+IuNCvkhMBXY5OWAc1mcCHQC69pamhXj3397n+mfJd8eF7zKyM7rlgMC81WldAoIB
+ABamXFggSFBwTnUCo5dXBA002jo0eMFU1OSlwC0kLuBPluYeS9CQSr2sjzfuseCf
+MYLSPJBDy2QviABBYO35ygmzIHannDKmJ/JHPpGHm6LE50S9IIFUTLVbgCw2jR+o
+PtSJ6U4PoGiOMkKKXHjEeMaNBSe3HJo6uwsL4SxEaJY559POdNsQGmWqK4f2TGgm
+2z7HL0tVmYNLtO2wL3yQ6aSW06VdU1vr/EXU9hn2Pz3tu4c5JcLyJOB3MSltqIfs
+HkdI+H77X963VIQxayIy3uVT3a8CESsNHwLaMJcyJP4nrtqLnUspItm6i+Oe2eED
+pjxSgQvGiLfi7UMW4e8X294DggEFAAKCAQAKvekP2/H9NsTDIq8HlIUiyYxxLGzv
+GDCBruQ7QF8Qqijzkp/cMMQJ6dmPfsga9UCcNjrwixcNq3tI17Cmzj3kEWPOLUeo
+f0ub9j0mBMUqT0V2WzE9jus5nAWvasdNICCFBPYJzSLeu+qsU0qeMKVeq38dXA/o
+WDcGFIWxU1QhZ4Cc9l6QAAguE54KSIzwMNwzE1jJUmCflmSgl2PYuw7cDGhZrw2j
+NUfVmZzQ83iUAd/HrGafXKqtFOD55burf+wZqyUjJpTBo5TCCWXuyHHcn79obRpy
+4hzeZRc/DyM2r2VsHEEeCbOJVD91GOJmfDRE94sGEHyp+q3LLjxcKwjioyEwHzAd
+BgNVHQ4EFgQUJ0NBCiT1XKnqZ/EFlYiODE+npAMwDQYJYIZIAWUDBAMCBQADQAAw
+PQIdAK563jEEkDEhYl11yURvpkLmdUCi03QGI28b9TECHGGaXLOjJ4qDYXj+pAG4
+vWiU3+LoVvFRKAdQjXU=
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/bad-server-private-key.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/bad-server-private-key.pem b/cpp/testdata/certs/bad-server-private-key.pem
new file mode 100644
index 0000000..d6c5290
--- /dev/null
+++ b/cpp/testdata/certs/bad-server-private-key.pem
@@ -0,0 +1,21 @@
+Bag Attributes
+    friendlyName: bad-server
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 36 34 33 33 37 
+Key Attributes: <No Attributes>
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIN4MFpSDG6hgCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECINvxSQeBIj4BIICaIr+2ZZG1iGE
+czibL6bT7/fLSJve9AKBFjZFhrDNy6YD5Kr+SeCKHZhB/dY4xJlwtYngLrb+7Q4P
+R9wI0yDpXKawSIY9xJ6ZMv0t9nzfPXc7zC2RPzKPe4GTLLrl2Ji6Jt1etVS0gS2R
+ow4fkwuO+f1lIEs7gpZqSYP3UG6Z0Y3kRgCgKrEB8cv8SJKPx5/g8y2pQthCcfdD
+0vZvSG1U44wwrjZHXUWIeZogMnyV9yXgY6XDpWdUbyOr7Gf7qSrqSVlGrVdhAes/
+/li0hkp6tzoKV+/IE6M9lHqdvuu8T9GKCAoba80UQ3XPc3WVKx2ZrQOqsmrOUH7a
+kZQMygcyaSgI0VUSUudZdJ0k88Tbh9h8IDzdhUjE3i9WLF1hyqHESCHipWImvuTg
+TzuWawJnf8mvtKiSVc9dzothBOyk9xR0EQ95rHFpXReQOfZEvLQqCw8Y3TOWKpbU
+Uwc2gd9y2B/Pd3uiYYz5Urvu+usd80qVD18kwSp1U+FFCcP9kgj8ak6JgkmEYTeQ
+FzNNkTFP5mc11r4Reh1brl5yvoKHRs6CRDCxuNTTwJ+i1cBqUAcZVq5nwzujOT06
+JWM6bCoBaygmyJMNDmaBGToalS3GqOvI356hGz2kPvu4M4uEBhrfzt/6Xx0/AFkI
+h4wgq+ddmOqM5ZsdGdALbKH/rSiTM03DLEAIdkAAhjnvjeBHdOMa3sytfNG6mtQE
+rhND+SE+cKHE003e3/WYuSZbB6ZQSkcyI4EkLIfWYcZnPBhahORvD1L+xbuGPwCq
+ET/hD6LDGdVns4QeXGtseR7gzedzObNRXTPtW+QKB9Y=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/bad-server.pkcs12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/bad-server.pkcs12 b/cpp/testdata/certs/bad-server.pkcs12
new file mode 100644
index 0000000..8bbf3c6
Binary files /dev/null and b/cpp/testdata/certs/bad-server.pkcs12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/ca-certificate.p12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/ca-certificate.p12 b/cpp/testdata/certs/ca-certificate.p12
new file mode 100644
index 0000000..d165ec2
Binary files /dev/null and b/cpp/testdata/certs/ca-certificate.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/ca-certificate.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/ca-certificate.pem b/cpp/testdata/certs/ca-certificate.pem
new file mode 100644
index 0000000..e7a7ff8
--- /dev/null
+++ b/cpp/testdata/certs/ca-certificate.pem
@@ -0,0 +1,32 @@
+Bag Attributes
+    friendlyName: ca
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 35 39 32 34 31 
+subject=/CN=Trusted.CA.com/O=Trust Me Inc.
+issuer=/CN=Trusted.CA.com/O=Trust Me Inc.
+-----BEGIN CERTIFICATE-----
+MIIEozCCBE6gAwIBAgIEAW3CPDANBglghkgBZQMEAwIFADAxMRcwFQYDVQQDEw5U
+cnVzdGVkLkNBLmNvbTEWMBQGA1UEChMNVHJ1c3QgTWUgSW5jLjAgFw0xODEwMDIw
+MjU3MzlaGA8yMjkyMDcxNjAyNTczOVowMTEXMBUGA1UEAxMOVHJ1c3RlZC5DQS5j
+b20xFjAUBgNVBAoTDVRydXN0IE1lIEluYy4wggNCMIICNQYHKoZIzjgEATCCAigC
+ggEBAI95Ndm5qum/q+2Ies9JUbbzLsWeO683GOjqxJYfPv02BudDUanEGDM5uAnn
+wq4cU5unR1uF0BGtuLR5h3VJhGlcrA6PFLM2CCiiL/onEQo9YqmTRTQJoP5pbEZY
++EvdIIGcNwmgEFexla3NACM9ulSEtikfnWSO+INEhneXnOwEtDSmrC516Zhd4j2w
+KS/BEYyf+p2BgeczjbeStzDXueNJWS9oCZhyFTkV6j1ri0ZTxjNFj4A7MqTC4PJy
+kCVuTj+KOwg4ocRQ5OGMGimjfd9eoUPeS2b/BJA+1c8WI+FY1IfGCOl/IRzYHcoj
+y244B2X4IuNCvkhMBXY5OWAc1mcCHQC69pamhXj3397n+mfJd8eF7zKyM7rlgMC8
+1WldAoIBABamXFggSFBwTnUCo5dXBA002jo0eMFU1OSlwC0kLuBPluYeS9CQSr2s
+jzfuseCfMYLSPJBDy2QviABBYO35ygmzIHannDKmJ/JHPpGHm6LE50S9IIFUTLVb
+gCw2jR+oPtSJ6U4PoGiOMkKKXHjEeMaNBSe3HJo6uwsL4SxEaJY559POdNsQGmWq
+K4f2TGgm2z7HL0tVmYNLtO2wL3yQ6aSW06VdU1vr/EXU9hn2Pz3tu4c5JcLyJOB3
+MSltqIfsHkdI+H77X963VIQxayIy3uVT3a8CESsNHwLaMJcyJP4nrtqLnUspItm6
+i+Oe2eEDpjxSgQvGiLfi7UMW4e8X294DggEFAAKCAQBi9HHyyKJh9nAYIfrOqR43
+CTVVlQ6ymAQ0owndzkNB2oHd/ZGyCbvHfT2pSKGe2Rp/SOa8fKzjZOqbN54YLZO9
+NxGd3qWPhTDvPs8kVWUDnnCjm1tuC4Xs4peYatcjlMnICRhM6RuKWk/iTSx7x9Ct
+o74xb9QVMHfVnnchYY7aEFppaq1gaE0cdB5XQv9ARqm2Uk1HFSxArSLNCNCMOvQu
+KpF0gebgw5IGvmfAbojdHR1jW+ha5cvdaF1xphxQYEty0OvePZA+rUl5EMW//ROl
+mwUXQlPIvqVgayvyVAfXLVEAbc1J59ib7SlOo6aWTZ54vHOBZJf+QQeZFEnD17jG
+o2QwYjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
+BgEFBQcDAjAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0OBBYEFD2jgfVgC41G8Lhr/k3n
+dPlJLcF8MA0GCWCGSAFlAwQDAgUAA0AAMD0CHQCT65TIzFwXa7Tam4ePyL/qO7oM
+puqdHKEYsGL8Ahwcx3KGKTH7otV2J1Ha3UuiGqYU7HoL5ljVu5iN
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/ca.pkcs12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/ca.pkcs12 b/cpp/testdata/certs/ca.pkcs12
new file mode 100644
index 0000000..6ef6338
Binary files /dev/null and b/cpp/testdata/certs/ca.pkcs12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-certificate.p12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-certificate.p12 b/cpp/testdata/certs/client-certificate.p12
new file mode 100644
index 0000000..c83a4ed
Binary files /dev/null and b/cpp/testdata/certs/client-certificate.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-certificate.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-certificate.pem b/cpp/testdata/certs/client-certificate.pem
new file mode 100644
index 0000000..da7c186
--- /dev/null
+++ b/cpp/testdata/certs/client-certificate.pem
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIEdjCCBCCgAwIBAgIEdGE04zANBglghkgBZQMEAwIFADAxMRcwFQYDVQQDEw5U
+cnVzdGVkLkNBLmNvbTEWMBQGA1UEChMNVHJ1c3QgTWUgSW5jLjAgFw0xODEwMDIw
+MjU3NDJaGA8yMjkyMDcxNjAyNTc0MlowJTESMBAGA1UEAxMJMTI3LjAuMC4xMQ8w
+DQYDVQQKEwZDbGllbnQwggNCMIICNQYHKoZIzjgEATCCAigCggEBAI95Ndm5qum/
+q+2Ies9JUbbzLsWeO683GOjqxJYfPv02BudDUanEGDM5uAnnwq4cU5unR1uF0BGt
+uLR5h3VJhGlcrA6PFLM2CCiiL/onEQo9YqmTRTQJoP5pbEZY+EvdIIGcNwmgEFex
+la3NACM9ulSEtikfnWSO+INEhneXnOwEtDSmrC516Zhd4j2wKS/BEYyf+p2Bgecz
+jbeStzDXueNJWS9oCZhyFTkV6j1ri0ZTxjNFj4A7MqTC4PJykCVuTj+KOwg4ocRQ
+5OGMGimjfd9eoUPeS2b/BJA+1c8WI+FY1IfGCOl/IRzYHcojy244B2X4IuNCvkhM
+BXY5OWAc1mcCHQC69pamhXj3397n+mfJd8eF7zKyM7rlgMC81WldAoIBABamXFgg
+SFBwTnUCo5dXBA002jo0eMFU1OSlwC0kLuBPluYeS9CQSr2sjzfuseCfMYLSPJBD
+y2QviABBYO35ygmzIHannDKmJ/JHPpGHm6LE50S9IIFUTLVbgCw2jR+oPtSJ6U4P
+oGiOMkKKXHjEeMaNBSe3HJo6uwsL4SxEaJY559POdNsQGmWqK4f2TGgm2z7HL0tV
+mYNLtO2wL3yQ6aSW06VdU1vr/EXU9hn2Pz3tu4c5JcLyJOB3MSltqIfsHkdI+H77
+X963VIQxayIy3uVT3a8CESsNHwLaMJcyJP4nrtqLnUspItm6i+Oe2eEDpjxSgQvG
+iLfi7UMW4e8X294DggEFAAKCAQBAeiJsw6hYkJKR7Sgd5Ay8IhnlKfpMxcEUTKkm
+UfFt/HafsQF7XXVqik3+QEtUeDiXsYxIX0xrPI/PrDM2octK3CZlcNe2MAUfmbuB
+NaeQmAek96Jyui2sPO2wCqXn6uj64LF4VAA2a4Qu843kx3kdrzh5ruGaVXrkDoDU
+xbfbpjeNJHkW/EacNO12pnMWRqkTU+Daj0nb6daNrzu1Soon+0+TuADvepe6AClV
+LgHZ+/gR3e+45UK9bs8RZpFlKy/S0PHVF32AtZAeFrtJpNrq7itpWZvJux16yoWW
+tvSFMti3LvATMV/0z/3S21fLLK5rnZNIFO5KS5hn9ajBwtOgo0IwQDAfBgNVHSME
+GDAWgBQ9o4H1YAuNRvC4a/5N53T5SS3BfDAdBgNVHQ4EFgQUzKZ8bzmfn/iJAEmd
+YdtqKdVAfGkwDQYJYIZIAWUDBAMCBQADQQAwPgIdAJa+UfWOdTeBjYjbL4gAtMKf
+0Anf5279cwXzxncCHQCC1NI/wj63MrhbSIcs+5wEsJ8DQsQy/cdQWjQO
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-certificate1.p12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-certificate1.p12 b/cpp/testdata/certs/client-certificate1.p12
new file mode 100644
index 0000000..b96511b
Binary files /dev/null and b/cpp/testdata/certs/client-certificate1.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-certificate1.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-certificate1.pem b/cpp/testdata/certs/client-certificate1.pem
new file mode 100644
index 0000000..16fbcb5
--- /dev/null
+++ b/cpp/testdata/certs/client-certificate1.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEqzCCBFegAwIBAgIEC1BF+zANBglghkgBZQMEAwIFADAxMRcwFQYDVQQDEw5U
+cnVzdGVkLkNBLmNvbTEWMBQGA1UEChMNVHJ1c3QgTWUgSW5jLjAgFw0xODEwMDIw
+MjU3NDNaGA8yMjkyMDcxNjAyNTc0M1owXDEMMAoGA1UECxMDRGV2MQ0wCwYDVQQH
+EwRDaXR5MQswCQYDVQQIEwJTVDELMAkGA1UEBhMCVVMxEjAQBgNVBAMTCTEyNy4w
+LjAuMTEPMA0GA1UEChMGQ2xpZW50MIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCP
+eTXZuarpv6vtiHrPSVG28y7FnjuvNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFOb
+p0dbhdARrbi0eYd1SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCB
+nDcJoBBXsZWtzQAjPbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGM
+n/qdgYHnM423krcw17njSVkvaAmYchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/
+ijsIOKHEUOThjBopo33fXqFD3ktm/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl
++CLjQr5ITAV2OTlgHNZnAh0AuvaWpoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKC
+AQAWplxYIEhQcE51AqOXVwQNNNo6NHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHg
+nzGC0jyQQ8tkL4gAQWDt+coJsyB2p5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0f
+qD7UielOD6BojjJCilx4xHjGjQUntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxo
+Jts+xy9LVZmDS7TtsC98kOmkltOlXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH
+7B5HSPh++1/et1SEMWsiMt7lU92vAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnh
+A6Y8UoELxoi34u1DFuHvF9veA4IBBQACggEAP6WuNvc2HWNn9yhtvaXjdmdF99VE
+XnJJzDYTQH0gOZgWJbB+Wu/ybSYz2/lvhFWw22rp/8hYfcnW1W8X2RBidzhhevKV
+bhj3JrjSR2u2H53K3tve2nhteo84Hu8On8dywCcVcmIIeMzRnYWb14DK0QV1YX1K
+Ks8Or+2h14i93cpzhqGd5CuvbeoHQilLxWcjpmTK4fhSfXeE+KrSund79naFXMha
+bvJlcrNkXxLPTkVxPFmFVWuS7nI6h5KoPfyLWGZUjeehTTTP6aFDyxbBULnMcNq5
+AZBWi6t6iNWdbzNkcfki2uYv3mIEXVr2C2nvS2LE/n0I4T9tjkr0jD2kOqNCMEAw
+HwYDVR0jBBgwFoAUPaOB9WALjUbwuGv+Ted0+UktwXwwHQYDVR0OBBYEFMXbw8rs
+5agCIXAWjyMYZaHrMPrMMA0GCWCGSAFlAwQDAgUAAz8AMDwCHBkFCKc1WPj6bZbf
+Z+MoJi5pNHKT0DlNIBmX8/8CHBGEd72cWKZBmkhlSgI5kMACamJyuYRBIaVD3/Y=
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-private-key-no-password.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-private-key-no-password.pem b/cpp/testdata/certs/client-private-key-no-password.pem
new file mode 100644
index 0000000..cb02fd9
--- /dev/null
+++ b/cpp/testdata/certs/client-private-key-no-password.pem
@@ -0,0 +1,19 @@
+Bag Attributes
+    friendlyName: client-certificate
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 36 31 39 34 35 
+Key Attributes: <No Attributes>
+-----BEGIN PRIVATE KEY-----
+MIICXAIBADCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7F
+njuvNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwO
+jxSzNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYp
+H51kjviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkv
+aAmYchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD
+3ktm/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0A
+uvaWpoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQN
+NNo6NHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJ
+syB2p5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjG
+jQUntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmk
+ltOlXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7l
+U92vAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9ve
+BB4CHDooXtQ8wzgxsdAvDqgVW9IHuar1l+//1qxE3kg=
+-----END PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-private-key.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-private-key.pem b/cpp/testdata/certs/client-private-key.pem
new file mode 100644
index 0000000..92d7d89
--- /dev/null
+++ b/cpp/testdata/certs/client-private-key.pem
@@ -0,0 +1,21 @@
+Bag Attributes
+    friendlyName: client-certificate
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 36 31 39 34 35 
+Key Attributes: <No Attributes>
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIPRdD+ab7CMkCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECCbLUrG5jy6RBIICaP4jF1eYEHeH
+wKuP1gxMn1fuKnzw7oo4YqZgZM9Fdi7wnaBvm4ZKEQsUdxB9zX4qzBo6PmWn4hVz
+6WDBorMGpFDEqDBHkieZwxi2ypNmNCN5lLsHmqa6jSr4Hw6s+IKgNdaL/aINgeKy
+xY8WfAfkGAiiDwRwmbLCRq+rP7BWgB9vEvt6wv5kNfFk041FeSgQvjrn3K8EteF4
+eXT1eO1xMsNmqZd2SCgWUUsVKooeV/jBIzxzHpNSE5vaBnTSoez/MIrFfotbbf09
+zYVRJdkwlCwthTqzfbLorNeKqAVkeI/jLiuI3SvXsKIwW3wAmmhPPd9ukh4+WRnk
+YhT87OC9h8k5Z4O/0WIo73zGyfi7GeBcU69eMaQEkpf8Xnf3k9YjX3KnI5vlXEqY
+3WpD8PFXrnySWx8BzNWVG9/HKgD3+cq2O37Prgd9ULP9azrW0CTzV3uwpnYHXpjj
+jR+GYxf535rIu4PCoYaPq7tJzpSohMXK+cVeVp+UT40KZVXNkDBhI0B+au65QmKE
+2cAaYd4ysr0mU0qQBInFc2g+wUPibDxXb7I5vhXEglDvI4VZVScHSAZN7usDxOcI
+MtUmrpPNmjgHofvtXg+L784JrDkTyTWC1XUVE3EhP4oXuG9kWL84Q0OMhIlJKBuI
+yQcwYuORWRU0b64kZigektRruBjZOzpYfN56VJaFlbGtVE5PIVrClPY65aGdNWUd
+MJeTRm5KsHp5sHG8h2OsDkAiXbG1eaRkRLwyN/nESbLMjGGxueTuOW/xqAlt54dC
+0x1H0MN1BToe7yua8mkSydyfidkGgFHc/S2nD3ot1ps=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-private-key1.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-private-key1.pem b/cpp/testdata/certs/client-private-key1.pem
new file mode 100644
index 0000000..071e5c5
--- /dev/null
+++ b/cpp/testdata/certs/client-private-key1.pem
@@ -0,0 +1,21 @@
+Bag Attributes
+    friendlyName: client-certificate1
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 36 33 31 37 37 
+Key Attributes: <No Attributes>
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIuxW2yTuxF0ICAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECMhCoBDSVwIfBIICaEJqhKKhkeNb
+8x8iQ+JmrNaVWMVClv1Sg+ajTACgsLUyb5herY+Ph009/VwJmeTZtFRZofEa6Jtn
+OvXCSkpnyzA02hV1gxXkAp8LUzS1QPVNSMikZs2zrvHz86wbe3N1P7fjz2YgSyKm
+LIH6ozN85H5t6IF/yiZKxRn5869/d6r1J1CK/HJce8TZenaQCD5vtGLaHWFYaWpq
+GCITj1Wbgq1E9KF3RjAvpCp+9vL//xUhQYPnM7SScCES+jfzU6pqXgKRaVKgbM+N
+oMTnOo0PNlDbl+xRCrJuOEIpztDNFXaMAJLh2aswPfOzXctdTkVsqBfQuxY+nD2Q
+jarTldSl8QfkMOKKgYf+xTtUmt5JDBZITr5MmaihrRsZQo5pjfHsYGgcC1r54FU8
+CkoiFsLHuZG0martgLA6N/k2+t152u97PKD2q2U0n6n6jniO7zqTjqn1sb3drxkj
+7AaUSfK54zUJmTdnKGcYfK9tQRjKmAQenIbX5Qf+oq68vC+HWRbHz287ft0ZnXe6
+kiIpAUThvZ+i3wkLZcs69EPvtIk7NrdsA/k7gqipM+QpXMy1cmV0Fm6Qn1zsEDBw
+108eQGP4Jd5tvTFoeXCVDKHm2wxZSieLmStDXohLIlzxtdbZnTLKtlkhE2NpVxz8
+bjjAg7Qji2CWa7HnNYTEjvzG/IELZxMtrr7nGs1Ee8QxeTufwJsqSoMud8LteGvp
+wOy+BHciepBx9aohVX8s56wqVtrUmJfdrL/89ag4tvU8O155Wj0F/wOXpD658cwD
+iMt5cgsyGrOz8+f6QASE85fSN7d9DJLD+iGtD5AcWNE=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-request.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-request.pem b/cpp/testdata/certs/client-request.pem
new file mode 100644
index 0000000..c5b8fb3
--- /dev/null
+++ b/cpp/testdata/certs/client-request.pem
@@ -0,0 +1,24 @@
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MIID9zCCA6ICAQAwJTESMBAGA1UEAxMJMTI3LjAuMC4xMQ8wDQYDVQQKEwZDbGll
+bnQwggNCMIICNQYHKoZIzjgEATCCAigCggEBAI95Ndm5qum/q+2Ies9JUbbzLsWe
+O683GOjqxJYfPv02BudDUanEGDM5uAnnwq4cU5unR1uF0BGtuLR5h3VJhGlcrA6P
+FLM2CCiiL/onEQo9YqmTRTQJoP5pbEZY+EvdIIGcNwmgEFexla3NACM9ulSEtikf
+nWSO+INEhneXnOwEtDSmrC516Zhd4j2wKS/BEYyf+p2BgeczjbeStzDXueNJWS9o
+CZhyFTkV6j1ri0ZTxjNFj4A7MqTC4PJykCVuTj+KOwg4ocRQ5OGMGimjfd9eoUPe
+S2b/BJA+1c8WI+FY1IfGCOl/IRzYHcojy244B2X4IuNCvkhMBXY5OWAc1mcCHQC6
+9pamhXj3397n+mfJd8eF7zKyM7rlgMC81WldAoIBABamXFggSFBwTnUCo5dXBA00
+2jo0eMFU1OSlwC0kLuBPluYeS9CQSr2sjzfuseCfMYLSPJBDy2QviABBYO35ygmz
+IHannDKmJ/JHPpGHm6LE50S9IIFUTLVbgCw2jR+oPtSJ6U4PoGiOMkKKXHjEeMaN
+BSe3HJo6uwsL4SxEaJY559POdNsQGmWqK4f2TGgm2z7HL0tVmYNLtO2wL3yQ6aSW
+06VdU1vr/EXU9hn2Pz3tu4c5JcLyJOB3MSltqIfsHkdI+H77X963VIQxayIy3uVT
+3a8CESsNHwLaMJcyJP4nrtqLnUspItm6i+Oe2eEDpjxSgQvGiLfi7UMW4e8X294D
+ggEFAAKCAQBAeiJsw6hYkJKR7Sgd5Ay8IhnlKfpMxcEUTKkmUfFt/HafsQF7XXVq
+ik3+QEtUeDiXsYxIX0xrPI/PrDM2octK3CZlcNe2MAUfmbuBNaeQmAek96Jyui2s
+PO2wCqXn6uj64LF4VAA2a4Qu843kx3kdrzh5ruGaVXrkDoDUxbfbpjeNJHkW/Eac
+NO12pnMWRqkTU+Daj0nb6daNrzu1Soon+0+TuADvepe6AClVLgHZ+/gR3e+45UK9
+bs8RZpFlKy/S0PHVF32AtZAeFrtJpNrq7itpWZvJux16yoWWtvSFMti3LvATMV/0
+z/3S21fLLK5rnZNIFO5KS5hn9ajBwtOgoDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNV
+HQ4EFgQUzKZ8bzmfn/iJAEmdYdtqKdVAfGkwDQYJYIZIAWUDBAMCBQADQAAwPQId
+ALlARQZwWqzfFb1SvnNhmSdF4Mi7Uxg+J6fSiW8CHBUpOXuQdC1DLanxFZiQGwX0
+6r4ApU5duGCOBTc=
+-----END NEW CERTIFICATE REQUEST-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client-request1.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client-request1.pem b/cpp/testdata/certs/client-request1.pem
new file mode 100644
index 0000000..e8819ab
--- /dev/null
+++ b/cpp/testdata/certs/client-request1.pem
@@ -0,0 +1,25 @@
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MIIELTCCA9kCAQAwXDEMMAoGA1UECxMDRGV2MQ0wCwYDVQQHEwRDaXR5MQswCQYD
+VQQIEwJTVDELMAkGA1UEBhMCVVMxEjAQBgNVBAMTCTEyNy4wLjAuMTEPMA0GA1UE
+ChMGQ2xpZW50MIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrP
+SVG28y7FnjuvNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1
+SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAj
+PbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw
+17njSVkvaAmYchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBop
+o33fXqFD3ktm/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlg
+HNZnAh0AuvaWpoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51
+AqOXVwQNNNo6NHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gA
+QWDt+coJsyB2p5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJC
+ilx4xHjGjQUntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7Tt
+sC98kOmkltOlXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SE
+MWsiMt7lU92vAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1D
+FuHvF9veA4IBBQACggEAP6WuNvc2HWNn9yhtvaXjdmdF99VEXnJJzDYTQH0gOZgW
+JbB+Wu/ybSYz2/lvhFWw22rp/8hYfcnW1W8X2RBidzhhevKVbhj3JrjSR2u2H53K
+3tve2nhteo84Hu8On8dywCcVcmIIeMzRnYWb14DK0QV1YX1KKs8Or+2h14i93cpz
+hqGd5CuvbeoHQilLxWcjpmTK4fhSfXeE+KrSund79naFXMhabvJlcrNkXxLPTkVx
+PFmFVWuS7nI6h5KoPfyLWGZUjeehTTTP6aFDyxbBULnMcNq5AZBWi6t6iNWdbzNk
+cfki2uYv3mIEXVr2C2nvS2LE/n0I4T9tjkr0jD2kOqAwMC4GCSqGSIb3DQEJDjEh
+MB8wHQYDVR0OBBYEFMXbw8rs5agCIXAWjyMYZaHrMPrMMA0GCWCGSAFlAwQDAgUA
+Az8AMDwCHEnHjXuiO2BX/JRz6Wg3nUCFt+Z0YbiuaQ8vhxQCHGTrDJZI2JRDsM+E
+XmeCfhm9+upOobERNBL17wI=
+-----END NEW CERTIFICATE REQUEST-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client.pkcs12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client.pkcs12 b/cpp/testdata/certs/client.pkcs12
new file mode 100644
index 0000000..1035c5e
Binary files /dev/null and b/cpp/testdata/certs/client.pkcs12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/client1.pkcs12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/client1.pkcs12 b/cpp/testdata/certs/client1.pkcs12
new file mode 100644
index 0000000..b729a53
Binary files /dev/null and b/cpp/testdata/certs/client1.pkcs12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/make_certs.sh
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/make_certs.sh b/cpp/testdata/certs/make_certs.sh
new file mode 100755
index 0000000..073b620
--- /dev/null
+++ b/cpp/testdata/certs/make_certs.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+# Create certificates used by tests
+
+rm -f *.pem *.pkcs12
+
+# Create a self-signed certificate for the CA, and a private key to sign certificate requests:
+keytool -storetype pkcs12 -keystore ca.pkcs12 -storepass ca-password -alias ca -keypass ca-password -genkey -dname "O=Trust Me Inc.,CN=Trusted.CA.com" -validity 99999 -ext bc:c=ca:true,pathlen:0 -ext ku:c=digitalSignature,keyCertSign -ext ExtendedkeyUsage=serverAuth,clientAuth
+openssl pkcs12 -nokeys -passin pass:ca-password -in ca.pkcs12 -passout pass:ca-password -out ca-certificate.pem
+
+# Create a certificate request for the server certificate.  Use the CA's certificate to sign it:
+keytool -storetype pkcs12 -keystore server.pkcs12 -storepass server-password -alias server-certificate -keypass server-password -genkey  -dname "O=Server,CN=A1.Good.Server.domain.com" -validity 99999
+keytool -storetype pkcs12 -keystore server.pkcs12 -storepass server-password -alias server-certificate -keypass server-password -certreq -file server-request.pem
+keytool -storetype pkcs12 -keystore ca.pkcs12 -storepass ca-password -alias ca -keypass ca-password -gencert -rfc -validity 99999 -infile server-request.pem -outfile server-certificate.pem
+openssl pkcs12 -nocerts -passin pass:server-password -in server.pkcs12 -passout pass:server-password -out server-private-key.pem
+
+# Create a certificate request for a server certificate using localhost.  Use the CA's certificate to sign it:
+keytool -storetype pkcs12 -keystore server-lh.pkcs12 -storepass server-password -alias server-certificate -keypass server-password -genkey  -dname "CN=localhost" -validity 99999
+keytool -storetype pkcs12 -keystore server-lh.pkcs12 -storepass server-password -alias server-certificate -keypass server-password -certreq -file server-request-lh.pem
+keytool -storetype pkcs12 -keystore ca.pkcs12 -storepass ca-password -alias ca -keypass ca-password -gencert -rfc -validity 99999 -infile server-request-lh.pem -outfile server-certificate-lh.pem
+openssl pkcs12 -nocerts -passin pass:server-password -in server-lh.pkcs12 -passout pass:server-password -out server-private-key-lh.pem
+
+# Create a certificate request for the client certificate.  Use the CA's certificate to sign it:
+keytool -storetype pkcs12 -keystore client.pkcs12 -storepass client-password -alias client-certificate -keypass client-password -genkey  -dname "O=Client,CN=127.0.0.1" -validity 99999
+keytool -storetype pkcs12 -keystore client.pkcs12 -storepass client-password -alias client-certificate -keypass client-password -certreq -file client-request.pem
+keytool -storetype pkcs12 -keystore ca.pkcs12 -storepass ca-password -alias ca -keypass ca-password -gencert -rfc -validity 99999 -infile client-request.pem -outfile client-certificate.pem
+openssl pkcs12 -nocerts -passin pass:client-password -in client.pkcs12 -passout pass:client-password -out client-private-key.pem
+openssl pkcs12 -nocerts -passin pass:client-password -in client.pkcs12 -nodes -out client-private-key-no-password.pem
+
+# Create another client certificate with a different subject line
+keytool -storetype pkcs12 -keystore client1.pkcs12 -storepass client-password -alias client-certificate1 -keypass client-password -genkey  -dname "O=Client,CN=127.0.0.1,C=US,ST=ST,L=City,OU=Dev" -validity 99999
+keytool -storetype pkcs12 -keystore client1.pkcs12 -storepass client-password -alias client-certificate1 -keypass client-password -certreq -file client-request1.pem
+keytool -storetype pkcs12 -keystore ca.pkcs12 -storepass ca-password -alias ca -keypass ca-password -gencert -rfc -validity 99999 -infile client-request1.pem -outfile client-certificate1.pem
+openssl pkcs12 -nocerts -passin pass:client-password -in client1.pkcs12 -passout pass:client-password -out client-private-key1.pem
+
+# Create a "bad" certificate - not signed by a trusted authority
+keytool -storetype pkcs12 -keystore bad-server.pkcs12 -storepass server-password -alias bad-server -keypass server-password -genkey -dname "O=Not Trusted Inc,CN=127.0.0.1" -validity 99999
+openssl pkcs12 -nocerts -passin pass:server-password -in bad-server.pkcs12 -passout pass:server-password -out bad-server-private-key.pem
+openssl pkcs12 -nokeys  -passin pass:server-password -in bad-server.pkcs12 -passout pass:server-password -out bad-server-certificate.pem
+
+# Create a server certificate with several alternate names, including a wildcarded common name:
+keytool -ext san=dns:alternate.name.one.com,dns:another.name.com -storetype pkcs12 -keystore server-wc.pkcs12 -storepass server-password -alias server-wc-certificate -keypass server-password -genkeypair -dname "O=Server,CN=*.prefix*.domain.com" -validity 99999
+keytool -ext san=dns:alternate.name.one.com,dns:another.name.com -storetype pkcs12 -keystore server-wc.pkcs12 -storepass server-password -alias server-wc-certificate -keypass server-password -certreq -file server-wc-request.pem
+keytool -ext san=dns:alternate.name.one.com,dns:another.name.com  -storetype pkcs12 -keystore ca.pkcs12 -storepass ca-password -alias ca -keypass ca-password -gencert -rfc -validity 99999 -infile server-wc-request.pem -outfile server-wc-certificate.pem
+openssl pkcs12 -nocerts -passin pass:server-password -in server-wc.pkcs12 -passout pass:server-password -out server-wc-private-key.pem
+
+# Create pkcs12 versions of the above certificates (for Windows SChannel)
+# The CA certificate store/DB is created without public keys.
+# Give the "p12" files the same base name so the tests can just change the extension to switch between platforms.
+# These certificates might work for OpenSSL <-> SChannel interop tests, but note that the DH cypher suite
+# overlap is poor between platforms especially for older Windows versions.  RSA certificates are better for
+# interop (or PFS-friendly certificates on newer platforms).
+openssl pkcs12 -export -out ca-certificate.p12 -in ca-certificate.pem -name ca-certificate -nokeys -passout pass:
+openssl pkcs12 -export -out server-certificate.p12 -passin pass:server-password -passout pass:server-password -inkey server-private-key.pem -in server-certificate.pem -name server-certificate
+openssl pkcs12 -export -out client-certificate.p12 -passin pass:client-password -passout pass:client-password -inkey client-private-key.pem -in client-certificate.pem -name client-certificate
+openssl pkcs12 -export -out client-certificate1.p12 -passin pass:client-password -passout pass:client-password -inkey client-private-key1.pem -in client-certificate1.pem -name client-certificate1
+openssl pkcs12 -export -out bad-server-certificate.p12 -passin pass:server-password -passout pass:server-password -inkey bad-server-private-key.pem -in bad-server-certificate.pem -name bad-server
+openssl pkcs12 -export -out server-wc-certificate.p12 -passin pass:server-password -passout pass:server-password -inkey server-wc-private-key.pem -in server-wc-certificate.pem -name server-wc-certificate

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-certificate-lh.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-certificate-lh.pem b/cpp/testdata/certs/server-certificate-lh.pem
new file mode 100644
index 0000000..2f8af74
--- /dev/null
+++ b/cpp/testdata/certs/server-certificate-lh.pem
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIEYzCCBA+gAwIBAgIEJgEJHzANBglghkgBZQMEAwIFADAxMRcwFQYDVQQDEw5U
+cnVzdGVkLkNBLmNvbTEWMBQGA1UEChMNVHJ1c3QgTWUgSW5jLjAgFw0xODEwMDIw
+MjU3NDFaGA8yMjkyMDcxNjAyNTc0MVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIID
+QjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7FnjuvNxjo
+6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSzNggo
+oi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51kjviD
+RIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmYchU5
+Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm/wSQ
+PtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaWpoV4
+99/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6NHjB
+VNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2p5wy
+pifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUntxya
+OrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOlXVNb
+6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92vAhEr
+DR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IBBQAC
+ggEAaJDFkKEciZBEGohwGeijpVC76m8bJkaUpn/0anSaXg6Q7aVmKyXSfIjdVnEj
+UKx9Sf3EHW0d6bogVZeDDKAAwjXOV0iqgbJCKb+U6iH9TICYFKLqLQcXpaNNhyS8
+16gZHRk5mke3eAuDUYCzJm8XjGyO0t8toR29MWg9Tq5ssLeGEECENXrykJjodM3E
+LHGXR/tjFdIJ/2wJuu5KrXzagI6yuBA/Ux79kuS8HluVB+5QMmnxaRO5XHmOgvz5
+QyChDV/E6joL5DmIW6ZeyL9KAbxbK7ktktpQEc0sNUCKdqJwlC8LX4q9wCBPu2jp
+RC/F/qXyea245qYL9yGv6XPn0KNCMEAwHwYDVR0jBBgwFoAUPaOB9WALjUbwuGv+
+Ted0+UktwXwwHQYDVR0OBBYEFO6Jp9fsRsqm1blc+X6d7GQezlkkMA0GCWCGSAFl
+AwQDAgUAAz8AMDwCHDN3rhYg1G4UNxhBL0h8bJ3j8+nY+QvqJi1TpWsCHDOb5DOG
+oXZrLyAjCqPziT3gBCe78nq/6Hmq+TQ=
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-certificate.p12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-certificate.p12 b/cpp/testdata/certs/server-certificate.p12
new file mode 100644
index 0000000..a3f2822
Binary files /dev/null and b/cpp/testdata/certs/server-certificate.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-certificate.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-certificate.pem b/cpp/testdata/certs/server-certificate.pem
new file mode 100644
index 0000000..2bda16a
--- /dev/null
+++ b/cpp/testdata/certs/server-certificate.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEhDCCBDCgAwIBAgIEUj3FFjANBglghkgBZQMEAwIFADAxMRcwFQYDVQQDEw5U
+cnVzdGVkLkNBLmNvbTEWMBQGA1UEChMNVHJ1c3QgTWUgSW5jLjAgFw0xODEwMDIw
+MjU3NDBaGA8yMjkyMDcxNjAyNTc0MFowNTEiMCAGA1UEAxMZQTEuR29vZC5TZXJ2
+ZXIuZG9tYWluLmNvbTEPMA0GA1UEChMGU2VydmVyMIIDQjCCAjUGByqGSM44BAEw
+ggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7FnjuvNxjo6sSWHz79NgbnQ1GpxBgz
+ObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0CaD+
+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwudemY
+XeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmYchU5Feo9a4tGU8YzRY+AOzKk
+wuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm/wSQPtXPFiPhWNSHxgjpfyEc
+2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaWpoV499/e5/pnyXfHhe8ysjO6
+5YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6NHjBVNTkpcAtJC7gT5bmHkvQ
+kEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2p5wypifyRz6Rh5uixOdEvSCB
+VEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUntxyaOrsLC+EsRGiWOefTznTb
+EBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOlXVNb6/xF1PYZ9j897buHOSXC
+8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92vAhErDR8C2jCXMiT+J67ai51L
+KSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IBBQACggEARp1TRM/rm22JyKZo
+ojrNjWObZRCzcjpojjbAEr74RFnCIFZ3c9nyPDYGjM4cPlHR6vUhp0HJQXdV9Gd8
+0tDDgi+CiTBwvr9c5an100ldtUKRAKr043TK75LSm0UvtdSjVFVFA/9Te3I64iH2
+6zwVST+YkG7IIK12s3srvSMlx3ey3j7OwAhg6etwp8Kb6QyjfMtDOO95mbrVk4K1
+9D8j0j4GbqufwV5QG8KUMXH02YU+lcxE7+zENwCHUqYpo8dXIBan2lZoC9l5/BN/
+2kHviaTvwa7VzmVOLHkOjD447nKrYagMvV3otPHJSy1BGJGwIXX8NUdGlo5fncct
+cWrueaNCMEAwHwYDVR0jBBgwFoAUPaOB9WALjUbwuGv+Ted0+UktwXwwHQYDVR0O
+BBYEFJia3zvMshSHDBeQ2U0b6/XPKjYOMA0GCWCGSAFlAwQDAgUAAz8AMDwCHDmr
+wNOSfEiL8Ydy84t/B900bF1T8wumTfSxRCsCHD5qNubQlBEXsanlQ3bVbZrGW7E6
+5hxv6u9Y7Ok=
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-lh.pkcs12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-lh.pkcs12 b/cpp/testdata/certs/server-lh.pkcs12
new file mode 100644
index 0000000..63de556
Binary files /dev/null and b/cpp/testdata/certs/server-lh.pkcs12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-private-key-lh.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-private-key-lh.pem b/cpp/testdata/certs/server-private-key-lh.pem
new file mode 100644
index 0000000..e2fb27a
--- /dev/null
+++ b/cpp/testdata/certs/server-private-key-lh.pem
@@ -0,0 +1,21 @@
+Bag Attributes
+    friendlyName: server-certificate
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 36 30 38 30 39 
+Key Attributes: <No Attributes>
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQISxlyGoyD1QYCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECC3Vui8i8+0kBIICaCnTZ7hk0APw
+RyXxRWFOGGbgqPnseiHlq9pI1QOJN/zCa8EVUREIgdwGOO7VDw4JeOqR8SxxNL8H
+QTm/pITLE5qY1cnBJXncNRnPlz6XlblHCJoSOeDz7cJb+wZPL5CEYFsgHBZ8Odf1
+9keZ+ur5rZDW6UcOgu4p+RKsauy7BBVBIJXL4JAXfWxXTOLd7GF0SKKulgLoS0vi
+JQsCfGoIq5FJkp6GUwhnODCHfBEmddmH6AOS+lfxC6wjcXAqVYLsCuyw4Sm9QqdL
+eaTjUYwXiSXdWMOqWdxzWhxkrrK9wh4qxYBMoWBcSr2iir1nhW2uu9182GbyEPNV
+TOmQrxW/veJTEtRdZIAIs51C373FIDHkzsSsFHSZsFKZcOnpH5VfAWz0/g1i1/Rs
+a8wsFYj0csyuIQJjKFc4N/gaFwkSZxYvl5Getk5Prxo27o10ZoF7P7lBszdUxf95
+GKa/4M9AI3ftPCAa53VreRxGayOKFe+bvyWEH9mIfXXbQbMEbE8KxZ/pz8f6xhHk
+qbdJqlaVtzznZKl6Xp3UoDoJUf1pLJRIWiQENiTvlHdTtJGoL6eTqDU+0Kgtwnxg
+wMDkjYW2x2FKvICz3QUB+8BeC1QCV22YVdgi7qt+qNnlsBEegERvSiq9agk9SULc
+lcfVs+iAHgh0JdU85OKJ+QN9JgL3jmdXnSuZbdbZwNXzOHAyRMEMOTIp4d6AbcTK
+giZmvjb/TwO/giQGqA+Aum0KY8JdyEy+SObP91jWu1yFt9jm7qppYHZZa31uGXBf
+fJm1jqMP/zW/Vmzf62FWaLEHsU4DW8pAbAqkk1YMV7s=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-private-key.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-private-key.pem b/cpp/testdata/certs/server-private-key.pem
new file mode 100644
index 0000000..1cdfe72
--- /dev/null
+++ b/cpp/testdata/certs/server-private-key.pem
@@ -0,0 +1,21 @@
+Bag Attributes
+    friendlyName: server-certificate
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 35 39 36 34 36 
+Key Attributes: <No Attributes>
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQInP4M1lKTezECAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECHnnILCeCb0tBIICaAYdJIuASx3+
+0N/BzvdlyRbkGRuW4c1eA8myfAOHP9aCpjhhWG/i0MRZYyo0XHcq3HuBMPKgsL/7
+/zEZ/sefL94xEp4pTtZZR6i8Ign1PqdEj7df7+NFxs5nottszInZQDxoqd+c6XF3
+YgtdGfSYF3WYtwjmijzCP51uiEFlytNQo3yLbn1QNdZPTI8HOTl8h7i+34oPzi66
+A8XNyCo02W14gZ+egq5op8pbq0+sS46PvGuK8xcJDOl6GrP/8T4C4sFE6mrC/Gg+
+uasqQFXo9O4gQgvJQPnGsk3RRDYG5AdM52uGBDM4kok66U4q4Vbd7rqegfwr+BIB
+GSk2oBeCHjPZ3eOwSuoNFt13c91eaIXIWRh4XYRctaoJzaZg6E0a6s23u7tohajn
+e8l/QX1NOUX4jb3mZVh24EvNsJKlMaWyaXdZvWJfWGYTvl8IeRVvX94t8m11ftWE
+hzA707SCQSzYWU3Oit/+MbrLxwoerSeNz/Wzc5GMTJGm+2Vu+tlQt1KsBvUSnB/P
+px5odaMO+kH2ipVjycmnpaqmskIE+NjasiLLgwub1FNMv4WDGeRs2lM7ZmgPEkX/
+/kSfr/fo9Ex0A+e1n7olXif/IJeFZ9RY0ZWTAvEv0W8DcX4rEOEgjbwtLJiQOBd1
+YfMLEktNGt2tnlKiGBG6CFKpUvBUhqUjwJey0ENIK2NXf2N9vHFGzmtF/xq3cuOn
+dQBwicoBBka2ANhoA24K2Zm8L3n5eNWzVAHcOHAXRY7iy+QGdmgtASPk2a1b+F06
+l5sUGNB0koW9vFinj9Hc6xB/wASZp3NXBBC5jPZXf9M=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-request-lh.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-request-lh.pem b/cpp/testdata/certs/server-request-lh.pem
new file mode 100644
index 0000000..d550135
--- /dev/null
+++ b/cpp/testdata/certs/server-request-lh.pem
@@ -0,0 +1,23 @@
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MIID5TCCA5ECAQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MIIDQjCCAjUGByqGSM44
+BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7FnjuvNxjo6sSWHz79NgbnQ1Gp
+xBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0
+CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwu
+demYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmYchU5Feo9a4tGU8YzRY+A
+OzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm/wSQPtXPFiPhWNSHxgjp
+fyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaWpoV499/e5/pnyXfHhe8y
+sjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6NHjBVNTkpcAtJC7gT5bm
+HkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2p5wypifyRz6Rh5uixOdE
+vSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUntxyaOrsLC+EsRGiWOefT
+znTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOlXVNb6/xF1PYZ9j897buH
+OSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92vAhErDR8C2jCXMiT+J67a
+i51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IBBQACggEAaJDFkKEciZBE
+GohwGeijpVC76m8bJkaUpn/0anSaXg6Q7aVmKyXSfIjdVnEjUKx9Sf3EHW0d6bog
+VZeDDKAAwjXOV0iqgbJCKb+U6iH9TICYFKLqLQcXpaNNhyS816gZHRk5mke3eAuD
+UYCzJm8XjGyO0t8toR29MWg9Tq5ssLeGEECENXrykJjodM3ELHGXR/tjFdIJ/2wJ
+uu5KrXzagI6yuBA/Ux79kuS8HluVB+5QMmnxaRO5XHmOgvz5QyChDV/E6joL5DmI
+W6ZeyL9KAbxbK7ktktpQEc0sNUCKdqJwlC8LX4q9wCBPu2jpRC/F/qXyea245qYL
+9yGv6XPn0KAwMC4GCSqGSIb3DQEJDjEhMB8wHQYDVR0OBBYEFO6Jp9fsRsqm1blc
++X6d7GQezlkkMA0GCWCGSAFlAwQDAgUAAz8AMDwCHDLL/Bx68UXR2thddk3Bmj8a
+vrQ57RXpgu+18M4CHCpcPKGIxBOzWKIw8KTp2BenpS2Pd9llGO+RYHs=
+-----END NEW CERTIFICATE REQUEST-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-request.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-request.pem b/cpp/testdata/certs/server-request.pem
new file mode 100644
index 0000000..accad0a
--- /dev/null
+++ b/cpp/testdata/certs/server-request.pem
@@ -0,0 +1,24 @@
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MIIEBjCCA7ICAQAwNTEiMCAGA1UEAxMZQTEuR29vZC5TZXJ2ZXIuZG9tYWluLmNv
+bTEPMA0GA1UEChMGU2VydmVyMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZ
+uarpv6vtiHrPSVG28y7FnjuvNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0db
+hdARrbi0eYd1SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJ
+oBBXsZWtzQAjPbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qd
+gYHnM423krcw17njSVkvaAmYchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsI
+OKHEUOThjBopo33fXqFD3ktm/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLj
+Qr5ITAV2OTlgHNZnAh0AuvaWpoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAW
+plxYIEhQcE51AqOXVwQNNNo6NHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC
+0jyQQ8tkL4gAQWDt+coJsyB2p5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7U
+ielOD6BojjJCilx4xHjGjQUntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+
+xy9LVZmDS7TtsC98kOmkltOlXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5H
+SPh++1/et1SEMWsiMt7lU92vAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8
+UoELxoi34u1DFuHvF9veA4IBBQACggEARp1TRM/rm22JyKZoojrNjWObZRCzcjpo
+jjbAEr74RFnCIFZ3c9nyPDYGjM4cPlHR6vUhp0HJQXdV9Gd80tDDgi+CiTBwvr9c
+5an100ldtUKRAKr043TK75LSm0UvtdSjVFVFA/9Te3I64iH26zwVST+YkG7IIK12
+s3srvSMlx3ey3j7OwAhg6etwp8Kb6QyjfMtDOO95mbrVk4K19D8j0j4GbqufwV5Q
+G8KUMXH02YU+lcxE7+zENwCHUqYpo8dXIBan2lZoC9l5/BN/2kHviaTvwa7VzmVO
+LHkOjD447nKrYagMvV3otPHJSy1BGJGwIXX8NUdGlo5fncctcWrueaAwMC4GCSqG
+SIb3DQEJDjEhMB8wHQYDVR0OBBYEFJia3zvMshSHDBeQ2U0b6/XPKjYOMA0GCWCG
+SAFlAwQDAgUAAz8AMDwCHAVe2riCrlPBbpsFxmAJqF7PHDgOiCuIE5gPbI8CHCf5
+y75e09RGsjBmivZoThPFGrFYLdIvqF8dYk0=
+-----END NEW CERTIFICATE REQUEST-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-wc-certificate.p12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-wc-certificate.p12 b/cpp/testdata/certs/server-wc-certificate.p12
new file mode 100644
index 0000000..20a9c81
Binary files /dev/null and b/cpp/testdata/certs/server-wc-certificate.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-wc-certificate.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-wc-certificate.pem b/cpp/testdata/certs/server-wc-certificate.pem
new file mode 100644
index 0000000..cef7a78
--- /dev/null
+++ b/cpp/testdata/certs/server-wc-certificate.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEtjCCBGCgAwIBAgIEUkyrdTANBglghkgBZQMEAwIFADAxMRcwFQYDVQQDEw5U
+cnVzdGVkLkNBLmNvbTEWMBQGA1UEChMNVHJ1c3QgTWUgSW5jLjAgFw0xODEwMDIw
+MjU3NDVaGA8yMjkyMDcxNjAyNTc0NVowMDEdMBsGA1UEAwwUKi5wcmVmaXgqLmRv
+bWFpbi5jb20xDzANBgNVBAoTBlNlcnZlcjCCA0IwggI1BgcqhkjOOAQBMIICKAKC
+AQEAj3k12bmq6b+r7Yh6z0lRtvMuxZ47rzcY6OrElh8+/TYG50NRqcQYMzm4CefC
+rhxTm6dHW4XQEa24tHmHdUmEaVysDo8UszYIKKIv+icRCj1iqZNFNAmg/mlsRlj4
+S90ggZw3CaAQV7GVrc0AIz26VIS2KR+dZI74g0SGd5ec7AS0NKasLnXpmF3iPbAp
+L8ERjJ/6nYGB5zONt5K3MNe540lZL2gJmHIVORXqPWuLRlPGM0WPgDsypMLg8nKQ
+JW5OP4o7CDihxFDk4YwaKaN9316hQ95LZv8EkD7VzxYj4VjUh8YI6X8hHNgdyiPL
+bjgHZfgi40K+SEwFdjk5YBzWZwIdALr2lqaFePff3uf6Z8l3x4XvMrIzuuWAwLzV
+aV0CggEAFqZcWCBIUHBOdQKjl1cEDTTaOjR4wVTU5KXALSQu4E+W5h5L0JBKvayP
+N+6x4J8xgtI8kEPLZC+IAEFg7fnKCbMgdqecMqYn8kc+kYebosTnRL0ggVRMtVuA
+LDaNH6g+1InpTg+gaI4yQopceMR4xo0FJ7ccmjq7CwvhLERoljnn08502xAaZaor
+h/ZMaCbbPscvS1WZg0u07bAvfJDppJbTpV1TW+v8RdT2GfY/Pe27hzklwvIk4Hcx
+KW2oh+weR0j4fvtf3rdUhDFrIjLe5VPdrwIRKw0fAtowlzIk/ieu2oudSyki2bqL
+457Z4QOmPFKBC8aIt+LtQxbh7xfb3gOCAQUAAoIBAAVDMGlarHLWrMs4l+6xegQE
+9H4WqDz7qFRdF0F7p2OEEC6kJ4DhuYaUvGETx+snVRbBiGbOyE1fyftcW+GrxUu1
+8pu1qb+emk4eLg1hxRqt/zmHEojRrqPH/Xii9BKLX1H3uileQwJu7JMjZ46DUkDc
+OMqtLCldXxH1F1/cO94otknkwu7TY6Mu799i0QRSGEzUJ2oAHDD3N0vaCw0zipNC
+H/w9AjL/SzIh0Rw+Et3/9Usa9q/BNy5+mhZqym7s56ori1fd7a5DFP1uk+QWphyT
+3bwsIF/tWrm8+fKlIM+gSzgflgFUxwgabh6BrGf+0I/ikd5idsOAQ9qrXezCUj+j
+dzB1MB8GA1UdIwQYMBaAFD2jgfVgC41G8Lhr/k3ndPlJLcF8MDMGA1UdEQQsMCqC
+FmFsdGVybmF0ZS5uYW1lLm9uZS5jb22CEGFub3RoZXIubmFtZS5jb20wHQYDVR0O
+BBYEFF96eWh/xgffyH0uCGZc6vPUQD2YMA0GCWCGSAFlAwQDAgUAA0EAMD4CHQCj
+/geaVC5aa1KoAjbefleP0hoKhsOssJ97/aqyAh0AsAJPFXvBYAQGJQOph/mJkNQT
+9o/LNyaEB6QnQg==
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-wc-private-key.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-wc-private-key.pem b/cpp/testdata/certs/server-wc-private-key.pem
new file mode 100644
index 0000000..d2b5094
--- /dev/null
+++ b/cpp/testdata/certs/server-wc-private-key.pem
@@ -0,0 +1,21 @@
+Bag Attributes
+    friendlyName: server-wc-certificate
+    localKeyID: 54 69 6D 65 20 31 35 33 38 34 34 39 30 36 34 37 38 35 
+Key Attributes: <No Attributes>
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIICvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIjxM5RLFGE7ICAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECOAmYE1vfly1BIICaBle2jIyrouB
+QGgywMpL+5VCGB1O/+TIt1fSO1QW6PNk6AkXMnnI6ivIPymfozXOOXKu3VsEl4ge
+L8pukXuclBMj2nPxP80HgMwE7manDAe/qGQeBYKBZX+udiTOS92N0oKqPBwcenuK
+a+49FLfeUj0HrGACyZJK3UJOGA6s0cb5mYI5GVV2bKZR040cDRM3jKzu6MMZTF4K
+UZ+HqFU2hZcZ6mHQB+hyo4/QaSSk2MABVdI2mZ6aFeZB8Zd+2LT+Ibw2wimOW7+H
+xjFY52uN2Ng8yoV0dAyFHmDkpRuPQibz6JOFLrw4a5bDxIpUOGQLw88z33gbqFqt
+gndUn3SLFjo+LK/r1efgjNMZulRb36Ibrdy7JJFognpv3SLNfuImmMycN2P22dgS
+dPgw3SbNMA1FJObS70B91ceJZj3K+/16ZLf1/A2lbO48UBTqeChW7+31iQfML+D4
+3pI4bt6Bltz+aF01pksty/4299XuVo/HFTF59p2h9ztVOXVK+8ok4XIM1LXmQjyv
+dZsdqaYSVLNNMvFPt+odrl2mB3+7Y55+nRWZw5s/ARA+mJ1lKkaIQi6bpZ4OTFfS
+Fz9X9bxCOcElAZZUwKJFg/ai8ILz8VibNhy8izZzO5682TojNYkLdm1frzaa96Re
+GKQPIXzGgn0njZMzuFwpxEPw2UnTazpe9VO+b2F07K+Z5/tLijf/J9eAUwRo4IZK
+RtDRhnL6PfhgZGNFbk0YNgXI6cQ5+eix8cHAVE0R9SKnV3HM7DOo7cUQubemPCwT
++h5lGAU3oE3SOxYtsPa1Te//gF3DyYrym2atNBnprm0=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-wc-request.pem
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-wc-request.pem b/cpp/testdata/certs/server-wc-request.pem
new file mode 100644
index 0000000..0b9ec10
--- /dev/null
+++ b/cpp/testdata/certs/server-wc-request.pem
@@ -0,0 +1,25 @@
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MIIENjCCA+ICAQAwMDEdMBsGA1UEAwwUKi5wcmVmaXgqLmRvbWFpbi5jb20xDzAN
+BgNVBAoTBlNlcnZlcjCCA0IwggI1BgcqhkjOOAQBMIICKAKCAQEAj3k12bmq6b+r
+7Yh6z0lRtvMuxZ47rzcY6OrElh8+/TYG50NRqcQYMzm4CefCrhxTm6dHW4XQEa24
+tHmHdUmEaVysDo8UszYIKKIv+icRCj1iqZNFNAmg/mlsRlj4S90ggZw3CaAQV7GV
+rc0AIz26VIS2KR+dZI74g0SGd5ec7AS0NKasLnXpmF3iPbApL8ERjJ/6nYGB5zON
+t5K3MNe540lZL2gJmHIVORXqPWuLRlPGM0WPgDsypMLg8nKQJW5OP4o7CDihxFDk
+4YwaKaN9316hQ95LZv8EkD7VzxYj4VjUh8YI6X8hHNgdyiPLbjgHZfgi40K+SEwF
+djk5YBzWZwIdALr2lqaFePff3uf6Z8l3x4XvMrIzuuWAwLzVaV0CggEAFqZcWCBI
+UHBOdQKjl1cEDTTaOjR4wVTU5KXALSQu4E+W5h5L0JBKvayPN+6x4J8xgtI8kEPL
+ZC+IAEFg7fnKCbMgdqecMqYn8kc+kYebosTnRL0ggVRMtVuALDaNH6g+1InpTg+g
+aI4yQopceMR4xo0FJ7ccmjq7CwvhLERoljnn08502xAaZaorh/ZMaCbbPscvS1WZ
+g0u07bAvfJDppJbTpV1TW+v8RdT2GfY/Pe27hzklwvIk4HcxKW2oh+weR0j4fvtf
+3rdUhDFrIjLe5VPdrwIRKw0fAtowlzIk/ieu2oudSyki2bqL457Z4QOmPFKBC8aI
+t+LtQxbh7xfb3gOCAQUAAoIBAAVDMGlarHLWrMs4l+6xegQE9H4WqDz7qFRdF0F7
+p2OEEC6kJ4DhuYaUvGETx+snVRbBiGbOyE1fyftcW+GrxUu18pu1qb+emk4eLg1h
+xRqt/zmHEojRrqPH/Xii9BKLX1H3uileQwJu7JMjZ46DUkDcOMqtLCldXxH1F1/c
+O94otknkwu7TY6Mu799i0QRSGEzUJ2oAHDD3N0vaCw0zipNCH/w9AjL/SzIh0Rw+
+Et3/9Usa9q/BNy5+mhZqym7s56ori1fd7a5DFP1uk+QWphyT3bwsIF/tWrm8+fKl
+IM+gSzgflgFUxwgabh6BrGf+0I/ikd5idsOAQ9qrXezCUj+gZTBjBgkqhkiG9w0B
+CQ4xVjBUMDMGA1UdEQQsMCqCFmFsdGVybmF0ZS5uYW1lLm9uZS5jb22CEGFub3Ro
+ZXIubmFtZS5jb20wHQYDVR0OBBYEFF96eWh/xgffyH0uCGZc6vPUQD2YMA0GCWCG
+SAFlAwQDAgUAAz8AMDwCHAoNyH8KS3UNA/YHb/gHExmyNq6P+FvxVQYRqAsCHHei
+Pqnz39VtyJ0S2ozP60/raQzagEziWIZxozY=
+-----END NEW CERTIFICATE REQUEST-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server-wc.pkcs12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server-wc.pkcs12 b/cpp/testdata/certs/server-wc.pkcs12
new file mode 100644
index 0000000..3cd2f9f
Binary files /dev/null and b/cpp/testdata/certs/server-wc.pkcs12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/certs/server.pkcs12
----------------------------------------------------------------------
diff --git a/cpp/testdata/certs/server.pkcs12 b/cpp/testdata/certs/server.pkcs12
new file mode 100644
index 0000000..51630d7
Binary files /dev/null and b/cpp/testdata/certs/server.pkcs12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3421517/cpp/testdata/sasl-conf/proton-server.conf.in
----------------------------------------------------------------------
diff --git a/cpp/testdata/sasl-conf/proton-server.conf.in b/cpp/testdata/sasl-conf/proton-server.conf.in
new file mode 100644
index 0000000..ff2fb17
--- /dev/null
+++ b/cpp/testdata/sasl-conf/proton-server.conf.in
@@ -0,0 +1,2 @@
+sasldb_path: ${CMAKE_BINARY_DIR}/cpp/testdata/sasl-conf/proton.sasldb
+mech_list: EXTERNAL DIGEST-MD5 SCRAM-SHA-1 CRAM-MD5 PLAIN ANONYMOUS


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


Mime
View raw message