From: Roger Dingledine Date: Sat, 15 May 2004 23:49:41 +0000 (+0000) Subject: bugfix: our integrity-checking digest was checking only the most X-Git-Tag: debian-version-0.0.6.2-1~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6dc576bab7cf2be774649ea9b3fa665dbc6566d6;p=thirdparty%2Ftor.git bugfix: our integrity-checking digest was checking only the most recent cell, not the previous cells like we'd thought. this change is backward incompatible. svn:r1868 --- diff --git a/src/common/crypto.c b/src/common/crypto.c index ba6e99f024..1c265628ae 100644 --- a/src/common/crypto.c +++ b/src/common/crypto.c @@ -1029,9 +1029,12 @@ void crypto_digest_get_digest(crypto_digest_env_t *digest, char *out, size_t out_len) { static char r[DIGEST_LEN]; + SHA_CTX tmpctx; tor_assert(digest && out); tor_assert(out_len <= DIGEST_LEN); - SHA1_Final(r, &digest->d); + /* memcpy into a temporary ctx, since SHA1_Final clears the context */ + memcpy(&tmpctx, &digest->d, sizeof(SHA_CTX)); + SHA1_Final(r, &tmpctx); memcpy(out, r, out_len); }