Added preliminary Symbian support.
[silc.git] / lib / silcapputil / silcapputil.c
index 39fce81cacab76f343281ed4122d1bef8c3f7a8d..32018654de19f937f2c002935f91b0fd745f95a8 100644 (file)
@@ -40,7 +40,7 @@ static char *silc_create_pk_identifier(void)
     return NULL;
 
   /* Create default email address, whether it is right or not */
-  snprintf(email, sizeof(email), "%s@%s", username, hostname);
+  silc_snprintf(email, sizeof(email), "%s@%s", username, hostname);
 
   ident = silc_pkcs_silc_encode_identifier(username, hostname, realname,
                                           email, NULL, NULL);
@@ -71,6 +71,8 @@ SilcBool silc_create_key_pair(const char *pkcs_name,
   char *alg = pkcs_name ? strdup(pkcs_name) : NULL;
   char *identifier = pub_identifier ? strdup(pub_identifier) : NULL;
   char *pass = passphrase ? strdup(passphrase) : NULL;
+  SilcPublicKey public_key;
+  SilcPrivateKey private_key;
 
   if (interactive && (!alg || !pub_filename || !prv_filename))
     printf("\
@@ -121,9 +123,9 @@ New pair of keys will be created.  Please, answer to following questions.\n\
     if (interactive) {
       memset(line, 0, sizeof(line));
       if (def)
-       snprintf(line, sizeof(line), "Identifier [%s]: ", def);
+       silc_snprintf(line, sizeof(line), "Identifier [%s]: ", def);
       else
-       snprintf(line, sizeof(line),
+       silc_snprintf(line, sizeof(line),
               "Identifier (eg. UN=jon, HN=jon.dummy.com, "
               "RN=Jon Johnson, E=jon@dummy.com): ");
 
@@ -151,7 +153,7 @@ New pair of keys will be created.  Please, answer to following questions.\n\
   if (!pkfile) {
     if (interactive) {
       memset(line, 0, sizeof(line));
-      snprintf(line, sizeof(line), "Public key filename [public_key.pub]: ");
+      silc_snprintf(line, sizeof(line), "Public key filename [public_key.pub]: ");
       pkfile = silc_get_input(line, FALSE);
     }
     if (!pkfile)
@@ -161,7 +163,7 @@ New pair of keys will be created.  Please, answer to following questions.\n\
   if (!prvfile) {
     if (interactive) {
       memset(line, 0, sizeof(line));
-      snprintf(line, sizeof(line), "Private key filename [private_key.prv]: ");
+      silc_snprintf(line, sizeof(line), "Private key filename [private_key.prv]: ");
       prvfile = silc_get_input(line, FALSE);
     }
     if (!prvfile)
@@ -192,18 +194,28 @@ New pair of keys will be created.  Please, answer to following questions.\n\
 
   /* Generate keys */
   if (!silc_pkcs_silc_generate_key(alg, "pkcs1-no-oid", key_len_bits,
-                                  identifier, rng, return_public_key,
-                                  return_private_key))
+                                  identifier, rng, &public_key,
+                                  &private_key))
     return FALSE;
 
   /* Save public key into file */
-  silc_pkcs_save_public_key(pkfile, *return_public_key, SILC_PKCS_FILE_BASE64);
+  silc_pkcs_save_public_key(pkfile, public_key, SILC_PKCS_FILE_BASE64);
 
   /* Save private key into file */
-  silc_pkcs_save_private_key(prvfile, *return_private_key,
+  silc_pkcs_save_private_key(prvfile, private_key,
                             (const unsigned char *)pass, strlen(pass),
                             SILC_PKCS_FILE_BIN, rng);
 
+  if (return_public_key)
+    *return_public_key = public_key;
+  else
+    silc_pkcs_public_key_free(public_key);
+
+  if (return_private_key)
+    *return_private_key = private_key;
+  else
+    silc_pkcs_private_key_free(private_key);
+
   printf("Public key has been saved into `%s'.\n", pkfile);
   printf("Private key has been saved into `%s'.\n", prvfile);
   if (interactive) {
@@ -262,9 +274,8 @@ SilcBool silc_load_key_pair(const char *pub_filename,
 
 /* Dump public key into stdout */
 
-SilcBool silc_show_public_key(const char *pub_filename)
+SilcBool silc_show_public_key(SilcPublicKey public_key)
 {
-  SilcPublicKey public_key;
   SilcSILCPublicKey silc_pubkey;
   SilcPublicKeyIdentifier ident;
   char *fingerprint, *babbleprint;
@@ -272,11 +283,6 @@ SilcBool silc_show_public_key(const char *pub_filename)
   SilcUInt32 pk_len;
   SilcUInt32 key_len = 0;
 
-  if (!silc_pkcs_load_public_key((char *)pub_filename, &public_key)) {
-    fprintf(stderr, "Could not load public key file `%s'\n", pub_filename);
-    return FALSE;
-  }
-
   silc_pubkey = silc_pkcs_get_context(SILC_PKCS_SILC, public_key);
   if (!silc_pubkey) {
     silc_pkcs_public_key_free(public_key);
@@ -293,7 +299,6 @@ SilcBool silc_show_public_key(const char *pub_filename)
   fingerprint = silc_hash_fingerprint(NULL, pk, pk_len);
   babbleprint = silc_hash_babbleprint(NULL, pk, pk_len);
 
-  printf("Public key file    : %s\n", pub_filename);
   printf("Algorithm          : %s\n", silc_pkcs_get_name(public_key));
   if (key_len)
     printf("Key length (bits)  : %d\n", (unsigned int)key_len);
@@ -317,11 +322,29 @@ SilcBool silc_show_public_key(const char *pub_filename)
   silc_free(fingerprint);
   silc_free(babbleprint);
   silc_free(pk);
-  silc_pkcs_public_key_free(public_key);
 
   return TRUE;
 }
 
+/* Dump public key into stdout */
+
+SilcBool silc_show_public_key_file(const char *pub_filename)
+{
+  SilcPublicKey public_key;
+  SilcBool ret;
+
+  if (!silc_pkcs_load_public_key((char *)pub_filename, &public_key)) {
+    fprintf(stderr, "Could not load public key file `%s'\n", pub_filename);
+    return FALSE;
+  }
+
+  printf("Public key file    : %s\n", pub_filename);
+  ret = silc_show_public_key(public_key);
+  silc_pkcs_public_key_free(public_key);
+
+  return ret;
+}
+
 /* Change private key passphrase */
 
 SilcBool silc_change_private_key_passphrase(const char *prv_filename,
@@ -730,11 +753,11 @@ SilcBool silc_parse_version_string(const char *version,
   min = atoi(cp);
 
   memset(buf, 0, sizeof(buf));
-  snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min);
+  silc_snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min);
   if (protocol_version)
     *protocol_version = atoi(buf);
   memset(buf, 0, sizeof(buf));
-  snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min);
+  silc_snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min);
   if (protocol_version_string)
     *protocol_version_string = strdup(buf);
 
@@ -756,11 +779,11 @@ SilcBool silc_parse_version_string(const char *version,
   }
 
   memset(buf, 0, sizeof(buf));
-  snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min);
+  silc_snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min);
   if (software_version)
     *software_version = atoi(buf);
   memset(buf, 0, sizeof(buf));
-  snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min);
+  silc_snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min);
   if (software_version_string)
     *software_version_string = strdup(buf);
 
@@ -792,7 +815,7 @@ SilcUInt32 silc_version_to_num(const char *version)
     min = atoi(cp + 1);
 
   memset(buf, 0, sizeof(buf));
-  snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min);
+  silc_snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min);
   return (SilcUInt32)atoi(buf);
 }
 
