Author: rinrab
Date: Sun Dec 28 15:40:10 2025
New Revision: 1930927

Log:
Move the actual implementations of MD5 and SHA1 checksums into a separate file
checksum_apr.c introducing new internal APIs.

* subversion/libsvn_subr/checksum.h
  (svn_checksum__md5_ctx_t, svn_checksum__md5_ctx_create,
   svn_checksum__md5_ctx_reset, svn_checksum__md5_ctx_update,
   svn_checksum__md5_ctx_final): Declare.
  (svn_checksum__sha1_ctx_t, svn_checksum__sha1_ctx_create,
   svn_checksum__sha1_ctx_reset, svn_checksum__sha1_ctx_update,
   svn_checksum__sha1_ctx_final): Declare.

* subversion/libsvn_subr/checksum_apr.c
  (svn_checksum__md5_ctx_t, svn_checksum__md5_ctx_create,
   svn_checksum__md5_ctx_reset, svn_checksum__md5_ctx_update,
   svn_checksum__md5_ctx_final): Implement.
  (svn_checksum__sha1_ctx_t, svn_checksum__sha1_ctx_create,
   svn_checksum__sha1_ctx_reset, svn_checksum__sha1_ctx_update,
   svn_checksum__sha1_ctx_final): Implement.

* subversion/libsvn_subr/checksum_context.c
  (svn_checksum_ctx_create, svn_checksum_ctx_reset, svn_checksum_update,
   svn_checksum_final): Use new APIs to implement MD5 and SHA1 kinds.

Added:
   subversion/trunk/subversion/libsvn_subr/checksum_apr.c   (contents, props 
changed)
Modified:
   subversion/trunk/subversion/libsvn_subr/checksum.h
   subversion/trunk/subversion/libsvn_subr/checksum_context.c

Modified: subversion/trunk/subversion/libsvn_subr/checksum.h
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum.h  Sun Dec 28 15:25:31 
2025        (r1930926)
+++ subversion/trunk/subversion/libsvn_subr/checksum.h  Sun Dec 28 15:40:10 
2025        (r1930927)
@@ -67,6 +67,45 @@ svn__digests_match(const unsigned char d
                    const unsigned char d2[],
                    apr_size_t digest_size);
 
