eCryptfs: Filename Encryption: Header updates
Extensions to the header file to support filename encryption. Signed-off-by: Michael Halcrow <mhalcrow@us.ibm.com> Cc: Dustin Kirkland <dustin.kirkland@gmail.com> Cc: Eric Sandeen <sandeen@redhat.com> Cc: Tyler Hicks <tchicks@us.ibm.com> Cc: David Kleikamp <shaggy@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
9c79f34f7e
commit
a34f60f748
|
@ -175,8 +175,8 @@ out:
|
||||||
*
|
*
|
||||||
* Returns zero on success; non-zero on error.
|
* Returns zero on success; non-zero on error.
|
||||||
*/
|
*/
|
||||||
static int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
|
int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
loff_t offset)
|
loff_t offset)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
char dst[MD5_DIGEST_SIZE];
|
char dst[MD5_DIGEST_SIZE];
|
||||||
|
|
|
@ -51,12 +51,16 @@
|
||||||
#define ECRYPTFS_VERSIONING_XATTR 0x00000010
|
#define ECRYPTFS_VERSIONING_XATTR 0x00000010
|
||||||
#define ECRYPTFS_VERSIONING_MULTKEY 0x00000020
|
#define ECRYPTFS_VERSIONING_MULTKEY 0x00000020
|
||||||
#define ECRYPTFS_VERSIONING_DEVMISC 0x00000040
|
#define ECRYPTFS_VERSIONING_DEVMISC 0x00000040
|
||||||
|
#define ECRYPTFS_VERSIONING_HMAC 0x00000080
|
||||||
|
#define ECRYPTFS_VERSIONING_FILENAME_ENCRYPTION 0x00000100
|
||||||
|
#define ECRYPTFS_VERSIONING_GCM 0x00000200
|
||||||
#define ECRYPTFS_VERSIONING_MASK (ECRYPTFS_VERSIONING_PASSPHRASE \
|
#define ECRYPTFS_VERSIONING_MASK (ECRYPTFS_VERSIONING_PASSPHRASE \
|
||||||
| ECRYPTFS_VERSIONING_PLAINTEXT_PASSTHROUGH \
|
| ECRYPTFS_VERSIONING_PLAINTEXT_PASSTHROUGH \
|
||||||
| ECRYPTFS_VERSIONING_PUBKEY \
|
| ECRYPTFS_VERSIONING_PUBKEY \
|
||||||
| ECRYPTFS_VERSIONING_XATTR \
|
| ECRYPTFS_VERSIONING_XATTR \
|
||||||
| ECRYPTFS_VERSIONING_MULTKEY \
|
| ECRYPTFS_VERSIONING_MULTKEY \
|
||||||
| ECRYPTFS_VERSIONING_DEVMISC)
|
| ECRYPTFS_VERSIONING_DEVMISC \
|
||||||
|
| ECRYPTFS_VERSIONING_FILENAME_ENCRYPTION)
|
||||||
#define ECRYPTFS_MAX_PASSWORD_LENGTH 64
|
#define ECRYPTFS_MAX_PASSWORD_LENGTH 64
|
||||||
#define ECRYPTFS_MAX_PASSPHRASE_BYTES ECRYPTFS_MAX_PASSWORD_LENGTH
|
#define ECRYPTFS_MAX_PASSPHRASE_BYTES ECRYPTFS_MAX_PASSWORD_LENGTH
|
||||||
#define ECRYPTFS_SALT_SIZE 8
|
#define ECRYPTFS_SALT_SIZE 8
|
||||||
|
@ -232,23 +236,39 @@ struct ecryptfs_key_sig {
|
||||||
char keysig[ECRYPTFS_SIG_SIZE_HEX];
|
char keysig[ECRYPTFS_SIG_SIZE_HEX];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ecryptfs_filename {
|
||||||
|
struct list_head crypt_stat_list;
|
||||||
|
#define ECRYPTFS_FILENAME_CONTAINS_DECRYPTED 0x00000001
|
||||||
|
u32 flags;
|
||||||
|
u32 seq_no;
|
||||||
|
char *filename;
|
||||||
|
char *encrypted_filename;
|
||||||
|
size_t filename_size;
|
||||||
|
size_t encrypted_filename_size;
|
||||||
|
char fnek_sig[ECRYPTFS_SIG_SIZE_HEX];
|
||||||
|
char dentry_name[ECRYPTFS_ENCRYPTED_DENTRY_NAME_LEN + 1];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the primary struct associated with each encrypted file.
|
* This is the primary struct associated with each encrypted file.
|
||||||
*
|
*
|
||||||
* TODO: cache align/pack?
|
* TODO: cache align/pack?
|
||||||
*/
|
*/
|
||||||
struct ecryptfs_crypt_stat {
|
struct ecryptfs_crypt_stat {
|
||||||
#define ECRYPTFS_STRUCT_INITIALIZED 0x00000001
|
#define ECRYPTFS_STRUCT_INITIALIZED 0x00000001
|
||||||
#define ECRYPTFS_POLICY_APPLIED 0x00000002
|
#define ECRYPTFS_POLICY_APPLIED 0x00000002
|
||||||
#define ECRYPTFS_NEW_FILE 0x00000004
|
#define ECRYPTFS_NEW_FILE 0x00000004
|
||||||
#define ECRYPTFS_ENCRYPTED 0x00000008
|
#define ECRYPTFS_ENCRYPTED 0x00000008
|
||||||
#define ECRYPTFS_SECURITY_WARNING 0x00000010
|
#define ECRYPTFS_SECURITY_WARNING 0x00000010
|
||||||
#define ECRYPTFS_ENABLE_HMAC 0x00000020
|
#define ECRYPTFS_ENABLE_HMAC 0x00000020
|
||||||
#define ECRYPTFS_ENCRYPT_IV_PAGES 0x00000040
|
#define ECRYPTFS_ENCRYPT_IV_PAGES 0x00000040
|
||||||
#define ECRYPTFS_KEY_VALID 0x00000080
|
#define ECRYPTFS_KEY_VALID 0x00000080
|
||||||
#define ECRYPTFS_METADATA_IN_XATTR 0x00000100
|
#define ECRYPTFS_METADATA_IN_XATTR 0x00000100
|
||||||
#define ECRYPTFS_VIEW_AS_ENCRYPTED 0x00000200
|
#define ECRYPTFS_VIEW_AS_ENCRYPTED 0x00000200
|
||||||
#define ECRYPTFS_KEY_SET 0x00000400
|
#define ECRYPTFS_KEY_SET 0x00000400
|
||||||
|
#define ECRYPTFS_ENCRYPT_FILENAMES 0x00000800
|
||||||
|
#define ECRYPTFS_ENCFN_USE_MOUNT_FNEK 0x00001000
|
||||||
|
#define ECRYPTFS_ENCFN_USE_FEK 0x00002000
|
||||||
u32 flags;
|
u32 flags;
|
||||||
unsigned int file_version;
|
unsigned int file_version;
|
||||||
size_t iv_bytes;
|
size_t iv_bytes;
|
||||||
|
@ -597,6 +617,15 @@ struct ecryptfs_open_req {
|
||||||
int ecryptfs_interpose(struct dentry *hidden_dentry,
|
int ecryptfs_interpose(struct dentry *hidden_dentry,
|
||||||
struct dentry *this_dentry, struct super_block *sb,
|
struct dentry *this_dentry, struct super_block *sb,
|
||||||
u32 flags);
|
u32 flags);
|
||||||
|
int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
|
||||||
|
struct dentry *lower_dentry,
|
||||||
|
struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
|
struct inode *ecryptfs_dir_inode,
|
||||||
|
struct nameidata *ecryptfs_nd);
|
||||||
|
int ecryptfs_decode_and_decrypt_filename(char **decrypted_name,
|
||||||
|
size_t *decrypted_name_size,
|
||||||
|
struct dentry *ecryptfs_dentry,
|
||||||
|
const char *name, size_t name_size);
|
||||||
int ecryptfs_fill_zeros(struct file *file, loff_t new_length);
|
int ecryptfs_fill_zeros(struct file *file, loff_t new_length);
|
||||||
int ecryptfs_decode_filename(struct ecryptfs_crypt_stat *crypt_stat,
|
int ecryptfs_decode_filename(struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
const char *name, int length,
|
const char *name, int length,
|
||||||
|
@ -604,6 +633,12 @@ int ecryptfs_decode_filename(struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
int ecryptfs_encode_filename(struct ecryptfs_crypt_stat *crypt_stat,
|
int ecryptfs_encode_filename(struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
const char *name, int length,
|
const char *name, int length,
|
||||||
char **encoded_name);
|
char **encoded_name);
|
||||||
|
int ecryptfs_encrypt_and_encode_filename(
|
||||||
|
char **encoded_name,
|
||||||
|
size_t *encoded_name_size,
|
||||||
|
struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
|
struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
|
||||||
|
const char *name, size_t name_size);
|
||||||
struct dentry *ecryptfs_lower_dentry(struct dentry *this_dentry);
|
struct dentry *ecryptfs_lower_dentry(struct dentry *this_dentry);
|
||||||
void ecryptfs_dump_hex(char *data, int bytes);
|
void ecryptfs_dump_hex(char *data, int bytes);
|
||||||
int virt_to_scatterlist(const void *addr, int size, struct scatterlist *sg,
|
int virt_to_scatterlist(const void *addr, int size, struct scatterlist *sg,
|
||||||
|
@ -730,5 +765,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size,
|
||||||
size_t *packet_size,
|
size_t *packet_size,
|
||||||
struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
|
struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
|
||||||
char *data, size_t max_packet_size);
|
char *data, size_t max_packet_size);
|
||||||
|
int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
|
loff_t offset);
|
||||||
|
|
||||||
#endif /* #ifndef ECRYPTFS_KERNEL_H */
|
#endif /* #ifndef ECRYPTFS_KERNEL_H */
|
||||||
|
|
Loading…
Reference in New Issue