mirror of https://github.com/xqemu/xqemu.git
crypto: add ability to query hash digest len
Add a qcrypto_hash_digest_len() method which allows querying of the raw digest size for a given hash algorithm. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
dd2bf9eb95
commit
7b36064c90
|
@ -30,6 +30,12 @@ static int qcrypto_hash_alg_map[QCRYPTO_HASH_ALG_LAST] = {
|
||||||
[QCRYPTO_HASH_ALG_SHA256] = GNUTLS_DIG_SHA256,
|
[QCRYPTO_HASH_ALG_SHA256] = GNUTLS_DIG_SHA256,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static size_t qcrypto_hash_alg_size[QCRYPTO_HASH_ALG_LAST] = {
|
||||||
|
[QCRYPTO_HASH_ALG_MD5] = 16,
|
||||||
|
[QCRYPTO_HASH_ALG_SHA1] = 20,
|
||||||
|
[QCRYPTO_HASH_ALG_SHA256] = 32,
|
||||||
|
};
|
||||||
|
|
||||||
gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg)
|
gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg)
|
||||||
{
|
{
|
||||||
if (alg < G_N_ELEMENTS(qcrypto_hash_alg_map)) {
|
if (alg < G_N_ELEMENTS(qcrypto_hash_alg_map)) {
|
||||||
|
@ -38,6 +44,15 @@ gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t qcrypto_hash_digest_len(QCryptoHashAlgorithm alg)
|
||||||
|
{
|
||||||
|
if (alg >= G_N_ELEMENTS(qcrypto_hash_alg_size)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return qcrypto_hash_alg_size[alg];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg,
|
int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg,
|
||||||
const struct iovec *iov,
|
const struct iovec *iov,
|
||||||
size_t niov,
|
size_t niov,
|
||||||
|
|
|
@ -44,6 +44,17 @@ typedef enum {
|
||||||
*/
|
*/
|
||||||
gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg);
|
gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qcrypto_hash_digest_len:
|
||||||
|
* @alg: the hash algorithm
|
||||||
|
*
|
||||||
|
* Determine the size of the hash digest in bytes
|
||||||
|
*
|
||||||
|
* Returns: the digest length in bytes
|
||||||
|
*/
|
||||||
|
size_t qcrypto_hash_digest_len(QCryptoHashAlgorithm alg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qcrypto_hash_bytesv:
|
* qcrypto_hash_bytesv:
|
||||||
* @alg: the hash algorithm
|
* @alg: the hash algorithm
|
||||||
|
|
|
@ -163,6 +163,11 @@ static void test_hash_digest(void)
|
||||||
for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
|
for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
|
||||||
int ret;
|
int ret;
|
||||||
char *digest;
|
char *digest;
|
||||||
|
size_t digestsize;
|
||||||
|
|
||||||
|
digestsize = qcrypto_hash_digest_len(i);
|
||||||
|
|
||||||
|
g_assert_cmpint(digestsize * 2, ==, strlen(expected_outputs[i]));
|
||||||
|
|
||||||
ret = qcrypto_hash_digest(i,
|
ret = qcrypto_hash_digest(i,
|
||||||
INPUT_TEXT,
|
INPUT_TEXT,
|
||||||
|
|
Loading…
Reference in New Issue