Lines Matching refs:ci
149 static int init_essiv_generator(struct fscrypt_info *ci, const u8 *raw_key, in init_essiv_generator() argument
156 if (WARN_ON(ci->ci_mode->ivsize != AES_BLOCK_SIZE)) in init_essiv_generator()
163 ci->ci_essiv_tfm = essiv_tfm; in init_essiv_generator()
184 int fscrypt_set_derived_key(struct fscrypt_info *ci, const u8 *derived_key) in fscrypt_set_derived_key() argument
186 struct fscrypt_mode *mode = ci->ci_mode; in fscrypt_set_derived_key()
190 ctfm = fscrypt_allocate_skcipher(mode, derived_key, ci->ci_inode); in fscrypt_set_derived_key()
194 ci->ci_ctfm = ctfm; in fscrypt_set_derived_key()
197 err = init_essiv_generator(ci, derived_key, mode->keysize); in fscrypt_set_derived_key()
199 fscrypt_warn(ci->ci_inode, in fscrypt_set_derived_key()
208 static int setup_per_mode_key(struct fscrypt_info *ci, in setup_per_mode_key() argument
211 struct fscrypt_mode *mode = ci->ci_mode; in setup_per_mode_key()
232 tfm = fscrypt_allocate_skcipher(mode, mode_key, ci->ci_inode); in setup_per_mode_key()
244 ci->ci_ctfm = tfm; in setup_per_mode_key()
248 static int fscrypt_setup_v2_file_key(struct fscrypt_info *ci, in fscrypt_setup_v2_file_key() argument
254 if (ci->ci_policy.v2.flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) { in fscrypt_setup_v2_file_key()
263 if (!fscrypt_mode_supports_direct_key(ci->ci_mode)) { in fscrypt_setup_v2_file_key()
264 fscrypt_warn(ci->ci_inode, in fscrypt_setup_v2_file_key()
266 ci->ci_mode->friendly_name); in fscrypt_setup_v2_file_key()
269 return setup_per_mode_key(ci, mk); in fscrypt_setup_v2_file_key()
274 ci->ci_nonce, FS_KEY_DERIVATION_NONCE_SIZE, in fscrypt_setup_v2_file_key()
275 derived_key, ci->ci_mode->keysize); in fscrypt_setup_v2_file_key()
279 err = fscrypt_set_derived_key(ci, derived_key); in fscrypt_setup_v2_file_key()
280 memzero_explicit(derived_key, ci->ci_mode->keysize); in fscrypt_setup_v2_file_key()
294 static int setup_file_encryption_key(struct fscrypt_info *ci, in setup_file_encryption_key() argument
302 switch (ci->ci_policy.version) { in setup_file_encryption_key()
306 ci->ci_policy.v1.master_key_descriptor, in setup_file_encryption_key()
312 ci->ci_policy.v2.master_key_identifier, in setup_file_encryption_key()
320 key = fscrypt_find_master_key(ci->ci_inode->i_sb, &mk_spec); in setup_file_encryption_key()
323 ci->ci_policy.version != FSCRYPT_POLICY_V1) in setup_file_encryption_key()
332 return fscrypt_setup_v1_file_key_via_subscribed_keyrings(ci); in setup_file_encryption_key()
350 if (mk->mk_secret.size < ci->ci_mode->keysize) { in setup_file_encryption_key()
355 mk->mk_secret.size, ci->ci_mode->keysize); in setup_file_encryption_key()
360 switch (ci->ci_policy.version) { in setup_file_encryption_key()
362 err = fscrypt_setup_v1_file_key(ci, mk->mk_secret.raw); in setup_file_encryption_key()
365 err = fscrypt_setup_v2_file_key(ci, mk); in setup_file_encryption_key()
384 static void put_crypt_info(struct fscrypt_info *ci) in put_crypt_info() argument
388 if (!ci) in put_crypt_info()
391 if (ci->ci_direct_key) { in put_crypt_info()
392 fscrypt_put_direct_key(ci->ci_direct_key); in put_crypt_info()
393 } else if ((ci->ci_ctfm != NULL || ci->ci_essiv_tfm != NULL) && in put_crypt_info()
394 !fscrypt_is_direct_key_policy(&ci->ci_policy)) { in put_crypt_info()
395 crypto_free_skcipher(ci->ci_ctfm); in put_crypt_info()
396 crypto_free_cipher(ci->ci_essiv_tfm); in put_crypt_info()
399 key = ci->ci_master_key; in put_crypt_info()
412 list_del(&ci->ci_master_key_link); in put_crypt_info()
418 kmem_cache_free(fscrypt_info_cachep, ci); in put_crypt_info()
568 const struct fscrypt_info *ci = READ_ONCE(inode->i_crypt_info); in fscrypt_drop_inode() local
577 if (!ci || !ci->ci_master_key) in fscrypt_drop_inode()
579 mk = ci->ci_master_key->payload.data[0]; in fscrypt_drop_inode()