Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/lib/crypto/arm/sha1.h
49639 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* SHA-1 optimized for ARM
4
*
5
* Copyright 2025 Google LLC
6
*/
7
#include <asm/simd.h>
8
9
static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
10
static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_ce);
11
12
asmlinkage void sha1_block_data_order(struct sha1_block_state *state,
13
const u8 *data, size_t nblocks);
14
asmlinkage void sha1_transform_neon(struct sha1_block_state *state,
15
const u8 *data, size_t nblocks);
16
asmlinkage void sha1_ce_transform(struct sha1_block_state *state,
17
const u8 *data, size_t nblocks);
18
19
static void sha1_blocks(struct sha1_block_state *state,
20
const u8 *data, size_t nblocks)
21
{
22
if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
23
static_branch_likely(&have_neon) && likely(may_use_simd())) {
24
scoped_ksimd() {
25
if (static_branch_likely(&have_ce))
26
sha1_ce_transform(state, data, nblocks);
27
else
28
sha1_transform_neon(state, data, nblocks);
29
}
30
} else {
31
sha1_block_data_order(state, data, nblocks);
32
}
33
}
34
35
#ifdef CONFIG_KERNEL_MODE_NEON
36
#define sha1_mod_init_arch sha1_mod_init_arch
37
static void sha1_mod_init_arch(void)
38
{
39
if (elf_hwcap & HWCAP_NEON) {
40
static_branch_enable(&have_neon);
41
if (elf_hwcap2 & HWCAP2_SHA1)
42
static_branch_enable(&have_ce);
43
}
44
}
45
#endif /* CONFIG_KERNEL_MODE_NEON */
46
47