Commit a34fc1da authored by Nick Mathewson's avatar Nick Mathewson 🦞
Browse files

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.
parent 5c48f62e
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -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 {