Browse Source

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

Roger Dingledine 21 years ago
parent
commit
6dc576bab7
1 changed files with 4 additions and 1 deletions
  1. 4 1
      src/common/crypto.c

+ 4 - 1
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);
 }