xref: /aoo41x/main/sal/inc/rtl/digest.h (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #ifndef _RTL_DIGEST_H_
29*cdf0e10cSrcweir #define _RTL_DIGEST_H_ "$Revision: 1.8 $"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <sal/types.h>
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir #ifdef __cplusplus
34*cdf0e10cSrcweir extern "C" {
35*cdf0e10cSrcweir #endif
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir /*========================================================================
38*cdf0e10cSrcweir  *
39*cdf0e10cSrcweir  * rtlDigest.
40*cdf0e10cSrcweir  *
41*cdf0e10cSrcweir  *======================================================================*/
42*cdf0e10cSrcweir /** Digest Handle opaque type.
43*cdf0e10cSrcweir  */
44*cdf0e10cSrcweir typedef void* rtlDigest;
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir 
47*cdf0e10cSrcweir /** Digest Algorithm enumeration.
48*cdf0e10cSrcweir     @see rtl_digest_create()
49*cdf0e10cSrcweir  */
50*cdf0e10cSrcweir enum __rtl_DigestAlgorithm
51*cdf0e10cSrcweir {
52*cdf0e10cSrcweir 	rtl_Digest_AlgorithmMD2,
53*cdf0e10cSrcweir 	rtl_Digest_AlgorithmMD5,
54*cdf0e10cSrcweir 	rtl_Digest_AlgorithmSHA,
55*cdf0e10cSrcweir 	rtl_Digest_AlgorithmSHA1,
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir 	rtl_Digest_AlgorithmHMAC_MD5,
58*cdf0e10cSrcweir 	rtl_Digest_AlgorithmHMAC_SHA1,
59*cdf0e10cSrcweir 
60*cdf0e10cSrcweir 	rtl_Digest_AlgorithmInvalid,
61*cdf0e10cSrcweir 	rtl_Digest_Algorithm_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
62*cdf0e10cSrcweir };
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir /** Digest Algorithm type.
65*cdf0e10cSrcweir  */
66*cdf0e10cSrcweir typedef enum __rtl_DigestAlgorithm rtlDigestAlgorithm;
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir /** Error Code enumeration.
70*cdf0e10cSrcweir  */
71*cdf0e10cSrcweir enum __rtl_DigestError
72*cdf0e10cSrcweir {
73*cdf0e10cSrcweir 	rtl_Digest_E_None,
74*cdf0e10cSrcweir 	rtl_Digest_E_Argument,
75*cdf0e10cSrcweir 	rtl_Digest_E_Algorithm,
76*cdf0e10cSrcweir 	rtl_Digest_E_BufferSize,
77*cdf0e10cSrcweir 	rtl_Digest_E_Memory,
78*cdf0e10cSrcweir 	rtl_Digest_E_Unknown,
79*cdf0e10cSrcweir 	rtl_Digest_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
80*cdf0e10cSrcweir };
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir /** Error Code type.
83*cdf0e10cSrcweir  */
84*cdf0e10cSrcweir typedef enum __rtl_DigestError rtlDigestError;
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir 
87*cdf0e10cSrcweir /** Create a digest handle for the given algorithm.
88*cdf0e10cSrcweir     @see rtlDigestAlgorithm
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir 	@param  Algorithm [in] digest algorithm.
91*cdf0e10cSrcweir 	@return Digest handle, or 0 upon failure.
92*cdf0e10cSrcweir  */
93*cdf0e10cSrcweir rtlDigest SAL_CALL rtl_digest_create  (
94*cdf0e10cSrcweir 	rtlDigestAlgorithm Algorithm
95*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir /** Destroy a digest handle.
99*cdf0e10cSrcweir 	@postcond Digest handle destroyed and invalid.
100*cdf0e10cSrcweir     @param    Digest [in] digest handle to be destroyed.
101*cdf0e10cSrcweir 	@return   None.
102*cdf0e10cSrcweir  */
103*cdf0e10cSrcweir void SAL_CALL rtl_digest_destroy (
104*cdf0e10cSrcweir 	rtlDigest Digest
105*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir /** Query the algorithm of a given digest.
109*cdf0e10cSrcweir     @param  Digest [in] digest handle.
110*cdf0e10cSrcweir 	@return digest algorithm, or rtl_Digest_AlgorithmInvalid upon failure.
111*cdf0e10cSrcweir  */
112*cdf0e10cSrcweir rtlDigestAlgorithm SAL_CALL rtl_digest_queryAlgorithm (
113*cdf0e10cSrcweir 	rtlDigest Digest
114*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
115*cdf0e10cSrcweir 
116*cdf0e10cSrcweir 
117*cdf0e10cSrcweir /** Query the length of a given digest.
118*cdf0e10cSrcweir     @param  Digest [in] digest handle.
119*cdf0e10cSrcweir 	@return digest length, or 0 upon failure.
120*cdf0e10cSrcweir  */
121*cdf0e10cSrcweir sal_uInt32 SAL_CALL rtl_digest_queryLength (
122*cdf0e10cSrcweir 	rtlDigest Digest
123*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
124*cdf0e10cSrcweir 
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir /** Initialize a digest with given data.
127*cdf0e10cSrcweir     @param  Digest  [in] digest handle.
128*cdf0e10cSrcweir 	@param  pData   [in] data buffer.
129*cdf0e10cSrcweir 	@param  nDatLen [in] data length.
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
132*cdf0e10cSrcweir  */
133*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_init (
134*cdf0e10cSrcweir 	rtlDigest Digest,
135*cdf0e10cSrcweir 	const sal_uInt8 *pData, sal_uInt32 nDatLen
136*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir /** Update a digest with given data.
140*cdf0e10cSrcweir     @param  Digest  [in] digest handle.
141*cdf0e10cSrcweir 	@param  pData   [in] data buffer.
142*cdf0e10cSrcweir 	@param  nDatLen [in] data length.
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
145*cdf0e10cSrcweir  */
146*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_update (
147*cdf0e10cSrcweir 	rtlDigest Digest,
148*cdf0e10cSrcweir 	const void *pData, sal_uInt32 nDatLen
149*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir /** Finalize a digest and retrieve the digest value.
153*cdf0e10cSrcweir     @precond  Digest value length must not be less than digest length.
154*cdf0e10cSrcweir 	@postcond Digest initialized to accept another update sequence.
155*cdf0e10cSrcweir 	@see      rtl_digest_queryLength()
156*cdf0e10cSrcweir 	@see      rtl_digest_update()
157*cdf0e10cSrcweir 
158*cdf0e10cSrcweir     @param  Digest  [in] digest handle.
159*cdf0e10cSrcweir 	@param  pBuffer [in] digest value buffer.
160*cdf0e10cSrcweir 	@param  nBufLen [in] digest value length.
161*cdf0e10cSrcweir 
162*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
163*cdf0e10cSrcweir  */
164*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_get (
165*cdf0e10cSrcweir 	rtlDigest Digest,
166*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
167*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
168*cdf0e10cSrcweir 
169*cdf0e10cSrcweir /*========================================================================
170*cdf0e10cSrcweir  *
171*cdf0e10cSrcweir  * rtl_digest_MD2 interface.
172*cdf0e10cSrcweir  *
173*cdf0e10cSrcweir  *======================================================================*/
174*cdf0e10cSrcweir #define RTL_DIGEST_LENGTH_MD2 16
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir /** Create a MD2 digest handle.
177*cdf0e10cSrcweir     @descr The MD2 digest algorithm is specified in
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir     RFC 1319 (Informational)
180*cdf0e10cSrcweir       The MD2 Message-Digest Algorithm
181*cdf0e10cSrcweir 
182*cdf0e10cSrcweir     @see rtl_digest_create()
183*cdf0e10cSrcweir  */
184*cdf0e10cSrcweir rtlDigest SAL_CALL rtl_digest_createMD2 (void) SAL_THROW_EXTERN_C();
185*cdf0e10cSrcweir 
186*cdf0e10cSrcweir 
187*cdf0e10cSrcweir /** Destroy a MD2 digest handle.
188*cdf0e10cSrcweir     @see rtl_digest_destroy()
189*cdf0e10cSrcweir  */
190*cdf0e10cSrcweir void SAL_CALL rtl_digest_destroyMD2 (
191*cdf0e10cSrcweir 	rtlDigest Digest
192*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
193*cdf0e10cSrcweir 
194*cdf0e10cSrcweir 
195*cdf0e10cSrcweir /** Update a MD2 digest with given data.
196*cdf0e10cSrcweir     @see rtl_digest_update()
197*cdf0e10cSrcweir  */
198*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_updateMD2 (
199*cdf0e10cSrcweir 	rtlDigest Digest,
200*cdf0e10cSrcweir 	const void *pData, sal_uInt32 nDatLen
201*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir 
204*cdf0e10cSrcweir /** Finalize a MD2 digest and retrieve the digest value.
205*cdf0e10cSrcweir     @see rtl_digest_get()
206*cdf0e10cSrcweir  */
207*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_getMD2 (
208*cdf0e10cSrcweir 	rtlDigest Digest,
209*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
210*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
211*cdf0e10cSrcweir 
212*cdf0e10cSrcweir 
213*cdf0e10cSrcweir /** Evaluate a MD2 digest value from given data.
214*cdf0e10cSrcweir     @descr This function performs an optimized call sequence on a
215*cdf0e10cSrcweir 	single data buffer, avoiding digest creation and destruction.
216*cdf0e10cSrcweir 
217*cdf0e10cSrcweir 	@see rtl_digest_updateMD2()
218*cdf0e10cSrcweir 	@see rtl_digest_getMD2()
219*cdf0e10cSrcweir 
220*cdf0e10cSrcweir 	@param  pData   [in] data buffer.
221*cdf0e10cSrcweir 	@param  nDatLen [in] data length.
222*cdf0e10cSrcweir 	@param  pBuffer [in] digest value buffer.
223*cdf0e10cSrcweir 	@param  nBufLen [in] digest value length.
224*cdf0e10cSrcweir 
225*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
226*cdf0e10cSrcweir  */
227*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_MD2 (
228*cdf0e10cSrcweir 	const void *pData,   sal_uInt32 nDatLen,
229*cdf0e10cSrcweir 	sal_uInt8  *pBuffer, sal_uInt32 nBufLen
230*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
231*cdf0e10cSrcweir 
232*cdf0e10cSrcweir /*========================================================================
233*cdf0e10cSrcweir  *
234*cdf0e10cSrcweir  * rtl_digest_MD5 interface.
235*cdf0e10cSrcweir  *
236*cdf0e10cSrcweir  *======================================================================*/
237*cdf0e10cSrcweir #define RTL_DIGEST_LENGTH_MD5 16
238*cdf0e10cSrcweir 
239*cdf0e10cSrcweir /** Create a MD5 digest handle.
240*cdf0e10cSrcweir     @descr The MD5 digest algorithm is specified in
241*cdf0e10cSrcweir 
242*cdf0e10cSrcweir     RFC 1321 (Informational)
243*cdf0e10cSrcweir       The MD5 Message-Digest Algorithm
244*cdf0e10cSrcweir 
245*cdf0e10cSrcweir     @see rtl_digest_create()
246*cdf0e10cSrcweir  */
247*cdf0e10cSrcweir rtlDigest SAL_CALL rtl_digest_createMD5 (void) SAL_THROW_EXTERN_C();
248*cdf0e10cSrcweir 
249*cdf0e10cSrcweir 
250*cdf0e10cSrcweir /** Destroy a MD5 digest handle.
251*cdf0e10cSrcweir     @see rtl_digest_destroy()
252*cdf0e10cSrcweir  */
253*cdf0e10cSrcweir void SAL_CALL rtl_digest_destroyMD5 (
254*cdf0e10cSrcweir 	rtlDigest Digest
255*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
256*cdf0e10cSrcweir 
257*cdf0e10cSrcweir 
258*cdf0e10cSrcweir /** Update a MD5 digest with given data.
259*cdf0e10cSrcweir     @see rtl_digest_update()
260*cdf0e10cSrcweir  */
261*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_updateMD5 (
262*cdf0e10cSrcweir 	rtlDigest Digest,
263*cdf0e10cSrcweir 	const void *pData, sal_uInt32 nDatLen
264*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
265*cdf0e10cSrcweir 
266*cdf0e10cSrcweir 
267*cdf0e10cSrcweir /** Finalize a MD5 digest and retrieve the digest value.
268*cdf0e10cSrcweir     @see rtl_digest_get()
269*cdf0e10cSrcweir  */
270*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_getMD5 (
271*cdf0e10cSrcweir 	rtlDigest Digest,
272*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
273*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
274*cdf0e10cSrcweir 
275*cdf0e10cSrcweir 
276*cdf0e10cSrcweir /** Retrieve the raw (not finalized) MD5 digest value.
277*cdf0e10cSrcweir 	@descr This function is a non-standard replacement for
278*cdf0e10cSrcweir 	rtl_digest_getMD5() and must be used with caution.
279*cdf0e10cSrcweir 
280*cdf0e10cSrcweir 	@postcond Digest initialized to accept another update sequence.
281*cdf0e10cSrcweir     @see      rtl_digest_get()
282*cdf0e10cSrcweir  */
283*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_rawMD5 (
284*cdf0e10cSrcweir 	rtlDigest Digest,
285*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
286*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
287*cdf0e10cSrcweir 
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir /** Evaluate a MD5 digest value from given data.
290*cdf0e10cSrcweir     @descr This function performs an optimized call sequence on a
291*cdf0e10cSrcweir 	single data buffer, avoiding digest creation and destruction.
292*cdf0e10cSrcweir 
293*cdf0e10cSrcweir 	@see rtl_digest_updateMD5()
294*cdf0e10cSrcweir 	@see rtl_digest_getMD5()
295*cdf0e10cSrcweir 
296*cdf0e10cSrcweir 	@param  pData   [in] data buffer.
297*cdf0e10cSrcweir 	@param  nDatLen [in] data length.
298*cdf0e10cSrcweir 	@param  pBuffer [in] digest value buffer.
299*cdf0e10cSrcweir 	@param  nBufLen [in] digest value length.
300*cdf0e10cSrcweir 
301*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
302*cdf0e10cSrcweir  */
303*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_MD5 (
304*cdf0e10cSrcweir 	const void *pData,   sal_uInt32 nDatLen,
305*cdf0e10cSrcweir 	sal_uInt8  *pBuffer, sal_uInt32 nBufLen
306*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
307*cdf0e10cSrcweir 
308*cdf0e10cSrcweir /*========================================================================
309*cdf0e10cSrcweir  *
310*cdf0e10cSrcweir  * rtl_digest_SHA interface.
311*cdf0e10cSrcweir  *
312*cdf0e10cSrcweir  *======================================================================*/
313*cdf0e10cSrcweir #define RTL_DIGEST_LENGTH_SHA 20
314*cdf0e10cSrcweir 
315*cdf0e10cSrcweir /** Create a SHA digest handle.
316*cdf0e10cSrcweir     @descr The SHA digest algorithm is specified in
317*cdf0e10cSrcweir 
318*cdf0e10cSrcweir     FIPS PUB 180 (Superseded by FIPS PUB 180-1)
319*cdf0e10cSrcweir       Secure Hash Standard
320*cdf0e10cSrcweir 
321*cdf0e10cSrcweir     @see rtl_digest_create()
322*cdf0e10cSrcweir  */
323*cdf0e10cSrcweir rtlDigest SAL_CALL rtl_digest_createSHA (void) SAL_THROW_EXTERN_C();
324*cdf0e10cSrcweir 
325*cdf0e10cSrcweir 
326*cdf0e10cSrcweir /** Destroy a SHA digest handle.
327*cdf0e10cSrcweir     @see rtl_digest_destroy()
328*cdf0e10cSrcweir  */
329*cdf0e10cSrcweir void SAL_CALL rtl_digest_destroySHA (
330*cdf0e10cSrcweir 	rtlDigest Digest
331*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
332*cdf0e10cSrcweir 
333*cdf0e10cSrcweir 
334*cdf0e10cSrcweir /** Update a SHA digest with given data.
335*cdf0e10cSrcweir     @see rtl_digest_update()
336*cdf0e10cSrcweir  */
337*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_updateSHA (
338*cdf0e10cSrcweir 	rtlDigest Digest,
339*cdf0e10cSrcweir 	const void *pData, sal_uInt32 nDatLen
340*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
341*cdf0e10cSrcweir 
342*cdf0e10cSrcweir 
343*cdf0e10cSrcweir /** Finalize a SHA digest and retrieve the digest value.
344*cdf0e10cSrcweir     @see rtl_digest_get()
345*cdf0e10cSrcweir  */
346*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_getSHA (
347*cdf0e10cSrcweir 	rtlDigest Digest,
348*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
349*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
350*cdf0e10cSrcweir 
351*cdf0e10cSrcweir 
352*cdf0e10cSrcweir /** Evaluate a SHA digest value from given data.
353*cdf0e10cSrcweir     @descr This function performs an optimized call sequence on a
354*cdf0e10cSrcweir 	single data buffer, avoiding digest creation and destruction.
355*cdf0e10cSrcweir 
356*cdf0e10cSrcweir 	@see rtl_digest_updateSHA()
357*cdf0e10cSrcweir 	@see rtl_digest_getSHA()
358*cdf0e10cSrcweir 
359*cdf0e10cSrcweir 	@param  pData   [in] data buffer.
360*cdf0e10cSrcweir 	@param  nDatLen [in] data length.
361*cdf0e10cSrcweir 	@param  pBuffer [in] digest value buffer.
362*cdf0e10cSrcweir 	@param  nBufLen [in] digest value length.
363*cdf0e10cSrcweir 
364*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
365*cdf0e10cSrcweir  */
366*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_SHA (
367*cdf0e10cSrcweir 	const void *pData,   sal_uInt32 nDatLen,
368*cdf0e10cSrcweir 	sal_uInt8  *pBuffer, sal_uInt32 nBufLen
369*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
370*cdf0e10cSrcweir 
371*cdf0e10cSrcweir /*========================================================================
372*cdf0e10cSrcweir  *
373*cdf0e10cSrcweir  * rtl_digest_SHA1 interface.
374*cdf0e10cSrcweir  *
375*cdf0e10cSrcweir  *======================================================================*/
376*cdf0e10cSrcweir #define RTL_DIGEST_LENGTH_SHA1 20
377*cdf0e10cSrcweir 
378*cdf0e10cSrcweir /** Create a SHA1 digest handle.
379*cdf0e10cSrcweir     @descr The SHA1 digest algorithm is specified in
380*cdf0e10cSrcweir 
381*cdf0e10cSrcweir     FIPS PUB 180-1 (Supersedes FIPS PUB 180)
382*cdf0e10cSrcweir       Secure Hash Standard
383*cdf0e10cSrcweir 
384*cdf0e10cSrcweir     @see rtl_digest_create()
385*cdf0e10cSrcweir  */
386*cdf0e10cSrcweir rtlDigest SAL_CALL rtl_digest_createSHA1 (void) SAL_THROW_EXTERN_C();
387*cdf0e10cSrcweir 
388*cdf0e10cSrcweir 
389*cdf0e10cSrcweir /** Destroy a SHA1 digest handle.
390*cdf0e10cSrcweir     @see rtl_digest_destroy()
391*cdf0e10cSrcweir  */
392*cdf0e10cSrcweir void SAL_CALL rtl_digest_destroySHA1 (
393*cdf0e10cSrcweir 	rtlDigest Digest
394*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
395*cdf0e10cSrcweir 
396*cdf0e10cSrcweir 
397*cdf0e10cSrcweir /** Update a SHA1 digest with given data.
398*cdf0e10cSrcweir     @see rtl_digest_update()
399*cdf0e10cSrcweir  */
400*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_updateSHA1 (
401*cdf0e10cSrcweir 	rtlDigest Digest,
402*cdf0e10cSrcweir 	const void *pData, sal_uInt32 nDatLen
403*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
404*cdf0e10cSrcweir 
405*cdf0e10cSrcweir 
406*cdf0e10cSrcweir /** Finalize a SHA1 digest and retrieve the digest value.
407*cdf0e10cSrcweir     @see rtl_digest_get()
408*cdf0e10cSrcweir  */
409*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_getSHA1 (
410*cdf0e10cSrcweir 	rtlDigest Digest,
411*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
412*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
413*cdf0e10cSrcweir 
414*cdf0e10cSrcweir 
415*cdf0e10cSrcweir /** Evaluate a SHA1 digest value from given data.
416*cdf0e10cSrcweir     @descr This function performs an optimized call sequence on a
417*cdf0e10cSrcweir 	single data buffer, avoiding digest creation and destruction.
418*cdf0e10cSrcweir 
419*cdf0e10cSrcweir 	@see rtl_digest_updateSHA1()
420*cdf0e10cSrcweir 	@see rtl_digest_getSHA1()
421*cdf0e10cSrcweir 
422*cdf0e10cSrcweir 	@param  pData   [in] data buffer.
423*cdf0e10cSrcweir 	@param  nDatLen [in] data length.
424*cdf0e10cSrcweir 	@param  pBuffer [in] digest value buffer.
425*cdf0e10cSrcweir 	@param  nBufLen [in] digest value length.
426*cdf0e10cSrcweir 
427*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
428*cdf0e10cSrcweir  */
429*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_SHA1 (
430*cdf0e10cSrcweir 	const void *pData,   sal_uInt32 nDatLen,
431*cdf0e10cSrcweir 	sal_uInt8  *pBuffer, sal_uInt32 nBufLen
432*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
433*cdf0e10cSrcweir 
434*cdf0e10cSrcweir /*========================================================================
435*cdf0e10cSrcweir  *
436*cdf0e10cSrcweir  * rtl_digest_HMAC_MD5 interface.
437*cdf0e10cSrcweir  *
438*cdf0e10cSrcweir  *======================================================================*/
439*cdf0e10cSrcweir #define RTL_DIGEST_LENGTH_HMAC_MD5 RTL_DIGEST_LENGTH_MD5
440*cdf0e10cSrcweir 
441*cdf0e10cSrcweir /** Create a HMAC_MD5 digest handle.
442*cdf0e10cSrcweir     @descr The HMAC_MD5 digest algorithm is specified in
443*cdf0e10cSrcweir 
444*cdf0e10cSrcweir     RFC 2104 (Informational)
445*cdf0e10cSrcweir       HMAC: Keyed-Hashing for Message Authentication
446*cdf0e10cSrcweir 
447*cdf0e10cSrcweir     @see rtl_digest_create()
448*cdf0e10cSrcweir  */
449*cdf0e10cSrcweir rtlDigest SAL_CALL rtl_digest_createHMAC_MD5 (void) SAL_THROW_EXTERN_C();
450*cdf0e10cSrcweir 
451*cdf0e10cSrcweir 
452*cdf0e10cSrcweir /** Destroy a HMAC_MD5 digest handle.
453*cdf0e10cSrcweir     @see rtl_digest_destroy()
454*cdf0e10cSrcweir  */
455*cdf0e10cSrcweir void SAL_CALL rtl_digest_destroyHMAC_MD5 (
456*cdf0e10cSrcweir 	rtlDigest Digest
457*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
458*cdf0e10cSrcweir 
459*cdf0e10cSrcweir 
460*cdf0e10cSrcweir /** Initialize a HMAC_MD5 digest.
461*cdf0e10cSrcweir     @see rtl_digest_init()
462*cdf0e10cSrcweir 
463*cdf0e10cSrcweir     @param  Digest   [in] digest handle.
464*cdf0e10cSrcweir 	@param  pKeyData [in] key material buffer.
465*cdf0e10cSrcweir 	@param  nKeyLen  [in] key material length.
466*cdf0e10cSrcweir 
467*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
468*cdf0e10cSrcweir  */
469*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_initHMAC_MD5 (
470*cdf0e10cSrcweir 	rtlDigest Digest,
471*cdf0e10cSrcweir 	const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen
472*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
473*cdf0e10cSrcweir 
474*cdf0e10cSrcweir 
475*cdf0e10cSrcweir /** Update a HMAC_MD5 digest with given data.
476*cdf0e10cSrcweir     @see rtl_digest_update()
477*cdf0e10cSrcweir  */
478*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_updateHMAC_MD5 (
479*cdf0e10cSrcweir 	rtlDigest Digest,
480*cdf0e10cSrcweir 	const void *pData, sal_uInt32 nDatLen
481*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
482*cdf0e10cSrcweir 
483*cdf0e10cSrcweir 
484*cdf0e10cSrcweir /** Finalize a HMAC_MD5 digest and retrieve the digest value.
485*cdf0e10cSrcweir     @see rtl_digest_get()
486*cdf0e10cSrcweir  */
487*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_getHMAC_MD5 (
488*cdf0e10cSrcweir 	rtlDigest Digest,
489*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
490*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
491*cdf0e10cSrcweir 
492*cdf0e10cSrcweir 
493*cdf0e10cSrcweir /** Evaluate a HMAC_MD5 digest value from given data.
494*cdf0e10cSrcweir     @descr This function performs an optimized call sequence on a
495*cdf0e10cSrcweir 	single data buffer, avoiding digest creation and destruction.
496*cdf0e10cSrcweir 
497*cdf0e10cSrcweir 	@see rtl_digest_initHMAC_MD5()
498*cdf0e10cSrcweir 	@see rtl_digest_updateHMAC_MD5()
499*cdf0e10cSrcweir 	@see rtl_digest_getHMAC_MD5()
500*cdf0e10cSrcweir 
501*cdf0e10cSrcweir 	@param  pKeyData [in] key material buffer.
502*cdf0e10cSrcweir 	@param  nKeyLen  [in] key material length.
503*cdf0e10cSrcweir 	@param  pData    [in] data buffer.
504*cdf0e10cSrcweir 	@param  nDatLen  [in] data length.
505*cdf0e10cSrcweir 	@param  pBuffer  [in] digest value buffer.
506*cdf0e10cSrcweir 	@param  nBufLen  [in] digest value length.
507*cdf0e10cSrcweir 
508*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
509*cdf0e10cSrcweir  */
510*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_HMAC_MD5 (
511*cdf0e10cSrcweir 	const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen,
512*cdf0e10cSrcweir 	const void      *pData,    sal_uInt32 nDatLen,
513*cdf0e10cSrcweir 	sal_uInt8       *pBuffer,  sal_uInt32 nBufLen
514*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
515*cdf0e10cSrcweir 
516*cdf0e10cSrcweir /*========================================================================
517*cdf0e10cSrcweir  *
518*cdf0e10cSrcweir  * rtl_digest_HMAC_SHA1 interface.
519*cdf0e10cSrcweir  *
520*cdf0e10cSrcweir  *======================================================================*/
521*cdf0e10cSrcweir #define RTL_DIGEST_LENGTH_HMAC_SHA1 RTL_DIGEST_LENGTH_SHA1
522*cdf0e10cSrcweir 
523*cdf0e10cSrcweir /** Create a HMAC_SHA1 digest handle.
524*cdf0e10cSrcweir     @descr The HMAC_SHA1 digest algorithm is specified in
525*cdf0e10cSrcweir 
526*cdf0e10cSrcweir     RFC 2104 (Informational)
527*cdf0e10cSrcweir       HMAC: Keyed-Hashing for Message Authentication
528*cdf0e10cSrcweir     RFC 2898 (Informational)
529*cdf0e10cSrcweir       PKCS #5: Password-Based Cryptography Specification Version 2.0
530*cdf0e10cSrcweir 
531*cdf0e10cSrcweir     @see rtl_digest_create()
532*cdf0e10cSrcweir  */
533*cdf0e10cSrcweir rtlDigest SAL_CALL rtl_digest_createHMAC_SHA1 (void) SAL_THROW_EXTERN_C();
534*cdf0e10cSrcweir 
535*cdf0e10cSrcweir 
536*cdf0e10cSrcweir /** Destroy a HMAC_SHA1 digest handle.
537*cdf0e10cSrcweir     @see rtl_digest_destroy()
538*cdf0e10cSrcweir  */
539*cdf0e10cSrcweir void SAL_CALL rtl_digest_destroyHMAC_SHA1 (
540*cdf0e10cSrcweir 	rtlDigest Digest
541*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
542*cdf0e10cSrcweir 
543*cdf0e10cSrcweir 
544*cdf0e10cSrcweir /** Initialize a HMAC_SHA1 digest.
545*cdf0e10cSrcweir     @see rtl_digest_init()
546*cdf0e10cSrcweir 
547*cdf0e10cSrcweir     @param  Digest   [in] digest handle.
548*cdf0e10cSrcweir 	@param  pKeyData [in] key material buffer.
549*cdf0e10cSrcweir 	@param  nKeyLen  [in] key material length.
550*cdf0e10cSrcweir 
551*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
552*cdf0e10cSrcweir  */
553*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_initHMAC_SHA1 (
554*cdf0e10cSrcweir 	rtlDigest Digest,
555*cdf0e10cSrcweir 	const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen
556*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
557*cdf0e10cSrcweir 
558*cdf0e10cSrcweir 
559*cdf0e10cSrcweir /** Update a HMAC_SHA1 digest with given data.
560*cdf0e10cSrcweir     @see rtl_digest_update()
561*cdf0e10cSrcweir  */
562*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_updateHMAC_SHA1 (
563*cdf0e10cSrcweir 	rtlDigest Digest,
564*cdf0e10cSrcweir 	const void *pData, sal_uInt32 nDatLen
565*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
566*cdf0e10cSrcweir 
567*cdf0e10cSrcweir 
568*cdf0e10cSrcweir /** Finalize a HMAC_SHA1 digest and retrieve the digest value.
569*cdf0e10cSrcweir     @see rtl_digest_get()
570*cdf0e10cSrcweir  */
571*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_getHMAC_SHA1 (
572*cdf0e10cSrcweir 	rtlDigest Digest,
573*cdf0e10cSrcweir 	sal_uInt8 *pBuffer, sal_uInt32 nBufLen
574*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
575*cdf0e10cSrcweir 
576*cdf0e10cSrcweir 
577*cdf0e10cSrcweir /** Evaluate a HMAC_SHA1 digest value from given data.
578*cdf0e10cSrcweir     @descr This function performs an optimized call sequence on a
579*cdf0e10cSrcweir 	single data buffer, avoiding digest creation and destruction.
580*cdf0e10cSrcweir 
581*cdf0e10cSrcweir 	@see rtl_digest_initHMAC_SHA1()
582*cdf0e10cSrcweir 	@see rtl_digest_updateHMAC_SHA1()
583*cdf0e10cSrcweir 	@see rtl_digest_getHMAC_SHA1()
584*cdf0e10cSrcweir 
585*cdf0e10cSrcweir 	@param  pKeyData [in] key material buffer.
586*cdf0e10cSrcweir 	@param  nKeyLen  [in] key material length.
587*cdf0e10cSrcweir 	@param  pData    [in] data buffer.
588*cdf0e10cSrcweir 	@param  nDatLen  [in] data length.
589*cdf0e10cSrcweir 	@param  pBuffer  [in] digest value buffer.
590*cdf0e10cSrcweir 	@param  nBufLen  [in] digest value length.
591*cdf0e10cSrcweir 
592*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
593*cdf0e10cSrcweir  */
594*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_HMAC_SHA1 (
595*cdf0e10cSrcweir 	const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen,
596*cdf0e10cSrcweir 	const void      *pData,    sal_uInt32 nDatLen,
597*cdf0e10cSrcweir 	sal_uInt8       *pBuffer,  sal_uInt32 nBufLen
598*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
599*cdf0e10cSrcweir 
600*cdf0e10cSrcweir /*========================================================================
601*cdf0e10cSrcweir  *
602*cdf0e10cSrcweir  * rtl_digest_PBKDF2 interface.
603*cdf0e10cSrcweir  *
604*cdf0e10cSrcweir  *======================================================================*/
605*cdf0e10cSrcweir /** Password-Based Key Derivation Function.
606*cdf0e10cSrcweir     @descr The PBKDF2 key derivation function is specified in
607*cdf0e10cSrcweir 
608*cdf0e10cSrcweir     RFC 2898 (Informational)
609*cdf0e10cSrcweir       PKCS #5: Password-Based Cryptography Specification Version 2.0
610*cdf0e10cSrcweir 
611*cdf0e10cSrcweir     @param  pKeyData  [out] derived key
612*cdf0e10cSrcweir     @param  nKeyLen   [in]  derived key length
613*cdf0e10cSrcweir 	@param  pPassData [in]  password
614*cdf0e10cSrcweir 	@param  nPassLen  [in]  password length
615*cdf0e10cSrcweir 	@param  pSaltData [in]  salt
616*cdf0e10cSrcweir 	@param  nSaltLen  [in]  salt length
617*cdf0e10cSrcweir 	@param  nCount    [in]  iteration count
618*cdf0e10cSrcweir 
619*cdf0e10cSrcweir 	@return rtl_Digest_E_None upon success.
620*cdf0e10cSrcweir */
621*cdf0e10cSrcweir rtlDigestError SAL_CALL rtl_digest_PBKDF2 (
622*cdf0e10cSrcweir 	sal_uInt8       *pKeyData , sal_uInt32 nKeyLen,
623*cdf0e10cSrcweir 	const sal_uInt8 *pPassData, sal_uInt32 nPassLen,
624*cdf0e10cSrcweir 	const sal_uInt8 *pSaltData, sal_uInt32 nSaltLen,
625*cdf0e10cSrcweir 	sal_uInt32       nCount
626*cdf0e10cSrcweir ) SAL_THROW_EXTERN_C();
627*cdf0e10cSrcweir 
628*cdf0e10cSrcweir /*========================================================================
629*cdf0e10cSrcweir  *
630*cdf0e10cSrcweir  * The End.
631*cdf0e10cSrcweir  *
632*cdf0e10cSrcweir  *======================================================================*/
633*cdf0e10cSrcweir 
634*cdf0e10cSrcweir #ifdef __cplusplus
635*cdf0e10cSrcweir }
636*cdf0e10cSrcweir #endif
637*cdf0e10cSrcweir 
638*cdf0e10cSrcweir #endif /* _RTL_DIGEST_H_ */
639*cdf0e10cSrcweir 
640