@@ -964,11 +987,11 @@ char *silc_id_render(void *id, SilcIdType id_type)
       }
 
       memset(tmp, 0, sizeof(tmp));
-      snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(server_id->port));
+      silc_snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(server_id->port));
       _PUT_STRING(rid, tmp);
       SILC_PUT16_MSB(server_id->rnd, tmps);
       memset(tmp, 0, sizeof(tmp));
-      snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]);
+      silc_snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]);
       _PUT_STRING(rid, tmp);
     }
     break;
@@ -994,10 +1017,10 @@ char *silc_id_render(void *id, SilcIdType id_type)
       }
 
       memset(tmp, 0, sizeof(tmp));
-      snprintf(tmp, sizeof(tmp) - 1, ",%02x,", client_id->rnd);
+      silc_snprintf(tmp, sizeof(tmp) - 1, ",%02x,", client_id->rnd);
       _PUT_STRING(rid, tmp);
       memset(tmp, 0, sizeof(tmp));
-      snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x %02x %02x...]",
+      silc_snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x %02x %02x...]",
               client_id->hash[0], client_id->hash[1],
               client_id->hash[2], client_id->hash[3]);
       _PUT_STRING(rid, tmp);
@@ -1025,11 +1048,11 @@ char *silc_id_render(void *id, SilcIdType id_type)
       }
 
       memset(tmp, 0, sizeof(tmp));
-      snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(channel_id->port));
+      silc_snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(channel_id->port));
       _PUT_STRING(rid, tmp);
       SILC_PUT16_MSB(channel_id->rnd, tmps);
       memset(tmp, 0, sizeof(tmp));
-      snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]);
+      silc_snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]);
       _PUT_STRING(rid, tmp);
     }
     break;