Skip to content

Commit faed271

Browse files
committed
Extract code from critical section
1 parent 8ad6d02 commit faed271

File tree

1 file changed

+134
-86
lines changed

1 file changed

+134
-86
lines changed

source/evp_hash.c

Lines changed: 134 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -45,71 +45,96 @@ typedef enum {
4545
} hash_algorithm_type;
4646

4747
static unsigned char data[DATA_SIZE];
48-
static int deprecated_api = 0;
4948
static int update_times = 1;
50-
static int hash_algorithm = -1;
49+
static const EVP_MD *evp_md = NULL;
50+
static int (*hash_func_deprecated)(void);
5151

52-
int hash_deprecated()
52+
int hash_sha1_deprecated()
5353
{
5454
int i;
5555
SHA_CTX sha_ctx;
56-
SHA256_CTX sha256_ctx;
57-
SHA512_CTX sha512_ctx;
5856
unsigned char md[EVP_MAX_MD_SIZE];
5957

60-
switch (hash_algorithm) {
61-
case SHA1_ALG:
62-
if (!SHA1_Init(&sha_ctx))
63-
return 0;
64-
for (i = 0; i < update_times; i++)
65-
if (!SHA1_Update(&sha_ctx, data, sizeof(data)))
66-
return 0;
67-
if (!SHA1_Final(md, &sha_ctx))
68-
return 0;
69-
break;
70-
case SHA224_ALG:
71-
if (!SHA224_Init(&sha256_ctx))
72-
return 0;
73-
for (i = 0; i < update_times; i++)
74-
if (!SHA224_Update(&sha256_ctx, data, sizeof(data)))
75-
return 0;
76-
if (!SHA224_Final(md, &sha256_ctx))
77-
return 0;
78-
break;
79-
case SHA256_ALG:
80-
if (!SHA256_Init(&sha256_ctx))
81-
return 0;
82-
for (i = 0; i < update_times; i++)
83-
if (!SHA256_Update(&sha256_ctx, data, sizeof(data)))
84-
return 0;
85-
if (!SHA256_Final(md, &sha256_ctx))
58+
if (!SHA1_Init(&sha_ctx))
59+
return 0;
60+
for (i = 0; i < update_times; i++)
61+
if (!SHA1_Update(&sha_ctx, data, sizeof(data)))
8662
return 0;
87-
break;
88-
case SHA384_ALG:
89-
if (!SHA384_Init(&sha512_ctx))
63+
if (!SHA1_Final(md, &sha_ctx))
64+
return 0;
65+
66+
return 1;
67+
}
68+
69+
int hash_sha224_deprecated()
70+
{
71+
int i;
72+
SHA256_CTX sha256_ctx;
73+
unsigned char md[EVP_MAX_MD_SIZE];
74+
75+
if (!SHA224_Init(&sha256_ctx))
76+
return 0;
77+
for (i = 0; i < update_times; i++)
78+
if (!SHA224_Update(&sha256_ctx, data, sizeof(data)))
9079
return 0;
91-
for (i = 0; i < update_times; i++)
92-
if (!SHA384_Update(&sha512_ctx, data, sizeof(data)))
93-
return 0;
94-
if (!SHA384_Final(md, &sha512_ctx))
80+
if (!SHA224_Final(md, &sha256_ctx))
81+
return 0;
82+
83+
return 1;
84+
}
85+
86+
int hash_sha256_deprecated()
87+
{
88+
int i;
89+
SHA256_CTX sha256_ctx;
90+
unsigned char md[EVP_MAX_MD_SIZE];
91+
92+
if (!SHA256_Init(&sha256_ctx))
93+
return 0;
94+
for (i = 0; i < update_times; i++)
95+
if (!SHA256_Update(&sha256_ctx, data, sizeof(data)))
9596
return 0;
96-
break;
97-
case SHA512_ALG:
98-
if (!SHA512_Init(&sha512_ctx))
97+
if (!SHA256_Final(md, &sha256_ctx))
98+
return 0;
99+
100+
return 1;
101+
}
102+
103+
int hash_sha384_deprecated()
104+
{
105+
int i;
106+
SHA512_CTX sha512_ctx;
107+
unsigned char md[EVP_MAX_MD_SIZE];
108+
109+
if (!SHA384_Init(&sha512_ctx))
110+
return 0;
111+
for (i = 0; i < update_times; i++)
112+
if (!SHA384_Update(&sha512_ctx, data, sizeof(data)))
99113
return 0;
100-
for (i = 0; i < update_times; i++)
101-
if (!SHA512_Update(&sha512_ctx, data, sizeof(data)))
102-
return 0;
103-
if (!SHA512_Final(md, &sha512_ctx))
114+
if (!SHA384_Final(md, &sha512_ctx))
115+
return 0;
116+
117+
return 1;
118+
}
119+
120+
int hash_sha512_deprecated()
121+
{
122+
int i;
123+
SHA512_CTX sha512_ctx;
124+
unsigned char md[EVP_MAX_MD_SIZE];
125+
126+
if (!SHA512_Init(&sha512_ctx))
127+
return 0;
128+
for (i = 0; i < update_times; i++)
129+
if (!SHA512_Update(&sha512_ctx, data, sizeof(data)))
104130
return 0;
105-
break;
106-
default:
131+
if (!SHA512_Final(md, &sha512_ctx))
107132
return 0;
108-
}
109133

110134
return 1;
111135
}
112136

