hc
2024-01-31 f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2
kernel/include/crypto/chacha.h
....@@ -23,6 +23,7 @@
2323
2424 #define CHACHA_KEY_SIZE 32
2525 #define CHACHA_BLOCK_SIZE 64
26
+#define CHACHAPOLY_IV_SIZE 12
2627
2728 #define CHACHA_STATE_WORDS (CHACHA_BLOCK_SIZE / sizeof(u32))
2829
....@@ -46,13 +47,25 @@
4647 hchacha_block_generic(state, out, nrounds);
4748 }
4849
50
+enum chacha_constants { /* expand 32-byte k */
51
+ CHACHA_CONSTANT_EXPA = 0x61707865U,
52
+ CHACHA_CONSTANT_ND_3 = 0x3320646eU,
53
+ CHACHA_CONSTANT_2_BY = 0x79622d32U,
54
+ CHACHA_CONSTANT_TE_K = 0x6b206574U
55
+};
56
+
57
+static inline void chacha_init_consts(u32 *state)
58
+{
59
+ state[0] = CHACHA_CONSTANT_EXPA;
60
+ state[1] = CHACHA_CONSTANT_ND_3;
61
+ state[2] = CHACHA_CONSTANT_2_BY;
62
+ state[3] = CHACHA_CONSTANT_TE_K;
63
+}
64
+
4965 void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv);
5066 static inline void chacha_init_generic(u32 *state, const u32 *key, const u8 *iv)
5167 {
52
- state[0] = 0x61707865; /* "expa" */
53
- state[1] = 0x3320646e; /* "nd 3" */
54
- state[2] = 0x79622d32; /* "2-by" */
55
- state[3] = 0x6b206574; /* "te k" */
68
+ chacha_init_consts(state);
5669 state[4] = key[0];
5770 state[5] = key[1];
5871 state[6] = key[2];