$treeview $search $mathjax $extrastylesheet
librsync
2.0.2
$projectbrief
|
$projectbrief
|
$searchbox |
00001 /*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- 00002 * 00003 * librsync -- the library for network deltas 00004 * 00005 * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@sourcefrog.net> 00006 * Copyright (C) 1996 by Andrew Tridgell 00007 * Copyright (C) 1996 by Paul Mackerras 00008 * 00009 * This program is free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU Lesser General Public License as published by 00011 * the Free Software Foundation; either version 2.1 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public License 00020 * along with this program; if not, write to the Free Software 00021 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00022 */ 00023 00024 #include "config.h" 00025 00026 #include <assert.h> 00027 #include <stdlib.h> 00028 #include <stdio.h> 00029 00030 #include "librsync.h" 00031 #include "checksum.h" 00032 #include "rollsum.h" 00033 #include "blake2.h" 00034 00035 /** A simple 32bit checksum that can be incrementally updated. */ 00036 rs_weak_sum_t rs_calc_weak_sum(void const *buf, size_t len) 00037 { 00038 Rollsum sum; 00039 00040 RollsumInit(&sum); 00041 RollsumUpdate(&sum, buf, len); 00042 return RollsumDigest(&sum); 00043 } 00044 00045 /** Calculate and store into SUM a strong MD4 checksum of the file blocks seen 00046 * so far. 00047 * 00048 * In plain rsync, the checksum is perturbed by a seed value. This is used when 00049 * retrying a failed transmission: we've discovered that the hashes collided at 00050 * some point, so we're going to try again with different hashes to see if we 00051 * can get it right. (Check tridge's thesis for details and to see if that's 00052 * correct.) 00053 * 00054 * Since we can't retry a web transaction I'm not sure if it's very useful in 00055 * rproxy. */ 00056 void rs_calc_md4_sum(void const *buf, size_t len, rs_strong_sum_t *sum) 00057 { 00058 rs_mdfour((unsigned char *)sum, buf, len); 00059 } 00060 00061 void rs_calc_blake2_sum(void const *buf, size_t len, rs_strong_sum_t *sum) 00062 { 00063 blake2b_state ctx; 00064 blake2b_init(&ctx, RS_MAX_STRONG_SUM_LENGTH); 00065 blake2b_update(&ctx, (const uint8_t *)buf, len); 00066 blake2b_final(&ctx, (uint8_t *)sum, RS_MAX_STRONG_SUM_LENGTH); 00067 }