forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lib/crypto: blake2s: include as built-in
In preparation for using blake2s in the RNG, we change the way that it is wired-in to the build system. Instead of using ifdefs to select the right symbol, we use weak symbols. And because ARM doesn't need the generic implementation, we make the generic one default only if an arch library doesn't need it already, and then have arch libraries that do need it opt-in. So that the arch libraries can remain tristate rather than bool, we then split the shash part from the glue code. Acked-by: Herbert Xu <[email protected]> Acked-by: Ard Biesheuvel <[email protected]> Acked-by: Greg Kroah-Hartman <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: [email protected] Cc: [email protected] Signed-off-by: Jason A. Donenfeld <[email protected]>
- Loading branch information
Showing
14 changed files
with
189 additions
and
174 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,78 +1,7 @@ | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
/* | ||
* BLAKE2s digest algorithm, ARM scalar implementation | ||
* | ||
* Copyright 2020 Google LLC | ||
*/ | ||
|
||
#include <crypto/internal/blake2s.h> | ||
#include <crypto/internal/hash.h> | ||
|
||
#include <linux/module.h> | ||
|
||
/* defined in blake2s-core.S */ | ||
EXPORT_SYMBOL(blake2s_compress_arch); | ||
|
||
static int crypto_blake2s_update_arm(struct shash_desc *desc, | ||
const u8 *in, unsigned int inlen) | ||
{ | ||
return crypto_blake2s_update(desc, in, inlen, blake2s_compress_arch); | ||
} | ||
|
||
static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out) | ||
{ | ||
return crypto_blake2s_final(desc, out, blake2s_compress_arch); | ||
} | ||
|
||
#define BLAKE2S_ALG(name, driver_name, digest_size) \ | ||
{ \ | ||
.base.cra_name = name, \ | ||
.base.cra_driver_name = driver_name, \ | ||
.base.cra_priority = 200, \ | ||
.base.cra_flags = CRYPTO_ALG_OPTIONAL_KEY, \ | ||
.base.cra_blocksize = BLAKE2S_BLOCK_SIZE, \ | ||
.base.cra_ctxsize = sizeof(struct blake2s_tfm_ctx), \ | ||
.base.cra_module = THIS_MODULE, \ | ||
.digestsize = digest_size, \ | ||
.setkey = crypto_blake2s_setkey, \ | ||
.init = crypto_blake2s_init, \ | ||
.update = crypto_blake2s_update_arm, \ | ||
.final = crypto_blake2s_final_arm, \ | ||
.descsize = sizeof(struct blake2s_state), \ | ||
} | ||
|
||
static struct shash_alg blake2s_arm_algs[] = { | ||
BLAKE2S_ALG("blake2s-128", "blake2s-128-arm", BLAKE2S_128_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-160", "blake2s-160-arm", BLAKE2S_160_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-224", "blake2s-224-arm", BLAKE2S_224_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-256", "blake2s-256-arm", BLAKE2S_256_HASH_SIZE), | ||
}; | ||
|
||
static int __init blake2s_arm_mod_init(void) | ||
{ | ||
return IS_REACHABLE(CONFIG_CRYPTO_HASH) ? | ||
crypto_register_shashes(blake2s_arm_algs, | ||
ARRAY_SIZE(blake2s_arm_algs)) : 0; | ||
} | ||
|
||
static void __exit blake2s_arm_mod_exit(void) | ||
{ | ||
if (IS_REACHABLE(CONFIG_CRYPTO_HASH)) | ||
crypto_unregister_shashes(blake2s_arm_algs, | ||
ARRAY_SIZE(blake2s_arm_algs)); | ||
} | ||
|
||
module_init(blake2s_arm_mod_init); | ||
module_exit(blake2s_arm_mod_exit); | ||
|
||
MODULE_DESCRIPTION("BLAKE2s digest algorithm, ARM scalar implementation"); | ||
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Eric Biggers <[email protected]>"); | ||
MODULE_ALIAS_CRYPTO("blake2s-128"); | ||
MODULE_ALIAS_CRYPTO("blake2s-128-arm"); | ||
MODULE_ALIAS_CRYPTO("blake2s-160"); | ||
MODULE_ALIAS_CRYPTO("blake2s-160-arm"); | ||
MODULE_ALIAS_CRYPTO("blake2s-224"); | ||
MODULE_ALIAS_CRYPTO("blake2s-224-arm"); | ||
MODULE_ALIAS_CRYPTO("blake2s-256"); | ||
MODULE_ALIAS_CRYPTO("blake2s-256-arm"); | ||
EXPORT_SYMBOL(blake2s_compress); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
/* | ||
* BLAKE2s digest algorithm, ARM scalar implementation | ||
* | ||
* Copyright 2020 Google LLC | ||
*/ | ||
|
||
#include <crypto/internal/blake2s.h> | ||
#include <crypto/internal/hash.h> | ||
|
||
#include <linux/module.h> | ||
|
||
static int crypto_blake2s_update_arm(struct shash_desc *desc, | ||
const u8 *in, unsigned int inlen) | ||
{ | ||
return crypto_blake2s_update(desc, in, inlen, blake2s_compress); | ||
} | ||
|
||
static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out) | ||
{ | ||
return crypto_blake2s_final(desc, out, blake2s_compress); | ||
} | ||
|
||
#define BLAKE2S_ALG(name, driver_name, digest_size) \ | ||
{ \ | ||
.base.cra_name = name, \ | ||
.base.cra_driver_name = driver_name, \ | ||
.base.cra_priority = 200, \ | ||
.base.cra_flags = CRYPTO_ALG_OPTIONAL_KEY, \ | ||
.base.cra_blocksize = BLAKE2S_BLOCK_SIZE, \ | ||
.base.cra_ctxsize = sizeof(struct blake2s_tfm_ctx), \ | ||
.base.cra_module = THIS_MODULE, \ | ||
.digestsize = digest_size, \ | ||
.setkey = crypto_blake2s_setkey, \ | ||
.init = crypto_blake2s_init, \ | ||
.update = crypto_blake2s_update_arm, \ | ||
.final = crypto_blake2s_final_arm, \ | ||
.descsize = sizeof(struct blake2s_state), \ | ||
} | ||
|
||
static struct shash_alg blake2s_arm_algs[] = { | ||
BLAKE2S_ALG("blake2s-128", "blake2s-128-arm", BLAKE2S_128_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-160", "blake2s-160-arm", BLAKE2S_160_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-224", "blake2s-224-arm", BLAKE2S_224_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-256", "blake2s-256-arm", BLAKE2S_256_HASH_SIZE), | ||
}; | ||
|
||
static int __init blake2s_arm_mod_init(void) | ||
{ | ||
return IS_REACHABLE(CONFIG_CRYPTO_HASH) ? | ||
crypto_register_shashes(blake2s_arm_algs, | ||
ARRAY_SIZE(blake2s_arm_algs)) : 0; | ||
} | ||
|
||
static void __exit blake2s_arm_mod_exit(void) | ||
{ | ||
if (IS_REACHABLE(CONFIG_CRYPTO_HASH)) | ||
crypto_unregister_shashes(blake2s_arm_algs, | ||
ARRAY_SIZE(blake2s_arm_algs)); | ||
} | ||
|
||
module_init(blake2s_arm_mod_init); | ||
module_exit(blake2s_arm_mod_exit); | ||
|
||
MODULE_DESCRIPTION("BLAKE2s digest algorithm, ARM scalar implementation"); | ||
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Eric Biggers <[email protected]>"); | ||
MODULE_ALIAS_CRYPTO("blake2s-128"); | ||
MODULE_ALIAS_CRYPTO("blake2s-128-arm"); | ||
MODULE_ALIAS_CRYPTO("blake2s-160"); | ||
MODULE_ALIAS_CRYPTO("blake2s-160-arm"); | ||
MODULE_ALIAS_CRYPTO("blake2s-224"); | ||
MODULE_ALIAS_CRYPTO("blake2s-224-arm"); | ||
MODULE_ALIAS_CRYPTO("blake2s-256"); | ||
MODULE_ALIAS_CRYPTO("blake2s-256-arm"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// SPDX-License-Identifier: GPL-2.0 OR MIT | ||
/* | ||
* Copyright (C) 2015-2019 Jason A. Donenfeld <[email protected]>. All Rights Reserved. | ||
*/ | ||
|
||
#include <crypto/internal/blake2s.h> | ||
#include <crypto/internal/simd.h> | ||
#include <crypto/internal/hash.h> | ||
|
||
#include <linux/types.h> | ||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/sizes.h> | ||
|
||
#include <asm/cpufeature.h> | ||
#include <asm/processor.h> | ||
|
||
static int crypto_blake2s_update_x86(struct shash_desc *desc, | ||
const u8 *in, unsigned int inlen) | ||
{ | ||
return crypto_blake2s_update(desc, in, inlen, blake2s_compress); | ||
} | ||
|
||
static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out) | ||
{ | ||
return crypto_blake2s_final(desc, out, blake2s_compress); | ||
} | ||
|
||
#define BLAKE2S_ALG(name, driver_name, digest_size) \ | ||
{ \ | ||
.base.cra_name = name, \ | ||
.base.cra_driver_name = driver_name, \ | ||
.base.cra_priority = 200, \ | ||
.base.cra_flags = CRYPTO_ALG_OPTIONAL_KEY, \ | ||
.base.cra_blocksize = BLAKE2S_BLOCK_SIZE, \ | ||
.base.cra_ctxsize = sizeof(struct blake2s_tfm_ctx), \ | ||
.base.cra_module = THIS_MODULE, \ | ||
.digestsize = digest_size, \ | ||
.setkey = crypto_blake2s_setkey, \ | ||
.init = crypto_blake2s_init, \ | ||
.update = crypto_blake2s_update_x86, \ | ||
.final = crypto_blake2s_final_x86, \ | ||
.descsize = sizeof(struct blake2s_state), \ | ||
} | ||
|
||
static struct shash_alg blake2s_algs[] = { | ||
BLAKE2S_ALG("blake2s-128", "blake2s-128-x86", BLAKE2S_128_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-160", "blake2s-160-x86", BLAKE2S_160_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-224", "blake2s-224-x86", BLAKE2S_224_HASH_SIZE), | ||
BLAKE2S_ALG("blake2s-256", "blake2s-256-x86", BLAKE2S_256_HASH_SIZE), | ||
}; | ||
|
||
static int __init blake2s_mod_init(void) | ||
{ | ||
if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && boot_cpu_has(X86_FEATURE_SSSE3)) | ||
return crypto_register_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs)); | ||
return 0; | ||
} | ||
|
||
static void __exit blake2s_mod_exit(void) | ||
{ | ||
if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && boot_cpu_has(X86_FEATURE_SSSE3)) | ||
crypto_unregister_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs)); | ||
} | ||
|
||
module_init(blake2s_mod_init); | ||
module_exit(blake2s_mod_exit); | ||
|
||
MODULE_ALIAS_CRYPTO("blake2s-128"); | ||
MODULE_ALIAS_CRYPTO("blake2s-128-x86"); | ||
MODULE_ALIAS_CRYPTO("blake2s-160"); | ||
MODULE_ALIAS_CRYPTO("blake2s-160-x86"); | ||
MODULE_ALIAS_CRYPTO("blake2s-224"); | ||
MODULE_ALIAS_CRYPTO("blake2s-224-x86"); | ||
MODULE_ALIAS_CRYPTO("blake2s-256"); | ||
MODULE_ALIAS_CRYPTO("blake2s-256-x86"); | ||
MODULE_LICENSE("GPL v2"); |
Oops, something went wrong.