Commit 11a64692 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Make hashed controller password encoding use hex not base64; this makes it...

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


svn:r4279
parent eec91070
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -469,10 +469,17 @@ int
decode_hashed_password(char *buf, const char *hashed)
{
  char decoded[64];
  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));
  return 0;
+2 −5
Original line number Diff line number Diff line
@@ -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