librsync
2.3.4

Abstract wrappers around different weaksum and strongsum implementations. More...
Go to the source code of this file.
Data Structures  
struct  weaksum 
Abstract wrapper around weaksum implementations. More...  
Typedefs  
typedef struct weaksum  weaksum_t 
Abstract wrapper around weaksum implementations. More...  
Enumerations  
enum  weaksum_kind_t { RS_ROLLSUM , RS_RABINKARP } 
Weaksum implementations. More...  
enum  strongsum_kind_t { RS_MD4 , RS_BLAKE2 } 
Strongsum implementations. More...  
Functions  
static void  weaksum_reset (weaksum_t *sum) 
static void  weaksum_init (weaksum_t *sum, weaksum_kind_t kind) 
static size_t  weaksum_count (weaksum_t *sum) 
static void  weaksum_update (weaksum_t *sum, const unsigned char *buf, size_t len) 
static void  weaksum_rotate (weaksum_t *sum, unsigned char out, unsigned char in) 
static void  weaksum_rollin (weaksum_t *sum, unsigned char in) 
static void  weaksum_rollout (weaksum_t *sum, unsigned char out) 
static rs_weak_sum_t  weaksum_digest (weaksum_t *sum) 
rs_weak_sum_t  rs_calc_weak_sum (weaksum_kind_t kind, void const *buf, size_t len) 
Calculate a weaksum. More...  
void  rs_calc_strong_sum (strongsum_kind_t kind, void const *buf, size_t len, rs_strong_sum_t *sum) 
Calculate a strongsum. More...  
Abstract wrappers around different weaksum and strongsum implementations.
Definition in file checksum.h.
Abstract wrapper around weaksum implementations.
This is a polymorphic interface to the different rollsum implementations.
Historically rollsum methods were implemented as static inline functions because they were small and needed to be fast. Now that we need to call different methods for different rollsum implementations, they are getting more complicated. Is it better to delegate calls to the right implementation using static inline switch statements, or stop inlining them and use virtual method pointers? Tests suggest inlined switch statements is faster.
enum weaksum_kind_t 
Weaksum implementations.
Definition at line 35 of file checksum.h.
enum strongsum_kind_t 
Strongsum implementations.
Definition at line 41 of file checksum.h.

inlinestatic 
Definition at line 64 of file checksum.h.

inlinestatic 
Definition at line 72 of file checksum.h.

inlinestatic 
Definition at line 79 of file checksum.h.

inlinestatic 
Definition at line 85 of file checksum.h.

inlinestatic 
Definition at line 94 of file checksum.h.

inlinestatic 
Definition at line 103 of file checksum.h.

inlinestatic 
Definition at line 111 of file checksum.h.

inlinestatic 
Definition at line 119 of file checksum.h.
rs_weak_sum_t rs_calc_weak_sum  (  weaksum_kind_t  kind, 
void const *  buf,  
size_t  len  
) 
Calculate a weaksum.
Note this does not apply mix32() to rollsum digests, unlike weaksum_digest(). This is because rollsums are stored raw without mix32() applied for backwardscompatibility, but we apply mix32() when adding them into a signature and when getting the digest for calculating deltas.
Calculate a weaksum.
Definition at line 34 of file checksum.c.
void rs_calc_strong_sum  (  strongsum_kind_t  kind, 
void const *  buf,  
size_t  len,  
rs_strong_sum_t *  sum  
) 
Calculate a strongsum.
Calculate a strongsum.
In plain rsync, the checksum is perturbed by a seed value. This is used when retrying a failed transmission: we've discovered that the hashes collided at some point, so we're going to try again with different hashes to see if we can get it right. (Check tridge's thesis for details and to see if that's correct.)
Since we can't retry I'm not sure if it's very useful for librsync, except perhaps as protection against hash collision attacks.
Definition at line 59 of file checksum.c.