Преглед на файлове

Allow checkpointing of non-sha1 digests.

This is necessary because apparently v3 rendezvous cpath hops use
sha3, which I had forgotten.

Bugfix on master; bug not in any released Tor.
Nick Mathewson преди 6 години
родител
ревизия
a34fc1dad2
променени са 2 файла, в които са добавени 3 реда и са изтрити 7 реда
  1. 2 6
      src/common/crypto.c
  2. 1 1
      src/common/crypto.h

+ 2 - 6
src/common/crypto.c

@@ -1163,10 +1163,7 @@ void
 crypto_digest_checkpoint(crypto_digest_checkpoint_t *checkpoint,
                          const crypto_digest_t *digest)
 {
-  tor_assert(digest->algorithm == DIGEST_SHA1);
-  /* The optimizer should turn this into a constant... */
-  const size_t bytes = crypto_digest_alloc_bytes(DIGEST_SHA1);
-  /* ... and remove this assertion entirely. */
+  const size_t bytes = crypto_digest_alloc_bytes(digest->algorithm);
   tor_assert(bytes <= sizeof(checkpoint->mem));
   memcpy(checkpoint->mem, digest, bytes);
 }
@@ -1178,8 +1175,7 @@ void
 crypto_digest_restore(crypto_digest_t *digest,
                       const crypto_digest_checkpoint_t *checkpoint)
 {
-  tor_assert(digest->algorithm == DIGEST_SHA1);
-  const size_t bytes = crypto_digest_alloc_bytes(DIGEST_SHA1);
+  const size_t bytes = crypto_digest_alloc_bytes(digest->algorithm);
   memcpy(digest, checkpoint->mem, bytes);
 }
 

+ 1 - 1
src/common/crypto.h

@@ -90,7 +90,7 @@ typedef struct crypto_digest_t crypto_digest_t;
 typedef struct crypto_xof_t crypto_xof_t;
 typedef struct crypto_dh_t crypto_dh_t;
 
-#define DIGEST_CHECKPOINT_BYTES (SIZEOF_VOID_P + SIZEOF_SHA_CTX)
+#define DIGEST_CHECKPOINT_BYTES (SIZEOF_VOID_P + 256)
 /** Structure used to temporarily save the a digest object. Only implemented
  * for SHA1 digest for now. */
 typedef struct crypto_digest_checkpoint_t {