src/md5.h
author bjarni
Mon, 28 May 2007 21:40:40 +0000
changeset 6735 dd792fed65e2
parent 6248 e4a2ed7e5613
child 8133 3ab8eaf85ca0
permissions -rw-r--r--
(svn r9967) -Fix (r9938): autoreplace would in certain conditions move dualheaded engines in a train (usually to the rear)
-Change: moving an engine in between the two ends of a dualheaded engine will now move the rear dualheaded engine to the front of the newly added engine (instead of moving the new engine to the rear of the rear dualheaded engine)
This can make a difference if there are wagons in the train
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 1884
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 1884
diff changeset
     2
6201
bee01dc45e39 (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents: 5941
diff changeset
     3
/** @file md5.h */
bee01dc45e39 (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents: 5941
diff changeset
     4
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
     5
/*
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
     6
  Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
     7
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
     8
  This software is provided 'as-is', without any express or implied
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
     9
  warranty.  In no event will the authors be held liable for any damages
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    10
  arising from the use of this software.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    11
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    12
  Permission is granted to anyone to use this software for any purpose,
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    13
  including commercial applications, and to alter it and redistribute it
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    14
  freely, subject to the following restrictions:
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    15
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    16
  1. The origin of this software must not be misrepresented; you must not
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    17
     claim that you wrote the original software. If you use this software
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    18
     in a product, an acknowledgment in the product documentation would be
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    19
     appreciated but is not required.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    20
  2. Altered source versions must be plainly marked as such, and must not be
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    21
     misrepresented as being the original software.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    22
  3. This notice may not be removed or altered from any source distribution.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    23
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    24
  L. Peter Deutsch
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    25
  ghost@aladdin.com
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    26
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    27
 */
6201
bee01dc45e39 (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents: 5941
diff changeset
    28
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    29
/*
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    30
  Independent implementation of MD5 (RFC 1321).
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    31
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    32
  This code implements the MD5 Algorithm defined in RFC 1321, whose
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    33
  text is available at
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    34
	http://www.ietf.org/rfc/rfc1321.txt
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    35
  The code is derived from the text of the RFC, including the test suite
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    36
  (section A.5) but excluding the rest of Appendix A.  It does not include
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    37
  any code or documentation that is identified in the RFC as being
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    38
  copyrighted.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    39
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    40
  The original and principal author of md5.h is L. Peter Deutsch
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    41
  <ghost@aladdin.com>.  Other authors are noted in the change history
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    42
  that follows (in reverse chronological order):
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    43
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    44
  2002-04-13 lpd Removed support for non-ANSI compilers; removed
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    45
	references to Ghostscript; clarified derivation from RFC 1321;
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    46
	now handles byte order either statically or dynamically.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    47
  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    48
  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    49
	added conditionalization for C++ compilation from Martin
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    50
	Purschke <purschke@bnl.gov>.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    51
  1999-05-03 lpd Original version.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    52
 */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    53
2436
7d5df545bd5d (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2186
diff changeset
    54
#ifndef MD5_INCLUDED
7d5df545bd5d (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2186
diff changeset
    55
#define MD5_INCLUDED
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    56
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    57
/*
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    58
 * This package supports both compile-time and run-time determination of CPU
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    59
 * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    60
 * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    61
 * defined as non-zero, the code will be compiled to run only on big-endian
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    62
 * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    63
 * run on either big- or little-endian CPUs, but will run slightly less
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    64
 * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    65
 */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    66
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    67
typedef unsigned char md5_byte_t; /* 8-bit byte */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    68
typedef unsigned int md5_word_t; /* 32-bit word */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    69
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    70
/* Define the state of the MD5 Algorithm. */
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6201
diff changeset
    71
struct md5_state_t {
4434
a08cb4b5c179 (svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents: 4320
diff changeset
    72
    md5_word_t count[2]; /* message length in bits, lsw first */
a08cb4b5c179 (svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents: 4320
diff changeset
    73
    md5_word_t abcd[4];  /* digest buffer */
a08cb4b5c179 (svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents: 4320
diff changeset
    74
    md5_byte_t buf[64];  /* accumulate block */
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6201
diff changeset
    75
};
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    76
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    77
/* Initialize the algorithm. */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    78
void md5_init(md5_state_t *pms);
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    79
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    80
/* Append a string to the message. */
4320
5cb29aa480cc (svn r5973) -Codechange: md5_append only uses size_t as nbytes param, so use that (michi_cc)
truelight
parents: 2436
diff changeset
    81
void md5_append(md5_state_t *pms, const void *data, size_t nbytes);
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    82
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    83
/* Finish the message and return the digest. */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    84
void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    85
2436
7d5df545bd5d (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2186
diff changeset
    86
#endif /* MD5_INCLUDED */