1 /* librepo - A library providing (libcURL like) API to downloading repository 2 * Copyright (C) 2012 Tomas Mlcoch 3 * 4 * Licensed under the GNU Lesser General Public License Version 2.1 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef __LR_CHECKSUM_H__ 22 #define __LR_CHECKSUM_H__ 23 24 #include <glib.h> 25 26 G_BEGIN_DECLS 27 28 /** \defgroup checksum Checksum calculation and checking 29 * \addtogroup checksum 30 * @{ 31 */ 32 33 /** Enum of supported checksum types. 34 * NOTE! This enum guarantee to be sorted by "hash quality" 35 */ 36 typedef enum { 37 LR_CHECKSUM_UNKNOWN, 38 LR_CHECKSUM_MD5, /* The most weakest hash */ 39 LR_CHECKSUM_SHA1, /* | */ 40 LR_CHECKSUM_SHA224, /* | */ 41 LR_CHECKSUM_SHA256, /* | */ 42 LR_CHECKSUM_SHA384, /* \|/ */ 43 LR_CHECKSUM_SHA512, /* The most secure hash */ 44 } LrChecksumType; 45 46 /** Convert checksum name (string) to ::LrChecksumType. 47 * @param type String with a checksum name (e.g. "sha1", "SHA256", ...) 48 * @return ::LrChecksumType value representing the checksum 49 * or LR_CHECKSUM_UNKNOWN 50 */ 51 LrChecksumType 52 lr_checksum_type(const char *type); 53 54 /** Convert LrChecksumType to string 55 * @param type Checksum type 56 * @return Constant string with name of the checksum 57 */ 58 const char * 59 lr_checksum_type_to_str(LrChecksumType type); 60 61 /** Calculate checksum for data pointed by file descriptor. 62 * @param type Checksum type 63 * @param fd Opened file descriptor. Function seeks to the begin 64 * of the file. 65 * @param err GError ** 66 * @return Malloced checksum string or NULL on error. 67 */ 68 char * 69 lr_checksum_fd(LrChecksumType type, int fd, GError **err); 70 71 /** Calculate checksum for data pointed by file descriptor and 72 * compare it to the expected checksum value. 73 * @param type Checksum type 74 * @param fd File descriptor 75 * @param expected String with expected checksum value 76 * @param caching Cache/Use cached checksum value as extended file attr. 77 * @param matches Set pointed variable to TRUE if checksum matches. 78 * @param err GError ** 79 * @return returns TRUE if error is not set and FALSE if it is 80 */ 81 gboolean 82 lr_checksum_fd_cmp(LrChecksumType type, 83 int fd, 84 const char *expected, 85 gboolean caching, 86 gboolean *matches, 87 GError **err); 88 89 /** Calculate checksum for data pointed by file descriptor and 90 * compare it to the expected checksum value. 91 * @param type Checksum type 92 * @param fd File descriptor 93 * @param expected String with expected checksum value 94 * @param caching Cache/Use cached checksum value as extended file attr. 95 * @param matches Set pointed variable to TRUE if checksum matches. 96 * @param calculated If not NULL, the calculated checksum will be pointed 97 * here, the pointed string must be freed by caller. 98 * @param err GError ** 99 * @return returns TRUE if error is not set and FALSE if it is 100 */ 101 gboolean 102 lr_checksum_fd_compare(LrChecksumType type, 103 int fd, 104 const char *expected, 105 gboolean caching, 106 gboolean *matches, 107 gchar **calculated, 108 GError **err); 109 110 /** Clear all checksums cached in extended file attributes 111 * @param fd File descriptor 112 */ 113 void 114 lr_checksum_clear_cache(int fd); 115 116 /** @} */ 117 118 G_END_DECLS 119 120 #endif 121