Added SILC Thread Queue API
[silc.git] / lib / silcssh / tests / test_silcssh.c
1 /* SILC SSH2 library tests */
2
3 #include "silc.h"
4
5 int main(int argc, char **argv)
6 {
7   SilcBool success = FALSE;
8   SilcRng rng;
9   SilcPublicKey public_key;
10   SilcPrivateKey private_key;
11   SilcSshPublicKey ssh_pubkey;
12
13   if (argc > 1 && !strcmp(argv[1], "-d")) {
14     silc_log_debug(TRUE);
15     silc_log_quick(TRUE);
16     silc_log_debug_hexdump(TRUE);
17     silc_log_set_debug_string("*ssh*,*pkcs1*,*asn1*,*rsa*,*dsa*");
18   }
19
20   silc_crypto_init(NULL);
21   rng = silc_rng_alloc();
22   silc_rng_init(rng);
23
24   SILC_LOG_DEBUG(("Generate key pair"));
25   silc_ssh_generate_key("dsa", 1024, rng, "foo@example.com",
26                         &public_key, &private_key);
27
28   SILC_LOG_DEBUG(("Set SSH2 public key headers"));
29   ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
30   silc_ssh_public_key_set_type(ssh_pubkey, SILC_SSH_KEY_SSH2);
31   silc_ssh_public_key_add_field(ssh_pubkey, "Comment", "My own key");
32
33   SILC_LOG_DEBUG(("Save public and private key"));
34   if (!silc_pkcs_save_public_key("pubkey.pub", public_key,
35                                  SILC_PKCS_FILE_BASE64))
36     goto err;
37   if (!silc_pkcs_save_private_key("privkey.prv", private_key, "testi", 5,
38                                   SILC_PKCS_FILE_BASE64, rng))
39     goto err;
40   silc_pkcs_public_key_free(public_key);
41   silc_pkcs_private_key_free(private_key);
42
43   SILC_LOG_DEBUG(("Load public key"));
44   if (!silc_pkcs_load_public_key("pubkey.pub", SILC_PKCS_ANY,  &public_key))
45     goto err;
46   ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
47   SILC_LOG_DEBUG(("Subject: '%s'",
48                   silc_ssh_public_key_get_field(ssh_pubkey, "Subject")));
49   SILC_LOG_DEBUG(("Comment: '%s'",
50                   silc_ssh_public_key_get_field(ssh_pubkey, "Comment")));
51
52   SILC_LOG_DEBUG(("Load private key"));
53   if (!silc_pkcs_load_private_key("privkey.prv", "testi", 5,
54                                   SILC_PKCS_ANY, &private_key))
55     goto err;
56   silc_pkcs_private_key_free(private_key);
57
58   SILC_LOG_DEBUG(("Save as OpenSSH public key"));
59   ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
60   silc_ssh_public_key_set_type(ssh_pubkey, SILC_SSH_KEY_OPENSSH);
61   if (!silc_pkcs_save_public_key("pubkey_openssh.pub", public_key,
62                                  SILC_PKCS_FILE_BASE64))
63     goto err;
64   silc_pkcs_public_key_free(public_key);
65
66   SILC_LOG_DEBUG(("Load public key"));
67   if (!silc_pkcs_load_public_key("pubkey_openssh.pub", SILC_PKCS_SSH2,
68                                  &public_key))
69     goto err;
70   silc_pkcs_public_key_free(public_key);
71
72   silc_rng_free(rng);
73   silc_crypto_uninit();
74
75   success = TRUE;
76
77  err:
78   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
79   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
80
81   return success;
82 }