Merge amd64 NDK from amd64 branch:
[reactos.git] / irc / ArchBlackmann / MD5.h
1 // MD5.H - header file for MD5.CPP
2
3 /*
4 Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
5 rights reserved.
6
7 License to copy and use this software is granted provided that it
8 is identified as the "RSA Data Security, Inc. MD5 Message-Digest
9 Algorithm" in all material mentioning or referencing this software
10 or this function.
11
12 License is also granted to make and use derivative works provided
13 that such works are identified as "derived from the RSA Data
14 Security, Inc. MD5 Message-Digest Algorithm" in all material
15 mentioning or referencing the derived work.
16
17 RSA Data Security, Inc. makes no representations concerning either
18 the merchantability of this software or the suitability of this
19 software for any particular purpose. It is provided "as is"
20 without express or implied warranty of any kind.
21
22 These notices must be retained in any copies of any part of this
23 documentation and/or software.
24 */
25
26 #ifndef __MD5_H
27 #define __MD5_H
28
29 #ifdef __cplusplus
30 #include <string>
31 #endif//__cplusplus
32
33 #ifndef uchar
34 #define uchar unsigned char
35 #endif//uchar
36
37 #ifndef ushort
38 #define ushort unsigned short
39 #endif//ushort
40
41 #ifndef ulong
42 #define ulong unsigned long
43 #endif//ulong
44
45 #ifdef __cplusplus
46 extern "C" {
47 #endif//__cplusplus
48
49 typedef uchar *POINTER; // POINTER defines a generic pointer type
50 typedef ushort UINT2; // UINT2 defines a two byte word
51 typedef ulong UINT4; // UINT4 defines a four byte word
52
53 // MD5 context.
54 typedef struct
55 {
56 UINT4 state[4]; // state (ABCD)
57 UINT4 count[2]; // number of bits, modulo 2^64 (lsb first)
58 unsigned char buffer[64]; // input buffer
59 } MD5_CTX;
60
61 void MD5Init ( MD5_CTX * );
62 void MD5Update ( MD5_CTX *, const char *, unsigned int );
63 void MD5Final ( uchar [16], MD5_CTX * );
64
65 void digest2ascii ( char *ascii, const uchar *digest );
66 void ascii2digest ( uchar *digest, const char *ascii );
67
68 #ifdef __cplusplus
69
70 } // extern "C"
71
72 class MD5
73 {
74 public:
75 MD5();
76 void Init();
77 void Update ( const std::string& s );
78 std::string Final ( char* digest = 0 );
79
80 private:
81 MD5_CTX _ctx;
82 };
83
84 std::string MD5Hex ( const std::string& s );
85
86 std::string MD5Bin ( const std::string& s );
87
88 std::string HMAC_MD5 (
89 const std::string& key,
90 const std::string& text,
91 char* out_bin = NULL );
92
93 #endif//__cplusplus
94
95 #endif//__MD5_H