1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/CheckSum.h
12 #ifndef ZYPP_CHECKSUM_H
13 #define ZYPP_CHECKSUM_H
19 #include "zypp/base/Exception.h"
20 #include "zypp/Pathname.h"
22 ///////////////////////////////////////////////////////////////////
24 { /////////////////////////////////////////////////////////////////
26 struct CheckSumException : public Exception
28 CheckSumException( const std::string & msg )
36 /** Default Ctor: empty checksum. */
40 * Creates a checksum for algorithm \param type.
41 * \throws CheckSumException if the checksum is invalid and can't be constructed
43 CheckSum( const std::string & type, const std::string & checksum );
45 * Creates a checksum auto probing the algorithm type.
46 * \throws CheckSumException if the checksum is invalid and can't be constructed
48 CheckSum( const std::string & checksum )
49 : CheckSum( std::string(), checksum )
53 * Reads the content of \param input_r and computes the checksum.
55 CheckSum( const std::string & type, std::istream & input_r );
57 #ifndef SWIG // Swig treats it as syntax error0
58 /** Ctor from temporary istream */
59 CheckSum( const std::string & type, std::istream && input_r )
60 : CheckSum( type, input_r )
65 static const std::string & md5Type();
66 static const std::string & shaType();
67 static const std::string & sha1Type();
68 static const std::string & sha224Type();
69 static const std::string & sha256Type();
70 static const std::string & sha384Type();
71 static const std::string & sha512Type();
73 /** \name Creates a checksum for algorithm \param type. */
75 static CheckSum md5( const std::string & checksum ) { return CheckSum( md5Type(), checksum); }
76 static CheckSum sha( const std::string & checksum ) { return CheckSum( shaType(), checksum); }
77 static CheckSum sha1( const std::string & checksum ) { return CheckSum( sha1Type(), checksum); }
78 static CheckSum sha224( const std::string & checksum ) { return CheckSum( sha224Type(), checksum); }
79 static CheckSum sha256( const std::string & checksum ) { return CheckSum( sha256Type(), checksum); }
80 static CheckSum sha384( const std::string & checksum ) { return CheckSum( sha384Type(), checksum); }
81 static CheckSum sha512( const std::string & checksum ) { return CheckSum( sha512Type(), checksum); }
84 /** \name Reads the content of \param input_r and computes the checksum. */
86 static CheckSum md5( std::istream & input_r ) { return CheckSum( md5Type(), input_r ); }
87 static CheckSum sha( std::istream & input_r ) { return CheckSum( sha1Type(), input_r ); }
88 static CheckSum sha1( std::istream & input_r ) { return CheckSum( sha1Type(), input_r ); }
89 static CheckSum sha224( std::istream & input_r ) { return CheckSum( sha224Type(), input_r ); }
90 static CheckSum sha256( std::istream & input_r ) { return CheckSum( sha256Type(), input_r ); }
91 static CheckSum sha384( std::istream & input_r ) { return CheckSum( sha384Type(), input_r ); }
92 static CheckSum sha512( std::istream & input_r ) { return CheckSum( sha512Type(), input_r ); }
93 #ifndef SWIG // Swig treats it as syntax error
94 static CheckSum md5( std::istream && input_r ) { return CheckSum( md5Type(), input_r ); }
95 static CheckSum sha( std::istream && input_r ) { return CheckSum( sha1Type(), input_r ); }
96 static CheckSum sha1( std::istream && input_r ) { return CheckSum( sha1Type(), input_r ); }
97 static CheckSum sha224( std::istream && input_r ) { return CheckSum( sha224Type(), input_r ); }
98 static CheckSum sha256( std::istream && input_r ) { return CheckSum( sha256Type(), input_r ); }
99 static CheckSum sha384( std::istream && input_r ) { return CheckSum( sha384Type(), input_r ); }
100 static CheckSum sha512( std::istream && input_r ) { return CheckSum( sha512Type(), input_r ); }
104 /** \name Reads the content of \param input_r and computes the checksum. */
106 static CheckSum md5FromString( const std::string & input_r ) { return md5( std::stringstream( input_r ) ); }
107 static CheckSum shaFromString( const std::string & input_r ) { return sha( std::stringstream( input_r ) ); }
108 static CheckSum sha1FromString( const std::string & input_r ) { return sha1( std::stringstream( input_r ) ); }
109 static CheckSum sha224FromString( const std::string & input_r ) { return sha224( std::stringstream( input_r ) ); }
110 static CheckSum sha256FromString( const std::string & input_r ) { return sha256( std::stringstream( input_r ) ); }
111 static CheckSum sha384FromString( const std::string & input_r ) { return sha384( std::stringstream( input_r ) ); }
112 static CheckSum sha512FromString( const std::string & input_r ) { return sha512( std::stringstream( input_r ) ); }
116 std::string type() const;
117 std::string checksum() const;
121 std::string asString() const;
125 std::string _checksum;
128 /** \relates CheckSum Stream output. */
129 std::ostream & operator<<( std::ostream & str, const CheckSum & obj );
131 /** \relates CheckSum XML output. */
132 std::ostream & dumpAsXmlOn( std::ostream & str, const CheckSum & obj );
134 /** \relates CheckSum */
135 bool operator==( const CheckSum & lhs, const CheckSum & rhs );
137 /** \relates CheckSum */
138 bool operator!=( const CheckSum & lhs, const CheckSum & rhs );
141 ///////////////////////////////////////////////////////////////////
142 #endif // ZYPP_CHECKSUM_H