#ifndef _PBKD_DIGEST_H_
#define _PBKD_DIGEST_H_
#include <Security/cssmtype.h>
#include <CommonCrypto/CommonDigest.h>
#ifdef __cplusplus
extern "C" {
#endif
#define kSHA1DigestSize CC_SHA1_DIGEST_LENGTH
#define kSHA1BlockSize CC_SHA1_BLOCK_BYTES
#define kMD5DigestSize CC_MD5_DIGEST_LENGTH
#define kMD5BlockSize CC_MD5_BLOCK_BYTES
#define kMD2DigestSize CC_MD2_DIGEST_LENGTH
#define kMD2BlockSize CC_MD2_BLOCK_BYTES
#define kMaxDigestSize kSHA1DigestSize
typedef int (*DigestInitFcn)(void *ctx);
typedef int (*DigestUpdateFcn)(void *ctx, const void *data, unsigned long len);
typedef int (*DigestFinalFcn)(void *md, void *c);
typedef struct {
DigestInitFcn init;
DigestUpdateFcn update;
DigestFinalFcn final;
} DigestOps;
typedef struct {
union {
CC_SHA1_CTX sha1Context;
CC_MD5_CTX md5Context;
CC_MD2_CTX md2Context;
} dig;
DigestOps *ops;
CSSM_ALGORITHMS hashAlg;
} DigestCtx;
int DigestCtxInit(
DigestCtx *ctx,
CSSM_ALGORITHMS hashAlg);
void DigestCtxFree(
DigestCtx *ctx);
int DigestCtxUpdate(
DigestCtx *ctx,
const void *textPtr,
uint32 textLen);
int DigestCtxFinal(
DigestCtx *ctx,
void *digest);
#ifdef __cplusplus
}
#endif
#endif