ripemd160.bend
bend-osdev-hashes@0.1.0.0 · 396 lines · 13 definitions
1
2
3
4
5
6
7
8
9
10
11
12import Base
13import bend-osdev-bytes@0.1.0.0/bytes.bend as B
14import bend-osdev-hashes@0.1.0.0/hashes.bend as Hs
15
16
17
18def hs.rmd.f1(x: U32, y: U32, z: U32) -> U32:
19 U32.xor(U32.xor(x, y), z)
20
21def hs.rmd.f2(+x: U32, y: U32, z: U32) -> U32:
22 U32.or(U32.and(x, y), U32.and(U32.not(x), z))
23
24def hs.rmd.f3(x: U32, y: U32, z: U32) -> U32:
25 U32.xor(U32.or(x, U32.not(y)), z)
26
27def hs.rmd.f4(x: U32, y: U32, +z: U32) -> U32:
28 U32.or(U32.and(x, z), U32.and(y, U32.not(z)))
29
30def hs.rmd.f5(x: U32, y: U32, z: U32) -> U32:
31 U32.xor(x, U32.or(y, U32.not(z)))
32
33
34def hs.rmd.step(a: U32, f: U32, x: U32, k: U32, +s: Nat, e: U32) -> U32:
35 U32.add(Hs.hs.rotl(U32.add(U32.add(a, f), U32.add(x, k)), s), e)
36
37
38def hs.ripemd160.rounds(x: Hs.HsW16, cv: Hs.HsW5) -> Hs.HsW5:
39 match x cv:
40 case Hs.HsW16{+x0, +x1, +x2, +x3, +x4, +x5, +x6, +x7, +x8, +x9, +x10, +x11, +x12, +x13, +x14, +x15} Hs.HsW5{+h0, +h1, +h2, +h3, +h4}:
41
42 +v1 = hs.rmd.step(h0, hs.rmd.f1(h1, h2, h3), x0, 0, 11n, h4)
43 +v2 = Hs.hs.rotl(h2, 10n)
44 +v3 = hs.rmd.step(h4, hs.rmd.f1(v1, h1, v2), x1, 0, 14n, h3)
45 +v4 = Hs.hs.rotl(h1, 10n)
46 +v5 = hs.rmd.step(h3, hs.rmd.f1(v3, v1, v4), x2, 0, 15n, v2)
47 +v6 = Hs.hs.rotl(v1, 10n)
48 +v7 = hs.rmd.step(v2, hs.rmd.f1(v5, v3, v6), x3, 0, 12n, v4)
49 +v8 = Hs.hs.rotl(v3, 10n)
50 +v9 = hs.rmd.step(v4, hs.rmd.f1(v7, v5, v8), x4, 0, 5n, v6)
51 +v10 = Hs.hs.rotl(v5, 10n)
52 +v11 = hs.rmd.step(v6, hs.rmd.f1(v9, v7, v10), x5, 0, 8n, v8)
53 +v12 = Hs.hs.rotl(v7, 10n)
54 +v13 = hs.rmd.step(v8, hs.rmd.f1(v11, v9, v12), x6, 0, 7n, v10)
55 +v14 = Hs.hs.rotl(v9, 10n)
56 +v15 = hs.rmd.step(v10, hs.rmd.f1(v13, v11, v14), x7, 0, 9n, v12)
57 +v16 = Hs.hs.rotl(v11, 10n)
58 +v17 = hs.rmd.step(v12, hs.rmd.f1(v15, v13, v16), x8, 0, 11n, v14)
59 +v18 = Hs.hs.rotl(v13, 10n)
60 +v19 = hs.rmd.step(v14, hs.rmd.f1(v17, v15, v18), x9, 0, 13n, v16)
61 +v20 = Hs.hs.rotl(v15, 10n)
62 +v21 = hs.rmd.step(v16, hs.rmd.f1(v19, v17, v20), x10, 0, 14n, v18)
63 +v22 = Hs.hs.rotl(v17, 10n)
64 +v23 = hs.rmd.step(v18, hs.rmd.f1(v21, v19, v22), x11, 0, 15n, v20)
65 +v24 = Hs.hs.rotl(v19, 10n)
66 +v25 = hs.rmd.step(v20, hs.rmd.f1(v23, v21, v24), x12, 0, 6n, v22)
67 +v26 = Hs.hs.rotl(v21, 10n)
68 +v27 = hs.rmd.step(v22, hs.rmd.f1(v25, v23, v26), x13, 0, 7n, v24)
69 +v28 = Hs.hs.rotl(v23, 10n)
70 +v29 = hs.rmd.step(v24, hs.rmd.f1(v27, v25, v28), x14, 0, 9n, v26)
71 +v30 = Hs.hs.rotl(v25, 10n)
72 +v31 = hs.rmd.step(v26, hs.rmd.f1(v29, v27, v30), x15, 0, 8n, v28)
73 +v32 = Hs.hs.rotl(v27, 10n)
74
75 +v33 = hs.rmd.step(v28, hs.rmd.f2(v31, v29, v32), x7, 1518500249, 7n, v30)
76 +v34 = Hs.hs.rotl(v29, 10n)
77 +v35 = hs.rmd.step(v30, hs.rmd.f2(v33, v31, v34), x4, 1518500249, 6n, v32)
78 +v36 = Hs.hs.rotl(v31, 10n)
79 +v37 = hs.rmd.step(v32, hs.rmd.f2(v35, v33, v36), x13, 1518500249, 8n, v34)
80 +v38 = Hs.hs.rotl(v33, 10n)
81 +v39 = hs.rmd.step(v34, hs.rmd.f2(v37, v35, v38), x1, 1518500249, 13n, v36)
82 +v40 = Hs.hs.rotl(v35, 10n)
83 +v41 = hs.rmd.step(v36, hs.rmd.f2(v39, v37, v40), x10, 1518500249, 11n, v38)
84 +v42 = Hs.hs.rotl(v37, 10n)
85 +v43 = hs.rmd.step(v38, hs.rmd.f2(v41, v39, v42), x6, 1518500249, 9n, v40)
86 +v44 = Hs.hs.rotl(v39, 10n)
87 +v45 = hs.rmd.step(v40, hs.rmd.f2(v43, v41, v44), x15, 1518500249, 7n, v42)
88 +v46 = Hs.hs.rotl(v41, 10n)
89 +v47 = hs.rmd.step(v42, hs.rmd.f2(v45, v43, v46), x3, 1518500249, 15n, v44)
90 +v48 = Hs.hs.rotl(v43, 10n)
91 +v49 = hs.rmd.step(v44, hs.rmd.f2(v47, v45, v48), x12, 1518500249, 7n, v46)
92 +v50 = Hs.hs.rotl(v45, 10n)
93 +v51 = hs.rmd.step(v46, hs.rmd.f2(v49, v47, v50), x0, 1518500249, 12n, v48)
94 +v52 = Hs.hs.rotl(v47, 10n)
95 +v53 = hs.rmd.step(v48, hs.rmd.f2(v51, v49, v52), x9, 1518500249, 15n, v50)
96 +v54 = Hs.hs.rotl(v49, 10n)
97 +v55 = hs.rmd.step(v50, hs.rmd.f2(v53, v51, v54), x5, 1518500249, 9n, v52)
98 +v56 = Hs.hs.rotl(v51, 10n)
99 +v57 = hs.rmd.step(v52, hs.rmd.f2(v55, v53, v56), x2, 1518500249, 11n, v54)
100 +v58 = Hs.hs.rotl(v53, 10n)
101 +v59 = hs.rmd.step(v54, hs.rmd.f2(v57, v55, v58), x14, 1518500249, 7n, v56)
102 +v60 = Hs.hs.rotl(v55, 10n)
103 +v61 = hs.rmd.step(v56, hs.rmd.f2(v59, v57, v60), x11, 1518500249, 13n, v58)
104 +v62 = Hs.hs.rotl(v57, 10n)
105 +v63 = hs.rmd.step(v58, hs.rmd.f2(v61, v59, v62), x8, 1518500249, 12n, v60)
106 +v64 = Hs.hs.rotl(v59, 10n)
107
108 +v65 = hs.rmd.step(v60, hs.rmd.f3(v63, v61, v64), x3, 1859775393, 11n, v62)
109 +v66 = Hs.hs.rotl(v61, 10n)
110 +v67 = hs.rmd.step(v62, hs.rmd.f3(v65, v63, v66), x10, 1859775393, 13n, v64)
111 +v68 = Hs.hs.rotl(v63, 10n)
112 +v69 = hs.rmd.step(v64, hs.rmd.f3(v67, v65, v68), x14, 1859775393, 6n, v66)
113 +v70 = Hs.hs.rotl(v65, 10n)
114 +v71 = hs.rmd.step(v66, hs.rmd.f3(v69, v67, v70), x4, 1859775393, 7n, v68)
115 +v72 = Hs.hs.rotl(v67, 10n)
116 +v73 = hs.rmd.step(v68, hs.rmd.f3(v71, v69, v72), x9, 1859775393, 14n, v70)
117 +v74 = Hs.hs.rotl(v69, 10n)
118 +v75 = hs.rmd.step(v70, hs.rmd.f3(v73, v71, v74), x15, 1859775393, 9n, v72)
119 +v76 = Hs.hs.rotl(v71, 10n)
120 +v77 = hs.rmd.step(v72, hs.rmd.f3(v75, v73, v76), x8, 1859775393, 13n, v74)
121 +v78 = Hs.hs.rotl(v73, 10n)
122 +v79 = hs.rmd.step(v74, hs.rmd.f3(v77, v75, v78), x1, 1859775393, 15n, v76)
123 +v80 = Hs.hs.rotl(v75, 10n)
124 +v81 = hs.rmd.step(v76, hs.rmd.f3(v79, v77, v80), x2, 1859775393, 14n, v78)
125 +v82 = Hs.hs.rotl(v77, 10n)
126 +v83 = hs.rmd.step(v78, hs.rmd.f3(v81, v79, v82), x7, 1859775393, 8n, v80)
127 +v84 = Hs.hs.rotl(v79, 10n)
128 +v85 = hs.rmd.step(v80, hs.rmd.f3(v83, v81, v84), x0, 1859775393, 13n, v82)
129 +v86 = Hs.hs.rotl(v81, 10n)
130 +v87 = hs.rmd.step(v82, hs.rmd.f3(v85, v83, v86), x6, 1859775393, 6n, v84)
131 +v88 = Hs.hs.rotl(v83, 10n)
132 +v89 = hs.rmd.step(v84, hs.rmd.f3(v87, v85, v88), x13, 1859775393, 5n, v86)
133 +v90 = Hs.hs.rotl(v85, 10n)
134 +v91 = hs.rmd.step(v86, hs.rmd.f3(v89, v87, v90), x11, 1859775393, 12n, v88)
135 +v92 = Hs.hs.rotl(v87, 10n)
136 +v93 = hs.rmd.step(v88, hs.rmd.f3(v91, v89, v92), x5, 1859775393, 7n, v90)
137 +v94 = Hs.hs.rotl(v89, 10n)
138 +v95 = hs.rmd.step(v90, hs.rmd.f3(v93, v91, v94), x12, 1859775393, 5n, v92)
139 +v96 = Hs.hs.rotl(v91, 10n)
140
141 +v97 = hs.rmd.step(v92, hs.rmd.f4(v95, v93, v96), x1, 2400959708, 11n, v94)
142 +v98 = Hs.hs.rotl(v93, 10n)
143 +v99 = hs.rmd.step(v94, hs.rmd.f4(v97, v95, v98), x9, 2400959708, 12n, v96)
144 +v100 = Hs.hs.rotl(v95, 10n)
145 +v101 = hs.rmd.step(v96, hs.rmd.f4(v99, v97, v100), x11, 2400959708, 14n, v98)
146 +v102 = Hs.hs.rotl(v97, 10n)
147 +v103 = hs.rmd.step(v98, hs.rmd.f4(v101, v99, v102), x10, 2400959708, 15n, v100)
148 +v104 = Hs.hs.rotl(v99, 10n)
149 +v105 = hs.rmd.step(v100, hs.rmd.f4(v103, v101, v104), x0, 2400959708, 14n, v102)
150 +v106 = Hs.hs.rotl(v101, 10n)
151 +v107 = hs.rmd.step(v102, hs.rmd.f4(v105, v103, v106), x8, 2400959708, 15n, v104)
152 +v108 = Hs.hs.rotl(v103, 10n)
153 +v109 = hs.rmd.step(v104, hs.rmd.f4(v107, v105, v108), x12, 2400959708, 9n, v106)
154 +v110 = Hs.hs.rotl(v105, 10n)
155 +v111 = hs.rmd.step(v106, hs.rmd.f4(v109, v107, v110), x4, 2400959708, 8n, v108)
156 +v112 = Hs.hs.rotl(v107, 10n)
157 +v113 = hs.rmd.step(v108, hs.rmd.f4(v111, v109, v112), x13, 2400959708, 9n, v110)
158 +v114 = Hs.hs.rotl(v109, 10n)
159 +v115 = hs.rmd.step(v110, hs.rmd.f4(v113, v111, v114), x3, 2400959708, 14n, v112)
160 +v116 = Hs.hs.rotl(v111, 10n)
161 +v117 = hs.rmd.step(v112, hs.rmd.f4(v115, v113, v116), x7, 2400959708, 5n, v114)
162 +v118 = Hs.hs.rotl(v113, 10n)
163 +v119 = hs.rmd.step(v114, hs.rmd.f4(v117, v115, v118), x15, 2400959708, 6n, v116)
164 +v120 = Hs.hs.rotl(v115, 10n)
165 +v121 = hs.rmd.step(v116, hs.rmd.f4(v119, v117, v120), x14, 2400959708, 8n, v118)
166 +v122 = Hs.hs.rotl(v117, 10n)
167 +v123 = hs.rmd.step(v118, hs.rmd.f4(v121, v119, v122), x5, 2400959708, 6n, v120)
168 +v124 = Hs.hs.rotl(v119, 10n)
169 +v125 = hs.rmd.step(v120, hs.rmd.f4(v123, v121, v124), x6, 2400959708, 5n, v122)
170 +v126 = Hs.hs.rotl(v121, 10n)
171 +v127 = hs.rmd.step(v122, hs.rmd.f4(v125, v123, v126), x2, 2400959708, 12n, v124)
172 +v128 = Hs.hs.rotl(v123, 10n)
173
174 +v129 = hs.rmd.step(v124, hs.rmd.f5(v127, v125, v128), x4, 2840853838, 9n, v126)
175 +v130 = Hs.hs.rotl(v125, 10n)
176 +v131 = hs.rmd.step(v126, hs.rmd.f5(v129, v127, v130), x0, 2840853838, 15n, v128)
177 +v132 = Hs.hs.rotl(v127, 10n)
178 +v133 = hs.rmd.step(v128, hs.rmd.f5(v131, v129, v132), x5, 2840853838, 5n, v130)
179 +v134 = Hs.hs.rotl(v129, 10n)
180 +v135 = hs.rmd.step(v130, hs.rmd.f5(v133, v131, v134), x9, 2840853838, 11n, v132)
181 +v136 = Hs.hs.rotl(v131, 10n)
182 +v137 = hs.rmd.step(v132, hs.rmd.f5(v135, v133, v136), x7, 2840853838, 6n, v134)
183 +v138 = Hs.hs.rotl(v133, 10n)
184 +v139 = hs.rmd.step(v134, hs.rmd.f5(v137, v135, v138), x12, 2840853838, 8n, v136)
185 +v140 = Hs.hs.rotl(v135, 10n)
186 +v141 = hs.rmd.step(v136, hs.rmd.f5(v139, v137, v140), x2, 2840853838, 13n, v138)
187 +v142 = Hs.hs.rotl(v137, 10n)
188 +v143 = hs.rmd.step(v138, hs.rmd.f5(v141, v139, v142), x10, 2840853838, 12n, v140)
189 +v144 = Hs.hs.rotl(v139, 10n)
190 +v145 = hs.rmd.step(v140, hs.rmd.f5(v143, v141, v144), x14, 2840853838, 5n, v142)
191 +v146 = Hs.hs.rotl(v141, 10n)
192 +v147 = hs.rmd.step(v142, hs.rmd.f5(v145, v143, v146), x1, 2840853838, 12n, v144)
193 +v148 = Hs.hs.rotl(v143, 10n)
194 +v149 = hs.rmd.step(v144, hs.rmd.f5(v147, v145, v148), x3, 2840853838, 13n, v146)
195 +v150 = Hs.hs.rotl(v145, 10n)
196 +v151 = hs.rmd.step(v146, hs.rmd.f5(v149, v147, v150), x8, 2840853838, 14n, v148)
197 +v152 = Hs.hs.rotl(v147, 10n)
198 +v153 = hs.rmd.step(v148, hs.rmd.f5(v151, v149, v152), x11, 2840853838, 11n, v150)
199 +v154 = Hs.hs.rotl(v149, 10n)
200 +v155 = hs.rmd.step(v150, hs.rmd.f5(v153, v151, v154), x6, 2840853838, 8n, v152)
201 +v156 = Hs.hs.rotl(v151, 10n)
202 +v157 = hs.rmd.step(v152, hs.rmd.f5(v155, v153, v156), x15, 2840853838, 5n, v154)
203 +v158 = Hs.hs.rotl(v153, 10n)
204 +v159 = hs.rmd.step(v154, hs.rmd.f5(v157, v155, v158), x13, 2840853838, 6n, v156)
205 +v160 = Hs.hs.rotl(v155, 10n)
206
207 +v161 = hs.rmd.step(h0, hs.rmd.f5(h1, h2, h3), x5, 1352829926, 8n, h4)
208 +v162 = Hs.hs.rotl(h2, 10n)
209 +v163 = hs.rmd.step(h4, hs.rmd.f5(v161, h1, v162), x14, 1352829926, 9n, h3)
210 +v164 = Hs.hs.rotl(h1, 10n)
211 +v165 = hs.rmd.step(h3, hs.rmd.f5(v163, v161, v164), x7, 1352829926, 9n, v162)
212 +v166 = Hs.hs.rotl(v161, 10n)
213 +v167 = hs.rmd.step(v162, hs.rmd.f5(v165, v163, v166), x0, 1352829926, 11n, v164)
214 +v168 = Hs.hs.rotl(v163, 10n)
215 +v169 = hs.rmd.step(v164, hs.rmd.f5(v167, v165, v168), x9, 1352829926, 13n, v166)
216 +v170 = Hs.hs.rotl(v165, 10n)
217 +v171 = hs.rmd.step(v166, hs.rmd.f5(v169, v167, v170), x2, 1352829926, 15n, v168)
218 +v172 = Hs.hs.rotl(v167, 10n)
219 +v173 = hs.rmd.step(v168, hs.rmd.f5(v171, v169, v172), x11, 1352829926, 15n, v170)
220 +v174 = Hs.hs.rotl(v169, 10n)
221 +v175 = hs.rmd.step(v170, hs.rmd.f5(v173, v171, v174), x4, 1352829926, 5n, v172)
222 +v176 = Hs.hs.rotl(v171, 10n)
223 +v177 = hs.rmd.step(v172, hs.rmd.f5(v175, v173, v176), x13, 1352829926, 7n, v174)
224 +v178 = Hs.hs.rotl(v173, 10n)
225 +v179 = hs.rmd.step(v174, hs.rmd.f5(v177, v175, v178), x6, 1352829926, 7n, v176)
226 +v180 = Hs.hs.rotl(v175, 10n)
227 +v181 = hs.rmd.step(v176, hs.rmd.f5(v179, v177, v180), x15, 1352829926, 8n, v178)
228 +v182 = Hs.hs.rotl(v177, 10n)
229 +v183 = hs.rmd.step(v178, hs.rmd.f5(v181, v179, v182), x8, 1352829926, 11n, v180)
230 +v184 = Hs.hs.rotl(v179, 10n)
231 +v185 = hs.rmd.step(v180, hs.rmd.f5(v183, v181, v184), x1, 1352829926, 14n, v182)
232 +v186 = Hs.hs.rotl(v181, 10n)
233 +v187 = hs.rmd.step(v182, hs.rmd.f5(v185, v183, v186), x10, 1352829926, 14n, v184)
234 +v188 = Hs.hs.rotl(v183, 10n)
235 +v189 = hs.rmd.step(v184, hs.rmd.f5(v187, v185, v188), x3, 1352829926, 12n, v186)
236 +v190 = Hs.hs.rotl(v185, 10n)
237 +v191 = hs.rmd.step(v186, hs.rmd.f5(v189, v187, v190), x12, 1352829926, 6n, v188)
238 +v192 = Hs.hs.rotl(v187, 10n)
239
240 +v193 = hs.rmd.step(v188, hs.rmd.f4(v191, v189, v192), x6, 1548603684, 9n, v190)
241 +v194 = Hs.hs.rotl(v189, 10n)
242 +v195 = hs.rmd.step(v190, hs.rmd.f4(v193, v191, v194), x11, 1548603684, 13n, v192)
243 +v196 = Hs.hs.rotl(v191, 10n)
244 +v197 = hs.rmd.step(v192, hs.rmd.f4(v195, v193, v196), x3, 1548603684, 15n, v194)
245 +v198 = Hs.hs.rotl(v193, 10n)
246 +v199 = hs.rmd.step(v194, hs.rmd.f4(v197, v195, v198), x7, 1548603684, 7n, v196)
247 +v200 = Hs.hs.rotl(v195, 10n)
248 +v201 = hs.rmd.step(v196, hs.rmd.f4(v199, v197, v200), x0, 1548603684, 12n, v198)
249 +v202 = Hs.hs.rotl(v197, 10n)
250 +v203 = hs.rmd.step(v198, hs.rmd.f4(v201, v199, v202), x13, 1548603684, 8n, v200)
251 +v204 = Hs.hs.rotl(v199, 10n)
252 +v205 = hs.rmd.step(v200, hs.rmd.f4(v203, v201, v204), x5, 1548603684, 9n, v202)
253 +v206 = Hs.hs.rotl(v201, 10n)
254 +v207 = hs.rmd.step(v202, hs.rmd.f4(v205, v203, v206), x10, 1548603684, 11n, v204)
255 +v208 = Hs.hs.rotl(v203, 10n)
256 +v209 = hs.rmd.step(v204, hs.rmd.f4(v207, v205, v208), x14, 1548603684, 7n, v206)
257 +v210 = Hs.hs.rotl(v205, 10n)
258 +v211 = hs.rmd.step(v206, hs.rmd.f4(v209, v207, v210), x15, 1548603684, 7n, v208)
259 +v212 = Hs.hs.rotl(v207, 10n)
260 +v213 = hs.rmd.step(v208, hs.rmd.f4(v211, v209, v212), x8, 1548603684, 12n, v210)
261 +v214 = Hs.hs.rotl(v209, 10n)
262 +v215 = hs.rmd.step(v210, hs.rmd.f4(v213, v211, v214), x12, 1548603684, 7n, v212)
263 +v216 = Hs.hs.rotl(v211, 10n)
264 +v217 = hs.rmd.step(v212, hs.rmd.f4(v215, v213, v216), x4, 1548603684, 6n, v214)
265 +v218 = Hs.hs.rotl(v213, 10n)
266 +v219 = hs.rmd.step(v214, hs.rmd.f4(v217, v215, v218), x9, 1548603684, 15n, v216)
267 +v220 = Hs.hs.rotl(v215, 10n)
268 +v221 = hs.rmd.step(v216, hs.rmd.f4(v219, v217, v220), x1, 1548603684, 13n, v218)
269 +v222 = Hs.hs.rotl(v217, 10n)
270 +v223 = hs.rmd.step(v218, hs.rmd.f4(v221, v219, v222), x2, 1548603684, 11n, v220)
271 +v224 = Hs.hs.rotl(v219, 10n)
272
273 +v225 = hs.rmd.step(v220, hs.rmd.f3(v223, v221, v224), x15, 1836072691, 9n, v222)
274 +v226 = Hs.hs.rotl(v221, 10n)
275 +v227 = hs.rmd.step(v222, hs.rmd.f3(v225, v223, v226), x5, 1836072691, 7n, v224)
276 +v228 = Hs.hs.rotl(v223, 10n)
277 +v229 = hs.rmd.step(v224, hs.rmd.f3(v227, v225, v228), x1, 1836072691, 15n, v226)
278 +v230 = Hs.hs.rotl(v225, 10n)
279 +v231 = hs.rmd.step(v226, hs.rmd.f3(v229, v227, v230), x3, 1836072691, 11n, v228)
280 +v232 = Hs.hs.rotl(v227, 10n)
281 +v233 = hs.rmd.step(v228, hs.rmd.f3(v231, v229, v232), x7, 1836072691, 8n, v230)
282 +v234 = Hs.hs.rotl(v229, 10n)
283 +v235 = hs.rmd.step(v230, hs.rmd.f3(v233, v231, v234), x14, 1836072691, 6n, v232)
284 +v236 = Hs.hs.rotl(v231, 10n)
285 +v237 = hs.rmd.step(v232, hs.rmd.f3(v235, v233, v236), x6, 1836072691, 6n, v234)
286 +v238 = Hs.hs.rotl(v233, 10n)
287 +v239 = hs.rmd.step(v234, hs.rmd.f3(v237, v235, v238), x9, 1836072691, 14n, v236)
288 +v240 = Hs.hs.rotl(v235, 10n)
289 +v241 = hs.rmd.step(v236, hs.rmd.f3(v239, v237, v240), x11, 1836072691, 12n, v238)
290 +v242 = Hs.hs.rotl(v237, 10n)
291 +v243 = hs.rmd.step(v238, hs.rmd.f3(v241, v239, v242), x8, 1836072691, 13n, v240)
292 +v244 = Hs.hs.rotl(v239, 10n)
293 +v245 = hs.rmd.step(v240, hs.rmd.f3(v243, v241, v244), x12, 1836072691, 5n, v242)
294 +v246 = Hs.hs.rotl(v241, 10n)
295 +v247 = hs.rmd.step(v242, hs.rmd.f3(v245, v243, v246), x2, 1836072691, 14n, v244)
296 +v248 = Hs.hs.rotl(v243, 10n)
297 +v249 = hs.rmd.step(v244, hs.rmd.f3(v247, v245, v248), x10, 1836072691, 13n, v246)
298 +v250 = Hs.hs.rotl(v245, 10n)
299 +v251 = hs.rmd.step(v246, hs.rmd.f3(v249, v247, v250), x0, 1836072691, 13n, v248)
300 +v252 = Hs.hs.rotl(v247, 10n)
301 +v253 = hs.rmd.step(v248, hs.rmd.f3(v251, v249, v252), x4, 1836072691, 7n, v250)
302 +v254 = Hs.hs.rotl(v249, 10n)
303 +v255 = hs.rmd.step(v250, hs.rmd.f3(v253, v251, v254), x13, 1836072691, 5n, v252)
304 +v256 = Hs.hs.rotl(v251, 10n)
305
306 +v257 = hs.rmd.step(v252, hs.rmd.f2(v255, v253, v256), x8, 2053994217, 15n, v254)
307 +v258 = Hs.hs.rotl(v253, 10n)
308 +v259 = hs.rmd.step(v254, hs.rmd.f2(v257, v255, v258), x6, 2053994217, 5n, v256)
309 +v260 = Hs.hs.rotl(v255, 10n)
310 +v261 = hs.rmd.step(v256, hs.rmd.f2(v259, v257, v260), x4, 2053994217, 8n, v258)
311 +v262 = Hs.hs.rotl(v257, 10n)
312 +v263 = hs.rmd.step(v258, hs.rmd.f2(v261, v259, v262), x1, 2053994217, 11n, v260)
313 +v264 = Hs.hs.rotl(v259, 10n)
314 +v265 = hs.rmd.step(v260, hs.rmd.f2(v263, v261, v264), x3, 2053994217, 14n, v262)
315 +v266 = Hs.hs.rotl(v261, 10n)
316 +v267 = hs.rmd.step(v262, hs.rmd.f2(v265, v263, v266), x11, 2053994217, 14n, v264)
317 +v268 = Hs.hs.rotl(v263, 10n)
318 +v269 = hs.rmd.step(v264, hs.rmd.f2(v267, v265, v268), x15, 2053994217, 6n, v266)
319 +v270 = Hs.hs.rotl(v265, 10n)
320 +v271 = hs.rmd.step(v266, hs.rmd.f2(v269, v267, v270), x0, 2053994217, 14n, v268)
321 +v272 = Hs.hs.rotl(v267, 10n)
322 +v273 = hs.rmd.step(v268, hs.rmd.f2(v271, v269, v272), x5, 2053994217, 6n, v270)
323 +v274 = Hs.hs.rotl(v269, 10n)
324 +v275 = hs.rmd.step(v270, hs.rmd.f2(v273, v271, v274), x12, 2053994217, 9n, v272)
325 +v276 = Hs.hs.rotl(v271, 10n)
326 +v277 = hs.rmd.step(v272, hs.rmd.f2(v275, v273, v276), x2, 2053994217, 12n, v274)
327 +v278 = Hs.hs.rotl(v273, 10n)
328 +v279 = hs.rmd.step(v274, hs.rmd.f2(v277, v275, v278), x13, 2053994217, 9n, v276)
329 +v280 = Hs.hs.rotl(v275, 10n)
330 +v281 = hs.rmd.step(v276, hs.rmd.f2(v279, v277, v280), x9, 2053994217, 12n, v278)
331 +v282 = Hs.hs.rotl(v277, 10n)
332 +v283 = hs.rmd.step(v278, hs.rmd.f2(v281, v279, v282), x7, 2053994217, 5n, v280)
333 +v284 = Hs.hs.rotl(v279, 10n)
334 +v285 = hs.rmd.step(v280, hs.rmd.f2(v283, v281, v284), x10, 2053994217, 15n, v282)
335 +v286 = Hs.hs.rotl(v281, 10n)
336 +v287 = hs.rmd.step(v282, hs.rmd.f2(v285, v283, v286), x14, 2053994217, 8n, v284)
337 +v288 = Hs.hs.rotl(v283, 10n)
338
339 +v289 = hs.rmd.step(v284, hs.rmd.f1(v287, v285, v288), x12, 0, 8n, v286)
340 +v290 = Hs.hs.rotl(v285, 10n)
341 +v291 = hs.rmd.step(v286, hs.rmd.f1(v289, v287, v290), x15, 0, 5n, v288)
342 +v292 = Hs.hs.rotl(v287, 10n)
343 +v293 = hs.rmd.step(v288, hs.rmd.f1(v291, v289, v292), x10, 0, 12n, v290)
344 +v294 = Hs.hs.rotl(v289, 10n)
345 +v295 = hs.rmd.step(v290, hs.rmd.f1(v293, v291, v294), x4, 0, 9n, v292)
346 +v296 = Hs.hs.rotl(v291, 10n)
347 +v297 = hs.rmd.step(v292, hs.rmd.f1(v295, v293, v296), x1, 0, 12n, v294)
348 +v298 = Hs.hs.rotl(v293, 10n)
349 +v299 = hs.rmd.step(v294, hs.rmd.f1(v297, v295, v298), x5, 0, 5n, v296)
350 +v300 = Hs.hs.rotl(v295, 10n)
351 +v301 = hs.rmd.step(v296, hs.rmd.f1(v299, v297, v300), x8, 0, 14n, v298)
352 +v302 = Hs.hs.rotl(v297, 10n)
353 +v303 = hs.rmd.step(v298, hs.rmd.f1(v301, v299, v302), x7, 0, 6n, v300)
354 +v304 = Hs.hs.rotl(v299, 10n)
355 +v305 = hs.rmd.step(v300, hs.rmd.f1(v303, v301, v304), x6, 0, 8n, v302)
356 +v306 = Hs.hs.rotl(v301, 10n)
357 +v307 = hs.rmd.step(v302, hs.rmd.f1(v305, v303, v306), x2, 0, 13n, v304)
358 +v308 = Hs.hs.rotl(v303, 10n)
359 +v309 = hs.rmd.step(v304, hs.rmd.f1(v307, v305, v308), x13, 0, 6n, v306)
360 +v310 = Hs.hs.rotl(v305, 10n)
361 +v311 = hs.rmd.step(v306, hs.rmd.f1(v309, v307, v310), x14, 0, 5n, v308)
362 +v312 = Hs.hs.rotl(v307, 10n)
363 +v313 = hs.rmd.step(v308, hs.rmd.f1(v311, v309, v312), x0, 0, 15n, v310)
364 +v314 = Hs.hs.rotl(v309, 10n)
365 +v315 = hs.rmd.step(v310, hs.rmd.f1(v313, v311, v314), x3, 0, 13n, v312)
366 +v316 = Hs.hs.rotl(v311, 10n)
367 +v317 = hs.rmd.step(v312, hs.rmd.f1(v315, v313, v316), x9, 0, 11n, v314)
368 +v318 = Hs.hs.rotl(v313, 10n)
369 +v319 = hs.rmd.step(v314, hs.rmd.f1(v317, v315, v318), x11, 0, 11n, v316)
370 +v320 = Hs.hs.rotl(v315, 10n)
371 Hs.HsW5{U32.add(U32.add(h1, v157), v320), U32.add(U32.add(h2, v160), v318), U32.add(U32.add(h3, v158), v316), U32.add(U32.add(h4, v156), v319), U32.add(U32.add(h0, v159), v317)}
372
373
374
375def HsRipemd160.iv() -> Hs.HsW5:
376 Hs.HsW5{1732584193, 4023233417, 2562383102, 271733878, 3285377520}
377
378
379
380def HsRipemd160.compress(cv: Hs.HsW5, blk: List<&2, U32>) -> Hs.HsW5:
381 hs.ripemd160.rounds(Hs.hs.block.le(blk), cv)
382
383def HsRipemd160.init() -> Hs.HsMdState<Hs.HsW5>:
384 Hs.HsMd.start(~Hs.HsW5, HsRipemd160.iv())
385
386def HsRipemd160.update(s: Hs.HsMdState<Hs.HsW5>, o: B.Octets) -> Hs.HsMdState<Hs.HsW5>:
387 Hs.HsMd.update(~Hs.HsW5, ~HsRipemd160.compress, ~63, s, o)
388
389
390
391def HsRipemd160.final(s: Hs.HsMdState<Hs.HsW5>) -> B.Octets:
392 Hs.HsMd.final_md(~Hs.HsW5, ~HsRipemd160.compress, ~63, ~Hs.hs.len.le, ~Hs.HsW5.le, s)
393
394
395def HsRipemd160.digest(o: B.Octets) -> B.Octets:
396 HsRipemd160.final(HsRipemd160.update(HsRipemd160.init(), o))