Coverage Report

Created: 2026-02-14 07:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl30/providers/implementations/include/prov/digestcommon.h
Line
Count
Source
1
/*
2
 * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
#ifndef OSSL_PROVIDERS_DIGESTCOMMON_H
11
#define OSSL_PROVIDERS_DIGESTCOMMON_H
12
13
#include <openssl/core_dispatch.h>
14
#include <openssl/core_names.h>
15
#include <openssl/params.h>
16
#include "prov/providercommon.h"
17
18
/* Internal flags that can be queried */
19
1.39k
#define PROV_DIGEST_FLAG_XOF 0x0001
20
1.39k
#define PROV_DIGEST_FLAG_ALGID_ABSENT 0x0002
21
22
#ifdef __cplusplus
23
extern "C" {
24
#endif
25
26
#define PROV_FUNC_DIGEST_GET_PARAM(name, blksize, dgstsize, flags)               \
27
    static OSSL_FUNC_digest_get_params_fn name##_get_params;                     \
28
    static int name##_get_params(OSSL_PARAM params[])                            \
29
1.98k
    {                                                                            \
30
1.98k
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
1.98k
    }
blake2_prov.c:blake2s256_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
blake2_prov.c:blake2b512_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
md5_prov.c:md5_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
md5_sha1_prov.c:md5_sha1_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
null_prov.c:nullmd_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
ripemd_prov.c:ripemd160_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha2_prov.c:sha1_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha2_prov.c:sha224_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha2_prov.c:sha256_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha2_prov.c:sha384_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha2_prov.c:sha512_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha2_prov.c:sha512_224_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha2_prov.c:sha512_256_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha3_prov.c:sha3_224_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha3_prov.c:sha3_256_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha3_prov.c:sha3_384_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha3_prov.c:sha3_512_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha3_prov.c:shake_128_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha3_prov.c:shake_256_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
sha3_prov.c:keccak_kmac_128_get_params
Line
Count
Source
29
72
    {                                                                            \
30
72
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
72
    }
sha3_prov.c:keccak_kmac_256_get_params
Line
Count
Source
29
72
    {                                                                            \
30
72
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
72
    }
sm3_prov.c:sm3_get_params
Line
Count
Source
29
92
    {                                                                            \
30
92
        return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \
31
92
    }
32
33
#define PROV_DISPATCH_FUNC_DIGEST_GET_PARAMS(name)                      \
34
    { OSSL_FUNC_DIGEST_GET_PARAMS, (void (*)(void))name##_get_params }, \
35
    {                                                                   \
36
        OSSL_FUNC_DIGEST_GETTABLE_PARAMS,                               \
37
            (void (*)(void))ossl_digest_default_gettable_params         \
38
    }
39
40
#define PROV_FUNC_DIGEST_FINAL(name, dgstsize, fin)                               \
41
    static OSSL_FUNC_digest_final_fn name##_internal_final;                       \
42
    static int name##_internal_final(void *ctx, unsigned char *out, size_t *outl, \
43
        size_t outsz)                                                             \
44
304M
    {                                                                             \
45
304M
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
304M
            *outl = dgstsize;                                                     \
47
304M
            return 1;                                                             \
48
304M
        }                                                                         \
49
304M
        return 0;                                                                 \
50
304M
    }
md5_prov.c:md5_internal_final
Line
Count
Source
44
790k
    {                                                                             \
45
790k
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
790k
            *outl = dgstsize;                                                     \
47
790k
            return 1;                                                             \
48
790k
        }                                                                         \
49
790k
        return 0;                                                                 \
50
790k
    }
md5_sha1_prov.c:md5_sha1_internal_final
Line
Count
Source
44
18.0k
    {                                                                             \
45
18.0k
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
18.0k
            *outl = dgstsize;                                                     \
47
18.0k
            return 1;                                                             \
48
18.0k
        }                                                                         \
49
18.0k
        return 0;                                                                 \
50
18.0k
    }
ripemd_prov.c:ripemd160_internal_final
Line
Count
Source
44
3.21M
    {                                                                             \
45
3.21M
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
3.21M
            *outl = dgstsize;                                                     \
47
3.21M
            return 1;                                                             \
48
3.21M
        }                                                                         \
49
3.21M
        return 0;                                                                 \
50
3.21M
    }
sha2_prov.c:sha1_internal_final
Line
Count
Source
44
1.92M
    {                                                                             \
45
1.92M
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
1.92M
            *outl = dgstsize;                                                     \
47
1.92M
            return 1;                                                             \
48
1.92M
        }                                                                         \
49
1.92M
        return 0;                                                                 \
50
1.92M
    }
sha2_prov.c:sha224_internal_final
Line
Count
Source
44
856k
    {                                                                             \
45
856k
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
856k
            *outl = dgstsize;                                                     \
47
856k
            return 1;                                                             \
48
856k
        }                                                                         \
49
856k
        return 0;                                                                 \
50
856k
    }
sha2_prov.c:sha256_internal_final
Line
Count
Source
44
287M
    {                                                                             \
45
287M
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
287M
            *outl = dgstsize;                                                     \
47
287M
            return 1;                                                             \
48
287M
        }                                                                         \
49
287M
        return 0;                                                                 \
50
287M
    }
sha2_prov.c:sha384_internal_final
Line
Count
Source
44
2.64M
    {                                                                             \
45
2.64M
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
2.64M
            *outl = dgstsize;                                                     \
47
2.64M
            return 1;                                                             \
48
2.64M
        }                                                                         \
49
2.64M
        return 0;                                                                 \
50
2.64M
    }
sha2_prov.c:sha512_internal_final
Line
Count
Source
44
5.84M
    {                                                                             \
45
5.84M
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
5.84M
            *outl = dgstsize;                                                     \
47
5.84M
            return 1;                                                             \
48
5.84M
        }                                                                         \
49
5.84M
        return 0;                                                                 \
50
5.84M
    }
sha2_prov.c:sha512_224_internal_final
Line
Count
Source
44
589k
    {                                                                             \
45
589k
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
589k
            *outl = dgstsize;                                                     \
47
589k
            return 1;                                                             \
48
589k
        }                                                                         \
49
589k
        return 0;                                                                 \
50
589k
    }
sha2_prov.c:sha512_256_internal_final
Line
Count
Source
44
399k
    {                                                                             \
45
399k
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
399k
            *outl = dgstsize;                                                     \
47
399k
            return 1;                                                             \
48
399k
        }                                                                         \
49
399k
        return 0;                                                                 \
50
399k
    }
sm3_prov.c:sm3_internal_final
Line
Count
Source
44
6.11k
    {                                                                             \
45
6.11k
        if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) {       \
46
6.11k
            *outl = dgstsize;                                                     \
47
6.11k
            return 1;                                                             \
48
6.11k
        }                                                                         \
49
6.11k
        return 0;                                                                 \
50
6.11k
    }
51
52
#define PROV_DISPATCH_FUNC_DIGEST_CONSTRUCT_START(                               \
53
    name, CTX, blksize, dgstsize, flags, upd, fin)                               \
54
    static OSSL_FUNC_digest_newctx_fn name##_newctx;                             \
55
    static OSSL_FUNC_digest_freectx_fn name##_freectx;                           \
56
    static OSSL_FUNC_digest_dupctx_fn name##_dupctx;                             \
57
    static void *name##_newctx(void *prov_ctx)                                   \
58
3.99M
    {                                                                            \
59
3.99M
        CTX *ctx = ossl_prov_is_running() ? OPENSSL_zalloc(sizeof(*ctx)) : NULL; \
60
3.99M
        return ctx;                                                              \
61
3.99M
    }                                                                            \
62
    static void name##_freectx(void *vctx)                                       \
63
12.1M
    {                                                                            \
64
12.1M
        CTX *ctx = (CTX *)vctx;                                                  \
65
12.1M
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
12.1M
    }                                                                            \
blake2_prov.c:blake2s256_freectx
Line
Count
Source
63
3.26k
    {                                                                            \
64
3.26k
        CTX *ctx = (CTX *)vctx;                                                  \
65
3.26k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
3.26k
    }                                                                            \
blake2_prov.c:blake2b512_freectx
Line
Count
Source
63
160k
    {                                                                            \
64
160k
        CTX *ctx = (CTX *)vctx;                                                  \
65
160k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
160k
    }                                                                            \
md5_prov.c:md5_freectx
Line
Count
Source
63
1.65M
    {                                                                            \
64
1.65M
        CTX *ctx = (CTX *)vctx;                                                  \
65
1.65M
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
1.65M
    }                                                                            \
md5_sha1_prov.c:md5_sha1_freectx
Line
Count
Source
63
25.0k
    {                                                                            \
64
25.0k
        CTX *ctx = (CTX *)vctx;                                                  \
65
25.0k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
25.0k
    }                                                                            \
null_prov.c:nullmd_freectx
Line
Count
Source
63
103
    {                                                                            \
64
103
        CTX *ctx = (CTX *)vctx;                                                  \
65
103
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
103
    }                                                                            \
