xref: /freebsd/lib/libmd/mdXhl.c (revision 6c20486de431a94a26f018f34e0485b3e0705b10)
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  *
9c9502b53SPoul-Henning Kamp  * $FreeBSD$
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 *
23c9502b53SPoul-Henning Kamp MDXEnd(MDX_CTX *ctx)
24c9502b53SPoul-Henning Kamp {
25c9502b53SPoul-Henning Kamp     int i;
26c9502b53SPoul-Henning Kamp     char *p = malloc(33);
27c9502b53SPoul-Henning Kamp     unsigned char digest[16];
28c9502b53SPoul-Henning Kamp     char hex[]="0123456789abcdef";
29c9502b53SPoul-Henning Kamp 
30c9502b53SPoul-Henning Kamp     if(!p) return 0;
31c9502b53SPoul-Henning Kamp     MDXFinal(digest,ctx);
32c9502b53SPoul-Henning Kamp     for(i=0;i<16;i++) {
33c9502b53SPoul-Henning Kamp 	p[i+i] = hex[digest[i] >> 4];
34c9502b53SPoul-Henning Kamp 	p[i+i+1] = hex[digest[i] & 0x0f];
35c9502b53SPoul-Henning Kamp     }
36c9502b53SPoul-Henning Kamp     p[i+i] = '\0';
37c9502b53SPoul-Henning Kamp     return p;
38c9502b53SPoul-Henning Kamp }
39c9502b53SPoul-Henning Kamp 
40c9502b53SPoul-Henning Kamp char *
41c9502b53SPoul-Henning Kamp MDXFile (char *filename)
42c9502b53SPoul-Henning Kamp {
436c20486dSPoul-Henning Kamp     unsigned char buffer[BUFSIZ];
44c9502b53SPoul-Henning Kamp     MDX_CTX ctx;
45c9502b53SPoul-Henning Kamp     int f,i,j;
46c9502b53SPoul-Henning Kamp 
47c9502b53SPoul-Henning Kamp     MDXInit(&ctx);
48c9502b53SPoul-Henning Kamp     f = open(filename,O_RDONLY);
49c9502b53SPoul-Henning Kamp     if(f < 0) return 0;
50c9502b53SPoul-Henning Kamp     while((i = read(f,buffer,sizeof buffer)) > 0) {
51c9502b53SPoul-Henning Kamp 	MDXUpdate(&ctx,buffer,i);
52c9502b53SPoul-Henning Kamp     }
53c9502b53SPoul-Henning Kamp     j = errno;
54c9502b53SPoul-Henning Kamp     close(f);
55c9502b53SPoul-Henning Kamp     errno = j;
56c9502b53SPoul-Henning Kamp     if(i < 0) return 0;
57c9502b53SPoul-Henning Kamp     return MDXEnd(&ctx);
58c9502b53SPoul-Henning Kamp }
59c9502b53SPoul-Henning Kamp 
60c9502b53SPoul-Henning Kamp char *
614385de16SPoul-Henning Kamp MDXData (const unsigned char *data, unsigned int len)
62c9502b53SPoul-Henning Kamp {
63c9502b53SPoul-Henning Kamp     MDX_CTX ctx;
64c9502b53SPoul-Henning Kamp 
65c9502b53SPoul-Henning Kamp     MDXInit(&ctx);
66c9502b53SPoul-Henning Kamp     MDXUpdate(&ctx,data,len);
67c9502b53SPoul-Henning Kamp     return MDXEnd(&ctx);
68c9502b53SPoul-Henning Kamp }
69