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