#ifndef HASHTREE_H
#define HASHTREE_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*hashtree_hash_fcn)(unsigned char*, const unsigned char*, uint64_t);
int hashtree_init(hashtree_hash_fcn override);
void hashtree_hash(unsigned char* output, const unsigned char* input, uint64_t count);
#ifdef __aarch64__
void hashtree_sha256_neon_x1(unsigned char* output, const unsigned char* input, uint64_t count);
void hashtree_sha256_neon_x4(unsigned char* output, const unsigned char* input, uint64_t count);
void hashtree_sha256_sha_x1(unsigned char* output, const unsigned char* input, uint64_t count);
#endif
#ifdef __x86_64__
void hashtree_sha256_sse_x1(unsigned char* output, const unsigned char* input, uint64_t count);
void hashtree_sha256_avx_x1(unsigned char* output, const unsigned char* input, uint64_t count);
void hashtree_sha256_avx_x4(unsigned char* output, const unsigned char* input, uint64_t count);
void hashtree_sha256_avx2_x8(unsigned char* output, const unsigned char* input, uint64_t count);
void hashtree_sha256_avx512_x16(unsigned char* output, const unsigned char* input, uint64_t count);
void hashtree_sha256_shani_x2(unsigned char* output, const unsigned char* input, uint64_t count);
#endif
#ifdef __cplusplus
}
#endif
#endif