diff mbox series

[v3,28/32] crypto: lib/aes - export sbox and inverse sbox

Message ID 20190627102647.2992-29-ard.biesheuvel@linaro.org
State Superseded
Headers show
Series crypto: AES cleanup | expand

Commit Message

Ard Biesheuvel June 27, 2019, 10:26 a.m. UTC
There are a few copies of the AES S-boxes floating around, so export
the ones from the AES library so that we can reuse them in other
modules.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 include/crypto/aes.h | 3 +++
 lib/crypto/aes.c     | 6 ++++++
 2 files changed, 9 insertions(+)

-- 
2.20.1

Comments

Eric Biggers June 27, 2019, 5:52 p.m. UTC | #1
On Thu, Jun 27, 2019 at 12:26:43PM +0200, Ard Biesheuvel wrote:
> There are a few copies of the AES S-boxes floating around, so export

> the ones from the AES library so that we can reuse them in other

> modules.

> 

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

>  include/crypto/aes.h | 3 +++

>  lib/crypto/aes.c     | 6 ++++++

>  2 files changed, 9 insertions(+)

> 

> diff --git a/include/crypto/aes.h b/include/crypto/aes.h

> index df8426fd8051..8e0f4cf948e5 100644

> --- a/include/crypto/aes.h

> +++ b/include/crypto/aes.h

> @@ -67,4 +67,7 @@ void aes_encrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);

>   */

>  void aes_decrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);

>  

> +extern const u8 crypto_aes_sbox[];

> +extern const u8 crypto_aes_inv_sbox[];

> +

>  #endif

> diff --git a/lib/crypto/aes.c b/lib/crypto/aes.c

> index 9928b23e0a8a..467f0c35a0e0 100644

> --- a/lib/crypto/aes.c

> +++ b/lib/crypto/aes.c

> @@ -82,6 +82,12 @@ static volatile const u8 __cacheline_aligned aes_inv_sbox[] = {

>  	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,

>  };

>  

> +extern const u8 crypto_aes_sbox[] __alias(aes_sbox);

> +extern const u8 crypto_aes_inv_sbox[] __alias(aes_inv_sbox);

> +

> +EXPORT_SYMBOL(crypto_aes_sbox);

> +EXPORT_SYMBOL(crypto_aes_inv_sbox);


I got a compiler warning:

In file included from ./include/linux/linkage.h:7,
                 from ./include/linux/kernel.h:8,
                 from ./include/linux/crypto.h:16,
                 from ./include/crypto/aes.h:10,
                 from lib/crypto/aes.c:6:
lib/crypto/aes.c:88:15: warning: array ‘crypto_aes_sbox’ assumed to have one element
 EXPORT_SYMBOL(crypto_aes_sbox);
               ^~~~~~~~~~~~~~~
./include/linux/export.h:79:21: note: in definition of macro ‘___EXPORT_SYMBOL’
  extern typeof(sym) sym;      \
                     ^~~
lib/crypto/aes.c:88:1: note: in expansion of macro ‘EXPORT_SYMBOL’
 EXPORT_SYMBOL(crypto_aes_sbox);
 ^~~~~~~~~~~~~
lib/crypto/aes.c:89:15: warning: array ‘crypto_aes_inv_sbox’ assumed to have one element
 EXPORT_SYMBOL(crypto_aes_inv_sbox);
               ^~~~~~~~~~~~~~~~~~~
./include/linux/export.h:79:21: note: in definition of macro ‘___EXPORT_SYMBOL’
  extern typeof(sym) sym;      \
                     ^~~
lib/crypto/aes.c:89:1: note: in expansion of macro ‘EXPORT_SYMBOL’
 EXPORT_SYMBOL(crypto_aes_inv_sbox);
 ^~~~~~~~~~~~~
Ard Biesheuvel June 28, 2019, 9:45 a.m. UTC | #2
On Thu, 27 Jun 2019 at 19:52, Eric Biggers <ebiggers@kernel.org> wrote:
>

> On Thu, Jun 27, 2019 at 12:26:43PM +0200, Ard Biesheuvel wrote:

> > There are a few copies of the AES S-boxes floating around, so export

> > the ones from the AES library so that we can reuse them in other

> > modules.

> >

> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> > ---

> >  include/crypto/aes.h | 3 +++

> >  lib/crypto/aes.c     | 6 ++++++

> >  2 files changed, 9 insertions(+)

> >

> > diff --git a/include/crypto/aes.h b/include/crypto/aes.h

> > index df8426fd8051..8e0f4cf948e5 100644

> > --- a/include/crypto/aes.h

> > +++ b/include/crypto/aes.h

> > @@ -67,4 +67,7 @@ void aes_encrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);

> >   */

> >  void aes_decrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);

