Skip to content

Commit d93aebb

Browse files
committed
Merge branch 'random-5.17-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/crng/random
Pull random number generator updates from Jason Donenfeld: "These a bit more numerous than usual for the RNG, due to folks resubmitting patches that had been pending prior and generally renewed interest. There are a few categories of patches in here: 1) Dominik Brodowski and I traded a series back and forth for a some weeks that fixed numerous issues related to seeds being provided at extremely early boot by the firmware, before other parts of the kernel or of the RNG have been initialized, both fixing some crashes and addressing correctness around early boot randomness. One of these is marked for stable. 2) I replaced the RNG's usage of SHA-1 with BLAKE2s in the entropy extractor, and made the construction a bit safer and more standard. This was sort of a long overdue low hanging fruit, as we were supposed to have phased out SHA-1 usage quite some time ago (even if all we needed here was non-invertibility). Along the way it also made extraction 131% faster. This required a bit of Kconfig and symbol plumbing to make things work well with the crypto libraries, which is one of the reasons why I'm sending you this pull early in the cycle. 3) I got rid of a truly superfluous call to RDRAND in the hot path, which resulted in a whopping 370% increase in performance. 4) Sebastian Andrzej Siewior sent some patches regarding PREEMPT_RT, the full series of which wasn't ready yet, but the first two preparatory cleanups were good on their own. One of them touches files in kernel/irq/, which is the other reason why I'm sending you this pull early in the cycle. 5) Other assorted correctness fixes from Eric Biggers, Jann Horn, Mark Brown, Dominik Brodowski, and myself" * 'random-5.17-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/crng/random: random: don't reset crng_init_cnt on urandom_read() random: avoid superfluous call to RDRAND in CRNG extraction random: early initialization of ChaCha constants random: use IS_ENABLED(CONFIG_NUMA) instead of ifdefs random: harmonize "crng init done" messages random: mix bootloader randomness into pool random: do not throw away excess input to crng_fast_load random: do not re-init if crng_reseed completes before primary init random: fix crash on multiple early calls to add_bootloader_randomness() random: do not sign extend bytes for rotation when mixing random: use BLAKE2s instead of SHA1 in extraction lib/crypto: blake2s: include as built-in random: fix data race on crng init time random: fix data race on crng_node_pool irq: remove unused flags argument from __handle_irq_event_percpu() random: remove unused irq_flags argument from add_interrupt_randomness() random: document add_hwgenerator_randomness() with other input functions MAINTAINERS: add git tree for random.c
2 parents 9d3a1e0 + 6c8e11e commit d93aebb

File tree

23 files changed

+341
-309
lines changed

23 files changed

+341
-309
lines changed

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15998,6 +15998,7 @@ F: arch/mips/generic/board-ranchu.c
1599815998
RANDOM NUMBER DRIVER
1599915999
M: "Theodore Ts'o" <[email protected]>
1600016000
M: Jason A. Donenfeld <[email protected]>
16001+
T: git https://git.kernel.org/pub/scm/linux/kernel/git/crng/random.git
1600116002
S: Maintained
1600216003
F: drivers/char/random.c
1600316004

