cryptodev patches
- add xts mode support - add 3DES algorithm support - other trivial fixes -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iQEcBAABAgAGBQJYXg4cAAoJEC7X/ekGPIZNAQoIAKzENXFRduW0d7jFIfiaOtcm ViwGx/yR9Krg4fsheC8H6HbGXBQTtQ26sD709+uSMxHmByAVB8cpm2L9cd+HPgzi Q1MaBiNgODNLan0dF+Q51BZtFiS4isspQ88SW7nMnOx/x31svzKpP1KXRAmrOhMP 99Wsj8AZNho0SZuZ6HO69fVrJmeaLqo12vDLu9U3n7ocYPVda6jgNWwDcQe8L+Ae 2LjmOj4B7FOp0eD/EdJ/XuVWIBKV6gWvvCXzwTq8UwBPYCZvAX1atReRwUWU4I6H MSwHwg0gHmJ9i1VNSBy8/lq0oaSMhRc569A8/vvGeCi7zmwiZ/x5qaNWMrzdtZw= =Df5g -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/gonglei/tags/cryptodev-next-20161224' into staging cryptodev patches - add xts mode support - add 3DES algorithm support - other trivial fixes # gpg: Signature made Sat 24 Dec 2016 05:56:44 GMT # gpg: using RSA key 0x2ED7FDE9063C864D # gpg: Good signature from "Gonglei <arei.gonglei@huawei.com>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 3EF1 8E53 3459 E6D1 963A 3C05 2ED7 FDE9 063C 864D * remotes/gonglei/tags/cryptodev-next-20161224: cryptodev: add 3des-ede support cryptodev: remove single-DES support in cryptodev cryptodev: add xts(aes) support cryptodev: fix the check of aes algorithm Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
ffe22bf510
@ -111,23 +111,42 @@ cryptodev_builtin_get_unused_session_index(
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define AES_KEYSIZE_128 16
|
||||||
|
#define AES_KEYSIZE_192 24
|
||||||
|
#define AES_KEYSIZE_256 32
|
||||||
|
#define AES_KEYSIZE_128_XTS AES_KEYSIZE_256
|
||||||
|
#define AES_KEYSIZE_256_XTS 64
|
||||||
|
|
||||||
static int
|
static int
|
||||||
cryptodev_builtin_get_aes_algo(uint32_t key_len, Error **errp)
|
cryptodev_builtin_get_aes_algo(uint32_t key_len, int mode, Error **errp)
|
||||||
{
|
{
|
||||||
int algo;
|
int algo;
|
||||||
|
|
||||||
if (key_len == 128 / 8) {
|
if (key_len == AES_KEYSIZE_128) {
|
||||||
algo = QCRYPTO_CIPHER_ALG_AES_128;
|
algo = QCRYPTO_CIPHER_ALG_AES_128;
|
||||||
} else if (key_len == 192 / 8) {
|
} else if (key_len == AES_KEYSIZE_192) {
|
||||||
algo = QCRYPTO_CIPHER_ALG_AES_192;
|
algo = QCRYPTO_CIPHER_ALG_AES_192;
|
||||||
} else if (key_len == 256 / 8) {
|
} else if (key_len == AES_KEYSIZE_256) { /* equals AES_KEYSIZE_128_XTS */
|
||||||
algo = QCRYPTO_CIPHER_ALG_AES_256;
|
if (mode == QCRYPTO_CIPHER_MODE_XTS) {
|
||||||
|
algo = QCRYPTO_CIPHER_ALG_AES_128;
|
||||||
|
} else {
|
||||||
|
algo = QCRYPTO_CIPHER_ALG_AES_256;
|
||||||
|
}
|
||||||
|
} else if (key_len == AES_KEYSIZE_256_XTS) {
|
||||||
|
if (mode == QCRYPTO_CIPHER_MODE_XTS) {
|
||||||
|
algo = QCRYPTO_CIPHER_ALG_AES_256;
|
||||||
|
} else {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
error_setg(errp, "Unsupported key length :%u", key_len);
|
goto err;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return algo;
|
return algo;
|
||||||
|
|
||||||
|
err:
|
||||||
|
error_setg(errp, "Unsupported key length :%u", key_len);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cryptodev_builtin_create_cipher_session(
|
static int cryptodev_builtin_create_cipher_session(
|
||||||
@ -155,32 +174,48 @@ static int cryptodev_builtin_create_cipher_session(
|
|||||||
|
|
||||||
switch (sess_info->cipher_alg) {
|
switch (sess_info->cipher_alg) {
|
||||||
case VIRTIO_CRYPTO_CIPHER_AES_ECB:
|
case VIRTIO_CRYPTO_CIPHER_AES_ECB:
|
||||||
|
mode = QCRYPTO_CIPHER_MODE_ECB;
|
||||||
algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
|
algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
|
||||||
errp);
|
mode, errp);
|
||||||
if (algo < 0) {
|
if (algo < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
mode = QCRYPTO_CIPHER_MODE_ECB;
|
|
||||||
break;
|
break;
|
||||||
case VIRTIO_CRYPTO_CIPHER_AES_CBC:
|
case VIRTIO_CRYPTO_CIPHER_AES_CBC:
|
||||||
|
mode = QCRYPTO_CIPHER_MODE_CBC;
|
||||||
algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
|
algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
|
||||||
errp);
|
mode, errp);
|
||||||
if (algo < 0) {
|
if (algo < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
mode = QCRYPTO_CIPHER_MODE_CBC;
|
|
||||||
break;
|
break;
|
||||||
case VIRTIO_CRYPTO_CIPHER_AES_CTR:
|
case VIRTIO_CRYPTO_CIPHER_AES_CTR:
|
||||||
|
mode = QCRYPTO_CIPHER_MODE_CTR;
|
||||||
algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
|
algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
|
||||||
errp);
|
mode, errp);
|
||||||
if (algo < 0) {
|
if (algo < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
mode = QCRYPTO_CIPHER_MODE_CTR;
|
|
||||||
break;
|
break;
|
||||||
case VIRTIO_CRYPTO_CIPHER_DES_ECB:
|
case VIRTIO_CRYPTO_CIPHER_AES_XTS:
|
||||||
algo = QCRYPTO_CIPHER_ALG_DES_RFB;
|
mode = QCRYPTO_CIPHER_MODE_XTS;
|
||||||
|
algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
|
||||||
|
mode, errp);
|
||||||
|
if (algo < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case VIRTIO_CRYPTO_CIPHER_3DES_ECB:
|
||||||
mode = QCRYPTO_CIPHER_MODE_ECB;
|
mode = QCRYPTO_CIPHER_MODE_ECB;
|
||||||
|
algo = QCRYPTO_CIPHER_ALG_3DES;
|
||||||
|
break;
|
||||||
|
case VIRTIO_CRYPTO_CIPHER_3DES_CBC:
|
||||||
|
mode = QCRYPTO_CIPHER_MODE_CBC;
|
||||||
|
algo = QCRYPTO_CIPHER_ALG_3DES;
|
||||||
|
break;
|
||||||
|
case VIRTIO_CRYPTO_CIPHER_3DES_CTR:
|
||||||
|
mode = QCRYPTO_CIPHER_MODE_CTR;
|
||||||
|
algo = QCRYPTO_CIPHER_ALG_3DES;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error_setg(errp, "Unsupported cipher alg :%u",
|
error_setg(errp, "Unsupported cipher alg :%u",
|
||||||
|
Loading…
Reference in New Issue
Block a user