]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virCryptoHashBuf: return the length of the hash in bytes
authorJán Tomko <jtomko@redhat.com>
Tue, 15 May 2018 07:58:50 +0000 (09:58 +0200)
committerJán Tomko <jtomko@redhat.com>
Wed, 16 May 2018 08:40:40 +0000 (10:40 +0200)
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>
src/util/vircrypto.c
src/util/vircrypto.h

index 62a027353ba6b4e759ac2bb873184acf4de5b384..d110adfe596ee63b47b33c70337674d6fd0c6cba 100644 (file)
@@ -54,7 +54,7 @@ struct virHashInfo {
 
 verify(ARRAY_CARDINALITY(hashinfo) == VIR_CRYPTO_HASH_LAST);
 
-int
+ssize_t
 virCryptoHashBuf(virCryptoHash hash,
                  const char *input,
                  unsigned char *output)
@@ -74,16 +74,17 @@ virCryptoHashBuf(virCryptoHash hash,
         return -1;
     }
 
-    return 0;
+    return hashinfo[hash].hashlen;
 }
 #else
-int
+ssize_t
 virCryptoHashBuf(virCryptoHash hash,
                  const char *input ATTRIBUTE_UNUSED,
                  unsigned char *output ATTRIBUTE_UNUSED)
 {
     virReportError(VIR_ERR_INVALID_ARG,
                    _("algorithm=%d is not supported"), hash);
+    return -1;
 }
 #endif
 
@@ -93,18 +94,19 @@ virCryptoHashString(virCryptoHash hash,
                     char **output)
 {
     unsigned char buf[VIR_CRYPTO_LARGEST_DIGEST_SIZE];
+    ssize_t rc;
     size_t hashstrlen;
     size_t i;
 
-    if (virCryptoHashBuf(hash, input, buf) < 0)
+    if ((rc = virCryptoHashBuf(hash, input, buf)) < 0)
         return -1;
 
-    hashstrlen = (hashinfo[hash].hashlen * 2) + 1;
+    hashstrlen = (rc * 2) + 1;
 
     if (VIR_ALLOC_N(*output, hashstrlen) < 0)
         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) + 1] = hex[buf[i] & 0xf];
     }
index 64984006bed7352d5d38f3f846f0ccaa0ec4b673..9b5dada53d6fcff014d5fc3c8a14b74e9f446e09 100644 (file)
@@ -41,7 +41,7 @@ typedef enum {
     VIR_CRYPTO_CIPHER_LAST
 } virCryptoCipher;
 
-int
+ssize_t
 virCryptoHashBuf(virCryptoHash hash,
                  const char *input,
                  unsigned char *output)