xref: /freebsd/lib/libmd/mdXhl.c (revision 8bc66d9bd2a765b561ab80e04308b808916e886d)
1c9502b53SPoul-Henning Kamp /* mdXhl.c
2c9502b53SPoul-Henning Kamp  * ----------------------------------------------------------------------------
3c9502b53SPoul-Henning Kamp  * "THE BEER-WARE LICENSE" (Revision 42):
4c9502b53SPoul-Henning Kamp  * <phk@login.dkuug.dk> wrote this file.  As long as you retain this notice you
5c9502b53SPoul-Henning Kamp  * can do whatever you want with this stuff. If we meet some day, and you think
6c9502b53SPoul-Henning Kamp  * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
7c9502b53SPoul-Henning Kamp  * ----------------------------------------------------------------------------
8c9502b53SPoul-Henning Kamp  *
98bc66d9bSPoul-Henning Kamp  * $Id: mdXhl.c,v 1.6 1995/07/12 09:13:47 phk Exp $
10c9502b53SPoul-Henning Kamp  *
11c9502b53SPoul-Henning Kamp  */
12c9502b53SPoul-Henning Kamp 
13c9502b53SPoul-Henning Kamp #include <stdlib.h>
14c9502b53SPoul-Henning Kamp #include <stdio.h>
15c9502b53SPoul-Henning Kamp #include <errno.h>
16c9502b53SPoul-Henning Kamp #include "mdX.h"
17c9502b53SPoul-Henning Kamp #include <sys/file.h>
186c20486dSPoul-Henning Kamp #include <sys/types.h>
196c20486dSPoul-Henning Kamp #include <sys/uio.h>
206c20486dSPoul-Henning Kamp #include <unistd.h>
21c9502b53SPoul-Henning Kamp 
22c9502b53SPoul-Henning Kamp char *
2305f65b29SPoul-Henning Kamp MDXEnd(MDX_CTX *ctx, char *buf)
24c9502b53SPoul-Henning Kamp {
25c9502b53SPoul-Henning Kamp     int i;
26c9502b53SPoul-Henning Kamp     unsigned char digest[16];
27003d2998SGarrett Wollman     static const char hex[]="0123456789abcdef";
28c9502b53SPoul-Henning Kamp 
298bc66d9bSPoul-Henning Kamp     if (!buf)
308bc66d9bSPoul-Henning Kamp         buf = malloc(33);
318bc66d9bSPoul-Henning Kamp     if (!buf)
3205f65b29SPoul-Henning Kamp 	return 0;
33c9502b53SPoul-Henning Kamp     MDXFinal(digest,ctx);
34c9502b53SPoul-Henning Kamp     for (i=0;i<16;i++) {
358bc66d9bSPoul-Henning Kamp 	buf[i+i] = hex[digest[i] >> 4];
368bc66d9bSPoul-Henning Kamp 	buf[i+i+1] = hex[digest[i] & 0x0f];
37c9502b53SPoul-Henning Kamp     }
388bc66d9bSPoul-Henning Kamp     buf[i+i] = '\0';
398bc66d9bSPoul-Henning Kamp     return buf;
40c9502b53SPoul-Henning Kamp }
41c9502b53SPoul-Henning Kamp 
42c9502b53SPoul-Henning Kamp char *
4305f65b29SPoul-Henning Kamp MDXFile (char *filename, char *buf)
44c9502b53SPoul-Henning Kamp {
456c20486dSPoul-Henning Kamp     unsigned char buffer[BUFSIZ];
46c9502b53SPoul-Henning Kamp     MDX_CTX ctx;
47c9502b53SPoul-Henning Kamp     int f,i,j;
48c9502b53SPoul-Henning Kamp 
49c9502b53SPoul-Henning Kamp     MDXInit(&ctx);
50c9502b53SPoul-Henning Kamp     f = open(filename,O_RDONLY);
51c9502b53SPoul-Henning Kamp     if (f < 0) return 0;
52c9502b53SPoul-Henning Kamp     while ((i = read(f,buffer,sizeof buffer)) > 0) {
53c9502b53SPoul-Henning Kamp 	MDXUpdate(&ctx,buffer,i);
54c9502b53SPoul-Henning Kamp     }
55c9502b53SPoul-Henning Kamp     j = errno;
56c9502b53SPoul-Henning Kamp     close(f);
57c9502b53SPoul-Henning Kamp     errno = j;
58c9502b53SPoul-Henning Kamp     if (i < 0) return 0;
5905f65b29SPoul-Henning Kamp     return MDXEnd(&ctx, buf);
60c9502b53SPoul-Henning Kamp }
61c9502b53SPoul-Henning Kamp 
62c9502b53SPoul-Henning Kamp char *
6305f65b29SPoul-Henning Kamp MDXData (const unsigned char *data, unsigned int len, char *buf)
64c9502b53SPoul-Henning Kamp {
65c9502b53SPoul-Henning Kamp     MDX_CTX ctx;
66c9502b53SPoul-Henning Kamp 
67c9502b53SPoul-Henning Kamp     MDXInit(&ctx);
68c9502b53SPoul-Henning Kamp     MDXUpdate(&ctx,data,len);
6905f65b29SPoul-Henning Kamp     return MDXEnd(&ctx, buf);
70c9502b53SPoul-Henning Kamp }
71