mdXhl.c revision 44290
11802Sphk/* mdXhl.c 21802Sphk * ---------------------------------------------------------------------------- 31802Sphk * "THE BEER-WARE LICENSE" (Revision 42): 41802Sphk * <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you 51802Sphk * can do whatever you want with this stuff. If we meet some day, and you think 61802Sphk * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 71802Sphk * ---------------------------------------------------------------------------- 81802Sphk * 944290Swollman * $Id: mdXhl.c,v 1.11 1997/08/25 05:24:25 joerg Exp $ 101802Sphk * 111802Sphk */ 121802Sphk 136684Sphk#include <sys/types.h> 1419168Sbde#include <fcntl.h> 156684Sphk#include <unistd.h> 161802Sphk 1719168Sbde#include <errno.h> 1819168Sbde#include <stdio.h> 1919168Sbde#include <stdlib.h> 2019168Sbde 2119168Sbde#include "mdX.h" 2219168Sbde 231802Sphkchar * 249488SphkMDXEnd(MDX_CTX *ctx, char *buf) 251802Sphk{ 261802Sphk int i; 2744290Swollman unsigned char digest[LENGTH]; 288103Swollman static const char hex[]="0123456789abcdef"; 298870Srgrimes 3017271Sphk if (!buf) 3144290Swollman buf = malloc(2*LENGTH + 1); 3217271Sphk if (!buf) 339488Sphk return 0; 3444290Swollman MDXFinal(digest, ctx); 3544290Swollman for (i = 0; i < LENGTH; i++) { 3617271Sphk buf[i+i] = hex[digest[i] >> 4]; 3717271Sphk buf[i+i+1] = hex[digest[i] & 0x0f]; 381802Sphk } 3917271Sphk buf[i+i] = '\0'; 4017271Sphk return buf; 411802Sphk} 421802Sphk 431802Sphkchar * 4444290SwollmanMDXFile(const char *filename, char *buf) 451802Sphk{ 466684Sphk unsigned char buffer[BUFSIZ]; 471802Sphk MDX_CTX ctx; 481802Sphk int f,i,j; 491802Sphk 501802Sphk MDXInit(&ctx); 511802Sphk f = open(filename,O_RDONLY); 529488Sphk if (f < 0) return 0; 539488Sphk while ((i = read(f,buffer,sizeof buffer)) > 0) { 541802Sphk MDXUpdate(&ctx,buffer,i); 551802Sphk } 561802Sphk j = errno; 571802Sphk close(f); 581802Sphk errno = j; 599488Sphk if (i < 0) return 0; 609488Sphk return MDXEnd(&ctx, buf); 611802Sphk} 621802Sphk 631802Sphkchar * 649488SphkMDXData (const unsigned char *data, unsigned int len, char *buf) 651802Sphk{ 661802Sphk MDX_CTX ctx; 671802Sphk 681802Sphk MDXInit(&ctx); 691802Sphk MDXUpdate(&ctx,data,len); 709488Sphk return MDXEnd(&ctx, buf); 711802Sphk} 72