]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Allow checkpointing of non-sha1 digests.
authorNick Mathewson <nickm@torproject.org>
Fri, 16 Feb 2018 14:25:50 +0000 (09:25 -0500)
committerNick Mathewson <nickm@torproject.org>
Fri, 16 Feb 2018 14:25:50 +0000 (09:25 -0500)
This is necessary because apparently v3 rendezvous cpath hops use
sha3, which I had forgotten.

Bugfix on master; bug not in any released Tor.

src/common/crypto.c
src/common/crypto.h

index 69faa0f63d7ca77187c193f35aff0834d43eeeae..ade8b0191f66d8c5fa51703ea42b6d61c8a71652 100644 (file)
@@ -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);
 }
 
index f8a392dff1539d260611ce1c99f3fb7fdfb2c68d..792533642cbbe7a6d260a014502080c4fcb02c6f 100644 (file)
@@ -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 {