Lines Matching refs:block

58     QCryptoBlock *block = g_new0(QCryptoBlock, 1);  in qcrypto_block_open()  local
60 block->format = options->format; in qcrypto_block_open()
66 g_free(block); in qcrypto_block_open()
70 block->driver = qcrypto_block_drivers[options->format]; in qcrypto_block_open()
72 if (block->driver->open(block, options, optprefix, in qcrypto_block_open()
75 g_free(block); in qcrypto_block_open()
79 qemu_mutex_init(&block->mutex); in qcrypto_block_open()
81 return block; in qcrypto_block_open()
92 QCryptoBlock *block = g_new0(QCryptoBlock, 1); in qcrypto_block_create() local
94 block->format = options->format; in qcrypto_block_create()
100 g_free(block); in qcrypto_block_create()
104 block->driver = qcrypto_block_drivers[options->format]; in qcrypto_block_create()
106 if (block->driver->create(block, options, optprefix, initfunc, in qcrypto_block_create()
108 g_free(block); in qcrypto_block_create()
112 qemu_mutex_init(&block->mutex); in qcrypto_block_create()
114 return block; in qcrypto_block_create()
118 static int qcrypto_block_headerlen_hdr_init_func(QCryptoBlock *block, in qcrypto_block_headerlen_hdr_init_func() argument
129 static int qcrypto_block_headerlen_hdr_write_func(QCryptoBlock *block, in qcrypto_block_headerlen_hdr_write_func() argument
153 int qcrypto_block_amend_options(QCryptoBlock *block, in qcrypto_block_amend_options() argument
161 if (options->format != block->format) { in qcrypto_block_amend_options()
167 if (!block->driver->amend) { in qcrypto_block_amend_options()
170 QCryptoBlockFormat_str(block->format)); in qcrypto_block_amend_options()
174 return block->driver->amend(block, in qcrypto_block_amend_options()
183 QCryptoBlockInfo *qcrypto_block_get_info(QCryptoBlock *block, in qcrypto_block_get_info() argument
188 info->format = block->format; in qcrypto_block_get_info()
190 if (block->driver->get_info && in qcrypto_block_get_info()
191 block->driver->get_info(block, info, errp) < 0) { in qcrypto_block_get_info()
200 int qcrypto_block_decrypt(QCryptoBlock *block, in qcrypto_block_decrypt() argument
206 return block->driver->decrypt(block, offset, buf, len, errp); in qcrypto_block_decrypt()
210 int qcrypto_block_encrypt(QCryptoBlock *block, in qcrypto_block_encrypt() argument
216 return block->driver->encrypt(block, offset, buf, len, errp); in qcrypto_block_encrypt()
220 QCryptoCipher *qcrypto_block_get_cipher(QCryptoBlock *block) in qcrypto_block_get_cipher() argument
228 assert(block->n_ciphers <= 1); in qcrypto_block_get_cipher()
229 return block->ciphers ? block->ciphers[0] : NULL; in qcrypto_block_get_cipher()
233 static QCryptoCipher *qcrypto_block_pop_cipher(QCryptoBlock *block) in qcrypto_block_pop_cipher() argument
237 qemu_mutex_lock(&block->mutex); in qcrypto_block_pop_cipher()
239 assert(block->n_free_ciphers > 0); in qcrypto_block_pop_cipher()
240 block->n_free_ciphers--; in qcrypto_block_pop_cipher()
241 cipher = block->ciphers[block->n_free_ciphers]; in qcrypto_block_pop_cipher()
243 qemu_mutex_unlock(&block->mutex); in qcrypto_block_pop_cipher()
249 static void qcrypto_block_push_cipher(QCryptoBlock *block, in qcrypto_block_push_cipher() argument
252 qemu_mutex_lock(&block->mutex); in qcrypto_block_push_cipher()
254 assert(block->n_free_ciphers < block->n_ciphers); in qcrypto_block_push_cipher()
255 block->ciphers[block->n_free_ciphers] = cipher; in qcrypto_block_push_cipher()
256 block->n_free_ciphers++; in qcrypto_block_push_cipher()
258 qemu_mutex_unlock(&block->mutex); in qcrypto_block_push_cipher()
262 int qcrypto_block_init_cipher(QCryptoBlock *block, in qcrypto_block_init_cipher() argument
270 assert(!block->ciphers && !block->n_ciphers && !block->n_free_ciphers); in qcrypto_block_init_cipher()
272 block->ciphers = g_new0(QCryptoCipher *, n_threads); in qcrypto_block_init_cipher()
275 block->ciphers[i] = qcrypto_cipher_new(alg, mode, key, nkey, errp); in qcrypto_block_init_cipher()
276 if (!block->ciphers[i]) { in qcrypto_block_init_cipher()
277 qcrypto_block_free_cipher(block); in qcrypto_block_init_cipher()
280 block->n_ciphers++; in qcrypto_block_init_cipher()
281 block->n_free_ciphers++; in qcrypto_block_init_cipher()
288 void qcrypto_block_free_cipher(QCryptoBlock *block) in qcrypto_block_free_cipher() argument
292 if (!block->ciphers) { in qcrypto_block_free_cipher()
296 assert(block->n_ciphers == block->n_free_ciphers); in qcrypto_block_free_cipher()
298 for (i = 0; i < block->n_ciphers; i++) { in qcrypto_block_free_cipher()
299 qcrypto_cipher_free(block->ciphers[i]); in qcrypto_block_free_cipher()
302 g_free(block->ciphers); in qcrypto_block_free_cipher()
303 block->ciphers = NULL; in qcrypto_block_free_cipher()
304 block->n_ciphers = block->n_free_ciphers = 0; in qcrypto_block_free_cipher()
307 QCryptoIVGen *qcrypto_block_get_ivgen(QCryptoBlock *block) in qcrypto_block_get_ivgen() argument
312 assert(block->n_ciphers <= 1); in qcrypto_block_get_ivgen()
313 return block->ivgen; in qcrypto_block_get_ivgen()
317 QCryptoHashAlgorithm qcrypto_block_get_kdf_hash(QCryptoBlock *block) in qcrypto_block_get_kdf_hash() argument
319 return block->kdfhash; in qcrypto_block_get_kdf_hash()
323 uint64_t qcrypto_block_get_payload_offset(QCryptoBlock *block) in qcrypto_block_get_payload_offset() argument
325 return block->payload_offset; in qcrypto_block_get_payload_offset()
329 uint64_t qcrypto_block_get_sector_size(QCryptoBlock *block) in qcrypto_block_get_sector_size() argument
331 return block->sector_size; in qcrypto_block_get_sector_size()
335 void qcrypto_block_free(QCryptoBlock *block) in qcrypto_block_free() argument
337 if (!block) { in qcrypto_block_free()
341 block->driver->cleanup(block); in qcrypto_block_free()
343 qcrypto_block_free_cipher(block); in qcrypto_block_free()
344 qcrypto_ivgen_free(block->ivgen); in qcrypto_block_free()
345 qemu_mutex_destroy(&block->mutex); in qcrypto_block_free()
346 g_free(block); in qcrypto_block_free()
439 int qcrypto_block_decrypt_helper(QCryptoBlock *block, in qcrypto_block_decrypt_helper() argument
447 QCryptoCipher *cipher = qcrypto_block_pop_cipher(block); in qcrypto_block_decrypt_helper()
449 ret = do_qcrypto_block_cipher_encdec(cipher, block->niv, block->ivgen, in qcrypto_block_decrypt_helper()
450 &block->mutex, sectorsize, offset, buf, in qcrypto_block_decrypt_helper()
453 qcrypto_block_push_cipher(block, cipher); in qcrypto_block_decrypt_helper()
458 int qcrypto_block_encrypt_helper(QCryptoBlock *block, in qcrypto_block_encrypt_helper() argument
466 QCryptoCipher *cipher = qcrypto_block_pop_cipher(block); in qcrypto_block_encrypt_helper()
468 ret = do_qcrypto_block_cipher_encdec(cipher, block->niv, block->ivgen, in qcrypto_block_encrypt_helper()
469 &block->mutex, sectorsize, offset, buf, in qcrypto_block_encrypt_helper()
472 qcrypto_block_push_cipher(block, cipher); in qcrypto_block_encrypt_helper()