VirtualBox

source: vbox/trunk/include/iprt/sha.h@ 25003

Last change on this file since 25003 was 23507, checked in by vboxsync, 15 years ago

IPRT: Added APIs for convering digests to/from strings.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.0 KB
Line 
1/** @file
2 * IPRT - SHA1 digest creation
3 */
4
5/*
6 * Copyright (C) 2009 Sun Microsystems, Inc.
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 *
25 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
26 * Clara, CA 95054 USA or visit http://www.sun.com if you need
27 * additional information or have any questions.
28 */
29
30#ifndef ___iprt_sha_h
31#define ___iprt_sha_h
32
33#include <iprt/types.h>
34
35RT_C_DECLS_BEGIN
36
37/** @defgroup grp_rt_sha RTSha - SHA Family of Hash Functions
38 * @ingroup grp_rt
39 * @{
40 */
41
42/** The size of a SHA-1 hash. */
43#define RTSHA1_HASH_SIZE 20
44/** The length of a SHA-1 digest string. The terminator is not included. */
45#define RTSHA1_DIGEST_LEN (40+1)
46
47/**
48 * SHA-1 context.
49 */
50typedef union RTSHA1CONTEXT
51{
52 uint8_t abPadding[ARCH_BITS == 32 ? 96 : 128];
53#ifdef RT_SHA1_PRIVATE_CONTEXT
54 SHA_CTX Private;
55#endif
56} RTSHA1CONTEXT;
57/** Pointer to an SHA-1 context. */
58typedef RTSHA1CONTEXT *PRTSHA1CONTEXT;
59
60/**
61 * Compute the SHA-1 hash of the data.
62 *
63 * @param pvBuf Pointer to the data.
64 * @param cbBuf The amount of data (in bytes).
65 * @param pabDigest Where to store the hash. (What is passed is a pointer to
66 * the caller's buffer.)
67 */
68RTDECL(void) RTSha1(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA1_HASH_SIZE]);
69
70/**
71 * Initializes the SHA-1 context.
72 *
73 * @param pCtx Pointer to the SHA-1 context.
74 */
75RTDECL(void) RTSha1Init(PRTSHA1CONTEXT pCtx);
76
77/**
78 * Feed data into the SHA-1 computation.
79 *
80 * @param pCtx Pointer to the SHA-1 context.
81 * @param pvBuf Pointer to the data.
82 * @param cbBuf The length of the data (in bytes).
83 */
84RTDECL(void) RTSha1Update(PRTSHA1CONTEXT pCtx, const void *pvBuf, size_t cbBuf);
85
86/**
87 * Compute the SHA-1 hash of the data.
88 *
89 * @param pCtx Pointer to the SHA-1 context.
90 * @param pabDigest Where to store the hash. (What is passed is a pointer to
91 * the caller's buffer.)
92 */
93RTDECL(void) RTSha1Final(PRTSHA1CONTEXT pCtx, uint8_t pabDigest[RTSHA1_HASH_SIZE]);
94
95/**
96 * Converts a SHA-512 hash to a digest string.
97 *
98 * @returns IPRT status code.
99 *
100 * @param pabDigest The binary digest returned by RTSha1Final or RTSha1.
101 * @param pszDigest Where to return the stringified digest.
102 * @param cchDigest The size of the output buffer. Should be at least
103 * RTSHA1_STRING_LEN + 1 bytes.
104 */
105RTDECL(int) RTSha1ToString(uint8_t const pabDigest[RTSHA1_HASH_SIZE], char *pszDigest, size_t cchDigest);
106
107/**
108 * Converts a SHA-1 hash to a digest string.
109 *
110 * @returns IPRT status code.
111 *
112 * @param pszDigest The strigified digest. Leading and trailing spaces are
113 * ignored.
114 * @param pabDigest Where to store the hash. (What is passed is a pointer to
115 * the caller's buffer.)
116 */
117RTDECL(int) RTSha1FromString(char const *pszDigest, uint8_t pabDigest[RTSHA1_HASH_SIZE]);
118
119/**
120 * Creates a SHA1 digest for the given file.
121 *
122 * @returns iprt status code.
123 *
124 * @param pszFile Filename to create a SHA1 digest for.
125 * @param ppszDigest On success the SHA1 digest.
126 */
127RTR3DECL(int) RTSha1Digest(const char *pszFile, char **ppszDigest);
128
129
130
131/** The size of a SHA-256 hash. */
132#define RTSHA256_HASH_SIZE 32
133/** The length of a SHA-256 digest string. The terminator is not included. */
134#define RTSHA256_DIGEST_LEN 64
135
136/**
137 * SHA-256 context.
138 */
139typedef union RTSHA256CONTEXT
140{
141 uint8_t abPadding[ARCH_BITS == 32 ? 112 : 160];
142#ifdef RT_SHA256_PRIVATE_CONTEXT
143 SHA256_CTX Private;
144#endif
145} RTSHA256CONTEXT;
146/** Pointer to an SHA-256 context. */
147typedef RTSHA256CONTEXT *PRTSHA256CONTEXT;
148
149/**
150 * Compute the SHA-256 hash of the data.
151 *
152 * @param pvBuf Pointer to the data.
153 * @param cbBuf The amount of data (in bytes).
154 * @param pabDigest Where to store the hash. (What is passed is a pointer to
155 * the caller's buffer.)
156 */
157RTDECL(void) RTSha256(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA256_HASH_SIZE]);
158
159/**
160 * Initializes the SHA-256 context.
161 *
162 * @param pCtx Pointer to the SHA-256 context.
163 */
164RTDECL(void) RTSha256Init(PRTSHA256CONTEXT pCtx);
165
166/**
167 * Feed data into the SHA-256 computation.
168 *
169 * @param pCtx Pointer to the SHA-256 context.
170 * @param pvBuf Pointer to the data.
171 * @param cbBuf The length of the data (in bytes).
172 */
173RTDECL(void) RTSha256Update(PRTSHA256CONTEXT pCtx, const void *pvBuf, size_t cbBuf);
174
175/**
176 * Compute the SHA-256 hash of the data.
177 *
178 * @param pCtx Pointer to the SHA-256 context.
179 * @param pabDigest Where to store the hash. (What is passed is a pointer to
180 * the caller's buffer.)
181 */
182RTDECL(void) RTSha256Final(PRTSHA256CONTEXT pCtx, uint8_t pabDigest[RTSHA256_HASH_SIZE]);
183
184/**
185 * Converts a SHA-256 hash to a digest string.
186 *
187 * @returns IPRT status code.
188 *
189 * @param pabDigest The binary digest returned by RTSha256Final or RTSha256.
190 * @param pszDigest Where to return the stringified digest.
191 * @param cchDigest The size of the output buffer. Should be at least
192 * RTSHA256_STRING_LEN + 1 bytes.
193 */
194RTDECL(int) RTSha256ToString(uint8_t const pabDigest[RTSHA256_HASH_SIZE], char *pszDigest, size_t cchDigest);
195
196/**
197 * Converts a SHA-256 hash to a digest string.
198 *
199 * @returns IPRT status code.
200 *
201 * @param pszDigest The strigified digest. Leading and trailing spaces are
202 * ignored.
203 * @param pabDigest Where to store the hash. (What is passed is a pointer to
204 * the caller's buffer.)
205 */
206RTDECL(int) RTSha256FromString(char const *pszDigest, uint8_t pabDigest[RTSHA256_HASH_SIZE]);
207
208
209
210/** The size of a SHA-512 hash. */
211#define RTSHA512_HASH_SIZE 64
212/** The length of a SHA-512 digest string. The terminator is not included. */
213#define RTSHA512_STRING_LEN 128
214
215/**
216 * SHA-512 context.
217 */
218typedef union RTSHA512CONTEXT
219{
220 uint8_t abPadding[ARCH_BITS == 32 ? 216 : 256];
221#ifdef RT_SHA512_PRIVATE_CONTEXT
222 SHA512_CTX Private;
223#endif
224} RTSHA512CONTEXT;
225/** Pointer to an SHA-512 context. */
226typedef RTSHA512CONTEXT *PRTSHA512CONTEXT;
227
228/**
229 * Compute the SHA-512 hash of the data.
230 *
231 * @param pvBuf Pointer to the data.
232 * @param cbBuf The amount of data (in bytes).
233 * @param pabDigest Where to store the hash. (What is passed is a pointer to
234 * the caller's buffer.)
235 */
236RTDECL(void) RTSha512(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA512_HASH_SIZE]);
237
238/**
239 * Initializes the SHA-512 context.
240 *
241 * @param pCtx Pointer to the SHA-512 context.
242 */
243RTDECL(void) RTSha512Init(PRTSHA512CONTEXT pCtx);
244
245/**
246 * Feed data into the SHA-512 computation.
247 *
248 * @param pCtx Pointer to the SHA-512 context.
249 * @param pvBuf Pointer to the data.
250 * @param cbBuf The length of the data (in bytes).
251 */
252RTDECL(void) RTSha512Update(PRTSHA512CONTEXT pCtx, const void *pvBuf, size_t cbBuf);
253
254/**
255 * Compute the SHA-512 hash of the data.
256 *
257 * @param pCtx Pointer to the SHA-512 context.
258 * @param pabDigest Where to store the hash. (What is passed is a pointer to
259 * the caller's buffer.)
260 */
261RTDECL(void) RTSha512Final(PRTSHA512CONTEXT pCtx, uint8_t pabDigest[RTSHA512_HASH_SIZE]);
262
263/**
264 * Converts a SHA-512 hash to a digest string.
265 *
266 * @returns IPRT status code.
267 *
268 * @param pabDigest The binary digest returned by RTSha512Final or RTSha512.
269 * @param pszDigest Where to return the stringified digest.
270 * @param cchDigest The size of the output buffer. Should be at least
271 * RTSHA512_STRING_LEN + 1 bytes.
272 */
273RTDECL(int) RTSha512ToString(uint8_t const pabDigest[RTSHA512_HASH_SIZE], char *pszDigest, size_t cchDigest);
274
275/**
276 * Converts a SHA-512 hash to a digest string.
277 *
278 * @returns IPRT status code.
279 *
280 * @param pszDigest The strigified digest. Leading and trailing spaces are
281 * ignored.
282 * @param pabDigest Where to store the hash. (What is passed is a pointer to
283 * the caller's buffer.)
284 */
285RTDECL(int) RTSha512FromString(char const *pszDigest, uint8_t pabDigest[RTSHA512_HASH_SIZE]);
286
287/** @} */
288
289RT_C_DECLS_END
290
291#endif /* ___iprt_sha1_h */
292
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette