X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmd5.h;h=b7645ec5039b03b3eee2e8ad59cf0669e5dfbda6;hb=f4a47b0133444f6287403a087b6f5033426e3ac3;hp=501b4d23334a89e6100e8e3bd87b09a5c1d556d7;hpb=1156115d4ed429628f292ef9a0d597ffc3dac31e;p=gnulib.git diff --git a/lib/md5.h b/lib/md5.h index 501b4d233..b7645ec50 100644 --- a/lib/md5.h +++ b/lib/md5.h @@ -1,23 +1,25 @@ /* md5.h - Declaration of functions and data types used for MD5 sum computing library functions. - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1999 Free Software Foundation, Inc. + NOTE: The canonical source of this file is maintained with the GNU C + Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _MD5_H -#define _MD5_H +#define _MD5_H 1 #include @@ -32,37 +34,49 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ the resulting executable. Locally running cross-compiled executables is usually not possible. */ -#if defined __STDC__ && __STDC__ -# define UINT_MAX_32_BITS 4294967295U +#ifdef _LIBC +# include +typedef u_int32_t md5_uint32; #else -# define UINT_MAX_32_BITS 0xFFFFFFFF -#endif +# if defined __STDC__ && __STDC__ +# define UINT_MAX_32_BITS 4294967295U +# else +# define UINT_MAX_32_BITS 0xFFFFFFFF +# endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ -#ifndef UINT_MAX -# define UINT_MAX UINT_MAX_32_BITS -#endif +# ifndef UINT_MAX +# define UINT_MAX UINT_MAX_32_BITS +# endif -#if UINT_MAX == UINT_MAX_32_BITS - typedef unsigned int md5_uint32; -#else -# if USHRT_MAX == UINT_MAX_32_BITS - typedef unsigned short md5_uint32; +# if UINT_MAX == UINT_MAX_32_BITS + typedef unsigned int md5_uint32; # else -# if ULONG_MAX == UINT_MAX_32_BITS - typedef unsigned long md5_uint32; +# if USHRT_MAX == UINT_MAX_32_BITS + typedef unsigned short md5_uint32; # else - /* The following line is intended to evoke an error. - Using #error is not portable enough. */ - "Cannot determine unsigned 32-bit data type." +# if ULONG_MAX == UINT_MAX_32_BITS + typedef unsigned long md5_uint32; +# else + /* The following line is intended to evoke an error. + Using #error is not portable enough. */ + "Cannot determine unsigned 32-bit data type." +# endif # endif # endif #endif +#undef __P +#if defined (__STDC__) && __STDC__ +#define __P(x) x +#else +#define __P(x) () +#endif + /* Structure to save state of computation between the single steps. */ struct md5_ctx { @@ -70,6 +84,10 @@ struct md5_ctx md5_uint32 B; md5_uint32 C; md5_uint32 D; + + md5_uint32 total[2]; + md5_uint32 buflen; + char buffer[128]; }; /* @@ -79,31 +97,50 @@ struct md5_ctx /* Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3) */ -void md5_init_ctx __P ((struct md5_ctx *ctx)); +extern void md5_init_ctx __P ((struct md5_ctx *ctx)); /* Starting with the result of former calls of this function (or the - initialzation function update the context for the next LEN bytes + initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ -void md5_process_block __P ((const void *buffer, size_t len, - struct md5_ctx *ctx)); +extern void md5_process_block __P ((const void *buffer, size_t len, + struct md5_ctx *ctx)); + +/* Starting with the result of former calls of this function (or the + initialization function update the context for the next LEN bytes + starting at BUFFER. + It is NOT required that LEN is a multiple of 64. */ +extern void md5_process_bytes __P ((const void *buffer, size_t len, + struct md5_ctx *ctx)); + +/* Process the remaining bytes in the buffer and put result from CTX + in first 16 bytes following RESBUF. The result is always in little + endian byte order, so that a byte-wise output yields to the wanted + ASCII representation of the message digest. + + IMPORTANT: On some systems it is required that RESBUF be correctly + aligned for a 32 bits value. */ +extern void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *resbuf)); + /* Put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields - to the wanted ASCII representation of the message digest. */ -void *md5_read_ctx __P ((const struct md5_ctx *ctx, void *resbuf)); + to the wanted ASCII representation of the message digest. + + IMPORTANT: On some systems it is required that RESBUF is correctly + aligned for a 32 bits value. */ +extern void *md5_read_ctx __P ((const struct md5_ctx *ctx, void *resbuf)); /* Compute MD5 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ -void * -md5_stream __P ((FILE *stream, void *resblock)); +extern int md5_stream __P ((FILE *stream, void *resblock)); /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ -void *md5_buffer __P ((const char *buffer, size_t len, void *resblock)); +extern void *md5_buffer __P ((const char *buffer, size_t len, void *resblock)); #endif