@@ -23,6 +23,9 @@ typedef struct
2323
2424SCOSSL_DIGEST_CTX * p_scossl_digest_dupctx (_In_ SCOSSL_DIGEST_CTX * ctx );
2525void p_scossl_digest_freectx (_Inout_ SCOSSL_DIGEST_CTX * ctx );
26+ #ifdef OSSL_FUNC_DIGEST_COPYCTX
27+ void p_scossl_digest_copy_ctx (_Inout_ SCOSSL_DIGEST_CTX * dstCtx , _In_ SCOSSL_DIGEST_CTX * srcCtx );
28+ #endif
2629
2730SCOSSL_STATUS p_scossl_digest_update (_Inout_ SCOSSL_DIGEST_CTX * ctx ,
2831 _In_reads_bytes_ (inl ) const unsigned char * in , size_t inl );
@@ -33,7 +36,7 @@ SCOSSL_STATUS p_scossl_digest_digest(_In_ PCSYMCRYPT_HASH pHash,
3336SCOSSL_STATUS p_scossl_digest_get_params (_Inout_ OSSL_PARAM params [], size_t size , size_t blocksize , UINT32 flags );
3437const OSSL_PARAM * p_scossl_digest_gettable_params (ossl_unused void * ctx , ossl_unused void * provctx );
3538
36- #define SCOSSL_DIGEST_FUNCTIONS_COMMON (alg , dispatch_name , flags ) \
39+ #define IMPLEMENT_SCOSSL_DIGEST_FUNCTIONS_COMMON (alg , dispatch_name , flags ) \
3740 static SCOSSL_DIGEST_CTX *p_scossl_##dispatch_name##_newctx(ossl_unused void *prov_ctx) \
3841 { \
3942 SCOSSL_DIGEST_CTX *ctx = OPENSSL_malloc(sizeof(SCOSSL_DIGEST_CTX)); \
@@ -74,16 +77,34 @@ const OSSL_PARAM *p_scossl_digest_gettable_params(ossl_unused void *ctx, ossl_un
7477 SymCryptHashResultSize(SymCrypt##alg##Algorithm), \
7578 SymCryptHashInputBlockSize(SymCrypt##alg##Algorithm), \
7679 flags); \
77- } \
78- \
79- const OSSL_DISPATCH p_scossl_##dispatch_name##_functions[] = { \
80- {OSSL_FUNC_DIGEST_NEWCTX, (void (*)(void))p_scossl_##dispatch_name##_newctx}, \
81- {OSSL_FUNC_DIGEST_FREECTX, (void (*)(void))p_scossl_digest_freectx}, \
82- {OSSL_FUNC_DIGEST_DUPCTX, (void (*)(void))p_scossl_digest_dupctx}, \
83- {OSSL_FUNC_DIGEST_GET_PARAMS, (void (*)(void))p_scossl_##dispatch_name##_get_params}, \
84- {OSSL_FUNC_DIGEST_GETTABLE_PARAMS, (void (*)(void))p_scossl_digest_gettable_params}, \
85- {OSSL_FUNC_DIGEST_UPDATE, (void (*)(void))p_scossl_digest_update}, \
86- {OSSL_FUNC_DIGEST_DIGEST, (void (*)(void))p_scossl_##dispatch_name##_digest},
80+ }
81+
82+ #ifdef OSSL_FUNC_DIGEST_COPYCTX
83+ #define SCOSSL_DIGEST_FUNCTIONS_COMMON (alg , dispatch_name , flags ) \
84+ IMPLEMENT_SCOSSL_DIGEST_FUNCTIONS_COMMON(alg, dispatch_name, flags) \
85+ \
86+ const OSSL_DISPATCH p_scossl_##dispatch_name##_functions[] = { \
87+ {OSSL_FUNC_DIGEST_NEWCTX, (void (*)(void))p_scossl_##dispatch_name##_newctx}, \
88+ {OSSL_FUNC_DIGEST_FREECTX, (void (*)(void))p_scossl_digest_freectx}, \
89+ {OSSL_FUNC_DIGEST_DUPCTX, (void (*)(void))p_scossl_digest_dupctx}, \
90+ {OSSL_FUNC_DIGEST_COPYCTX, (void (*)(void))p_scossl_digest_copy_ctx}, \
91+ {OSSL_FUNC_DIGEST_GET_PARAMS, (void (*)(void))p_scossl_##dispatch_name##_get_params}, \
92+ {OSSL_FUNC_DIGEST_GETTABLE_PARAMS, (void (*)(void))p_scossl_digest_gettable_params}, \
93+ {OSSL_FUNC_DIGEST_UPDATE, (void (*)(void))p_scossl_digest_update}, \
94+ {OSSL_FUNC_DIGEST_DIGEST, (void (*)(void))p_scossl_##dispatch_name##_digest},
95+ #else
96+ #define SCOSSL_DIGEST_FUNCTIONS_COMMON (alg , dispatch_name , flags ) \
97+ IMPLEMENT_SCOSSL_DIGEST_FUNCTIONS_COMMON(alg, dispatch_name, flags) \
98+ \
99+ const OSSL_DISPATCH p_scossl_##dispatch_name##_functions[] = { \
100+ {OSSL_FUNC_DIGEST_NEWCTX, (void (*)(void))p_scossl_##dispatch_name##_newctx}, \
101+ {OSSL_FUNC_DIGEST_FREECTX, (void (*)(void))p_scossl_digest_freectx}, \
102+ {OSSL_FUNC_DIGEST_DUPCTX, (void (*)(void))p_scossl_digest_dupctx}, \
103+ {OSSL_FUNC_DIGEST_GET_PARAMS, (void (*)(void))p_scossl_##dispatch_name##_get_params}, \
104+ {OSSL_FUNC_DIGEST_GETTABLE_PARAMS, (void (*)(void))p_scossl_digest_gettable_params}, \
105+ {OSSL_FUNC_DIGEST_UPDATE, (void (*)(void))p_scossl_digest_update}, \
106+ {OSSL_FUNC_DIGEST_DIGEST, (void (*)(void))p_scossl_##dispatch_name##_digest},
107+ #endif
87108
88109#define SCOSSL_DIGEST_FUNCTIONS_END \
89110 {0, NULL}};
0 commit comments