1 This patch adds sha1 to the checksum code when the openssl library is available.
2 It also enables SHA1 checksum hashing in the daemon auth code.
4 To use this patch, run these commands for a successful build:
6 patch -p1 <patches/fix-checksums.diff
7 patch -p1 <patches/sha1.diff
8 ./configure (optional if already run)
11 based-on: patch/master/fix-checksums
12 diff --git a/checksum.c b/checksum.c
15 @@ -58,6 +58,15 @@ struct name_num_obj valid_checksums = {
17 { CSUM_MD5, NNI_BUILTIN|NNI_EVP, "md5", NULL },
18 { CSUM_MD4, NNI_BUILTIN|NNI_EVP, "md4", NULL },
19 +#ifdef SHA_DIGEST_LENGTH
20 + { CSUM_SHA1, NNI_EVP, "sha1", NULL },
22 +#ifdef SHA256_DIGEST_LENGTH
23 + { CSUM_SHA256, NNI_EVP, "sha256", NULL },
25 +#ifdef SHA512_DIGEST_LENGTH
26 + { CSUM_SHA512, NNI_EVP, "sha512", NULL },
28 { CSUM_NONE, 0, "none", NULL },
31 @@ -65,8 +74,15 @@ struct name_num_obj valid_checksums = {
33 struct name_num_obj valid_auth_checksums = {
34 "daemon auth checksum", NULL, 0, 0, {
35 - { CSUM_MD5, NNI_BUILTIN|NNI_EVP, "md5", NULL },
36 - { CSUM_MD4, NNI_BUILTIN|NNI_EVP, "md4", NULL },
37 +#ifdef SHA512_DIGEST_LENGTH
38 + { CSUM_SHA512, NNI_EVP, "sha512", NULL },
40 +#ifdef SHA256_DIGEST_LENGTH
41 + { CSUM_SHA256, NNI_EVP, "sha256", NULL },
43 +#ifdef SHA_DIGEST_LENGTH
44 + { CSUM_SHA1, NNI_EVP, "sha1", NULL },
49 @@ -207,6 +223,18 @@ int csum_len_for_type(int cst, BOOL flist_csum)
50 return MD4_DIGEST_LEN;
52 return MD5_DIGEST_LEN;
53 +#ifdef SHA_DIGEST_LENGTH
55 + return SHA_DIGEST_LENGTH;
57 +#ifdef SHA256_DIGEST_LENGTH
59 + return SHA256_DIGEST_LENGTH;
61 +#ifdef SHA512_DIGEST_LENGTH
63 + return SHA512_DIGEST_LENGTH;
68 @@ -232,6 +260,9 @@ int canonical_checksum(int csum_type)
78 diff --git a/lib/md-defines.h b/lib/md-defines.h
79 --- a/lib/md-defines.h
80 +++ b/lib/md-defines.h
82 /* Keep this simple so both C and ASM can use it */
84 +/*#undef SHA512_DIGEST_LENGTH*/
85 +/*#undef SHA256_DIGEST_LENGTH*/
87 #define MD4_DIGEST_LEN 16
88 #define MD5_DIGEST_LEN 16
89 +#if defined SHA512_DIGEST_LENGTH
90 +#define MAX_DIGEST_LEN SHA512_DIGEST_LENGTH
91 +#elif defined SHA256_DIGEST_LENGTH
92 +#define MAX_DIGEST_LEN SHA256_DIGEST_LENGTH
93 +#elif defined SHA_DIGEST_LENGTH
94 +#define MAX_DIGEST_LEN SHA_DIGEST_LENGTH
96 #define MAX_DIGEST_LEN MD5_DIGEST_LEN
103 #define CSUM_XXH3_64 7
104 #define CSUM_XXH3_128 8
106 +#define CSUM_SHA256 10
107 +#define CSUM_SHA512 11
108 diff --git a/lib/mdigest.h b/lib/mdigest.h
112 /* The include file for both the MD4 and MD5 routines. */
115 +#include <openssl/sha.h>
116 #include <openssl/evp.h>
118 #include "md-defines.h"
119 diff --git a/rsync.h b/rsync.h
122 @@ -1173,7 +1173,7 @@ struct name_num_obj {
123 struct name_num_item *negotiated_nni;
126 - struct name_num_item list[10]; /* we'll get a compile error/warning if this is ever too small */
127 + struct name_num_item list[12]; /* we'll get a compile error/warning if this is ever too small */