Restrict the meaning of digests_t to sha1+sha256.

This saves CPU and RAM when handling consensuses and x509 certs.

Closes ticket 17795; bug not in any released tor.
This commit is contained in:
Nick Mathewson 2016-01-27 13:10:17 -05:00
parent 4770db8e99
commit 39b597c2fd
2 changed files with 6 additions and 3 deletions

View File

@ -1655,7 +1655,7 @@ crypto_digest_all(digests_t *ds_out, const char *m, size_t len)
memset(ds_out, 0, sizeof(*ds_out)); memset(ds_out, 0, sizeof(*ds_out));
if (crypto_digest(ds_out->d[DIGEST_SHA1], m, len) < 0) if (crypto_digest(ds_out->d[DIGEST_SHA1], m, len) < 0)
return -1; return -1;
for (i = DIGEST_SHA256; i < N_DIGEST_ALGORITHMS; ++i) { for (i = DIGEST_SHA256; i < N_COMMON_DIGEST_ALGORITHMS; ++i) {
switch (i) { switch (i) {
case DIGEST_SHA256: /* FALLSTHROUGH */ case DIGEST_SHA256: /* FALLSTHROUGH */
case DIGEST_SHA3_256: case DIGEST_SHA3_256:
@ -1664,6 +1664,7 @@ crypto_digest_all(digests_t *ds_out, const char *m, size_t len)
break; break;
case DIGEST_SHA512: case DIGEST_SHA512:
case DIGEST_SHA3_512: /* FALLSTHROUGH */ case DIGEST_SHA3_512: /* FALLSTHROUGH */
tor_assert(0); /* These won't fit. */
if (crypto_digest512(ds_out->d[i], m, len, i) < 0) if (crypto_digest512(ds_out->d[i], m, len, i) < 0)
return -1; return -1;
break; break;

View File

@ -100,8 +100,10 @@ typedef enum {
DIGEST_SHA3_512 = 4, DIGEST_SHA3_512 = 4,
} digest_algorithm_t; } digest_algorithm_t;
#define N_DIGEST_ALGORITHMS (DIGEST_SHA3_512+1) #define N_DIGEST_ALGORITHMS (DIGEST_SHA3_512+1)
#define N_COMMON_DIGEST_ALGORITHMS (DIGEST_SHA256+1)
/** A set of all the digests we know how to compute, taken on a single
/** A set of all the digests we commonly compute, taken on a single
* string. Any digests that are shorter than 512 bits are right-padded * string. Any digests that are shorter than 512 bits are right-padded
* with 0 bits. * with 0 bits.
* *
@ -110,7 +112,7 @@ typedef enum {
* once. * once.
**/ **/
typedef struct { typedef struct {
char d[N_DIGEST_ALGORITHMS][DIGEST512_LEN]; char d[N_COMMON_DIGEST_ALGORITHMS][DIGEST256_LEN];
} digests_t; } digests_t;
typedef struct crypto_pk_t crypto_pk_t; typedef struct crypto_pk_t crypto_pk_t;