CVS Repository/ src/ gnu/ usr.bin/ binutils/ include/ md5.h

Annotated Revision 1.1.1.1 Back
1.1  (fgsch 13-May-02)  1
: /* md5.h - Declaration of functions and data types used for MD5 sum
   2
:    computing library functions.
   3
:    Copyright 1995, 1996, 2000 Free Software Foundation, Inc.
   4
:    NOTE: The canonical source of this file is maintained with the GNU C
   5
:    Library.  Bugs can be reported to bug-glibc@prep.ai.mit.edu.
   6
: 
   7
:    This program is free software; you can redistribute it and/or modify it
   8
:    under the terms of the GNU General Public License as published by the
   9
:    Free Software Foundation; either version 2, or (at your option) any
   10
:    later version.
   11
: 
   12
:    This program is distributed in the hope that it will be useful,
   13
:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   14
:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15
:    GNU General Public License for more details.
   16
: 
   17
:    You should have received a copy of the GNU General Public License
   18
:    along with this program; if not, write to the Free Software Foundation,
   19
:    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
   20
: 
   21
: #ifndef _MD5_H
   22
: #define _MD5_H 1
   23
: 
   24
: #include <stdio.h>
   25
: 
   26
: #if defined HAVE_LIMITS_H || _LIBC
   27
: # include <limits.h>
   28
: #endif
   29
: 
   30
: /* The following contortions are an attempt to use the C preprocessor
   31
:    to determine an unsigned integral type that is 32 bits wide.  An
   32
:    alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
   33
:    doing that would require that the configure script compile and *run*
   34
:    the resulting executable.  Locally running cross-compiled executables
   35
:    is usually not possible.  */
   36
: 
   37
: #ifdef _LIBC
   38
: # include <sys/types.h>
   39
: typedef u_int32_t md5_uint32;
   40
: #else
   41
: #  define INT_MAX_32_BITS 2147483647
   42
: 
   43
: /* If UINT_MAX isn't defined, assume it's a 32-bit type.
   44
:    This should be valid for all systems GNU cares about because
   45
:    that doesn't include 16-bit systems, and only modern systems
   46
:    (that certainly have <limits.h>) have 64+-bit integral types.  */
   47
: 
   48
: # ifndef INT_MAX
   49
: #  define INT_MAX INT_MAX_32_BITS
   50
: # endif
   51
: 
   52
: # if INT_MAX == INT_MAX_32_BITS
   53
:    typedef unsigned int md5_uint32;
   54
: # else
   55
: #  if SHRT_MAX == INT_MAX_32_BITS
   56
:     typedef unsigned short md5_uint32;
   57
: #  else
   58
: #   if LONG_MAX == INT_MAX_32_BITS
   59
:      typedef unsigned long md5_uint32;
   60
: #   else
   61
:      /* The following line is intended to evoke an error.
   62
:         Using #error is not portable enough.  */
   63
:      "Cannot determine unsigned 32-bit data type."
   64
: #   endif
   65
: #  endif
   66
: # endif
   67
: #endif
   68
: 
   69
: #undef __P
   70
: #if defined (__STDC__) && __STDC__
   71
: #define	__P(x) x
   72
: #else
   73
: #define	__P(x) ()
   74
: #endif
   75
: 
   76
: /* Structure to save state of computation between the single steps.  */
   77
: struct md5_ctx
   78
: {
   79
:   md5_uint32 A;
   80
:   md5_uint32 B;
   81
:   md5_uint32 C;
   82
:   md5_uint32 D;
   83
: 
   84
:   md5_uint32 total[2];
   85
:   md5_uint32 buflen;
   86
:   char buffer[128];
   87
: };
   88
: 
   89
: /*
   90
:  * The following three functions are build up the low level used in
   91
:  * the functions `md5_stream' and `md5_buffer'.
   92
:  */
   93
: 
   94
: /* Initialize structure containing state of computation.
   95
:    (RFC 1321, 3.3: Step 3)  */
   96
: extern void md5_init_ctx __P ((struct md5_ctx *ctx));
   97
: 
   98
: /* Starting with the result of former calls of this function (or the
   99
:    initialization function update the context for the next LEN bytes
   100
:    starting at BUFFER.
   101
:    It is necessary that LEN is a multiple of 64!!! */
   102
: extern void md5_process_block __P ((const void *buffer, size_t len,
   103
: 				    struct md5_ctx *ctx));
   104
: 
   105
: /* Starting with the result of former calls of this function (or the
   106
:    initialization function update the context for the next LEN bytes
   107
:    starting at BUFFER.
   108
:    It is NOT required that LEN is a multiple of 64.  */
   109
: extern void md5_process_bytes __P ((const void *buffer, size_t len,
   110
: 				    struct md5_ctx *ctx));
   111
: 
   112
: /* Process the remaining bytes in the buffer and put result from CTX
   113
:    in first 16 bytes following RESBUF.  The result is always in little
   114
:    endian byte order, so that a byte-wise output yields to the wanted
   115
:    ASCII representation of the message digest.
   116
: 
   117
:    IMPORTANT: On some systems it is required that RESBUF is correctly
   118
:    aligned for a 32 bits value.  */
   119
: extern void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *resbuf));
   120
: 
   121
: 
   122
: /* Put result from CTX in first 16 bytes following RESBUF.  The result is
   123
:    always in little endian byte order, so that a byte-wise output yields
   124
:    to the wanted ASCII representation of the message digest.
   125
: 
   126
:    IMPORTANT: On some systems it is required that RESBUF is correctly
   127
:    aligned for a 32 bits value.  */
   128
: extern void *md5_read_ctx __P ((const struct md5_ctx *ctx, void *resbuf));
   129
: 
   130
: 
   131
: /* Compute MD5 message digest for bytes read from STREAM.  The
   132
:    resulting message digest number will be written into the 16 bytes
   133
:    beginning at RESBLOCK.  */
   134
: extern int md5_stream __P ((FILE *stream, void *resblock));
   135
: 
   136
: /* Compute MD5 message digest for LEN bytes beginning at BUFFER.  The
   137
:    result is always in little endian byte order, so that a byte-wise
   138
:    output yields to the wanted ASCII representation of the message
   139
:    digest.  */
   140
: extern void *md5_buffer __P ((const char *buffer, size_t len, void *resblock));
   141
: 
   142
: #endif