diff options
Diffstat (limited to 'src/testcurl/https')
-rw-r--r-- | src/testcurl/https/Makefile.am | 13 | ||||
-rw-r--r-- | src/testcurl/https/mhds_get_test.c | 97 | ||||
-rw-r--r-- | src/testcurl/https/mhds_multi_daemon_test.c | 56 | ||||
-rw-r--r-- | src/testcurl/https/mhds_session_info_test.c | 52 | ||||
-rw-r--r-- | src/testcurl/https/tls_authentication_test.c | 345 | ||||
-rw-r--r-- | src/testcurl/https/tls_test_keys.h | 176 |
6 files changed, 560 insertions, 179 deletions
diff --git a/src/testcurl/https/Makefile.am b/src/testcurl/https/Makefile.am index be5ae633..f9d3f80a 100644 --- a/src/testcurl/https/Makefile.am +++ b/src/testcurl/https/Makefile.am | |||
@@ -7,12 +7,19 @@ AM_CPPFLAGS = \ | |||
7 | 7 | ||
8 | 8 | ||
9 | check_PROGRAMS = \ | 9 | check_PROGRAMS = \ |
10 | mhds_get_test \ | 10 | tls_authentication_test \ |
11 | mhds_session_info_test \ | 11 | mhds_get_test \ |
12 | mhds_multi_daemon_test | 12 | mhds_session_info_test \ |
13 | mhds_multi_daemon_test | ||
13 | 14 | ||
14 | TESTS = $(check_PROGRAMS) | 15 | TESTS = $(check_PROGRAMS) |
15 | 16 | ||
17 | tls_authentication_test_SOURCES = \ | ||
18 | tls_authentication_test.c | ||
19 | tls_authentication_test_LDADD = \ | ||
20 | $(top_builddir)/src/daemon/libmicrohttpd.la \ | ||
21 | @LIBCURL@ | ||
22 | |||
16 | mhds_get_test_SOURCES = \ | 23 | mhds_get_test_SOURCES = \ |
17 | mhds_get_test.c | 24 | mhds_get_test.c |
18 | mhds_get_test_LDADD = \ | 25 | mhds_get_test_LDADD = \ |
diff --git a/src/testcurl/https/mhds_get_test.c b/src/testcurl/https/mhds_get_test.c index ee1ba633..fcbb8706 100644 --- a/src/testcurl/https/mhds_get_test.c +++ b/src/testcurl/https/mhds_get_test.c | |||
@@ -46,53 +46,7 @@ | |||
46 | #define MHD_E_CERT_FILE_CREAT "Error: failed to setup test certificate\n" | 46 | #define MHD_E_CERT_FILE_CREAT "Error: failed to setup test certificate\n" |
47 | #define MHD_E_KEY_FILE_CREAT "Error: failed to setup test certificate\n" | 47 | #define MHD_E_KEY_FILE_CREAT "Error: failed to setup test certificate\n" |
48 | 48 | ||
49 | /* Test Certificate */ | 49 | #include "tls_test_keys.h" |
50 | const char cert_pem[] = | ||
51 | "-----BEGIN CERTIFICATE-----\n" | ||
52 | "MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0\n" | ||
53 | "MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC\n" | ||
54 | "AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X\n" | ||
55 | "fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud\n" | ||
56 | "3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/\n" | ||
57 | "GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv\n" | ||
58 | "rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh\n" | ||
59 | "siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O\n" | ||
60 | "BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2\n" | ||
61 | "RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN\n" | ||
62 | "8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/\n" | ||
63 | "0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe\n" | ||
64 | "JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3\n" | ||
65 | "OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV\n" | ||
66 | "RhZvQx74NQnS6g==\n" "-----END CERTIFICATE-----\n"; | ||
67 | |||
68 | const char key_pem[] = | ||
69 | "-----BEGIN RSA PRIVATE KEY-----\n" | ||
70 | "MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf\n" | ||
71 | "qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I\n" | ||
72 | "niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+\n" | ||
73 | "faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx\n" | ||
74 | "7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ\n" | ||
75 | "vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj\n" | ||
76 | "lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R\n" | ||
77 | "EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l\n" | ||
78 | "/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx\n" | ||
79 | "u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/\n" | ||
80 | "dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo\n" | ||
81 | "32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc\n" | ||
82 | "+JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd\n" | ||
83 | "RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6\n" | ||
84 | "OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob\n" | ||
85 | "XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF\n" | ||
86 | "hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae\n" | ||
87 | "SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b\n" | ||
88 | "AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH\n" | ||
89 | "6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3\n" | ||
90 | "QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG\n" | ||
91 | "7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj\n" | ||
92 | "P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9\n" | ||
93 | "/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC\n" | ||
94 | "eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx\n" | ||
95 | "-----END RSA PRIVATE KEY-----\n"; | ||
96 | 50 | ||
97 | const char *test_file_name = "https_test_file"; | 51 | const char *test_file_name = "https_test_file"; |
98 | const char test_file_data[] = "Hello World\n"; | 52 | const char test_file_data[] = "Hello World\n"; |
@@ -280,8 +234,8 @@ test_secure_get (FILE * test_fd, char *cipher_suite, int proto_version) | |||
280 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | 234 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | |
281 | MHD_USE_DEBUG, 42433, | 235 | MHD_USE_DEBUG, 42433, |
282 | NULL, NULL, &http_ahc, NULL, | 236 | NULL, NULL, &http_ahc, NULL, |
283 | MHD_OPTION_HTTPS_MEM_KEY, key_pem, | 237 | MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem, |
284 | MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END); | 238 | MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem, MHD_OPTION_END); |
285 | 239 | ||
286 | if (d == NULL) | 240 | if (d == NULL) |
287 | { | 241 | { |
@@ -317,8 +271,8 @@ test_file_certificates (FILE * test_fd, char *cipher_suite, int proto_version) | |||
317 | return -1; | 271 | return -1; |
318 | } | 272 | } |
319 | 273 | ||
320 | fwrite (key_pem, strlen (key_pem), sizeof (char), key_fd); | 274 | fwrite (srv_key_pem, strlen (srv_key_pem), sizeof (char), key_fd); |
321 | fwrite (cert_pem, strlen (cert_pem), sizeof (char), cert_fd); | 275 | fwrite (srv_self_signed_cert_pem, strlen (srv_self_signed_cert_pem), sizeof (char), cert_fd); |
322 | fclose (key_fd); | 276 | fclose (key_fd); |
323 | fclose (cert_fd); | 277 | fclose (cert_fd); |
324 | 278 | ||
@@ -353,8 +307,8 @@ test_cipher_option (FILE * test_fd, char *cipher_suite, int proto_version) | |||
353 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | 307 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | |
354 | MHD_USE_DEBUG, 42433, | 308 | MHD_USE_DEBUG, 42433, |
355 | NULL, NULL, &http_ahc, NULL, | 309 | NULL, NULL, &http_ahc, NULL, |
356 | MHD_OPTION_HTTPS_MEM_KEY, key_pem, | 310 | MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem, |
357 | MHD_OPTION_HTTPS_MEM_CERT, cert_pem, | 311 | MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem, |
358 | MHD_OPTION_CIPHER_ALGORITHM, ciper, MHD_OPTION_END); | 312 | MHD_OPTION_CIPHER_ALGORITHM, ciper, MHD_OPTION_END); |
359 | 313 | ||
360 | if (d == NULL) | 314 | if (d == NULL) |
@@ -380,8 +334,8 @@ test_kx_option (FILE * test_fd, char *cipher_suite, int proto_version) | |||
380 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | 334 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | |
381 | MHD_USE_DEBUG, 42433, | 335 | MHD_USE_DEBUG, 42433, |
382 | NULL, NULL, &http_ahc, NULL, | 336 | NULL, NULL, &http_ahc, NULL, |
383 | MHD_OPTION_HTTPS_MEM_KEY, key_pem, | 337 | MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem, |
384 | MHD_OPTION_HTTPS_MEM_CERT, cert_pem, | 338 | MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem, |
385 | MHD_OPTION_KX_PRIORITY, kx, MHD_OPTION_END); | 339 | MHD_OPTION_KX_PRIORITY, kx, MHD_OPTION_END); |
386 | 340 | ||
387 | if (d == NULL) | 341 | if (d == NULL) |
@@ -407,8 +361,8 @@ test_mac_option (FILE * test_fd, char *cipher_suite, int proto_version) | |||
407 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | 361 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | |
408 | MHD_USE_DEBUG, 42433, | 362 | MHD_USE_DEBUG, 42433, |
409 | NULL, NULL, &http_ahc, NULL, | 363 | NULL, NULL, &http_ahc, NULL, |
410 | MHD_OPTION_HTTPS_MEM_KEY, key_pem, | 364 | MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem, |
411 | MHD_OPTION_HTTPS_MEM_CERT, cert_pem, | 365 | MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem, |
412 | MHD_OPTION_MAC_ALGO, mac, MHD_OPTION_END); | 366 | MHD_OPTION_MAC_ALGO, mac, MHD_OPTION_END); |
413 | 367 | ||
414 | if (d == NULL) | 368 | if (d == NULL) |
@@ -470,28 +424,19 @@ main (int argc, char *const *argv) | |||
470 | return -1; | 424 | return -1; |
471 | } | 425 | } |
472 | 426 | ||
473 | //gnutls_global_set_log_level(11); | ||
474 | // errorCount += | ||
475 | // test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1); | ||
476 | // | ||
477 | // errorCount += | ||
478 | // test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1); | ||
479 | // | ||
480 | // sleep(1); | ||
481 | |||
482 | errorCount += | 427 | errorCount += |
483 | test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1); | 428 | test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1); |
484 | 429 | ||
485 | // errorCount += | 430 | errorCount += |
486 | // test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3); | 431 | test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3); |
487 | // errorCount += | 432 | errorCount += |
488 | // test_file_certificates (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1); | 433 | test_file_certificates (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1); |
489 | // | 434 | |
490 | // /* TODO resolve cipher setting issue when compiling against GNU TLS */ | 435 | /* TODO resolve cipher setting issue when compiling against GNU TLS */ |
491 | // errorCount += | 436 | errorCount += |
492 | // test_cipher_option (test_fd, "DES-CBC3-SHA", CURL_SSLVERSION_SSLv3); | 437 | test_cipher_option (test_fd, "DES-CBC3-SHA", CURL_SSLVERSION_SSLv3); |
493 | // errorCount += | 438 | errorCount += |
494 | // test_kx_option (test_fd, "EDH-RSA-DES-CBC3-SHA", CURL_SSLVERSION_SSLv3); | 439 | test_kx_option (test_fd, "EDH-RSA-DES-CBC3-SHA", CURL_SSLVERSION_SSLv3); |
495 | 440 | ||
496 | 441 | ||
497 | if (errorCount != 0) | 442 | if (errorCount != 0) |
diff --git a/src/testcurl/https/mhds_multi_daemon_test.c b/src/testcurl/https/mhds_multi_daemon_test.c index 116b82f6..c808405c 100644 --- a/src/testcurl/https/mhds_multi_daemon_test.c +++ b/src/testcurl/https/mhds_multi_daemon_test.c | |||
@@ -43,53 +43,7 @@ | |||
43 | #define MHD_E_SERVER_INIT "Error: failed to start server\n" | 43 | #define MHD_E_SERVER_INIT "Error: failed to start server\n" |
44 | #define MHD_E_TEST_FILE_CREAT "Error: failed to setup test file\n" | 44 | #define MHD_E_TEST_FILE_CREAT "Error: failed to setup test file\n" |
45 | 45 | ||
46 | /* Test Certificate */ | 46 | #include "tls_test_keys.h" |
47 | const char cert_pem[] = | ||
48 | "-----BEGIN CERTIFICATE-----\n" | ||
49 | "MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0\n" | ||
50 | "MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC\n" | ||
51 | "AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X\n" | ||
52 | "fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud\n" | ||
53 | "3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/\n" | ||
54 | "GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv\n" | ||
55 | "rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh\n" | ||
56 | "siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O\n" | ||
57 | "BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2\n" | ||
58 | "RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN\n" | ||
59 | "8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/\n" | ||
60 | "0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe\n" | ||
61 | "JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3\n" | ||
62 | "OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV\n" | ||
63 | "RhZvQx74NQnS6g==\n" "-----END CERTIFICATE-----\n"; | ||
64 | |||
65 | const char key_pem[] = | ||
66 | "-----BEGIN RSA PRIVATE KEY-----\n" | ||
67 | "MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf\n" | ||
68 | "qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I\n" | ||
69 | "niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+\n" | ||
70 | "faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx\n" | ||
71 | "7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ\n" | ||
72 | "vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj\n" | ||
73 | "lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R\n" | ||
74 | "EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l\n" | ||
75 | "/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx\n" | ||
76 | "u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/\n" | ||
77 | "dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo\n" | ||
78 | "32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc\n" | ||
79 | "+JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd\n" | ||
80 | "RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6\n" | ||
81 | "OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob\n" | ||
82 | "XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF\n" | ||
83 | "hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae\n" | ||
84 | "SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b\n" | ||
85 | "AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH\n" | ||
86 | "6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3\n" | ||
87 | "QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG\n" | ||
88 | "7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj\n" | ||
89 | "P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9\n" | ||
90 | "/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC\n" | ||
91 | "eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx\n" | ||
92 | "-----END RSA PRIVATE KEY-----\n"; | ||
93 | 47 | ||
94 | const char *test_file_name = "https_test_file"; | 48 | const char *test_file_name = "https_test_file"; |
95 | const char test_file_data[] = "Hello World\n"; | 49 | const char test_file_data[] = "Hello World\n"; |
@@ -281,8 +235,8 @@ test_concurent_daemon_pair (FILE * test_fd, char *cipher_suite, | |||
281 | d1 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | 235 | d1 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | |
282 | MHD_USE_DEBUG, 42433, | 236 | MHD_USE_DEBUG, 42433, |
283 | NULL, NULL, &http_ahc, NULL, | 237 | NULL, NULL, &http_ahc, NULL, |
284 | MHD_OPTION_HTTPS_MEM_KEY, key_pem, | 238 | MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem, |
285 | MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END); | 239 | MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem, MHD_OPTION_END); |
286 | 240 | ||
287 | if (d1 == NULL) | 241 | if (d1 == NULL) |
288 | { | 242 | { |
@@ -293,8 +247,8 @@ test_concurent_daemon_pair (FILE * test_fd, char *cipher_suite, | |||
293 | d2 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | 247 | d2 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | |
294 | MHD_USE_DEBUG, 42434, | 248 | MHD_USE_DEBUG, 42434, |
295 | NULL, NULL, &http_ahc, NULL, | 249 | NULL, NULL, &http_ahc, NULL, |
296 | MHD_OPTION_HTTPS_MEM_KEY, key_pem, | 250 | MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem, |
297 | MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END); | 251 | MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem, MHD_OPTION_END); |
298 | 252 | ||
299 | if (d2 == NULL) | 253 | if (d2 == NULL) |
300 | { | 254 | { |
diff --git a/src/testcurl/https/mhds_session_info_test.c b/src/testcurl/https/mhds_session_info_test.c index b707203d..209c5288 100644 --- a/src/testcurl/https/mhds_session_info_test.c +++ b/src/testcurl/https/mhds_session_info_test.c | |||
@@ -38,53 +38,7 @@ | |||
38 | 38 | ||
39 | #define EMPTY_PAGE "<html><head><title>Empty page</title></head><body>Empty page</body></html>" | 39 | #define EMPTY_PAGE "<html><head><title>Empty page</title></head><body>Empty page</body></html>" |
40 | 40 | ||
41 | /* Test Certificate */ | 41 | #include "tls_test_keys.h" |
42 | const char cert_pem[] = | ||
43 | "-----BEGIN CERTIFICATE-----\n" | ||
44 | "MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0\n" | ||
45 | "MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC\n" | ||
46 | "AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X\n" | ||
47 | "fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud\n" | ||
48 | "3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/\n" | ||
49 | "GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv\n" | ||
50 | "rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh\n" | ||
51 | "siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O\n" | ||
52 | "BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2\n" | ||
53 | "RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN\n" | ||
54 | "8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/\n" | ||
55 | "0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe\n" | ||
56 | "JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3\n" | ||
57 | "OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV\n" | ||
58 | "RhZvQx74NQnS6g==\n" "-----END CERTIFICATE-----\n"; | ||
59 | |||
60 | const char key_pem[] = | ||
61 | "-----BEGIN RSA PRIVATE KEY-----\n" | ||
62 | "MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf\n" | ||
63 | "qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I\n" | ||
64 | "niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+\n" | ||
65 | "faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx\n" | ||
66 | "7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ\n" | ||
67 | "vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj\n" | ||
68 | "lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R\n" | ||
69 | "EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l\n" | ||
70 | "/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx\n" | ||
71 | "u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/\n" | ||
72 | "dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo\n" | ||
73 | "32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc\n" | ||
74 | "+JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd\n" | ||
75 | "RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6\n" | ||
76 | "OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob\n" | ||
77 | "XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF\n" | ||
78 | "hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae\n" | ||
79 | "SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b\n" | ||
80 | "AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH\n" | ||
81 | "6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3\n" | ||
82 | "QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG\n" | ||
83 | "7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj\n" | ||
84 | "P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9\n" | ||
85 | "/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC\n" | ||
86 | "eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx\n" | ||
87 | "-----END RSA PRIVATE KEY-----\n"; | ||
88 | 42 | ||
89 | struct MHD_Daemon *d; | 43 | struct MHD_Daemon *d; |
90 | 44 | ||
@@ -176,8 +130,8 @@ test_query_session () | |||
176 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | 130 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | |
177 | MHD_USE_DEBUG, 42433, | 131 | MHD_USE_DEBUG, 42433, |
178 | NULL, NULL, &query_session_ahc, NULL, | 132 | NULL, NULL, &query_session_ahc, NULL, |
179 | MHD_OPTION_HTTPS_MEM_KEY, key_pem, | 133 | MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem, |
180 | MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END); | 134 | MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem, MHD_OPTION_END); |
181 | 135 | ||
182 | if (d == NULL) | 136 | if (d == NULL) |
183 | return 2; | 137 | return 2; |
diff --git a/src/testcurl/https/tls_authentication_test.c b/src/testcurl/https/tls_authentication_test.c new file mode 100644 index 00000000..5c790b26 --- /dev/null +++ b/src/testcurl/https/tls_authentication_test.c | |||
@@ -0,0 +1,345 @@ | |||
1 | /* | ||
2 | This file is part of libmicrohttpd | ||
3 | (C) 2007 Christian Grothoff | ||
4 | |||
5 | libmicrohttpd is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 2, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | libmicrohttpd is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with libmicrohttpd; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file mhds_get_test.c | ||
23 | * @brief Testcase for libmicrohttpd HTTPS GET operations | ||
24 | * @author Sagie Amir | ||
25 | */ | ||
26 | |||
27 | #include "config.h" | ||
28 | #include "plibc.h" | ||
29 | #include "microhttpsd.h" | ||
30 | #include <errno.h> | ||
31 | |||
32 | #include <curl/curl.h> | ||
33 | #include <stdlib.h> | ||
34 | #include <string.h> | ||
35 | #include <time.h> | ||
36 | #include <sys/types.h> | ||
37 | #include <fcntl.h> | ||
38 | #include <unistd.h> | ||
39 | #include <sys/stat.h> | ||
40 | |||
41 | #define PAGE_NOT_FOUND "<html><head><title>File not found</title></head><body>File not found</body></html>" | ||
42 | |||
43 | #define MHD_E_MEM "Error: memory error\n" | ||
44 | #define MHD_E_SERVER_INIT "Error: failed to start server\n" | ||
45 | #define MHD_E_TEST_FILE_CREAT "Error: failed to setup test file\n" | ||
46 | |||
47 | #include "tls_test_keys.h" | ||
48 | |||
49 | const char *ca_cert_file_name = "ca_cert_pem"; | ||
50 | const char *test_file_name = "https_test_file"; | ||
51 | const char test_file_data[] = "Hello World\n"; | ||
52 | |||
53 | struct CBC | ||
54 | { | ||
55 | char *buf; | ||
56 | size_t pos; | ||
57 | size_t size; | ||
58 | }; | ||
59 | |||
60 | static size_t | ||
61 | copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx) | ||
62 | { | ||
63 | struct CBC *cbc = ctx; | ||
64 | |||
65 | if (cbc->pos + size * nmemb > cbc->size) | ||
66 | return 0; /* overflow */ | ||
67 | memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb); | ||
68 | cbc->pos += size * nmemb; | ||
69 | return size * nmemb; | ||
70 | } | ||
71 | |||
72 | static int | ||
73 | file_reader (void *cls, size_t pos, char *buf, int max) | ||
74 | { | ||
75 | FILE *file = cls; | ||
76 | fseek (file, pos, SEEK_SET); | ||
77 | return fread (buf, 1, max, file); | ||
78 | } | ||
79 | |||
80 | /* HTTP access handler call back */ | ||
81 | static int | ||
82 | http_ahc (void *cls, struct MHD_Connection *connection, | ||
83 | const char *url, const char *method, const char *upload_data, | ||
84 | const char *version, unsigned int *upload_data_size, void **ptr) | ||
85 | { | ||
86 | static int aptr; | ||
87 | struct MHD_Response *response; | ||
88 | int ret; | ||
89 | FILE *file; | ||
90 | struct stat buf; | ||
91 | |||
92 | // TODO never respond on first call | ||
93 | if (0 != strcmp (method, MHD_HTTP_METHOD_GET)) | ||
94 | return MHD_NO; /* unexpected method */ | ||
95 | if (&aptr != *ptr) | ||
96 | { | ||
97 | /* do never respond on first call */ | ||
98 | *ptr = &aptr; | ||
99 | return MHD_YES; | ||
100 | } | ||
101 | *ptr = NULL; /* reset when done */ | ||
102 | |||
103 | file = fopen (url, "r"); | ||
104 | if (file == NULL) | ||
105 | { | ||
106 | response = MHD_create_response_from_data (strlen (PAGE_NOT_FOUND), | ||
107 | (void *) PAGE_NOT_FOUND, | ||
108 | MHD_NO, MHD_NO); | ||
109 | ret = MHD_queue_response (connection, MHD_HTTP_NOT_FOUND, response); | ||
110 | MHD_destroy_response (response); | ||
111 | } | ||
112 | else | ||
113 | { | ||
114 | stat (url, &buf); | ||
115 | response = MHD_create_response_from_callback (buf.st_size, 32 * 1024, /* 32k PAGE_NOT_FOUND size */ | ||
116 | &file_reader, file, | ||
117 | (MHD_ContentReaderFreeCallback) | ||
118 | & fclose); | ||
119 | ret = MHD_queue_response (connection, MHD_HTTP_OK, response); | ||
120 | MHD_destroy_response (response); | ||
121 | } | ||
122 | return ret; | ||
123 | } | ||
124 | |||
125 | /* | ||
126 | * test HTTPS transfer | ||
127 | * @param test_fd: file to attempt transfering | ||
128 | */ | ||
129 | static int | ||
130 | test_daemon_get (FILE * test_fd, char *cipher_suite, int proto_version) | ||
131 | { | ||
132 | CURL *c; | ||
133 | struct CBC cbc; | ||
134 | CURLcode errornum; | ||
135 | char *doc_path; | ||
136 | char url[255]; | ||
137 | struct stat statb; | ||
138 | |||
139 | stat (test_file_name, &statb); | ||
140 | |||
141 | int len = statb.st_size; | ||
142 | |||
143 | /* used to memcmp local copy & deamon supplied copy */ | ||
144 | unsigned char *mem_test_file_local; | ||
145 | |||
146 | /* setup test file path, url */ | ||
147 | doc_path = get_current_dir_name (); | ||
148 | |||
149 | if (NULL == (mem_test_file_local = malloc (len))) | ||
150 | { | ||
151 | fclose (test_fd); | ||
152 | fprintf (stderr, MHD_E_MEM); | ||
153 | return -1; | ||
154 | } | ||
155 | |||
156 | fseek (test_fd, 0, SEEK_SET); | ||
157 | if (fread (mem_test_file_local, sizeof (char), len, test_fd) != len) | ||
158 | { | ||
159 | fclose (test_fd); | ||
160 | fprintf (stderr, "Error: failed to read test file. %s\n", | ||
161 | strerror (errno)); | ||
162 | return -1; | ||
163 | } | ||
164 | |||
165 | if (NULL == (cbc.buf = malloc (sizeof (char) * len))) | ||
166 | { | ||
167 | fclose (test_fd); | ||
168 | fprintf (stderr, MHD_E_MEM); | ||
169 | return -1; | ||
170 | } | ||
171 | cbc.size = len; | ||
172 | cbc.pos = 0; | ||
173 | |||
174 | /* construct url - this might use doc_path */ | ||
175 | sprintf (url, "%s%s/%s", "https://localhost:42433", | ||
176 | doc_path, test_file_name); | ||
177 | |||
178 | c = curl_easy_init (); | ||
179 | #ifdef DEBUG | ||
180 | curl_easy_setopt (c, CURLOPT_VERBOSE, 1); | ||
181 | #endif | ||
182 | curl_easy_setopt (c, CURLOPT_URL, url); | ||
183 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); | ||
184 | curl_easy_setopt (c, CURLOPT_TIMEOUT, 10L); | ||
185 | curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L); | ||
186 | curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); | ||
187 | curl_easy_setopt (c, CURLOPT_FILE, &cbc); | ||
188 | |||
189 | /* TLS options */ | ||
190 | curl_easy_setopt (c, CURLOPT_SSLVERSION, proto_version); | ||
191 | //curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, cipher_suite); | ||
192 | |||
193 | /* currently skip any peer authentication */ | ||
194 | curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 1); | ||
195 | curl_easy_setopt (c, CURLOPT_CAINFO, ca_cert_file_name); | ||
196 | |||
197 | curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0); | ||
198 | |||
199 | curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); | ||
200 | |||
201 | /* NOTE: use of CONNECTTIMEOUT without also | ||
202 | setting NOSIGNAL results in really weird | ||
203 | crashes on my system! */ | ||
204 | curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); | ||
205 | if (CURLE_OK != (errornum = curl_easy_perform (c))) | ||
206 | { | ||
207 | fprintf (stderr, "curl_easy_perform failed: `%s'\n", | ||
208 | curl_easy_strerror (errornum)); | ||
209 | curl_easy_cleanup (c); | ||
210 | return errornum; | ||
211 | } | ||
212 | |||
213 | curl_easy_cleanup (c); | ||
214 | |||
215 | if (memcmp (cbc.buf, mem_test_file_local, len) != 0) | ||
216 | { | ||
217 | fprintf (stderr, "Error: local file & received file differ.\n"); | ||
218 | free (cbc.buf); | ||
219 | free (mem_test_file_local); | ||
220 | return -1; | ||
221 | } | ||
222 | |||
223 | free (mem_test_file_local); | ||
224 | free (cbc.buf); | ||
225 | free (doc_path); | ||
226 | return 0; | ||
227 | } | ||
228 | |||
229 | /* perform a HTTP GET request via SSL/TLS */ | ||
230 | int | ||
231 | test_secure_get (FILE * test_fd, char *cipher_suite, int proto_version) | ||
232 | { | ||
233 | int ret; | ||
234 | struct MHD_Daemon *d; | ||
235 | |||
236 | int kx[] = { GNUTLS_KX_DHE_RSA, 0 }; | ||
237 | |||
238 | d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | | ||
239 | MHD_USE_DEBUG, 42433, | ||
240 | NULL, NULL, &http_ahc, NULL, | ||
241 | MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem, | ||
242 | MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem, | ||
243 | MHD_OPTION_KX_PRIORITY, kx, MHD_OPTION_END); | ||
244 | |||
245 | if (d == NULL) | ||
246 | { | ||
247 | fprintf (stderr, MHD_E_SERVER_INIT); | ||
248 | return -1; | ||
249 | } | ||
250 | |||
251 | ret = test_daemon_get (test_fd, cipher_suite, proto_version); | ||
252 | MHD_stop_daemon (d); | ||
253 | return ret; | ||
254 | } | ||
255 | |||
256 | /* setup a temporary transfer test file */ | ||
257 | FILE * | ||
258 | setupTestFile () | ||
259 | { | ||
260 | FILE *test_fd; | ||
261 | |||
262 | if (NULL == (test_fd = fopen (test_file_name, "w+"))) | ||
263 | { | ||
264 | fprintf (stderr, "Error: failed to open `%s': %s\n", | ||
265 | test_file_name, strerror (errno)); | ||
266 | return NULL; | ||
267 | } | ||
268 | if (fwrite (test_file_data, sizeof (char), strlen (test_file_data), test_fd) | ||
269 | != strlen (test_file_data)) | ||
270 | { | ||
271 | fprintf (stderr, "Error: failed to write `%s. %s'\n", | ||
272 | test_file_name, strerror (errno)); | ||
273 | return NULL; | ||
274 | } | ||
275 | if (fflush (test_fd)) | ||
276 | { | ||
277 | fprintf (stderr, "Error: failed to flush test file stream. %s\n", | ||
278 | strerror (errno)); | ||
279 | return NULL; | ||
280 | } | ||
281 | |||
282 | return test_fd; | ||
283 | } | ||
284 | |||
285 | FILE * | ||
286 | setup_ca_cert () | ||
287 | { | ||
288 | FILE *fd; | ||
289 | |||
290 | if (NULL == (fd = fopen (ca_cert_file_name, "w+"))) | ||
291 | { | ||
292 | fprintf (stderr, "Error: failed to open `%s': %s\n", | ||
293 | ca_cert_file_name, strerror (errno)); | ||
294 | return NULL; | ||
295 | } | ||
296 | if (fwrite (ca_cert_pem, sizeof (char), strlen (ca_cert_pem), fd) | ||
297 | != strlen (ca_cert_pem)) | ||
298 | { | ||
299 | fprintf (stderr, "Error: failed to write `%s. %s'\n", | ||
300 | ca_cert_file_name, strerror (errno)); | ||
301 | return NULL; | ||
302 | } | ||
303 | if (fflush (fd)) | ||
304 | { | ||
305 | fprintf (stderr, "Error: failed to flush ca cert file stream. %s\n", | ||
306 | strerror (errno)); | ||
307 | return NULL; | ||
308 | } | ||
309 | |||
310 | return fd; | ||
311 | } | ||
312 | |||
313 | int | ||
314 | main (int argc, char *const *argv) | ||
315 | { | ||
316 | FILE *test_fd; | ||
317 | unsigned int errorCount = 0; | ||
318 | |||
319 | if ((test_fd = setupTestFile ()) == NULL) | ||
320 | { | ||
321 | fprintf (stderr, MHD_E_TEST_FILE_CREAT); | ||
322 | return -1; | ||
323 | } | ||
324 | |||
325 | setup_ca_cert (); | ||
326 | |||
327 | if (0 != curl_global_init (CURL_GLOBAL_ALL)) | ||
328 | { | ||
329 | fprintf (stderr, "Error (code: %u)\n", errorCount); | ||
330 | return -1; | ||
331 | } | ||
332 | |||
333 | errorCount += | ||
334 | test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1); | ||
335 | |||
336 | if (errorCount != 0) | ||
337 | fprintf (stderr, "Error (code: %u)\n", errorCount); | ||
338 | |||
339 | curl_global_cleanup (); | ||
340 | fclose (test_fd); | ||
341 | |||
342 | remove (test_file_name); | ||
343 | remove (ca_cert_file_name); | ||
344 | return errorCount != 0; | ||
345 | } | ||
diff --git a/src/testcurl/https/tls_test_keys.h b/src/testcurl/https/tls_test_keys.h new file mode 100644 index 00000000..aca0639c --- /dev/null +++ b/src/testcurl/https/tls_test_keys.h | |||
@@ -0,0 +1,176 @@ | |||
1 | /* | ||
2 | This file is part of libmicrohttpd | ||
3 | (C) 2006, 2007, 2008 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | This library is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the GNU Lesser General Public | ||
7 | License as published by the Free Software Foundation; either | ||
8 | version 2.1 of the License, or (at your option) any later version. | ||
9 | |||
10 | This library is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | Lesser General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU Lesser General Public | ||
16 | License along with this library; if not, write to the Free Software | ||
17 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | |||
20 | #ifndef MHD_TLS_TEST_KEYS_H | ||
21 | #define MHD_TLS_TEST_KEYS_H | ||
22 | |||
23 | /* Test Certificates */ | ||
24 | |||
25 | /* Certificate Authority key */ | ||
26 | const char ca_key_pem[] = | ||
27 | "-----BEGIN RSA PRIVATE KEY-----\n" | ||
28 | "MIIEpAIBAAKCAQEA3vzPUd2yRjeHy9Yi22uX1vGnUPmB5zS+77/B9LubTqnNJ9eB\n" | ||
29 | "jiMegQJsJWFQT/CW8FurYiSMXIuTBirZX7NO6/rlcqifdfKLotSUuXLu5DBvMLCv\n" | ||
30 | "nQ73wCIdCJoVyJbRN0ExHsyGwCDCxaHuY8FlkIsfYo17SNmJNaMSUqdoAZoelmbq\n" | ||
31 | "r9oVciRCQGgrmwEJdPj7EAofWSudV77y85j5rV/t51eNy5liS2qXnoFEmeqTuBo1\n" | ||
32 | "1cSmRbv5dkCHbx+youLyZG39KxB0MZ124Na3qbUY41BPNj1XBljyAoHyY0J1iDqS\n" | ||
33 | "0Zo+njEW6vRbmSMkrA1kH45+alN50X11mSgfoQIDAQABAoIBAAmLu+4Ushpdi5Sd\n" | ||
34 | "P1cidjDFXfDaao5I2LTroghpnNyfaiT+zbj1jctu7K1luuX+Lh7+ZKIGH6RhVP8g\n" | ||
35 | "R9eYBeyWHDsWJwPqCQJkrHR7LCkEfgkRAkaUZsSgzTqCWqUAeFa/xaQcdDcOu/nR\n" | ||
36 | "DKMUexYmz4ZU+VJxPhWHzGuxhxM85uJOPK3rCaYCJoo1vMpF7MeFFvVljhSdyht5\n" | ||
37 | "KD0w6qP0Y+vDe4cD/4W3wq82qXCFPA5oImjSJveEIJumPIjOyLFF+9p9V6hzg8Em\n" | ||
38 | "48cpXcV3SsbaqTr6mSQl6b15zVwWq4CCt4mkeu6vK9PGzdnBiUmWaSXfprDwHaB3\n" | ||
39 | "t1N0GRECgYEA5gP0gmZQDDJTlaGK9Z6pWiwpMBUoYcnqvCn8MQ5uPQn+KZir19AJ\n" | ||
40 | "PkVLfWT9Dcaf3+2d0kBBgGYFWL+wK8DgrqALiLJfM6gP3Ts7G6Bis4GFdWY9aUnT\n" | ||
41 | "6ZhRYdzetVArhTZBRKh8ERQNPy4TmzWDtjVUAfezUcvXqOjl9H5Q01ECgYEA+C2b\n" | ||
42 | "i05t/RYcU0eFVYK8Yfl3jZJiopMdYwXCSCO21Ag2i0fjKC89rCmLlliffSSuDtNk\n" | ||
43 | "xFsaSjns8Vyl7sjMcAOfsGokiUIcFnK/LyVoc3ie2NCiLVzw6zKK8lJ4bhn4afnv\n" | ||
44 | "N9RKXP76emb8MaZroKlKkhMR8f2BvzXbv2NyU1ECgYEAtJeAXu1zhc/xnjaiQqxa\n" | ||
45 | "rMilYfIKrZR571hLgDyjQttYqVIMAbp9t11yorYqlKlRFuCaG9yFUQlIw2BlMkUS\n" | ||
46 | "YyiXRbE+W/Fk2z7I7qzjMarMnNsz9jmX3vzPULW4ScTzFnj9j6l1F3eV2vgTPrYq\n" | ||
47 | "fmGqXo0bRmp0HVMWUPrn/LECgYEA3qHTQkHGS16VZGPpiY8xPVbUV8z07NC6cQVO\n" | ||
48 | "hvZ64XTIsWN4tKjEU3glf2bbFCFef3BFmhv71pBmLRMmy7GYK/gkPdbKFdOXbM/d\n" | ||
49 | "EAcnz0ZqgSeQBM+2U9dQbBdtb5+eiDsszNGFMC2QN1PBcyzOqh6UBbxTwdjfls9S\n" | ||
50 | "5Trp6TECgYAzCZmmJuBW6WDK5ttOF/do6r0aurHr2mOr8oYxmBkhI3wphyUMNuaH\n" | ||
51 | "rUk+R8LAmC1U4MbvvqoZH27xe+xd25mn6whitgZBH3DIetN7myDJep8wEG6aW4R5\n" | ||
52 | "S82zk+LQJ7LTa1nPVPMS10qUXSH9cjShhszfeRIQM+lWbPoaEuo3yQ==\n" | ||
53 | "-----END RSA PRIVATE KEY-----\n"; | ||
54 | |||
55 | /* Certificate Authority cert */ | ||
56 | const char ca_cert_pem[] = | ||
57 | "-----BEGIN CERTIFICATE-----\n" | ||
58 | "MIIC6DCCAdKgAwIBAgIESHv2uDALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n" | ||
59 | "dF9jYV9jZXJ0MB4XDTA4MDcxNTAxMDA0MFoXDTA5MDcxNTAxMDA0MFowFzEVMBMG\n" | ||
60 | "A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n" | ||
61 | "3vzPUd2yRjeHy9Yi22uX1vGnUPmB5zS+77/B9LubTqnNJ9eBjiMegQJsJWFQT/CW\n" | ||
62 | "8FurYiSMXIuTBirZX7NO6/rlcqifdfKLotSUuXLu5DBvMLCvnQ73wCIdCJoVyJbR\n" | ||
63 | "N0ExHsyGwCDCxaHuY8FlkIsfYo17SNmJNaMSUqdoAZoelmbqr9oVciRCQGgrmwEJ\n" | ||
64 | "dPj7EAofWSudV77y85j5rV/t51eNy5liS2qXnoFEmeqTuBo11cSmRbv5dkCHbx+y\n" | ||
65 | "ouLyZG39KxB0MZ124Na3qbUY41BPNj1XBljyAoHyY0J1iDqS0Zo+njEW6vRbmSMk\n" | ||
66 | "rA1kH45+alN50X11mSgfoQIDAQABo0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud\n" | ||
67 | "DwEB/wQFAwMHBAAwHQYDVR0OBBYEFB3x03+3Qa2SDwRF6RkNcjg9zRHJMAsGCSqG\n" | ||
68 | "SIb3DQEBBQOCAQEAjPoKMve8aqtL8fFXfSkYwLJUwuTG4E4mX804O5dsdvOEWR2/\n" | ||
69 | "UQm5IDiAZ3fnHE8zh0C1Kg+dWnCv0i1Q5CYZJ5sSY3tKikG5UBPVJGV1tT0vDfmJ\n" | ||
70 | "X7b52y35eN8qe5DsdyDAcF2GNRBU8opkLkyXb8U095AQiCHzTPpiesZd5phJlMPm\n" | ||
71 | "AJaB4VtHAykDMeKd7HJAeelRi/1dP8xsYNc1z67cSrkt2f+B0WAyuAUBBr1NdYmS\n" | ||
72 | "duegptXCh8OeGEL/v6mbIWoszDbOjk/0zwsgW8BD/eXaZgPPEUtmHizYPIRPdeW1\n" | ||
73 | "MSCwccjl/XjDkIoN8kKss4Ftt+Wyajjjxeh6YA==\n" "-----END CERTIFICATE-----\n"; | ||
74 | |||
75 | /* test server CA signed certificates */ | ||
76 | const char srv_signed_cert_pem[] = | ||
77 | "-----BEGIN CERTIFICATE-----\n" | ||
78 | "MIIDHzCCAgmgAwIBAgIESHv6kTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n" | ||
79 | "dF9jYV9jZXJ0MB4XDTA4MDcxNTAxMTcwNVoXDTA5MDcxNTAxMTcwNVowGzEZMBcG\n" | ||
80 | "A1UEAxMQdGVzdF9zZXJ2ZXJfY2VydDCCAR8wCwYJKoZIhvcNAQEBA4IBDgAwggEJ\n" | ||
81 | "AoIBAJIY2+Wn+TRHIJ92tpNvCIE6FOsGclRxOFJwK0T6k3SK68LwQ9PkQTTB/DJu\n" | ||
82 | "+hU2u6w6lt1+Q8PHTDMLtnkEeXnxPn1uQZnnMEBcHAGY1U99iJh0At68AyoG7nkb\n" | ||
83 | "AzgzxxjMom+dEhGEFHOg9JKmJp138RzIWcMN2l4pKIryiBUh5AWt/7uqtA+9fQMq\n" | ||
84 | "nOeO8OU5FM3eKevl3VSZ6usptbePbUDNs5uEmG+PTR0bc2rYgGeC4+wExWcJ+CAq\n" | ||
85 | "voNVPno//MoMeJjWgXqF4wTBFdfsewngkflwRDPuZuLsxVrKnIx6jsBKIMuhVuxT\n" | ||
86 | "66vnEmuR34TUIzLlVPcJ5wmby2UCAwEAAaN2MHQwDAYDVR0TAQH/BAIwADATBgNV\n" | ||
87 | "HSUEDDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDByAAMB0GA1UdDgQWBBSHX75y\n" | ||
88 | "gpEjstognUu4If50qWXQaDAfBgNVHSMEGDAWgBQd8dN/t0Gtkg8ERekZDXI4Pc0R\n" | ||
89 | "yTALBgkqhkiG9w0BAQUDggEBAF56YMCdp0C88ZF9yaXJZ4PMuTpW83Mhg5Ar0a9H\n" | ||
90 | "DasF58p8eeRLhsTJPi+NpFSMTujEabGS3+8l6Iu5F5stFgvbvnjLHdYu2Pjakos8\n" | ||
91 | "NjZCCkuEmIO4PLd6h5ToOZf3ZXNHmFjRTtKHQKNrYizlHlgnEDcUbU4gB5KOg3jU\n" | ||
92 | "rv/Mtar+5LRK7KvByswp26nRH1ijGV23sy9StK7tV/cJPe/UkxyUfSQwUmQzzWe6\n" | ||
93 | "QGAQtppUjGabWXjuLuOUyiG5LReYC5ri7XZuVekCAfUHbOdPYTHPczvpKBnUyKIv\n" | ||
94 | "BRKOarmNfNc3w5G7Ast3jNOE2JfiJ8+x9+rMWI01PlWVYvQ=\n" | ||
95 | "-----END CERTIFICATE-----\n"; | ||
96 | |||
97 | /* test server key */ | ||
98 | const char srv_signed_key_pem[] = | ||
99 | "-----BEGIN RSA PRIVATE KEY-----\n" | ||
100 | "MIIEpAIBAAKCAQEAkhjb5af5NEcgn3a2k28IgToU6wZyVHE4UnArRPqTdIrrwvBD\n" | ||
101 | "0+RBNMH8Mm76FTa7rDqW3X5Dw8dMMwu2eQR5efE+fW5BmecwQFwcAZjVT32ImHQC\n" | ||
102 | "3rwDKgbueRsDODPHGMyib50SEYQUc6D0kqYmnXfxHMhZww3aXikoivKIFSHkBa3/\n" | ||
103 | "u6q0D719Ayqc547w5TkUzd4p6+XdVJnq6ym1t49tQM2zm4SYb49NHRtzatiAZ4Lj\n" | ||
104 | "7ATFZwn4ICq+g1U+ej/8ygx4mNaBeoXjBMEV1+x7CeCR+XBEM+5m4uzFWsqcjHqO\n" | ||
105 | "wEogy6FW7FPrq+cSa5HfhNQjMuVU9wnnCZvLZQIDAQABAoIBABISPh0FrocfZzMi\n" | ||
106 | "YYoSGWi2sQCzTvAQAyn7UvbY0eWAC5KU2qb6nHA0sIfif0+hcgxnQOML68DrRYso\n" | ||
107 | "3zzP52DEjPjB6x5o4OiNHC+8YmJPQlatPu+jLPcFXXkgdMD+cpmoMk2BDcuZ3VfC\n" | ||
108 | "KI59O9iNjgcD50p/y6uLBsdNIbUPSMe8ONWT7f5DN/DqEL+3tVZaRAOL+C8iKYf4\n" | ||
109 | "EPI5z6gOyL0aEpulbMKc0YoZZ2kDmu5IyMLgkF3DJV440Y/6IGan88ZSjk6i/d7f\n" | ||
110 | "ciKVtzIIbr5ubbuGe3htphTpRP0aA5WuVTzHrKk83/u3hG1RFv1q/cRD28tVUIII\n" | ||
111 | "0pcwLmECgYEAwMdaR5Y2NqBk/fOvU/oCDAQ6w8jmIa4zMxskvq9Pr753jhT13j+T\n" | ||
112 | "eQ1A590PF4PPvGFTqJ2vl3kj6JT5dzu7mGKoJLFsnttpw+0NYUgp0waPPZx010pp\n" | ||
113 | "QGeyQ/cPsZEZkCehh9c5CsfO1YpjKLV/wdpBQ2xAnkV5dfFmzlzLOTECgYEAwgJf\n" | ||
114 | "gxlR9Jgv7Qg/6Prs+SarqT4xDsJKKbD7wH2jveGFXVnkYTPVstwLCAus4LaLFKZ9\n" | ||
115 | "1POQDUgO24E1GzuL7mqSuvymdl5gZICfpkHstOAfpqep96pUv4aI9BY/g5l4Lvep\n" | ||
116 | "9c52tgQGwz0qgBUJBi6AvzxqRkBsxrXjX2m7KHUCgYEAtjx94ohkTXWIouy2xFrl\n" | ||
117 | "jnh9GNGUgyhK7Dfvn3bYjJkwKZc06dkNzvQxdD5r4t3PBhS3YgFWmYmB4X7a6NUF\n" | ||
118 | "vMMekjlLJkziib1Q1bLDHuLni+WYKmEEaEbepRMrub8h/D0KnQBewwspQoJkxHn3\n" | ||
119 | "AMkSwurVlwi0DkOa3N+pmTECgYBXyCUZN1qqtjVxJXttWiPg88tWD2q5B9XwmUC/\n" | ||
120 | "rtlor+LdAzBffsmhXQiswkOdhVrWpCJpOS8jo0f9r6+su7ury5LKgkh7ZGZu8vfJ\n" | ||
121 | "jSiiCoqnqFMyWWJxKllLP8nLLKSBc9P2AU4bOyUoL8PMIjhsEJx2asqXMM1G98OC\n" | ||
122 | "R1/EhQKBgQCmSkabsj8u5iEScicyJU87/sVkRIRE0GhjU8uuvcTe+dRiHuj2CENx\n" | ||
123 | "hh967E0nUCiJzx3is0/nYByDles9W4BLEA8JSuM5r6E7UifHR4XwIi2tQcNhCWIu\n" | ||
124 | "vGbfvxwqcm7Uj3XHb1GbYK5nnaRNailoJ7iyqHWxB1Q3iFIiMipcfg==\n" | ||
125 | "-----END RSA PRIVATE KEY-----\n"; | ||
126 | |||
127 | /* test server self signed certificates */ | ||
128 | const char srv_self_signed_cert_pem[] = | ||
129 | "-----BEGIN CERTIFICATE-----\n" | ||
130 | "MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0\n" | ||
131 | "MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC\n" | ||
132 | "AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X\n" | ||
133 | "fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud\n" | ||
134 | "3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/\n" | ||
135 | "GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv\n" | ||
136 | "rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh\n" | ||
137 | "siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O\n" | ||
138 | "BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2\n" | ||
139 | "RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN\n" | ||
140 | "8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/\n" | ||
141 | "0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe\n" | ||
142 | "JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3\n" | ||
143 | "OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV\n" | ||
144 | "RhZvQx74NQnS6g==\n" "-----END CERTIFICATE-----\n"; | ||
145 | |||
146 | /* test server key */ | ||
147 | const char srv_key_pem[] = | ||
148 | "-----BEGIN RSA PRIVATE KEY-----\n" | ||
149 | "MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf\n" | ||
150 | "qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I\n" | ||
151 | "niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+\n" | ||
152 | "faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx\n" | ||
153 | "7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ\n" | ||
154 | "vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj\n" | ||
155 | "lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R\n" | ||
156 | "EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l\n" | ||
157 | "/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx\n" | ||
158 | "u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/\n" | ||
159 | "dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo\n" | ||
160 | "32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc\n" | ||
161 | "+JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd\n" | ||
162 | "RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6\n" | ||
163 | "OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob\n" | ||
164 | "XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF\n" | ||
165 | "hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae\n" | ||
166 | "SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b\n" | ||
167 | "AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH\n" | ||
168 | "6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3\n" | ||
169 | "QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG\n" | ||
170 | "7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj\n" | ||
171 | "P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9\n" | ||
172 | "/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC\n" | ||
173 | "eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx\n" | ||
174 | "-----END RSA PRIVATE KEY-----\n"; | ||
175 | |||
176 | #endif | ||