/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 | 2.00k | { \ |
30 | 2.00k | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ |
31 | 2.00k | } blake2_prov.c:blake2s256_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
blake2_prov.c:blake2b512_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
md5_prov.c:md5_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
md5_sha1_prov.c:md5_sha1_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
null_prov.c:nullmd_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
ripemd_prov.c:ripemd160_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha2_prov.c:sha1_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha2_prov.c:sha224_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha2_prov.c:sha256_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha2_prov.c:sha384_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha2_prov.c:sha512_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha2_prov.c:sha512_224_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha2_prov.c:sha512_256_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:sha3_224_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:sha3_256_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:sha3_384_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:sha3_512_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:shake_128_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:shake_256_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:keccak_kmac_128_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sha3_prov.c:keccak_kmac_256_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
sm3_prov.c:sm3_get_params Line | Count | Source | 29 | 91 | { \ | 30 | 91 | return ossl_digest_default_get_params(params, blksize, dgstsize, flags); \ | 31 | 91 | } |
|
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 | 788M | { \ |
45 | 788M | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ |
46 | 788M | *outl = dgstsize; \ |
47 | 788M | return 1; \ |
48 | 788M | } \ |
49 | 788M | return 0; \ |
50 | 788M | } md5_prov.c:md5_internal_final Line | Count | Source | 44 | 609k | { \ | 45 | 609k | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 609k | *outl = dgstsize; \ | 47 | 609k | return 1; \ | 48 | 609k | } \ | 49 | 609k | return 0; \ | 50 | 609k | } |
md5_sha1_prov.c:md5_sha1_internal_final Line | Count | Source | 44 | 18.6k | { \ | 45 | 18.6k | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 18.6k | *outl = dgstsize; \ | 47 | 18.6k | return 1; \ | 48 | 18.6k | } \ | 49 | 18.6k | return 0; \ | 50 | 18.6k | } |
ripemd_prov.c:ripemd160_internal_final Line | Count | Source | 44 | 1.99M | { \ | 45 | 1.99M | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 1.99M | *outl = dgstsize; \ | 47 | 1.99M | return 1; \ | 48 | 1.99M | } \ | 49 | 1.99M | return 0; \ | 50 | 1.99M | } |
sha2_prov.c:sha1_internal_final Line | Count | Source | 44 | 1.67M | { \ | 45 | 1.67M | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 1.67M | *outl = dgstsize; \ | 47 | 1.67M | return 1; \ | 48 | 1.67M | } \ | 49 | 1.67M | return 0; \ | 50 | 1.67M | } |
sha2_prov.c:sha224_internal_final Line | Count | Source | 44 | 268k | { \ | 45 | 268k | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 268k | *outl = dgstsize; \ | 47 | 268k | return 1; \ | 48 | 268k | } \ | 49 | 268k | return 0; \ | 50 | 268k | } |
sha2_prov.c:sha256_internal_final Line | Count | Source | 44 | 742M | { \ | 45 | 742M | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 742M | *outl = dgstsize; \ | 47 | 742M | return 1; \ | 48 | 742M | } \ | 49 | 742M | return 0; \ | 50 | 742M | } |
sha2_prov.c:sha384_internal_final Line | Count | Source | 44 | 2.21M | { \ | 45 | 2.21M | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 2.21M | *outl = dgstsize; \ | 47 | 2.21M | return 1; \ | 48 | 2.21M | } \ | 49 | 2.21M | return 0; \ | 50 | 2.21M | } |
sha2_prov.c:sha512_internal_final Line | Count | Source | 44 | 38.4M | { \ | 45 | 38.4M | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 38.4M | *outl = dgstsize; \ | 47 | 38.4M | return 1; \ | 48 | 38.4M | } \ | 49 | 38.4M | return 0; \ | 50 | 38.4M | } |
sha2_prov.c:sha512_224_internal_final Line | Count | Source | 44 | 332k | { \ | 45 | 332k | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 332k | *outl = dgstsize; \ | 47 | 332k | return 1; \ | 48 | 332k | } \ | 49 | 332k | return 0; \ | 50 | 332k | } |
sha2_prov.c:sha512_256_internal_final Line | Count | Source | 44 | 123k | { \ | 45 | 123k | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 123k | *outl = dgstsize; \ | 47 | 123k | return 1; \ | 48 | 123k | } \ | 49 | 123k | return 0; \ | 50 | 123k | } |
sm3_prov.c:sm3_internal_final Line | Count | Source | 44 | 6.79k | { \ | 45 | 6.79k | if (ossl_prov_is_running() && outsz >= dgstsize && fin(out, ctx)) { \ | 46 | 6.79k | *outl = dgstsize; \ | 47 | 6.79k | return 1; \ | 48 | 6.79k | } \ | 49 | 6.79k | return 0; \ | 50 | 6.79k | } |
|
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 | 4.65M | { \ |
59 | 4.65M | CTX *ctx = ossl_prov_is_running() ? OPENSSL_zalloc(sizeof(*ctx)) : NULL; \ |
60 | 4.65M | return ctx; \ |
61 | 4.65M | } \ |
62 | | static void name##_freectx(void *vctx) \ |
63 | 11.5M | { \ |
64 | 11.5M | CTX *ctx = (CTX *)vctx; \ |
65 | 11.5M | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ |
66 | 11.5M | } \ blake2_prov.c:blake2s256_freectx Line | Count | Source | 63 | 2.44k | { \ | 64 | 2.44k | CTX *ctx = (CTX *)vctx; \ | 65 | 2.44k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 2.44k | } \ |
blake2_prov.c:blake2b512_freectx Line | Count | Source | 63 | 153k | { \ | 64 | 153k | CTX *ctx = (CTX *)vctx; \ | 65 | 153k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 153k | } \ |
Line | Count | Source | 63 | 1.40M | { \ | 64 | 1.40M | CTX *ctx = (CTX *)vctx; \ | 65 | 1.40M | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 1.40M | } \ |
md5_sha1_prov.c:md5_sha1_freectx Line | Count | Source | 63 | 23.4k | { \ | 64 | 23.4k | CTX *ctx = (CTX *)vctx; \ | 65 | 23.4k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 23.4k | } \ |
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 | 300k | { \ | 64 | 300k | CTX *ctx = (CTX *)vctx; \ | 65 | 300k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 300k | } \ |
Line | Count | Source | 63 | 2.59M | { \ | 64 | 2.59M | CTX *ctx = (CTX *)vctx; \ | 65 | 2.59M | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 2.59M | } \ |
sha2_prov.c:sha224_freectx Line | Count | Source | 63 | 56.3k | { \ | 64 | 56.3k | CTX *ctx = (CTX *)vctx; \ | 65 | 56.3k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 56.3k | } \ |
sha2_prov.c:sha256_freectx Line | Count | Source | 63 | 3.63M | { \ | 64 | 3.63M | CTX *ctx = (CTX *)vctx; \ | 65 | 3.63M | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 3.63M | } \ |
sha2_prov.c:sha384_freectx Line | Count | Source | 63 | 3.27M | { \ | 64 | 3.27M | CTX *ctx = (CTX *)vctx; \ | 65 | 3.27M | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 3.27M | } \ |
sha2_prov.c:sha512_freectx Line | Count | Source | 63 | 119k | { \ | 64 | 119k | CTX *ctx = (CTX *)vctx; \ | 65 | 119k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 119k | } \ |
sha2_prov.c:sha512_224_freectx Line | Count | Source | 63 | 5.98k | { \ | 64 | 5.98k | CTX *ctx = (CTX *)vctx; \ | 65 | 5.98k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 5.98k | } \ |
sha2_prov.c:sha512_256_freectx Line | Count | Source | 63 | 9.66k | { \ | 64 | 9.66k | CTX *ctx = (CTX *)vctx; \ | 65 | 9.66k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 9.66k | } \ |
Line | Count | Source | 63 | 4.38k | { \ | 64 | 4.38k | CTX *ctx = (CTX *)vctx; \ | 65 | 4.38k | OPENSSL_clear_free(ctx, sizeof(*ctx)); \ | 66 | 4.38k | } \ |
|
67 | | static void *name##_dupctx(void *ctx) \ |
68 | 6.92M | { \ |
69 | 6.92M | CTX *in = (CTX *)ctx; \ |
70 | 6.92M | CTX *ret = ossl_prov_is_running() ? OPENSSL_malloc(sizeof(*ret)) : NULL; \ |
71 | 6.92M | if (ret != NULL) \ |
72 | 6.92M | *ret = *in; \ |
73 | 6.92M | return ret; \ |
74 | 6.92M | } \ |
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 | 785M | { \ |
98 | 785M | return ossl_prov_is_running() && init(ctx); \ |
99 | 785M | } \ md5_prov.c:md5_internal_init Line | Count | Source | 97 | 118k | { \ | 98 | 118k | return ossl_prov_is_running() && init(ctx); \ | 99 | 118k | } \ |
null_prov.c:nullmd_internal_init Line | Count | Source | 97 | 178 | { \ | 98 | 178 | return ossl_prov_is_running() && init(ctx); \ | 99 | 178 | } \ |
ripemd_prov.c:ripemd160_internal_init Line | Count | Source | 97 | 1.99M | { \ | 98 | 1.99M | return ossl_prov_is_running() && init(ctx); \ | 99 | 1.99M | } \ |
sha2_prov.c:sha224_internal_init Line | Count | Source | 97 | 269k | { \ | 98 | 269k | return ossl_prov_is_running() && init(ctx); \ | 99 | 269k | } \ |
sha2_prov.c:sha256_internal_init Line | Count | Source | 97 | 742M | { \ | 98 | 742M | return ossl_prov_is_running() && init(ctx); \ | 99 | 742M | } \ |
sha2_prov.c:sha384_internal_init Line | Count | Source | 97 | 2.09M | { \ | 98 | 2.09M | return ossl_prov_is_running() && init(ctx); \ | 99 | 2.09M | } \ |
sha2_prov.c:sha512_internal_init Line | Count | Source | 97 | 38.4M | { \ | 98 | 38.4M | return ossl_prov_is_running() && init(ctx); \ | 99 | 38.4M | } \ |
sha2_prov.c:sha512_224_internal_init Line | Count | Source | 97 | 332k | { \ | 98 | 332k | return ossl_prov_is_running() && init(ctx); \ | 99 | 332k | } \ |
sha2_prov.c:sha512_256_internal_init Line | Count | Source | 97 | 123k | { \ | 98 | 123k | return ossl_prov_is_running() && init(ctx); \ | 99 | 123k | } \ |
sm3_prov.c:sm3_internal_init Line | Count | Source | 97 | 6.96k | { \ | 98 | 6.96k | return ossl_prov_is_running() && init(ctx); \ | 99 | 6.96k | } \ |
|
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.32M | { \ |
111 | 1.32M | return ossl_prov_is_running() \ |
112 | 1.32M | && init(ctx) \ |
113 | 1.32M | && set_ctx_params(ctx, params); \ |
114 | 1.32M | } \ md5_sha1_prov.c:md5_sha1_internal_init Line | Count | Source | 110 | 21.7k | { \ | 111 | 21.7k | return ossl_prov_is_running() \ | 112 | 21.7k | && init(ctx) \ | 113 | 21.7k | && set_ctx_params(ctx, params); \ | 114 | 21.7k | } \ |
sha2_prov.c:sha1_internal_init Line | Count | Source | 110 | 1.29M | { \ | 111 | 1.29M | return ossl_prov_is_running() \ | 112 | 1.29M | && init(ctx) \ | 113 | 1.29M | && set_ctx_params(ctx, params); \ | 114 | 1.29M | } \ |
|
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 */ |