123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /* Copyright (c) 2015-2016, The Tor Project, Inc. */
- /* See LICENSE for licensing information */
- #define CONTROL_PRIVATE
- #include "or.h"
- #include "control.h"
- #include "rendservice.h"
- #include "test.h"
- static void
- test_add_onion_helper_keyarg(void *arg)
- {
- crypto_pk_t *pk = NULL;
- crypto_pk_t *pk2 = NULL;
- const char *key_new_alg = NULL;
- char *key_new_blob = NULL;
- char *err_msg = NULL;
- char *encoded = NULL;
- char *arg_str = NULL;
- (void) arg;
- /* Test explicit RSA1024 key generation. */
- pk = add_onion_helper_keyarg("NEW:RSA1024", 0, &key_new_alg, &key_new_blob,
- &err_msg);
- tt_assert(pk);
- tt_str_op(key_new_alg, OP_EQ, "RSA1024");
- tt_assert(key_new_blob);
- tt_assert(!err_msg);
- /* Test "BEST" key generation (Assumes BEST = RSA1024). */
- crypto_pk_free(pk);
- tor_free(key_new_blob);
- pk = add_onion_helper_keyarg("NEW:BEST", 0, &key_new_alg, &key_new_blob,
- &err_msg);
- tt_assert(pk);
- tt_str_op(key_new_alg, OP_EQ, "RSA1024");
- tt_assert(key_new_blob);
- tt_assert(!err_msg);
- /* Test discarding the private key. */
- crypto_pk_free(pk);
- tor_free(key_new_blob);
- pk = add_onion_helper_keyarg("NEW:BEST", 1, &key_new_alg, &key_new_blob,
- &err_msg);
- tt_assert(pk);
- tt_assert(!key_new_alg);
- tt_assert(!key_new_blob);
- tt_assert(!err_msg);
- /* Test generating a invalid key type. */
- crypto_pk_free(pk);
- pk = add_onion_helper_keyarg("NEW:RSA512", 0, &key_new_alg, &key_new_blob,
- &err_msg);
- tt_assert(!pk);
- tt_assert(!key_new_alg);
- tt_assert(!key_new_blob);
- tt_assert(err_msg);
- /* Test loading a RSA1024 key. */
- tor_free(err_msg);
- pk = pk_generate(0);
- tt_int_op(0, OP_EQ, crypto_pk_base64_encode(pk, &encoded));
- tor_asprintf(&arg_str, "RSA1024:%s", encoded);
- pk2 = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
- &err_msg);
- tt_assert(pk2);
- tt_assert(!key_new_alg);
- tt_assert(!key_new_blob);
- tt_assert(!err_msg);
- tt_assert(crypto_pk_cmp_keys(pk, pk2) == 0);
- /* Test loading a invalid key type. */
- tor_free(arg_str);
- crypto_pk_free(pk); pk = NULL;
- tor_asprintf(&arg_str, "RSA512:%s", encoded);
- pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
- &err_msg);
- tt_assert(!pk);
- tt_assert(!key_new_alg);
- tt_assert(!key_new_blob);
- tt_assert(err_msg);
- /* Test loading a invalid key. */
- tor_free(arg_str);
- crypto_pk_free(pk); pk = NULL;
- tor_free(err_msg);
- encoded[strlen(encoded)/2] = '\0';
- tor_asprintf(&arg_str, "RSA1024:%s", encoded);
- pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
- &err_msg);
- tt_assert(!pk);
- tt_assert(!key_new_alg);
- tt_assert(!key_new_blob);
- tt_assert(err_msg);
- done:
- crypto_pk_free(pk);
- crypto_pk_free(pk2);
- tor_free(key_new_blob);
- tor_free(err_msg);
- tor_free(encoded);
- tor_free(arg_str);
- }
- static void
- test_rend_service_parse_port_config(void *arg)
- {
- const char *sep = ",";
- rend_service_port_config_t *cfg = NULL;
- char *err_msg = NULL;
- (void)arg;
- /* Test "VIRTPORT" only. */
- cfg = rend_service_parse_port_config("80", sep, &err_msg);
- tt_assert(cfg);
- tt_assert(!err_msg);
- /* Test "VIRTPORT,TARGET" (Target is port). */
- rend_service_port_config_free(cfg);
- cfg = rend_service_parse_port_config("80,8080", sep, &err_msg);
- tt_assert(cfg);
- tt_assert(!err_msg);
- /* Test "VIRTPORT,TARGET" (Target is IPv4:port). */
- rend_service_port_config_free(cfg);
- cfg = rend_service_parse_port_config("80,192.0.2.1:8080", sep, &err_msg);
- tt_assert(cfg);
- tt_assert(!err_msg);
- /* Test "VIRTPORT,TARGET" (Target is IPv6:port). */
- rend_service_port_config_free(cfg);
- cfg = rend_service_parse_port_config("80,[2001:db8::1]:8080", sep, &err_msg);
- tt_assert(cfg);
- tt_assert(!err_msg);
- /* XXX: Someone should add tests for AF_UNIX targets if supported. */
- /* Test empty config. */
- rend_service_port_config_free(cfg);
- cfg = rend_service_parse_port_config("", sep, &err_msg);
- tt_assert(!cfg);
- tt_assert(err_msg);
- /* Test invalid port. */
- tor_free(err_msg);
- cfg = rend_service_parse_port_config("90001", sep, &err_msg);
- tt_assert(!cfg);
- tt_assert(err_msg);
- done:
- rend_service_port_config_free(cfg);
- tor_free(err_msg);
- }
- static void
- test_add_onion_helper_clientauth(void *arg)
- {
- rend_authorized_client_t *client = NULL;
- char *err_msg = NULL;
- int created = 0;
- (void)arg;
- /* Test "ClientName" only. */
- client = add_onion_helper_clientauth("alice", &created, &err_msg);
- tt_assert(client);
- tt_assert(created);
- tt_assert(!err_msg);
- rend_authorized_client_free(client);
- /* Test "ClientName:Blob" */
- client = add_onion_helper_clientauth("alice:475hGBHPlq7Mc0cRZitK/B",
- &created, &err_msg);
- tt_assert(client);
- tt_assert(!created);
- tt_assert(!err_msg);
- rend_authorized_client_free(client);
- /* Test invalid client names */
- client = add_onion_helper_clientauth("no*asterisks*allowed", &created,
- &err_msg);
- tt_assert(!client);
- tt_assert(err_msg);
- tor_free(err_msg);
- /* Test invalid auth cookie */
- client = add_onion_helper_clientauth("alice:12345", &created, &err_msg);
- tt_assert(!client);
- tt_assert(err_msg);
- tor_free(err_msg);
- /* Test invalid syntax */
- client = add_onion_helper_clientauth(":475hGBHPlq7Mc0cRZitK/B", &created,
- &err_msg);
- tt_assert(!client);
- tt_assert(err_msg);
- tor_free(err_msg);
- done:
- rend_authorized_client_free(client);
- tor_free(err_msg);
- }
- struct testcase_t controller_tests[] = {
- { "add_onion_helper_keyarg", test_add_onion_helper_keyarg, 0, NULL, NULL },
- { "rend_service_parse_port_config", test_rend_service_parse_port_config, 0,
- NULL, NULL },
- { "add_onion_helper_clientauth", test_add_onion_helper_clientauth, 0, NULL,
- NULL },
- END_OF_TESTCASES
- };
|