xref: /openbmc/ipmitool/src/plugins/lan/md5.h (revision c18ec02f)
1*c18ec02fSPetter Reinholdtsen /*
2*c18ec02fSPetter Reinholdtsen   Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
3*c18ec02fSPetter Reinholdtsen 
4*c18ec02fSPetter Reinholdtsen   This software is provided 'as-is', without any express or implied
5*c18ec02fSPetter Reinholdtsen   warranty.  In no event will the authors be held liable for any damages
6*c18ec02fSPetter Reinholdtsen   arising from the use of this software.
7*c18ec02fSPetter Reinholdtsen 
8*c18ec02fSPetter Reinholdtsen   Permission is granted to anyone to use this software for any purpose,
9*c18ec02fSPetter Reinholdtsen   including commercial applications, and to alter it and redistribute it
10*c18ec02fSPetter Reinholdtsen   freely, subject to the following restrictions:
11*c18ec02fSPetter Reinholdtsen 
12*c18ec02fSPetter Reinholdtsen   1. The origin of this software must not be misrepresented; you must not
13*c18ec02fSPetter Reinholdtsen      claim that you wrote the original software. If you use this software
14*c18ec02fSPetter Reinholdtsen      in a product, an acknowledgment in the product documentation would be
15*c18ec02fSPetter Reinholdtsen      appreciated but is not required.
16*c18ec02fSPetter Reinholdtsen   2. Altered source versions must be plainly marked as such, and must not be
17*c18ec02fSPetter Reinholdtsen      misrepresented as being the original software.
18*c18ec02fSPetter Reinholdtsen   3. This notice may not be removed or altered from any source distribution.
19*c18ec02fSPetter Reinholdtsen 
20*c18ec02fSPetter Reinholdtsen   L. Peter Deutsch
21*c18ec02fSPetter Reinholdtsen   ghost@aladdin.com
22*c18ec02fSPetter Reinholdtsen 
23*c18ec02fSPetter Reinholdtsen  */
24*c18ec02fSPetter Reinholdtsen /* $Id: md5.h,v 1.1 2003/11/18 17:56:02 iceblink Exp $ */
25*c18ec02fSPetter Reinholdtsen /*
26*c18ec02fSPetter Reinholdtsen   Independent implementation of MD5 (RFC 1321).
27*c18ec02fSPetter Reinholdtsen 
28*c18ec02fSPetter Reinholdtsen   This code implements the MD5 Algorithm defined in RFC 1321, whose
29*c18ec02fSPetter Reinholdtsen   text is available at
30*c18ec02fSPetter Reinholdtsen 	http://www.ietf.org/rfc/rfc1321.txt
31*c18ec02fSPetter Reinholdtsen   The code is derived from the text of the RFC, including the test suite
32*c18ec02fSPetter Reinholdtsen   (section A.5) but excluding the rest of Appendix A.  It does not include
33*c18ec02fSPetter Reinholdtsen   any code or documentation that is identified in the RFC as being
34*c18ec02fSPetter Reinholdtsen   copyrighted.
35*c18ec02fSPetter Reinholdtsen 
36*c18ec02fSPetter Reinholdtsen   The original and principal author of md5.h is L. Peter Deutsch
37*c18ec02fSPetter Reinholdtsen   <ghost@aladdin.com>.  Other authors are noted in the change history
38*c18ec02fSPetter Reinholdtsen   that follows (in reverse chronological order):
39*c18ec02fSPetter Reinholdtsen 
40*c18ec02fSPetter Reinholdtsen   2002-04-13 lpd Removed support for non-ANSI compilers; removed
41*c18ec02fSPetter Reinholdtsen 	references to Ghostscript; clarified derivation from RFC 1321;
42*c18ec02fSPetter Reinholdtsen 	now handles byte order either statically or dynamically.
43*c18ec02fSPetter Reinholdtsen   1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
44*c18ec02fSPetter Reinholdtsen   1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
45*c18ec02fSPetter Reinholdtsen 	added conditionalization for C++ compilation from Martin
46*c18ec02fSPetter Reinholdtsen 	Purschke <purschke@bnl.gov>.
47*c18ec02fSPetter Reinholdtsen   1999-05-03 lpd Original version.
48*c18ec02fSPetter Reinholdtsen  */
49*c18ec02fSPetter Reinholdtsen 
50*c18ec02fSPetter Reinholdtsen #ifndef md5_INCLUDED
51*c18ec02fSPetter Reinholdtsen #  define md5_INCLUDED
52*c18ec02fSPetter Reinholdtsen 
53*c18ec02fSPetter Reinholdtsen /*
54*c18ec02fSPetter Reinholdtsen  * This package supports both compile-time and run-time determination of CPU
55*c18ec02fSPetter Reinholdtsen  * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
56*c18ec02fSPetter Reinholdtsen  * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
57*c18ec02fSPetter Reinholdtsen  * defined as non-zero, the code will be compiled to run only on big-endian
58*c18ec02fSPetter Reinholdtsen  * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
59*c18ec02fSPetter Reinholdtsen  * run on either big- or little-endian CPUs, but will run slightly less
60*c18ec02fSPetter Reinholdtsen  * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
61*c18ec02fSPetter Reinholdtsen  */
62*c18ec02fSPetter Reinholdtsen 
63*c18ec02fSPetter Reinholdtsen typedef unsigned char md5_byte_t; /* 8-bit byte */
64*c18ec02fSPetter Reinholdtsen typedef unsigned int md5_word_t; /* 32-bit word */
65*c18ec02fSPetter Reinholdtsen 
66*c18ec02fSPetter Reinholdtsen /* Define the state of the MD5 Algorithm. */
67*c18ec02fSPetter Reinholdtsen typedef struct md5_state_s {
68*c18ec02fSPetter Reinholdtsen     md5_word_t count[2];	/* message length in bits, lsw first */
69*c18ec02fSPetter Reinholdtsen     md5_word_t abcd[4];		/* digest buffer */
70*c18ec02fSPetter Reinholdtsen     md5_byte_t buf[64];		/* accumulate block */
71*c18ec02fSPetter Reinholdtsen } md5_state_t;
72*c18ec02fSPetter Reinholdtsen 
73*c18ec02fSPetter Reinholdtsen #ifdef __cplusplus
74*c18ec02fSPetter Reinholdtsen extern "C"
75*c18ec02fSPetter Reinholdtsen {
76*c18ec02fSPetter Reinholdtsen #endif
77*c18ec02fSPetter Reinholdtsen 
78*c18ec02fSPetter Reinholdtsen /* Initialize the algorithm. */
79*c18ec02fSPetter Reinholdtsen void md5_init(md5_state_t *pms);
80*c18ec02fSPetter Reinholdtsen 
81*c18ec02fSPetter Reinholdtsen /* Append a string to the message. */
82*c18ec02fSPetter Reinholdtsen void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
83*c18ec02fSPetter Reinholdtsen 
84*c18ec02fSPetter Reinholdtsen /* Finish the message and return the digest. */
85*c18ec02fSPetter Reinholdtsen void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
86*c18ec02fSPetter Reinholdtsen 
87*c18ec02fSPetter Reinholdtsen #ifdef __cplusplus
88*c18ec02fSPetter Reinholdtsen }  /* end extern "C" */
89*c18ec02fSPetter Reinholdtsen #endif
90*c18ec02fSPetter Reinholdtsen 
91*c18ec02fSPetter Reinholdtsen #endif /* md5_INCLUDED */
92