.. | .. |
---|
23 | 23 | |
---|
24 | 24 | #define CHACHA_KEY_SIZE 32 |
---|
25 | 25 | #define CHACHA_BLOCK_SIZE 64 |
---|
| 26 | +#define CHACHAPOLY_IV_SIZE 12 |
---|
26 | 27 | |
---|
27 | 28 | #define CHACHA_STATE_WORDS (CHACHA_BLOCK_SIZE / sizeof(u32)) |
---|
28 | 29 | |
---|
.. | .. |
---|
46 | 47 | hchacha_block_generic(state, out, nrounds); |
---|
47 | 48 | } |
---|
48 | 49 | |
---|
| 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 | + |
---|
49 | 65 | void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv); |
---|
50 | 66 | static inline void chacha_init_generic(u32 *state, const u32 *key, const u8 *iv) |
---|
51 | 67 | { |
---|
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); |
---|
56 | 69 | state[4] = key[0]; |
---|
57 | 70 | state[5] = key[1]; |
---|
58 | 71 | state[6] = key[2]; |
---|