1 /*
2  * Copyright (C) 2011-2015 Daniel Scharrer
3  *
4  * This software is provided 'as-is', without any express or implied
5  * warranty.  In no event will the author(s) be held liable for any damages
6  * arising from the use of this software.
7  *
8  * Permission is granted to anyone to use this software for any purpose,
9  * including commercial applications, and to alter it and redistribute it
10  * freely, subject to the following restrictions:
11  *
12  * 1. The origin of this software must not be misrepresented; you must not
13  *    claim that you wrote the original software. If you use this software
14  *    in a product, an acknowledgment in the product documentation would be
15  *    appreciated but is not required.
16  * 2. Altered source versions must be plainly marked as such, and must not be
17  *    misrepresented as being the original software.
18  * 3. This notice may not be removed or altered from any source distribution.
19  */
20 
21 /*!
22  * \file
23  *
24  * MD5 hashing routines.
25  */
26 #ifndef INNOEXTRACT_CRYPTO_MD5_HPP
27 #define INNOEXTRACT_CRYPTO_MD5_HPP
28 
29 #include <boost/cstdint.hpp>
30 
31 #include "crypto/iteratedhash.hpp"
32 #include "util/endian.hpp"
33 
34 namespace crypto {
35 
36 class md5_transform {
37 
38 public:
39 
40 	typedef boost::uint32_t hash_word;
41 	typedef util::little_endian byte_order;
42 	static const size_t offset = 0;
43 	static const size_t block_size = 64;
44 	static const size_t hash_size = 16;
45 
46 	static void init(hash_word * state);
47 
48 	static void transform(hash_word * state, const hash_word * data);
49 
50 };
51 
52 typedef iterated_hash<md5_transform> md5;
53 
54 } // namespace crypto
55 
56 #endif // INNOEXTRACT_CRYPTO_MD5_HPP
57