// Generated by gmmproc 2.66.3 -- DO NOT MODIFY! #ifndef _GLIBMM_CHECKSUM_H #define _GLIBMM_CHECKSUM_H /* Copyright (C) 2002 The gtkmm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ #include #include #include #ifndef DOXYGEN_SHOULD_SKIP_THIS extern "C" { typedef struct _GChecksum GChecksum; } #endif //TODO: When we can change API, make Checksum a _CLASS_BOXEDTYPE. namespace Glib { /** Computes the checksum for data. * This is a generic API for computing checksums (or "digests") for a sequence of arbitrary bytes, * using various hashing algorithms like MD5, SHA-1 and SHA-256. Checksums are commonly used in various environments and specifications. * * glibmm supports incremental checksums by calling update() as long as there's data available and then using get_string() * or get_digest() to compute the checksum and return it either as a string in hexadecimal form, or as a raw sequence of bytes. * To compute the checksum for binary blobs and NULL-terminated strings in one go, use the static compute_checksum() convenience functions(). * * @newin{2,16} */ class GLIBMM_API Checksum { public: #ifndef DOXYGEN_SHOULD_SKIP_THIS using CppObjectType = Checksum; using BaseObjectType = GChecksum; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ /** Constructs an invalid object. * E.g. for output arguments to methods. There is not much you can do with * the object before it has been assigned a valid value. */ Checksum(); // Use make_a_copy=true when getting it directly from a struct. explicit Checksum(GChecksum* castitem, bool make_a_copy = false); Checksum(const Checksum& src); Checksum& operator=(const Checksum& src); Checksum(Checksum&& other) noexcept; Checksum& operator=(Checksum&& other) noexcept; ~Checksum() noexcept; void swap(Checksum& other) noexcept; GChecksum* gobj() { return gobject_; } const GChecksum* gobj() const { return gobject_; } ///Provides access to the underlying C instance. The caller is responsible for freeing it. Use when directly setting fields in structs. GChecksum* gobj_copy() const; protected: GChecksum* gobject_; private: public: /** @addtogroup glibmmEnums glibmm Enums and Flags */ /** * @var ChecksumType CHECKSUM_MD5 * Use the MD5 hashing algorithm. * * @var ChecksumType CHECKSUM_SHA1 * Use the SHA-1 hashing algorithm. * * @var ChecksumType CHECKSUM_SHA256 * Use the SHA-256 hashing algorithm. * * @var ChecksumType CHECKSUM_SHA384 * Use the SHA-384 hashing algorithm (Since: 2.51). * * @var ChecksumType CHECKSUM_SHA512 * Use the SHA-512 hashing algorithm (Since: 2.36). * * @enum ChecksumType * * The hashing algorithm to be used by Checksum when performing the * digest of some data. * * Note that the ChecksumType enumeration may be extended at a later * date to include new hashing algorithm types. * * @newin{2,16} * * @ingroup glibmmEnums */ enum ChecksumType { CHECKSUM_MD5, CHECKSUM_SHA1, CHECKSUM_SHA256, CHECKSUM_SHA512, CHECKSUM_SHA384 }; /** Creates a new Checksum, using the checksum algorithm @a checksum_type. * If the checksum_type is not known, then operator bool() will return false. * * @param checksum_type Checksum type, one of defined above. */ explicit Checksum(ChecksumType checksum_type); /** Returns true if the Checksum object is valid. * This will return false, for instance, if an unsupported checksum type was provided to the constructor. */ explicit operator bool() const; /** Resets the state of the @a checksum back to its initial state. * * @newin{2,18} */ void reset(); //TODO: length should really be gssize, not gsize, when we can break ABI: /** Feeds @a data into an existing Checksum. The checksum must still be * open, that is g_checksum_get_string() or g_checksum_get_digest() must * not have been called on @a checksum. * * @newin{2,16} * * @param data Buffer used to compute the checksum. * @param length Size of the buffer, or -1 if it is a null-terminated string. */ void update(const guchar* data, gsize length); /** Feeds data into an existing Checksum. * The checksum must still be open, that is get_string() or get_digest() must not have been called on the checksum. * * @param data Buffer used to compute the checksum */ void update(const std::string& data); /** Gets the digest from @a checksum as a raw binary vector and places it * into @a buffer. The size of the digest depends on the type of checksum. * * Once this function has been called, the Checksum is closed and can * no longer be updated with g_checksum_update(). * * @newin{2,16} * * @param buffer Output buffer. * @param digest_len An inout parameter. The caller initializes it to the size of @a buffer. * After the call it contains the length of the digest. */ void get_digest(guint8 * buffer, gsize * digest_len) const; /** Gets the digest as a hexadecimal string. * * Once this function has been called the Checksum can no longer be * updated with g_checksum_update(). * * The hexadecimal characters will be lower case. * * @newin{2,16} * * @return The hexadecimal representation of the checksum. The * returned string is owned by the checksum and should not be modified * or freed. */ std::string get_string() const; /** Computes the checksum for a binary @a data of @a length. This is a * convenience wrapper for g_checksum_new(), g_checksum_get_string() * and g_checksum_free(). * * The hexadecimal string returned will be in lower case. * * @newin{2,16} * * @param checksum_type A ChecksumType. * @param data Binary blob to compute the digest of. * @param length Length of @a data. * @return The digest of the binary data as a string in hexadecimal. */ static std::string compute_checksum(ChecksumType checksum_type, const guchar* data, gsize length); /** Computes the checksum of a string. * * @param checksum_type A ChecksumType * @param str The string to compute the checksum of. * @result The checksum as a hexadecimal string. */ static std::string compute_checksum(ChecksumType checksum_type, const std::string& str); //We don't use _WRAP_METHOD because this is not really a GCheckSum function: /** Gets the length in bytes of digests of type @a checksum_type. * * @param checksum_type A ChecksumType. * @result The checksum length, or -1 if @a checksum_type is not supported. */ static gssize get_length(ChecksumType checksum_type); }; #ifndef DOXYGEN_SHOULD_SKIP_THIS // This is needed so Glib::Checksum can be used with Glib::Value and _WRAP_PROPERTY. template <> class GLIBMM_API Value : public ValueBase_Boxed { public: using CppType = Glib::Checksum; using CType = GChecksum*; static GType value_type(); void set(const CppType& data); CppType get() const; }; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ } //namespace Glib namespace Glib { /** @relates Glib::Checksum * @param lhs The left-hand side * @param rhs The right-hand side */ inline void swap(Checksum& lhs, Checksum& rhs) noexcept { lhs.swap(rhs); } } // namespace Glib namespace Glib { /** A Glib::wrap() method for this object. * * @param object The C instance. * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref. * @result A C++ instance that wraps this C instance. * * @relates Glib::Checksum */ GLIBMM_API Glib::Checksum wrap(GChecksum* object, bool take_copy = false); } // namespace Glib #endif /* _GLIBMM_CHECKSUM_H */