mdXhl.c revision 6684
114965Sjoerg/* mdXhl.c
214965Sjoerg * ----------------------------------------------------------------------------
314965Sjoerg * "THE BEER-WARE LICENSE" (Revision 42):
414965Sjoerg * <phk@login.dkuug.dk> wrote this file.  As long as you retain this notice you
514965Sjoerg * can do whatever you want with this stuff. If we meet some day, and you think
614965Sjoerg * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
714965Sjoerg * ----------------------------------------------------------------------------
814965Sjoerg *
914965Sjoerg * $FreeBSD: head/lib/libmd/mdXhl.c 6684 1995-02-24 08:51:34Z phk $
1014965Sjoerg *
1114965Sjoerg */
1214965Sjoerg
1314965Sjoerg#include <stdlib.h>
1414965Sjoerg#include <stdio.h>
1514965Sjoerg#include <errno.h>
1614965Sjoerg#include "mdX.h"
1714965Sjoerg#include <sys/file.h>
1814965Sjoerg#include <sys/types.h>
1914965Sjoerg#include <sys/uio.h>
2014965Sjoerg#include <unistd.h>
2114965Sjoerg
2214965Sjoergchar *
2314965SjoergMDXEnd(MDX_CTX *ctx)
2414965Sjoerg{
2514965Sjoerg    int i;
2650476Speter    char *p = malloc(33);
2714965Sjoerg    unsigned char digest[16];
2814965Sjoerg    char hex[]="0123456789abcdef";
29240506Seadler
30206622Suqs    if(!p) return 0;
3114965Sjoerg    MDXFinal(digest,ctx);
3214965Sjoerg    for(i=0;i<16;i++) {
3314965Sjoerg	p[i+i] = hex[digest[i] >> 4];
3414965Sjoerg	p[i+i+1] = hex[digest[i] & 0x0f];
3514965Sjoerg    }
3684306Sru    p[i+i] = '\0';
3714965Sjoerg    return p;
3814965Sjoerg}
3914965Sjoerg
4014965Sjoergchar *
4114965SjoergMDXFile (char *filename)
4214965Sjoerg{
43131530Sru    unsigned char buffer[BUFSIZ];
44131530Sru    MDX_CTX ctx;
4568962Sru    int f,i,j;
4614965Sjoerg
4714965Sjoerg    MDXInit(&ctx);
4814965Sjoerg    f = open(filename,O_RDONLY);
4914965Sjoerg    if(f < 0) return 0;
5014965Sjoerg    while((i = read(f,buffer,sizeof buffer)) > 0) {
5114965Sjoerg	MDXUpdate(&ctx,buffer,i);
5214965Sjoerg    }
5314965Sjoerg    j = errno;
54131530Sru    close(f);
55131530Sru    errno = j;
5614965Sjoerg    if(i < 0) return 0;
5714965Sjoerg    return MDXEnd(&ctx);
5814965Sjoerg}
5914965Sjoerg
6014965Sjoergchar *
6114965SjoergMDXData (const unsigned char *data, unsigned int len)
62131530Sru{
63131530Sru    MDX_CTX ctx;
6414965Sjoerg
6514965Sjoerg    MDXInit(&ctx);
6614965Sjoerg    MDXUpdate(&ctx,data,len);
6714965Sjoerg    return MDXEnd(&ctx);
6814965Sjoerg}
6914965Sjoerg