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