提交 c25fbbec 编写于 作者: J Ján Tomko

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: NJán Tomko <jtomko@redhat.com>
Suggested-by: NStefan Berger <stefanb@linux.vnet.ibm.com>
上级 ed11d166
...@@ -54,7 +54,7 @@ struct virHashInfo { ...@@ -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, ...@@ -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, ...@@ -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 { ...@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册