1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp//Digest.h
11 * \todo replace by Blocxx
15 #ifndef ZYPP_MEDIA_DIGEST_H
16 #define ZYPP_MEDIA_DIGEST_H
21 #include <zypp/Callback.h>
22 #include <zypp/Pathname.h>
27 struct DigestReport : public callback::ReportBase
29 virtual bool askUserToAcceptNoDigest( const zypp::Pathname &file )
31 virtual bool askUserToAccepUnknownDigest( const Pathname &file, const std::string &name )
33 virtual bool askUserToAcceptWrongDigest( const Pathname &file, const std::string &requested, const std::string &found )
39 /** \brief Compute Message Digests (MD5, SHA1 etc)
41 * The computation works by initializing the algorithm using create(). This
42 * will construct an internal state. successive calls to update() deliver the
43 * data for which the digest is to be computed. After all data has been
44 * deliverd, a call to digest() finalizes the computation and returns the
54 Digest(const Digest& d);
56 const Digest& operator=(const Digest& d);
62 /** \brief initialize creation of a new message digest
64 * Since openssl is used as backend you may use anything that openssl
65 * supports (see man 1 dgst). Common examples are md5 or sha1. sha1
66 * should be preferred when creating digests to verify the authenticity
69 * successive calls to this funcion will destroy the internal state and
72 * @param name name of the message digest algorithm.
73 * @return whether an error occured
75 bool create(const std::string& name);
77 /** \brief get the name of the current digest algorithm */
78 const std::string& name();
80 /** \brief feed data into digest computation algorithm
83 * @return whether an error occured
85 bool update(const char* bytes, size_t len);
87 /** \brief get hex string representation of the digest
89 * this function will finalize the digest computation. calls to update
90 * after this function will start from scratch
92 * @return hex string representation of the digest
96 /** \brief compute digest of a stream. convenience function
98 * calls create, update and digest in one function. The data for the
99 * computation is read from the stream
101 * @param name name of the digest algorithm, \see create
102 * @param is an input stream to get the data from
103 * @param bufsize size of the buffer used for update(). Be careful, this is on the stack.
104 * @return the digest or empty on error
106 static std::string digest(const std::string& name, std::istream& is, size_t bufsize = 4096);