]> Git Repo - qemu.git/blame - include/crypto/hash.h
crypto: add ability to query hash digest len
[qemu.git] / include / crypto / hash.h
CommitLineData
ddbb0d09
DB
1/*
2 * QEMU Crypto hash algorithms
3 *
4 * Copyright (c) 2015 Red Hat, Inc.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18 *
19 */
20
21#ifndef QCRYPTO_HASH_H__
22#define QCRYPTO_HASH_H__
23
24#include "qemu-common.h"
25#include "qapi/error.h"
26
27typedef enum {
28 QCRYPTO_HASH_ALG_MD5,
29 QCRYPTO_HASH_ALG_SHA1,
30 QCRYPTO_HASH_ALG_SHA256,
31
32 QCRYPTO_HASH_ALG_LAST
33} QCryptoHashAlgorithm;
34
35
36/**
37 * qcrypto_hash_supports:
38 * @alg: the hash algorithm
39 *
40 * Determine if @alg hash algorithm is supported by the
41 * current configured build.
42 *
43 * Returns: true if the algorithm is supported, false otherwise
44 */
45gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg);
46
7b36064c
DB
47
48/**
49 * qcrypto_hash_digest_len:
50 * @alg: the hash algorithm
51 *
52 * Determine the size of the hash digest in bytes
53 *
54 * Returns: the digest length in bytes
55 */
56size_t qcrypto_hash_digest_len(QCryptoHashAlgorithm alg);
57
ddbb0d09
DB
58/**
59 * qcrypto_hash_bytesv:
60 * @alg: the hash algorithm
61 * @iov: the array of memory regions to hash
62 * @niov: the length of @iov
63 * @result: pointer to hold output hash
64 * @resultlen: pointer to hold length of @result
65 * @errp: pointer to uninitialized error object
66 *
67 * Computes the hash across all the memory regions
68 * present in @iov. The @result pointer will be
69 * filled with raw bytes representing the computed
70 * hash, which will have length @resultlen. The
71 * memory pointer in @result must be released
72 * with a call to g_free() when no longer required.
73 *
74 * Returns: 0 on success, -1 on error
75 */
76int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg,
77 const struct iovec *iov,
78 size_t niov,
79 uint8_t **result,
80 size_t *resultlen,
81 Error **errp);
82
83/**
84 * qcrypto_hash_bytes:
85 * @alg: the hash algorithm
86 * @buf: the memory region to hash
87 * @len: the length of @buf
88 * @result: pointer to hold output hash
89 * @resultlen: pointer to hold length of @result
90 * @errp: pointer to uninitialized error object
91 *
92 * Computes the hash across all the memory region
93 * @buf of length @len. The @result pointer will be
94 * filled with raw bytes representing the computed
95 * hash, which will have length @resultlen. The
96 * memory pointer in @result must be released
97 * with a call to g_free() when no longer required.
98 *
99 * Returns: 0 on success, -1 on error
100 */
101int qcrypto_hash_bytes(QCryptoHashAlgorithm alg,
102 const char *buf,
103 size_t len,
104 uint8_t **result,
105 size_t *resultlen,
106 Error **errp);
107
108/**
109 * qcrypto_hash_digestv:
110 * @alg: the hash algorithm
111 * @iov: the array of memory regions to hash
112 * @niov: the length of @iov
113 * @digest: pointer to hold output hash
114 * @errp: pointer to uninitialized error object
115 *
116 * Computes the hash across all the memory regions
117 * present in @iov. The @digest pointer will be
118 * filled with the printable hex digest of the computed
119 * hash, which will be terminated by '\0'. The
120 * memory pointer in @digest must be released
121 * with a call to g_free() when no longer required.
122 *
123 * Returns: 0 on success, -1 on error
124 */
125int qcrypto_hash_digestv(QCryptoHashAlgorithm alg,
126 const struct iovec *iov,
127 size_t niov,
128 char **digest,
129 Error **errp);
130
131/**
132 * qcrypto_hash_digest:
133 * @alg: the hash algorithm
134 * @buf: the memory region to hash
135 * @len: the length of @buf
136 * @digest: pointer to hold output hash
137 * @errp: pointer to uninitialized error object
138 *
139 * Computes the hash across all the memory region
140 * @buf of length @len. The @digest pointer will be
141 * filled with the printable hex digest of the computed
142 * hash, which will be terminated by '\0'. The
143 * memory pointer in @digest must be released
144 * with a call to g_free() when no longer required.
145 *
146 * Returns: 0 on success, -1 on error
147 */
148int qcrypto_hash_digest(QCryptoHashAlgorithm alg,
149 const char *buf,
150 size_t len,
151 char **digest,
152 Error **errp);
153
154/**
155 * qcrypto_hash_base64v:
156 * @alg: the hash algorithm
157 * @iov: the array of memory regions to hash
158 * @niov: the length of @iov
159 * @base64: pointer to hold output hash
160 * @errp: pointer to uninitialized error object
161 *
162 * Computes the hash across all the memory regions
163 * present in @iov. The @base64 pointer will be
164 * filled with the base64 encoding of the computed
165 * hash, which will be terminated by '\0'. The
166 * memory pointer in @base64 must be released
167 * with a call to g_free() when no longer required.
168 *
169 * Returns: 0 on success, -1 on error
170 */
171int qcrypto_hash_base64v(QCryptoHashAlgorithm alg,
172 const struct iovec *iov,
173 size_t niov,
174 char **base64,
175 Error **errp);
176
177/**
178 * qcrypto_hash_base64:
179 * @alg: the hash algorithm
180 * @buf: the memory region to hash
181 * @len: the length of @buf
182 * @base64: pointer to hold output hash
183 * @errp: pointer to uninitialized error object
184 *
185 * Computes the hash across all the memory region
186 * @buf of length @len. The @base64 pointer will be
187 * filled with the base64 encoding of the computed
188 * hash, which will be terminated by '\0'. The
189 * memory pointer in @base64 must be released
190 * with a call to g_free() when no longer required.
191 *
192 * Returns: 0 on success, -1 on error
193 */
194int qcrypto_hash_base64(QCryptoHashAlgorithm alg,
195 const char *buf,
196 size_t len,
197 char **base64,
198 Error **errp);
199
200#endif /* QCRYPTO_HASH_H__ */
This page took 0.064351 seconds and 4 git commands to generate.