summary refs log tree commit diff stats
path: root/crypto/hashpriv.h
diff options
context:
space:
mode:
authorAlejandro Zeise <alejandro.zeise@seagate.com>2024-10-08 09:57:08 +0200
committerDaniel P. Berrangé <berrange@redhat.com>2024-10-10 12:32:59 +0100
commit190feb488473ca07df17dfa6fbc073a407258923 (patch)
treeb0d8ec7d45da04340e1eca5bdae7ed465f76c0b2 /crypto/hashpriv.h
parent838fc0a8769d7cc6edfe50451ba4e3368395f5c1 (diff)
downloadfocaccia-qemu-190feb488473ca07df17dfa6fbc073a407258923.tar.gz
focaccia-qemu-190feb488473ca07df17dfa6fbc073a407258923.zip
crypto: accumulative hashing API
Changes the hash API to support accumulative hashing.
Hash objects are created with "qcrypto_hash_new",
updated with data with "qcrypto_hash_update", and
the hash obtained with "qcrypto_hash_finalize".

These changes bring the hashing API more in line with the
hmac API.

Signed-off-by: Alejandro Zeise <alejandro.zeise@seagate.com>
[ clg: - Changed documentation "non-zero on error" -> "-1 on error" ]
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'crypto/hashpriv.h')
-rw-r--r--crypto/hashpriv.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/crypto/hashpriv.h b/crypto/hashpriv.h
index 47daec3f7a..dcb3ba6cfb 100644
--- a/crypto/hashpriv.h
+++ b/crypto/hashpriv.h
@@ -1,6 +1,7 @@
 /*
  * QEMU Crypto hash driver supports
  *
+ * Copyright (c) 2024 Seagate Technology LLC and/or its Affiliates
  * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD.
  *
  * Authors:
@@ -15,6 +16,8 @@
 #ifndef QCRYPTO_HASHPRIV_H
 #define QCRYPTO_HASHPRIV_H
 
+#include "crypto/hash.h"
+
 typedef struct QCryptoHashDriver QCryptoHashDriver;
 
 struct QCryptoHashDriver {
@@ -24,6 +27,16 @@ struct QCryptoHashDriver {
                        uint8_t **result,
                        size_t *resultlen,
                        Error **errp);
+    QCryptoHash *(*hash_new)(QCryptoHashAlgo alg, Error **errp);
+    int (*hash_update)(QCryptoHash *hash,
+                       const struct iovec *iov,
+                       size_t niov,
+                       Error **errp);
+    int (*hash_finalize)(QCryptoHash *hash,
+                         uint8_t **result,
+                         size_t *resultlen,
+                         Error **errp);
+    void (*hash_free)(QCryptoHash *hash);
 };
 
 extern QCryptoHashDriver qcrypto_hash_lib_driver;