aboutsummaryrefslogtreecommitdiff
path: root/core/hash
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2021-09-15 23:32:48 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2021-09-15 23:32:48 +0200
commitb6d0a8fe0cb1a7e1ea3a858e5102b1b2acdbc2c0 (patch)
tree521b0a002808efc1aa3382481745191de023545f /core/hash
parent662d27b79650176d27cdc5589a0862a33dbcc313 (diff)
xxhash: Add tests for streaming input.
Diffstat (limited to 'core/hash')
-rw-r--r--core/hash/xxhash/streaming.odin24
1 files changed, 12 insertions, 12 deletions
diff --git a/core/hash/xxhash/streaming.odin b/core/hash/xxhash/streaming.odin
index 95ff38f78..737e37eae 100644
--- a/core/hash/xxhash/streaming.odin
+++ b/core/hash/xxhash/streaming.odin
@@ -22,7 +22,7 @@ XXH3_128_reset :: proc(state: ^XXH3_state) -> (err: Error) {
if state == nil {
return .Error
}
- XXH3_reset_internal(state, 0, XXH3_kSecret[:])
+ XXH3_reset_internal(state, 0, XXH3_kSecret[:], len(XXH3_kSecret))
return .None
}
XXH3_64_reset :: XXH3_128_reset
@@ -34,7 +34,7 @@ XXH3_128_reset_with_secret :: proc(state: ^XXH3_state, secret: []u8) -> (err: Er
if secret == nil || len(secret) < XXH3_SECRET_SIZE_MIN {
return .Error
}
- XXH3_reset_internal(state, 0, secret)
+ XXH3_reset_internal(state, 0, secret, len(secret))
return .None
}
XXH3_64_reset_with_secret :: XXH3_128_reset_with_secret
@@ -46,15 +46,18 @@ XXH3_128_reset_with_seed :: proc(state: ^XXH3_state, seed: XXH64_hash) -> (err:
if seed != state.seed {
XXH3_init_custom_secret(state.custom_secret[:], seed)
}
-
- XXH3_reset_internal(state, seed, nil)
+ XXH3_reset_internal(state, seed, nil, XXH_SECRET_DEFAULT_SIZE)
return .None
}
XXH3_64_reset_with_seed :: XXH3_128_reset_with_seed
XXH3_128_update :: proc(state: ^XXH3_state, input: []u8) -> (err: Error) {
+ if len(input) < XXH3_MIDSIZE_MAX {
+ return .Error
+ }
return XXH3_update(state, input, XXH3_accumulate_512, XXH3_scramble_accumulator)
}
+XXH3_64_update :: XXH3_128_update
XXH3_128_digest :: proc(state: ^XXH3_state) -> (hash: XXH3_128_hash) {
secret := state.custom_secret[:] if len(state.external_secret) == 0 else state.external_secret[:]
@@ -137,7 +140,7 @@ XXH3_copy_state :: proc(dest, src: ^XXH3_state) {
mem_copy(dest, src, size_of(XXH3_state))
}
-XXH3_reset_internal :: proc(state: ^XXH3_state, seed: XXH64_hash, secret: []u8) {
+XXH3_reset_internal :: proc(state: ^XXH3_state, seed: XXH64_hash, secret: []u8, secret_size: uint) {
assert(state != nil)
init_start := offset_of(XXH3_state, buffered_size)
@@ -162,10 +165,9 @@ XXH3_reset_internal :: proc(state: ^XXH3_state, seed: XXH64_hash, secret: []u8)
state.seed = seed
state.external_secret = secret
- secret_length := uint(len(secret))
- assert(secret_length > XXH3_SECRET_SIZE_MIN)
+ assert(secret_size >= XXH3_SECRET_SIZE_MIN)
- state.secret_limit = secret_length - XXH_STRIPE_LEN
+ state.secret_limit = secret_size - XXH_STRIPE_LEN
state.stripes_per_block = state.secret_limit / XXH_SECRET_CONSUME_RATE
}
@@ -211,6 +213,8 @@ XXH3_update :: #force_inline proc(
length := len(input)
secret := state.custom_secret[:] if len(state.external_secret) == 0 else state.external_secret[:]
+ assert(len(input) > 0)
+
state.total_length += u64(length)
assert(state.buffered_size <= XXH3_INTERNAL_BUFFER_SIZE)
@@ -265,10 +269,6 @@ XXH3_update :: #force_inline proc(
return .None
}
-XXH3_64_update :: proc(state: ^XXH3_state, input: []u8) -> (err: Error) {
- return XXH3_update(state, input, XXH3_accumulate_512, XXH3_scramble_accumulator)
-}
-
XXH3_digest_long :: #force_inline proc(acc: []u64, state: ^XXH3_state, secret: []u8) {
/*
Digest on a local copy. This way, the state remains unaltered, and it can