+
+/* MD5 checksum context */
+typedef struct svn_checksum__md5_ctx_t svn_checksum__md5_ctx_t;
+
+svn_checksum__md5_ctx_t *
+svn_checksum__md5_ctx_create(apr_pool_t *result_pool);
+
+svn_error_t *
+svn_checksum__md5_ctx_reset(svn_checksum__md5_ctx_t *ctx);
+
+svn_error_t *
+svn_checksum__md5_ctx_update(svn_checksum__md5_ctx_t *ctx,
+                             const void *data,
+                             apr_size_t len);
+
+svn_error_t *
+svn_checksum__md5_ctx_final(unsigned char *digest,
+                            const svn_checksum__md5_ctx_t *ctx);
+
+
+/* SHA1 checksum context */
+typedef struct svn_checksum__sha1_ctx_t svn_checksum__sha1_ctx_t;
+
+svn_checksum__sha1_ctx_t *
+svn_checksum__sha1_ctx_create(apr_pool_t *result_pool);
+
+svn_error_t *
+svn_checksum__sha1_ctx_reset(svn_checksum__sha1_ctx_t *ctx);
+
+svn_error_t *
+svn_checksum__sha1_ctx_update(svn_checksum__sha1_ctx_t *ctx,
+                              const void *data,
+                              apr_size_t len);
+
+svn_error_t *
+svn_checksum__sha1_ctx_final(unsigned char *digest,
+                             const svn_checksum__sha1_ctx_t *ctx);
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Added: subversion/trunk/subversion/libsvn_subr/checksum_apr.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ subversion/trunk/subversion/libsvn_subr/checksum_apr.c      Sun Dec 28 
15:40:10 2025        (r1930927)
@@ -0,0 +1,111 @@
+/*
+ * checksum_apr.c:   APR backed checksums
+ *
+ * ====================================================================
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
+ * ====================================================================
+ */
+
+#include "svn_private_config.h"
+
+#define APR_WANT_BYTEFUNC
+
+#include <apr_md5.h>
+#include <apr_sha1.h>
+
+#include "svn_error.h"
+#include "checksum.h"
+
+
+/*** MD5 checksum ***/
+svn_checksum__md5_ctx_t *
+svn_checksum__md5_ctx_create(apr_pool_t *pool)
+{
+  apr_md5_ctx_t *result = apr_palloc(pool, sizeof(*result));
+  apr_md5_init(result);
+  return (svn_checksum__md5_ctx_t *)result;
+}
+
+svn_error_t *
+svn_checksum__md5_ctx_reset(svn_checksum__md5_ctx_t *ctx)
+{
+  apr_md5_ctx_t *apr_ctx = (apr_md5_ctx_t *)ctx;
+  memset(apr_ctx, 0, sizeof(*apr_ctx));
+  apr_md5_init(apr_ctx);
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_checksum__md5_ctx_update(svn_checksum__md5_ctx_t *ctx,
+                             const void *data,
+                             apr_size_t len)
+{
+  apr_md5_ctx_t *apr_ctx = (apr_md5_ctx_t *)ctx;
+  apr_md5_update(apr_ctx, data, len);
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_checksum__md5_ctx_final(unsigned char *digest,
+                            const svn_checksum__md5_ctx_t *ctx)
+{
+
+  apr_md5_ctx_t *apr_ctx = (apr_md5_ctx_t *)ctx;
+  apr_md5_final(digest, apr_ctx);
+  return SVN_NO_ERROR;
+}
+
+
+/*** SHA1 checksum ***/
+svn_checksum__sha1_ctx_t *
+svn_checksum__sha1_ctx_create(apr_pool_t *pool)
+{
+  apr_sha1_ctx_t *result = apr_palloc(pool, sizeof(*result));
+  apr_sha1_init(result);
+  return (svn_checksum__sha1_ctx_t  *)result;
+}
+
+svn_error_t *
+svn_checksum__sha1_ctx_reset(svn_checksum__sha1_ctx_t *ctx)
+{
+  apr_sha1_ctx_t *apr_ctx = (apr_sha1_ctx_t *)ctx;
+  memset(apr_ctx, 0, sizeof(*apr_ctx));
+  apr_sha1_init(apr_ctx);
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_checksum__sha1_ctx_update(svn_checksum__sha1_ctx_t *ctx,
+                             const void *data,
+                             apr_size_t len)
+{
+  apr_sha1_ctx_t *apr_ctx = (apr_sha1_ctx_t *)ctx;
+  apr_sha1_update(apr_ctx, data, len);
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_checksum__sha1_ctx_final(unsigned char *digest,
+                            const svn_checksum__sha1_ctx_t *ctx)
+{
+
+  apr_sha1_ctx_t *apr_ctx = (apr_sha1_ctx_t *)ctx;
+  apr_sha1_final(digest, apr_ctx);
+  return SVN_NO_ERROR;
+}
+

Modified: subversion/trunk/subversion/libsvn_subr/checksum_context.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum_context.c  Sun Dec 28 
15:25:31 2025        (r1930926)
+++ subversion/trunk/subversion/libsvn_subr/checksum_context.c  Sun Dec 28 
15:40:10 2025        (r1930927)
@@ -52,13 +52,11 @@ svn_checksum_ctx_create(svn_checksum_kin
   switch (kind)
     {
       case svn_checksum_md5:
-        ctx->apr_ctx = apr_palloc(pool, sizeof(apr_md5_ctx_t));
-        apr_md5_init(ctx->apr_ctx);
+        ctx->apr_ctx = svn_checksum__md5_ctx_create(pool);
         break;
 
       case svn_checksum_sha1:
-        ctx->apr_ctx = apr_palloc(pool, sizeof(apr_sha1_ctx_t));
-        apr_sha1_init(ctx->apr_ctx);
+        ctx->apr_ctx = svn_checksum__sha1_ctx_create(pool);
         break;
 
       case svn_checksum_fnv1a_32:
@@ -82,13 +80,11 @@ svn_checksum_ctx_reset(svn_checksum_ctx_
   switch (ctx->kind)
     {
       case svn_checksum_md5:
-        memset(ctx->apr_ctx, 0, sizeof(apr_md5_ctx_t));
-        apr_md5_init(ctx->apr_ctx);
+        svn_checksum__md5_ctx_reset(ctx->apr_ctx);
         break;
 
       case svn_checksum_sha1:
-        memset(ctx->apr_ctx, 0, sizeof(apr_sha1_ctx_t));
-        apr_sha1_init(ctx->apr_ctx);
+        svn_checksum__sha1_ctx_reset(ctx->apr_ctx);
         break;
 
       case svn_checksum_fnv1a_32:
@@ -114,11 +110,11 @@ svn_checksum_update(svn_checksum_ctx_t *
   switch (ctx->kind)
     {
       case svn_checksum_md5:
-        apr_md5_update(ctx->apr_ctx, data, len);
+        svn_checksum__md5_ctx_update(ctx->apr_ctx, data, len);
         break;
 
       case svn_checksum_sha1:
-        apr_sha1_update(ctx->apr_ctx, data, (unsigned int)len);
+        svn_checksum__sha1_ctx_update(ctx->apr_ctx, data, len);
         break;
 
       case svn_checksum_fnv1a_32:
@@ -147,11 +143,13 @@ svn_checksum_final(svn_checksum_t **chec
   switch (ctx->kind)
     {
       case svn_checksum_md5:
-        apr_md5_final((unsigned char *)(*checksum)->digest, ctx->apr_ctx);
+        SVN_ERR(svn_checksum__md5_ctx_final(
+            (unsigned char *)(*checksum)->digest, ctx->apr_ctx));
         break;
 
       case svn_checksum_sha1:
-        apr_sha1_final((unsigned char *)(*checksum)->digest, ctx->apr_ctx);
+        SVN_ERR(svn_checksum__sha1_ctx_final(
+            (unsigned char *)(*checksum)->digest, ctx->apr_ctx));
         break;
 
       case svn_checksum_fnv1a_32:

Reply via email to