diff options
Diffstat (limited to 'fs/ecryptfs/debug.c')
-rw-r--r-- | fs/ecryptfs/debug.c | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/fs/ecryptfs/debug.c b/fs/ecryptfs/debug.c new file mode 100644 index 000000000000..61f8e894284f --- /dev/null +++ b/fs/ecryptfs/debug.c | |||
@@ -0,0 +1,123 @@ | |||
1 | /** | ||
2 | * eCryptfs: Linux filesystem encryption layer | ||
3 | * Functions only useful for debugging. | ||
4 | * | ||
5 | * Copyright (C) 2006 International Business Machines Corp. | ||
6 | * Author(s): Michael A. Halcrow <mahalcro@us.ibm.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but | ||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||
21 | * 02111-1307, USA. | ||
22 | */ | ||
23 | |||
24 | #include "ecryptfs_kernel.h" | ||
25 | |||
26 | /** | ||
27 | * ecryptfs_dump_auth_tok - debug function to print auth toks | ||
28 | * | ||
29 | * This function will print the contents of an ecryptfs authentication | ||
30 | * token. | ||
31 | */ | ||
32 | void ecryptfs_dump_auth_tok(struct ecryptfs_auth_tok *auth_tok) | ||
33 | { | ||
34 | char salt[ECRYPTFS_SALT_SIZE * 2 + 1]; | ||
35 | char sig[ECRYPTFS_SIG_SIZE_HEX + 1]; | ||
36 | |||
37 | ecryptfs_printk(KERN_DEBUG, "Auth tok at mem loc [%p]:\n", | ||
38 | auth_tok); | ||
39 | if (ECRYPTFS_CHECK_FLAG(auth_tok->flags, ECRYPTFS_PRIVATE_KEY)) { | ||
40 | ecryptfs_printk(KERN_DEBUG, " * private key type\n"); | ||
41 | ecryptfs_printk(KERN_DEBUG, " * (NO PRIVATE KEY SUPPORT " | ||
42 | "IN ECRYPTFS VERSION 0.1)\n"); | ||
43 | } else { | ||
44 | ecryptfs_printk(KERN_DEBUG, " * passphrase type\n"); | ||
45 | ecryptfs_to_hex(salt, auth_tok->token.password.salt, | ||
46 | ECRYPTFS_SALT_SIZE); | ||
47 | salt[ECRYPTFS_SALT_SIZE * 2] = '\0'; | ||
48 | ecryptfs_printk(KERN_DEBUG, " * salt = [%s]\n", salt); | ||
49 | if (ECRYPTFS_CHECK_FLAG(auth_tok->token.password.flags, | ||
50 | ECRYPTFS_PERSISTENT_PASSWORD)) { | ||
51 | ecryptfs_printk(KERN_DEBUG, " * persistent\n"); | ||
52 | } | ||
53 | memcpy(sig, auth_tok->token.password.signature, | ||
54 | ECRYPTFS_SIG_SIZE_HEX); | ||
55 | sig[ECRYPTFS_SIG_SIZE_HEX] = '\0'; | ||
56 | ecryptfs_printk(KERN_DEBUG, " * signature = [%s]\n", sig); | ||
57 | } | ||
58 | ecryptfs_printk(KERN_DEBUG, " * session_key.flags = [0x%x]\n", | ||
59 | auth_tok->session_key.flags); | ||
60 | if (auth_tok->session_key.flags | ||
61 | & ECRYPTFS_USERSPACE_SHOULD_TRY_TO_DECRYPT) | ||
62 | ecryptfs_printk(KERN_DEBUG, | ||
63 | " * Userspace decrypt request set\n"); | ||
64 | if (auth_tok->session_key.flags | ||
65 | & ECRYPTFS_USERSPACE_SHOULD_TRY_TO_ENCRYPT) | ||
66 | ecryptfs_printk(KERN_DEBUG, | ||
67 | " * Userspace encrypt request set\n"); | ||
68 | if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_DECRYPTED_KEY) { | ||
69 | ecryptfs_printk(KERN_DEBUG, " * Contains decrypted key\n"); | ||
70 | ecryptfs_printk(KERN_DEBUG, | ||
71 | " * session_key.decrypted_key_size = [0x%x]\n", | ||
72 | auth_tok->session_key.decrypted_key_size); | ||
73 | ecryptfs_printk(KERN_DEBUG, " * Decrypted session key " | ||
74 | "dump:\n"); | ||
75 | if (ecryptfs_verbosity > 0) | ||
76 | ecryptfs_dump_hex(auth_tok->session_key.decrypted_key, | ||
77 | ECRYPTFS_DEFAULT_KEY_BYTES); | ||
78 | } | ||
79 | if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_ENCRYPTED_KEY) { | ||
80 | ecryptfs_printk(KERN_DEBUG, " * Contains encrypted key\n"); | ||
81 | ecryptfs_printk(KERN_DEBUG, | ||
82 | " * session_key.encrypted_key_size = [0x%x]\n", | ||
83 | auth_tok->session_key.encrypted_key_size); | ||
84 | ecryptfs_printk(KERN_DEBUG, " * Encrypted session key " | ||
85 | "dump:\n"); | ||
86 | if (ecryptfs_verbosity > 0) | ||
87 | ecryptfs_dump_hex(auth_tok->session_key.encrypted_key, | ||
88 | auth_tok->session_key. | ||
89 | encrypted_key_size); | ||
90 | } | ||
91 | } | ||
92 | |||
93 | /** | ||
94 | * ecryptfs_dump_hex - debug hex printer | ||
95 | * @data: string of bytes to be printed | ||
96 | * @bytes: number of bytes to print | ||
97 | * | ||
98 | * Dump hexadecimal representation of char array | ||
99 | */ | ||
100 | void ecryptfs_dump_hex(char *data, int bytes) | ||
101 | { | ||
102 | int i = 0; | ||
103 | int add_newline = 1; | ||
104 | |||
105 | if (ecryptfs_verbosity < 1) | ||
106 | return; | ||
107 | if (bytes != 0) { | ||
108 | printk(KERN_DEBUG "0x%.2x.", (unsigned char)data[i]); | ||
109 | i++; | ||
110 | } | ||
111 | while (i < bytes) { | ||
112 | printk("0x%.2x.", (unsigned char)data[i]); | ||
113 | i++; | ||
114 | if (i % 16 == 0) { | ||
115 | printk("\n"); | ||
116 | add_newline = 0; | ||
117 | } else | ||
118 | add_newline = 1; | ||
119 | } | ||
120 | if (add_newline) | ||
121 | printk("\n"); | ||
122 | } | ||
123 | |||