137+
113138
int hash_evp(EVP_MD_CTX *mctx, const EVP_MD *evp_md)
114139
{
115140
int i;
@@ -128,50 +153,34 @@ int hash_evp(EVP_MD_CTX *mctx, const EVP_MD *evp_md)
128153
return 1;
129154
}
130155

131-
void do_hash(size_t num)
156+
void do_hash_deprecated(size_t num)
132157
{
133158
OSSL_TIME time;
134-
EVP_MD_CTX *mctx = NULL;
135-
const EVP_MD *evp_md = NULL;
136-
137-
counts[num] = 0;
138159

139-
if (!deprecated_api) {
140-
switch (hash_algorithm) {
141-
case SHA1_ALG:
142-
evp_md = EVP_sha1();
143-
break;
144-
case SHA224_ALG:
145-
evp_md = EVP_sha224();
146-
break;
147-
case SHA256_ALG:
148-
evp_md = EVP_sha256();
149-
break;
150-
case SHA384_ALG:
151-
evp_md = EVP_sha384();
152-
break;
153-
case SHA512_ALG:
154-
evp_md = EVP_sha512();
155-
break;
156-
default:
160+
do {
161+
if (!hash_func_deprecated()) {
157162
err = 1;
158163
return;
159164
}
160165

161-
if ((mctx = EVP_MD_CTX_new()) == NULL)
162-
return;
163-
}
166+
counts[num]++;
167+
time = ossl_time_now();
168+
} while (time.t < max_time.t);
169+
}
170+
171+
void do_hash_evp(size_t num)
172+
{
173+
OSSL_TIME time;
174+
EVP_MD_CTX *mctx = EVP_MD_CTX_new();
175+
176+
if (mctx == NULL)
177+
return;
164178

165179
do {
166-
if (deprecated_api) {
167-
if (!hash_deprecated())
168-
err = 1;
169-
} else if (!hash_evp(mctx, evp_md)) {
180+
if (!hash_evp(mctx, evp_md)) {
170181
err = 1;
171-
}
172-
173-
if (err)
174182
goto err;
183+
}
175184

176185
counts[num]++;
177186
time = ossl_time_now();
@@ -197,7 +206,7 @@ int main(int argc, char *argv[])
197206
OSSL_TIME duration;
198207
size_t total_count = 0;
199208
double av;
200-
int terse = 0;
209+
int terse = 0, deprecated_api = 0, hash_algorithm = -1;
201210
int j, opt, rc = EXIT_FAILURE;
202211

203212
while ((opt = getopt(argc, argv, "htx")) != -1) {
@@ -258,15 +267,54 @@ int main(int argc, char *argv[])
258267

259268
max_time = ossl_time_add(ossl_time_now(), ossl_seconds2time(RUN_TIME));
260269

261-
counts = OPENSSL_malloc(sizeof(size_t) * threadcount);
270+
counts = OPENSSL_zalloc(sizeof(size_t) * threadcount);
262271
if (counts == NULL) {
263272
fprintf(stderr, "Failed to create counts array\n");
264273
goto out;
265274
}
266275

267-
if (!perflib_run_multi_thread_test(do_hash, threadcount, &duration)) {
268-
fprintf(stderr, "Failed to run the test\n");
269-
goto out;
276+
if (deprecated_api) {
277+
switch (hash_algorithm) {
278+
case SHA1_ALG:
279+
hash_func_deprecated = hash_sha1_deprecated;
280+
break;
281+
case SHA224_ALG:
282+
hash_func_deprecated = hash_sha224_deprecated;
283+
break;
284+
case SHA256_ALG:
285+
hash_func_deprecated = hash_sha256_deprecated;
286+
break;
287+
case SHA384_ALG:
288+
hash_func_deprecated = hash_sha384_deprecated;
289+
break;
290+
case SHA512_ALG:
291+
hash_func_deprecated = hash_sha512_deprecated;
292+
break;
293+
}
294+
err = !perflib_run_multi_thread_test(do_hash_deprecated, threadcount, &duration) || err;
295+
} else {
296+
switch (hash_algorithm) {
297+
case SHA1_ALG:
298+
evp_md = EVP_sha1();
299+
break;
300+
case SHA224_ALG:
301+
evp_md = EVP_sha224();
302+
break;
303+
case SHA256_ALG:
304+
evp_md = EVP_sha256();
305+
break;
306+
case SHA384_ALG:
307+
evp_md = EVP_sha384();
308+
break;
309+
case SHA512_ALG:
310+
evp_md = EVP_sha512();
311+
break;
312+
default:
313+
err = 1;
314+
goto out;
315+
}
316+
317+
err = !perflib_run_multi_thread_test(do_hash_evp, threadcount, &duration) || err;
270318
}
271319

272320
if (err) {

0 commit comments

Comments
 (0)