shared: make sure foo.bar and foobar result in different domain name hashes
This also introduces a new macro siphash24_compress_byte() which is useful to add a single byte into the hash stream, and ports one user over to it.
This commit is contained in:
parent
758dd67e8d
commit
d51155663a
|
@ -16,6 +16,8 @@ struct siphash {
|
|||
|
||||
void siphash24_init(struct siphash *state, const uint8_t k[16]);
|
||||
void siphash24_compress(const void *in, size_t inlen, struct siphash *state);
|
||||
#define siphash24_compress_byte(byte, state) siphash24_compress((const uint8_t[]) { (byte) }, 1, (state))
|
||||
|
||||
uint64_t siphash24_finalize(struct siphash *state);
|
||||
|
||||
uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[16]);
|
||||
|
|
|
@ -1120,8 +1120,9 @@ static void dns_resource_record_hash_func(const void *i, struct siphash *state)
|
|||
LIST_FOREACH(items, j, rr->txt.items) {
|
||||
siphash24_compress(j->data, j->length, state);
|
||||
|
||||
/* Add an extra NUL byte, so that "a" followed by "b" doesn't result in the same hash as "ab" followed by "". */
|
||||
siphash24_compress((const uint8_t[]) { 0 }, 1, state);
|
||||
/* Add an extra NUL byte, so that "a" followed by "b" doesn't result in the same hash as "ab"
|
||||
* followed by "". */
|
||||
siphash24_compress_byte(0, state);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -504,6 +504,7 @@ void dns_name_hash_func(const void *s, struct siphash *state) {
|
|||
|
||||
ascii_strlower_n(label, r);
|
||||
siphash24_compress(label, r, state);
|
||||
siphash24_compress_byte(0, state); /* make sure foobar and foo.bar result in different hashes */
|
||||
}
|
||||
|
||||
/* enforce that all names are terminated by the empty label */
|
||||
|
|
Loading…
Reference in New Issue