arch/arm/crypto/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ obj-$(CONFIG_CRYPTO_SHA1_ARM_NEON) += sha1-arm-neon.o
1010
obj-$(CONFIG_CRYPTO_SHA256_ARM) += sha256-arm.o
1111
obj-$(CONFIG_CRYPTO_SHA512_ARM) += sha512-arm.o
1212
obj-$(CONFIG_CRYPTO_BLAKE2S_ARM) += blake2s-arm.o
13+
obj-$(if $(CONFIG_CRYPTO_BLAKE2S_ARM),y) += libblake2s-arm.o
1314
obj-$(CONFIG_CRYPTO_BLAKE2B_NEON) += blake2b-neon.o
1415
obj-$(CONFIG_CRYPTO_CHACHA20_NEON) += chacha-neon.o
1516
obj-$(CONFIG_CRYPTO_POLY1305_ARM) += poly1305-arm.o
@@ -31,7 +32,8 @@ sha256-arm-neon-$(CONFIG_KERNEL_MODE_NEON) := sha256_neon_glue.o
3132
sha256-arm-y := sha256-core.o sha256_glue.o $(sha256-arm-neon-y)
3233
sha512-arm-neon-$(CONFIG_KERNEL_MODE_NEON) := sha512-neon-glue.o
3334
sha512-arm-y := sha512-core.o sha512-glue.o $(sha512-arm-neon-y)
34-
blake2s-arm-y := blake2s-core.o blake2s-glue.o
35+
blake2s-arm-y := blake2s-shash.o
36+
libblake2s-arm-y:= blake2s-core.o blake2s-glue.o
3537
blake2b-neon-y := blake2b-neon-core.o blake2b-neon-glue.o
3638
sha1-arm-ce-y := sha1-ce-core.o sha1-ce-glue.o
3739
sha2-arm-ce-y := sha2-ce-core.o sha2-ce-glue.o

arch/arm/crypto/blake2s-core.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,16 +167,16 @@
167167
.endm
168168

169169
//
170-
// void blake2s_compress_arch(struct blake2s_state *state,
171-
// const u8 *block, size_t nblocks, u32 inc);
170+
// void blake2s_compress(struct blake2s_state *state,
171+
// const u8 *block, size_t nblocks, u32 inc);
172172
//
173173
// Only the first three fields of struct blake2s_state are used:
174174
// u32 h[8]; (inout)
175175
// u32 t[2]; (inout)
176176
// u32 f[2]; (in)
177177
//
178178
.align 5
179-
ENTRY(blake2s_compress_arch)
179+
ENTRY(blake2s_compress)
180180
push {r0-r2,r4-r11,lr} // keep this an even number
181181

182182
.Lnext_block:
@@ -303,4 +303,4 @@ ENTRY(blake2s_compress_arch)
303303
str r3, [r12], #4
304304
bne 1b
305305
b .Lcopy_block_done
306-
ENDPROC(blake2s_compress_arch)
306+
ENDPROC(blake2s_compress)

arch/arm/crypto/blake2s-glue.c

Lines changed: 1 addition & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,7 @@
11
// SPDX-License-Identifier: GPL-2.0-or-later
2-
/*
3-
* BLAKE2s digest algorithm, ARM scalar implementation
4-
*
5-
* Copyright 2020 Google LLC
6-
*/
72

83
#include <crypto/internal/blake2s.h>
9-
#include <crypto/internal/hash.h>
10-
114
#include <linux/module.h>
125

136
/* defined in blake2s-core.S */
14-
EXPORT_SYMBOL(blake2s_compress_arch);
15-
16-
static int crypto_blake2s_update_arm(struct shash_desc *desc,
17-
const u8 *in, unsigned int inlen)
18-
{
19-
return crypto_blake2s_update(desc, in, inlen, blake2s_compress_arch);
20-
}
21-
22-
static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out)
23-
{
24-
return crypto_blake2s_final(desc, out, blake2s_compress_arch);
25-
}
26-
27-
#define BLAKE2S_ALG(name, driver_name, digest_size) \
28-
{ \
29-
.base.cra_name = name, \
30-
.base.cra_driver_name = driver_name, \
31-
.base.cra_priority = 200, \
32-
.base.cra_flags = CRYPTO_ALG_OPTIONAL_KEY, \
33-
.base.cra_blocksize = BLAKE2S_BLOCK_SIZE, \
34-
.base.cra_ctxsize = sizeof(struct blake2s_tfm_ctx), \
35-
.base.cra_module = THIS_MODULE, \
36-
.digestsize = digest_size, \
37-
.setkey = crypto_blake2s_setkey, \
38-
.init = crypto_blake2s_init, \
39-
.update = crypto_blake2s_update_arm, \
40-
.final = crypto_blake2s_final_arm, \
41-
.descsize = sizeof(struct blake2s_state), \
42-
}
43-
44-
static struct shash_alg blake2s_arm_algs[] = {
45-
BLAKE2S_ALG("blake2s-128", "blake2s-128-arm", BLAKE2S_128_HASH_SIZE),
46-
BLAKE2S_ALG("blake2s-160", "blake2s-160-arm", BLAKE2S_160_HASH_SIZE),
47-
BLAKE2S_ALG("blake2s-224", "blake2s-224-arm", BLAKE2S_224_HASH_SIZE),
48-
BLAKE2S_ALG("blake2s-256", "blake2s-256-arm", BLAKE2S_256_HASH_SIZE),
49-
};
50-
51-
static int __init blake2s_arm_mod_init(void)
52-
{
53-
return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
54-
crypto_register_shashes(blake2s_arm_algs,
55-
ARRAY_SIZE(blake2s_arm_algs)) : 0;
56-
}
57-
58-
static void __exit blake2s_arm_mod_exit(void)
59-
{
60-
if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
61-
crypto_unregister_shashes(blake2s_arm_algs,
62-
ARRAY_SIZE(blake2s_arm_algs));
63-
}
64-
65-
module_init(blake2s_arm_mod_init);
66-
module_exit(blake2s_arm_mod_exit);
67-
68-
MODULE_DESCRIPTION("BLAKE2s digest algorithm, ARM scalar implementation");
69-
MODULE_LICENSE("GPL");
70-
MODULE_AUTHOR("Eric Biggers <[email protected]>");
71-
MODULE_ALIAS_CRYPTO("blake2s-128");
72-
MODULE_ALIAS_CRYPTO("blake2s-128-arm");
73-
MODULE_ALIAS_CRYPTO("blake2s-160");
74-
MODULE_ALIAS_CRYPTO("blake2s-160-arm");
75-
MODULE_ALIAS_CRYPTO("blake2s-224");
76-
MODULE_ALIAS_CRYPTO("blake2s-224-arm");
77-
MODULE_ALIAS_CRYPTO("blake2s-256");
78-
MODULE_ALIAS_CRYPTO("blake2s-256-arm");
7+
EXPORT_SYMBOL(blake2s_compress);

arch/arm/crypto/blake2s-shash.c

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
/*
3+
* BLAKE2s digest algorithm, ARM scalar implementation
4+
*
5+
* Copyright 2020 Google LLC
6+
*/
7+
8+
#include <crypto/internal/blake2s.h>
9+
#include <crypto/internal/hash.h>
10+
11+
#include <linux/module.h>
12+
13+
static int crypto_blake2s_update_arm(struct shash_desc *desc,
14+
const u8 *in, unsigned int inlen)
15+
{
16+
return crypto_blake2s_update(desc, in, inlen, blake2s_compress);
17+
}
18+
19+
static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out)
20+
{
21+
return crypto_blake2s_final(desc, out, blake2s_compress);
22+
}
23+
24+
#define BLAKE2S_ALG(name, driver_name, digest_size) \
25+
{ \
26+
.base.cra_name = name, \
27+
.base.cra_driver_name = driver_name, \
28+
.base.cra_priority = 200, \
29+
.base.cra_flags = CRYPTO_ALG_OPTIONAL_KEY, \
30+
.base.cra_blocksize = BLAKE2S_BLOCK_SIZE, \
31+
.base.cra_ctxsize = sizeof(struct blake2s_tfm_ctx), \
32+
.base.cra_module = THIS_MODULE, \
33+
.digestsize = digest_size, \
34+
.setkey = crypto_blake2s_setkey, \
35+
.init = crypto_blake2s_init, \
36+
.update = crypto_blake2s_update_arm, \
37+
.final = crypto_blake2s_final_arm, \
38+
.descsize = sizeof(struct blake2s_state), \
39+
}
40+
41+
static struct shash_alg blake2s_arm_algs[] = {
42+
BLAKE2S_ALG("blake2s-128", "blake2s-128-arm", BLAKE2S_128_HASH_SIZE),
43+
BLAKE2S_ALG("blake2s-160", "blake2s-160-arm", BLAKE2S_160_HASH_SIZE),
44+
BLAKE2S_ALG("blake2s-224", "blake2s-224-arm", BLAKE2S_224_HASH_SIZE),
45+
BLAKE2S_ALG("blake2s-256", "blake2s-256-arm", BLAKE2S_256_HASH_SIZE),
46+
};
47+
48+
static int __init blake2s_arm_mod_init(void)
49+
{
50+
return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
51+
crypto_register_shashes(blake2s_arm_algs,
52+
ARRAY_SIZE(blake2s_arm_algs)) : 0;
53+
}
54+
55+
static void __exit blake2s_arm_mod_exit(void)
56+
{
57+
if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
58+
crypto_unregister_shashes(blake2s_arm_algs,
59+
ARRAY_SIZE(blake2s_arm_algs));
60+
}
61+
62+
module_init(blake2s_arm_mod_init);
63+
module_exit(blake2s_arm_mod_exit);
64+
65+
MODULE_DESCRIPTION("BLAKE2s digest algorithm, ARM scalar implementation");
66+
MODULE_LICENSE("GPL");
67+
MODULE_AUTHOR("Eric Biggers <[email protected]>");
68+
MODULE_ALIAS_CRYPTO("blake2s-128");
69+
MODULE_ALIAS_CRYPTO("blake2s-128-arm");
70+
MODULE_ALIAS_CRYPTO("blake2s-160");
71+
MODULE_ALIAS_CRYPTO("blake2s-160-arm");
72+
MODULE_ALIAS_CRYPTO("blake2s-224");
73+
MODULE_ALIAS_CRYPTO("blake2s-224-arm");
74+
MODULE_ALIAS_CRYPTO("blake2s-256");
75+
MODULE_ALIAS_CRYPTO("blake2s-256-arm");

arch/x86/crypto/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ obj-$(CONFIG_CRYPTO_SHA512_SSSE3) += sha512-ssse3.o
6262
sha512-ssse3-y := sha512-ssse3-asm.o sha512-avx-asm.o sha512-avx2-asm.o sha512_ssse3_glue.o
6363

6464
obj-$(CONFIG_CRYPTO_BLAKE2S_X86) += blake2s-x86_64.o
65-
blake2s-x86_64-y := blake2s-core.o blake2s-glue.o
65+
blake2s-x86_64-y := blake2s-shash.o
66+
obj-$(if $(CONFIG_CRYPTO_BLAKE2S_X86),y) += libblake2s-x86_64.o
67+
libblake2s-x86_64-y := blake2s-core.o blake2s-glue.o
6668

6769
obj-$(CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL) += ghash-clmulni-intel.o
6870
ghash-clmulni-intel-y := ghash-clmulni-intel_asm.o ghash-clmulni-intel_glue.o

arch/x86/crypto/blake2s-glue.c

Lines changed: 6 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
#include <crypto/internal/blake2s.h>
77
#include <crypto/internal/simd.h>
8-
#include <crypto/internal/hash.h>
98

109
#include <linux/types.h>
1110
#include <linux/jump_label.h>
@@ -28,9 +27,8 @@ asmlinkage void blake2s_compress_avx512(struct blake2s_state *state,
2827
static __ro_after_init DEFINE_STATIC_KEY_FALSE(blake2s_use_ssse3);
2928
static __ro_after_init DEFINE_STATIC_KEY_FALSE(blake2s_use_avx512);
3029

31-
void blake2s_compress_arch(struct blake2s_state *state,
32-
const u8 *block, size_t nblocks,
33-
const u32 inc)
30+
void blake2s_compress(struct blake2s_state *state, const u8 *block,
31+
size_t nblocks, const u32 inc)
3432
{
3533
/* SIMD disables preemption, so relax after processing each page. */
3634
BUILD_BUG_ON(SZ_4K / BLAKE2S_BLOCK_SIZE < 8);
@@ -56,49 +54,12 @@ void blake2s_compress_arch(struct blake2s_state *state,
5654
block += blocks * BLAKE2S_BLOCK_SIZE;
5755
} while (nblocks);
5856
}
59-
EXPORT_SYMBOL(blake2s_compress_arch);
60-
61-
static int crypto_blake2s_update_x86(struct shash_desc *desc,
62-
const u8 *in, unsigned int inlen)
63-
{
64-
return crypto_blake2s_update(desc, in, inlen, blake2s_compress_arch);
65-
}
66-
67-
static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out)
68-
{
69-
return crypto_blake2s_final(desc, out, blake2s_compress_arch);
70-
}
71-
72-
#define BLAKE2S_ALG(name, driver_name, digest_size) \
73-
{ \
74-
.base.cra_name = name, \
75-
.base.cra_driver_name = driver_name, \
76-
.base.cra_priority = 200, \
77-
.base.cra_flags = CRYPTO_ALG_OPTIONAL_KEY, \
78-
.base.cra_blocksize = BLAKE2S_BLOCK_SIZE, \
79-
.base.cra_ctxsize = sizeof(struct blake2s_tfm_ctx), \
80-
.base.cra_module = THIS_MODULE, \
81-
.digestsize = digest_size, \
82-
.setkey = crypto_blake2s_setkey, \
83-
.init = crypto_blake2s_init, \
84-
.update = crypto_blake2s_update_x86, \
85-
.final = crypto_blake2s_final_x86, \
86-
.descsize = sizeof(struct blake2s_state), \
87-
}
88-
89-
static struct shash_alg blake2s_algs[] = {
90-
BLAKE2S_ALG("blake2s-128", "blake2s-128-x86", BLAKE2S_128_HASH_SIZE),
91-
BLAKE2S_ALG("blake2s-160", "blake2s-160-x86", BLAKE2S_160_HASH_SIZE),
92-
BLAKE2S_ALG("blake2s-224", "blake2s-224-x86", BLAKE2S_224_HASH_SIZE),
93-
BLAKE2S_ALG("blake2s-256", "blake2s-256-x86", BLAKE2S_256_HASH_SIZE),
94-
};
57+
EXPORT_SYMBOL(blake2s_compress);
9558

9659
static int __init blake2s_mod_init(void)
9760
{
98-
if (!boot_cpu_has(X86_FEATURE_SSSE3))
99-
return 0;
100-
101-
static_branch_enable(&blake2s_use_ssse3);
61+
if (boot_cpu_has(X86_FEATURE_SSSE3))
62+
static_branch_enable(&blake2s_use_ssse3);
10263

10364
if (IS_ENABLED(CONFIG_AS_AVX512) &&
10465
boot_cpu_has(X86_FEATURE_AVX) &&
@@ -109,26 +70,9 @@ static int __init blake2s_mod_init(void)
10970
XFEATURE_MASK_AVX512, NULL))
11071
static_branch_enable(&blake2s_use_avx512);
11172

112-
return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
113-
crypto_register_shashes(blake2s_algs,
114-
ARRAY_SIZE(blake2s_algs)) : 0;
115-
}
116-
117-
static void __exit blake2s_mod_exit(void)
118-
{
119-
if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && boot_cpu_has(X86_FEATURE_SSSE3))
120-
crypto_unregister_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
73+
return 0;
12174
}
12275

12376
module_init(blake2s_mod_init);
124-
module_exit(blake2s_mod_exit);
12577

126-
MODULE_ALIAS_CRYPTO("blake2s-128");
127-
MODULE_ALIAS_CRYPTO("blake2s-128-x86");
128-
MODULE_ALIAS_CRYPTO("blake2s-160");
129-
MODULE_ALIAS_CRYPTO("blake2s-160-x86");
130-
MODULE_ALIAS_CRYPTO("blake2s-224");
131-
MODULE_ALIAS_CRYPTO("blake2s-224-x86");
132-
MODULE_ALIAS_CRYPTO("blake2s-256");
133-
MODULE_ALIAS_CRYPTO("blake2s-256-x86");
13478
MODULE_LICENSE("GPL v2");

arch/x86/crypto/blake2s-shash.c

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// SPDX-License-Identifier: GPL-2.0 OR MIT
2+
/*
3+
* Copyright (C) 2015-2019 Jason A. Donenfeld <[email protected]>. All Rights Reserved.
4+
*/
5+
6+
#include <crypto/internal/blake2s.h>
7+
#include <crypto/internal/simd.h>
8+
#include <crypto/internal/hash.h>
9+
10+
#include <linux/types.h>
11+
#include <linux/kernel.h>
12+
#include <linux/module.h>
13+
#include <linux/sizes.h>
14+
15+
#include <asm/cpufeature.h>
16+
#include <asm/processor.h>
17+
18+
static int crypto_blake2s_update_x86(struct shash_desc *desc,
19+
const u8 *in, unsigned int inlen)
20+
{
21+
return crypto_blake2s_update(desc, in, inlen, blake2s_compress);
22+
}
23+
24+
static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out)
25+
{
26+
return crypto_blake2s_final(desc, out, blake2s_compress);
27+
}
28+
29+
#define BLAKE2S_ALG(name, driver_name, digest_size) \
30+
{ \
31+
.base.cra_name = name, \
32+
.base.cra_driver_name = driver_name, \
33+
.base.cra_priority = 200, \
34+
.base.cra_flags = CRYPTO_ALG_OPTIONAL_KEY, \
35+
.base.cra_blocksize = BLAKE2S_BLOCK_SIZE, \
36+
.base.cra_ctxsize = sizeof(struct blake2s_tfm_ctx), \
37+
.base.cra_module = THIS_MODULE, \
38+
.digestsize = digest_size, \
39+
.setkey = crypto_blake2s_setkey, \
40+
.init = crypto_blake2s_init, \
41+
.update = crypto_blake2s_update_x86, \
42+
.final = crypto_blake2s_final_x86, \
43+
.descsize = sizeof(struct blake2s_state), \
44+
}
45+
46+
static struct shash_alg blake2s_algs[] = {
47+
BLAKE2S_ALG("blake2s-128", "blake2s-128-x86", BLAKE2S_128_HASH_SIZE),
48+
BLAKE2S_ALG("blake2s-160", "blake2s-160-x86", BLAKE2S_160_HASH_SIZE),
49+
BLAKE2S_ALG("blake2s-224", "blake2s-224-x86", BLAKE2S_224_HASH_SIZE),
50+
BLAKE2S_ALG("blake2s-256", "blake2s-256-x86", BLAKE2S_256_HASH_SIZE),
51+
};
52+
53+
static int __init blake2s_mod_init(void)
54+
{
55+
if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && boot_cpu_has(X86_FEATURE_SSSE3))
56+
return crypto_register_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
57+
return 0;
58+
}
59+
60+
static void __exit blake2s_mod_exit(void)
61+
{
62+
if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && boot_cpu_has(X86_FEATURE_SSSE3))
63+
crypto_unregister_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
64+
}
65+
66+
module_init(blake2s_mod_init);
67+
module_exit(blake2s_mod_exit);
68+
69+
MODULE_ALIAS_CRYPTO("blake2s-128");
70+
MODULE_ALIAS_CRYPTO("blake2s-128-x86");
71+
MODULE_ALIAS_CRYPTO("blake2s-160");
72+
MODULE_ALIAS_CRYPTO("blake2s-160-x86");
73+
MODULE_ALIAS_CRYPTO("blake2s-224");
74+
MODULE_ALIAS_CRYPTO("blake2s-224-x86");
75+
MODULE_ALIAS_CRYPTO("blake2s-256");
76+
MODULE_ALIAS_CRYPTO("blake2s-256-x86");
77+
MODULE_LICENSE("GPL v2");

0 commit comments

Comments
 (0)