aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/MD5Engine.h
blob: 8ece7a1ecccd4b3aaa8b27512e8a6e17320706e3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// 
// MD5Engine.h 
// 
// Library: Foundation 
// Package: Crypt 
// Module:  MD5Engine 
// 
// Definition of class MD5Engine. 
// 
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. 
// and Contributors. 
// 
// SPDX-License-Identifier:	BSL-1.0 
// 
// 
// MD5 (RFC 1321) algorithm: 
// 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. 
// 
 
 
#ifndef Foundation_MD5Engine_INCLUDED 
#define Foundation_MD5Engine_INCLUDED 
 
 
#include "Poco/Foundation.h" 
#include "Poco/DigestEngine.h" 
 
 
namespace Poco { 
 
 
class Foundation_API MD5Engine: public DigestEngine 
	/// This class implementes the MD5 message digest algorithm, 
	/// described in RFC 1321. 
{ 
public: 
	enum 
	{ 
		BLOCK_SIZE  = 64, 
		DIGEST_SIZE = 16 
	}; 
 
	MD5Engine(); 
	~MD5Engine(); 
		 
	std::size_t digestLength() const; 
	void reset(); 
	const DigestEngine::Digest& digest(); 
 
protected: 
	void updateImpl(const void* data, std::size_t length); 
 
private: 
	static void transform(UInt32 state[4], const unsigned char block[64]); 
	static void encode(unsigned char* output, const UInt32* input, std::size_t len); 
	static void decode(UInt32* output, const unsigned char* input, std::size_t len); 
 
	struct Context 
	{ 
		UInt32 state[4];          // state (ABCD) 
		UInt32 count[2];          // number of bits, modulo 2^64 (lsb first) 
		unsigned char buffer[64]; // input buffer 
	}; 
 
	Context _context; 
	DigestEngine::Digest _digest; 
 
	MD5Engine(const MD5Engine&); 
	MD5Engine& operator = (const MD5Engine&); 
}; 
 
 
} // namespace Poco 
 
 
#endif // Foundation_MD5Engine_INCLUDED