Gerbera/include/gerbera.h
2026-06-23 09:56:21 +09:00

43 lines
1.4 KiB
C

#ifndef GERBERA_H
#define GERBERA_H
#include <stddef.h>
#include <stdint.h>
#define GERBERA_MAGIC_SIZE 10
#define GERBERA_NONCE_SIZE 16
#define GERBERA_TAG_SIZE 16
#define GERBERA_BUFFER_SIZE 4096
#define GERBERA_HEADER_SIZE (GERBERA_MAGIC_SIZE + GERBERA_NONCE_SIZE + 8)
#define GERBERA_OVERHEAD_SIZE (GERBERA_HEADER_SIZE + GERBERA_TAG_SIZE)
typedef struct {
uint8_t state[256];
uint8_t key[32];
uint8_t i;
uint8_t j;
uint64_t position;
} GerberaCipher;
typedef struct {
uint8_t state[32];
uint64_t length;
} GerberaAuth;
void gerbera_cipher_init(GerberaCipher *ctx, const char *password,
const uint8_t nonce[GERBERA_NONCE_SIZE]);
void gerbera_cipher_apply(GerberaCipher *ctx, uint8_t data[], size_t length);
void gerbera_auth_init(GerberaAuth *ctx, const char *password,
const uint8_t nonce[GERBERA_NONCE_SIZE]);
void gerbera_auth_update(GerberaAuth *ctx, const uint8_t data[], size_t length);
void gerbera_auth_finish(GerberaAuth *ctx, uint8_t tag[GERBERA_TAG_SIZE]);
int gerbera_constant_time_equal(const uint8_t a[], const uint8_t b[],
size_t length);
int encrypt_file(const char *input_path, const char *output_path,
const char *password);
int decrypt_file(const char *input_path, const char *output_path,
const char *password);
#endif