mdXhl.c revision 1.8
11.8Sapb/* $NetBSD: mdXhl.c,v 1.8 2009/03/06 18:15:24 apb Exp $ */ 21.1Sthorpej 31.2Sthorpej/* 41.1Sthorpej * ---------------------------------------------------------------------------- 51.1Sthorpej * "THE BEER-WARE LICENSE" (Revision 42): 61.1Sthorpej * <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you 71.1Sthorpej * can do whatever you want with this stuff. If we meet some day, and you think 81.1Sthorpej * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 91.1Sthorpej * ---------------------------------------------------------------------------- 101.1Sthorpej * 111.1Sthorpej * from FreeBSD Id: mdXhl.c,v 1.8 1996/10/25 06:48:12 bde Exp 121.2Sthorpej */ 131.2Sthorpej 141.2Sthorpej/* 151.7Schristos * Modified April 29, 1997 by Jason R. Thorpe <thorpej@NetBSD.org> 161.1Sthorpej */ 171.1Sthorpej 181.8Sapb#if HAVE_NBTOOL_CONFIG_H 191.8Sapb#include "nbtool_config.h" 201.8Sapb#endif 211.8Sapb 221.7Schristos#define CONCAT(x,y) __CONCAT(x,y) 231.7Schristos#define MDNAME(x) CONCAT(MDALGORITHM,x) 241.7Schristos 251.8Sapb#if !defined(_KERNEL) && defined(__weak_alias) && !defined(HAVE_NBTOOL_CONFIG_H) 261.7Schristos#define WA(a,b) __weak_alias(a,b) 271.7SchristosWA(MDNAME(End),CONCAT(_,MDNAME(End))) 281.7SchristosWA(MDNAME(File),CONCAT(_,MDNAME(File))) 291.7SchristosWA(MDNAME(Data),CONCAT(_,MDNAME(Data))) 301.7Schristos#undef WA 311.7Schristos#endif 321.7Schristos 331.7Schristos#include "namespace.h" 341.7Schristos 351.1Sthorpej#include <sys/types.h> 361.4Slukem 371.7Schristos#include MDINCLUDE 381.4Slukem#include <assert.h> 391.1Sthorpej#include <fcntl.h> 401.1Sthorpej#include <errno.h> 411.1Sthorpej#include <stdio.h> 421.1Sthorpej#include <stdlib.h> 431.4Slukem#include <unistd.h> 441.1Sthorpej 451.7Schristos 461.1Sthorpej 471.1Sthorpejchar * 481.2SthorpejMDNAME(End)(ctx, buf) 491.2Sthorpej MDNAME(_CTX) *ctx; 501.2Sthorpej char *buf; 511.1Sthorpej{ 521.2Sthorpej int i; 531.2Sthorpej unsigned char digest[16]; 541.2Sthorpej static const char hex[]="0123456789abcdef"; 551.2Sthorpej 561.4Slukem _DIAGASSERT(ctx != 0); 571.4Slukem 581.2Sthorpej if (buf == NULL) 591.2Sthorpej buf = malloc(33); 601.2Sthorpej if (buf == NULL) 611.2Sthorpej return (NULL); 621.2Sthorpej 631.2Sthorpej MDNAME(Final)(digest, ctx); 641.2Sthorpej 651.2Sthorpej for (i = 0; i < 16; i++) { 661.3Schristos buf[i+i] = hex[(u_int32_t)digest[i] >> 4]; 671.2Sthorpej buf[i+i+1] = hex[digest[i] & 0x0f]; 681.2Sthorpej } 691.2Sthorpej 701.2Sthorpej buf[i+i] = '\0'; 711.2Sthorpej return (buf); 721.1Sthorpej} 731.1Sthorpej 741.1Sthorpejchar * 751.2SthorpejMDNAME(File)(filename, buf) 761.2Sthorpej const char *filename; 771.2Sthorpej char *buf; 781.1Sthorpej{ 791.2Sthorpej unsigned char buffer[BUFSIZ]; 801.2Sthorpej MDNAME(_CTX) ctx; 811.2Sthorpej int f, i, j; 821.2Sthorpej 831.4Slukem _DIAGASSERT(filename != 0); 841.4Slukem /* buf may be NULL */ 851.4Slukem 861.2Sthorpej MDNAME(Init)(&ctx); 871.2Sthorpej f = open(filename, O_RDONLY, 0666); 881.2Sthorpej if (f < 0) 891.2Sthorpej return NULL; 901.2Sthorpej 911.2Sthorpej while ((i = read(f, buffer, sizeof(buffer))) > 0) 921.3Schristos MDNAME(Update)(&ctx, buffer, (unsigned int)i); 931.2Sthorpej 941.2Sthorpej j = errno; 951.2Sthorpej close(f); 961.2Sthorpej errno = j; 971.2Sthorpej 981.2Sthorpej if (i < 0) 991.2Sthorpej return NULL; 1001.2Sthorpej 1011.2Sthorpej return (MDNAME(End)(&ctx, buf)); 1021.1Sthorpej} 1031.1Sthorpej 1041.1Sthorpejchar * 1051.2SthorpejMDNAME(Data)(data, len, buf) 1061.2Sthorpej const unsigned char *data; 1071.2Sthorpej unsigned int len; 1081.2Sthorpej char *buf; 1091.1Sthorpej{ 1101.2Sthorpej MDNAME(_CTX) ctx; 1111.4Slukem 1121.4Slukem _DIAGASSERT(data != 0); 1131.1Sthorpej 1141.2Sthorpej MDNAME(Init)(&ctx); 1151.2Sthorpej MDNAME(Update)(&ctx, data, len); 1161.2Sthorpej return (MDNAME(End)(&ctx, buf)); 1171.1Sthorpej} 118