summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2005-05-23 02:31:53 +0000
committerNick Mathewson <nickm@torproject.org>2005-05-23 02:31:53 +0000
commit11a64692c3f5cd4c944b00243619431a4e7ae7b3 (patch)
treeb633e3691e407c8a57898411eb4f2b1477ef7383
parenteec9107093b34208e933084248c7d09f19414a5d (diff)
downloadtor-11a64692c3f5cd4c944b00243619431a4e7ae7b3.tar.gz
tor-11a64692c3f5cd4c944b00243619431a4e7ae7b3.zip
Make hashed controller password encoding use hex not base64; this makes it possible to write a controller without base64
svn:r4279
-rw-r--r--src/or/config.c2
-rw-r--r--src/or/control.c13
-rw-r--r--src/or/main.c7
3 files changed, 13 insertions, 9 deletions
diff --git a/src/or/config.c b/src/or/config.c
index a161c980c2..d29de30800 100644
--- a/src/or/config.c
+++ b/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;
}
}
diff --git a/src/or/control.c b/src/or/control.c
index 42db20098d..564bb1b396 100644
--- a/src/or/control.c
+++ b/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));
diff --git a/src/or/main.c b/src/or/main.c
index fdaaddbb72..51f18c0e6e 100644
--- a/src/or/main.c
+++ b/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