#ifndef _PBKD_DIGEST_H_
#define _PBKD_DIGEST_H_
#include <Security/cssmtype.h>
#include <openssl/md5.h>
#include <openssl/md2.h>
#include <openssl/sha.h>
#ifdef __cplusplus
extern "C" {
#endif
#define kSHA1DigestSize SHA_DIGEST_LENGTH
#define kSHA1BlockSize SHA_CBLOCK
#define kMD5DigestSize MD5_DIGEST_LENGTH
#define kMD5BlockSize MD5_CBLOCK
#define kMD2DigestSize MD2_DIGEST_LENGTH
#define kMD2BlockSize (MD2_BLOCK * 4)
#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 {
SHA_CTX sha1Context;
MD5_CTX md5Context;
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