Hacl_Hash_MD5.c 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430
  1. /* MIT License
  2. *
  3. * Copyright (c) 2016-2022 INRIA, CMU and Microsoft Corporation
  4. * Copyright (c) 2022-2023 HACL* Contributors
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a copy
  7. * of this software and associated documentation files (the "Software"), to deal
  8. * in the Software without restriction, including without limitation the rights
  9. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. * copies of the Software, and to permit persons to whom the Software is
  11. * furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice shall be included in all
  14. * copies or substantial portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  22. * SOFTWARE.
  23. */
  24. #include "internal/Hacl_Hash_MD5.h"
  25. static uint32_t _h0[4U] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U };
  26. static uint32_t
  27. _t[64U] =
  28. {
  29. 0xd76aa478U, 0xe8c7b756U, 0x242070dbU, 0xc1bdceeeU, 0xf57c0fafU, 0x4787c62aU, 0xa8304613U,
  30. 0xfd469501U, 0x698098d8U, 0x8b44f7afU, 0xffff5bb1U, 0x895cd7beU, 0x6b901122U, 0xfd987193U,
  31. 0xa679438eU, 0x49b40821U, 0xf61e2562U, 0xc040b340U, 0x265e5a51U, 0xe9b6c7aaU, 0xd62f105dU,
  32. 0x02441453U, 0xd8a1e681U, 0xe7d3fbc8U, 0x21e1cde6U, 0xc33707d6U, 0xf4d50d87U, 0x455a14edU,
  33. 0xa9e3e905U, 0xfcefa3f8U, 0x676f02d9U, 0x8d2a4c8aU, 0xfffa3942U, 0x8771f681U, 0x6d9d6122U,
  34. 0xfde5380cU, 0xa4beea44U, 0x4bdecfa9U, 0xf6bb4b60U, 0xbebfbc70U, 0x289b7ec6U, 0xeaa127faU,
  35. 0xd4ef3085U, 0x4881d05U, 0xd9d4d039U, 0xe6db99e5U, 0x1fa27cf8U, 0xc4ac5665U, 0xf4292244U,
  36. 0x432aff97U, 0xab9423a7U, 0xfc93a039U, 0x655b59c3U, 0x8f0ccc92U, 0xffeff47dU, 0x85845dd1U,
  37. 0x6fa87e4fU, 0xfe2ce6e0U, 0xa3014314U, 0x4e0811a1U, 0xf7537e82U, 0xbd3af235U, 0x2ad7d2bbU,
  38. 0xeb86d391U
  39. };
  40. void Hacl_Hash_MD5_init(uint32_t *s)
  41. {
  42. KRML_MAYBE_FOR4(i, 0U, 4U, 1U, s[i] = _h0[i];);
  43. }
  44. static void update(uint32_t *abcd, uint8_t *x)
  45. {
  46. uint32_t aa = abcd[0U];
  47. uint32_t bb = abcd[1U];
  48. uint32_t cc = abcd[2U];
  49. uint32_t dd = abcd[3U];
  50. uint32_t va = abcd[0U];
  51. uint32_t vb0 = abcd[1U];
  52. uint32_t vc0 = abcd[2U];
  53. uint32_t vd0 = abcd[3U];
  54. uint8_t *b0 = x;
  55. uint32_t u = load32_le(b0);
  56. uint32_t xk = u;
  57. uint32_t ti0 = _t[0U];
  58. uint32_t
  59. v =
  60. vb0
  61. +
  62. ((va + ((vb0 & vc0) | (~vb0 & vd0)) + xk + ti0)
  63. << 7U
  64. | (va + ((vb0 & vc0) | (~vb0 & vd0)) + xk + ti0) >> 25U);
  65. abcd[0U] = v;
  66. uint32_t va0 = abcd[3U];
  67. uint32_t vb1 = abcd[0U];
  68. uint32_t vc1 = abcd[1U];
  69. uint32_t vd1 = abcd[2U];
  70. uint8_t *b1 = x + 4U;
  71. uint32_t u0 = load32_le(b1);
  72. uint32_t xk0 = u0;
  73. uint32_t ti1 = _t[1U];
  74. uint32_t
  75. v0 =
  76. vb1
  77. +
  78. ((va0 + ((vb1 & vc1) | (~vb1 & vd1)) + xk0 + ti1)
  79. << 12U
  80. | (va0 + ((vb1 & vc1) | (~vb1 & vd1)) + xk0 + ti1) >> 20U);
  81. abcd[3U] = v0;
  82. uint32_t va1 = abcd[2U];
  83. uint32_t vb2 = abcd[3U];
  84. uint32_t vc2 = abcd[0U];
  85. uint32_t vd2 = abcd[1U];
  86. uint8_t *b2 = x + 8U;
  87. uint32_t u1 = load32_le(b2);
  88. uint32_t xk1 = u1;
  89. uint32_t ti2 = _t[2U];
  90. uint32_t
  91. v1 =
  92. vb2
  93. +
  94. ((va1 + ((vb2 & vc2) | (~vb2 & vd2)) + xk1 + ti2)
  95. << 17U
  96. | (va1 + ((vb2 & vc2) | (~vb2 & vd2)) + xk1 + ti2) >> 15U);
  97. abcd[2U] = v1;
  98. uint32_t va2 = abcd[1U];
  99. uint32_t vb3 = abcd[2U];
  100. uint32_t vc3 = abcd[3U];
  101. uint32_t vd3 = abcd[0U];
  102. uint8_t *b3 = x + 12U;
  103. uint32_t u2 = load32_le(b3);
  104. uint32_t xk2 = u2;
  105. uint32_t ti3 = _t[3U];
  106. uint32_t
  107. v2 =
  108. vb3
  109. +
  110. ((va2 + ((vb3 & vc3) | (~vb3 & vd3)) + xk2 + ti3)
  111. << 22U
  112. | (va2 + ((vb3 & vc3) | (~vb3 & vd3)) + xk2 + ti3) >> 10U);
  113. abcd[1U] = v2;
  114. uint32_t va3 = abcd[0U];
  115. uint32_t vb4 = abcd[1U];
  116. uint32_t vc4 = abcd[2U];
  117. uint32_t vd4 = abcd[3U];
  118. uint8_t *b4 = x + 16U;
  119. uint32_t u3 = load32_le(b4);
  120. uint32_t xk3 = u3;
  121. uint32_t ti4 = _t[4U];
  122. uint32_t
  123. v3 =
  124. vb4
  125. +
  126. ((va3 + ((vb4 & vc4) | (~vb4 & vd4)) + xk3 + ti4)
  127. << 7U
  128. | (va3 + ((vb4 & vc4) | (~vb4 & vd4)) + xk3 + ti4) >> 25U);
  129. abcd[0U] = v3;
  130. uint32_t va4 = abcd[3U];
  131. uint32_t vb5 = abcd[0U];
  132. uint32_t vc5 = abcd[1U];
  133. uint32_t vd5 = abcd[2U];
  134. uint8_t *b5 = x + 20U;
  135. uint32_t u4 = load32_le(b5);
  136. uint32_t xk4 = u4;
  137. uint32_t ti5 = _t[5U];
  138. uint32_t
  139. v4 =
  140. vb5
  141. +
  142. ((va4 + ((vb5 & vc5) | (~vb5 & vd5)) + xk4 + ti5)
  143. << 12U
  144. | (va4 + ((vb5 & vc5) | (~vb5 & vd5)) + xk4 + ti5) >> 20U);
  145. abcd[3U] = v4;
  146. uint32_t va5 = abcd[2U];
  147. uint32_t vb6 = abcd[3U];
  148. uint32_t vc6 = abcd[0U];
  149. uint32_t vd6 = abcd[1U];
  150. uint8_t *b6 = x + 24U;
  151. uint32_t u5 = load32_le(b6);
  152. uint32_t xk5 = u5;
  153. uint32_t ti6 = _t[6U];
  154. uint32_t
  155. v5 =
  156. vb6
  157. +
  158. ((va5 + ((vb6 & vc6) | (~vb6 & vd6)) + xk5 + ti6)
  159. << 17U
  160. | (va5 + ((vb6 & vc6) | (~vb6 & vd6)) + xk5 + ti6) >> 15U);
  161. abcd[2U] = v5;
  162. uint32_t va6 = abcd[1U];
  163. uint32_t vb7 = abcd[2U];
  164. uint32_t vc7 = abcd[3U];
  165. uint32_t vd7 = abcd[0U];
  166. uint8_t *b7 = x + 28U;
  167. uint32_t u6 = load32_le(b7);
  168. uint32_t xk6 = u6;
  169. uint32_t ti7 = _t[7U];
  170. uint32_t
  171. v6 =
  172. vb7
  173. +
  174. ((va6 + ((vb7 & vc7) | (~vb7 & vd7)) + xk6 + ti7)
  175. << 22U
  176. | (va6 + ((vb7 & vc7) | (~vb7 & vd7)) + xk6 + ti7) >> 10U);
  177. abcd[1U] = v6;
  178. uint32_t va7 = abcd[0U];
  179. uint32_t vb8 = abcd[1U];
  180. uint32_t vc8 = abcd[2U];
  181. uint32_t vd8 = abcd[3U];
  182. uint8_t *b8 = x + 32U;
  183. uint32_t u7 = load32_le(b8);
  184. uint32_t xk7 = u7;
  185. uint32_t ti8 = _t[8U];
  186. uint32_t
  187. v7 =
  188. vb8
  189. +
  190. ((va7 + ((vb8 & vc8) | (~vb8 & vd8)) + xk7 + ti8)
  191. << 7U
  192. | (va7 + ((vb8 & vc8) | (~vb8 & vd8)) + xk7 + ti8) >> 25U);
  193. abcd[0U] = v7;
  194. uint32_t va8 = abcd[3U];
  195. uint32_t vb9 = abcd[0U];
  196. uint32_t vc9 = abcd[1U];
  197. uint32_t vd9 = abcd[2U];
  198. uint8_t *b9 = x + 36U;
  199. uint32_t u8 = load32_le(b9);
  200. uint32_t xk8 = u8;
  201. uint32_t ti9 = _t[9U];
  202. uint32_t
  203. v8 =
  204. vb9
  205. +
  206. ((va8 + ((vb9 & vc9) | (~vb9 & vd9)) + xk8 + ti9)
  207. << 12U
  208. | (va8 + ((vb9 & vc9) | (~vb9 & vd9)) + xk8 + ti9) >> 20U);
  209. abcd[3U] = v8;
  210. uint32_t va9 = abcd[2U];
  211. uint32_t vb10 = abcd[3U];
  212. uint32_t vc10 = abcd[0U];
  213. uint32_t vd10 = abcd[1U];
  214. uint8_t *b10 = x + 40U;
  215. uint32_t u9 = load32_le(b10);
  216. uint32_t xk9 = u9;
  217. uint32_t ti10 = _t[10U];
  218. uint32_t
  219. v9 =
  220. vb10
  221. +
  222. ((va9 + ((vb10 & vc10) | (~vb10 & vd10)) + xk9 + ti10)
  223. << 17U
  224. | (va9 + ((vb10 & vc10) | (~vb10 & vd10)) + xk9 + ti10) >> 15U);
  225. abcd[2U] = v9;
  226. uint32_t va10 = abcd[1U];
  227. uint32_t vb11 = abcd[2U];
  228. uint32_t vc11 = abcd[3U];
  229. uint32_t vd11 = abcd[0U];
  230. uint8_t *b11 = x + 44U;
  231. uint32_t u10 = load32_le(b11);
  232. uint32_t xk10 = u10;
  233. uint32_t ti11 = _t[11U];
  234. uint32_t
  235. v10 =
  236. vb11
  237. +
  238. ((va10 + ((vb11 & vc11) | (~vb11 & vd11)) + xk10 + ti11)
  239. << 22U
  240. | (va10 + ((vb11 & vc11) | (~vb11 & vd11)) + xk10 + ti11) >> 10U);
  241. abcd[1U] = v10;
  242. uint32_t va11 = abcd[0U];
  243. uint32_t vb12 = abcd[1U];
  244. uint32_t vc12 = abcd[2U];
  245. uint32_t vd12 = abcd[3U];
  246. uint8_t *b12 = x + 48U;
  247. uint32_t u11 = load32_le(b12);
  248. uint32_t xk11 = u11;
  249. uint32_t ti12 = _t[12U];
  250. uint32_t
  251. v11 =
  252. vb12
  253. +
  254. ((va11 + ((vb12 & vc12) | (~vb12 & vd12)) + xk11 + ti12)
  255. << 7U
  256. | (va11 + ((vb12 & vc12) | (~vb12 & vd12)) + xk11 + ti12) >> 25U);
  257. abcd[0U] = v11;
  258. uint32_t va12 = abcd[3U];
  259. uint32_t vb13 = abcd[0U];
  260. uint32_t vc13 = abcd[1U];
  261. uint32_t vd13 = abcd[2U];
  262. uint8_t *b13 = x + 52U;
  263. uint32_t u12 = load32_le(b13);
  264. uint32_t xk12 = u12;
  265. uint32_t ti13 = _t[13U];
  266. uint32_t
  267. v12 =
  268. vb13
  269. +
  270. ((va12 + ((vb13 & vc13) | (~vb13 & vd13)) + xk12 + ti13)
  271. << 12U
  272. | (va12 + ((vb13 & vc13) | (~vb13 & vd13)) + xk12 + ti13) >> 20U);
  273. abcd[3U] = v12;
  274. uint32_t va13 = abcd[2U];
  275. uint32_t vb14 = abcd[3U];
  276. uint32_t vc14 = abcd[0U];
  277. uint32_t vd14 = abcd[1U];
  278. uint8_t *b14 = x + 56U;
  279. uint32_t u13 = load32_le(b14);
  280. uint32_t xk13 = u13;
  281. uint32_t ti14 = _t[14U];
  282. uint32_t
  283. v13 =
  284. vb14
  285. +
  286. ((va13 + ((vb14 & vc14) | (~vb14 & vd14)) + xk13 + ti14)
  287. << 17U
  288. | (va13 + ((vb14 & vc14) | (~vb14 & vd14)) + xk13 + ti14) >> 15U);
  289. abcd[2U] = v13;
  290. uint32_t va14 = abcd[1U];
  291. uint32_t vb15 = abcd[2U];
  292. uint32_t vc15 = abcd[3U];
  293. uint32_t vd15 = abcd[0U];
  294. uint8_t *b15 = x + 60U;
  295. uint32_t u14 = load32_le(b15);
  296. uint32_t xk14 = u14;
  297. uint32_t ti15 = _t[15U];
  298. uint32_t
  299. v14 =
  300. vb15
  301. +
  302. ((va14 + ((vb15 & vc15) | (~vb15 & vd15)) + xk14 + ti15)
  303. << 22U
  304. | (va14 + ((vb15 & vc15) | (~vb15 & vd15)) + xk14 + ti15) >> 10U);
  305. abcd[1U] = v14;
  306. uint32_t va15 = abcd[0U];
  307. uint32_t vb16 = abcd[1U];
  308. uint32_t vc16 = abcd[2U];
  309. uint32_t vd16 = abcd[3U];
  310. uint8_t *b16 = x + 4U;
  311. uint32_t u15 = load32_le(b16);
  312. uint32_t xk15 = u15;
  313. uint32_t ti16 = _t[16U];
  314. uint32_t
  315. v15 =
  316. vb16
  317. +
  318. ((va15 + ((vb16 & vd16) | (vc16 & ~vd16)) + xk15 + ti16)
  319. << 5U
  320. | (va15 + ((vb16 & vd16) | (vc16 & ~vd16)) + xk15 + ti16) >> 27U);
  321. abcd[0U] = v15;
  322. uint32_t va16 = abcd[3U];
  323. uint32_t vb17 = abcd[0U];
  324. uint32_t vc17 = abcd[1U];
  325. uint32_t vd17 = abcd[2U];
  326. uint8_t *b17 = x + 24U;
  327. uint32_t u16 = load32_le(b17);
  328. uint32_t xk16 = u16;
  329. uint32_t ti17 = _t[17U];
  330. uint32_t
  331. v16 =
  332. vb17
  333. +
  334. ((va16 + ((vb17 & vd17) | (vc17 & ~vd17)) + xk16 + ti17)
  335. << 9U
  336. | (va16 + ((vb17 & vd17) | (vc17 & ~vd17)) + xk16 + ti17) >> 23U);
  337. abcd[3U] = v16;
  338. uint32_t va17 = abcd[2U];
  339. uint32_t vb18 = abcd[3U];
  340. uint32_t vc18 = abcd[0U];
  341. uint32_t vd18 = abcd[1U];
  342. uint8_t *b18 = x + 44U;
  343. uint32_t u17 = load32_le(b18);
  344. uint32_t xk17 = u17;
  345. uint32_t ti18 = _t[18U];
  346. uint32_t
  347. v17 =
  348. vb18
  349. +
  350. ((va17 + ((vb18 & vd18) | (vc18 & ~vd18)) + xk17 + ti18)
  351. << 14U
  352. | (va17 + ((vb18 & vd18) | (vc18 & ~vd18)) + xk17 + ti18) >> 18U);
  353. abcd[2U] = v17;
  354. uint32_t va18 = abcd[1U];
  355. uint32_t vb19 = abcd[2U];
  356. uint32_t vc19 = abcd[3U];
  357. uint32_t vd19 = abcd[0U];
  358. uint8_t *b19 = x;
  359. uint32_t u18 = load32_le(b19);
  360. uint32_t xk18 = u18;
  361. uint32_t ti19 = _t[19U];
  362. uint32_t
  363. v18 =
  364. vb19
  365. +
  366. ((va18 + ((vb19 & vd19) | (vc19 & ~vd19)) + xk18 + ti19)
  367. << 20U
  368. | (va18 + ((vb19 & vd19) | (vc19 & ~vd19)) + xk18 + ti19) >> 12U);
  369. abcd[1U] = v18;
  370. uint32_t va19 = abcd[0U];
  371. uint32_t vb20 = abcd[1U];
  372. uint32_t vc20 = abcd[2U];
  373. uint32_t vd20 = abcd[3U];
  374. uint8_t *b20 = x + 20U;
  375. uint32_t u19 = load32_le(b20);
  376. uint32_t xk19 = u19;
  377. uint32_t ti20 = _t[20U];
  378. uint32_t
  379. v19 =
  380. vb20
  381. +
  382. ((va19 + ((vb20 & vd20) | (vc20 & ~vd20)) + xk19 + ti20)
  383. << 5U
  384. | (va19 + ((vb20 & vd20) | (vc20 & ~vd20)) + xk19 + ti20) >> 27U);
  385. abcd[0U] = v19;
  386. uint32_t va20 = abcd[3U];
  387. uint32_t vb21 = abcd[0U];
  388. uint32_t vc21 = abcd[1U];
  389. uint32_t vd21 = abcd[2U];
  390. uint8_t *b21 = x + 40U;
  391. uint32_t u20 = load32_le(b21);
  392. uint32_t xk20 = u20;
  393. uint32_t ti21 = _t[21U];
  394. uint32_t
  395. v20 =
  396. vb21
  397. +
  398. ((va20 + ((vb21 & vd21) | (vc21 & ~vd21)) + xk20 + ti21)
  399. << 9U
  400. | (va20 + ((vb21 & vd21) | (vc21 & ~vd21)) + xk20 + ti21) >> 23U);
  401. abcd[3U] = v20;
  402. uint32_t va21 = abcd[2U];
  403. uint32_t vb22 = abcd[3U];
  404. uint32_t vc22 = abcd[0U];
  405. uint32_t vd22 = abcd[1U];
  406. uint8_t *b22 = x + 60U;
  407. uint32_t u21 = load32_le(b22);
  408. uint32_t xk21 = u21;
  409. uint32_t ti22 = _t[22U];
  410. uint32_t
  411. v21 =
  412. vb22
  413. +
  414. ((va21 + ((vb22 & vd22) | (vc22 & ~vd22)) + xk21 + ti22)
  415. << 14U
  416. | (va21 + ((vb22 & vd22) | (vc22 & ~vd22)) + xk21 + ti22) >> 18U);
  417. abcd[2U] = v21;
  418. uint32_t va22 = abcd[1U];
  419. uint32_t vb23 = abcd[2U];
  420. uint32_t vc23 = abcd[3U];
  421. uint32_t vd23 = abcd[0U];
  422. uint8_t *b23 = x + 16U;
  423. uint32_t u22 = load32_le(b23);
  424. uint32_t xk22 = u22;
  425. uint32_t ti23 = _t[23U];
  426. uint32_t
  427. v22 =
  428. vb23
  429. +
  430. ((va22 + ((vb23 & vd23) | (vc23 & ~vd23)) + xk22 + ti23)
  431. << 20U
  432. | (va22 + ((vb23 & vd23) | (vc23 & ~vd23)) + xk22 + ti23) >> 12U);
  433. abcd[1U] = v22;
  434. uint32_t va23 = abcd[0U];
  435. uint32_t vb24 = abcd[1U];
  436. uint32_t vc24 = abcd[2U];
  437. uint32_t vd24 = abcd[3U];
  438. uint8_t *b24 = x + 36U;
  439. uint32_t u23 = load32_le(b24);
  440. uint32_t xk23 = u23;
  441. uint32_t ti24 = _t[24U];
  442. uint32_t
  443. v23 =
  444. vb24
  445. +
  446. ((va23 + ((vb24 & vd24) | (vc24 & ~vd24)) + xk23 + ti24)
  447. << 5U
  448. | (va23 + ((vb24 & vd24) | (vc24 & ~vd24)) + xk23 + ti24) >> 27U);
  449. abcd[0U] = v23;
  450. uint32_t va24 = abcd[3U];
  451. uint32_t vb25 = abcd[0U];
  452. uint32_t vc25 = abcd[1U];
  453. uint32_t vd25 = abcd[2U];
  454. uint8_t *b25 = x + 56U;
  455. uint32_t u24 = load32_le(b25);
  456. uint32_t xk24 = u24;
  457. uint32_t ti25 = _t[25U];
  458. uint32_t
  459. v24 =
  460. vb25
  461. +
  462. ((va24 + ((vb25 & vd25) | (vc25 & ~vd25)) + xk24 + ti25)
  463. << 9U
  464. | (va24 + ((vb25 & vd25) | (vc25 & ~vd25)) + xk24 + ti25) >> 23U);
  465. abcd[3U] = v24;
  466. uint32_t va25 = abcd[2U];
  467. uint32_t vb26 = abcd[3U];
  468. uint32_t vc26 = abcd[0U];
  469. uint32_t vd26 = abcd[1U];
  470. uint8_t *b26 = x + 12U;
  471. uint32_t u25 = load32_le(b26);
  472. uint32_t xk25 = u25;
  473. uint32_t ti26 = _t[26U];
  474. uint32_t
  475. v25 =
  476. vb26
  477. +
  478. ((va25 + ((vb26 & vd26) | (vc26 & ~vd26)) + xk25 + ti26)
  479. << 14U
  480. | (va25 + ((vb26 & vd26) | (vc26 & ~vd26)) + xk25 + ti26) >> 18U);
  481. abcd[2U] = v25;
  482. uint32_t va26 = abcd[1U];
  483. uint32_t vb27 = abcd[2U];
  484. uint32_t vc27 = abcd[3U];
  485. uint32_t vd27 = abcd[0U];
  486. uint8_t *b27 = x + 32U;
  487. uint32_t u26 = load32_le(b27);
  488. uint32_t xk26 = u26;
  489. uint32_t ti27 = _t[27U];
  490. uint32_t
  491. v26 =
  492. vb27
  493. +
  494. ((va26 + ((vb27 & vd27) | (vc27 & ~vd27)) + xk26 + ti27)
  495. << 20U
  496. | (va26 + ((vb27 & vd27) | (vc27 & ~vd27)) + xk26 + ti27) >> 12U);
  497. abcd[1U] = v26;
  498. uint32_t va27 = abcd[0U];
  499. uint32_t vb28 = abcd[1U];
  500. uint32_t vc28 = abcd[2U];
  501. uint32_t vd28 = abcd[3U];
  502. uint8_t *b28 = x + 52U;
  503. uint32_t u27 = load32_le(b28);
  504. uint32_t xk27 = u27;
  505. uint32_t ti28 = _t[28U];
  506. uint32_t
  507. v27 =
  508. vb28
  509. +
  510. ((va27 + ((vb28 & vd28) | (vc28 & ~vd28)) + xk27 + ti28)
  511. << 5U
  512. | (va27 + ((vb28 & vd28) | (vc28 & ~vd28)) + xk27 + ti28) >> 27U);
  513. abcd[0U] = v27;
  514. uint32_t va28 = abcd[3U];
  515. uint32_t vb29 = abcd[0U];
  516. uint32_t vc29 = abcd[1U];
  517. uint32_t vd29 = abcd[2U];
  518. uint8_t *b29 = x + 8U;
  519. uint32_t u28 = load32_le(b29);
  520. uint32_t xk28 = u28;
  521. uint32_t ti29 = _t[29U];
  522. uint32_t
  523. v28 =
  524. vb29
  525. +
  526. ((va28 + ((vb29 & vd29) | (vc29 & ~vd29)) + xk28 + ti29)
  527. << 9U
  528. | (va28 + ((vb29 & vd29) | (vc29 & ~vd29)) + xk28 + ti29) >> 23U);
  529. abcd[3U] = v28;
  530. uint32_t va29 = abcd[2U];
  531. uint32_t vb30 = abcd[3U];
  532. uint32_t vc30 = abcd[0U];
  533. uint32_t vd30 = abcd[1U];
  534. uint8_t *b30 = x + 28U;
  535. uint32_t u29 = load32_le(b30);
  536. uint32_t xk29 = u29;
  537. uint32_t ti30 = _t[30U];
  538. uint32_t
  539. v29 =
  540. vb30
  541. +
  542. ((va29 + ((vb30 & vd30) | (vc30 & ~vd30)) + xk29 + ti30)
  543. << 14U
  544. | (va29 + ((vb30 & vd30) | (vc30 & ~vd30)) + xk29 + ti30) >> 18U);
  545. abcd[2U] = v29;
  546. uint32_t va30 = abcd[1U];
  547. uint32_t vb31 = abcd[2U];
  548. uint32_t vc31 = abcd[3U];
  549. uint32_t vd31 = abcd[0U];
  550. uint8_t *b31 = x + 48U;
  551. uint32_t u30 = load32_le(b31);
  552. uint32_t xk30 = u30;
  553. uint32_t ti31 = _t[31U];
  554. uint32_t
  555. v30 =
  556. vb31
  557. +
  558. ((va30 + ((vb31 & vd31) | (vc31 & ~vd31)) + xk30 + ti31)
  559. << 20U
  560. | (va30 + ((vb31 & vd31) | (vc31 & ~vd31)) + xk30 + ti31) >> 12U);
  561. abcd[1U] = v30;
  562. uint32_t va31 = abcd[0U];
  563. uint32_t vb32 = abcd[1U];
  564. uint32_t vc32 = abcd[2U];
  565. uint32_t vd32 = abcd[3U];
  566. uint8_t *b32 = x + 20U;
  567. uint32_t u31 = load32_le(b32);
  568. uint32_t xk31 = u31;
  569. uint32_t ti32 = _t[32U];
  570. uint32_t
  571. v31 =
  572. vb32
  573. +
  574. ((va31 + (vb32 ^ (vc32 ^ vd32)) + xk31 + ti32)
  575. << 4U
  576. | (va31 + (vb32 ^ (vc32 ^ vd32)) + xk31 + ti32) >> 28U);
  577. abcd[0U] = v31;
  578. uint32_t va32 = abcd[3U];
  579. uint32_t vb33 = abcd[0U];
  580. uint32_t vc33 = abcd[1U];
  581. uint32_t vd33 = abcd[2U];
  582. uint8_t *b33 = x + 32U;
  583. uint32_t u32 = load32_le(b33);
  584. uint32_t xk32 = u32;
  585. uint32_t ti33 = _t[33U];
  586. uint32_t
  587. v32 =
  588. vb33
  589. +
  590. ((va32 + (vb33 ^ (vc33 ^ vd33)) + xk32 + ti33)
  591. << 11U
  592. | (va32 + (vb33 ^ (vc33 ^ vd33)) + xk32 + ti33) >> 21U);
  593. abcd[3U] = v32;
  594. uint32_t va33 = abcd[2U];
  595. uint32_t vb34 = abcd[3U];
  596. uint32_t vc34 = abcd[0U];
  597. uint32_t vd34 = abcd[1U];
  598. uint8_t *b34 = x + 44U;
  599. uint32_t u33 = load32_le(b34);
  600. uint32_t xk33 = u33;
  601. uint32_t ti34 = _t[34U];
  602. uint32_t
  603. v33 =
  604. vb34
  605. +
  606. ((va33 + (vb34 ^ (vc34 ^ vd34)) + xk33 + ti34)
  607. << 16U
  608. | (va33 + (vb34 ^ (vc34 ^ vd34)) + xk33 + ti34) >> 16U);
  609. abcd[2U] = v33;
  610. uint32_t va34 = abcd[1U];
  611. uint32_t vb35 = abcd[2U];
  612. uint32_t vc35 = abcd[3U];
  613. uint32_t vd35 = abcd[0U];
  614. uint8_t *b35 = x + 56U;
  615. uint32_t u34 = load32_le(b35);
  616. uint32_t xk34 = u34;
  617. uint32_t ti35 = _t[35U];
  618. uint32_t
  619. v34 =
  620. vb35
  621. +
  622. ((va34 + (vb35 ^ (vc35 ^ vd35)) + xk34 + ti35)
  623. << 23U
  624. | (va34 + (vb35 ^ (vc35 ^ vd35)) + xk34 + ti35) >> 9U);
  625. abcd[1U] = v34;
  626. uint32_t va35 = abcd[0U];
  627. uint32_t vb36 = abcd[1U];
  628. uint32_t vc36 = abcd[2U];
  629. uint32_t vd36 = abcd[3U];
  630. uint8_t *b36 = x + 4U;
  631. uint32_t u35 = load32_le(b36);
  632. uint32_t xk35 = u35;
  633. uint32_t ti36 = _t[36U];
  634. uint32_t
  635. v35 =
  636. vb36
  637. +
  638. ((va35 + (vb36 ^ (vc36 ^ vd36)) + xk35 + ti36)
  639. << 4U
  640. | (va35 + (vb36 ^ (vc36 ^ vd36)) + xk35 + ti36) >> 28U);
  641. abcd[0U] = v35;
  642. uint32_t va36 = abcd[3U];
  643. uint32_t vb37 = abcd[0U];
  644. uint32_t vc37 = abcd[1U];
  645. uint32_t vd37 = abcd[2U];
  646. uint8_t *b37 = x + 16U;
  647. uint32_t u36 = load32_le(b37);
  648. uint32_t xk36 = u36;
  649. uint32_t ti37 = _t[37U];
  650. uint32_t
  651. v36 =
  652. vb37
  653. +
  654. ((va36 + (vb37 ^ (vc37 ^ vd37)) + xk36 + ti37)
  655. << 11U
  656. | (va36 + (vb37 ^ (vc37 ^ vd37)) + xk36 + ti37) >> 21U);
  657. abcd[3U] = v36;
  658. uint32_t va37 = abcd[2U];
  659. uint32_t vb38 = abcd[3U];
  660. uint32_t vc38 = abcd[0U];
  661. uint32_t vd38 = abcd[1U];
  662. uint8_t *b38 = x + 28U;
  663. uint32_t u37 = load32_le(b38);
  664. uint32_t xk37 = u37;
  665. uint32_t ti38 = _t[38U];
  666. uint32_t
  667. v37 =
  668. vb38
  669. +
  670. ((va37 + (vb38 ^ (vc38 ^ vd38)) + xk37 + ti38)
  671. << 16U
  672. | (va37 + (vb38 ^ (vc38 ^ vd38)) + xk37 + ti38) >> 16U);
  673. abcd[2U] = v37;
  674. uint32_t va38 = abcd[1U];
  675. uint32_t vb39 = abcd[2U];
  676. uint32_t vc39 = abcd[3U];
  677. uint32_t vd39 = abcd[0U];
  678. uint8_t *b39 = x + 40U;
  679. uint32_t u38 = load32_le(b39);
  680. uint32_t xk38 = u38;
  681. uint32_t ti39 = _t[39U];
  682. uint32_t
  683. v38 =
  684. vb39
  685. +
  686. ((va38 + (vb39 ^ (vc39 ^ vd39)) + xk38 + ti39)
  687. << 23U
  688. | (va38 + (vb39 ^ (vc39 ^ vd39)) + xk38 + ti39) >> 9U);
  689. abcd[1U] = v38;
  690. uint32_t va39 = abcd[0U];
  691. uint32_t vb40 = abcd[1U];
  692. uint32_t vc40 = abcd[2U];
  693. uint32_t vd40 = abcd[3U];
  694. uint8_t *b40 = x + 52U;
  695. uint32_t u39 = load32_le(b40);
  696. uint32_t xk39 = u39;
  697. uint32_t ti40 = _t[40U];
  698. uint32_t
  699. v39 =
  700. vb40
  701. +
  702. ((va39 + (vb40 ^ (vc40 ^ vd40)) + xk39 + ti40)
  703. << 4U
  704. | (va39 + (vb40 ^ (vc40 ^ vd40)) + xk39 + ti40) >> 28U);
  705. abcd[0U] = v39;
  706. uint32_t va40 = abcd[3U];
  707. uint32_t vb41 = abcd[0U];
  708. uint32_t vc41 = abcd[1U];
  709. uint32_t vd41 = abcd[2U];
  710. uint8_t *b41 = x;
  711. uint32_t u40 = load32_le(b41);
  712. uint32_t xk40 = u40;
  713. uint32_t ti41 = _t[41U];
  714. uint32_t
  715. v40 =
  716. vb41
  717. +
  718. ((va40 + (vb41 ^ (vc41 ^ vd41)) + xk40 + ti41)
  719. << 11U
  720. | (va40 + (vb41 ^ (vc41 ^ vd41)) + xk40 + ti41) >> 21U);
  721. abcd[3U] = v40;
  722. uint32_t va41 = abcd[2U];
  723. uint32_t vb42 = abcd[3U];
  724. uint32_t vc42 = abcd[0U];
  725. uint32_t vd42 = abcd[1U];
  726. uint8_t *b42 = x + 12U;
  727. uint32_t u41 = load32_le(b42);
  728. uint32_t xk41 = u41;
  729. uint32_t ti42 = _t[42U];
  730. uint32_t
  731. v41 =
  732. vb42
  733. +
  734. ((va41 + (vb42 ^ (vc42 ^ vd42)) + xk41 + ti42)
  735. << 16U
  736. | (va41 + (vb42 ^ (vc42 ^ vd42)) + xk41 + ti42) >> 16U);
  737. abcd[2U] = v41;
  738. uint32_t va42 = abcd[1U];
  739. uint32_t vb43 = abcd[2U];
  740. uint32_t vc43 = abcd[3U];
  741. uint32_t vd43 = abcd[0U];
  742. uint8_t *b43 = x + 24U;
  743. uint32_t u42 = load32_le(b43);
  744. uint32_t xk42 = u42;
  745. uint32_t ti43 = _t[43U];
  746. uint32_t
  747. v42 =
  748. vb43
  749. +
  750. ((va42 + (vb43 ^ (vc43 ^ vd43)) + xk42 + ti43)
  751. << 23U
  752. | (va42 + (vb43 ^ (vc43 ^ vd43)) + xk42 + ti43) >> 9U);
  753. abcd[1U] = v42;
  754. uint32_t va43 = abcd[0U];
  755. uint32_t vb44 = abcd[1U];
  756. uint32_t vc44 = abcd[2U];
  757. uint32_t vd44 = abcd[3U];
  758. uint8_t *b44 = x + 36U;
  759. uint32_t u43 = load32_le(b44);
  760. uint32_t xk43 = u43;
  761. uint32_t ti44 = _t[44U];
  762. uint32_t
  763. v43 =
  764. vb44
  765. +
  766. ((va43 + (vb44 ^ (vc44 ^ vd44)) + xk43 + ti44)
  767. << 4U
  768. | (va43 + (vb44 ^ (vc44 ^ vd44)) + xk43 + ti44) >> 28U);
  769. abcd[0U] = v43;
  770. uint32_t va44 = abcd[3U];
  771. uint32_t vb45 = abcd[0U];
  772. uint32_t vc45 = abcd[1U];
  773. uint32_t vd45 = abcd[2U];
  774. uint8_t *b45 = x + 48U;
  775. uint32_t u44 = load32_le(b45);
  776. uint32_t xk44 = u44;
  777. uint32_t ti45 = _t[45U];
  778. uint32_t
  779. v44 =
  780. vb45
  781. +
  782. ((va44 + (vb45 ^ (vc45 ^ vd45)) + xk44 + ti45)
  783. << 11U
  784. | (va44 + (vb45 ^ (vc45 ^ vd45)) + xk44 + ti45) >> 21U);
  785. abcd[3U] = v44;
  786. uint32_t va45 = abcd[2U];
  787. uint32_t vb46 = abcd[3U];
  788. uint32_t vc46 = abcd[0U];
  789. uint32_t vd46 = abcd[1U];
  790. uint8_t *b46 = x + 60U;
  791. uint32_t u45 = load32_le(b46);
  792. uint32_t xk45 = u45;
  793. uint32_t ti46 = _t[46U];
  794. uint32_t
  795. v45 =
  796. vb46
  797. +
  798. ((va45 + (vb46 ^ (vc46 ^ vd46)) + xk45 + ti46)
  799. << 16U
  800. | (va45 + (vb46 ^ (vc46 ^ vd46)) + xk45 + ti46) >> 16U);
  801. abcd[2U] = v45;
  802. uint32_t va46 = abcd[1U];
  803. uint32_t vb47 = abcd[2U];
  804. uint32_t vc47 = abcd[3U];
  805. uint32_t vd47 = abcd[0U];
  806. uint8_t *b47 = x + 8U;
  807. uint32_t u46 = load32_le(b47);
  808. uint32_t xk46 = u46;
  809. uint32_t ti47 = _t[47U];
  810. uint32_t
  811. v46 =
  812. vb47
  813. +
  814. ((va46 + (vb47 ^ (vc47 ^ vd47)) + xk46 + ti47)
  815. << 23U
  816. | (va46 + (vb47 ^ (vc47 ^ vd47)) + xk46 + ti47) >> 9U);
  817. abcd[1U] = v46;
  818. uint32_t va47 = abcd[0U];
  819. uint32_t vb48 = abcd[1U];
  820. uint32_t vc48 = abcd[2U];
  821. uint32_t vd48 = abcd[3U];
  822. uint8_t *b48 = x;
  823. uint32_t u47 = load32_le(b48);
  824. uint32_t xk47 = u47;
  825. uint32_t ti48 = _t[48U];
  826. uint32_t
  827. v47 =
  828. vb48
  829. +
  830. ((va47 + (vc48 ^ (vb48 | ~vd48)) + xk47 + ti48)
  831. << 6U
  832. | (va47 + (vc48 ^ (vb48 | ~vd48)) + xk47 + ti48) >> 26U);
  833. abcd[0U] = v47;
  834. uint32_t va48 = abcd[3U];
  835. uint32_t vb49 = abcd[0U];
  836. uint32_t vc49 = abcd[1U];
  837. uint32_t vd49 = abcd[2U];
  838. uint8_t *b49 = x + 28U;
  839. uint32_t u48 = load32_le(b49);
  840. uint32_t xk48 = u48;
  841. uint32_t ti49 = _t[49U];
  842. uint32_t
  843. v48 =
  844. vb49
  845. +
  846. ((va48 + (vc49 ^ (vb49 | ~vd49)) + xk48 + ti49)
  847. << 10U
  848. | (va48 + (vc49 ^ (vb49 | ~vd49)) + xk48 + ti49) >> 22U);
  849. abcd[3U] = v48;
  850. uint32_t va49 = abcd[2U];
  851. uint32_t vb50 = abcd[3U];
  852. uint32_t vc50 = abcd[0U];
  853. uint32_t vd50 = abcd[1U];
  854. uint8_t *b50 = x + 56U;
  855. uint32_t u49 = load32_le(b50);
  856. uint32_t xk49 = u49;
  857. uint32_t ti50 = _t[50U];
  858. uint32_t
  859. v49 =
  860. vb50
  861. +
  862. ((va49 + (vc50 ^ (vb50 | ~vd50)) + xk49 + ti50)
  863. << 15U
  864. | (va49 + (vc50 ^ (vb50 | ~vd50)) + xk49 + ti50) >> 17U);
  865. abcd[2U] = v49;
  866. uint32_t va50 = abcd[1U];
  867. uint32_t vb51 = abcd[2U];
  868. uint32_t vc51 = abcd[3U];
  869. uint32_t vd51 = abcd[0U];
  870. uint8_t *b51 = x + 20U;
  871. uint32_t u50 = load32_le(b51);
  872. uint32_t xk50 = u50;
  873. uint32_t ti51 = _t[51U];
  874. uint32_t
  875. v50 =
  876. vb51
  877. +
  878. ((va50 + (vc51 ^ (vb51 | ~vd51)) + xk50 + ti51)
  879. << 21U
  880. | (va50 + (vc51 ^ (vb51 | ~vd51)) + xk50 + ti51) >> 11U);
  881. abcd[1U] = v50;
  882. uint32_t va51 = abcd[0U];
  883. uint32_t vb52 = abcd[1U];
  884. uint32_t vc52 = abcd[2U];
  885. uint32_t vd52 = abcd[3U];
  886. uint8_t *b52 = x + 48U;
  887. uint32_t u51 = load32_le(b52);
  888. uint32_t xk51 = u51;
  889. uint32_t ti52 = _t[52U];
  890. uint32_t
  891. v51 =
  892. vb52
  893. +
  894. ((va51 + (vc52 ^ (vb52 | ~vd52)) + xk51 + ti52)
  895. << 6U
  896. | (va51 + (vc52 ^ (vb52 | ~vd52)) + xk51 + ti52) >> 26U);
  897. abcd[0U] = v51;
  898. uint32_t va52 = abcd[3U];
  899. uint32_t vb53 = abcd[0U];
  900. uint32_t vc53 = abcd[1U];
  901. uint32_t vd53 = abcd[2U];
  902. uint8_t *b53 = x + 12U;
  903. uint32_t u52 = load32_le(b53);
  904. uint32_t xk52 = u52;
  905. uint32_t ti53 = _t[53U];
  906. uint32_t
  907. v52 =
  908. vb53
  909. +
  910. ((va52 + (vc53 ^ (vb53 | ~vd53)) + xk52 + ti53)
  911. << 10U
  912. | (va52 + (vc53 ^ (vb53 | ~vd53)) + xk52 + ti53) >> 22U);
  913. abcd[3U] = v52;
  914. uint32_t va53 = abcd[2U];
  915. uint32_t vb54 = abcd[3U];
  916. uint32_t vc54 = abcd[0U];
  917. uint32_t vd54 = abcd[1U];
  918. uint8_t *b54 = x + 40U;
  919. uint32_t u53 = load32_le(b54);
  920. uint32_t xk53 = u53;
  921. uint32_t ti54 = _t[54U];
  922. uint32_t
  923. v53 =
  924. vb54
  925. +
  926. ((va53 + (vc54 ^ (vb54 | ~vd54)) + xk53 + ti54)
  927. << 15U
  928. | (va53 + (vc54 ^ (vb54 | ~vd54)) + xk53 + ti54) >> 17U);
  929. abcd[2U] = v53;
  930. uint32_t va54 = abcd[1U];
  931. uint32_t vb55 = abcd[2U];
  932. uint32_t vc55 = abcd[3U];
  933. uint32_t vd55 = abcd[0U];
  934. uint8_t *b55 = x + 4U;
  935. uint32_t u54 = load32_le(b55);
  936. uint32_t xk54 = u54;
  937. uint32_t ti55 = _t[55U];
  938. uint32_t
  939. v54 =
  940. vb55
  941. +
  942. ((va54 + (vc55 ^ (vb55 | ~vd55)) + xk54 + ti55)
  943. << 21U
  944. | (va54 + (vc55 ^ (vb55 | ~vd55)) + xk54 + ti55) >> 11U);
  945. abcd[1U] = v54;
  946. uint32_t va55 = abcd[0U];
  947. uint32_t vb56 = abcd[1U];
  948. uint32_t vc56 = abcd[2U];
  949. uint32_t vd56 = abcd[3U];
  950. uint8_t *b56 = x + 32U;
  951. uint32_t u55 = load32_le(b56);
  952. uint32_t xk55 = u55;
  953. uint32_t ti56 = _t[56U];
  954. uint32_t
  955. v55 =
  956. vb56
  957. +
  958. ((va55 + (vc56 ^ (vb56 | ~vd56)) + xk55 + ti56)
  959. << 6U
  960. | (va55 + (vc56 ^ (vb56 | ~vd56)) + xk55 + ti56) >> 26U);
  961. abcd[0U] = v55;
  962. uint32_t va56 = abcd[3U];
  963. uint32_t vb57 = abcd[0U];
  964. uint32_t vc57 = abcd[1U];
  965. uint32_t vd57 = abcd[2U];
  966. uint8_t *b57 = x + 60U;
  967. uint32_t u56 = load32_le(b57);
  968. uint32_t xk56 = u56;
  969. uint32_t ti57 = _t[57U];
  970. uint32_t
  971. v56 =
  972. vb57
  973. +
  974. ((va56 + (vc57 ^ (vb57 | ~vd57)) + xk56 + ti57)
  975. << 10U
  976. | (va56 + (vc57 ^ (vb57 | ~vd57)) + xk56 + ti57) >> 22U);
  977. abcd[3U] = v56;
  978. uint32_t va57 = abcd[2U];
  979. uint32_t vb58 = abcd[3U];
  980. uint32_t vc58 = abcd[0U];
  981. uint32_t vd58 = abcd[1U];
  982. uint8_t *b58 = x + 24U;
  983. uint32_t u57 = load32_le(b58);
  984. uint32_t xk57 = u57;
  985. uint32_t ti58 = _t[58U];
  986. uint32_t
  987. v57 =
  988. vb58
  989. +
  990. ((va57 + (vc58 ^ (vb58 | ~vd58)) + xk57 + ti58)
  991. << 15U
  992. | (va57 + (vc58 ^ (vb58 | ~vd58)) + xk57 + ti58) >> 17U);
  993. abcd[2U] = v57;
  994. uint32_t va58 = abcd[1U];
  995. uint32_t vb59 = abcd[2U];
  996. uint32_t vc59 = abcd[3U];
  997. uint32_t vd59 = abcd[0U];
  998. uint8_t *b59 = x + 52U;
  999. uint32_t u58 = load32_le(b59);
  1000. uint32_t xk58 = u58;
  1001. uint32_t ti59 = _t[59U];
  1002. uint32_t
  1003. v58 =
  1004. vb59
  1005. +
  1006. ((va58 + (vc59 ^ (vb59 | ~vd59)) + xk58 + ti59)
  1007. << 21U
  1008. | (va58 + (vc59 ^ (vb59 | ~vd59)) + xk58 + ti59) >> 11U);
  1009. abcd[1U] = v58;
  1010. uint32_t va59 = abcd[0U];
  1011. uint32_t vb60 = abcd[1U];
  1012. uint32_t vc60 = abcd[2U];
  1013. uint32_t vd60 = abcd[3U];
  1014. uint8_t *b60 = x + 16U;
  1015. uint32_t u59 = load32_le(b60);
  1016. uint32_t xk59 = u59;
  1017. uint32_t ti60 = _t[60U];
  1018. uint32_t
  1019. v59 =
  1020. vb60
  1021. +
  1022. ((va59 + (vc60 ^ (vb60 | ~vd60)) + xk59 + ti60)
  1023. << 6U
  1024. | (va59 + (vc60 ^ (vb60 | ~vd60)) + xk59 + ti60) >> 26U);
  1025. abcd[0U] = v59;
  1026. uint32_t va60 = abcd[3U];
  1027. uint32_t vb61 = abcd[0U];
  1028. uint32_t vc61 = abcd[1U];
  1029. uint32_t vd61 = abcd[2U];
  1030. uint8_t *b61 = x + 44U;
  1031. uint32_t u60 = load32_le(b61);
  1032. uint32_t xk60 = u60;
  1033. uint32_t ti61 = _t[61U];
  1034. uint32_t
  1035. v60 =
  1036. vb61
  1037. +
  1038. ((va60 + (vc61 ^ (vb61 | ~vd61)) + xk60 + ti61)
  1039. << 10U
  1040. | (va60 + (vc61 ^ (vb61 | ~vd61)) + xk60 + ti61) >> 22U);
  1041. abcd[3U] = v60;
  1042. uint32_t va61 = abcd[2U];
  1043. uint32_t vb62 = abcd[3U];
  1044. uint32_t vc62 = abcd[0U];
  1045. uint32_t vd62 = abcd[1U];
  1046. uint8_t *b62 = x + 8U;
  1047. uint32_t u61 = load32_le(b62);
  1048. uint32_t xk61 = u61;
  1049. uint32_t ti62 = _t[62U];
  1050. uint32_t
  1051. v61 =
  1052. vb62
  1053. +
  1054. ((va61 + (vc62 ^ (vb62 | ~vd62)) + xk61 + ti62)
  1055. << 15U
  1056. | (va61 + (vc62 ^ (vb62 | ~vd62)) + xk61 + ti62) >> 17U);
  1057. abcd[2U] = v61;
  1058. uint32_t va62 = abcd[1U];
  1059. uint32_t vb = abcd[2U];
  1060. uint32_t vc = abcd[3U];
  1061. uint32_t vd = abcd[0U];
  1062. uint8_t *b63 = x + 36U;
  1063. uint32_t u62 = load32_le(b63);
  1064. uint32_t xk62 = u62;
  1065. uint32_t ti = _t[63U];
  1066. uint32_t
  1067. v62 =
  1068. vb
  1069. +
  1070. ((va62 + (vc ^ (vb | ~vd)) + xk62 + ti)
  1071. << 21U
  1072. | (va62 + (vc ^ (vb | ~vd)) + xk62 + ti) >> 11U);
  1073. abcd[1U] = v62;
  1074. uint32_t a = abcd[0U];
  1075. uint32_t b = abcd[1U];
  1076. uint32_t c = abcd[2U];
  1077. uint32_t d = abcd[3U];
  1078. abcd[0U] = a + aa;
  1079. abcd[1U] = b + bb;
  1080. abcd[2U] = c + cc;
  1081. abcd[3U] = d + dd;
  1082. }
  1083. static void pad(uint64_t len, uint8_t *dst)
  1084. {
  1085. uint8_t *dst1 = dst;
  1086. dst1[0U] = 0x80U;
  1087. uint8_t *dst2 = dst + 1U;
  1088. for (uint32_t i = 0U; i < (128U - (9U + (uint32_t)(len % (uint64_t)64U))) % 64U; i++)
  1089. {
  1090. dst2[i] = 0U;
  1091. }
  1092. uint8_t *dst3 = dst + 1U + (128U - (9U + (uint32_t)(len % (uint64_t)64U))) % 64U;
  1093. store64_le(dst3, len << 3U);
  1094. }
  1095. void Hacl_Hash_MD5_finish(uint32_t *s, uint8_t *dst)
  1096. {
  1097. KRML_MAYBE_FOR4(i, 0U, 4U, 1U, store32_le(dst + i * 4U, s[i]););
  1098. }
  1099. void Hacl_Hash_MD5_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks)
  1100. {
  1101. for (uint32_t i = 0U; i < n_blocks; i++)
  1102. {
  1103. uint32_t sz = 64U;
  1104. uint8_t *block = blocks + sz * i;
  1105. update(s, block);
  1106. }
  1107. }
  1108. void
  1109. Hacl_Hash_MD5_update_last(uint32_t *s, uint64_t prev_len, uint8_t *input, uint32_t input_len)
  1110. {
  1111. uint32_t blocks_n = input_len / 64U;
  1112. uint32_t blocks_len = blocks_n * 64U;
  1113. uint8_t *blocks = input;
  1114. uint32_t rest_len = input_len - blocks_len;
  1115. uint8_t *rest = input + blocks_len;
  1116. Hacl_Hash_MD5_update_multi(s, blocks, blocks_n);
  1117. uint64_t total_input_len = prev_len + (uint64_t)input_len;
  1118. uint32_t pad_len = 1U + (128U - (9U + (uint32_t)(total_input_len % (uint64_t)64U))) % 64U + 8U;
  1119. uint32_t tmp_len = rest_len + pad_len;
  1120. uint8_t tmp_twoblocks[128U] = { 0U };
  1121. uint8_t *tmp = tmp_twoblocks;
  1122. uint8_t *tmp_rest = tmp;
  1123. uint8_t *tmp_pad = tmp + rest_len;
  1124. memcpy(tmp_rest, rest, rest_len * sizeof (uint8_t));
  1125. pad(total_input_len, tmp_pad);
  1126. Hacl_Hash_MD5_update_multi(s, tmp, tmp_len / 64U);
  1127. }
  1128. void Hacl_Hash_MD5_hash_oneshot(uint8_t *output, uint8_t *input, uint32_t input_len)
  1129. {
  1130. uint32_t s[4U] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U };
  1131. uint32_t blocks_n0 = input_len / 64U;
  1132. uint32_t blocks_n1;
  1133. if (input_len % 64U == 0U && blocks_n0 > 0U)
  1134. {
  1135. blocks_n1 = blocks_n0 - 1U;
  1136. }
  1137. else
  1138. {
  1139. blocks_n1 = blocks_n0;
  1140. }
  1141. uint32_t blocks_len0 = blocks_n1 * 64U;
  1142. uint8_t *blocks0 = input;
  1143. uint32_t rest_len0 = input_len - blocks_len0;
  1144. uint8_t *rest0 = input + blocks_len0;
  1145. uint32_t blocks_n = blocks_n1;
  1146. uint32_t blocks_len = blocks_len0;
  1147. uint8_t *blocks = blocks0;
  1148. uint32_t rest_len = rest_len0;
  1149. uint8_t *rest = rest0;
  1150. Hacl_Hash_MD5_update_multi(s, blocks, blocks_n);
  1151. Hacl_Hash_MD5_update_last(s, (uint64_t)blocks_len, rest, rest_len);
  1152. Hacl_Hash_MD5_finish(s, output);
  1153. }
  1154. Hacl_Streaming_MD_state_32 *Hacl_Hash_MD5_malloc(void)
  1155. {
  1156. uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t));
  1157. uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(4U, sizeof (uint32_t));
  1158. Hacl_Streaming_MD_state_32
  1159. s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U };
  1160. Hacl_Streaming_MD_state_32
  1161. *p = (Hacl_Streaming_MD_state_32 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_32));
  1162. p[0U] = s;
  1163. Hacl_Hash_MD5_init(block_state);
  1164. return p;
  1165. }
  1166. void Hacl_Hash_MD5_reset(Hacl_Streaming_MD_state_32 *state)
  1167. {
  1168. Hacl_Streaming_MD_state_32 scrut = *state;
  1169. uint8_t *buf = scrut.buf;
  1170. uint32_t *block_state = scrut.block_state;
  1171. Hacl_Hash_MD5_init(block_state);
  1172. Hacl_Streaming_MD_state_32
  1173. tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U };
  1174. state[0U] = tmp;
  1175. }
  1176. /**
  1177. 0 = success, 1 = max length exceeded
  1178. */
  1179. Hacl_Streaming_Types_error_code
  1180. Hacl_Hash_MD5_update(Hacl_Streaming_MD_state_32 *state, uint8_t *chunk, uint32_t chunk_len)
  1181. {
  1182. Hacl_Streaming_MD_state_32 s = *state;
  1183. uint64_t total_len = s.total_len;
  1184. if ((uint64_t)chunk_len > 2305843009213693951ULL - total_len)
  1185. {
  1186. return Hacl_Streaming_Types_MaximumLengthExceeded;
  1187. }
  1188. uint32_t sz;
  1189. if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL)
  1190. {
  1191. sz = 64U;
  1192. }
  1193. else
  1194. {
  1195. sz = (uint32_t)(total_len % (uint64_t)64U);
  1196. }
  1197. if (chunk_len <= 64U - sz)
  1198. {
  1199. Hacl_Streaming_MD_state_32 s1 = *state;
  1200. uint32_t *block_state1 = s1.block_state;
  1201. uint8_t *buf = s1.buf;
  1202. uint64_t total_len1 = s1.total_len;
  1203. uint32_t sz1;
  1204. if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL)
  1205. {
  1206. sz1 = 64U;
  1207. }
  1208. else
  1209. {
  1210. sz1 = (uint32_t)(total_len1 % (uint64_t)64U);
  1211. }
  1212. uint8_t *buf2 = buf + sz1;
  1213. memcpy(buf2, chunk, chunk_len * sizeof (uint8_t));
  1214. uint64_t total_len2 = total_len1 + (uint64_t)chunk_len;
  1215. *state
  1216. =
  1217. (
  1218. (Hacl_Streaming_MD_state_32){
  1219. .block_state = block_state1,
  1220. .buf = buf,
  1221. .total_len = total_len2
  1222. }
  1223. );
  1224. }
  1225. else if (sz == 0U)
  1226. {
  1227. Hacl_Streaming_MD_state_32 s1 = *state;
  1228. uint32_t *block_state1 = s1.block_state;
  1229. uint8_t *buf = s1.buf;
  1230. uint64_t total_len1 = s1.total_len;
  1231. uint32_t sz1;
  1232. if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL)
  1233. {
  1234. sz1 = 64U;
  1235. }
  1236. else
  1237. {
  1238. sz1 = (uint32_t)(total_len1 % (uint64_t)64U);
  1239. }
  1240. if (!(sz1 == 0U))
  1241. {
  1242. Hacl_Hash_MD5_update_multi(block_state1, buf, 1U);
  1243. }
  1244. uint32_t ite;
  1245. if ((uint64_t)chunk_len % (uint64_t)64U == 0ULL && (uint64_t)chunk_len > 0ULL)
  1246. {
  1247. ite = 64U;
  1248. }
  1249. else
  1250. {
  1251. ite = (uint32_t)((uint64_t)chunk_len % (uint64_t)64U);
  1252. }
  1253. uint32_t n_blocks = (chunk_len - ite) / 64U;
  1254. uint32_t data1_len = n_blocks * 64U;
  1255. uint32_t data2_len = chunk_len - data1_len;
  1256. uint8_t *data1 = chunk;
  1257. uint8_t *data2 = chunk + data1_len;
  1258. Hacl_Hash_MD5_update_multi(block_state1, data1, data1_len / 64U);
  1259. uint8_t *dst = buf;
  1260. memcpy(dst, data2, data2_len * sizeof (uint8_t));
  1261. *state
  1262. =
  1263. (
  1264. (Hacl_Streaming_MD_state_32){
  1265. .block_state = block_state1,
  1266. .buf = buf,
  1267. .total_len = total_len1 + (uint64_t)chunk_len
  1268. }
  1269. );
  1270. }
  1271. else
  1272. {
  1273. uint32_t diff = 64U - sz;
  1274. uint8_t *chunk1 = chunk;
  1275. uint8_t *chunk2 = chunk + diff;
  1276. Hacl_Streaming_MD_state_32 s1 = *state;
  1277. uint32_t *block_state10 = s1.block_state;
  1278. uint8_t *buf0 = s1.buf;
  1279. uint64_t total_len10 = s1.total_len;
  1280. uint32_t sz10;
  1281. if (total_len10 % (uint64_t)64U == 0ULL && total_len10 > 0ULL)
  1282. {
  1283. sz10 = 64U;
  1284. }
  1285. else
  1286. {
  1287. sz10 = (uint32_t)(total_len10 % (uint64_t)64U);
  1288. }
  1289. uint8_t *buf2 = buf0 + sz10;
  1290. memcpy(buf2, chunk1, diff * sizeof (uint8_t));
  1291. uint64_t total_len2 = total_len10 + (uint64_t)diff;
  1292. *state
  1293. =
  1294. (
  1295. (Hacl_Streaming_MD_state_32){
  1296. .block_state = block_state10,
  1297. .buf = buf0,
  1298. .total_len = total_len2
  1299. }
  1300. );
  1301. Hacl_Streaming_MD_state_32 s10 = *state;
  1302. uint32_t *block_state1 = s10.block_state;
  1303. uint8_t *buf = s10.buf;
  1304. uint64_t total_len1 = s10.total_len;
  1305. uint32_t sz1;
  1306. if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL)
  1307. {
  1308. sz1 = 64U;
  1309. }
  1310. else
  1311. {
  1312. sz1 = (uint32_t)(total_len1 % (uint64_t)64U);
  1313. }
  1314. if (!(sz1 == 0U))
  1315. {
  1316. Hacl_Hash_MD5_update_multi(block_state1, buf, 1U);
  1317. }
  1318. uint32_t ite;
  1319. if
  1320. ((uint64_t)(chunk_len - diff) % (uint64_t)64U == 0ULL && (uint64_t)(chunk_len - diff) > 0ULL)
  1321. {
  1322. ite = 64U;
  1323. }
  1324. else
  1325. {
  1326. ite = (uint32_t)((uint64_t)(chunk_len - diff) % (uint64_t)64U);
  1327. }
  1328. uint32_t n_blocks = (chunk_len - diff - ite) / 64U;
  1329. uint32_t data1_len = n_blocks * 64U;
  1330. uint32_t data2_len = chunk_len - diff - data1_len;
  1331. uint8_t *data1 = chunk2;
  1332. uint8_t *data2 = chunk2 + data1_len;
  1333. Hacl_Hash_MD5_update_multi(block_state1, data1, data1_len / 64U);
  1334. uint8_t *dst = buf;
  1335. memcpy(dst, data2, data2_len * sizeof (uint8_t));
  1336. *state
  1337. =
  1338. (
  1339. (Hacl_Streaming_MD_state_32){
  1340. .block_state = block_state1,
  1341. .buf = buf,
  1342. .total_len = total_len1 + (uint64_t)(chunk_len - diff)
  1343. }
  1344. );
  1345. }
  1346. return Hacl_Streaming_Types_Success;
  1347. }
  1348. void Hacl_Hash_MD5_digest(Hacl_Streaming_MD_state_32 *state, uint8_t *output)
  1349. {
  1350. Hacl_Streaming_MD_state_32 scrut = *state;
  1351. uint32_t *block_state = scrut.block_state;
  1352. uint8_t *buf_ = scrut.buf;
  1353. uint64_t total_len = scrut.total_len;
  1354. uint32_t r;
  1355. if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL)
  1356. {
  1357. r = 64U;
  1358. }
  1359. else
  1360. {
  1361. r = (uint32_t)(total_len % (uint64_t)64U);
  1362. }
  1363. uint8_t *buf_1 = buf_;
  1364. uint32_t tmp_block_state[4U] = { 0U };
  1365. memcpy(tmp_block_state, block_state, 4U * sizeof (uint32_t));
  1366. uint32_t ite;
  1367. if (r % 64U == 0U && r > 0U)
  1368. {
  1369. ite = 64U;
  1370. }
  1371. else
  1372. {
  1373. ite = r % 64U;
  1374. }
  1375. uint8_t *buf_last = buf_1 + r - ite;
  1376. uint8_t *buf_multi = buf_1;
  1377. Hacl_Hash_MD5_update_multi(tmp_block_state, buf_multi, 0U);
  1378. uint64_t prev_len_last = total_len - (uint64_t)r;
  1379. Hacl_Hash_MD5_update_last(tmp_block_state, prev_len_last, buf_last, r);
  1380. Hacl_Hash_MD5_finish(tmp_block_state, output);
  1381. }
  1382. void Hacl_Hash_MD5_free(Hacl_Streaming_MD_state_32 *state)
  1383. {
  1384. Hacl_Streaming_MD_state_32 scrut = *state;
  1385. uint8_t *buf = scrut.buf;
  1386. uint32_t *block_state = scrut.block_state;
  1387. KRML_HOST_FREE(block_state);
  1388. KRML_HOST_FREE(buf);
  1389. KRML_HOST_FREE(state);
  1390. }
  1391. Hacl_Streaming_MD_state_32 *Hacl_Hash_MD5_copy(Hacl_Streaming_MD_state_32 *state)
  1392. {
  1393. Hacl_Streaming_MD_state_32 scrut = *state;
  1394. uint32_t *block_state0 = scrut.block_state;
  1395. uint8_t *buf0 = scrut.buf;
  1396. uint64_t total_len0 = scrut.total_len;
  1397. uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t));
  1398. memcpy(buf, buf0, 64U * sizeof (uint8_t));
  1399. uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(4U, sizeof (uint32_t));
  1400. memcpy(block_state, block_state0, 4U * sizeof (uint32_t));
  1401. Hacl_Streaming_MD_state_32
  1402. s = { .block_state = block_state, .buf = buf, .total_len = total_len0 };
  1403. Hacl_Streaming_MD_state_32
  1404. *p = (Hacl_Streaming_MD_state_32 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_32));
  1405. p[0U] = s;
  1406. return p;
  1407. }
  1408. void Hacl_Hash_MD5_hash(uint8_t *output, uint8_t *input, uint32_t input_len)
  1409. {
  1410. Hacl_Hash_MD5_hash_oneshot(output, input, input_len);
  1411. }