Skip to content
Newer
Older
100644 197 lines (171 sloc) 7.12 KB
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
1 /*
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
2 * Copyright (c) 2011 Alex Hornung <alex@alexhornung.com>.
3 * All rights reserved.
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
adacd75 @bwalex shuffle things around, cleanup
authored Jul 3, 2011
29
1af29c1 @bwalex rename tc-play => tcplay
authored Jul 3, 2011
30 /* Version of tcplay */
adacd75 @bwalex shuffle things around, cleanup
authored Jul 3, 2011
31 #define MAJ_VER 0
32 #define MIN_VER 8
33
34
fa29c84 @bwalex refactoring in preparation for hidden vol support
authored May 13, 2011
35 #define MAX_BLKSZ 4096
2dc9cd0 @bwalex WIP! - support for creating TC volumes
authored May 16, 2011
36 #define MAX_KEYSZ 192
fa29c84 @bwalex refactoring in preparation for hidden vol support
authored May 13, 2011
37 #define HDRSZ 512
38 #define HDR_OFFSET_SYS 31744 /* 512 * (63 -1) */
39 #define TC_SIG "TRUE"
40 #define MAX_PASSSZ 64
41 #define KPOOL_SZ 64
42 #define MAX_KFILE_SZ 1048576 /* 1 MB */
43 #define MAX_KEYFILES 256
44 #define HDR_OFFSET_HIDDEN 65536
2dc9cd0 @bwalex WIP! - support for creating TC volumes
authored May 16, 2011
45 #define SALT_LEN 64
46 #define MIN_VOL_BLOCKS 256
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
47 #define MAX_CIPHER_CHAINS 64
94d9e91 @bwalex major refactoring (move out info & map)
authored Jul 3, 2011
48 #define DEFAULT_RETRIES 3
69686eb @bwalex improve secure_erase speed; add SIGINFO support
authored Jul 3, 2011
49 #define ERASE_BUFFER_SIZE 4*1024*1024 /* 4 MB */
fa29c84 @bwalex refactoring in preparation for hidden vol support
authored May 13, 2011
50
51 /* TrueCrypt Volume flags */
52 #define TC_VOLFLAG_SYSTEM 0x01 /* system encryption */
53 #define TC_VOLFLAG_INPLACE 0x02 /* non-system in-place-encrypted volume */
54
05bf0a1 @bwalex Start C API work
authored Jul 3, 2011
55 #define LOG_BUFFER_SZ 1024
b66934b @bwalex restore default of debug off
authored Jul 2, 2011
56 #if 0
a250434 @bwalex almost-baked cascaded cipher support
authored Jul 2, 2011
57 #define DEBUG 1
58 #endif
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
59
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
60 #include <uuid.h>
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
61
62 struct pbkdf_prf_algo {
0c6d6a0 @bwalex big warning cleanup
authored Jul 3, 2011
63 const char *name;
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
64 int iteration_count;
65 };
66
67 struct tc_crypto_algo {
0c6d6a0 @bwalex big warning cleanup
authored Jul 3, 2011
68 const char *name;
69 const char *dm_crypt_str;
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
70 int klen;
71 int ivlen;
72 };
73
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
74 struct tc_cipher_chain {
75 struct tc_crypto_algo *cipher;
76 unsigned char *key;
a250434 @bwalex almost-baked cascaded cipher support
authored Jul 2, 2011
77 char dm_key[MAX_KEYSZ*2 + 1];
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
78
79 struct tc_cipher_chain *prev;
80 struct tc_cipher_chain *next;
81 };
82
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
83 struct tchdr_enc {
2dc9cd0 @bwalex WIP! - support for creating TC volumes
authored May 16, 2011
84 unsigned char salt[SALT_LEN]; /* Salt for PBKDF */
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
85 unsigned char enc[448]; /* Encrypted part of the header */
86 } __attribute__((__packed__));
87
88 struct tchdr_dec {
89 char tc_str[4]; /* ASCII string "TRUE" */
90 uint16_t tc_ver; /* Volume header format version */
91 uint16_t tc_min_ver;
92 uint32_t crc_keys; /* CRC32 of the key section */
93 uint64_t vol_ctime; /* Volume creation time */
94 uint64_t hdr_ctime; /* Header creation time */
95 uint64_t sz_hidvol; /* Size of hidden volume (set to zero
96 in non-hidden volumes) */
97 uint64_t sz_vol; /* Size of volume */
98 uint64_t off_mk_scope; /* Byte offset of the start of the
99 master key scope */
100 uint64_t sz_mk_scope; /* Size of the encrypted area within
101 the master key scope */
102 uint32_t flags; /* Flag bits
103 (bit 0: system encryption;
104 bit 1: non-system in-place-encrypted volume;
105 bits 2–31 are reserved) */
106 uint32_t sec_sz; /* Sector size (in bytes) */
107 unsigned char unused3[120];
108 uint32_t crc_dhdr; /* CRC32 of dec. header (except keys) */
109 unsigned char keys[256];
110 } __attribute__((__packed__));
111
112 struct tcplay_info {
113 const char *dev;
114 struct tchdr_dec *hdr;
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
115 struct tc_cipher_chain *cipher_chain;
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
116 struct pbkdf_prf_algo *pbkdf_prf;
a250434 @bwalex almost-baked cascaded cipher support
authored Jul 2, 2011
117 char key[MAX_KEYSZ*2 + 1];
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
118 off_t start; /* Logical volume offset in table */
119 size_t size; /* Volume size */
120
121 off_t skip; /* IV offset */
122 off_t offset; /* Block offset */
123
124 /* Populated by dm_setup */
125 uuid_t uuid;
126 };
127
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
128 void *read_to_safe_mem(const char *file, off_t offset, size_t *sz);
129 int get_random(unsigned char *buf, size_t len);
130 int secure_erase(const char *dev, size_t bytes, size_t blksz);
131 int get_disk_info(const char *dev, size_t *blocks, size_t *bsize);
132 int write_mem(const char *dev, off_t offset, size_t blksz, void *mem, size_t bytes);
0c6d6a0 @bwalex big warning cleanup
authored Jul 3, 2011
133 int read_passphrase(const char *prompt, char *pass, size_t passlen);
fff7218 @bwalex Initial commit of current state
authored May 13, 2011
134
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
135 int tc_crypto_init(void);
a250434 @bwalex almost-baked cascaded cipher support
authored Jul 2, 2011
136 int tc_cipher_chain_populate_keys(struct tc_cipher_chain *cipher_chain,
137 unsigned char *key);
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
138 int tc_encrypt(struct tc_cipher_chain *cipher_chain, unsigned char *key,
31d65e4 @bwalex Improve support for different cipher methods
authored Jul 2, 2011
139 unsigned char *iv,
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
140 unsigned char *in, int in_len, unsigned char *out);
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
141 int tc_decrypt(struct tc_cipher_chain *cipher_chain, unsigned char *key,
31d65e4 @bwalex Improve support for different cipher methods
authored Jul 2, 2011
142 unsigned char *iv,
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
143 unsigned char *in, int in_len, unsigned char *out);
144 int pbkdf2(const char *pass, int passlen, const unsigned char *salt, int saltlen,
145 int iter, const char *hash_name, int keylen, unsigned char *out);
146 int apply_keyfiles(unsigned char *pass, size_t pass_memsz, const char *keyfiles[],
147 int nkeyfiles);
148
149 struct tchdr_enc *create_hdr(unsigned char *pass, int passlen,
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
150 struct pbkdf_prf_algo *prf_algo, struct tc_cipher_chain *cipher_chain,
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
151 size_t sec_sz, size_t total_blocks,
152 off_t offset, size_t blocks, int hidden);
6ee09f3 @bwalex half-baked cascaded cipher support
authored Jul 2, 2011
153 struct tchdr_dec *decrypt_hdr(struct tchdr_enc *ehdr,
154 struct tc_cipher_chain *cipher_chain, unsigned char *key);
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
155 int verify_hdr(struct tchdr_dec *hdr);
156
157 void *_alloc_safe_mem(size_t req_sz, const char *file, int line);
158 void _free_safe_mem(void *mem, const char *file, int line);
159 void check_and_purge_safe_mem(void);
160
0c6d6a0 @bwalex big warning cleanup
authored Jul 3, 2011
161 struct tc_crypto_algo *check_cipher(const char *cipher, int quiet);
05bf0a1 @bwalex Start C API work
authored Jul 3, 2011
162 struct tc_cipher_chain *check_cipher_chain(char *cipher_chain, int quiet);
163 struct pbkdf_prf_algo *check_prf_algo(char *algo, int quiet);
adacd75 @bwalex shuffle things around, cleanup
authored Jul 3, 2011
164
2e3a80c @bwalex several minor fixes/cleanups
authored Jul 8, 2011
165 int tc_play_init(void);
0c6d6a0 @bwalex big warning cleanup
authored Jul 3, 2011
166 void tc_log(int err, const char *fmt, ...);
adacd75 @bwalex shuffle things around, cleanup
authored Jul 3, 2011
167 void print_info(struct tcplay_info *info);
168 int adjust_info(struct tcplay_info *info, struct tcplay_info *hinfo);
169 int process_hdr(const char *dev, unsigned char *pass, int passlen,
170 struct tchdr_enc *ehdr, struct tcplay_info **pinfo);
171 int create_volume(const char *dev, int hidden, const char *keyfiles[],
172 int nkeyfiles, const char *h_keyfiles[], int n_hkeyfiles,
05bf0a1 @bwalex Start C API work
authored Jul 3, 2011
173 struct pbkdf_prf_algo *prf_algo, struct tc_cipher_chain *cipher_chain,
174 char *passphrase, char *h_passphrase, size_t hidden_blocks_in,
175 int interactive);
94d9e91 @bwalex major refactoring (move out info & map)
authored Jul 3, 2011
176 int info_volume(const char *device, int sflag, const char *sys_dev,
177 int protect_hidden, const char *keyfiles[], int nkeyfiles,
178 const char *h_keyfiles[], int n_hkeyfiles,
179 char *passphrase, char *passphrase_hidden, int interactive, int retries);
180 int map_volume(const char *map_name, const char *device, int sflag,
181 const char *sys_dev, int protect_hidden, const char *keyfiles[],
182 int nkeyfiles, const char *h_keyfiles[], int n_hkeyfiles,
183 char *passphrase, char *passphrase_hidden, int interactive, int retries);
adacd75 @bwalex shuffle things around, cleanup
authored Jul 3, 2011
184 int dm_setup(const char *mapname, struct tcplay_info *info);
185
69686eb @bwalex improve secure_erase speed; add SIGINFO support
authored Jul 3, 2011
186 typedef void(*summary_fn_t)(void);
187
05bf0a1 @bwalex Start C API work
authored Jul 3, 2011
188 extern int tc_internal_verbose;
189 extern char tc_internal_log_buffer[];
69686eb @bwalex improve secure_erase speed; add SIGINFO support
authored Jul 3, 2011
190 extern summary_fn_t summary_fn;
05bf0a1 @bwalex Start C API work
authored Jul 3, 2011
191
dedd95c @bwalex major refactoring, bugfixes
authored May 17, 2011
192 #define alloc_safe_mem(x) \
193 _alloc_safe_mem(x, __FILE__, __LINE__)
194
195 #define free_safe_mem(x) \
196 _free_safe_mem(x, __FILE__, __LINE__)
Something went wrong with that request. Please try again.