]>
Commit | Line | Data |
---|---|---|
faeb1b64 KZ |
1 | |
2 | /* | |
3 | * No copyright is claimed. This code is in the public domain; do with | |
4 | * it what you wish. | |
5 | */ | |
ee2d371c KZ |
6 | #ifndef UTIL_LINUX_FILEEQ |
7 | #define UTIL_LINUX_FILEEQ | |
8 | ||
9 | #include <stdlib.h> | |
10 | #include <stdint.h> | |
11 | #include <stdbool.h> | |
12 | ||
4f5e14fd KZ |
13 | #if defined(__linux__) && defined(HAVE_LINUX_IF_ALG_H) |
14 | # define USE_FILEEQ_CRYPTOAPI 1 | |
15 | #endif | |
16 | ||
dbb2fb39 | 17 | /* Number of bytes from the beginning of the file we always |
ee2d371c KZ |
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 */ |