Merged silc_1_0_branch to trunk.
[silc.git] / lib / silcutil / silcapputil.c
index 6f0f0604c3ba25321613cca9e6454e475e83eae3..a79ee597549e91a21c7ae838b3cb6335a64e8202 100644 (file)
@@ -175,11 +175,25 @@ New pair of keys will be created.  Please, answer to following questions.\n\
   }
 
   if (!pass) {
-    memset(line, 0, sizeof(line));
-    snprintf(line, sizeof(line), "Private key passphrase: ");
-    pass = silc_get_input(line, TRUE);
-    if (!pass)
-      pass = strdup("");
+    while (TRUE) {
+      char *pass2 = NULL;
+      pass = silc_get_input("Private key passphrase: ", TRUE);
+      if (!pass) {
+        pass = strdup("");
+       break;
+      } else {
+       bool match;
+       printf("\n");
+       pass2 = silc_get_input("Retype private key passphrase: ", TRUE);
+       if (!pass2)
+         pass2 = strdup("");
+       match = !strcmp(pass, pass2);
+       silc_free(pass2);
+       if (match)
+         break;
+       fprintf(stderr, "\nPassphrases do not match\n\n");
+      }
+    }
   }
 
   /* Generate keys */
@@ -252,7 +266,8 @@ bool silc_load_key_pair(const char *pub_filename,
                                SILC_PKCS_FILE_PEM) == FALSE)
     if (silc_pkcs_load_public_key((char *)pub_filename, return_public_key,
                                  SILC_PKCS_FILE_BIN) == FALSE) {
-      memset(pass, 0, strlen(pass));
+      if (pass)
+       memset(pass, 0, strlen(pass));
       silc_free(pass);
       return FALSE;
     }
@@ -382,13 +397,26 @@ bool silc_change_private_key_passphrase(const char *prv_filename,
 
   pass = new_passphrase ? strdup(new_passphrase) : NULL;
   if (!pass) {
+    char *pass2 = NULL;
     fprintf(stdout, "\n");
     pass = silc_get_input("New passphrase: ", TRUE);
-    if (!pass)
+    if (!pass) {
       pass = strdup("");
+    } else {
+      while (TRUE) {
+       printf("\n");
+       pass2 = silc_get_input("Retype new passphrase: ", TRUE);
+       if (!pass2)
+         pass2 = strdup("");
+       if (!strcmp(pass, pass2))
+         break;
+       fprintf(stderr, "\nPassphrases do not match");
+      }
+      silc_free(pass2);
+    }
   }
 
-  silc_pkcs_save_private_key(prv_filename, private_key,
+  silc_pkcs_save_private_key((char *)prv_filename, private_key,
                             (unsigned char *)pass, strlen(pass),
                             base64 ? SILC_PKCS_FILE_PEM : SILC_PKCS_FILE_BIN);