Added SILC Server library.
[silc.git] / lib / silcskr / tests / test_silcskr.c
1 /* SILC SKR tests */
2
3 #include "silc.h"
4 #include "silcskr.h"
5
6 SilcBool found = TRUE;
7
8 static void skr_found(SilcSKR skr, SilcSKRFind find, SilcSKRStatus status,
9                       SilcDList results, void *context)
10 {
11   SilcSKRKey key;
12
13   SILC_LOG_DEBUG(("Result status %d", status));
14   if (status & SILC_SKR_OK) {
15     SILC_LOG_DEBUG(("Found %d keys", silc_dlist_count(results)));
16
17     while ((key = silc_dlist_get(results)) != SILC_LIST_END)
18       SILC_LOG_DEBUG(("Key: %s", ((SilcPublicKey)key->key)->identifier));
19
20     silc_dlist_uninit(results);
21     found = TRUE;
22   } else
23     found = FALSE;
24 }
25
26 int main(int argc, char **argv)
27 {
28   SilcBool success = FALSE;
29   SilcSchedule schedule;
30   SilcSKR skr;
31   SilcSKRFind find;
32   SilcPublicKey pk;
33
34   if (argc > 1 && !strcmp(argv[1], "-d")) {
35     silc_log_debug(TRUE);
36     silc_log_debug_hexdump(TRUE);
37     silc_log_set_debug_string("*skr*");
38   }
39
40   SILC_LOG_DEBUG(("Allocating scheduler"));
41   schedule = silc_schedule_init(0, NULL);
42
43   SILC_LOG_DEBUG(("Allocating SKR"));
44   skr = silc_skr_alloc(schedule);
45   if (!skr)
46     goto err;
47
48   SILC_LOG_DEBUG(("Adding public key to SKR"));
49   pk = silc_calloc(1, sizeof(*pk));
50   pk->len = 1;
51   pk->pk_type = SILC_PKCS_SILC;
52   pk->name = strdup("rsa");
53   pk->pk = strdup("  ");
54   pk->pk_len = 2;
55   pk->identifier = silc_pkcs_encode_identifier("foo", "foo.com",
56                                                "Foo T. Bar", "foo@foo.com",
57                                                "ORG", "FI");
58   silc_skr_add_public_key(skr, pk, 0, NULL);
59
60   SILC_LOG_DEBUG(("Adding public key to SKR"));
61   pk = silc_calloc(1, sizeof(*pk));
62   pk->len = 1;
63   pk->pk_type = SILC_PKCS_SILC;
64   pk->name = strdup("rsa");
65   pk->pk = strdup("  ");
66   pk->pk_len = 2;
67   pk->identifier = silc_pkcs_encode_identifier("bar", "bar.com",
68                                                "Bar T. Bar", "bar@foo.com",
69                                                "ORG", "FI");
70   silc_skr_add_public_key(skr, pk, SILC_SKR_USAGE_IDENTIFICATION |
71                           SILC_SKR_USAGE_AUTH, NULL);
72
73   SILC_LOG_DEBUG(("Attempting to add key twice"));
74   if (silc_skr_add_public_key(skr, pk, 0, NULL) == SILC_SKR_OK) {
75     SILC_LOG_DEBUG(("Adding key twice not detected"));
76     goto err;
77   }
78
79   SILC_LOG_DEBUG(("Finding public key by email"));
80   find = silc_skr_find_alloc();
81   silc_skr_find_set_email(find, "foo@foo.com");
82   silc_skr_find(skr, find, skr_found, NULL);
83   silc_skr_find_free(find);
84   if (!found)
85     goto err;
86
87   SILC_LOG_DEBUG(("Finding public key by country"));
88   find = silc_skr_find_alloc();
89   silc_skr_find_set_country(find, "FI");
90   silc_skr_find(skr, find, skr_found, NULL);
91   silc_skr_find_free(find);
92   if (!found)
93     goto err;
94
95   SILC_LOG_DEBUG(("Finding public key by country, ORG and hostname"));
96   find = silc_skr_find_alloc();
97   silc_skr_find_set_country(find, "FI");
98   silc_skr_find_set_org(find, "ORG");
99   silc_skr_find_set_host(find, "foo.com");
100   silc_skr_find(skr, find, skr_found, NULL);
101   silc_skr_find_free(find);
102   if (!found)
103     goto err;
104
105   SILC_LOG_DEBUG(("Finding public key by SILC public key"));
106   silc_skr_find_silc(skr, pk, skr_found, NULL);
107   if (!found)
108     goto err;
109
110   SILC_LOG_DEBUG(("Finding public key by country and usage (must not find)"));
111   find = silc_skr_find_alloc();
112   silc_skr_find_set_country(find, "FI");
113   silc_skr_find_set_usage(find, SILC_SKR_USAGE_ENC);
114   silc_skr_find(skr, find, skr_found, NULL);
115   silc_skr_find_free(find);
116   if (found)
117     goto err;
118
119   SILC_LOG_DEBUG(("Finding public key by country and usage"));
120   find = silc_skr_find_alloc();
121   silc_skr_find_set_country(find, "FI");
122   silc_skr_find_set_usage(find, SILC_SKR_USAGE_IDENTIFICATION);
123   silc_skr_find(skr, find, skr_found, NULL);
124   silc_skr_find_free(find);
125   if (!found)
126     goto err;
127
128   silc_skr_free(skr);
129   silc_schedule_uninit(schedule);
130
131   success = TRUE;
132
133  err:
134   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
135   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
136
137   return success;
138 }