staging: skein: Add Crypto API and Loadable Module support
v2 cover staging: skein: Add Crypto API and Loadable Module support
This patchset adds crypto api support and loadable module support to the skein driver.
Eric Rost (2):
staging: skein: Add Crypto API support
staging: skein: Add Loadable Module Support
drivers/staging/skein/Kconfig | 24 +--- drivers/staging/skein/Makefile | 13 +- drivers/staging/skein/skein.c | 1 + drivers/staging/skein/skein.h | 5 + drivers/staging/skein/skein_generic.c | 231 ++++++++++++++++++++++++++++++++++ 5 files changed, 248 insertions(+), 26 deletions(-) create mode 100644 drivers/staging/skein/skein_generic.c
Signature · 1 line
2.1.1
PATCH v2 1/2 staging: skein: Add Crypto API support
Adds crypto API support for the skein module. Also collapses the threefish module into the skein module.
--- drivers/staging/skein/Kconfig | 22 +------ drivers/staging/skein/Makefile | 13 ++-- drivers/staging/skein/skein.c | 1 + drivers/staging/skein/skein.h | 5 ++ drivers/staging/skein/skein_generic.c | 109 ++++++++++++++++++++++++++++++++++ 5 files changed, 125 insertions(+), 25 deletions(-) create mode 100644 drivers/staging/skein/skein_generic.c
drivers/staging/skein/Kconfig +3 -19
@@ -1,8 +1,8 @@ config CRYPTO_SKEIN bool "Skein digest algorithm" depends on (X86 || UML_X86) && 64BIT && CRYPTO - select CRYPTO_THREEFISH select CRYPTO_HASH + select CRYPTO_ALGAPI help Skein secure hash algorithm is one of 5 finalists from the NIST SHA3 competition.
@@ -12,21 +12,5 @@ config CRYPTO_SKEIN http://www.skein-hash.info/sites/default/files/skein1.3.pdf - for more information. This module depends on the threefish block - cipher module. - -config CRYPTO_THREEFISH - bool "Threefish tweakable block cipher" - depends on (X86 || UML_X86) && 64BIT && CRYPTO - select CRYPTO_ALGAPI - help - Threefish cipher algorithm is the tweakable block cipher underneath - the Skein family of secure hash algorithms. Skein is one of 5 - finalists from the NIST SHA3 competition. - - Skein is optimized for modern, 64bit processors and is highly - customizable. See: - - http://www.skein-hash.info/sites/default/files/skein1.3.pdf - - for more information. + for more information. This module also contains the threefish block + cipher algorithm.
drivers/staging/skein/Makefile +7 -6
@@ -1,9 +1,10 @@ # # Makefile for the skein secure hash algorithm # -obj-$(CONFIG_CRYPTO_SKEIN) += skein.o \ - skein_api.o \ - skein_block.o - -obj-$(CONFIG_CRYPTO_THREEFISH) += threefish_block.o \ - threefish_api.o +obj-$(CONFIG_CRYPTO_SKEIN) += skein_mod.o +skein_mod-y := skein.o \ + skein_api.o \ + skein_block.o \ + threefish_block.o \ + threefish_api.o \ + skein_generic.o
drivers/staging/skein/skein.c +1 -0
@@ -11,6 +11,7 @@#define SKEIN_PORT_CODE /* instantiate any code in skein_port.h */ #include <linux/string.h> /* get the memcpy/memset functions */ +#include <linux/export.h> #include "skein.h" /* get the Skein API definitions */ #include "skein_iv.h" /* get precomputed IVs */ #include "skein_block.h"
drivers/staging/skein/skein.h +5 -0
@@ -28,6 +28,11 @@** ***************************************************************************/ +/*Skein digest sizes for crypto api*/ +#define SKEIN256_DIGEST_BIT_SIZE (256) +#define SKEIN512_DIGEST_BIT_SIZE (512) +#define SKEIN1024_DIGEST_BIT_SIZE (1024) +#ifndef rotl_64#define rotl_64 (x,N ) (((x) << (N)) | ((x) >> (64-(N))))#endif
drivers/staging/skein/skein_generic.c new file +109 -0
109 lines not on this page · raw message
Signature · 1 line
2.1.1
Re: [PATCH v2 1/2] staging: skein: Add Crypto API support
Quoted 3 lines · Eric Rost
Adds crypto API support for the skein module. Also collapses the threefish module into the skein module.
Why is this in staging anyway? It seems very small and not terrible code. It could easily be sent to the main kernel.
drivers/staging/skein/skein.h line 34
Quoted 12 lines
drivers/staging/skein/skein.h +4
-0@@ -28,6 +28,11 @@** ***************************************************************************/ +/*Skein digest sizes for crypto api*/ +#define SKEIN256_DIGEST_BIT_SIZE (256) +#define SKEIN512_DIGEST_BIT_SIZE (512) +#define SKEIN1024_DIGEST_BIT_SIZE (1024)
Superfulous parens.
drivers/staging/skein/skein.h line 37
Quoted 3 lines
drivers/staging/skein/skein.h +1
-0+#ifndef rotl_64#define rotl_64 (x,N ) (((x) << (N)) | ((x) >> (64-(N))))
Missing spaces.
#define rotl_64(x, N) (((x) << (N)) | ((x) >> (64 - (N))))
Also this should be a function. N and x are evaulated twice so it could be a bug depending on how it's called.
Quoted 25 lines
drivers/staging/skein/skein.h +0
-0#endif drivers/staging/skein/skein_generic.c new file +18
-0@@ -0,0 +1,109 @@ +/* +* Cryptographic API. +* +* Skein256 Hash Algorithm. +* +* Derived from cryptoapi implementation, adapted for in-place +* scatterlist interface. +* +* Copyright (c) Eric Rost <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the Free +* Software Foundation; either version 2 of the License, or (at your option) +* any later version. +* +*/ +#include <crypto/internal/hash.h> +#include <linux/init.h>
drivers/staging/skein/skein_generic.c line 28
Quoted 10 lines
drivers/staging/skein/skein_generic.c new file +10
-0+#include <linux/mm.h> +#include <linux/cryptohash.h> +#include <linux/types.h> +#include "skein.h" +#include <asm/byteorder.h> + +static int skein256_init (struct shash_desc *desc) +{ +struct skein_256_ctx *sctx =shash_desc_ctx (desc); +
Don't put a blank line in the middle of the declaration block.
drivers/staging/skein/skein_generic.c line 32
Quoted 4 lines
drivers/staging/skein/skein_generic.c new file +4
-0+int ret =skein_256_init (sctx,SKEIN256_DIGEST_BIT_SIZE ); + +return ret; +}
This should be:
static int skein256_init(struct shash_desc *desc)
{
struct skein_256_ctx *sctx = shash_desc_ctx(desc);
return skein_256_init(sctx, SKEIN256_DIGEST_BIT_SIZE);
}drivers/staging/skein/skein_generic.c line 38
Quoted 6 lines
drivers/staging/skein/skein_generic.c new file +6
-0+ +int skein256_update (struct shash_desc *desc,const u8 *data, +unsigned int len) +{ +struct skein_256_ctx *sctx =shash_desc_ctx (desc); +size_t hbl = (size_t ) len;
Pointless case. Pointless assignment.
drivers/staging/skein/skein_generic.c line 42
Quoted 4 lines
drivers/staging/skein/skein_generic.c new file +4
-0+int ret =skein_256_update (sctx, data, hbl); + +return ret; +}
This should be:
int skein256_update(struct shash_desc *desc, const u8 *data,
unsigned int len)
{
struct skein_256_ctx *sctx = shash_desc_ctx(desc);
return skein_256_update(sctx, data, len);
}drivers/staging/skein/skein_generic.c line 51
Quoted 9 lines
drivers/staging/skein/skein_generic.c new file +9
-0+EXPORT_SYMBOL (skein256_update); + +/* Add padding and return the message digest. */ +static int skein256_final (struct shash_desc *desc,u8 *out) +{ +struct skein_256_ctx *sctx =shash_desc_ctx (desc); +int ret =skein_256_final (sctx, out); +return ret; +}
Same.
drivers/staging/skein/skein_generic.c line 60
Quoted 9 lines
drivers/staging/skein/skein_generic.c new file +9
-0+ +static int skein512_init (struct shash_desc *desc) +{ +struct skein_512_ctx *sctx =shash_desc_ctx (desc); + +int ret =skein_512_init (sctx,SKEIN512_DIGEST_BIT_SIZE ); + +return ret; +}
Same.
drivers/staging/skein/skein_generic.c line 70
Quoted 10 lines
drivers/staging/skein/skein_generic.c new file +10
-0+ +int skein512_update (struct shash_desc *desc,const u8 *data, +unsigned int len) +{ +struct skein_512_ctx *sctx =shash_desc_ctx (desc); +size_t hbl = (size_t ) len; +int ret =skein_512_update (sctx, data, hbl); + +return ret; +}
Same.
drivers/staging/skein/skein_generic.c line 79
Quoted 9 lines
drivers/staging/skein/skein_generic.c new file +9
-0+EXPORT_SYMBOL (skein512_update); + +/* Add padding and return the message digest. */ +static int skein512_final (struct shash_desc *desc,u8 *out) +{ +struct skein_512_ctx *sctx =shash_desc_ctx (desc); +int ret =skein_512_final (sctx, out); +return ret; +}
Same.
drivers/staging/skein/skein_generic.c line 88
Quoted 9 lines
drivers/staging/skein/skein_generic.c new file +9
-0+ +static int skein1024_init (struct shash_desc *desc) +{ +struct skein_1024_ctx *sctx =shash_desc_ctx (desc); + +int ret =skein_1024_init (sctx,SKEIN1024_DIGEST_BIT_SIZE ); + +return ret; +}
Same.
drivers/staging/skein/skein_generic.c line 98
Quoted 10 lines
drivers/staging/skein/skein_generic.c new file +10
-0+ +int skein1024_update (struct shash_desc *desc,const u8 *data, +unsigned int len) +{ +struct skein_1024_ctx *sctx =shash_desc_ctx (desc); +size_t hbl = (size_t ) len; +int ret =skein_1024_update (sctx, data, hbl); + +return ret; +}
Same.
drivers/staging/skein/skein_generic.c line 107
Quoted 9 lines
drivers/staging/skein/skein_generic.c new file +9
-0+EXPORT_SYMBOL (skein1024_update); + +/* Add padding and return the message digest. */ +static int skein1024_final (struct shash_desc *desc,u8 *out) +{ +struct skein_1024_ctx *sctx =shash_desc_ctx (desc); +int ret =skein_1024_final (sctx, out); +return ret; +}
Same.
regarsd,
dan carpenter
Re: [PATCH v2 1/2] staging: skein: Add Crypto API support
Quoted 6 lines · Dan Carpenter
Quoted 2 lines · Eric Rost
Adds crypto API support for the skein module. Also collapses the threefish module into the skein module.
Why is this in staging anyway? It seems very small and not terrible code. It could easily be sent to the main kernel.
Yes, we're almost there. Loadable module support and integration into the crypto API were what was blocking my proposal to move into mainline. It might even happen this cycle if we can get this series into -next for a bit.
thx,
Jason.
Re: [PATCH v2 1/2] staging: skein: Add Crypto API support
In reply to Eric RostQuoted 62 lines · Eric Rost
Adds crypto API support for the skein module. Also collapses the threefish module into the skein module.
Signed-off-by Eric Rost <[email protected]>--- drivers/staging/skein/Kconfig | 22 +------ drivers/staging/skein/Makefile | 13 ++-- drivers/staging/skein/skein.c | 1 + drivers/staging/skein/skein.h | 5 ++ drivers/staging/skein/skein_generic.c | 109 ++++++++++++++++++++++++++++++++++ 5 files changed, 125 insertions(+), 25 deletions(-) create mode 100644 drivers/staging/skein/skein_generic.cdrivers/staging/skein/Kconfig +3
-19@@ -1,8 +1,8 @@ config CRYPTO_SKEIN bool "Skein digest algorithm" depends on (X86 || UML_X86) && 64BIT && CRYPTO - select CRYPTO_THREEFISH select CRYPTO_HASH + select CRYPTO_ALGAPI help Skein secure hash algorithm is one of 5 finalists from the NIST SHA3 competition.@@ -12,21 +12,5 @@ config CRYPTO_SKEIN http://www.skein-hash.info/sites/default/files/skein1.3.pdf - for more information. This module depends on the threefish block - cipher module. - -config CRYPTO_THREEFISH - bool "Threefish tweakable block cipher" - depends on (X86 || UML_X86) && 64BIT && CRYPTO - select CRYPTO_ALGAPI - help - Threefish cipher algorithm is the tweakable block cipher underneath - the Skein family of secure hash algorithms. Skein is one of 5 - finalists from the NIST SHA3 competition. - - Skein is optimized for modern, 64bit processors and is highly - customizable. See: - - http://www.skein-hash.info/sites/default/files/skein1.3.pdf - - for more information. + for more information. This module also contains the threefish block + cipher algorithm.drivers/staging/skein/Makefile +0
-3@@ -1,9 +1,10 @@ # # Makefile for the skein secure hash algorithm # -obj-$(CONFIG_CRYPTO_SKEIN) += skein.o \ - skein_api.o \ - skein_block.o
drivers/staging/skein/Makefile line 10
Quoted 10 lines
drivers/staging/skein/Makefile +7
-3- -obj-$(CONFIG_CRYPTO_THREEFISH) += threefish_block.o \ - threefish_api.o +obj-$(CONFIG_CRYPTO_SKEIN) += skein_mod.o +skein_mod-y := skein.o \ + skein_api.o \ + skein_block.o \ + threefish_block.o \ + threefish_api.o \ + skein_generic.o
I'd prefer to rename skein.c so that we can do skein.ko.
drivers/staging/skein/skein.c line 14
Quoted 9 lines
drivers/staging/skein/skein.c +1
-0@@ -11,6 +11,7 @@#define SKEIN_PORT_CODE /* instantiate any code in skein_port.h */ #include <linux/string.h> /* get the memcpy/memset functions */ +#include <linux/export.h>
This shouldn't be needed anymore.
Quoted 38 lines
drivers/staging/skein/skein.c +0
-0#include "skein.h" /* get the Skein API definitions */ #include "skein_iv.h" /* get precomputed IVs */ #include "skein_block.h" drivers/staging/skein/skein.h +5
-0@@ -28,6 +28,11 @@** ***************************************************************************/ +/*Skein digest sizes for crypto api*/ +#define SKEIN256_DIGEST_BIT_SIZE (256) +#define SKEIN512_DIGEST_BIT_SIZE (512) +#define SKEIN1024_DIGEST_BIT_SIZE (1024) +#ifndef rotl_64#define rotl_64 (x,N ) (((x) << (N)) | ((x) >> (64-(N))))#endif drivers/staging/skein/skein_generic.c new file +13
-0@@ -0,0 +1,109 @@ +/* +* Cryptographic API. +* +* Skein256 Hash Algorithm. +* +* Derived from cryptoapi implementation, adapted for in-place +* scatterlist interface. +* +* Copyright (c) Eric Rost <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the Free +* Software Foundation; either version 2 of the License, or (at your option)
drivers/staging/skein/skein_generic.c line 23
Quoted 10 lines
drivers/staging/skein/skein_generic.c new file +10
-0+* any later version. +* +*/ +#include <crypto/internal/hash.h> +#include <linux/init.h> +#include <linux/mm.h> +#include <linux/cryptohash.h> +#include <linux/types.h> +#include "skein.h" +#include <asm/byteorder.h>
I forgot to mention this last time. Please put local includes last. Also, please double check that all of these are need in this file.
Quoted 10 lines
drivers/staging/skein/skein_generic.c new file +10
-0+ +static int skein256_init (struct shash_desc *desc) +{ +struct skein_256_ctx *sctx =shash_desc_ctx (desc); + +int ret =skein_256_init (sctx,SKEIN256_DIGEST_BIT_SIZE ); + +return ret; +} +
drivers/staging/skein/skein_generic.c line 43
Quoted 10 lines
drivers/staging/skein/skein_generic.c new file +10
-0+int skein256_update (struct shash_desc *desc,const u8 *data, +unsigned int len) +{ +struct skein_256_ctx *sctx =shash_desc_ctx (desc); +size_t hbl = (size_t ) len; +int ret =skein_256_update (sctx, data, hbl); + +return ret; +} +EXPORT_SYMBOL (skein256_update);
Why export this symbol if it's registered with the crypto API?
Same the others after this one.
thx,
Jason.
PATCH v2 2/2 staging: skein: Add Loadable Module Support
In reply to Eric RostAdds loadable module support for skein_mod, containing skein256, skein512, and skein1024 algorithms.
--- drivers/staging/skein/Kconfig | 2 +- drivers/staging/skein/skein_generic.c | 122 ++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-)
drivers/staging/skein/Kconfig +1 -1
@@ -1,5 +1,5 @@ config CRYPTO_SKEIN - bool "Skein digest algorithm" + tristate "Skein digest algorithm" depends on (X86 || UML_X86) && 64BIT && CRYPTO select CRYPTO_HASH select CRYPTO_ALGAPI
drivers/staging/skein/skein_generic.c +122 -0
144 lines not on this page · raw message
Signature · 1 line
2.1.1
Re: [PATCH v2 2/2] staging: skein: Add Loadable Module Support
drivers/staging/skein/skein_generic.c static int skein1024_final(struct shash_desc *desc, u8 *out) · line 215
Quoted 4 lines · Eric Rost
drivers/staging/skein/skein_generic.c +4
-0+static int __init skein_generic_mod_init (void ) +{ +return crypto_register_shash (&alg256) ||crypto_register_shash (&alg512) + ||crypto_register_shash (&alg1024);
Shouldn't it unwind on error?
Quoted 1 line
+}
regards,
dan carpenter