diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-02-16 09:25:50 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-02-16 09:25:50 -0500 |
commit | a34fc1dad2ba2be5af4c04a9c46c9ef5e248c81f (patch) | |
tree | 5cf3573e427b5923dd2b763b363f12864dd72e43 | |
parent | 5c48f62e67faf9d7ba825bba7ddec446aa8d8aed (diff) | |
download | tor-a34fc1dad2ba2be5af4c04a9c46c9ef5e248c81f.tar.gz tor-a34fc1dad2ba2be5af4c04a9c46c9ef5e248c81f.zip |
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.
-rw-r--r-- | src/common/crypto.c | 8 | ||||
-rw-r--r-- | src/common/crypto.h | 2 |
2 files changed, 3 insertions, 7 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c index 69faa0f63d..ade8b0191f 100644 --- a/src/common/crypto.c +++ b/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); } diff --git a/src/common/crypto.h b/src/common/crypto.h index f8a392dff1..792533642c 100644 --- a/src/common/crypto.h +++ b/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 { |