Return-Path: Delivered-To: apmail-apr-commits-archive@www.apache.org Received: (qmail 12493 invoked from network); 24 Jun 2006 14:07:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 24 Jun 2006 14:07:31 -0000 Received: (qmail 7423 invoked by uid 500); 24 Jun 2006 14:07:30 -0000 Delivered-To: apmail-apr-commits-archive@apr.apache.org Received: (qmail 7381 invoked by uid 500); 24 Jun 2006 14:07:30 -0000 Mailing-List: contact commits-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: Reply-To: dev@apr.apache.org List-Id: Delivered-To: mailing list commits@apr.apache.org Received: (qmail 7370 invoked by uid 99); 24 Jun 2006 14:07:29 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 24 Jun 2006 07:07:29 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 24 Jun 2006 07:07:28 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id A2C961A983A; Sat, 24 Jun 2006 07:07:08 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r416919 - in /apr/apr-util/trunk: ssl/apr_ssl.c ssl/apr_ssl_openssl.c test/ test/Makefile.in test/echod.c test/sockperf.c test/ssl_data/ test/ssl_data/cert.csr test/ssl_data/cert.pem test/ssl_data/private.key Date: Sat, 24 Jun 2006 14:07:06 -0000 To: commits@apr.apache.org From: dreid@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060624140708.A2C961A983A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: dreid Date: Sat Jun 24 07:07:06 2006 New Revision: 416919 URL: http://svn.apache.org/viewvc?rev=416919&view=rev Log: - add echod and sockperf in ssl enabled versions for apr-util - correct bug in apr_ssl_accept() - add key and cert for echod/sockperf test This gets us testing both server and client aspects of the ssl code and allows us to compare vs raw sockets directly :-) Added: apr/apr-util/trunk/test/echod.c apr/apr-util/trunk/test/sockperf.c apr/apr-util/trunk/test/ssl_data/ apr/apr-util/trunk/test/ssl_data/cert.csr apr/apr-util/trunk/test/ssl_data/cert.pem apr/apr-util/trunk/test/ssl_data/private.key Modified: apr/apr-util/trunk/ssl/apr_ssl.c apr/apr-util/trunk/ssl/apr_ssl_openssl.c apr/apr-util/trunk/test/ (props changed) apr/apr-util/trunk/test/Makefile.in Modified: apr/apr-util/trunk/ssl/apr_ssl.c URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/ssl/apr_ssl.c?rev=416919&r1=416918&r2=416919&view=diff ============================================================================== --- apr/apr-util/trunk/ssl/apr_ssl.c (original) +++ apr/apr-util/trunk/ssl/apr_ssl.c Sat Jun 24 07:07:06 2006 @@ -43,6 +43,7 @@ { apr_ssl_factory_t *asf; + apr_status_t rv; if (!p) return APR_ENOPOOL; @@ -59,8 +60,9 @@ *fact = NULL; asf->pool = p; - if (apu_ssl_factory_create(asf, privateKeyFn, certFn, digestType) != APR_SUCCESS) - return -1; + if ((rv = apu_ssl_factory_create(asf, privateKeyFn, certFn, + digestType)) != APR_SUCCESS) + return rv; /* should we register a cleanup here? */ *fact = asf; Modified: apr/apr-util/trunk/ssl/apr_ssl_openssl.c URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/ssl/apr_ssl_openssl.c?rev=416919&r1=416918&r2=416919&view=diff ============================================================================== --- apr/apr-util/trunk/ssl/apr_ssl_openssl.c (original) +++ apr/apr-util/trunk/ssl/apr_ssl_openssl.c Sat Jun 24 07:07:06 2006 @@ -77,7 +77,7 @@ SSL_FILETYPE_PEM) || !SSL_CTX_check_private_key(sslData->ctx)) { SSL_CTX_free(sslData->ctx); - return -1; /* what code shoudl we return? */ + return APR_ENOENT; /* what code shoudl we return? */ } } } else { @@ -182,13 +182,15 @@ return -1; } -apr_status_t apu_ssl_accept(apr_ssl_socket_t *newSock, apr_ssl_socket_t *oldSock, apr_pool_t *pool) +apr_status_t apu_ssl_accept(apr_ssl_socket_t *newSock, + apr_ssl_socket_t *oldSock, apr_pool_t *pool) { apu_ssl_socket_data_t *sslData = apr_pcalloc(pool, sizeof(*sslData)); apr_os_sock_t fd; + int sslOp; if (!sslData || !oldSock->factory) - return -1; + return APR_EINVAL; sslData->ssl = SSL_new(oldSock->factory->sslData->ctx); if (!sslData->ssl) @@ -197,6 +199,11 @@ if (apr_os_sock_get(&fd, newSock->plain) != APR_SUCCESS) return -1; SSL_set_fd(sslData->ssl, fd); + + if ((sslOp = SSL_accept(sslData->ssl)) != 1) { + openssl_get_error(newSock, sslOp); + return -1; + } newSock->pool = pool; newSock->sslData = sslData; Propchange: apr/apr-util/trunk/test/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Sat Jun 24 07:07:06 2006 @@ -23,3 +23,5 @@ testdbd dbd testssl +echod +sockperf Modified: apr/apr-util/trunk/test/Makefile.in URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/test/Makefile.in?rev=416919&r1=416918&r2=416919&view=diff ============================================================================== --- apr/apr-util/trunk/test/Makefile.in (original) +++ apr/apr-util/trunk/test/Makefile.in Sat Jun 24 07:07:06 2006 @@ -3,7 +3,8 @@ INCLUDES = @APRUTIL_PRIV_INCLUDES@ @APR_INCLUDES@ @APRUTIL_INCLUDES@ PROGRAMS = testall testdbm testdate testxml testrmm \ - testreslist testqueue testxlate dbd testssl + testreslist testqueue testxlate dbd testssl \ + echod sockperf TARGETS = $(PROGRAMS) APRUTIL_DOTTED_VERSION=@APRUTIL_DOTTED_VERSION@ @@ -77,6 +78,18 @@ testssl_LDADD = $(TARGET_LIB_PATH) testssl: $(testssl_OBJECTS) $(testssl_LDADD) $(LINK) $(APRUTIL_LDFLAGS) $(testssl_OBJECTS) $(testssl_LDADD) $(PROGRAM_DEPENDENCIES) + +echod_OBJECTS = echod.lo +echod_LDADD = $(TARGET_LIB_PATH) +echod: $(echod_OBJECTS) $(echod_LDADD) + $(LINK) $(APRUTIL_LDFLAGS) $(echod_OBJECTS) $(echod_LDADD) \ + $(PROGRAM_DEPENDENCIES) + +sockperf_OBJECTS = sockperf.lo +sockperf_LDADD = $(TARGET_LIB_PATH) +sockperf: $(echod_OBJECTS) $(sockperf_LDADD) + $(LINK) $(APRUTIL_LDFLAGS) $(sockperf_OBJECTS) $(sockperf_LDADD) \ + $(PROGRAM_DEPENDENCIES) testall_OBJECTS = teststrmatch.lo testuri.lo testuuid.lo abts.lo testutil.lo \ testbuckets.lo testpass.lo testmd4.lo testmd5.lo testldap.lo \ Added: apr/apr-util/trunk/test/echod.c URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/test/echod.c?rev=416919&view=auto ============================================================================== --- apr/apr-util/trunk/test/echod.c (added) +++ apr/apr-util/trunk/test/echod.c Sat Jun 24 07:07:06 2006 @@ -0,0 +1,166 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as + * applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Simple echo daemon, designed to be used for network throughput + * benchmarks. The aim is to allow us to monitor changes in performance + * of APR networking code, nothing more. + */ + +#include +#include /* for atexit() */ + +#include "apr.h" +#include "apr_network_io.h" +#include "apr_strings.h" +#include "apr_ssl.h" +#include "apr_getopt.h" + +#define BUF_SIZE 4096 + +static apr_ssl_factory_t *asf = NULL; + +static void reportError(const char *msg, apr_status_t rv, + apr_pool_t *pool) +{ + fprintf(stderr, "%s\nError: %d\n'%s'\n", msg, rv, + apr_psprintf(pool, "%pm", &rv)); +} + +static apr_status_t talkTalk(apr_ssl_socket_t *socket, apr_pool_t *parent) +{ + apr_pool_t *pool; + apr_size_t len; + char *buf; + apr_status_t rv; + + if (apr_pool_create(&pool, parent) != APR_SUCCESS) + return APR_ENOPOOL; + + + buf = apr_palloc(pool, BUF_SIZE); + if (!buf) + return ENOMEM; + + do { + len = BUF_SIZE; + rv = apr_ssl_socket_recv(socket, buf, &len); + if (APR_STATUS_IS_EOF(rv) || len == 0 || rv != APR_SUCCESS) + break; + rv = apr_ssl_socket_send(socket, buf, &len); + if (len == 0 || rv != APR_SUCCESS) + break; + } while (rv == APR_SUCCESS); + + apr_pool_clear(pool); + return APR_SUCCESS; +} + +static apr_status_t glassToWall(apr_int16_t port, apr_pool_t *parent) +{ + apr_sockaddr_t *sockAddr; + apr_ssl_socket_t *listener, *accepted; + apr_status_t rv; + + rv = apr_ssl_socket_create(&listener, APR_INET, SOCK_STREAM, APR_PROTO_TCP, + asf, parent); + if (rv != APR_SUCCESS) { + reportError("Unable to create an SSL socket", rv, parent); + return rv; + } + + rv = apr_sockaddr_info_get(&sockAddr, "127.0.0.1", APR_UNSPEC, + port, 0, parent); + if (rv != APR_SUCCESS) { + reportError("Unable to get socket info", rv, parent); + apr_ssl_socket_close(listener); + return rv; + } + + if ((rv = apr_ssl_socket_bind(listener, sockAddr)) != APR_SUCCESS || + (rv = apr_ssl_socket_listen(listener, 5)) != APR_SUCCESS) { + reportError("Unable to bind or listen to socket", rv, parent); + apr_ssl_socket_close(listener); + return rv; + } + + for (;;) { + rv = apr_ssl_socket_accept(&accepted, listener, parent); + if (rv != APR_SUCCESS) { + reportError("Error accepting on socket", rv, parent); + break; + } + printf("\tAnswering connection\n"); + rv = talkTalk(accepted, parent); + apr_ssl_socket_close(accepted); + printf("\tConnection closed\n"); + if (rv != APR_SUCCESS) + break; + } + + apr_ssl_socket_close(listener); + return APR_SUCCESS; +} + +int main(int argc, const char * const * argv) +{ + apr_pool_t *pool; + apr_status_t rv; + apr_int16_t theport = 4747; + char *keyFn = "ssl_data/private.key"; + char *certFn = "ssl_data/cert.pem"; + apr_getopt_t *os; + char optch; + const char *optarg; + + printf("APR Test Application: echod\n"); + + apr_initialize(); + atexit(apr_terminate); + + apr_pool_create(&pool, NULL); + + (void) apr_getopt_init(&os, pool, argc, argv); + while (apr_getopt(os, "kcp:", &optch, &optarg) == APR_SUCCESS) { + switch (optch) { + case 'k': + keyFn = (char *)optarg; + break; + case 'c': + certFn = (char *)optarg; + break; + case 'p': + theport = atoi(optarg); + break; + default: + printf("Unknown option! '%c'\n", optch); + break; + } + } + + printf("\tListening at port %d\n", theport); + printf("\tPrivate key: %s\n", keyFn); + printf("\tCertificate: %s\n", certFn); + + rv = apr_ssl_factory_create(&asf, keyFn, certFn, NULL, pool); + if (rv != APR_SUCCESS) { + reportError("Unable to create an SSL factory!", rv, pool); + exit(1); + } + + rv = glassToWall(theport, pool); + + return 0; +} Added: apr/apr-util/trunk/test/sockperf.c URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/test/sockperf.c?rev=416919&view=auto ============================================================================== --- apr/apr-util/trunk/test/sockperf.c (added) +++ apr/apr-util/trunk/test/sockperf.c Sat Jun 24 07:07:06 2006 @@ -0,0 +1,247 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as + * applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* sockperf.c + * This simple network client tries to connect to an echo daemon (echod) + * listening on a port it supplies, then time how long it takes to + * reply with packets of varying sizes. + * It prints results once completed. + * + * To run, + * + * ./echod & + * ./sockperf + */ + +#include +#include /* for atexit() */ + +#include "apr.h" +#include "apr_network_io.h" +#include "apr_strings.h" +#include "apr_ssl.h" + +#define MAX_ITERS 10 +#define TEST_SIZE 1024 + +struct testSet { + char c; + int size; + int iters; +} testRuns[] = { + { 'a', 1, 3 }, + { 'b', 4, 3 }, + { 'c', 16, 5 }, + { 'd', 64, 5 }, + { 'e', 256, 10 }, +}; + +struct testResult { + int size; + int iters; + apr_time_t msecs[MAX_ITERS]; + apr_time_t avg; +}; + +static apr_int16_t testPort = 4747; +static apr_sockaddr_t *sockAddr = NULL; +static apr_ssl_factory_t *asf = NULL; + +static void reportError(const char *msg, apr_status_t rv, + apr_pool_t *pool) +{ + fprintf(stderr, "%s\n", msg); + if (rv != APR_SUCCESS) + fprintf(stderr, "Error: %d\n'%s'\n", rv, + apr_psprintf(pool, "%pm", &rv)); + +} + +static void closeConnection(apr_ssl_socket_t *sock) +{ + apr_size_t len = 0; + apr_ssl_socket_send(sock, NULL, &len); +} + +static apr_status_t sendRecvBuffer(apr_time_t *t, const char *buf, + int size, apr_pool_t *pool) +{ + apr_ssl_socket_t *sock; + apr_status_t rv; + apr_size_t len = size, thistime = size; + char *recvBuf; + apr_time_t testStart = apr_time_now(), testEnd; + int i; + + if (! sockAddr) { + rv = apr_sockaddr_info_get(&sockAddr, "127.0.0.1", APR_UNSPEC, + testPort, 0, pool); + if (rv != APR_SUCCESS) { + reportError("Unable to get socket info", rv, pool); + return rv; + } + + /* make sure we can connect to daemon before we try tests */ + + rv = apr_ssl_socket_create(&sock, APR_INET, SOCK_STREAM, APR_PROTO_TCP, + asf, pool); + if (rv != APR_SUCCESS) + return rv; + + rv = apr_ssl_socket_connect(sock, sockAddr); + if (rv != APR_SUCCESS) { + reportError("Unable to connect to echod!", rv, pool); + apr_ssl_socket_close(sock); + return rv; + } + apr_ssl_socket_close(sock); + + } + + recvBuf = apr_palloc(pool, size); + if (! recvBuf) + return ENOMEM; + *t = 0; + + /* START! */ + testStart = apr_time_now(); + rv = apr_ssl_socket_create(&sock, APR_INET, SOCK_STREAM, APR_PROTO_TCP, + asf, pool); + if (rv != APR_SUCCESS) + return rv; + + rv = apr_ssl_socket_connect(sock, sockAddr); + if (rv != APR_SUCCESS) { + reportError("Unable to connect to echod!", rv, pool); + apr_ssl_socket_close(sock); + return rv; + } + + for (i = 0; i < 3; i++) { + + len = size; + thistime = size; + + rv = apr_ssl_socket_send(sock, buf, &len); + if (rv != APR_SUCCESS || len != size) { + reportError(apr_psprintf(pool, + "Unable to send data correctly (iteration %d of 3)", + i) , rv, pool); + closeConnection(sock); + apr_ssl_socket_close(sock); + return rv; + } + + do { + len = thistime; + rv = apr_ssl_socket_recv(sock, &recvBuf[size - thistime], &len); + if (rv != APR_SUCCESS) + break; + thistime -= len; + } while (thistime); + } + + closeConnection(sock); + apr_ssl_socket_close(sock); + testEnd = apr_time_now(); + /* STOP! */ + + if (thistime) { + reportError("Received less than we sent :-(", rv, pool); + return rv; + } + if (strncmp(recvBuf, buf, size) != 0) { + reportError("Received corrupt data :-(", 0, pool); + printf("We sent:\n%s\nWe received:\n%s\n", buf, recvBuf); + return EINVAL; + } + *t = testEnd - testStart; + return APR_SUCCESS; +} + +static apr_status_t runTest(struct testSet *ts, struct testResult *res, + apr_pool_t *pool) +{ + char *buffer; + apr_status_t rv; + int i, sz = ts->size * TEST_SIZE; + + buffer = apr_palloc(pool, sz); + if (!buffer) { + reportError("Unable to allocate buffer", ENOMEM, pool); + return ENOMEM; + } + memset(buffer, ts->c, sz); + + res->iters = ts->iters > MAX_ITERS ? MAX_ITERS : ts->iters; + + for (i = 0; i < res->iters; i++) { + apr_time_t iterTime; + rv = sendRecvBuffer(&iterTime, buffer, sz, pool); + if (rv != APR_SUCCESS) { + res->iters = i; + break; + } + res->msecs[i] = iterTime; + } + + return rv; +} + +int main(int argc, char **argv) +{ + apr_pool_t *pool; + apr_status_t rv; + int i; + int nTests = sizeof(testRuns) / sizeof(testRuns[0]); + struct testResult *results; + + printf("APR Test Application: SSL sockperf\n"); + + apr_initialize(); + atexit(apr_terminate); + + apr_pool_create(&pool, NULL); + + rv = apr_ssl_factory_create(&asf, NULL, NULL, NULL, pool); + + results = (struct testResult *)apr_pcalloc(pool, + sizeof(*results) * nTests); + + printf("Starting tests..."); + fflush(stdout); + for(i = 0; i < nTests; i++) { + results[i].size = testRuns[i].size * TEST_SIZE; + rv = runTest(&testRuns[i], &results[i], pool); + } + printf("Complete\n"); + + printf("\nSummary\n=======\n"); + for(i = 0; i < nTests; i++) { + int j; + apr_time_t totTime = 0; + printf("%10d byte block:\n", results[i].size); + printf("\t%2d iterations : ", results[i].iters); + for (j = 0; j < results[i].iters; j++) { + printf("%6Ld ", results[i].msecs[j]); + totTime += results[i].msecs[j]; + } + printf("<\n"); + printf("\t Average: %6Ld\n", totTime / results[i].iters); + } + + return 0; +} Added: apr/apr-util/trunk/test/ssl_data/cert.csr URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/test/ssl_data/cert.csr?rev=416919&view=auto ============================================================================== --- apr/apr-util/trunk/test/ssl_data/cert.csr (added) +++ apr/apr-util/trunk/test/ssl_data/cert.csr Sat Jun 24 07:07:06 2006 @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICvzCCAacCAQAwejELMAkGA1UEBhMCR0IxFDASBgNVBAgTC1dlc3QgU3Vzc2V4 +MR0wGwYDVQQKExRBUFIgVGVzdCBDZXJ0aWZpY2F0ZTETMBEGA1UEAxMKQVBSIFRl +c3RlcjEhMB8GCSqGSIb3DQEJARYSZGV2QGFwci5hcGFjaGUub3JnMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0mAG7FBmigUCAjvvwkp3WnboN4+nJDv+ +9JtN2FWECIi2sfPa4uIYXlWtfzXIsDtvivW8nbQ4DreiilX6rngcFt+cxFFHzqOs +qvyMUnQnFElHLmwgPTtMzgqyGl52dsH8LKC24fvziSfLZth03w+/RA4dVYcjz4Gm +6t3bheFG0g7SMz9U4610SefHEag6Zu5OS8SHTuR0yQPiwbKMcZ6T5jqyHh7mPm39 +jnOlD7yIgD6rwi4mW0Sau2+XgDIpFXb119PKSko8Z6sHFJXD8vpriWOmVbDgjfTd +EksuE672ftFms7f5UDoLmR7gNWCXFAgcJ6nbuXI0Uec0ea9Dsww/UQIDAQABoAAw +DQYJKoZIhvcNAQEFBQADggEBAJ+0DC6CCoxfkGAfazLEP1dWspv/whsyroWLwju0 +2XY8CkWZgSI06/4njn0cz5vVUN15dOlfhfkR5OJGm8Fiyy0MeVYwriF2VqMGONdv +1nceZPklrToGstTlN+JYiM/CXgH3fZ4lABoPobRTJGHVwTj6QkZTN4j0h8N9NB2M +3v8W8+8QGed+Fh1MX1QV/zKJgKgQTqwxuA6UGznroWX778GV9FUhXqfV9As/OWn9 +lpHqyZ+JrbhNrfO5g/S/1HaNkEoF8CFVxKPSv+iDYeyuYYhK/M1aWang0rwX5Lhp +8JBo50OdOSN3e5IZUv9p0ef73h/OwozOnSX3NjfP8A1yc5U= +-----END CERTIFICATE REQUEST----- Added: apr/apr-util/trunk/test/ssl_data/cert.pem URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/test/ssl_data/cert.pem?rev=416919&view=auto ============================================================================== --- apr/apr-util/trunk/test/ssl_data/cert.pem (added) +++ apr/apr-util/trunk/test/ssl_data/cert.pem Sat Jun 24 07:07:06 2006 @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDcDCCAlgCCQCaj+Wa2RLbDDANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJH +QjEUMBIGA1UECBMLV2VzdCBTdXNzZXgxHTAbBgNVBAoTFEFQUiBUZXN0IENlcnRp +ZmljYXRlMRMwEQYDVQQDEwpBUFIgVGVzdGVyMSEwHwYJKoZIhvcNAQkBFhJkZXZA +YXByLmFwYWNoZS5vcmcwHhcNMDYwNjI0MTI0NDQ4WhcNMzMxMTA5MTI0NDQ4WjB6 +MQswCQYDVQQGEwJHQjEUMBIGA1UECBMLV2VzdCBTdXNzZXgxHTAbBgNVBAoTFEFQ +UiBUZXN0IENlcnRpZmljYXRlMRMwEQYDVQQDEwpBUFIgVGVzdGVyMSEwHwYJKoZI +hvcNAQkBFhJkZXZAYXByLmFwYWNoZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDSYAbsUGaKBQICO+/CSndadug3j6ckO/70m03YVYQIiLax89ri +4hheVa1/NciwO2+K9bydtDgOt6KKVfqueBwW35zEUUfOo6yq/IxSdCcUSUcubCA9 +O0zOCrIaXnZ2wfwsoLbh+/OJJ8tm2HTfD79EDh1VhyPPgabq3duF4UbSDtIzP1Tj +rXRJ58cRqDpm7k5LxIdO5HTJA+LBsoxxnpPmOrIeHuY+bf2Oc6UPvIiAPqvCLiZb +RJq7b5eAMikVdvXX08pKSjxnqwcUlcPy+muJY6ZVsOCN9N0SSy4TrvZ+0Wazt/lQ +OguZHuA1YJcUCBwnqdu5cjRR5zR5r0OzDD9RAgMBAAEwDQYJKoZIhvcNAQEFBQAD +ggEBACOhwWAossglzxxj0oICjK9dsa6OAWQy4nBKRvWMo8VV6RAlmPi8Tvh3Zhaq +z+23La+lgk8bEohdKt+kcCVAEG2hA3M83RTBqGd6ZUkaXUXXuF3GRkcFx3EW0EE/ +XQhFEBYdVUSmDf4y7cKPu3swbgl9GuNCFZYLCsF3qNofEm7E8NneOM6YnUUOKUpT +2yFzUad78+F3pUq4eFz+1jOLruV9Kw0SwVppcNzdaaDWyQrlle1Aq8eLHQ0Thfnu +yjdj8d5PFS3hEwMN1iMMOLWpqQ0Ik4sl6F5+WwDP6eZQuAqucc9VmQadK2pWABpn +dOzKKjm57jOuFNX04gBE7SPtLws= +-----END CERTIFICATE----- Added: apr/apr-util/trunk/test/ssl_data/private.key URL: http://svn.apache.org/viewvc/apr/apr-util/trunk/test/ssl_data/private.key?rev=416919&view=auto ============================================================================== --- apr/apr-util/trunk/test/ssl_data/private.key (added) +++ apr/apr-util/trunk/test/ssl_data/private.key Sat Jun 24 07:07:06 2006 @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA0mAG7FBmigUCAjvvwkp3WnboN4+nJDv+9JtN2FWECIi2sfPa +4uIYXlWtfzXIsDtvivW8nbQ4DreiilX6rngcFt+cxFFHzqOsqvyMUnQnFElHLmwg +PTtMzgqyGl52dsH8LKC24fvziSfLZth03w+/RA4dVYcjz4Gm6t3bheFG0g7SMz9U +4610SefHEag6Zu5OS8SHTuR0yQPiwbKMcZ6T5jqyHh7mPm39jnOlD7yIgD6rwi4m +W0Sau2+XgDIpFXb119PKSko8Z6sHFJXD8vpriWOmVbDgjfTdEksuE672ftFms7f5 +UDoLmR7gNWCXFAgcJ6nbuXI0Uec0ea9Dsww/UQIDAQABAoIBAQC1OZO9LuWmL/oz +An7f2FZIz/XrJwzM4gIXpVHB8qjy0RLQ6Ui9+hcT7Kqw0xw29Hx6MIZzNDS2OOsE +UFzKvx0zdx4M4BgDomu0QCqBPR4NE7MGAo8jMFpRhFU48fcLBsC9kRT6R5jbpjRK +PF0xatdRQPd0Hh5zOzUXTlc1VYM0n48i9ZwwEb4LokftYsbSp15DgddJiXyjR7g3 +38av2iNmjMrbVlEbHKmDMsnPWLtq79bZqT7HwvVPRkazNJS0K3e48e0sg2ix5yt8 +yIJPQpTyA37Xut5DEIBu2lfHrTvgUWccHE60IEHpnnIqMjFSV+pjv7oFw35GESCN +EAKWA+IBAoGBAPhhlWGlt79rJbDNbkcsL+x1u4fkr5ArlQnDnDkdnhAFN+jxz4g1 +7789BncJNEnkTqZRLZQ0cj5afWKlVhnwFvBf9Cube/wiFjUQJzd0t0V+ji+PmGdN +AbSJHHectQYfjzDwEfTBKoj1b5D55suQpBiCBnsMUoaz7qJUzZjfIGoJAoGBANjU +ABLGxCAvwtUnDFUBSmdM+9pl4uGVGySX+F42buy2rQXcwFjW12OS/nqYNIsP+Ei6 +BoSnA2tZv0i6O4nBbw7qkiSMadC8NF/Na1MIc6q4H1q3wkEuKhnGQjxHJEsSw8pm +ASqu19XiZ4nQshRVv/PZr0lKI0BPb6KV17FnGZ0JAoGATVGLP99naLYBAJ2ic5Nk +w7YOj4n3wOhgN67lxb3bg18sfV4w3VT08dIcXhfGaC4i8ZEZoCYHXjOrDncra12a +tm8YQi7flKhDw3bozlGN75sqxdFsftOw8TMxYmasz2ApofFJlahABmxos3enibzX +6C0puUonsnj2kx/U9H6Yx4kCgYBoMNcoLqMn5Et3KaBfaJNcOD39oF/5jjDQ0MXk +X7vFu7JA0ucKyZIOox/twR3ehPoF2H4xWB/ogePNCtB5TZ4USNuY/HAMgaOZNZiQ ++cq7CmbmrM6Hi6tnX0GMvZLPEGFM7N86p3HHsVeXfdVUuC/Y+Y2lZh6yVHmMYvyW +nrhMIQKBgQDpQoczIjZWFRpdCJS88X7IVXtpkr1v7TuRBlcWj2Bs2NPQuNl7/flP +/GDRkNgEi0bJ9pqukGqutRexstCYE123prXhluH2LtPh0TRVK1AZy+Zl9VoZLAWn +m1RIHWUwPIwGhbxV7V2qNiCXpVSSZNwGfptnuIx4mMTUX4rdXMZTaA== +-----END RSA PRIVATE KEY-----