Lines Matching refs:ci
136 const u8 *raw_key, const struct fscrypt_info *ci) in fscrypt_prepare_key() argument
140 if (fscrypt_using_inline_encryption(ci)) in fscrypt_prepare_key()
141 return fscrypt_prepare_inline_crypt_key(prep_key, raw_key, ci); in fscrypt_prepare_key()
143 tfm = fscrypt_allocate_skcipher(ci->ci_mode, raw_key, ci->ci_inode); in fscrypt_prepare_key()
166 int fscrypt_set_per_file_enc_key(struct fscrypt_info *ci, const u8 *raw_key) in fscrypt_set_per_file_enc_key() argument
168 ci->ci_owns_key = true; in fscrypt_set_per_file_enc_key()
169 return fscrypt_prepare_key(&ci->ci_enc_key, raw_key, ci); in fscrypt_set_per_file_enc_key()
172 static int setup_per_mode_enc_key(struct fscrypt_info *ci, in setup_per_mode_enc_key() argument
177 const struct inode *inode = ci->ci_inode; in setup_per_mode_enc_key()
179 struct fscrypt_mode *mode = ci->ci_mode; in setup_per_mode_enc_key()
191 if (fscrypt_is_key_prepared(prep_key, ci)) { in setup_per_mode_enc_key()
192 ci->ci_enc_key = *prep_key; in setup_per_mode_enc_key()
198 if (fscrypt_is_key_prepared(prep_key, ci)) in setup_per_mode_enc_key()
215 err = fscrypt_prepare_key(prep_key, mode_key, ci); in setup_per_mode_enc_key()
220 ci->ci_enc_key = *prep_key; in setup_per_mode_enc_key()
253 int fscrypt_derive_dirhash_key(struct fscrypt_info *ci, in fscrypt_derive_dirhash_key() argument
259 ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE, in fscrypt_derive_dirhash_key()
260 &ci->ci_dirhash_key); in fscrypt_derive_dirhash_key()
263 ci->ci_dirhash_key_initialized = true; in fscrypt_derive_dirhash_key()
267 void fscrypt_hash_inode_number(struct fscrypt_info *ci, in fscrypt_hash_inode_number() argument
270 WARN_ON(ci->ci_inode->i_ino == 0); in fscrypt_hash_inode_number()
273 ci->ci_hashed_ino = (u32)siphash_1u64(ci->ci_inode->i_ino, in fscrypt_hash_inode_number()
277 static int fscrypt_setup_iv_ino_lblk_32_key(struct fscrypt_info *ci, in fscrypt_setup_iv_ino_lblk_32_key() argument
282 err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_32_keys, in fscrypt_setup_iv_ino_lblk_32_key()
312 if (ci->ci_inode->i_ino) in fscrypt_setup_iv_ino_lblk_32_key()
313 fscrypt_hash_inode_number(ci, mk); in fscrypt_setup_iv_ino_lblk_32_key()
317 static int fscrypt_setup_v2_file_key(struct fscrypt_info *ci, in fscrypt_setup_v2_file_key() argument
323 if (ci->ci_policy.v2.flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) { in fscrypt_setup_v2_file_key()
332 err = setup_per_mode_enc_key(ci, mk, mk->mk_direct_keys, in fscrypt_setup_v2_file_key()
334 } else if (ci->ci_policy.v2.flags & in fscrypt_setup_v2_file_key()
342 err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_64_keys, in fscrypt_setup_v2_file_key()
345 } else if (ci->ci_policy.v2.flags & in fscrypt_setup_v2_file_key()
347 err = fscrypt_setup_iv_ino_lblk_32_key(ci, mk); in fscrypt_setup_v2_file_key()
353 ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE, in fscrypt_setup_v2_file_key()
354 derived_key, ci->ci_mode->keysize); in fscrypt_setup_v2_file_key()
358 err = fscrypt_set_per_file_enc_key(ci, derived_key); in fscrypt_setup_v2_file_key()
359 memzero_explicit(derived_key, ci->ci_mode->keysize); in fscrypt_setup_v2_file_key()
366 err = fscrypt_derive_dirhash_key(ci, mk); in fscrypt_setup_v2_file_key()
392 const struct fscrypt_info *ci) in fscrypt_valid_master_key_size() argument
396 if (ci->ci_policy.version == FSCRYPT_POLICY_V1) in fscrypt_valid_master_key_size()
397 min_keysize = ci->ci_mode->keysize; in fscrypt_valid_master_key_size()
399 min_keysize = ci->ci_mode->security_strength; in fscrypt_valid_master_key_size()
422 static int setup_file_encryption_key(struct fscrypt_info *ci, in setup_file_encryption_key() argument
430 err = fscrypt_select_encryption_impl(ci); in setup_file_encryption_key()
434 err = fscrypt_policy_to_key_spec(&ci->ci_policy, &mk_spec); in setup_file_encryption_key()
438 mk = fscrypt_find_master_key(ci->ci_inode->i_sb, &mk_spec); in setup_file_encryption_key()
440 if (ci->ci_policy.version != FSCRYPT_POLICY_V1) in setup_file_encryption_key()
449 return fscrypt_setup_v1_file_key_via_subscribed_keyrings(ci); in setup_file_encryption_key()
459 if (!fscrypt_valid_master_key_size(mk, ci)) { in setup_file_encryption_key()
464 switch (ci->ci_policy.version) { in setup_file_encryption_key()
466 err = fscrypt_setup_v1_file_key(ci, mk->mk_secret.raw); in setup_file_encryption_key()
469 err = fscrypt_setup_v2_file_key(ci, mk, need_dirhash_key); in setup_file_encryption_key()
488 static void put_crypt_info(struct fscrypt_info *ci) in put_crypt_info() argument
492 if (!ci) in put_crypt_info()
495 if (ci->ci_direct_key) in put_crypt_info()
496 fscrypt_put_direct_key(ci->ci_direct_key); in put_crypt_info()
497 else if (ci->ci_owns_key) in put_crypt_info()
498 fscrypt_destroy_prepared_key(ci->ci_inode->i_sb, in put_crypt_info()
499 &ci->ci_enc_key); in put_crypt_info()
501 mk = ci->ci_master_key; in put_crypt_info()
510 list_del(&ci->ci_master_key_link); in put_crypt_info()
514 memzero_explicit(ci, sizeof(*ci)); in put_crypt_info()
515 kmem_cache_free(fscrypt_info_cachep, ci); in put_crypt_info()
742 const struct fscrypt_info *ci = fscrypt_get_info(inode); in fscrypt_drop_inode() local
750 if (!ci || !ci->ci_master_key) in fscrypt_drop_inode()
770 return !is_master_key_secret_present(&ci->ci_master_key->mk_secret); in fscrypt_drop_inode()