crypto: extend unit tests to cover decryption too

The current unit test only verifies the encryption API,
resulting in us missing a recently introduced bug in the
decryption API from commit d3462e3. It was fortunately
later discovered & fixed by commit bd09594, thanks to the
QEMU I/O tests for qcow2 encryption, but we should really
detect this directly in the crypto unit tests. Also remove
an accidental debug message and simplify some asserts.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <1437468902-23230-1-git-send-email-berrange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Daniel P. Berrange 2015-07-21 09:55:02 +01:00 committed by Paolo Bonzini
parent 6775e2c429
commit 019c2ab862

View File

@ -226,12 +226,10 @@ static void test_cipher(const void *opaque)
const QCryptoCipherTestData *data = opaque;
QCryptoCipher *cipher;
Error *err = NULL;
uint8_t *key, *iv, *ciphertext, *plaintext, *outtext;
size_t nkey, niv, nciphertext, nplaintext;
char *outtexthex;
g_test_message("foo");
nkey = unhex_string(data->key, &key);
niv = unhex_string(data->iv, &iv);
nciphertext = unhex_string(data->ciphertext, &ciphertext);
@ -244,28 +242,42 @@ static void test_cipher(const void *opaque)
cipher = qcrypto_cipher_new(
data->alg, data->mode,
key, nkey,
&err);
&error_abort);
g_assert(cipher != NULL);
g_assert(err == NULL);
if (iv) {
g_assert(qcrypto_cipher_setiv(cipher,
iv, niv,
&err) == 0);
g_assert(err == NULL);
&error_abort) == 0);
}
g_assert(qcrypto_cipher_encrypt(cipher,
plaintext,
outtext,
nplaintext,
&err) == 0);
g_assert(err == NULL);
&error_abort) == 0);
outtexthex = hex_string(outtext, nciphertext);
g_assert_cmpstr(outtexthex, ==, data->ciphertext);
g_free(outtexthex);
if (iv) {
g_assert(qcrypto_cipher_setiv(cipher,
iv, niv,
&error_abort) == 0);
}
g_assert(qcrypto_cipher_decrypt(cipher,
ciphertext,
outtext,
nplaintext,
&error_abort) == 0);
outtexthex = hex_string(outtext, nplaintext);
g_assert_cmpstr(outtexthex, ==, data->plaintext);
g_free(outtext);
g_free(outtexthex);
g_free(key);