Added SILC SSH2 library providing support for SSH2 public and
[silc.git] / lib / silcssh / tests / test_silcssh.c
diff --git a/lib/silcssh/tests/test_silcssh.c b/lib/silcssh/tests/test_silcssh.c
new file mode 100644 (file)
index 0000000..7962dc1
--- /dev/null
@@ -0,0 +1,76 @@
+/* SILC SSH2 library tests */
+
+#include "silc.h"
+
+int main(int argc, char **argv)
+{
+  SilcBool success = FALSE;
+  SilcRng rng;
+  SilcPublicKey public_key;
+  SilcPrivateKey private_key;
+  SilcSshPublicKey ssh_pubkey;
+
+  if (argc > 1 && !strcmp(argv[1], "-d")) {
+    silc_log_debug(TRUE);
+    silc_log_quick(TRUE);
+    silc_log_debug_hexdump(TRUE);
+    silc_log_set_debug_string("*ssh*,*pkcs1*,*asn1*,*rsa*,*dsa*");
+  }
+
+  silc_crypto_init(NULL);
+  rng = silc_rng_alloc();
+  silc_rng_init(rng);
+
+  SILC_LOG_DEBUG(("Generate key pair"));
+  silc_ssh_generate_key("dsa", 1024, rng, &public_key, &private_key);
+
+  SILC_LOG_DEBUG(("Set SSH2 public key headers"));
+  ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
+  silc_ssh_public_key_set_type(ssh_pubkey, SILC_SSH_KEY_SSH2);
+  silc_ssh_public_key_add_field(ssh_pubkey, "Subject", "foo@example.com");
+  silc_ssh_public_key_add_field(ssh_pubkey, "Comment", "My own key");
+
+  SILC_LOG_DEBUG(("Save public and private key"));
+  if (!silc_pkcs_save_public_key("pubkey.pub", public_key, 
+                                SILC_PKCS_FILE_BASE64))
+    goto err;
+  if (!silc_pkcs_save_private_key("privkey.prv", private_key, "testi", 5,
+                                         SILC_PKCS_FILE_BASE64, rng))
+    goto err;
+  SILC_LOG_DEBUG(("Load public key"));
+  if (!silc_pkcs_load_public_key("pubkey.pub", SILC_PKCS_ANY,  &public_key))
+    goto err;
+  ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
+  SILC_LOG_DEBUG(("Subject: '%s'",
+                 silc_ssh_public_key_get_field(ssh_pubkey, "Subject")));
+  SILC_LOG_DEBUG(("Comment: '%s'",
+                 silc_ssh_public_key_get_field(ssh_pubkey, "Comment")));
+
+  SILC_LOG_DEBUG(("Load private key"));
+  if (!silc_pkcs_load_private_key("privkey.prv", "testi", 5,
+                                 SILC_PKCS_ANY, &private_key))
+    goto err;
+
+  SILC_LOG_DEBUG(("Save as OpenSSH public key"));
+  ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
+  silc_ssh_public_key_set_type(ssh_pubkey, SILC_SSH_KEY_OPENSSH);
+  if (!silc_pkcs_save_public_key("pubkey_openssh.pub", public_key, 
+                                SILC_PKCS_FILE_BASE64))
+    goto err;
+
+  SILC_LOG_DEBUG(("Load public key"));
+  if (!silc_pkcs_load_public_key("pubkey_openssh.pub", SILC_PKCS_SSH2, 
+                                &public_key))
+    goto err;
+
+  silc_rng_free(rng);
+
+  success = TRUE;
+
+ err:
+  SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
+  fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
+
+  return success;
+}