Blame ninfod/iputils_md5dig.h

Packit 1034e0
#ifndef IPUTILS_MD5DIG_H
Packit 1034e0
#define IPUTILS_MD5DIG_H
Packit 1034e0
Packit 1034e0
#ifdef USE_GCRYPT
Packit 1034e0
# include <stdlib.h>
Packit 1034e0
# include <gcrypt.h>
Packit 1034e0
# define IPUTILS_MD5DIG_LEN	16
Packit 1034e0
#else
Packit 1034e0
# include <openssl/md5.h>
Packit 1034e0
#endif
Packit 1034e0
Packit 1034e0
#ifdef USE_GCRYPT
Packit 1034e0
typedef struct {
Packit 1034e0
	gcry_md_hd_t dig;
Packit 1034e0
} iputils_md5dig_ctx;
Packit 1034e0
Packit 1034e0
static void iputils_md5dig_init(iputils_md5dig_ctx *ctx)
Packit 1034e0
{
Packit 1034e0
	if (gcry_md_open(&ctx->dig, GCRY_MD_MD5, 0) != GPG_ERR_NO_ERROR)
Packit 1034e0
		abort();
Packit 1034e0
}
Packit 1034e0
Packit 1034e0
static void iputils_md5dig_update(iputils_md5dig_ctx *ctx,
Packit 1034e0
				  const void *buf, int len)
Packit 1034e0
{
Packit 1034e0
	gcry_md_write(ctx->dig, buf, len);
Packit 1034e0
}
Packit 1034e0
Packit 1034e0
static void iputils_md5dig_final(unsigned char *digest,
Packit 1034e0
				 iputils_md5dig_ctx *ctx)
Packit 1034e0
{
Packit 1034e0
	const void *p;
Packit 1034e0
	size_t dlen;
Packit 1034e0
Packit 1034e0
	p = gcry_md_read(ctx->dig, GCRY_MD_MD5);
Packit 1034e0
	dlen = gcry_md_get_algo_dlen(GCRY_MD_MD5);
Packit 1034e0
Packit 1034e0
	if (dlen != IPUTILS_MD5DIG_LEN)
Packit 1034e0
		abort();
Packit 1034e0
Packit 1034e0
	memcpy(digest, p, dlen);
Packit 1034e0
Packit 1034e0
	gcry_md_close(ctx->dig);
Packit 1034e0
}
Packit 1034e0
Packit 1034e0
# define MD5_DIGEST_LENGTH	IPUTILS_MD5DIG_LEN
Packit 1034e0
# define MD5_CTX		iputils_md5dig_ctx
Packit 1034e0
# define MD5_Init		iputils_md5dig_init
Packit 1034e0
# define MD5_Update		iputils_md5dig_update
Packit 1034e0
# define MD5_Final		iputils_md5dig_final
Packit 1034e0
#endif
Packit 1034e0
#endif