Skip to contentSkip to conversation

crypto: poly1305 - get rid of cra_alignmask

PATCH In review Eric Biggers 2 participants 5 messages Dec 29, 2017 – Jan 5, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover crypto: poly1305 - get rid of cra_alignmask

This series gets rid of the cra_alignmask set on poly1305-generic and poly1305-simd, since it was only actually used when outputting the final digest. By removing the alignmask, the crypto API will no longer need to waste time aligning the buffers.

Eric Biggers (3):
crypto: poly1305 - use unaligned access macros to output digest
crypto: poly1305 - remove cra_alignmask
crypto: x86/poly1305 - remove cra_alignmask

 arch/x86/crypto/poly1305_glue.c |  1 -
 crypto/poly1305_generic.c       | 10 ++++------
 2 files changed, 4 insertions(+), 7 deletions(-)
Signature · 1 line
2.15.1
#1 lore raw

PATCH 1/3 crypto: poly1305 - use unaligned access macros to output digest

From: Eric Biggers <[email protected]>

Currently the only part of poly1305-generic which is assuming special alignment is the part where the final digest is written. Switch this over to the unaligned access macros so that we'll be able to remove the cra_alignmask.

---
 crypto/poly1305_generic.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
crypto/poly1305_generic.c +4 -5
index b1c2d57dc734..d752901ba0bc 100644
@@ -210,7 +210,6 @@ EXPORT_SYMBOL_GPL(crypto_poly1305_update);
 int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
 {
 	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
-	__le32 *mac = (__le32 *)dst;
 	u32 h0, h1, h2, h3, h4;
 	u32 g0, g1, g2, g3, g4;
 	u32 mask;
@@ -267,10 +266,10 @@ int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
 	h3 = (h3 >> 18) | (h4 <<  8);
 
 	/* mac = (h + s) % (2^128) */
-	f = (f >> 32) + h0 + dctx->s[0]; mac[0] = cpu_to_le32(f);
-	f = (f >> 32) + h1 + dctx->s[1]; mac[1] = cpu_to_le32(f);
-	f = (f >> 32) + h2 + dctx->s[2]; mac[2] = cpu_to_le32(f);
-	f = (f >> 32) + h3 + dctx->s[3]; mac[3] = cpu_to_le32(f);
+	f = (f >> 32) + h0 + dctx->s[0]; put_unaligned_le32(f, dst +  0);
+	f = (f >> 32) + h1 + dctx->s[1]; put_unaligned_le32(f, dst +  4);
+	f = (f >> 32) + h2 + dctx->s[2]; put_unaligned_le32(f, dst +  8);
+	f = (f >> 32) + h3 + dctx->s[3]; put_unaligned_le32(f, dst + 12);
 
 	return 0;
 }
Signature · 1 line
2.15.1
#2 lore raw

PATCH 2/3 crypto: poly1305 - remove cra_alignmask

In reply to Eric Biggers

From: Eric Biggers <[email protected]>

Now that nothing in poly1305-generic assumes any special alignment, remove the cra_alignmask so that the crypto API does not have to unnecessarily align the buffers.

---
 crypto/poly1305_generic.c | 1 -
 1 file changed, 1 deletion(-)
crypto/poly1305_generic.c +0 -1
index d752901ba0bc..d92617aeb783 100644
@@ -287,7 +287,6 @@ static struct shash_alg poly1305_alg = {
 		.cra_driver_name	= "poly1305-generic",
 		.cra_priority		= 100,
 		.cra_flags		= CRYPTO_ALG_TYPE_SHASH,
-		.cra_alignmask		= sizeof(u32) - 1,
 		.cra_blocksize		= POLY1305_BLOCK_SIZE,
 		.cra_module		= THIS_MODULE,
 	},
Signature · 1 line
2.15.1
#3 lore raw

PATCH 3/3 crypto: x86/poly1305 - remove cra_alignmask

In reply to Eric Biggers

From: Eric Biggers <[email protected]>

crypto_poly1305_final() no longer requires a cra_alignmask, and nothing else in the x86 poly1305-simd implementation does either. So remove the cra_alignmask so that the crypto API does not have to unnecessarily align the buffers.

---
 arch/x86/crypto/poly1305_glue.c | 1 -
 1 file changed, 1 deletion(-)
arch/x86/crypto/poly1305_glue.c +0 -1
index e32142bc071d..f58f89b05a7f 100644
@@ -171,7 +171,6 @@ static struct shash_alg alg = {
 		.cra_driver_name	= "poly1305-simd",
 		.cra_priority		= 300,
 		.cra_flags		= CRYPTO_ALG_TYPE_SHASH,
-		.cra_alignmask		= sizeof(u32) - 1,
 		.cra_blocksize		= POLY1305_BLOCK_SIZE,
 		.cra_module		= THIS_MODULE,
 	},
Signature · 1 line
2.15.1
maintainer
#4 lore raw
In reply to Eric Biggers
Quoted 5 lines · Eric Biggers

This series gets rid of the cra_alignmask set on poly1305-generic and poly1305-simd, since it was only actually used when outputting the final digest. By removing the alignmask, the crypto API will no longer need to waste time aligning the buffers.

Quoted 8 lines

Eric Biggers (3):
crypto: poly1305 - use unaligned access macros to output digest
crypto: poly1305 - remove cra_alignmask
crypto: x86/poly1305 - remove cra_alignmask

 arch/x86/crypto/poly1305_glue.c |  1 -
 crypto/poly1305_generic.c       | 10 ++++------
 2 files changed, 4 insertions(+), 7 deletions(-)

All applied. Thanks.

Signature · 3 lines
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt