Changes since v2: According to Daniel's comments: - drop cryptodev kernel module as a cryptodev backend - rename crypto stuff to cryptodev stuff - change some files' license to GPLv2+ - remove cryptodev command line instead of QOM to define the cryptodev backend - rename all functions and structures in crypto sub-directory. - add full inline documentation for cryptodev.h And: - drop crypto-queue.c [Paolo] - merge some patches
Great thanks to Daniel and Paolo. Please review again, thanks! Changes since v1: - rmmove mixed endian-ness handler for virtio-crypto device, just use little-endian. [mst] - add sg list support according virtio-crypto spec v10 (will be posted soon). - fix a memory leak in session handler. - add a feature page link in qemu.org (http://qemu-project.org/Features/VirtioCrypto) - fix some trivial problems, sush as 's/Since 2.7/Since 2.8/g' in qapi-schema.json - rebase the latest qemu master tree. This patch series realize the framework and emulation of a new virtio crypto device, which is similar with virtio net device. - I introduce the cryptodev backend as the client of virtio crypto device which can be realized by different methods, such as cryptodev-backend-gcrypt in my series, vhost-crypto kernel module, vhost-user etc. - The patch set abides by the virtio crypto speccification. - The virtio crypto support symmetric algorithms (including CIPHER and algorithm chainning) at present, except HASH, MAC and AEAD services. - unsupport hot plug/unplug cryptodev backend at this moment. Firstly build QEMU with libgcrypt cryptography support. QEMU can then be started using the following parameters: qemu-system-x86_64 \ [...] \ -object cryptodev-backend-gcrypt,id=cryptodev0 \ -device virtio-crypto-pci,id=crypto0,cryptodev=cryptodev0 \ [...] The front-end linux kernel driver (Experimental at present) is publicly accessible from: https://github.com/gongleiarei/virtio-crypto-linux-driver.git After insmod virtio-crypto.ko, you can use cryptodev-linux test the crypto function in the guest. For example: linux-guest:/home/gonglei/cryptodev-linux/tests # ./cipher - requested cipher CRYPTO_AES_CBC, got cbc(aes) with driver virtio_crypto_aes_cbc AES Test passed requested cipher CRYPTO_AES_CBC, got cbc(aes) with driver virtio_crypto_aes_cbc requested cipher CRYPTO_AES_CBC, got cbc(aes) with driver virtio_crypto_aes_cbc Test passed QEMU code also can be accessible from: https://github.com/gongleiarei/qemu.git branch virtio-crypto For more information, please see: http://qemu-project.org/Features/VirtioCrypto Gonglei (10): cryptodev: introduce cryptodev backend interface cryptodev: add symmetric algorithm operation stuff virtio-crypto: introduce virtio_crypto.h cryptodev: introduce gcrypt lib as a new cryptodev backend virtio-crypto: add virtio crypto device emulation virtio-crypto-pci: add virtio crypto pci support virtio-crypto: set capacity of algorithms supported virtio-crypto: add control queue handler virtio-crypto: add data queue processing handler cryptodev: introduce an unified wrapper for crypto operation crypto/Makefile.objs | 2 + crypto/cryptodev-gcrypt.c | 329 +++++++++ crypto/cryptodev.c | 243 +++++++ hw/virtio/Makefile.objs | 2 + hw/virtio/virtio-crypto-pci.c | 76 +++ hw/virtio/virtio-crypto.c | 904 +++++++++++++++++++++++++ hw/virtio/virtio-pci.h | 15 + include/crypto/cryptodev.h | 276 ++++++++ include/hw/virtio/virtio-crypto.h | 100 +++ include/standard-headers/linux/virtio_crypto.h | 466 +++++++++++++ qemu-options.hx | 18 + 11 files changed, 2431 insertions(+) create mode 100644 crypto/cryptodev-gcrypt.c create mode 100644 crypto/cryptodev.c create mode 100644 hw/virtio/virtio-crypto-pci.c create mode 100644 hw/virtio/virtio-crypto.c create mode 100644 include/crypto/cryptodev.h create mode 100644 include/hw/virtio/virtio-crypto.h create mode 100644 include/standard-headers/linux/virtio_crypto.h -- 1.7.12.4