]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce virCryptoHashBuf
authorJán Tomko <jtomko@redhat.com>
Fri, 11 May 2018 14:31:10 +0000 (16:31 +0200)
committerJán Tomko <jtomko@redhat.com>
Mon, 14 May 2018 11:57:45 +0000 (13:57 +0200)
A function that keeps the hash in binary form instead of converting
it to human-readable hexadecimal form.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
src/libvirt_private.syms
src/util/vircrypto.c
src/util/vircrypto.h

index d28a751ebd1ae836e4303bf17533f19d7c83d5a1..5b2a58cdcd513f1190fcfc23aa9359515837ed10 100644 (file)
@@ -1648,6 +1648,7 @@ virConfWriteMem;
 # util/vircrypto.h
 virCryptoEncryptData;
 virCryptoGenerateRandom;
+virCryptoHashBuf;
 virCryptoHashString;
 virCryptoHaveCipher;
 
index 48b04fc8ced6b1ce0e31e8a69751164573be976b..1a2dcc28b7c1706b7b69d048a8ba60314418ec7a 100644 (file)
@@ -54,28 +54,39 @@ struct virHashInfo {
 verify(ARRAY_CARDINALITY(hashinfo) == VIR_CRYPTO_HASH_LAST);
 
 int
-virCryptoHashString(virCryptoHash hash,
-                    const char *input,
-                    char **output)
+virCryptoHashBuf(virCryptoHash hash,
+                 const char *input,
+                 unsigned char *output)
 {
-    unsigned char buf[VIR_CRYPTO_LARGEST_DIGEST_SIZE];
-    size_t hashstrlen;
-    size_t i;
-
     if (hash >= VIR_CRYPTO_HASH_LAST) {
         virReportError(VIR_ERR_INVALID_ARG,
                        _("Unknown crypto hash %d"), hash);
         return -1;
     }
 
-    hashstrlen = (hashinfo[hash].hashlen * 2) + 1;
-
-    if (!(hashinfo[hash].func(input, strlen(input), buf))) {
+    if (!(hashinfo[hash].func(input, strlen(input), output))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Unable to compute hash of data"));
         return -1;
     }
 
+    return 0;
+}
+
+int
+virCryptoHashString(virCryptoHash hash,
+                    const char *input,
+                    char **output)
+{
+    unsigned char buf[VIR_CRYPTO_LARGEST_DIGEST_SIZE];
+    size_t hashstrlen;
+    size_t i;
+
+    if (virCryptoHashBuf(hash, input, buf) < 0)
+        return -1;
+
+    hashstrlen = (hashinfo[hash].hashlen * 2) + 1;
+
     if (VIR_ALLOC_N(*output, hashstrlen) < 0)
         return -1;
 
index 81743d2f74cac7f8752cdfb73b53fb833955665f..64984006bed7352d5d38f3f846f0ccaa0ec4b673 100644 (file)
@@ -41,6 +41,13 @@ typedef enum {
     VIR_CRYPTO_CIPHER_LAST
 } virCryptoCipher;
 
+int
+virCryptoHashBuf(virCryptoHash hash,
+                 const char *input,
+                 unsigned char *output)
+    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
+    ATTRIBUTE_RETURN_CHECK;
+
 int
 virCryptoHashString(virCryptoHash hash,
                     const char *input,