mdXhl.c revision 44290
11802Sphk/* mdXhl.c
21802Sphk * ----------------------------------------------------------------------------
31802Sphk * "THE BEER-WARE LICENSE" (Revision 42):
41802Sphk * <phk@login.dkuug.dk> wrote this file.  As long as you retain this notice you
51802Sphk * can do whatever you want with this stuff. If we meet some day, and you think
61802Sphk * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
71802Sphk * ----------------------------------------------------------------------------
81802Sphk *
944290Swollman * $Id: mdXhl.c,v 1.11 1997/08/25 05:24:25 joerg Exp $
101802Sphk *
111802Sphk */
121802Sphk
136684Sphk#include <sys/types.h>
1419168Sbde#include <fcntl.h>
156684Sphk#include <unistd.h>
161802Sphk
1719168Sbde#include <errno.h>
1819168Sbde#include <stdio.h>
1919168Sbde#include <stdlib.h>
2019168Sbde
2119168Sbde#include "mdX.h"
2219168Sbde
231802Sphkchar *
249488SphkMDXEnd(MDX_CTX *ctx, char *buf)
251802Sphk{
261802Sphk    int i;
2744290Swollman    unsigned char digest[LENGTH];
288103Swollman    static const char hex[]="0123456789abcdef";
298870Srgrimes
3017271Sphk    if (!buf)
3144290Swollman        buf = malloc(2*LENGTH + 1);
3217271Sphk    if (!buf)
339488Sphk	return 0;
3444290Swollman    MDXFinal(digest, ctx);
3544290Swollman    for (i = 0; i < LENGTH; i++) {
3617271Sphk	buf[i+i] = hex[digest[i] >> 4];
3717271Sphk	buf[i+i+1] = hex[digest[i] & 0x0f];
381802Sphk    }
3917271Sphk    buf[i+i] = '\0';
4017271Sphk    return buf;
411802Sphk}
421802Sphk
431802Sphkchar *
4444290SwollmanMDXFile(const char *filename, char *buf)
451802Sphk{
466684Sphk    unsigned char buffer[BUFSIZ];
471802Sphk    MDX_CTX ctx;
481802Sphk    int f,i,j;
491802Sphk
501802Sphk    MDXInit(&ctx);
511802Sphk    f = open(filename,O_RDONLY);
529488Sphk    if (f < 0) return 0;
539488Sphk    while ((i = read(f,buffer,sizeof buffer)) > 0) {
541802Sphk	MDXUpdate(&ctx,buffer,i);
551802Sphk    }
561802Sphk    j = errno;
571802Sphk    close(f);
581802Sphk    errno = j;
599488Sphk    if (i < 0) return 0;
609488Sphk    return MDXEnd(&ctx, buf);
611802Sphk}
621802Sphk
631802Sphkchar *
649488SphkMDXData (const unsigned char *data, unsigned int len, char *buf)
651802Sphk{
661802Sphk    MDX_CTX ctx;
671802Sphk
681802Sphk    MDXInit(&ctx);
691802Sphk    MDXUpdate(&ctx,data,len);
709488Sphk    return MDXEnd(&ctx, buf);
711802Sphk}
72