Use CRYPTO_API() etc. from include/crypto/api.h in preparation for compilation as part of support for FIPS 140 standalone modules. Generated using: ./fipsify.py --config CONFIG_CRYPTO_LIB_GF128MUL --source lib/crypto/gf128mul.c --header include/crypto/gf128mul.h Signed-off-by: Vegard Nossum <vegard.nossum@xxxxxxxxxx> --- crypto/fips140-api.c | 17 +++++++++++++++++ include/crypto/gf128mul.h | 29 ++++++++++++++++++++++------- lib/crypto/gf128mul.c | 28 ++++++++++++++-------------- 3 files changed, 53 insertions(+), 21 deletions(-) diff --git a/crypto/fips140-api.c b/crypto/fips140-api.c index 4924b11ec592..6c29b46631e4 100644 --- a/crypto/fips140-api.c +++ b/crypto/fips140-api.c @@ -32,3 +32,20 @@ DEFINE_CRYPTO_API_STUB(aesgcm_decrypt); #endif +/* + * lib/crypto/gf128mul.c + */ +#if !IS_BUILTIN(CONFIG_CRYPTO_LIB_GF128MUL) + +#include <crypto/gf128mul.h> + +DEFINE_CRYPTO_API_STUB(gf128mul_lle); +DEFINE_CRYPTO_API_STUB(gf128mul_init_4k_lle); +DEFINE_CRYPTO_API_STUB(gf128mul_4k_lle); +DEFINE_CRYPTO_API_STUB(gf128mul_x8_ble); +DEFINE_CRYPTO_API_STUB(gf128mul_init_64k_bbe); +DEFINE_CRYPTO_API_STUB(gf128mul_free_64k); +DEFINE_CRYPTO_API_STUB(gf128mul_64k_bbe); + +#endif + diff --git a/include/crypto/gf128mul.h b/include/crypto/gf128mul.h index b0853f7cada0..9367a2234fc4 100644 --- a/include/crypto/gf128mul.h +++ b/include/crypto/gf128mul.h @@ -49,6 +49,7 @@ #ifndef _CRYPTO_GF128MUL_H #define _CRYPTO_GF128MUL_H +#include <crypto/api.h> #include <asm/byteorder.h> #include <crypto/b128ops.h> #include <linux/slab.h> @@ -160,7 +161,9 @@ /* A slow generic version of gf_mul, implemented for lle * It multiplies a and b and puts the result in a */ -void gf128mul_lle(be128 *a, const be128 *b); +DECLARE_CRYPTO_API(gf128mul_lle, void, + (be128 *a, const be128 *b), + (a, b)); /* * The following functions multiply a field element by x in @@ -221,9 +224,15 @@ struct gf128mul_4k { be128 t[256]; }; -struct gf128mul_4k *gf128mul_init_4k_lle(const be128 *g); -void gf128mul_4k_lle(be128 *a, const struct gf128mul_4k *t); -void gf128mul_x8_ble(le128 *r, const le128 *x); +DECLARE_CRYPTO_API(gf128mul_init_4k_lle, struct gf128mul_4k *, + (const be128 *g), + (g)); +DECLARE_CRYPTO_API(gf128mul_4k_lle, void, + (be128 *a, const struct gf128mul_4k *t), + (a, t)); +DECLARE_CRYPTO_API(gf128mul_x8_ble, void, + (le128 *r, const le128 *x), + (r, x)); static inline void gf128mul_free_4k(struct gf128mul_4k *t) { kfree_sensitive(t); @@ -241,8 +250,14 @@ struct gf128mul_64k { * factor in the first argument, and the table in the second. * Afterwards, the result is stored in *a. */ -struct gf128mul_64k *gf128mul_init_64k_bbe(const be128 *g); -void gf128mul_free_64k(struct gf128mul_64k *t); -void gf128mul_64k_bbe(be128 *a, const struct gf128mul_64k *t); +DECLARE_CRYPTO_API(gf128mul_init_64k_bbe, struct gf128mul_64k *, + (const be128 *g), + (g)); +DECLARE_CRYPTO_API(gf128mul_free_64k, void, + (struct gf128mul_64k *t), + (t)); +DECLARE_CRYPTO_API(gf128mul_64k_bbe, void, + (be128 *a, const struct gf128mul_64k *t), + (a, t)); #endif /* _CRYPTO_GF128MUL_H */ diff --git a/lib/crypto/gf128mul.c b/lib/crypto/gf128mul.c index 2a34590fe3f1..15698c82f0d8 100644 --- a/lib/crypto/gf128mul.c +++ b/lib/crypto/gf128mul.c @@ -168,7 +168,7 @@ static void gf128mul_x8_bbe(be128 *x) x->b = cpu_to_be64((b << 8) ^ _tt); } -void gf128mul_x8_ble(le128 *r, const le128 *x) +void CRYPTO_API(gf128mul_x8_ble)(le128 *r, const le128 *x) { u64 a = le64_to_cpu(x->a); u64 b = le64_to_cpu(x->b); @@ -177,9 +177,9 @@ void gf128mul_x8_ble(le128 *r, const le128 *x) r->a = cpu_to_le64((a << 8) | (b >> 56)); r->b = cpu_to_le64((b << 8) ^ _tt); } -EXPORT_SYMBOL(gf128mul_x8_ble); +DEFINE_CRYPTO_API(gf128mul_x8_ble); -void gf128mul_lle(be128 *r, const be128 *b) +void CRYPTO_API(gf128mul_lle)(be128 *r, const be128 *b) { /* * The p array should be aligned to twice the size of its element type, @@ -224,7 +224,7 @@ void gf128mul_lle(be128 *r, const be128 *b) gf128mul_x8_lle_ti(r); /* use the time invariant version */ } } -EXPORT_SYMBOL(gf128mul_lle); +DEFINE_CRYPTO_API(gf128mul_lle); /* This version uses 64k bytes of table space. A 16 byte buffer has to be multiplied by a 16 byte key @@ -240,7 +240,7 @@ EXPORT_SYMBOL(gf128mul_lle); * t[1][BYTE] contains g*x^8*BYTE * .. * t[15][BYTE] contains g*x^120*BYTE */ -struct gf128mul_64k *gf128mul_init_64k_bbe(const be128 *g) +struct gf128mul_64k *CRYPTO_API(gf128mul_init_64k_bbe)(const be128 *g) { struct gf128mul_64k *t; int i, j, k; @@ -280,9 +280,9 @@ struct gf128mul_64k *gf128mul_init_64k_bbe(const be128 *g) out: return t; } -EXPORT_SYMBOL(gf128mul_init_64k_bbe); +DEFINE_CRYPTO_API(gf128mul_init_64k_bbe); -void gf128mul_free_64k(struct gf128mul_64k *t) +void CRYPTO_API(gf128mul_free_64k)(struct gf128mul_64k *t) { int i; @@ -290,9 +290,9 @@ void gf128mul_free_64k(struct gf128mul_64k *t) kfree_sensitive(t->t[i]); kfree_sensitive(t); } -EXPORT_SYMBOL(gf128mul_free_64k); +DEFINE_CRYPTO_API(gf128mul_free_64k); -void gf128mul_64k_bbe(be128 *a, const struct gf128mul_64k *t) +void CRYPTO_API(gf128mul_64k_bbe)(be128 *a, const struct gf128mul_64k *t) { u8 *ap = (u8 *)a; be128 r[1]; @@ -303,7 +303,7 @@ void gf128mul_64k_bbe(be128 *a, const struct gf128mul_64k *t) be128_xor(r, r, &t->t[i]->t[ap[15 - i]]); *a = *r; } -EXPORT_SYMBOL(gf128mul_64k_bbe); +DEFINE_CRYPTO_API(gf128mul_64k_bbe); /* This version uses 4k bytes of table space. A 16 byte buffer has to be multiplied by a 16 byte key @@ -321,7 +321,7 @@ EXPORT_SYMBOL(gf128mul_64k_bbe); lower byte in the buffer, stopping when we reach the lowest byte. This requires a 4096 byte table. */ -struct gf128mul_4k *gf128mul_init_4k_lle(const be128 *g) +struct gf128mul_4k *CRYPTO_API(gf128mul_init_4k_lle)(const be128 *g) { struct gf128mul_4k *t; int j, k; @@ -341,9 +341,9 @@ struct gf128mul_4k *gf128mul_init_4k_lle(const be128 *g) out: return t; } -EXPORT_SYMBOL(gf128mul_init_4k_lle); +DEFINE_CRYPTO_API(gf128mul_init_4k_lle); -void gf128mul_4k_lle(be128 *a, const struct gf128mul_4k *t) +void CRYPTO_API(gf128mul_4k_lle)(be128 *a, const struct gf128mul_4k *t) { u8 *ap = (u8 *)a; be128 r[1]; @@ -356,7 +356,7 @@ void gf128mul_4k_lle(be128 *a, const struct gf128mul_4k *t) } *a = *r; } -EXPORT_SYMBOL(gf128mul_4k_lle); +DEFINE_CRYPTO_API(gf128mul_4k_lle); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Functions for multiplying elements of GF(2^128)"); -- 2.39.3