diff options
Diffstat (limited to 'libglusterfs/src/checksum.c')
| -rw-r--r-- | libglusterfs/src/checksum.c | 86 |
1 files changed, 26 insertions, 60 deletions
diff --git a/libglusterfs/src/checksum.c b/libglusterfs/src/checksum.c index 000ab8d93a2..acdaed04ae2 100644 --- a/libglusterfs/src/checksum.c +++ b/libglusterfs/src/checksum.c @@ -1,78 +1,44 @@ /* - Copyright (c) 2009 Gluster, Inc. <http://www.gluster.com> - This file is part of GlusterFS. + Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. - GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - GlusterFS 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 - 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/>. + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. */ -#include <inttypes.h> - -#include "glusterfs.h" -#include "md5.h" -#include "checksum.h" - +#include <openssl/md5.h> +#include <openssl/sha.h> +#include <zlib.h> +#include <stdint.h> +#include <string.h> /* - * The "weak" checksum required for the rsync algorithm, - * adapted from the rsync source code. The following comment - * appears there: + * The "weak" checksum required for the rsync algorithm. * - * "a simple 32 bit checksum that can be upadted from either end - * (inspired by Mark Adler's Adler-32 checksum)" + * Note: these functions are only called to compute checksums on + * pathnames; they don't need to handle arbitrarily long strings of + * data. Thus int32_t and uint32_t are sufficient */ - uint32_t -gf_rsync_weak_checksum (char *buf1, int32_t len) +gf_rsync_weak_checksum(unsigned char *buf, size_t len) { - int32_t i; - uint32_t s1, s2; - - signed char *buf = (signed char *) buf1; - uint32_t csum; - - s1 = s2 = 0; - for (i = 0; i < (len-4); i+=4) { - s2 += 4*(s1 + buf[i]) + 3*buf[i+1] + 2*buf[i+2] + buf[i+3]; - - s1 += buf[i+0] + buf[i+1] + buf[i+2] + buf[i+3]; - } - - for (; i < len; i++) { - s1 += buf[i]; - s2 += s1; - } - - csum = (s1 & 0xffff) + (s2 << 16); - - return csum; + return adler32(0, buf, len); } - /* - * The "strong" checksum required for the rsync algorithm, - * adapted from the rsync source code. + * The "strong" checksum required for the rsync algorithm. */ - void -gf_rsync_strong_checksum (char *buf, int32_t len, uint8_t *sum) +gf_rsync_strong_checksum(unsigned char *data, size_t len, + unsigned char *sha256_md) { - md_context m; - - md5_begin (&m); - md5_update (&m, (unsigned char *) buf, len); - md5_result (&m, (unsigned char *) sum); + SHA256((const unsigned char *)data, len, sha256_md); +} - return; +void +gf_rsync_md5_checksum(unsigned char *data, size_t len, unsigned char *md5) +{ + MD5(data, len, md5); } |
