Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
C++/object oriented translation and modification of MD5. Version: 1.00 (28 Aug 95) Version: 1.02 (22 Sep 97) Translation and modification (c) 1995 by Mordechai T. Abzug Thanks to Martin Cleaver for for making it happy on Windows NT and Solaris. This translation/ modification is provided "as is," without express or implied warranty of any kind. The translator/ modifier does not claim (1) that MD5 will do what you think it does; (2) that this translation/ modification is accurate; or (3) that this software is "merchantible." (Language for this disclaimer partially copied from the disclaimer below). Based on: MD5.H - header file for MD5C.C MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm MDDRIVER.C - test driver for MD2, MD4 and MD5 Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. ------------------------------------------------------------------------------- A note on compilation: MD5 assumes that an unsigned char is at least a byte long, that an unsigned short int is at least two bytes long, and that an unsigned int is at least four bytes long. If your system is different, you should modify md5.hh accordingly. HOW TO USE: (1) standalone: Driver.cc provides a nice interface for simple uses of md5. The included makefile will do fine. However, if this is the limit of your md5 use, you may as well use the original C source, which is somewhat smaller. (2) as an object-oriented module: The MD5 objects in this module are MD5 contexts that are initialized, then updated zero or more times, then finalized, and then have their digest accessed zero or more times. Note that they *must* be "finalized" between initialization and the availability of the digest; this is part of the definition of MD5. The updating is done with a message, either with a stdio file opened for reading (it is the user's responsibility to make sure that the file is open), with an ifstream (again, the user's responsibility), with an istream, or with an unsigned char string (typecast if you're using normal char strings). If you initialized with the default contructor (see later), you can update a single MD5 object multiple times, even with different types of objects (say, a file and then a string). Note that a stdio file is closed after an update, and the streams must no longer be "good". Example: "context.update(file);". Initialization of the object depends on the type of updating you intend to do (which is why it's here). If you want a general-purpose MD5 object capable of being updated multiple times, with any object type, use the default constructor (ie. "MD5 context;"). If you only want to use the MD5 object for one update, you can initialize with that object; this does an implicit finalization Example: "MD5 context (cin);". Finalization must be done explicitly on object initialized with the default constructor (see above); finalization is implicit with all other contrsuctors. Once finalization has occurred, update is an error. Example: "context.finalize();" After finalizing, you can look at the digest. MD5::raw_digest() returns an 16-member array of unsigned chars (bytes). MD5::hex_digest() returns a 33-byte long character string that is a hex representation of the raw digest. There is also a << operator for ostreams. Example: "unsigned char *digest=context.hex_digest();". Example: 'cout << "Digest is: " << context << endl;'. See driver.cc for more examples.