mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
virCryptoHashBuf: return the length of the hash in bytes
virCryptoHashString also needs to know the size of the returned hash. Return it if the hash conversion succeeded so the caller does not need to access the hashinfo array. This should make virCryptoHashString build without gnutls. Also fixes the missing return value for the virCryptoHashBuf stub. Signed-off-by: Ján Tomko <jtomko@redhat.com> Suggested-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
This commit is contained in:
parent
ed11d1662d
commit
c25fbbec68
@ -54,7 +54,7 @@ struct virHashInfo {
|
|||||||
|
|
||||||
verify(ARRAY_CARDINALITY(hashinfo) == VIR_CRYPTO_HASH_LAST);
|
verify(ARRAY_CARDINALITY(hashinfo) == VIR_CRYPTO_HASH_LAST);
|
||||||
|
|
||||||
int
|
ssize_t
|
||||||
virCryptoHashBuf(virCryptoHash hash,
|
virCryptoHashBuf(virCryptoHash hash,
|
||||||
const char *input,
|
const char *input,
|
||||||
unsigned char *output)
|
unsigned char *output)
|
||||||
@ -74,16 +74,17 @@ virCryptoHashBuf(virCryptoHash hash,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return hashinfo[hash].hashlen;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
ssize_t
|
||||||
virCryptoHashBuf(virCryptoHash hash,
|
virCryptoHashBuf(virCryptoHash hash,
|
||||||
const char *input ATTRIBUTE_UNUSED,
|
const char *input ATTRIBUTE_UNUSED,
|
||||||
unsigned char *output ATTRIBUTE_UNUSED)
|
unsigned char *output ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
virReportError(VIR_ERR_INVALID_ARG,
|
virReportError(VIR_ERR_INVALID_ARG,
|
||||||
_("algorithm=%d is not supported"), hash);
|
_("algorithm=%d is not supported"), hash);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -93,18 +94,19 @@ virCryptoHashString(virCryptoHash hash,
|
|||||||
char **output)
|
char **output)
|
||||||
{
|
{
|
||||||
unsigned char buf[VIR_CRYPTO_LARGEST_DIGEST_SIZE];
|
unsigned char buf[VIR_CRYPTO_LARGEST_DIGEST_SIZE];
|
||||||
|
ssize_t rc;
|
||||||
size_t hashstrlen;
|
size_t hashstrlen;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
if (virCryptoHashBuf(hash, input, buf) < 0)
|
if ((rc = virCryptoHashBuf(hash, input, buf)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
hashstrlen = (hashinfo[hash].hashlen * 2) + 1;
|
hashstrlen = (rc * 2) + 1;
|
||||||
|
|
||||||
if (VIR_ALLOC_N(*output, hashstrlen) < 0)
|
if (VIR_ALLOC_N(*output, hashstrlen) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for (i = 0; i < hashinfo[hash].hashlen; i++) {
|
for (i = 0; i < rc; i++) {
|
||||||
(*output)[i * 2] = hex[(buf[i] >> 4) & 0xf];
|
(*output)[i * 2] = hex[(buf[i] >> 4) & 0xf];
|
||||||
(*output)[(i * 2) + 1] = hex[buf[i] & 0xf];
|
(*output)[(i * 2) + 1] = hex[buf[i] & 0xf];
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ typedef enum {
|
|||||||
VIR_CRYPTO_CIPHER_LAST
|
VIR_CRYPTO_CIPHER_LAST
|
||||||
} virCryptoCipher;
|
} virCryptoCipher;
|
||||||
|
|
||||||
int
|
ssize_t
|
||||||
virCryptoHashBuf(virCryptoHash hash,
|
virCryptoHashBuf(virCryptoHash hash,
|
||||||
const char *input,
|
const char *input,
|
||||||
unsigned char *output)
|
unsigned char *output)
|
||||||
|
Loading…
Reference in New Issue
Block a user