X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fsha1.c;h=cb55b49a4f11a324744ccccc3e7876c945d297ca;hp=cc481086c3aca6d443dfe249e6587e90755d3196;hb=c906da9f60639594fb9c6b9d133aca9c49b3f586;hpb=2ce25b93a72b4a8d6daa5321f9ef7df0772a789f diff --git a/lib/sha1.c b/lib/sha1.c index cc481086..cb55b49a 100644 --- a/lib/sha1.c +++ b/lib/sha1.c @@ -13,35 +13,14 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/ . + * along with this program. If not, see https://www.gnu.org/licenses/ . * * Author: Carl Worth */ #include "notmuch-private.h" -#include "libsha1.h" - -/* Just some simple interfaces on top of libsha1 so that we can leave - * libsha1 as untouched as possible. */ - -static char * -_hex_of_sha1_digest (const unsigned char digest[SHA1_DIGEST_SIZE]) -{ - char *result, *r; - int i; - - result = xcalloc (SHA1_DIGEST_SIZE * 2 + 1, 1); - - for (r = result, i = 0; - i < SHA1_DIGEST_SIZE; - r += 2, i++) - { - sprintf (r, "%02x", digest[i]); - } - - return result; -} +#include /* Create a hexadecimal string version of the SHA-1 digest of 'str' * (including its null terminating character). @@ -50,18 +29,17 @@ _hex_of_sha1_digest (const unsigned char digest[SHA1_DIGEST_SIZE]) * should free() when finished. */ char * -notmuch_sha1_of_string (const char *str) +_notmuch_sha1_of_string (const char *str) { - sha1_ctx sha1; - unsigned char digest[SHA1_DIGEST_SIZE]; - - sha1_begin (&sha1); + GChecksum *sha1; + char *digest; - sha1_hash ((unsigned char *) str, strlen (str) + 1, &sha1); + sha1 = g_checksum_new (G_CHECKSUM_SHA1); + g_checksum_update (sha1, (const guchar *) str, strlen (str) + 1); + digest = xstrdup (g_checksum_get_string (sha1)); + g_checksum_free (sha1); - sha1_end (digest, &sha1); - - return _hex_of_sha1_digest (digest); + return digest; } /* Create a hexadecimal string version of the SHA-1 digest of the @@ -74,42 +52,42 @@ notmuch_sha1_of_string (const char *str) * file not found, etc.), this function returns NULL. */ char * -notmuch_sha1_of_file (const char *filename) +_notmuch_sha1_of_file (const char *filename) { FILE *file; #define BLOCK_SIZE 4096 unsigned char block[BLOCK_SIZE]; size_t bytes_read; - sha1_ctx sha1; - unsigned char digest[SHA1_DIGEST_SIZE]; - char *result; + GChecksum *sha1; + char *digest = NULL; file = fopen (filename, "r"); if (file == NULL) return NULL; - sha1_begin (&sha1); + sha1 = g_checksum_new (G_CHECKSUM_SHA1); + if (sha1 == NULL) + goto DONE; while (1) { bytes_read = fread (block, 1, 4096, file); if (bytes_read == 0) { - if (feof (file)) { + if (feof (file)) break; - } else if (ferror (file)) { - fclose (file); - return NULL; - } + else if (ferror (file)) + goto DONE; } else { - sha1_hash (block, bytes_read, &sha1); + g_checksum_update (sha1, block, bytes_read); } } - sha1_end (digest, &sha1); - - result = _hex_of_sha1_digest (digest); + digest = xstrdup (g_checksum_get_string (sha1)); - fclose (file); + DONE: + if (sha1) + g_checksum_free (sha1); + if (file) + fclose (file); - return result; + return digest; } -