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)
 {

Reply via email to