fx: add functions for hashing wstr and generic buffers
This commit is contained in:
+29
-2
@@ -40,8 +40,8 @@ static const struct fx_hash_function_ops *hash_functions[] = {
|
||||
[FX_HASH_SHAKE128] = &z__fx_shake128_ops,
|
||||
[FX_HASH_SHAKE256] = &z__fx_shake256_ops,
|
||||
};
|
||||
static const size_t nr_hash_functions
|
||||
= sizeof hash_functions / sizeof hash_functions[0];
|
||||
static const size_t nr_hash_functions = sizeof hash_functions
|
||||
/ sizeof hash_functions[0];
|
||||
|
||||
uint64_t fx_hash_cstr(const char *s)
|
||||
{
|
||||
@@ -66,6 +66,33 @@ uint64_t fx_hash_cstr_ex(const char *s, size_t *len)
|
||||
return hash;
|
||||
}
|
||||
|
||||
uint64_t fx_hash_wstr(const fx_wchar *s)
|
||||
{
|
||||
uint64_t hash = FNV1_OFFSET_BASIS;
|
||||
size_t i = 0;
|
||||
|
||||
for (i = 0; s[i]; i++) {
|
||||
hash ^= s[i];
|
||||
hash *= FNV1_PRIME;
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
uint64_t fx_hash_buffer(const void *p, size_t len)
|
||||
{
|
||||
const char *s = p;
|
||||
uint64_t hash = FNV1_OFFSET_BASIS;
|
||||
size_t i = 0;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
hash ^= s[i];
|
||||
hash *= FNV1_PRIME;
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
enum fx_status fx_hash_ctx_init(
|
||||
struct fx_hash_ctx *ctx,
|
||||
enum fx_hash_function func)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef FX_CORE_HASH_H_
|
||||
#define FX_CORE_HASH_H_
|
||||
|
||||
#include <fx/encoding.h>
|
||||
#include <fx/misc.h>
|
||||
#include <fx/status.h>
|
||||
#include <stddef.h>
|
||||
@@ -99,15 +100,16 @@ typedef struct fx_hash_ctx {
|
||||
} fx_hash_ctx;
|
||||
|
||||
FX_API uint64_t fx_hash_cstr(const char *s);
|
||||
FX_API uint64_t fx_hash_wstr(const fx_wchar *s);
|
||||
FX_API uint64_t fx_hash_cstr_ex(const char *s, size_t *len);
|
||||
FX_API uint64_t fx_hash_buffer(const void *s, size_t len);
|
||||
|
||||
FX_API fx_status fx_hash_ctx_init(fx_hash_ctx *ctx, fx_hash_function func);
|
||||
FX_API fx_status fx_hash_ctx_reset(fx_hash_ctx *ctx);
|
||||
FX_API fx_status
|
||||
fx_hash_ctx_update(fx_hash_ctx *ctx, const void *p, size_t len);
|
||||
FX_API fx_status fx_hash_ctx_update_rope(
|
||||
fx_hash_ctx *ctx,
|
||||
const struct fx_rope *rope);
|
||||
FX_API fx_status
|
||||
fx_hash_ctx_update_rope(fx_hash_ctx *ctx, const struct fx_rope *rope);
|
||||
FX_API fx_status
|
||||
fx_hash_ctx_finish(fx_hash_ctx *ctx, void *out_digest, size_t out_max);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user