Commit 0f0d596c authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by Daniel P. Berrangé
Browse files

crypto/block: introduce qcrypto_block_*crypt_helper functions



Introduce QCryptoBlock-based functions and use them where possible.
This is needed to implement thread-safe encrypt/decrypt operations.

Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: default avatarAlberto Garcia <berto@igalia.com>
Signed-off-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
parent 0270417c
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -1409,8 +1409,7 @@ qcrypto_block_luks_decrypt(QCryptoBlock *block,
{
    assert(QEMU_IS_ALIGNED(offset, QCRYPTO_BLOCK_LUKS_SECTOR_SIZE));
    assert(QEMU_IS_ALIGNED(len, QCRYPTO_BLOCK_LUKS_SECTOR_SIZE));
    return qcrypto_block_cipher_decrypt_helper(block->cipher,
                                               block->niv, block->ivgen,
    return qcrypto_block_decrypt_helper(block,
                                        QCRYPTO_BLOCK_LUKS_SECTOR_SIZE,
                                        offset, buf, len, errp);
}
@@ -1425,8 +1424,7 @@ qcrypto_block_luks_encrypt(QCryptoBlock *block,
{
    assert(QEMU_IS_ALIGNED(offset, QCRYPTO_BLOCK_LUKS_SECTOR_SIZE));
    assert(QEMU_IS_ALIGNED(len, QCRYPTO_BLOCK_LUKS_SECTOR_SIZE));
    return qcrypto_block_cipher_encrypt_helper(block->cipher,
                                               block->niv, block->ivgen,
    return qcrypto_block_encrypt_helper(block,
                                        QCRYPTO_BLOCK_LUKS_SECTOR_SIZE,
                                        offset, buf, len, errp);
}
+6 −8
Original line number Diff line number Diff line
@@ -152,8 +152,7 @@ qcrypto_block_qcow_decrypt(QCryptoBlock *block,
{
    assert(QEMU_IS_ALIGNED(offset, QCRYPTO_BLOCK_QCOW_SECTOR_SIZE));
    assert(QEMU_IS_ALIGNED(len, QCRYPTO_BLOCK_QCOW_SECTOR_SIZE));
    return qcrypto_block_cipher_decrypt_helper(block->cipher,
                                               block->niv, block->ivgen,
    return qcrypto_block_decrypt_helper(block,
                                        QCRYPTO_BLOCK_QCOW_SECTOR_SIZE,
                                        offset, buf, len, errp);
}
@@ -168,8 +167,7 @@ qcrypto_block_qcow_encrypt(QCryptoBlock *block,
{
    assert(QEMU_IS_ALIGNED(offset, QCRYPTO_BLOCK_QCOW_SECTOR_SIZE));
    assert(QEMU_IS_ALIGNED(len, QCRYPTO_BLOCK_QCOW_SECTOR_SIZE));
    return qcrypto_block_cipher_encrypt_helper(block->cipher,
                                               block->niv, block->ivgen,
    return qcrypto_block_encrypt_helper(block,
                                        QCRYPTO_BLOCK_QCOW_SECTOR_SIZE,
                                        offset, buf, len, errp);
}
+28 −0
Original line number Diff line number Diff line
@@ -277,3 +277,31 @@ int qcrypto_block_cipher_encrypt_helper(QCryptoCipher *cipher,
                                          offset, buf, len,
                                          qcrypto_cipher_encrypt, errp);
}


int qcrypto_block_decrypt_helper(QCryptoBlock *block,
                                 int sectorsize,
                                 uint64_t offset,
                                 uint8_t *buf,
                                 size_t len,
                                 Error **errp)
{
    return do_qcrypto_block_cipher_encdec(block->cipher, block->niv,
                                          block->ivgen,
                                          sectorsize, offset, buf, len,
                                          qcrypto_cipher_decrypt, errp);
}


int qcrypto_block_encrypt_helper(QCryptoBlock *block,
                                 int sectorsize,
                                 uint64_t offset,
                                 uint8_t *buf,
                                 size_t len,
                                 Error **errp)
{
    return do_qcrypto_block_cipher_encdec(block->cipher, block->niv,
                                          block->ivgen,
                                          sectorsize, offset, buf, len,
                                          qcrypto_cipher_encrypt, errp);
}
+14 −0
Original line number Diff line number Diff line
@@ -96,4 +96,18 @@ int qcrypto_block_cipher_encrypt_helper(QCryptoCipher *cipher,
                                        size_t len,
                                        Error **errp);

int qcrypto_block_decrypt_helper(QCryptoBlock *block,
                                 int sectorsize,
                                 uint64_t offset,
                                 uint8_t *buf,
                                 size_t len,
                                 Error **errp);

int qcrypto_block_encrypt_helper(QCryptoBlock *block,
                                 int sectorsize,
                                 uint64_t offset,
                                 uint8_t *buf,
                                 size_t len,
                                 Error **errp);

#endif /* QCRYPTO_BLOCKPRIV_H */