diff options
author | Nick Mathewson <nickm@torproject.org> | 2004-04-05 17:36:30 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2004-04-05 17:36:30 +0000 |
commit | 12ede0a2c4aa45fb32ab96cb7bb02496179ae1d5 (patch) | |
tree | 69b96e0ba1a7b661cc78fc7b0c7a23de2c705301 | |
parent | 41387bea08a34b7bb7fc231a01d8c754f988a5bd (diff) | |
download | tor-12ede0a2c4aa45fb32ab96cb7bb02496179ae1d5.tar tor-12ede0a2c4aa45fb32ab96cb7bb02496179ae1d5.tar.gz |
use the right variable when comparing hashes; maybe fix "Hash of session" bug
svn:r1481
-rw-r--r-- | src/common/crypto.c | 2 | ||||
-rw-r--r-- | src/common/crypto.h | 2 | ||||
-rw-r--r-- | src/or/rendmid.c | 9 |
3 files changed, 6 insertions, 7 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c index 7e642df35..b3f8c7e35 100644 --- a/src/common/crypto.c +++ b/src/common/crypto.c @@ -482,7 +482,7 @@ int crypto_pk_private_sign(crypto_pk_env_t *env, const unsigned char *from, int /* Return 0 if sig is a correct signature for SHA1(data). Else return -1. */ -int crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char *data, int datalen, unsigned char *sig, int siglen) +int crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char *data, int datalen, const unsigned char *sig, int siglen) { char digest[DIGEST_LEN]; char buf[PK_BYTES+1]; diff --git a/src/common/crypto.h b/src/common/crypto.h index df349d7e8..44ea11f82 100644 --- a/src/common/crypto.h +++ b/src/common/crypto.h @@ -56,7 +56,7 @@ int crypto_pk_private_decrypt(crypto_pk_env_t *env, const unsigned char *from, i int crypto_pk_private_sign(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to); int crypto_pk_private_sign_digest(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to); int crypto_pk_public_checksig(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to); -int crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char *data, int datalen, unsigned char *sig, int siglen); +int crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char *data, int datalen, const unsigned char *sig, int siglen); int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to, int padding); diff --git a/src/or/rendmid.c b/src/or/rendmid.c index aea65f47f..c44c994b8 100644 --- a/src/or/rendmid.c +++ b/src/or/rendmid.c @@ -53,16 +53,15 @@ rend_mid_establish_intro(circuit_t *circ, const char *request, int request_len) } hex_encode(expected_digest, 20, hexdigest); log_fn(LOG_INFO, "Expected digest is: %s", hexdigest); - hex_encode(buf+2+asn1len, 20, hexdigest); + hex_encode(request+2+asn1len, 20, hexdigest); log_fn(LOG_INFO, "Received digest is: %s", hexdigest); - if (memcmp(expected_digest, buf+2+asn1len, 20)) { + if (memcmp(expected_digest, request+2+asn1len, 20)) { log_fn(LOG_WARN, "Hash of session info was not as expected"); goto err; } - /* Rest of body: signature of previous data */ - if (crypto_pk_public_checksig_digest(pk, buf, 22+asn1len, - buf+22+asn1len, request_len-(22+asn1len))<0) { + if (crypto_pk_public_checksig_digest(pk, request, 22+asn1len, + request+22+asn1len, request_len-(22+asn1len))<0) { log_fn(LOG_WARN, "Incorrect signature on ESTABLISH_INTRO cell; rejecting"); goto err; } |