Skip to content

Commit fdcac2d

Browse files
ebiggersherbertx
authored andcommitted
crypto: x86/sha256 - implement ->digest for sha256
Implement a ->digest function for sha256-ssse3, sha256-avx, sha256-avx2, and sha256-ni. This improves the performance of crypto_shash_digest() with these algorithms by reducing the number of indirect calls that are made. For now, don't bother with this for sha224, since sha224 is rarely used. Signed-off-by: Eric Biggers <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 1efcbf0 commit fdcac2d

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

arch/x86/crypto/sha256_ssse3_glue.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,20 @@ static int sha256_ssse3_final(struct shash_desc *desc, u8 *out)
107107
return sha256_ssse3_finup(desc, NULL, 0, out);
108108
}
109109

110+
static int sha256_ssse3_digest(struct shash_desc *desc, const u8 *data,
111+
unsigned int len, u8 *out)
112+
{
113+
return sha256_base_init(desc) ?:
114+
sha256_ssse3_finup(desc, data, len, out);
115+
}
116+
110117
static struct shash_alg sha256_ssse3_algs[] = { {
111118
.digestsize = SHA256_DIGEST_SIZE,
112119
.init = sha256_base_init,
113120
.update = sha256_ssse3_update,
114121
.final = sha256_ssse3_final,
115122
.finup = sha256_ssse3_finup,
123+
.digest = sha256_ssse3_digest,
116124
.descsize = sizeof(struct sha256_state),
117125
.base = {
118126
.cra_name = "sha256",
@@ -172,12 +180,20 @@ static int sha256_avx_final(struct shash_desc *desc, u8 *out)
172180
return sha256_avx_finup(desc, NULL, 0, out);
173181
}
174182

183+
static int sha256_avx_digest(struct shash_desc *desc, const u8 *data,
184+
unsigned int len, u8 *out)
185+
{
186+
return sha256_base_init(desc) ?:
187+
sha256_avx_finup(desc, data, len, out);
188+
}
189+
175190
static struct shash_alg sha256_avx_algs[] = { {
176191
.digestsize = SHA256_DIGEST_SIZE,
177192
.init = sha256_base_init,
178193
.update = sha256_avx_update,
179194
.final = sha256_avx_final,
180195
.finup = sha256_avx_finup,
196+
.digest = sha256_avx_digest,
181197
.descsize = sizeof(struct sha256_state),
182198
.base = {
183199
.cra_name = "sha256",
@@ -248,12 +264,20 @@ static int sha256_avx2_final(struct shash_desc *desc, u8 *out)
248264
return sha256_avx2_finup(desc, NULL, 0, out);
249265
}
250266

267+
static int sha256_avx2_digest(struct shash_desc *desc, const u8 *data,
268+
unsigned int len, u8 *out)
269+
{
270+
return sha256_base_init(desc) ?:
271+
sha256_avx2_finup(desc, data, len, out);
272+
}
273+
251274
static struct shash_alg sha256_avx2_algs[] = { {
252275
.digestsize = SHA256_DIGEST_SIZE,
253276
.init = sha256_base_init,
254277
.update = sha256_avx2_update,
255278
.final = sha256_avx2_final,
256279
.finup = sha256_avx2_finup,
280+
.digest = sha256_avx2_digest,
257281
.descsize = sizeof(struct sha256_state),
258282
.base = {
259283
.cra_name = "sha256",
@@ -323,12 +347,20 @@ static int sha256_ni_final(struct shash_desc *desc, u8 *out)
323347
return sha256_ni_finup(desc, NULL, 0, out);
324348
}
325349

350+
static int sha256_ni_digest(struct shash_desc *desc, const u8 *data,
351+
unsigned int len, u8 *out)
352+
{
353+
return sha256_base_init(desc) ?:
354+
sha256_ni_finup(desc, data, len, out);
355+
}
356+
326357
static struct shash_alg sha256_ni_algs[] = { {
327358
.digestsize = SHA256_DIGEST_SIZE,
328359
.init = sha256_base_init,
329360
.update = sha256_ni_update,
330361
.final = sha256_ni_final,
331362
.finup = sha256_ni_finup,
363+
.digest = sha256_ni_digest,
332364
.descsize = sizeof(struct sha256_state),
333365
.base = {
334366
.cra_name = "sha256",

0 commit comments

Comments
 (0)