ripemd_prov.c:ripemd160_freectx
Line
Count
Source
63
298k
    {                                                                            \
64
298k
        CTX *ctx = (CTX *)vctx;                                                  \
65
298k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
298k
    }                                                                            \
sha2_prov.c:sha1_freectx
Line
Count
Source
63
2.97M
    {                                                                            \
64
2.97M
        CTX *ctx = (CTX *)vctx;                                                  \
65
2.97M
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
2.97M
    }                                                                            \
sha2_prov.c:sha224_freectx
Line
Count
Source
63
56.8k
    {                                                                            \
64
56.8k
        CTX *ctx = (CTX *)vctx;                                                  \
65
56.8k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
56.8k
    }                                                                            \
sha2_prov.c:sha256_freectx
Line
Count
Source
63
3.47M
    {                                                                            \
64
3.47M
        CTX *ctx = (CTX *)vctx;                                                  \
65
3.47M
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
3.47M
    }                                                                            \
sha2_prov.c:sha384_freectx
Line
Count
Source
63
3.31M
    {                                                                            \
64
3.31M
        CTX *ctx = (CTX *)vctx;                                                  \
65
3.31M
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
3.31M
    }                                                                            \
sha2_prov.c:sha512_freectx
Line
Count
Source
63
121k
    {                                                                            \
64
121k
        CTX *ctx = (CTX *)vctx;                                                  \
65
121k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
121k
    }                                                                            \
sha2_prov.c:sha512_224_freectx
Line
Count
Source
63
7.93k
    {                                                                            \
64
7.93k
        CTX *ctx = (CTX *)vctx;                                                  \
65
7.93k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
7.93k
    }                                                                            \
sha2_prov.c:sha512_256_freectx
Line
Count
Source
63
10.3k
    {                                                                            \
64
10.3k
        CTX *ctx = (CTX *)vctx;                                                  \
65
10.3k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
10.3k
    }                                                                            \
sm3_prov.c:sm3_freectx
Line
Count
Source
63
4.24k
    {                                                                            \
64
4.24k
        CTX *ctx = (CTX *)vctx;                                                  \
65
4.24k
        OPENSSL_clear_free(ctx, sizeof(*ctx));                                   \
66
4.24k
    }                                                                            \
67
    static void *name##_dupctx(void *ctx)                                        \
68
7.36M
    {                                                                            \
69
7.36M
        CTX *in = (CTX *)ctx;                                                    \
70
7.36M
        CTX *ret = ossl_prov_is_running() ? OPENSSL_malloc(sizeof(*ret)) : NULL; \
71
7.36M
        if (ret != NULL)                                                         \
72
7.36M
            *ret = *in;                                                          \
73
7.36M
        return ret;                                                              \
74
7.36M
    }                                                                            \
75
    PROV_FUNC_DIGEST_FINAL(name, dgstsize, fin)                                  \
76
    PROV_FUNC_DIGEST_GET_PARAM(name, blksize, dgstsize, flags)                   \
77
    const OSSL_DISPATCH ossl_##name##_functions[] = {                            \
78
        { OSSL_FUNC_DIGEST_NEWCTX, (void (*)(void))name##_newctx },              \
79
        { OSSL_FUNC_DIGEST_UPDATE, (void (*)(void))upd },                        \
80
        { OSSL_FUNC_DIGEST_FINAL, (void (*)(void))name##_internal_final },       \
81
        { OSSL_FUNC_DIGEST_FREECTX, (void (*)(void))name##_freectx },            \
82
        { OSSL_FUNC_DIGEST_DUPCTX, (void (*)(void))name##_dupctx },              \
83
        PROV_DISPATCH_FUNC_DIGEST_GET_PARAMS(name)
84
85
#define PROV_DISPATCH_FUNC_DIGEST_CONSTRUCT_END \
86
    {                                           \
87
        0, NULL                                 \
88
    }                                           \
89
    }                                           \
90
    ;
91
92
#define IMPLEMENT_digest_functions(                                                \
93
    name, CTX, blksize, dgstsize, flags, init, upd, fin)                           \
94
    static OSSL_FUNC_digest_init_fn name##_internal_init;                          \
95
    static int name##_internal_init(void *ctx,                                     \
96
        ossl_unused const OSSL_PARAM params[])                                     \
97
299M
    {                                                                              \
98
299M
        return ossl_prov_is_running() && init(ctx);                                \
99
299M
    }                                                                              \
md5_prov.c:md5_internal_init
Line
Count
Source
97
122k
    {                                                                              \
98
122k
        return ossl_prov_is_running() && init(ctx);                                \
99
122k
    }                                                                              \
null_prov.c:nullmd_internal_init
Line
Count
Source
97
185
    {                                                                              \
98
185
        return ossl_prov_is_running() && init(ctx);                                \
99
185
    }                                                                              \
ripemd_prov.c:ripemd160_internal_init
Line
Count
Source
97
3.21M
    {                                                                              \
98
3.21M
        return ossl_prov_is_running() && init(ctx);                                \
99
3.21M
    }                                                                              \
sha2_prov.c:sha224_internal_init
Line
Count
Source
97
496k
    {                                                                              \
98
496k
        return ossl_prov_is_running() && init(ctx);                                \
99
496k
    }                                                                              \
sha2_prov.c:sha256_internal_init
Line
Count
Source
97
286M
    {                                                                              \
98
286M
        return ossl_prov_is_running() && init(ctx);                                \
99
286M
    }                                                                              \
sha2_prov.c:sha384_internal_init
Line
Count
Source
97
2.48M
    {                                                                              \
98
2.48M
        return ossl_prov_is_running() && init(ctx);                                \
99
2.48M
    }                                                                              \
sha2_prov.c:sha512_internal_init
Line
Count
Source
97
5.51M
    {                                                                              \
98
5.51M
        return ossl_prov_is_running() && init(ctx);                                \
99
5.51M
    }                                                                              \
sha2_prov.c:sha512_224_internal_init
Line
Count
Source
97
445k
    {                                                                              \
98
445k
        return ossl_prov_is_running() && init(ctx);                                \
99
445k
    }                                                                              \
sha2_prov.c:sha512_256_internal_init
Line
Count
Source
97
349k
    {                                                                              \
98
349k
        return ossl_prov_is_running() && init(ctx);                                \
99
349k
    }                                                                              \
sm3_prov.c:sm3_internal_init
Line
Count
Source
97
6.26k
    {                                                                              \
98
6.26k
        return ossl_prov_is_running() && init(ctx);                                \
99
6.26k
    }                                                                              \
100
    PROV_DISPATCH_FUNC_DIGEST_CONSTRUCT_START(name, CTX, blksize, dgstsize, flags, \
101
        upd, fin),                                                                 \
102
        { OSSL_FUNC_DIGEST_INIT, (void (*)(void))name##_internal_init },           \
103
        PROV_DISPATCH_FUNC_DIGEST_CONSTRUCT_END
104
105
#define IMPLEMENT_digest_functions_with_settable_ctx(                                  \
106
    name, CTX, blksize, dgstsize, flags, init, upd, fin,                               \
107
    settable_ctx_params, set_ctx_params)                                               \
108
    static OSSL_FUNC_digest_init_fn name##_internal_init;                              \
109
    static int name##_internal_init(void *ctx, const OSSL_PARAM params[])              \
110
1.28M
    {                                                                                  \
111
1.28M
        return ossl_prov_is_running()                                                  \
112
1.28M
            && init(ctx)                                                               \
113
1.28M
            && set_ctx_params(ctx, params);                                            \
114
1.28M
    }                                                                                  \
md5_sha1_prov.c:md5_sha1_internal_init
Line
Count
Source
110
21.3k
    {                                                                                  \
111
21.3k
        return ossl_prov_is_running()                                                  \
112
21.3k
            && init(ctx)                                                               \
113
21.3k
            && set_ctx_params(ctx, params);                                            \
114
21.3k
    }                                                                                  \
sha2_prov.c:sha1_internal_init
Line
Count
Source
110
1.26M
    {                                                                                  \
111
1.26M
        return ossl_prov_is_running()                                                  \
112
1.26M
            && init(ctx)                                                               \
113
1.26M
            && set_ctx_params(ctx, params);                                            \
114
1.26M
    }                                                                                  \
115
    PROV_DISPATCH_FUNC_DIGEST_CONSTRUCT_START(name, CTX, blksize, dgstsize, flags,     \
116
        upd, fin),                                                                     \
117
        { OSSL_FUNC_DIGEST_INIT, (void (*)(void))name##_internal_init },               \
118
        { OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS, (void (*)(void))settable_ctx_params }, \
119
        { OSSL_FUNC_DIGEST_SET_CTX_PARAMS, (void (*)(void))set_ctx_params },           \
120
        PROV_DISPATCH_FUNC_DIGEST_CONSTRUCT_END
121
122
const OSSL_PARAM *ossl_digest_default_gettable_params(void *provctx);
123
int ossl_digest_default_get_params(OSSL_PARAM params[], size_t blksz,
124
    size_t paramsz, unsigned long flags);
125
126
#ifdef __cplusplus
127
}
128
#endif
129
130
#endif /* OSSL_PROVIDERS_DIGESTCOMMON_H */