crypto: factor out conversion of QAPI to gcrypt constants
The conversion of cipher mode will shortly be required in more than one place. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
038b421788
commit
eac57306d8
|
@ -20,6 +20,56 @@
|
||||||
|
|
||||||
#include <gcrypt.h>
|
#include <gcrypt.h>
|
||||||
|
|
||||||
|
static int qcrypto_cipher_alg_to_gcry_alg(QCryptoCipherAlgorithm alg)
|
||||||
|
{
|
||||||
|
switch (alg) {
|
||||||
|
case QCRYPTO_CIPHER_ALG_DES:
|
||||||
|
return GCRY_CIPHER_DES;
|
||||||
|
case QCRYPTO_CIPHER_ALG_3DES:
|
||||||
|
return GCRY_CIPHER_3DES;
|
||||||
|
case QCRYPTO_CIPHER_ALG_AES_128:
|
||||||
|
return GCRY_CIPHER_AES128;
|
||||||
|
case QCRYPTO_CIPHER_ALG_AES_192:
|
||||||
|
return GCRY_CIPHER_AES192;
|
||||||
|
case QCRYPTO_CIPHER_ALG_AES_256:
|
||||||
|
return GCRY_CIPHER_AES256;
|
||||||
|
case QCRYPTO_CIPHER_ALG_CAST5_128:
|
||||||
|
return GCRY_CIPHER_CAST5;
|
||||||
|
case QCRYPTO_CIPHER_ALG_SERPENT_128:
|
||||||
|
return GCRY_CIPHER_SERPENT128;
|
||||||
|
case QCRYPTO_CIPHER_ALG_SERPENT_192:
|
||||||
|
return GCRY_CIPHER_SERPENT192;
|
||||||
|
case QCRYPTO_CIPHER_ALG_SERPENT_256:
|
||||||
|
return GCRY_CIPHER_SERPENT256;
|
||||||
|
case QCRYPTO_CIPHER_ALG_TWOFISH_128:
|
||||||
|
return GCRY_CIPHER_TWOFISH128;
|
||||||
|
case QCRYPTO_CIPHER_ALG_TWOFISH_256:
|
||||||
|
return GCRY_CIPHER_TWOFISH;
|
||||||
|
#ifdef CONFIG_CRYPTO_SM4
|
||||||
|
case QCRYPTO_CIPHER_ALG_SM4:
|
||||||
|
return GCRY_CIPHER_SM4;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return GCRY_CIPHER_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int qcrypto_cipher_mode_to_gcry_mode(QCryptoCipherMode mode)
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case QCRYPTO_CIPHER_MODE_ECB:
|
||||||
|
return GCRY_CIPHER_MODE_ECB;
|
||||||
|
case QCRYPTO_CIPHER_MODE_XTS:
|
||||||
|
return GCRY_CIPHER_MODE_XTS;
|
||||||
|
case QCRYPTO_CIPHER_MODE_CBC:
|
||||||
|
return GCRY_CIPHER_MODE_CBC;
|
||||||
|
case QCRYPTO_CIPHER_MODE_CTR:
|
||||||
|
return GCRY_CIPHER_MODE_CTR;
|
||||||
|
default:
|
||||||
|
return GCRY_CIPHER_MODE_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg,
|
bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg,
|
||||||
QCryptoCipherMode mode)
|
QCryptoCipherMode mode)
|
||||||
{
|
{
|
||||||
|
@ -188,72 +238,26 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (alg) {
|
gcryalg = qcrypto_cipher_alg_to_gcry_alg(alg);
|
||||||
case QCRYPTO_CIPHER_ALG_DES:
|
if (gcryalg == GCRY_CIPHER_NONE) {
|
||||||
gcryalg = GCRY_CIPHER_DES;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_3DES:
|
|
||||||
gcryalg = GCRY_CIPHER_3DES;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_AES_128:
|
|
||||||
gcryalg = GCRY_CIPHER_AES128;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_AES_192:
|
|
||||||
gcryalg = GCRY_CIPHER_AES192;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_AES_256:
|
|
||||||
gcryalg = GCRY_CIPHER_AES256;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_CAST5_128:
|
|
||||||
gcryalg = GCRY_CIPHER_CAST5;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_SERPENT_128:
|
|
||||||
gcryalg = GCRY_CIPHER_SERPENT128;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_SERPENT_192:
|
|
||||||
gcryalg = GCRY_CIPHER_SERPENT192;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_SERPENT_256:
|
|
||||||
gcryalg = GCRY_CIPHER_SERPENT256;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_TWOFISH_128:
|
|
||||||
gcryalg = GCRY_CIPHER_TWOFISH128;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_ALG_TWOFISH_256:
|
|
||||||
gcryalg = GCRY_CIPHER_TWOFISH;
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_CRYPTO_SM4
|
|
||||||
case QCRYPTO_CIPHER_ALG_SM4:
|
|
||||||
gcryalg = GCRY_CIPHER_SM4;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
error_setg(errp, "Unsupported cipher algorithm %s",
|
error_setg(errp, "Unsupported cipher algorithm %s",
|
||||||
QCryptoCipherAlgorithm_str(alg));
|
QCryptoCipherAlgorithm_str(alg));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
drv = &qcrypto_gcrypt_driver;
|
gcrymode = qcrypto_cipher_mode_to_gcry_mode(mode);
|
||||||
switch (mode) {
|
if (gcrymode == GCRY_CIPHER_MODE_NONE) {
|
||||||
case QCRYPTO_CIPHER_MODE_ECB:
|
|
||||||
gcrymode = GCRY_CIPHER_MODE_ECB;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_MODE_XTS:
|
|
||||||
gcrymode = GCRY_CIPHER_MODE_XTS;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_MODE_CBC:
|
|
||||||
gcrymode = GCRY_CIPHER_MODE_CBC;
|
|
||||||
break;
|
|
||||||
case QCRYPTO_CIPHER_MODE_CTR:
|
|
||||||
drv = &qcrypto_gcrypt_ctr_driver;
|
|
||||||
gcrymode = GCRY_CIPHER_MODE_CTR;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error_setg(errp, "Unsupported cipher mode %s",
|
error_setg(errp, "Unsupported cipher mode %s",
|
||||||
QCryptoCipherMode_str(mode));
|
QCryptoCipherMode_str(mode));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mode == QCRYPTO_CIPHER_MODE_CTR) {
|
||||||
|
drv = &qcrypto_gcrypt_ctr_driver;
|
||||||
|
} else {
|
||||||
|
drv = &qcrypto_gcrypt_driver;
|
||||||
|
}
|
||||||
|
|
||||||
ctx = g_new0(QCryptoCipherGcrypt, 1);
|
ctx = g_new0(QCryptoCipherGcrypt, 1);
|
||||||
ctx->base.driver = drv;
|
ctx->base.driver = drv;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue