Lines Matching defs:crypt_stat

54  * @crypt_stat: Pointer to crypt_stat struct for the current inode
58 * Uses the allocated crypto context that crypt_stat references to
62 struct ecryptfs_crypt_stat *crypt_stat,
65 int rc = crypto_shash_tfm_digest(crypt_stat->hash_tfm, src, len, dst);
102 * @crypt_stat: Pointer to crypt_stat struct for the current inode
110 int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
119 ecryptfs_dump_hex(crypt_stat->root_iv, crypt_stat->iv_bytes);
125 memcpy(src, crypt_stat->root_iv, crypt_stat->iv_bytes);
126 memset((src + crypt_stat->iv_bytes), 0, 16);
127 snprintf((src + crypt_stat->iv_bytes), 16, "%lld", offset);
130 ecryptfs_dump_hex(src, (crypt_stat->iv_bytes + 16));
132 rc = ecryptfs_calculate_md5(dst, crypt_stat, src,
133 (crypt_stat->iv_bytes + 16));
139 memcpy(iv, dst, crypt_stat->iv_bytes);
142 ecryptfs_dump_hex(iv, crypt_stat->iv_bytes);
150 * @crypt_stat: Pointer to the crypt_stat struct to initialize.
152 * Initialize the crypt_stat structure.
154 int ecryptfs_init_crypt_stat(struct ecryptfs_crypt_stat *crypt_stat)
168 memset((void *)crypt_stat, 0, sizeof(struct ecryptfs_crypt_stat));
169 INIT_LIST_HEAD(&crypt_stat->keysig_list);
170 mutex_init(&crypt_stat->keysig_list_mutex);
171 mutex_init(&crypt_stat->cs_mutex);
172 mutex_init(&crypt_stat->cs_tfm_mutex);
173 crypt_stat->hash_tfm = tfm;
174 crypt_stat->flags |= ECRYPTFS_STRUCT_INITIALIZED;
181 * @crypt_stat: Pointer to the crypt_stat struct to initialize.
183 * Releases all memory associated with a crypt_stat struct.
185 void ecryptfs_destroy_crypt_stat(struct ecryptfs_crypt_stat *crypt_stat)
189 crypto_free_skcipher(crypt_stat->tfm);
190 crypto_free_shash(crypt_stat->hash_tfm);
192 &crypt_stat->keysig_list, crypt_stat_list) {
196 memset(crypt_stat, 0, sizeof(struct ecryptfs_crypt_stat));
281 * @crypt_stat: Pointer to the crypt_stat struct to initialize.
290 static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
299 BUG_ON(!crypt_stat || !crypt_stat->tfm
300 || !(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED));
303 crypt_stat->key_size);
304 ecryptfs_dump_hex(crypt_stat->key,
305 crypt_stat->key_size);
310 mutex_lock(&crypt_stat->cs_tfm_mutex);
311 req = skcipher_request_alloc(crypt_stat->tfm, GFP_NOFS);
313 mutex_unlock(&crypt_stat->cs_tfm_mutex);
322 if (!(crypt_stat->flags & ECRYPTFS_KEY_SET)) {
323 rc = crypto_skcipher_setkey(crypt_stat->tfm, crypt_stat->key,
324 crypt_stat->key_size);
329 mutex_unlock(&crypt_stat->cs_tfm_mutex);
333 crypt_stat->flags |= ECRYPTFS_KEY_SET;
335 mutex_unlock(&crypt_stat->cs_tfm_mutex);
356 static loff_t lower_offset_for_page(struct ecryptfs_crypt_stat *crypt_stat,
359 return ecryptfs_lower_header_size(crypt_stat) +
365 * @crypt_stat: crypt_stat containing cryptographic context for the
376 static int crypt_extent(struct ecryptfs_crypt_stat *crypt_stat,
385 size_t extent_size = crypt_stat->extent_size;
389 rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
406 rc = crypt_scatterlist(crypt_stat, &dst_sg, &src_sg, extent_size,
438 struct ecryptfs_crypt_stat *crypt_stat;
446 crypt_stat =
447 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat);
448 BUG_ON(!(crypt_stat->flags & ECRYPTFS_ENCRYPTED));
458 extent_offset < (PAGE_SIZE / crypt_stat->extent_size);
460 rc = crypt_extent(crypt_stat, enc_extent_page, page,
469 lower_offset = lower_offset_for_page(crypt_stat, page);
507 struct ecryptfs_crypt_stat *crypt_stat;
514 crypt_stat =
515 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat);
516 BUG_ON(!(crypt_stat->flags & ECRYPTFS_ENCRYPTED));
518 lower_offset = lower_offset_for_page(crypt_stat, page);
531 extent_offset < (PAGE_SIZE / crypt_stat->extent_size);
533 rc = crypt_extent(crypt_stat, page, page,
549 * @crypt_stat: Uninitialized crypt stats structure
556 int ecryptfs_init_crypt_ctx(struct ecryptfs_crypt_stat *crypt_stat)
564 crypt_stat->cipher, (int)strlen(crypt_stat->cipher),
565 crypt_stat->key_size << 3);
566 mutex_lock(&crypt_stat->cs_tfm_mutex);
567 if (crypt_stat->tfm) {
572 crypt_stat->cipher, "cbc");
575 crypt_stat->tfm = crypto_alloc_skcipher(full_alg_name, 0, 0);
576 if (IS_ERR(crypt_stat->tfm)) {
577 rc = PTR_ERR(crypt_stat->tfm);
578 crypt_stat->tfm = NULL;
584 crypto_skcipher_set_flags(crypt_stat->tfm,
590 mutex_unlock(&crypt_stat->cs_tfm_mutex);
594 static void set_extent_mask_and_shift(struct ecryptfs_crypt_stat *crypt_stat)
598 crypt_stat->extent_mask = 0xFFFFFFFF;
599 crypt_stat->extent_shift = 0;
600 if (crypt_stat->extent_size == 0)
602 extent_size_tmp = crypt_stat->extent_size;
605 crypt_stat->extent_mask <<= 1;
606 crypt_stat->extent_shift++;
610 void ecryptfs_set_default_sizes(struct ecryptfs_crypt_stat *crypt_stat)
614 crypt_stat->extent_size = ECRYPTFS_DEFAULT_EXTENT_SIZE;
615 set_extent_mask_and_shift(crypt_stat);
616 crypt_stat->iv_bytes = ECRYPTFS_DEFAULT_IV_BYTES;
617 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
618 crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
621 crypt_stat->metadata_size =
624 crypt_stat->metadata_size = PAGE_SIZE;
634 int ecryptfs_compute_root_iv(struct ecryptfs_crypt_stat *crypt_stat)
639 BUG_ON(crypt_stat->iv_bytes > MD5_DIGEST_SIZE);
640 BUG_ON(crypt_stat->iv_bytes <= 0);
641 if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) {
647 rc = ecryptfs_calculate_md5(dst, crypt_stat, crypt_stat->key,
648 crypt_stat->key_size);
654 memcpy(crypt_stat->root_iv, dst, crypt_stat->iv_bytes);
657 memset(crypt_stat->root_iv, 0, crypt_stat->iv_bytes);
658 crypt_stat->flags |= ECRYPTFS_SECURITY_WARNING;
663 static void ecryptfs_generate_new_key(struct ecryptfs_crypt_stat *crypt_stat)
665 get_random_bytes(crypt_stat->key, crypt_stat->key_size);
666 crypt_stat->flags |= ECRYPTFS_KEY_VALID;
667 ecryptfs_compute_root_iv(crypt_stat);
670 ecryptfs_dump_hex(crypt_stat->key,
671 crypt_stat->key_size);
677 * @crypt_stat: The inode's cryptographic context
684 struct ecryptfs_crypt_stat *crypt_stat,
688 crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
690 crypt_stat->flags |= ECRYPTFS_VIEW_AS_ENCRYPTED;
692 crypt_stat->flags |= ECRYPTFS_ENCRYPT_FILENAMES;
695 crypt_stat->flags |= ECRYPTFS_ENCFN_USE_MOUNT_FNEK;
698 crypt_stat->flags |= ECRYPTFS_ENCFN_USE_FEK;
703 struct ecryptfs_crypt_stat *crypt_stat,
709 mutex_lock(&crypt_stat->keysig_list_mutex);
717 rc = ecryptfs_add_keysig(crypt_stat, global_auth_tok->sig);
726 mutex_unlock(&crypt_stat->keysig_list_mutex);
732 * @crypt_stat: The inode's cryptographic context
738 struct ecryptfs_crypt_stat *crypt_stat,
741 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
743 ecryptfs_set_default_sizes(crypt_stat);
744 strcpy(crypt_stat->cipher, ECRYPTFS_DEFAULT_CIPHER);
745 crypt_stat->key_size = ECRYPTFS_DEFAULT_KEY_BYTES;
746 crypt_stat->flags &= ~(ECRYPTFS_KEY_VALID);
747 crypt_stat->file_version = ECRYPTFS_FILE_VERSION;
748 crypt_stat->mount_crypt_stat = mount_crypt_stat;
763 * via the set of signatures in the crypt_stat struct. Later, when
772 struct ecryptfs_crypt_stat *crypt_stat =
773 &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
780 ecryptfs_set_default_crypt_stat_vals(crypt_stat, mount_crypt_stat);
781 crypt_stat->flags |= (ECRYPTFS_ENCRYPTED | ECRYPTFS_KEY_VALID);
782 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
784 rc = ecryptfs_copy_mount_wide_sigs_to_inode_sigs(crypt_stat,
793 memcpy(crypt_stat->cipher,
796 crypt_stat->cipher[cipher_name_len] = '\0';
797 crypt_stat->key_size =
799 ecryptfs_generate_new_key(crypt_stat);
800 rc = ecryptfs_init_crypt_ctx(crypt_stat);
804 crypt_stat->cipher, rc);
846 * @crypt_stat: The cryptographic context
850 static void ecryptfs_process_flags(struct ecryptfs_crypt_stat *crypt_stat,
859 crypt_stat->flags |= ecryptfs_flag_map[i].local_flag;
861 crypt_stat->flags &= ~(ecryptfs_flag_map[i].local_flag);
863 crypt_stat->file_version = ((flags >> 24) & 0xFF);
887 struct ecryptfs_crypt_stat *crypt_stat,
894 if (crypt_stat->flags & ecryptfs_flag_map[i].local_flag)
897 flags |= ((((u8)crypt_stat->file_version) << 24) & 0xFF000000);
1001 struct ecryptfs_crypt_stat *crypt_stat,
1007 header_extent_size = (u32)crypt_stat->extent_size;
1009 (u16)(crypt_stat->metadata_size / crypt_stat->extent_size);
1023 * @crypt_stat: The cryptographic context
1051 struct ecryptfs_crypt_stat *crypt_stat,
1061 ecryptfs_write_crypt_stat_flags((page_virt + offset), crypt_stat,
1064 ecryptfs_write_header_metadata((page_virt + offset), crypt_stat,
1067 rc = ecryptfs_generate_key_packet_set((page_virt + offset), crypt_stat,
1147 struct ecryptfs_crypt_stat *crypt_stat =
1148 &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
1155 if (likely(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
1156 if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) {
1167 virt_len = crypt_stat->metadata_size;
1177 rc = ecryptfs_write_headers_virt(virt, virt_len, &size, crypt_stat,
1184 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
1203 static int parse_header_metadata(struct ecryptfs_crypt_stat *crypt_stat,
1214 crypt_stat->metadata_size = (((size_t)num_header_extents_at_front
1218 && (crypt_stat->metadata_size
1222 crypt_stat->metadata_size);
1229 * @crypt_stat: The cryptographic context
1235 static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat)
1237 crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
1243 struct ecryptfs_crypt_stat *crypt_stat;
1246 crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
1251 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
1252 file_size += crypt_stat->metadata_size;
1256 crypt_stat->flags |= ECRYPTFS_I_SIZE_INITIALIZED;
1262 * @crypt_stat: The cryptographic context
1272 struct ecryptfs_crypt_stat *crypt_stat,
1280 ecryptfs_set_default_sizes(crypt_stat);
1281 crypt_stat->mount_crypt_stat = &ecryptfs_superblock_to_private(
1287 if (!(crypt_stat->flags & ECRYPTFS_I_SIZE_INITIALIZED))
1290 ecryptfs_process_flags(crypt_stat, (page_virt + offset), &bytes_read);
1291 if (crypt_stat->file_version > ECRYPTFS_SUPPORTED_FILE_VERSION) {
1295 crypt_stat->file_version,
1301 if (crypt_stat->file_version >= 1) {
1302 rc = parse_header_metadata(crypt_stat, (page_virt + offset),
1310 set_default_header_data(crypt_stat);
1311 rc = ecryptfs_parse_packet_set(crypt_stat, (page_virt + offset),
1388 struct ecryptfs_crypt_stat *crypt_stat =
1389 &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
1394 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
1402 rc = ecryptfs_read_lower(page_virt, 0, crypt_stat->extent_size,
1405 rc = ecryptfs_read_headers_virt(page_virt, crypt_stat,
1419 rc = ecryptfs_read_headers_virt(page_virt, crypt_stat,
1428 if (crypt_stat->mount_crypt_stat->flags
1430 crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
1878 * @crypt_stat: The crypt_stat struct associated with the file anem to encode
1887 * pointed to by crypt_stat->tfm.