1*86d7f5d3SJohn Marino #ifndef INTERNAL_H 2*86d7f5d3SJohn Marino #define INTERNAL_H 3*86d7f5d3SJohn Marino 4*86d7f5d3SJohn Marino #ifdef HAVE_CONFIG_H 5*86d7f5d3SJohn Marino # include "config.h" 6*86d7f5d3SJohn Marino #endif 7*86d7f5d3SJohn Marino 8*86d7f5d3SJohn Marino #include <stdint.h> 9*86d7f5d3SJohn Marino #include <stdarg.h> 10*86d7f5d3SJohn Marino #include <unistd.h> 11*86d7f5d3SJohn Marino #include <inttypes.h> 12*86d7f5d3SJohn Marino 13*86d7f5d3SJohn Marino #include "nls.h" 14*86d7f5d3SJohn Marino 15*86d7f5d3SJohn Marino #define SECTOR_SHIFT 9 16*86d7f5d3SJohn Marino #define SECTOR_SIZE (1 << SECTOR_SHIFT) 17*86d7f5d3SJohn Marino #define DEFAULT_ALIGNMENT 4096 18*86d7f5d3SJohn Marino 19*86d7f5d3SJohn Marino #define MAX_TTY_PASSWORD_LEN 512 20*86d7f5d3SJohn Marino 21*86d7f5d3SJohn Marino /* private struct crypt_options flags */ 22*86d7f5d3SJohn Marino 23*86d7f5d3SJohn Marino #define CRYPT_FLAG_FREE_DEVICE (1 << 24) 24*86d7f5d3SJohn Marino #define CRYPT_FLAG_FREE_CIPHER (1 << 25) 25*86d7f5d3SJohn Marino 26*86d7f5d3SJohn Marino #define CRYPT_FLAG_PRIVATE_MASK ((unsigned int)-1 << 24) 27*86d7f5d3SJohn Marino 28*86d7f5d3SJohn Marino #define at_least(a, b) ({ __typeof__(a) __at_least = (a); (__at_least >= (b))?__at_least:(b); }) 29*86d7f5d3SJohn Marino 30*86d7f5d3SJohn Marino struct hash_type { 31*86d7f5d3SJohn Marino char *name; 32*86d7f5d3SJohn Marino void *private; 33*86d7f5d3SJohn Marino int (*fn)(void *data, int size, char *key, 34*86d7f5d3SJohn Marino int sizep, const char *passphrase); 35*86d7f5d3SJohn Marino }; 36*86d7f5d3SJohn Marino 37*86d7f5d3SJohn Marino struct hash_backend { 38*86d7f5d3SJohn Marino const char *name; 39*86d7f5d3SJohn Marino struct hash_type * (*get_hashes)(void); 40*86d7f5d3SJohn Marino void (*free_hashes)(struct hash_type *hashes); 41*86d7f5d3SJohn Marino }; 42*86d7f5d3SJohn Marino 43*86d7f5d3SJohn Marino struct device_infos { 44*86d7f5d3SJohn Marino uint64_t size; 45*86d7f5d3SJohn Marino int readonly; 46*86d7f5d3SJohn Marino }; 47*86d7f5d3SJohn Marino 48*86d7f5d3SJohn Marino struct crypt_device; 49*86d7f5d3SJohn Marino int crypt_confirm(struct crypt_device *cd, const char *msg); 50*86d7f5d3SJohn Marino 51*86d7f5d3SJohn Marino void set_error_va(const char *fmt, va_list va); 52*86d7f5d3SJohn Marino void set_error(const char *fmt, ...); 53*86d7f5d3SJohn Marino const char *get_error(void); 54*86d7f5d3SJohn Marino void *safe_alloc(size_t size); 55*86d7f5d3SJohn Marino void safe_free(void *data); 56*86d7f5d3SJohn Marino void *safe_realloc(void *data, size_t size); 57*86d7f5d3SJohn Marino char *safe_strdup(const char *s); 58*86d7f5d3SJohn Marino void set_debug_level(int level); 59*86d7f5d3SJohn Marino 60*86d7f5d3SJohn Marino int init_crypto(void); 61*86d7f5d3SJohn Marino struct hash_backend *get_hash_backend(const char *name); 62*86d7f5d3SJohn Marino void put_hash_backend(struct hash_backend *backend); 63*86d7f5d3SJohn Marino int hash(const char *backend_name, const char *hash_name, 64*86d7f5d3SJohn Marino char *result, size_t size, 65*86d7f5d3SJohn Marino const char *passphrase, size_t sizep); 66*86d7f5d3SJohn Marino 67*86d7f5d3SJohn Marino void hexprint(char *d, int n); 68*86d7f5d3SJohn Marino 69*86d7f5d3SJohn Marino /* Device mapper backend */ 70*86d7f5d3SJohn Marino const char *dm_get_dir(void); 71*86d7f5d3SJohn Marino int dm_init(struct crypt_device *context, int check_kernel); 72*86d7f5d3SJohn Marino void dm_exit(void); 73*86d7f5d3SJohn Marino int dm_remove_device(const char *name, int force, uint64_t size); 74*86d7f5d3SJohn Marino int dm_status_device(const char *name); 75*86d7f5d3SJohn Marino int dm_query_device(const char *name, 76*86d7f5d3SJohn Marino char **device, 77*86d7f5d3SJohn Marino uint64_t *size, 78*86d7f5d3SJohn Marino uint64_t *skip, 79*86d7f5d3SJohn Marino uint64_t *offset, 80*86d7f5d3SJohn Marino char **cipher, 81*86d7f5d3SJohn Marino int *key_size, 82*86d7f5d3SJohn Marino char **key, 83*86d7f5d3SJohn Marino int *read_only, 84*86d7f5d3SJohn Marino int *suspended, 85*86d7f5d3SJohn Marino char **uuid); 86*86d7f5d3SJohn Marino int dm_create_device(const char *name, const char *device, const char *cipher, 87*86d7f5d3SJohn Marino const char *type, const char *uuid, 88*86d7f5d3SJohn Marino uint64_t size, uint64_t skip, uint64_t offset, 89*86d7f5d3SJohn Marino size_t key_size, const char *key, 90*86d7f5d3SJohn Marino int read_only, int reload); 91*86d7f5d3SJohn Marino int dm_suspend_and_wipe_key(const char *name); 92*86d7f5d3SJohn Marino int dm_resume_and_reinstate_key(const char *name, 93*86d7f5d3SJohn Marino size_t key_size, 94*86d7f5d3SJohn Marino const char *key); 95*86d7f5d3SJohn Marino 96*86d7f5d3SJohn Marino int sector_size_for_device(const char *device); 97*86d7f5d3SJohn Marino ssize_t write_blockwise(int fd, const void *buf, size_t count); 98*86d7f5d3SJohn Marino ssize_t read_blockwise(int fd, void *_buf, size_t count); 99*86d7f5d3SJohn Marino ssize_t write_lseek_blockwise(int fd, const char *buf, size_t count, off_t offset); 100*86d7f5d3SJohn Marino int device_ready(struct crypt_device *cd, const char *device, int mode); 101*86d7f5d3SJohn Marino int get_device_infos(const char *device, struct device_infos *infos, struct crypt_device *cd); 102*86d7f5d3SJohn Marino int wipe_device_header(const char *device, int sectors); 103*86d7f5d3SJohn Marino 104*86d7f5d3SJohn Marino void get_key(char *prompt, char **key, unsigned int *passLen, int key_size, 105*86d7f5d3SJohn Marino const char *key_file, int timeout, int how2verify, 106*86d7f5d3SJohn Marino struct crypt_device *cd); 107*86d7f5d3SJohn Marino 108*86d7f5d3SJohn Marino int parse_into_name_and_mode(const char *nameAndMode, char *name, char *mode); 109*86d7f5d3SJohn Marino 110*86d7f5d3SJohn Marino void logger(struct crypt_device *cd, int class, const char *file, int line, const char *format, ...); 111*86d7f5d3SJohn Marino #define log_dbg(x...) logger(NULL, CRYPT_LOG_DEBUG, __FILE__, __LINE__, x) 112*86d7f5d3SJohn Marino #define log_std(c, x...) logger(c, CRYPT_LOG_NORMAL, __FILE__, __LINE__, x) 113*86d7f5d3SJohn Marino #define log_verbose(c, x...) logger(c, CRYPT_LOG_VERBOSE, __FILE__, __LINE__, x) 114*86d7f5d3SJohn Marino #define log_err(c, x...) do { \ 115*86d7f5d3SJohn Marino logger(c, CRYPT_LOG_ERROR, __FILE__, __LINE__, x); \ 116*86d7f5d3SJohn Marino set_error(x); } while(0) 117*86d7f5d3SJohn Marino 118*86d7f5d3SJohn Marino int crypt_get_debug_level(void); 119*86d7f5d3SJohn Marino void debug_processes_using_device(const char *name); 120*86d7f5d3SJohn Marino 121*86d7f5d3SJohn Marino int crypt_memlock_inc(struct crypt_device *ctx); 122*86d7f5d3SJohn Marino int crypt_memlock_dec(struct crypt_device *ctx); 123*86d7f5d3SJohn Marino 124*86d7f5d3SJohn Marino void get_topology_alignment(const char *device, 125*86d7f5d3SJohn Marino unsigned long *required_alignment, /* bytes */ 126*86d7f5d3SJohn Marino unsigned long *alignment_offset, /* bytes */ 127*86d7f5d3SJohn Marino unsigned long default_alignment); 128*86d7f5d3SJohn Marino 129*86d7f5d3SJohn Marino #endif /* INTERNAL_H */ 130