Преглед на файлове

Make hashed controller password encoding use hex not base64; this makes it possible to write a controller without base64

svn:r4279
Nick Mathewson преди 20 години
родител
ревизия
11a64692c3
променени са 3 файла, в които са добавени 13 реда и са изтрити 9 реда
  1. 1 1
      src/or/config.c
  2. 10 3
      src/or/control.c
  3. 2 5
      src/or/main.c

+ 1 - 1
src/or/config.c

@@ -1555,7 +1555,7 @@ options_validate(or_options_t *options)
 
   if (options->HashedControlPassword) {
     if (decode_hashed_password(NULL, options->HashedControlPassword)<0) {
-      log_fn(LOG_WARN,"Bad HashedControlPassword: wrong length or bad base64");
+      log_fn(LOG_WARN,"Bad HashedControlPassword: wrong length or bad encoding");
       result = -1;
     }
   }

+ 10 - 3
src/or/control.c

@@ -469,9 +469,16 @@ int
 decode_hashed_password(char *buf, const char *hashed)
 {
   char decoded[64];
-  if (base64_decode(decoded, sizeof(decoded), hashed, strlen(hashed))
-      != S2K_SPECIFIER_LEN+DIGEST_LEN) {
-    return -1;
+  if (!strcmpstart(hashed, "16:")) {
+    if (base16_decode(decoded, sizeof(decoded), hashed+3, strlen(hashed+3))<0
+        || strlen(hashed+3) != (S2K_SPECIFIER_LEN+DIGEST_LEN)*2) {
+      return -1;
+    }
+  } else {
+      if (base64_decode(decoded, sizeof(decoded), hashed, strlen(hashed))
+          != S2K_SPECIFIER_LEN+DIGEST_LEN) {
+        return -1;
+      }
   }
   if (buf)
     memcpy(buf, decoded, sizeof(decoded));

+ 2 - 5
src/or/main.c

@@ -1317,11 +1317,8 @@ static void do_hash_password(void)
   secret_to_key(key+S2K_SPECIFIER_LEN, DIGEST_LEN,
                 get_options()->command_arg, strlen(get_options()->command_arg),
                 key);
-  if (base64_encode(output, sizeof(output), key, sizeof(key))<0) {
-    log_fn(LOG_ERR, "Unable to compute base64");
-  } else {
-    printf("%s",output);
-  }
+  base16_encode(output, sizeof(output), key, sizeof(key));
+  printf("16:%s\n",output);
 }
 
 #ifdef MS_WINDOWS_SERVICE