hc
2024-02-20 e636c8d336489bf3eed5878299e6cc045bbad077
kernel/include/crypto/internal/blake2s.h
....@@ -11,11 +11,11 @@
1111 #include <crypto/internal/hash.h>
1212 #include <linux/string.h>
1313
14
-void blake2s_compress_generic(struct blake2s_state *state,const u8 *block,
14
+void blake2s_compress_generic(struct blake2s_state *state, const u8 *block,
1515 size_t nblocks, const u32 inc);
1616
17
-void blake2s_compress_arch(struct blake2s_state *state,const u8 *block,
18
- size_t nblocks, const u32 inc);
17
+void blake2s_compress(struct blake2s_state *state, const u8 *block,
18
+ size_t nblocks, const u32 inc);
1919
2020 bool blake2s_selftest(void);
2121
....@@ -24,14 +24,11 @@
2424 state->f[0] = -1;
2525 }
2626
27
-typedef void (*blake2s_compress_t)(struct blake2s_state *state,
28
- const u8 *block, size_t nblocks, u32 inc);
29
-
3027 /* Helper functions for BLAKE2s shared by the library and shash APIs */
3128
32
-static inline void __blake2s_update(struct blake2s_state *state,
33
- const u8 *in, size_t inlen,
34
- blake2s_compress_t compress)
29
+static __always_inline void
30
+__blake2s_update(struct blake2s_state *state, const u8 *in, size_t inlen,
31
+ bool force_generic)
3532 {
3633 const size_t fill = BLAKE2S_BLOCK_SIZE - state->buflen;
3734
....@@ -39,7 +36,12 @@
3936 return;
4037 if (inlen > fill) {
4138 memcpy(state->buf + state->buflen, in, fill);
42
- (*compress)(state, state->buf, 1, BLAKE2S_BLOCK_SIZE);
39
+ if (force_generic)
40
+ blake2s_compress_generic(state, state->buf, 1,
41
+ BLAKE2S_BLOCK_SIZE);
42
+ else
43
+ blake2s_compress(state, state->buf, 1,
44
+ BLAKE2S_BLOCK_SIZE);
4345 state->buflen = 0;
4446 in += fill;
4547 inlen -= fill;
....@@ -47,7 +49,12 @@
4749 if (inlen > BLAKE2S_BLOCK_SIZE) {
4850 const size_t nblocks = DIV_ROUND_UP(inlen, BLAKE2S_BLOCK_SIZE);
4951 /* Hash one less (full) block than strictly possible */
50
- (*compress)(state, in, nblocks - 1, BLAKE2S_BLOCK_SIZE);
52
+ if (force_generic)
53
+ blake2s_compress_generic(state, in, nblocks - 1,
54
+ BLAKE2S_BLOCK_SIZE);
55
+ else
56
+ blake2s_compress(state, in, nblocks - 1,
57
+ BLAKE2S_BLOCK_SIZE);
5158 in += BLAKE2S_BLOCK_SIZE * (nblocks - 1);
5259 inlen -= BLAKE2S_BLOCK_SIZE * (nblocks - 1);
5360 }
....@@ -55,13 +62,16 @@
5562 state->buflen += inlen;
5663 }
5764
58
-static inline void __blake2s_final(struct blake2s_state *state, u8 *out,
59
- blake2s_compress_t compress)
65
+static __always_inline void
66
+__blake2s_final(struct blake2s_state *state, u8 *out, bool force_generic)
6067 {
6168 blake2s_set_lastblock(state);
6269 memset(state->buf + state->buflen, 0,
6370 BLAKE2S_BLOCK_SIZE - state->buflen); /* Padding */
64
- (*compress)(state, state->buf, 1, state->buflen);
71
+ if (force_generic)
72
+ blake2s_compress_generic(state, state->buf, 1, state->buflen);
73
+ else
74
+ blake2s_compress(state, state->buf, 1, state->buflen);
6575 cpu_to_le32_array(state->h, ARRAY_SIZE(state->h));
6676 memcpy(out, state->h, state->outlen);
6777 }
....@@ -99,20 +109,20 @@
99109
100110 static inline int crypto_blake2s_update(struct shash_desc *desc,
101111 const u8 *in, unsigned int inlen,
102
- blake2s_compress_t compress)
112
+ bool force_generic)
103113 {
104114 struct blake2s_state *state = shash_desc_ctx(desc);
105115
106
- __blake2s_update(state, in, inlen, compress);
116
+ __blake2s_update(state, in, inlen, force_generic);
107117 return 0;
108118 }
109119
110120 static inline int crypto_blake2s_final(struct shash_desc *desc, u8 *out,
111
- blake2s_compress_t compress)
121
+ bool force_generic)
112122 {
113123 struct blake2s_state *state = shash_desc_ctx(desc);
114124
115
- __blake2s_final(state, out, compress);
125
+ __blake2s_final(state, out, force_generic);
116126 return 0;
117127 }
118128