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.
This commit is contained in:
parent
5c48f62e67
commit
a34fc1dad2
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue