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