]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
convert SHA512_Update to do thunking
authorNeil Horman <nhorman@openssl.org>
Tue, 20 Jan 2026 17:28:22 +0000 (12:28 -0500)
committerPauli <paul.dale@oracle.com>
Wed, 21 Jan 2026 22:40:35 +0000 (09:40 +1100)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/29650)

crypto/sha/sha512.c
providers/implementations/digests/sha2_prov.c

index 4c3a3b6c093da141c2799a23b30988748a2e7be0..473ec09b5f4cf41b6588c9677e1622fed56c62c7 100644 (file)
@@ -71,6 +71,8 @@
 #define U64(C) C##ULL
 #endif
 
+int SHA512_Update_thunk(void *cp, const unsigned char *data, size_t len);
+
 int sha512_224_init(SHA512_CTX *c)
 {
     c->h[0] = U64(0x8c3d37c819544da2);
@@ -276,11 +278,11 @@ int SHA384_Final(unsigned char *md, SHA512_CTX *c)
     return SHA512_Final(md, c);
 }
 
-int SHA512_Update(SHA512_CTX *c, const void *_data, size_t len)
+int SHA512_Update_thunk(void *cp, const unsigned char *data, size_t len)
 {
+    SHA512_CTX *c = (SHA512_CTX *)cp;
     SHA_LONG64 l;
     unsigned char *p = c->u.p;
-    const unsigned char *data = (const unsigned char *)_data;
 
     if (len == 0)
         return 1;
@@ -324,6 +326,11 @@ int SHA512_Update(SHA512_CTX *c, const void *_data, size_t len)
     return 1;
 }
 
+int SHA512_Update(SHA512_CTX *c, const void *_data, size_t len)
+{
+    return SHA512_Update_thunk((void *)c, (const unsigned char *)_data, len);
+}
+
 int SHA384_Update(SHA512_CTX *c, const void *data, size_t len)
 {
     return SHA512_Update(c, data, len);
index 3e7f719f0db8b034f75922b4c4e25c9d46dd8307..607228a3550f596bbf3f88ae7b711a1828f48724 100644 (file)
@@ -30,8 +30,9 @@
 
 #define SHA2_FLAGS PROV_DIGEST_FLAG_ALGID_ABSENT
 
-extern int SHA256_Update_thunk(void *ctx, const unsigned char *data, size_t sz);
 extern int SHA1_Update_thunk(void *ctx, const unsigned char *data, size_t sz);
+extern int SHA256_Update_thunk(void *ctx, const unsigned char *data, size_t sz);
+extern int SHA512_Update_thunk(void *ctx, const unsigned char *data, size_t sz);
 
 /* Special set_params method for SSL3 */
 static int sha1_set_ctx_params(void *vctx, const OSSL_PARAM params[])
@@ -315,19 +316,19 @@ IMPLEMENT_digest_functions_with_serialize(sha384, SHA512_CTX,
 IMPLEMENT_digest_functions_with_serialize(sha512, SHA512_CTX,
     SHA512_CBLOCK, SHA512_DIGEST_LENGTH,
     SHA2_FLAGS, SHA512_Init,
-    SHA512_Update, SHA512_Final,
+    SHA512_Update_thunk, SHA512_Final,
     SHA512_Serialize, SHA512_Deserialize)
 
 /* ossl_sha512_224_functions */
 IMPLEMENT_digest_functions_with_serialize(sha512_224, SHA512_CTX,
     SHA512_CBLOCK, SHA224_DIGEST_LENGTH,
     SHA2_FLAGS, sha512_224_init,
-    SHA512_Update, SHA512_Final,
+    SHA512_Update_thunk, SHA512_Final,
     SHA512_Serialize, SHA512_Deserialize)
 
 /* ossl_sha512_256_functions */
 IMPLEMENT_digest_functions_with_serialize(sha512_256, SHA512_CTX,
     SHA512_CBLOCK, SHA256_DIGEST_LENGTH,
     SHA2_FLAGS, sha512_256_init,
-    SHA512_Update, SHA512_Final,
+    SHA512_Update_thunk, SHA512_Final,
     SHA512_Serialize, SHA512_Deserialize)