src/md5.h
author bjarni
Thu, 19 Jun 2008 17:54:23 +0000
changeset 9561 f236daaaf93a
parent 9111 48ce04029fe4
permissions -rw-r--r--
(svn r13584) -Fix: [OSX] Fixed issue where 10.5 failed to switch to fullscreen
This is done by selecting the 32bpp-anim blitter by default as it seems Apple removed some 8bpp support
Since this is done at runtime the same binary will still select 8bpp on 10.3 and 10.4
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
9111
48ce04029fe4 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 8133
diff changeset
     3
/** @file md5.h Functions to create MD5 checksums. */
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
     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
8133
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    34
  http://www.ietf.org/rfc/rfc1321.txt
602
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
8133
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    44
  2007-12-24 Changed to C++ and adapted to OpenTTD source
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    45
  2002-04-13 lpd Removed support for non-ANSI compilers; removed
8133
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    46
             references to Ghostscript; clarified derivation from RFC 1321;
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    47
             now handles byte order either statically or dynamically.
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    48
  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
    49
  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
8133
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    50
             added conditionalization for C++ compilation from Martin
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    51
             Purschke <purschke@bnl.gov>.
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    52
  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
    53
 */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    54
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
    55
#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
    56
#define MD5_INCLUDED
602
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
/*
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    59
 * 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
    60
 * 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
    61
 * 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
    62
 * 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
    63
 * 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
    64
 * 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
    65
 * 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
    66
 */
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    67
8133
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    68
struct Md5 {
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    69
private:
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    70
	uint32 count[2]; ///< message length in bits, lsw first
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    71
	uint32 abcd[4];  ///< digest buffer
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    72
	uint8 buf[64];   ///< accumulate block
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    73
8133
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    74
	void Process(const uint8 *data);
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    75
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    76
public:
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    77
	Md5();
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    78
	void Append(const void *data, const size_t nbytes);
3ab8eaf85ca0 (svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents: 6248
diff changeset
    79
	void Finish(uint8 digest[16]);
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6201
diff changeset
    80
};
602
f0afb4018788 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents:
diff changeset
    81
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
    82
#endif /* MD5_INCLUDED */