xref: /openbmc/qemu/include/crypto/hash.h (revision 4a10982c)
1ddbb0d09SDaniel P. Berrange /*
2ddbb0d09SDaniel P. Berrange  * QEMU Crypto hash algorithms
3ddbb0d09SDaniel P. Berrange  *
4ddbb0d09SDaniel P. Berrange  * Copyright (c) 2015 Red Hat, Inc.
5ddbb0d09SDaniel P. Berrange  *
6ddbb0d09SDaniel P. Berrange  * This library is free software; you can redistribute it and/or
7ddbb0d09SDaniel P. Berrange  * modify it under the terms of the GNU Lesser General Public
8ddbb0d09SDaniel P. Berrange  * License as published by the Free Software Foundation; either
9*b7cbb874SThomas Huth  * version 2.1 of the License, or (at your option) any later version.
10ddbb0d09SDaniel P. Berrange  *
11ddbb0d09SDaniel P. Berrange  * This library is distributed in the hope that it will be useful,
12ddbb0d09SDaniel P. Berrange  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13ddbb0d09SDaniel P. Berrange  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14ddbb0d09SDaniel P. Berrange  * Lesser General Public License for more details.
15ddbb0d09SDaniel P. Berrange  *
16ddbb0d09SDaniel P. Berrange  * You should have received a copy of the GNU Lesser General Public
17ddbb0d09SDaniel P. Berrange  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18ddbb0d09SDaniel P. Berrange  *
19ddbb0d09SDaniel P. Berrange  */
20ddbb0d09SDaniel P. Berrange 
212a6a4076SMarkus Armbruster #ifndef QCRYPTO_HASH_H
222a6a4076SMarkus Armbruster #define QCRYPTO_HASH_H
23ddbb0d09SDaniel P. Berrange 
249af23989SMarkus Armbruster #include "qapi/qapi-types-crypto.h"
25ddbb0d09SDaniel P. Berrange 
26d84b79d3SDaniel P. Berrange /* See also "QCryptoHashAlgorithm" defined in qapi/crypto.json */
27ddbb0d09SDaniel P. Berrange 
28ddbb0d09SDaniel P. Berrange /**
29ddbb0d09SDaniel P. Berrange  * qcrypto_hash_supports:
30ddbb0d09SDaniel P. Berrange  * @alg: the hash algorithm
31ddbb0d09SDaniel P. Berrange  *
32ddbb0d09SDaniel P. Berrange  * Determine if @alg hash algorithm is supported by the
33ddbb0d09SDaniel P. Berrange  * current configured build.
34ddbb0d09SDaniel P. Berrange  *
35ddbb0d09SDaniel P. Berrange  * Returns: true if the algorithm is supported, false otherwise
36ddbb0d09SDaniel P. Berrange  */
37ddbb0d09SDaniel P. Berrange gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg);
38ddbb0d09SDaniel P. Berrange 
397b36064cSDaniel P. Berrange 
407b36064cSDaniel P. Berrange /**
417b36064cSDaniel P. Berrange  * qcrypto_hash_digest_len:
427b36064cSDaniel P. Berrange  * @alg: the hash algorithm
437b36064cSDaniel P. Berrange  *
447b36064cSDaniel P. Berrange  * Determine the size of the hash digest in bytes
457b36064cSDaniel P. Berrange  *
467b36064cSDaniel P. Berrange  * Returns: the digest length in bytes
477b36064cSDaniel P. Berrange  */
487b36064cSDaniel P. Berrange size_t qcrypto_hash_digest_len(QCryptoHashAlgorithm alg);
497b36064cSDaniel P. Berrange 
50ddbb0d09SDaniel P. Berrange /**
51ddbb0d09SDaniel P. Berrange  * qcrypto_hash_bytesv:
52ddbb0d09SDaniel P. Berrange  * @alg: the hash algorithm
53ddbb0d09SDaniel P. Berrange  * @iov: the array of memory regions to hash
54ddbb0d09SDaniel P. Berrange  * @niov: the length of @iov
55ddbb0d09SDaniel P. Berrange  * @result: pointer to hold output hash
56ddbb0d09SDaniel P. Berrange  * @resultlen: pointer to hold length of @result
5707982d2eSDaniel P. Berrange  * @errp: pointer to a NULL-initialized error object
58ddbb0d09SDaniel P. Berrange  *
59ddbb0d09SDaniel P. Berrange  * Computes the hash across all the memory regions
60ddbb0d09SDaniel P. Berrange  * present in @iov. The @result pointer will be
61ddbb0d09SDaniel P. Berrange  * filled with raw bytes representing the computed
62ddbb0d09SDaniel P. Berrange  * hash, which will have length @resultlen. The
63ddbb0d09SDaniel P. Berrange  * memory pointer in @result must be released
64ddbb0d09SDaniel P. Berrange  * with a call to g_free() when no longer required.
65ddbb0d09SDaniel P. Berrange  *
66ddbb0d09SDaniel P. Berrange  * Returns: 0 on success, -1 on error
67ddbb0d09SDaniel P. Berrange  */
68ddbb0d09SDaniel P. Berrange int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg,
69ddbb0d09SDaniel P. Berrange                         const struct iovec *iov,
70ddbb0d09SDaniel P. Berrange                         size_t niov,
71ddbb0d09SDaniel P. Berrange                         uint8_t **result,
72ddbb0d09SDaniel P. Berrange                         size_t *resultlen,
73ddbb0d09SDaniel P. Berrange                         Error **errp);
74ddbb0d09SDaniel P. Berrange 
75ddbb0d09SDaniel P. Berrange /**
76ddbb0d09SDaniel P. Berrange  * qcrypto_hash_bytes:
77ddbb0d09SDaniel P. Berrange  * @alg: the hash algorithm
78ddbb0d09SDaniel P. Berrange  * @buf: the memory region to hash
79ddbb0d09SDaniel P. Berrange  * @len: the length of @buf
80ddbb0d09SDaniel P. Berrange  * @result: pointer to hold output hash
81ddbb0d09SDaniel P. Berrange  * @resultlen: pointer to hold length of @result
8207982d2eSDaniel P. Berrange  * @errp: pointer to a NULL-initialized error object
83ddbb0d09SDaniel P. Berrange  *
84ddbb0d09SDaniel P. Berrange  * Computes the hash across all the memory region
85ddbb0d09SDaniel P. Berrange  * @buf of length @len. The @result pointer will be
86ddbb0d09SDaniel P. Berrange  * filled with raw bytes representing the computed
87ddbb0d09SDaniel P. Berrange  * hash, which will have length @resultlen. The
88ddbb0d09SDaniel P. Berrange  * memory pointer in @result must be released
89ddbb0d09SDaniel P. Berrange  * with a call to g_free() when no longer required.
90ddbb0d09SDaniel P. Berrange  *
91ddbb0d09SDaniel P. Berrange  * Returns: 0 on success, -1 on error
92ddbb0d09SDaniel P. Berrange  */
93ddbb0d09SDaniel P. Berrange int qcrypto_hash_bytes(QCryptoHashAlgorithm alg,
94ddbb0d09SDaniel P. Berrange                        const char *buf,
95ddbb0d09SDaniel P. Berrange                        size_t len,
96ddbb0d09SDaniel P. Berrange                        uint8_t **result,
97ddbb0d09SDaniel P. Berrange                        size_t *resultlen,
98ddbb0d09SDaniel P. Berrange                        Error **errp);
99ddbb0d09SDaniel P. Berrange 
100ddbb0d09SDaniel P. Berrange /**
101ddbb0d09SDaniel P. Berrange  * qcrypto_hash_digestv:
102ddbb0d09SDaniel P. Berrange  * @alg: the hash algorithm
103ddbb0d09SDaniel P. Berrange  * @iov: the array of memory regions to hash
104ddbb0d09SDaniel P. Berrange  * @niov: the length of @iov
105ddbb0d09SDaniel P. Berrange  * @digest: pointer to hold output hash
10607982d2eSDaniel P. Berrange  * @errp: pointer to a NULL-initialized error object
107ddbb0d09SDaniel P. Berrange  *
108ddbb0d09SDaniel P. Berrange  * Computes the hash across all the memory regions
109ddbb0d09SDaniel P. Berrange  * present in @iov. The @digest pointer will be
110ddbb0d09SDaniel P. Berrange  * filled with the printable hex digest of the computed
111ddbb0d09SDaniel P. Berrange  * hash, which will be terminated by '\0'. The
112ddbb0d09SDaniel P. Berrange  * memory pointer in @digest must be released
113ddbb0d09SDaniel P. Berrange  * with a call to g_free() when no longer required.
114ddbb0d09SDaniel P. Berrange  *
115ddbb0d09SDaniel P. Berrange  * Returns: 0 on success, -1 on error
116ddbb0d09SDaniel P. Berrange  */
117ddbb0d09SDaniel P. Berrange int qcrypto_hash_digestv(QCryptoHashAlgorithm alg,
118ddbb0d09SDaniel P. Berrange                          const struct iovec *iov,
119ddbb0d09SDaniel P. Berrange                          size_t niov,
120ddbb0d09SDaniel P. Berrange                          char **digest,
121ddbb0d09SDaniel P. Berrange                          Error **errp);
122ddbb0d09SDaniel P. Berrange 
123ddbb0d09SDaniel P. Berrange /**
124ddbb0d09SDaniel P. Berrange  * qcrypto_hash_digest:
125ddbb0d09SDaniel P. Berrange  * @alg: the hash algorithm
126ddbb0d09SDaniel P. Berrange  * @buf: the memory region to hash
127ddbb0d09SDaniel P. Berrange  * @len: the length of @buf
128ddbb0d09SDaniel P. Berrange  * @digest: pointer to hold output hash
12907982d2eSDaniel P. Berrange  * @errp: pointer to a NULL-initialized error object
130ddbb0d09SDaniel P. Berrange  *
131ddbb0d09SDaniel P. Berrange  * Computes the hash across all the memory region
132ddbb0d09SDaniel P. Berrange  * @buf of length @len. The @digest pointer will be
133ddbb0d09SDaniel P. Berrange  * filled with the printable hex digest of the computed
134ddbb0d09SDaniel P. Berrange  * hash, which will be terminated by '\0'. The
135ddbb0d09SDaniel P. Berrange  * memory pointer in @digest must be released
136ddbb0d09SDaniel P. Berrange  * with a call to g_free() when no longer required.
137ddbb0d09SDaniel P. Berrange  *
138ddbb0d09SDaniel P. Berrange  * Returns: 0 on success, -1 on error
139ddbb0d09SDaniel P. Berrange  */
140ddbb0d09SDaniel P. Berrange int qcrypto_hash_digest(QCryptoHashAlgorithm alg,
141ddbb0d09SDaniel P. Berrange                         const char *buf,
142ddbb0d09SDaniel P. Berrange                         size_t len,
143ddbb0d09SDaniel P. Berrange                         char **digest,
144ddbb0d09SDaniel P. Berrange                         Error **errp);
145ddbb0d09SDaniel P. Berrange 
146ddbb0d09SDaniel P. Berrange /**
147ddbb0d09SDaniel P. Berrange  * qcrypto_hash_base64v:
148ddbb0d09SDaniel P. Berrange  * @alg: the hash algorithm
149ddbb0d09SDaniel P. Berrange  * @iov: the array of memory regions to hash
150ddbb0d09SDaniel P. Berrange  * @niov: the length of @iov
151ddbb0d09SDaniel P. Berrange  * @base64: pointer to hold output hash
15207982d2eSDaniel P. Berrange  * @errp: pointer to a NULL-initialized error object
153ddbb0d09SDaniel P. Berrange  *
154ddbb0d09SDaniel P. Berrange  * Computes the hash across all the memory regions
155ddbb0d09SDaniel P. Berrange  * present in @iov. The @base64 pointer will be
156ddbb0d09SDaniel P. Berrange  * filled with the base64 encoding of the computed
157ddbb0d09SDaniel P. Berrange  * hash, which will be terminated by '\0'. The
158ddbb0d09SDaniel P. Berrange  * memory pointer in @base64 must be released
159ddbb0d09SDaniel P. Berrange  * with a call to g_free() when no longer required.
160ddbb0d09SDaniel P. Berrange  *
161ddbb0d09SDaniel P. Berrange  * Returns: 0 on success, -1 on error
162ddbb0d09SDaniel P. Berrange  */
163ddbb0d09SDaniel P. Berrange int qcrypto_hash_base64v(QCryptoHashAlgorithm alg,
164ddbb0d09SDaniel P. Berrange                          const struct iovec *iov,
165ddbb0d09SDaniel P. Berrange                          size_t niov,
166ddbb0d09SDaniel P. Berrange                          char **base64,
167ddbb0d09SDaniel P. Berrange                          Error **errp);
168ddbb0d09SDaniel P. Berrange 
169ddbb0d09SDaniel P. Berrange /**
170ddbb0d09SDaniel P. Berrange  * qcrypto_hash_base64:
171ddbb0d09SDaniel P. Berrange  * @alg: the hash algorithm
172ddbb0d09SDaniel P. Berrange  * @buf: the memory region to hash
173ddbb0d09SDaniel P. Berrange  * @len: the length of @buf
174ddbb0d09SDaniel P. Berrange  * @base64: pointer to hold output hash
17507982d2eSDaniel P. Berrange  * @errp: pointer to a NULL-initialized error object
176ddbb0d09SDaniel P. Berrange  *
177ddbb0d09SDaniel P. Berrange  * Computes the hash across all the memory region
178ddbb0d09SDaniel P. Berrange  * @buf of length @len. The @base64 pointer will be
179ddbb0d09SDaniel P. Berrange  * filled with the base64 encoding of the computed
180ddbb0d09SDaniel P. Berrange  * hash, which will be terminated by '\0'. The
181ddbb0d09SDaniel P. Berrange  * memory pointer in @base64 must be released
182ddbb0d09SDaniel P. Berrange  * with a call to g_free() when no longer required.
183ddbb0d09SDaniel P. Berrange  *
184ddbb0d09SDaniel P. Berrange  * Returns: 0 on success, -1 on error
185ddbb0d09SDaniel P. Berrange  */
186ddbb0d09SDaniel P. Berrange int qcrypto_hash_base64(QCryptoHashAlgorithm alg,
187ddbb0d09SDaniel P. Berrange                         const char *buf,
188ddbb0d09SDaniel P. Berrange                         size_t len,
189ddbb0d09SDaniel P. Berrange                         char **base64,
190ddbb0d09SDaniel P. Berrange                         Error **errp);
191ddbb0d09SDaniel P. Berrange 
1922a6a4076SMarkus Armbruster #endif /* QCRYPTO_HASH_H */
193