1237fead6SMichael Halcrow /** 2237fead6SMichael Halcrow * eCryptfs: Linux filesystem encryption layer 3237fead6SMichael Halcrow * Functions only useful for debugging. 4237fead6SMichael Halcrow * 5237fead6SMichael Halcrow * Copyright (C) 2006 International Business Machines Corp. 6237fead6SMichael Halcrow * Author(s): Michael A. Halcrow <mahalcro@us.ibm.com> 7237fead6SMichael Halcrow * 8237fead6SMichael Halcrow * This program is free software; you can redistribute it and/or 9237fead6SMichael Halcrow * modify it under the terms of the GNU General Public License as 10237fead6SMichael Halcrow * published by the Free Software Foundation; either version 2 of the 11237fead6SMichael Halcrow * License, or (at your option) any later version. 12237fead6SMichael Halcrow * 13237fead6SMichael Halcrow * This program is distributed in the hope that it will be useful, but 14237fead6SMichael Halcrow * WITHOUT ANY WARRANTY; without even the implied warranty of 15237fead6SMichael Halcrow * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16237fead6SMichael Halcrow * General Public License for more details. 17237fead6SMichael Halcrow * 18237fead6SMichael Halcrow * You should have received a copy of the GNU General Public License 19237fead6SMichael Halcrow * along with this program; if not, write to the Free Software 20237fead6SMichael Halcrow * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 21237fead6SMichael Halcrow * 02111-1307, USA. 22237fead6SMichael Halcrow */ 23237fead6SMichael Halcrow 24237fead6SMichael Halcrow #include "ecryptfs_kernel.h" 25237fead6SMichael Halcrow 26237fead6SMichael Halcrow /** 27237fead6SMichael Halcrow * ecryptfs_dump_auth_tok - debug function to print auth toks 28237fead6SMichael Halcrow * 29237fead6SMichael Halcrow * This function will print the contents of an ecryptfs authentication 30237fead6SMichael Halcrow * token. 31237fead6SMichael Halcrow */ 32237fead6SMichael Halcrow void ecryptfs_dump_auth_tok(struct ecryptfs_auth_tok *auth_tok) 33237fead6SMichael Halcrow { 34237fead6SMichael Halcrow char salt[ECRYPTFS_SALT_SIZE * 2 + 1]; 35237fead6SMichael Halcrow char sig[ECRYPTFS_SIG_SIZE_HEX + 1]; 36237fead6SMichael Halcrow 37237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, "Auth tok at mem loc [%p]:\n", 38237fead6SMichael Halcrow auth_tok); 39*e2bd99ecSMichael Halcrow if (auth_tok->flags & ECRYPTFS_PRIVATE_KEY) { 40237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * private key type\n"); 41237fead6SMichael Halcrow } else { 42237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * passphrase type\n"); 43237fead6SMichael Halcrow ecryptfs_to_hex(salt, auth_tok->token.password.salt, 44237fead6SMichael Halcrow ECRYPTFS_SALT_SIZE); 45237fead6SMichael Halcrow salt[ECRYPTFS_SALT_SIZE * 2] = '\0'; 46237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * salt = [%s]\n", salt); 47*e2bd99ecSMichael Halcrow if (auth_tok->token.password.flags & 48*e2bd99ecSMichael Halcrow ECRYPTFS_PERSISTENT_PASSWORD) { 49237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * persistent\n"); 50237fead6SMichael Halcrow } 51237fead6SMichael Halcrow memcpy(sig, auth_tok->token.password.signature, 52237fead6SMichael Halcrow ECRYPTFS_SIG_SIZE_HEX); 53237fead6SMichael Halcrow sig[ECRYPTFS_SIG_SIZE_HEX] = '\0'; 54237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * signature = [%s]\n", sig); 55237fead6SMichael Halcrow } 56237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * session_key.flags = [0x%x]\n", 57237fead6SMichael Halcrow auth_tok->session_key.flags); 58237fead6SMichael Halcrow if (auth_tok->session_key.flags 59237fead6SMichael Halcrow & ECRYPTFS_USERSPACE_SHOULD_TRY_TO_DECRYPT) 60237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, 61237fead6SMichael Halcrow " * Userspace decrypt request set\n"); 62237fead6SMichael Halcrow if (auth_tok->session_key.flags 63237fead6SMichael Halcrow & ECRYPTFS_USERSPACE_SHOULD_TRY_TO_ENCRYPT) 64237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, 65237fead6SMichael Halcrow " * Userspace encrypt request set\n"); 66237fead6SMichael Halcrow if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_DECRYPTED_KEY) { 67237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * Contains decrypted key\n"); 68237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, 69237fead6SMichael Halcrow " * session_key.decrypted_key_size = [0x%x]\n", 70237fead6SMichael Halcrow auth_tok->session_key.decrypted_key_size); 71237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * Decrypted session key " 72237fead6SMichael Halcrow "dump:\n"); 73237fead6SMichael Halcrow if (ecryptfs_verbosity > 0) 74237fead6SMichael Halcrow ecryptfs_dump_hex(auth_tok->session_key.decrypted_key, 75237fead6SMichael Halcrow ECRYPTFS_DEFAULT_KEY_BYTES); 76237fead6SMichael Halcrow } 77237fead6SMichael Halcrow if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_ENCRYPTED_KEY) { 78237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * Contains encrypted key\n"); 79237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, 80237fead6SMichael Halcrow " * session_key.encrypted_key_size = [0x%x]\n", 81237fead6SMichael Halcrow auth_tok->session_key.encrypted_key_size); 82237fead6SMichael Halcrow ecryptfs_printk(KERN_DEBUG, " * Encrypted session key " 83237fead6SMichael Halcrow "dump:\n"); 84237fead6SMichael Halcrow if (ecryptfs_verbosity > 0) 85237fead6SMichael Halcrow ecryptfs_dump_hex(auth_tok->session_key.encrypted_key, 86237fead6SMichael Halcrow auth_tok->session_key. 87237fead6SMichael Halcrow encrypted_key_size); 88237fead6SMichael Halcrow } 89237fead6SMichael Halcrow } 90237fead6SMichael Halcrow 91237fead6SMichael Halcrow /** 92237fead6SMichael Halcrow * ecryptfs_dump_hex - debug hex printer 93237fead6SMichael Halcrow * @data: string of bytes to be printed 94237fead6SMichael Halcrow * @bytes: number of bytes to print 95237fead6SMichael Halcrow * 96237fead6SMichael Halcrow * Dump hexadecimal representation of char array 97237fead6SMichael Halcrow */ 98237fead6SMichael Halcrow void ecryptfs_dump_hex(char *data, int bytes) 99237fead6SMichael Halcrow { 100237fead6SMichael Halcrow int i = 0; 101237fead6SMichael Halcrow int add_newline = 1; 102237fead6SMichael Halcrow 103237fead6SMichael Halcrow if (ecryptfs_verbosity < 1) 104237fead6SMichael Halcrow return; 105237fead6SMichael Halcrow if (bytes != 0) { 106237fead6SMichael Halcrow printk(KERN_DEBUG "0x%.2x.", (unsigned char)data[i]); 107237fead6SMichael Halcrow i++; 108237fead6SMichael Halcrow } 109237fead6SMichael Halcrow while (i < bytes) { 110237fead6SMichael Halcrow printk("0x%.2x.", (unsigned char)data[i]); 111237fead6SMichael Halcrow i++; 112237fead6SMichael Halcrow if (i % 16 == 0) { 113237fead6SMichael Halcrow printk("\n"); 114237fead6SMichael Halcrow add_newline = 0; 115237fead6SMichael Halcrow } else 116237fead6SMichael Halcrow add_newline = 1; 117237fead6SMichael Halcrow } 118237fead6SMichael Halcrow if (add_newline) 119237fead6SMichael Halcrow printk("\n"); 120237fead6SMichael Halcrow } 121237fead6SMichael Halcrow 122