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: