32 uint32_t x00 = input[0];
33 uint32_t x01 = input[1];
34 uint32_t x02 = input[2];
35 uint32_t x03 = input[3];
36 uint32_t x04 = input[4];
37 uint32_t x05 = input[5];
38 uint32_t x06 = input[6];
39 uint32_t x07 = input[7];
40 uint32_t x08 = input[8];
41 uint32_t x09 = input[9];
42 uint32_t x10 = input[10];
43 uint32_t x11 = input[11];
44 uint32_t x12 = input[12];
45 uint32_t x13 = input[13];
46 uint32_t x14 = input[14];
47 uint32_t x15 = input[15];
49 for(
size_t i = 0; i != 10; ++i) {
50 salsa20_quarter_round(x00, x04, x08, x12);
51 salsa20_quarter_round(x05, x09, x13, x01);
52 salsa20_quarter_round(x10, x14, x02, x06);
53 salsa20_quarter_round(x15, x03, x07, x11);
55 salsa20_quarter_round(x00, x01, x02, x03);
56 salsa20_quarter_round(x05, x06, x07, x04);
57 salsa20_quarter_round(x10, x11, x08, x09);
58 salsa20_quarter_round(x15, x12, x13, x14);
78 uint32_t x00 = input[0];
79 uint32_t x01 = input[1];
80 uint32_t x02 = input[2];
81 uint32_t x03 = input[3];
82 uint32_t x04 = input[4];
83 uint32_t x05 = input[5];
84 uint32_t x06 = input[6];
85 uint32_t x07 = input[7];
86 uint32_t x08 = input[8];
87 uint32_t x09 = input[9];
88 uint32_t x10 = input[10];
89 uint32_t x11 = input[11];
90 uint32_t x12 = input[12];
91 uint32_t x13 = input[13];
92 uint32_t x14 = input[14];
93 uint32_t x15 = input[15];
95 for(
size_t i = 0; i != rounds / 2; ++i) {
96 salsa20_quarter_round(x00, x04, x08, x12);
97 salsa20_quarter_round(x05, x09, x13, x01);
98 salsa20_quarter_round(x10, x14, x02, x06);
99 salsa20_quarter_round(x15, x03, x07, x11);
101 salsa20_quarter_round(x00, x01, x02, x03);
102 salsa20_quarter_round(x05, x06, x07, x04);
103 salsa20_quarter_round(x10, x11, x08, x09);
104 salsa20_quarter_round(x15, x12, x13, x14);
107 store_le(x00 + input[0], output + 4 * 0);
108 store_le(x01 + input[1], output + 4 * 1);
109 store_le(x02 + input[2], output + 4 * 2);
110 store_le(x03 + input[3], output + 4 * 3);
111 store_le(x04 + input[4], output + 4 * 4);
112 store_le(x05 + input[5], output + 4 * 5);
113 store_le(x06 + input[6], output + 4 * 6);
114 store_le(x07 + input[7], output + 4 * 7);
115 store_le(x08 + input[8], output + 4 * 8);
116 store_le(x09 + input[9], output + 4 * 9);
117 store_le(x10 + input[10], output + 4 * 10);
118 store_le(x11 + input[11], output + 4 * 11);
119 store_le(x12 + input[12], output + 4 * 12);
120 store_le(x13 + input[13], output + 4 * 13);
121 store_le(x14 + input[14], output + 4 * 14);
122 store_le(x15 + input[15], output + 4 * 15);
131 while(length >= m_buffer.size() - m_position) {
132 const size_t available = m_buffer.size() - m_position;
134 xor_buf(out, in, &m_buffer[m_position], available);
135 salsa_core(m_buffer.data(), m_state.data(), 20);
138 if(m_state[8] == 0) {
149 xor_buf(out, in, &m_buffer[m_position], length);
151 m_position += length;