> >

> > +extern const u8 crypto_aes_sbox[];

> > +extern const u8 crypto_aes_inv_sbox[];

> > +

> >  #endif

> > diff --git a/lib/crypto/aes.c b/lib/crypto/aes.c

> > index 9928b23e0a8a..467f0c35a0e0 100644

> > --- a/lib/crypto/aes.c

> > +++ b/lib/crypto/aes.c

> > @@ -82,6 +82,12 @@ static volatile const u8 __cacheline_aligned aes_inv_sbox[] = {

> >       0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,

> >  };

> >

> > +extern const u8 crypto_aes_sbox[] __alias(aes_sbox);

> > +extern const u8 crypto_aes_inv_sbox[] __alias(aes_inv_sbox);

> > +

> > +EXPORT_SYMBOL(crypto_aes_sbox);

> > +EXPORT_SYMBOL(crypto_aes_inv_sbox);

>

> I got a compiler warning:

>

> In file included from ./include/linux/linkage.h:7,

>                  from ./include/linux/kernel.h:8,

>                  from ./include/linux/crypto.h:16,

>                  from ./include/crypto/aes.h:10,

>                  from lib/crypto/aes.c:6:

> lib/crypto/aes.c:88:15: warning: array ‘crypto_aes_sbox’ assumed to have one element

>  EXPORT_SYMBOL(crypto_aes_sbox);

>                ^~~~~~~~~~~~~~~

> ./include/linux/export.h:79:21: note: in definition of macro ‘___EXPORT_SYMBOL’

>   extern typeof(sym) sym;      \

>                      ^~~

> lib/crypto/aes.c:88:1: note: in expansion of macro ‘EXPORT_SYMBOL’

>  EXPORT_SYMBOL(crypto_aes_sbox);

>  ^~~~~~~~~~~~~

> lib/crypto/aes.c:89:15: warning: array ‘crypto_aes_inv_sbox’ assumed to have one element

>  EXPORT_SYMBOL(crypto_aes_inv_sbox);

>                ^~~~~~~~~~~~~~~~~~~

> ./include/linux/export.h:79:21: note: in definition of macro ‘___EXPORT_SYMBOL’

>   extern typeof(sym) sym;      \

>                      ^~~

> lib/crypto/aes.c:89:1: note: in expansion of macro ‘EXPORT_SYMBOL’

>  EXPORT_SYMBOL(crypto_aes_inv_sbox);

>  ^~~~~~~~~~~~~


OK, I'll need to apply the following hunk on top to fix that

diff --git a/lib/crypto/aes.c b/lib/crypto/aes.c
index 467f0c35a0e0..4e100af38c51 100644
--- a/lib/crypto/aes.c
+++ b/lib/crypto/aes.c
@@ -82,8 +82,8 @@ static volatile const u8 __cacheline_aligned
aes_inv_sbox[] = {
        0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
 };

-extern const u8 crypto_aes_sbox[] __alias(aes_sbox);
-extern const u8 crypto_aes_inv_sbox[] __alias(aes_inv_sbox);
+extern const u8 crypto_aes_sbox[256] __alias(aes_sbox);
+extern const u8 crypto_aes_inv_sbox[256] __alias(aes_inv_sbox);

 EXPORT_SYMBOL(crypto_aes_sbox);
 EXPORT_SYMBOL(crypto_aes_inv_sbox);

I'll leave it up to Herbert to decide whether he wants that as a
follow up patch or whether I should respin and resend (assuming there
are no other reasons to do so)
diff mbox series

Patch

diff --git a/include/crypto/aes.h b/include/crypto/aes.h
index df8426fd8051..8e0f4cf948e5 100644
--- a/include/crypto/aes.h
+++ b/include/crypto/aes.h
@@ -67,4 +67,7 @@  void aes_encrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);
  */
 void aes_decrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);
 
+extern const u8 crypto_aes_sbox[];
+extern const u8 crypto_aes_inv_sbox[];
+
 #endif
diff --git a/lib/crypto/aes.c b/lib/crypto/aes.c
index 9928b23e0a8a..467f0c35a0e0 100644
--- a/lib/crypto/aes.c
+++ b/lib/crypto/aes.c
@@ -82,6 +82,12 @@  static volatile const u8 __cacheline_aligned aes_inv_sbox[] = {
 	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
 };
 
+extern const u8 crypto_aes_sbox[] __alias(aes_sbox);
+extern const u8 crypto_aes_inv_sbox[] __alias(aes_inv_sbox);
+
+EXPORT_SYMBOL(crypto_aes_sbox);
+EXPORT_SYMBOL(crypto_aes_inv_sbox);
+
 static u32 mul_by_x(u32 w)
 {
 	u32 x = w & 0x7f7f7f7f;