(root)/
util-linux-2.39/
include/
fileeq.h
       1  
       2  /*
       3   * No copyright is claimed.  This code is in the public domain; do with
       4   * it what you wish.
       5   */
       6  #ifndef UTIL_LINUX_FILEEQ
       7  #define UTIL_LINUX_FILEEQ
       8  
       9  #include <stdlib.h>
      10  #include <stdint.h>
      11  #include <stdbool.h>
      12  
      13  #if defined(__linux__) && defined(HAVE_LINUX_IF_ALG_H)
      14  # define USE_FILEEQ_CRYPTOAPI 1
      15  #endif
      16  
      17  /* Number of bytes from the beginning of the file we always
      18   * compare by memcmp() */
      19  #define UL_FILEEQ_INTROSIZ	32
      20  
      21  struct ul_fileeq_data {
      22  	unsigned char intro[UL_FILEEQ_INTROSIZ];
      23  	unsigned char *blocks;
      24  	size_t nblocks;
      25  	size_t maxblocks;
      26  	int fd;
      27  	const char *name;
      28  	bool is_eof;
      29  };
      30  
      31  struct ul_fileeq {
      32  	int fd_api;	/* Crypto socket */
      33  	int fd_cip;	/* Cipher handler */
      34  
      35  	size_t readsiz;
      36  	uint64_t filesiz;
      37  	uint64_t blocksmax;
      38  	const struct ul_fileeq_method *method;
      39  
      40  	/* UL_FILEEQ_MEMCMP buffers */
      41  	unsigned char *buf_a;
      42  	unsigned char *buf_b;
      43  	unsigned char *buf_last;
      44  };
      45  
      46  extern int ul_fileeq_init(struct ul_fileeq *eq, const char *method);
      47  extern void ul_fileeq_deinit(struct ul_fileeq *eq);
      48  
      49  
      50  extern int ul_fileeq_data_associated(struct ul_fileeq_data *data);
      51  extern void ul_fileeq_data_close_file(struct ul_fileeq_data *data);
      52  extern void ul_fileeq_data_init(struct ul_fileeq_data *data);
      53  extern void ul_fileeq_data_deinit(struct ul_fileeq_data *data);
      54  extern void ul_fileeq_data_set_file(struct ul_fileeq_data *data,
      55  				    const char *name);
      56  extern size_t ul_fileeq_set_size(struct ul_fileeq *eq, uint64_t filesiz,
      57                                   size_t readsiz, size_t memsiz);
      58  
      59  extern int ul_fileeq(struct ul_fileeq *eq,
      60                struct ul_fileeq_data *a, struct ul_fileeq_data *b);
      61  
      62  #endif /* UTIL_LINUX_FILEEQ */