xref: /dflybsd-src/contrib/cryptsetup/lib/internal.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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