AlbumShaper  1.0a3
md5.h
Go to the documentation of this file.
1 //==============================================
2 // copyright : (C) 2003-2005 by Will Stokes
3 //==============================================
4 // This program is free software; you can redistribute it
5 // and/or modify it under the terms of the GNU General
6 // Public License as published by the Free Software
7 // Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 //==============================================
10 
11 //=====================================
15 //=====================================
16 
17 
18 // MD5.CC - source code for the C++/object oriented translation and
19 // modification of MD5.
20 
21 // Translation and modification (c) 1995 by Mordechai T. Abzug
22 
23 // This translation/ modification is provided "as is," without express or
24 // implied warranty of any kind.
25 
26 // The translator/ modifier does not claim (1) that MD5 will do what you think
27 // it does; (2) that this translation/ modification is accurate; or (3) that
28 // this software is "merchantible." (Language for this disclaimer partially
29 // copied from the disclaimer below).
30 
31 /* based on:
32 
33  MD5.H - header file for MD5C.C
34  MDDRIVER.C - test driver for MD2, MD4 and MD5
35 
36  Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
37 rights reserved.
38 
39 License to copy and use this software is granted provided that it
40 is identified as the "RSA Data Security, Inc. MD5 Message-Digest
41 Algorithm" in all material mentioning or referencing this software
42 or this function.
43 
44 License is also granted to make and use derivative works provided
45 that such works are identified as "derived from the RSA Data
46 Security, Inc. MD5 Message-Digest Algorithm" in all material
47 mentioning or referencing the derived work.
48 
49 RSA Data Security, Inc. makes no representations concerning either
50 the merchantability of this software or the suitability of this
51 software for any particular purpose. It is provided "as is"
52 without express or implied warranty of any kind.
53 
54 These notices must be retained in any copies of any part of this
55 documentation and/or software.
56 
57 */
58 
59 #include <fstream>
60 #include <qstring.h>
61 
62 #ifndef BACKEND_TOOLS_MD5_H
63 #define BACKEND_TOOLS_MD5_H
64 
65 class MD5 {
66 
67 public:
68 // methods for controlled operation:
69  MD5 (); // simple initializer
70  void update (unsigned char *input, unsigned int input_length);
71  void update (std::istream& stream);
72  void update (FILE *file);
73  void update (std::ifstream& stream);
74  void finalize ();
75 
76 // constructors for special circumstances. All these constructors finalize
77 // the MD5 context.
78  MD5 (unsigned char *string); // digest string, finalize
79  MD5 (std::istream& stream); // digest stream, finalize
80  MD5 (FILE *file); // digest file, close, finalize
81  MD5 (std::ifstream& stream); // digest stream, close, finalize
82 
83 // methods to acquire finalized result
84  unsigned char *raw_digest (); // digest as a 16-byte binary array
85  QString hex_digest (); // digest as a 33-byte ascii-hex string
86 
87 
88 private:
89 
90 // first, some types:
91  typedef unsigned int uint4; // assumes integer is 4 words long
92  typedef unsigned short int uint2; // assumes short integer is 2 words long
93  typedef unsigned char uint1; // assumes char is 1 word long
94 
95 // next, the private data:
96  uint4 state[4];
97  uint4 count[2]; // number of *bits*, mod 2^64
98  uint1 buffer[64]; // input buffer
99  uint1 digest[16];
100  uint1 finalized;
101 
102 // last, the private methods, mostly static:
103  void init (); // called by all constructors
104  void transform (uint1 *buffer); // does the real update work. Note
105  // that length is implied to be 64.
106 
107  static void encode (uint1 *dest, uint4 *src, uint4 length);
108  static void decode (uint4 *dest, uint1 *src, uint4 length);
109  static void memcpy (uint1 *dest, uint1 *src, uint4 length);
110  static void memset (uint1 *start, uint1 val, uint4 length);
111 
112  static inline uint4 rotate_left (uint4 x, uint4 n);
113  static inline uint4 F (uint4 x, uint4 y, uint4 z);
114  static inline uint4 G (uint4 x, uint4 y, uint4 z);
115  static inline uint4 H (uint4 x, uint4 y, uint4 z);
116  static inline uint4 I (uint4 x, uint4 y, uint4 z);
117  static inline void FF (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
118  uint4 s, uint4 ac);
119  static inline void GG (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
120  uint4 s, uint4 ac);
121  static inline void HH (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
122  uint4 s, uint4 ac);
123  static inline void II (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,
124  uint4 s, uint4 ac);
125 
126 };
127 
128 //returns md5 for a given file
129 QString getMD5(std::ifstream& stream);
130 
131 //compares md5's for two files
132 //returns -1 if unable ot open file
133 //returns 0 if files are different
134 //returns 1 if files are same
135 bool filesMatch(std::ifstream& stream, QString oldMD5);
136 
137 #endif //BACKEND_TOOLS_MD5_H
static uint4 F(uint4 x, uint4 y, uint4 z)
Definition: md5.cpp:495
uint4 state[4]
Definition: md5.h:96
void transform(uint1 *buffer)
Definition: md5.cpp:338
uint1 finalized
Definition: md5.h:100
QString getMD5(std::ifstream &stream)
Definition: md5.cpp:542
static uint4 G(uint4 x, uint4 y, uint4 z)
Definition: md5.cpp:499
void update(unsigned char *input, unsigned int input_length)
Definition: md5.cpp:71
uint4 count[2]
Definition: md5.h:97
static uint4 rotate_left(uint4 x, uint4 n)
Definition: md5.cpp:486
long b
Definition: jpegInternal.h:125
static void II(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
Definition: md5.cpp:535
static uint4 H(uint4 x, uint4 y, uint4 z)
Definition: md5.cpp:503
uint1 buffer[64]
Definition: md5.h:98
unsigned short int uint2
Definition: md5.h:92
static uint4 I(uint4 x, uint4 y, uint4 z)
Definition: md5.cpp:507
static void encode(uint1 *dest, uint4 *src, uint4 length)
Definition: md5.cpp:432
static void HH(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
Definition: md5.cpp:529
MD5 Support allows checksums to be computed for images, determing if they have changed since the albu...
Definition: md5.h:65
unsigned int uint4
Definition: md5.h:91
static void memcpy(uint1 *dest, uint1 *src, uint4 length)
Definition: md5.cpp:463
void init()
Definition: md5.cpp:297
static void FF(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
Definition: md5.cpp:517
bool filesMatch(std::ifstream &stream, QString oldMD5)
Definition: md5.cpp:549
uint1 digest[16]
Definition: md5.h:99
static void memset(uint1 *start, uint1 val, uint4 length)
Definition: md5.cpp:474
unsigned char uint1
Definition: md5.h:93
static void GG(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
Definition: md5.cpp:523
void finalize()
Definition: md5.cpp:188
MD5()
Definition: md5.cpp:62
unsigned char * raw_digest()
Definition: md5.cpp:255
static void decode(uint4 *dest, uint1 *src, uint4 length)
Definition: md5.cpp:449
QString hex_digest()
Definition: md5.cpp:271