40 lines
932 B
C
40 lines
932 B
C
//
|
|
// Created by haraldwolff on 08.08.22.
|
|
//
|
|
|
|
#ifndef SPARSE_TOOLS_MERKLE_H
|
|
#define SPARSE_TOOLS_MERKLE_H
|
|
|
|
#include <stdint.h>
|
|
|
|
typedef enum {
|
|
MF_ALLOC,
|
|
} merkle_flags_t;
|
|
|
|
typedef struct {
|
|
int n; // level-to-level ratio
|
|
int depth; // number of levels
|
|
int length; // number of elements over the whole tree
|
|
int width; // number of elements at base level
|
|
} merkle_parameters_t;
|
|
|
|
typedef struct {
|
|
merkle_flags_t flags;
|
|
merkle_parameters_t parameters;
|
|
|
|
int *indeces;
|
|
uint64_t *hashes;
|
|
} merkle_t;
|
|
|
|
int merkle_create(merkle_t **merkle, int n, int minwidth);
|
|
int merkle_init(merkle_t *merkle, int n, int minwidth);
|
|
int merkle_free(merkle_t *merkle);
|
|
|
|
int merkle_get(merkle_t *merkle, int l, int n, uint64_t *hash);
|
|
int merkle_set(merkle_t *merkle, int l, int n, uint64_t hash);
|
|
|
|
int merkle_get_row(merkle_t *merkle, int level, uint64_t **offset, int *size);
|
|
int merkle_dump(merkle_t *merkle);
|
|
|
|
#endif //SPARSE_TOOLS_MERKLE_H
|