Author: rinrab
Date: Sun Dec 28 15:58:07 2025
New Revision: 1930928
Log:
Add internal APIs to compute checksums of an entire blocks of data with a
default that simply wraps APR routines as it was before. Those new functions
are now used to implement MD5 and SHA1 kinds in the svn_checksum() function.
* subversion/libsvn_subr/checksum.c
(svn_checksum): Implement MD5 and SHA1 kinds through svn_checksum__md5() and
svn_checksum__sha1() function instead of calling APR directly.
* subversion/libsvn_subr/checksum.h
(svn_checksum__md5, svn_checksum__sha1): Declare functions.
* subversion/libsvn_subr/checksum_apr.c
(svn_checksum__md5, svn_checksum__sha1): Implement functions.
Modified:
subversion/trunk/subversion/libsvn_subr/checksum.c
subversion/trunk/subversion/libsvn_subr/checksum.h
subversion/trunk/subversion/libsvn_subr/checksum_apr.c
Modified: subversion/trunk/subversion/libsvn_subr/checksum.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum.c Sun Dec 28 15:40:10
2025 (r1930927)
+++ subversion/trunk/subversion/libsvn_subr/checksum.c Sun Dec 28 15:58:07
2025 (r1930928)
@@ -483,13 +483,13 @@ svn_checksum(svn_checksum_t **checksum,
switch (kind)
{
case svn_checksum_md5:
- apr_md5((unsigned char *)(*checksum)->digest, data, len);
+ SVN_ERR(svn_checksum__md5((unsigned char *)(*checksum)->digest, data,
+ len));
break;
case svn_checksum_sha1:
- apr_sha1_init(&sha1_ctx);
- apr_sha1_update(&sha1_ctx, data, (unsigned int)len);
- apr_sha1_final((unsigned char *)(*checksum)->digest, &sha1_ctx);
+ SVN_ERR(svn_checksum__sha1((unsigned char *)(*checksum)->digest, data,
+ len));
break;
case svn_checksum_fnv1a_32:
Modified: subversion/trunk/subversion/libsvn_subr/checksum.h
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum.h Sun Dec 28 15:40:10
2025 (r1930927)
+++ subversion/trunk/subversion/libsvn_subr/checksum.h Sun Dec 28 15:58:07
2025 (r1930928)
@@ -69,6 +69,11 @@ svn__digests_match(const unsigned char d
/* MD5 checksum context */
+svn_error_t *
+svn_checksum__md5(unsigned char *digest,
+ const void *data,
+ apr_size_t len);
+
typedef struct svn_checksum__md5_ctx_t svn_checksum__md5_ctx_t;
svn_checksum__md5_ctx_t *
@@ -88,6 +93,11 @@ svn_checksum__md5_ctx_final(unsigned cha
/* SHA1 checksum context */
+svn_error_t *
+svn_checksum__sha1(unsigned char *digest,
+ const void *data,
+ apr_size_t len);
+
typedef struct svn_checksum__sha1_ctx_t svn_checksum__sha1_ctx_t;
svn_checksum__sha1_ctx_t *
Modified: subversion/trunk/subversion/libsvn_subr/checksum_apr.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum_apr.c Sun Dec 28
15:40:10 2025 (r1930927)
+++ subversion/trunk/subversion/libsvn_subr/checksum_apr.c Sun Dec 28
15:58:07 2025 (r1930928)
@@ -33,6 +33,15 @@
/*** MD5 checksum ***/
+svn_error_t *
+svn_checksum__md5(unsigned char *digest,
+ const void *data,
+ apr_size_t len)
+{
+ apr_md5(digest, data, len);
+ return SVN_NO_ERROR;
+}
+
svn_checksum__md5_ctx_t *
svn_checksum__md5_ctx_create(apr_pool_t *pool)
{
@@ -72,6 +81,18 @@ svn_checksum__md5_ctx_final(unsigned cha
/*** SHA1 checksum ***/
+svn_error_t *
+svn_checksum__sha1(unsigned char *digest,
+ const void *data,
+ apr_size_t len)
+{
+ apr_sha1_ctx_t sha1_ctx;
+ apr_sha1_init(&sha1_ctx);
+ apr_sha1_update(&sha1_ctx, data, (unsigned int)len);
+ apr_sha1_final(digest, &sha1_ctx);
+ return SVN_NO_ERROR;
+}
+
svn_checksum__sha1_ctx_t *
svn_checksum__sha1_ctx_create(apr_pool_t *pool)
{