mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
test: siphash24 - verify internal state and composability
Verify the state of the hash-function according to the reference paper, also verify that we can decompose the input and hash the chunks one by one and still get the same result.
This commit is contained in:
parent
7c57f504c9
commit
1283d70417
@ -26,15 +26,17 @@
|
||||
|
||||
/* see https://131002.net/siphash/siphash.pdf, Appendix A */
|
||||
int main(int argc, char *argv[]) {
|
||||
struct siphash state = {};
|
||||
const uint8_t in[15] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e };
|
||||
const uint8_t key[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
|
||||
uint64_t out = 0;
|
||||
unsigned k;
|
||||
unsigned i, j, k;
|
||||
usec_t ts;
|
||||
|
||||
siphash24((uint8_t *)&out, in, sizeof(in), key);
|
||||
assert_se(out == 0xa129ca6149be45e5);
|
||||
|
||||
assert_se(out == 0xa129ca6149be45e5ULL);
|
||||
|
||||
@ -44,4 +46,33 @@ int main(int argc, char *argv[]) {
|
||||
ts = now(CLOCK_MONOTONIC) - ts;
|
||||
|
||||
log_info("%llu iterations per second", (ITERATIONS * USEC_PER_SEC) / ts);
|
||||
|
||||
/* verify the internal state as given in the above paper */
|
||||
siphash_init(&state, key);
|
||||
assert_se(state.v0 == 0x7469686173716475);
|
||||
assert_se(state.v1 == 0x6b617f6d656e6665);
|
||||
assert_se(state.v2 == 0x6b7f62616d677361);
|
||||
assert_se(state.v3 == 0x7b6b696e727e6c7b);
|
||||
siphash24_compress(in, sizeof(in), &state);
|
||||
assert_se(state.v0 == 0x4a017198de0a59e0);
|
||||
assert_se(state.v1 == 0x0d52f6f62a4f59a4);
|
||||
assert_se(state.v2 == 0x634cb3577b01fd3d);
|
||||
assert_se(state.v3 == 0xa5224d6f55c7d9c8);
|
||||
assert_se(siphash24_finalize(&state) == 0xa129ca6149be45e5);
|
||||
assert_se(state.v0 == 0xf6bcd53893fecff1);
|
||||
assert_se(state.v1 == 0x54b9964c7ea0d937);
|
||||
assert_se(state.v2 == 0x1b38329c099bb55a);
|
||||
assert_se(state.v3 == 0x1814bb89ad7be679);
|
||||
|
||||
/* verify that decomposing the input in three chunks gives the
|
||||
same result */
|
||||
for (i = 0; i < sizeof(in); i++) {
|
||||
for (j = i; j < sizeof(in); j++) {
|
||||
siphash_init(&state, key);
|
||||
siphash24_compress(in, i, &state);
|
||||
siphash24_compress(&in[i], j - i, &state);
|
||||
siphash24_compress(&in[j], sizeof(in) - j, &state);
|
||||
assert_se(siphash24_finalize(&state) == 0xa129ca6149be45e5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user