Skip to content

Commit 3cce6fd

Browse files
committed
updated comments for readability and placed tables at top
1 parent f149cf6 commit 3cce6fd

File tree

1 file changed

+52
-62
lines changed

1 file changed

+52
-62
lines changed

hashing/ripemd_160.cpp

Lines changed: 52 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@
1212
* others. RIPEMD-160 is used in some cryptocurrencies and blockchain
1313
* technologies as part of their hashing mechanisms.
1414
*
15+
* The r and r' table specifies the order in which 4-byte words of the current
16+
* 512-bits block are accessed and processed in each step of the compression
17+
* function. It introduces non-linearity to the code. The r table is utilised by
18+
* one of the parallel path and the r' table by the other.
19+
*
20+
* The s and s' table dtermines the number of bits to cyclically shift (left
21+
* rotate) the result of each step. The different shift values prevent patterns
22+
* from emerging in the output, which is crucial for achieving properties like
23+
* the avalanche effect (where a small change in the input results in a
24+
* large change in the output). The s table is utilised by
25+
* one of the parallel path and these s' table by the other.
26+
*
1527
* Produces a fixed-size output of 160 bits (20 bytes), which is commonly
1628
* represented as a 40-character hexadecimal string.
1729
*
@@ -45,6 +57,46 @@ namespace hashing {
4557
*/
4658
class RIPEMD160 {
4759
private:
60+
/**
61+
* @brief Implements the r table
62+
*/
63+
static constexpr int r[80] = {
64+
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
65+
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
66+
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67+
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
68+
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13};
69+
70+
/**
71+
* @brief Implements the r' table
72+
*/
73+
static constexpr int r_dash[80] = {
74+
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
75+
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
76+
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
77+
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
78+
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11};
79+
80+
/**
81+
* @brief Implements the s table
82+
*/
83+
static constexpr int s[80] = {
84+
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
85+
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
86+
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
87+
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
88+
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6};
89+
90+
/**
91+
* @brief Implements the s' table
92+
*/
93+
static constexpr int s_dash[80] = {
94+
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
95+
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
96+
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
97+
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
98+
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11};
99+
48100
/**
49101
* @brief Implements f(j,B,C,D)
50102
* @param j Round number j / 16
@@ -115,68 +167,6 @@ class RIPEMD160 {
115167
}
116168
}
117169

118-
/**
119-
* @brief Specifies r value for a given j.
120-
*
121-
* @details Specifies the order in which 4-byte words of the current
122-
* 512-bits block are accessed and processed in each step of the compression
123-
* function. Introduces non-linearity to the code. It is used by one of the
124-
* parallel path.
125-
*/
126-
static constexpr int r[80] = {
127-
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
128-
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
129-
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
130-
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
131-
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13};
132-
133-
/**
134-
* @brief Specifies the r' value a given j.
135-
*
136-
* @details Specifies the order in which 4-byte words of the current
137-
* 512-bits block are accessed and processed in each step of the compression
138-
* function. Introduces non-linearity to the code. It is used in the other
139-
* parallel path.
140-
*/
141-
static constexpr int r_dash[80] = {
142-
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
143-
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
144-
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
145-
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
146-
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11};
147-
148-
/**
149-
* @brief Specifies the s value for a given j.
150-
*
151-
* @details Determines the number of bits to cyclically shift (left rotate)
152-
* the result of each step. The different shift values prevent patterns from
153-
* emerging in the output, which is crucial for achieving properties like
154-
* the avalanche effect (where a small change in the input results in a
155-
* large change in the output). It is used by one of the parallel path.
156-
*/
157-
static constexpr int s[80] = {
158-
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
159-
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
160-
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
161-
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
162-
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6};
163-
164-
/**
165-
* @brief Specifies the s' value for a given j.
166-
*
167-
* @details Determines the number of bits to cyclically shift (left rotate)
168-
* the result of each step. The different shift values prevent patterns from
169-
* emerging in the output, which is crucial for achieving properties like
170-
* the avalanche effect (where a small change in the input results in a
171-
* large change in the output). It is used in the other parallel path.
172-
*/
173-
static constexpr int s_dash[80] = {
174-
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
175-
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
176-
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
177-
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
178-
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11};
179-
180170
/**
181171
* @brief converts string data to vector of uint32_t (4 byte words)
182172
* @details converts the string to 4 byte words in little endian format

0 commit comments

Comments
 (0)