_blake2.odin 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794
  1. package _blake2
  2. /*
  3. Copyright 2021 zhibog
  4. Made available under the BSD-3 license.
  5. List of contributors:
  6. zhibog, dotbmp: Initial implementation.
  7. Implementation of the BLAKE2 hashing algorithm, as defined in <https://datatracker.ietf.org/doc/html/rfc7693> and <https://www.blake2.net/>
  8. */
  9. import "../util"
  10. BLAKE2S_BLOCK_SIZE :: 64
  11. BLAKE2S_SIZE :: 32
  12. BLAKE2B_BLOCK_SIZE :: 128
  13. BLAKE2B_SIZE :: 64
  14. Blake2s_Context :: struct {
  15. h: [8]u32,
  16. t: [2]u32,
  17. f: [2]u32,
  18. x: [BLAKE2S_BLOCK_SIZE]byte,
  19. nx: int,
  20. ih: [8]u32,
  21. padded_key: [BLAKE2S_BLOCK_SIZE]byte,
  22. is_keyed: bool,
  23. size: byte,
  24. is_last_node: bool,
  25. cfg: Blake2_Config,
  26. }
  27. Blake2b_Context :: struct {
  28. h: [8]u64,
  29. t: [2]u64,
  30. f: [2]u64,
  31. x: [BLAKE2B_BLOCK_SIZE]byte,
  32. nx: int,
  33. ih: [8]u64,
  34. padded_key: [BLAKE2B_BLOCK_SIZE]byte,
  35. is_keyed: bool,
  36. size: byte,
  37. is_last_node: bool,
  38. cfg: Blake2_Config,
  39. }
  40. Blake2_Config :: struct {
  41. size: byte,
  42. key: []byte,
  43. salt: []byte,
  44. person: []byte,
  45. tree: union{Blake2_Tree},
  46. }
  47. Blake2_Tree :: struct {
  48. fanout: byte,
  49. max_depth: byte,
  50. leaf_size: u32,
  51. node_offset: u64,
  52. node_depth: byte,
  53. inner_hash_size: byte,
  54. is_last_node: bool,
  55. }
  56. BLAKE2S_IV := [8]u32 {
  57. 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
  58. 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
  59. }
  60. BLAKE2B_IV := [8]u64 {
  61. 0x6a09e667f3bcc908, 0xbb67ae8584caa73b,
  62. 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,
  63. 0x510e527fade682d1, 0x9b05688c2b3e6c1f,
  64. 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179,
  65. }
  66. init :: proc(ctx: ^$T) {
  67. when T == Blake2s_Context {
  68. block_size :: BLAKE2S_BLOCK_SIZE
  69. } else when T == Blake2b_Context {
  70. block_size :: BLAKE2B_BLOCK_SIZE
  71. }
  72. p := make([]byte, block_size)
  73. defer delete(p)
  74. p[0] = ctx.cfg.size
  75. p[1] = byte(len(ctx.cfg.key))
  76. if ctx.cfg.salt != nil {
  77. when T == Blake2s_Context {
  78. copy(p[16:], ctx.cfg.salt)
  79. } else when T == Blake2b_Context {
  80. copy(p[32:], ctx.cfg.salt)
  81. }
  82. }
  83. if ctx.cfg.person != nil {
  84. when T == Blake2s_Context {
  85. copy(p[24:], ctx.cfg.person)
  86. } else when T == Blake2b_Context {
  87. copy(p[48:], ctx.cfg.person)
  88. }
  89. }
  90. if ctx.cfg.tree != nil {
  91. p[2] = ctx.cfg.tree.(Blake2_Tree).fanout
  92. p[3] = ctx.cfg.tree.(Blake2_Tree).max_depth
  93. util.PUT_U32_LE(p[4:], ctx.cfg.tree.(Blake2_Tree).leaf_size)
  94. when T == Blake2s_Context {
  95. p[8] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset)
  96. p[9] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 8)
  97. p[10] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 16)
  98. p[11] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 24)
  99. p[12] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 32)
  100. p[13] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 40)
  101. p[14] = ctx.cfg.tree.(Blake2_Tree).node_depth
  102. p[15] = ctx.cfg.tree.(Blake2_Tree).inner_hash_size
  103. } else when T == Blake2b_Context {
  104. util.PUT_U64_LE(p[8:], ctx.cfg.tree.(Blake2_Tree).node_offset)
  105. p[16] = ctx.cfg.tree.(Blake2_Tree).node_depth
  106. p[17] = ctx.cfg.tree.(Blake2_Tree).inner_hash_size
  107. }
  108. } else {
  109. p[2], p[3] = 1, 1
  110. }
  111. ctx.size = ctx.cfg.size
  112. for i := 0; i < 8; i += 1 {
  113. when T == Blake2s_Context {
  114. ctx.h[i] = BLAKE2S_IV[i] ~ util.U32_LE(p[i * 4:])
  115. }
  116. when T == Blake2b_Context {
  117. ctx.h[i] = BLAKE2B_IV[i] ~ util.U64_LE(p[i * 8:])
  118. }
  119. }
  120. if ctx.cfg.tree != nil && ctx.cfg.tree.(Blake2_Tree).is_last_node {
  121. ctx.is_last_node = true
  122. }
  123. if len(ctx.cfg.key) > 0 {
  124. copy(ctx.padded_key[:], ctx.cfg.key)
  125. update(ctx, ctx.padded_key[:])
  126. ctx.is_keyed = true
  127. }
  128. copy(ctx.ih[:], ctx.h[:])
  129. copy(ctx.h[:], ctx.ih[:])
  130. if ctx.is_keyed {
  131. update(ctx, ctx.padded_key[:])
  132. }
  133. }
  134. update :: proc "contextless" (ctx: ^$T, p: []byte) {
  135. p := p
  136. when T == Blake2s_Context {
  137. block_size :: BLAKE2S_BLOCK_SIZE
  138. } else when T == Blake2b_Context {
  139. block_size :: BLAKE2B_BLOCK_SIZE
  140. }
  141. left := block_size - ctx.nx
  142. if len(p) > left {
  143. copy(ctx.x[ctx.nx:], p[:left])
  144. p = p[left:]
  145. blocks(ctx, ctx.x[:])
  146. ctx.nx = 0
  147. }
  148. if len(p) > block_size {
  149. n := len(p) &~ (block_size - 1)
  150. if n == len(p) {
  151. n -= block_size
  152. }
  153. blocks(ctx, p[:n])
  154. p = p[n:]
  155. }
  156. ctx.nx += copy(ctx.x[ctx.nx:], p)
  157. }
  158. final :: proc "contextless" (ctx: ^$T, hash: []byte) {
  159. when T == Blake2s_Context {
  160. blake2s_final(ctx, hash)
  161. }
  162. when T == Blake2b_Context {
  163. blake2b_final(ctx, hash)
  164. }
  165. }
  166. blake2s_final :: proc "contextless" (ctx: ^Blake2s_Context, hash: []byte) {
  167. if ctx.is_keyed {
  168. for i := 0; i < len(ctx.padded_key); i += 1 {
  169. ctx.padded_key[i] = 0
  170. }
  171. }
  172. dec := BLAKE2S_BLOCK_SIZE - u32(ctx.nx)
  173. if ctx.t[0] < dec {
  174. ctx.t[1] -= 1
  175. }
  176. ctx.t[0] -= dec
  177. ctx.f[0] = 0xffffffff
  178. if ctx.is_last_node {
  179. ctx.f[1] = 0xffffffff
  180. }
  181. blocks(ctx, ctx.x[:])
  182. j := 0
  183. for s, _ in ctx.h[:(ctx.size - 1) / 4 + 1] {
  184. hash[j + 0] = byte(s >> 0)
  185. hash[j + 1] = byte(s >> 8)
  186. hash[j + 2] = byte(s >> 16)
  187. hash[j + 3] = byte(s >> 24)
  188. j += 4
  189. }
  190. }
  191. blake2b_final :: proc "contextless" (ctx: ^Blake2b_Context, hash: []byte) {
  192. if ctx.is_keyed {
  193. for i := 0; i < len(ctx.padded_key); i += 1 {
  194. ctx.padded_key[i] = 0
  195. }
  196. }
  197. dec := BLAKE2B_BLOCK_SIZE - u64(ctx.nx)
  198. if ctx.t[0] < dec {
  199. ctx.t[1] -= 1
  200. }
  201. ctx.t[0] -= dec
  202. ctx.f[0] = 0xffffffffffffffff
  203. if ctx.is_last_node {
  204. ctx.f[1] = 0xffffffffffffffff
  205. }
  206. blocks(ctx, ctx.x[:])
  207. j := 0
  208. for s, _ in ctx.h[:(ctx.size - 1) / 8 + 1] {
  209. hash[j + 0] = byte(s >> 0)
  210. hash[j + 1] = byte(s >> 8)
  211. hash[j + 2] = byte(s >> 16)
  212. hash[j + 3] = byte(s >> 24)
  213. hash[j + 4] = byte(s >> 32)
  214. hash[j + 5] = byte(s >> 40)
  215. hash[j + 6] = byte(s >> 48)
  216. hash[j + 7] = byte(s >> 56)
  217. j += 8
  218. }
  219. }
  220. blocks :: proc "contextless" (ctx: ^$T, p: []byte) {
  221. when T == Blake2s_Context {
  222. blake2s_blocks(ctx, p)
  223. }
  224. when T == Blake2b_Context {
  225. blake2b_blocks(ctx, p)
  226. }
  227. }
  228. blake2s_blocks :: #force_inline proc "contextless" (ctx: ^Blake2s_Context, p: []byte) {
  229. h0, h1, h2, h3, h4, h5, h6, h7 := ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7]
  230. p := p
  231. for len(p) >= BLAKE2S_BLOCK_SIZE {
  232. ctx.t[0] += BLAKE2S_BLOCK_SIZE
  233. if ctx.t[0] < BLAKE2S_BLOCK_SIZE {
  234. ctx.t[1] += 1
  235. }
  236. v0, v1, v2, v3, v4, v5, v6, v7 := h0, h1, h2, h3, h4, h5, h6, h7
  237. v8 := BLAKE2S_IV[0]
  238. v9 := BLAKE2S_IV[1]
  239. v10 := BLAKE2S_IV[2]
  240. v11 := BLAKE2S_IV[3]
  241. v12 := BLAKE2S_IV[4] ~ ctx.t[0]
  242. v13 := BLAKE2S_IV[5] ~ ctx.t[1]
  243. v14 := BLAKE2S_IV[6] ~ ctx.f[0]
  244. v15 := BLAKE2S_IV[7] ~ ctx.f[1]
  245. m: [16]u32
  246. j := 0
  247. for i := 0; i < 16; i += 1 {
  248. m[i] = u32(p[j]) | u32(p[j + 1]) << 8 | u32(p[j + 2]) << 16 | u32(p[j + 3]) << 24
  249. j += 4
  250. }
  251. v0 += m[0]
  252. v0 += v4
  253. v12 ~= v0
  254. v12 = v12 << (32 - 16) | v12 >> 16
  255. v8 += v12
  256. v4 ~= v8
  257. v4 = v4 << (32 - 12) | v4 >> 12
  258. v1 += m[2]
  259. v1 += v5
  260. v13 ~= v1
  261. v13 = v13 << (32 - 16) | v13 >> 16
  262. v9 += v13
  263. v5 ~= v9
  264. v5 = v5 << (32 - 12) | v5 >> 12
  265. v2 += m[4]
  266. v2 += v6
  267. v14 ~= v2
  268. v14 = v14 << (32 - 16) | v14 >> 16
  269. v10 += v14
  270. v6 ~= v10
  271. v6 = v6 << (32 - 12) | v6 >> 12
  272. v3 += m[6]
  273. v3 += v7
  274. v15 ~= v3
  275. v15 = v15 << (32 - 16) | v15 >> 16
  276. v11 += v15
  277. v7 ~= v11
  278. v7 = v7 << (32 - 12) | v7 >> 12
  279. v2 += m[5]
  280. v2 += v6
  281. v14 ~= v2
  282. v14 = v14 << (32 - 8) | v14 >> 8
  283. v10 += v14
  284. v6 ~= v10
  285. v6 = v6 << (32 - 7) | v6 >> 7
  286. v3 += m[7]
  287. v3 += v7
  288. v15 ~= v3
  289. v15 = v15 << (32 - 8) | v15 >> 8
  290. v11 += v15
  291. v7 ~= v11
  292. v7 = v7 << (32 - 7) | v7 >> 7
  293. v1 += m[3]
  294. v1 += v5
  295. v13 ~= v1
  296. v13 = v13 << (32 - 8) | v13 >> 8
  297. v9 += v13
  298. v5 ~= v9
  299. v5 = v5 << (32 - 7) | v5 >> 7
  300. v0 += m[1]
  301. v0 += v4
  302. v12 ~= v0
  303. v12 = v12 << (32 - 8) | v12 >> 8
  304. v8 += v12
  305. v4 ~= v8
  306. v4 = v4 << (32 - 7) | v4 >> 7
  307. v0 += m[8]
  308. v0 += v5
  309. v15 ~= v0
  310. v15 = v15 << (32 - 16) | v15 >> 16
  311. v10 += v15
  312. v5 ~= v10
  313. v5 = v5 << (32 - 12) | v5 >> 12
  314. v1 += m[10]
  315. v1 += v6
  316. v12 ~= v1
  317. v12 = v12 << (32 - 16) | v12 >> 16
  318. v11 += v12
  319. v6 ~= v11
  320. v6 = v6 << (32 - 12) | v6 >> 12
  321. v2 += m[12]
  322. v2 += v7
  323. v13 ~= v2
  324. v13 = v13 << (32 - 16) | v13 >> 16
  325. v8 += v13
  326. v7 ~= v8
  327. v7 = v7 << (32 - 12) | v7 >> 12
  328. v3 += m[14]
  329. v3 += v4
  330. v14 ~= v3
  331. v14 = v14 << (32 - 16) | v14 >> 16
  332. v9 += v14
  333. v4 ~= v9
  334. v4 = v4 << (32 - 12) | v4 >> 12
  335. v2 += m[13]
  336. v2 += v7
  337. v13 ~= v2
  338. v13 = v13 << (32 - 8) | v13 >> 8
  339. v8 += v13
  340. v7 ~= v8
  341. v7 = v7 << (32 - 7) | v7 >> 7
  342. v3 += m[15]
  343. v3 += v4
  344. v14 ~= v3
  345. v14 = v14 << (32 - 8) | v14 >> 8
  346. v9 += v14
  347. v4 ~= v9
  348. v4 = v4 << (32 - 7) | v4 >> 7
  349. v1 += m[11]
  350. v1 += v6
  351. v12 ~= v1
  352. v12 = v12 << (32 - 8) | v12 >> 8
  353. v11 += v12
  354. v6 ~= v11
  355. v6 = v6 << (32 - 7) | v6 >> 7
  356. v0 += m[9]
  357. v0 += v5
  358. v15 ~= v0
  359. v15 = v15 << (32 - 8) | v15 >> 8
  360. v10 += v15
  361. v5 ~= v10
  362. v5 = v5 << (32 - 7) | v5 >> 7
  363. v0 += m[14]
  364. v0 += v4
  365. v12 ~= v0
  366. v12 = v12 << (32 - 16) | v12 >> 16
  367. v8 += v12
  368. v4 ~= v8
  369. v4 = v4 << (32 - 12) | v4 >> 12
  370. v1 += m[4]
  371. v1 += v5
  372. v13 ~= v1
  373. v13 = v13 << (32 - 16) | v13 >> 16
  374. v9 += v13
  375. v5 ~= v9
  376. v5 = v5 << (32 - 12) | v5 >> 12
  377. v2 += m[9]
  378. v2 += v6
  379. v14 ~= v2
  380. v14 = v14 << (32 - 16) | v14 >> 16
  381. v10 += v14
  382. v6 ~= v10
  383. v6 = v6 << (32 - 12) | v6 >> 12
  384. v3 += m[13]
  385. v3 += v7
  386. v15 ~= v3
  387. v15 = v15 << (32 - 16) | v15 >> 16
  388. v11 += v15
  389. v7 ~= v11
  390. v7 = v7 << (32 - 12) | v7 >> 12
  391. v2 += m[15]
  392. v2 += v6
  393. v14 ~= v2
  394. v14 = v14 << (32 - 8) | v14 >> 8
  395. v10 += v14
  396. v6 ~= v10
  397. v6 = v6 << (32 - 7) | v6 >> 7
  398. v3 += m[6]
  399. v3 += v7
  400. v15 ~= v3
  401. v15 = v15 << (32 - 8) | v15 >> 8
  402. v11 += v15
  403. v7 ~= v11
  404. v7 = v7 << (32 - 7) | v7 >> 7
  405. v1 += m[8]
  406. v1 += v5
  407. v13 ~= v1
  408. v13 = v13 << (32 - 8) | v13 >> 8
  409. v9 += v13
  410. v5 ~= v9
  411. v5 = v5 << (32 - 7) | v5 >> 7
  412. v0 += m[10]
  413. v0 += v4
  414. v12 ~= v0
  415. v12 = v12 << (32 - 8) | v12 >> 8
  416. v8 += v12
  417. v4 ~= v8
  418. v4 = v4 << (32 - 7) | v4 >> 7
  419. v0 += m[1]
  420. v0 += v5
  421. v15 ~= v0
  422. v15 = v15 << (32 - 16) | v15 >> 16
  423. v10 += v15
  424. v5 ~= v10
  425. v5 = v5 << (32 - 12) | v5 >> 12
  426. v1 += m[0]
  427. v1 += v6
  428. v12 ~= v1
  429. v12 = v12 << (32 - 16) | v12 >> 16
  430. v11 += v12
  431. v6 ~= v11
  432. v6 = v6 << (32 - 12) | v6 >> 12
  433. v2 += m[11]
  434. v2 += v7
  435. v13 ~= v2
  436. v13 = v13 << (32 - 16) | v13 >> 16
  437. v8 += v13
  438. v7 ~= v8
  439. v7 = v7 << (32 - 12) | v7 >> 12
  440. v3 += m[5]
  441. v3 += v4
  442. v14 ~= v3
  443. v14 = v14 << (32 - 16) | v14 >> 16
  444. v9 += v14
  445. v4 ~= v9
  446. v4 = v4 << (32 - 12) | v4 >> 12
  447. v2 += m[7]
  448. v2 += v7
  449. v13 ~= v2
  450. v13 = v13 << (32 - 8) | v13 >> 8
  451. v8 += v13
  452. v7 ~= v8
  453. v7 = v7 << (32 - 7) | v7 >> 7
  454. v3 += m[3]
  455. v3 += v4
  456. v14 ~= v3
  457. v14 = v14 << (32 - 8) | v14 >> 8
  458. v9 += v14
  459. v4 ~= v9
  460. v4 = v4 << (32 - 7) | v4 >> 7
  461. v1 += m[2]
  462. v1 += v6
  463. v12 ~= v1
  464. v12 = v12 << (32 - 8) | v12 >> 8
  465. v11 += v12
  466. v6 ~= v11
  467. v6 = v6 << (32 - 7) | v6 >> 7
  468. v0 += m[12]
  469. v0 += v5
  470. v15 ~= v0
  471. v15 = v15 << (32 - 8) | v15 >> 8
  472. v10 += v15
  473. v5 ~= v10
  474. v5 = v5 << (32 - 7) | v5 >> 7
  475. v0 += m[11]
  476. v0 += v4
  477. v12 ~= v0
  478. v12 = v12 << (32 - 16) | v12 >> 16
  479. v8 += v12
  480. v4 ~= v8
  481. v4 = v4 << (32 - 12) | v4 >> 12
  482. v1 += m[12]
  483. v1 += v5
  484. v13 ~= v1
  485. v13 = v13 << (32 - 16) | v13 >> 16
  486. v9 += v13
  487. v5 ~= v9
  488. v5 = v5 << (32 - 12) | v5 >> 12
  489. v2 += m[5]
  490. v2 += v6
  491. v14 ~= v2
  492. v14 = v14 << (32 - 16) | v14 >> 16
  493. v10 += v14
  494. v6 ~= v10
  495. v6 = v6 << (32 - 12) | v6 >> 12
  496. v3 += m[15]
  497. v3 += v7
  498. v15 ~= v3
  499. v15 = v15 << (32 - 16) | v15 >> 16
  500. v11 += v15
  501. v7 ~= v11
  502. v7 = v7 << (32 - 12) | v7 >> 12
  503. v2 += m[2]
  504. v2 += v6
  505. v14 ~= v2
  506. v14 = v14 << (32 - 8) | v14 >> 8
  507. v10 += v14
  508. v6 ~= v10
  509. v6 = v6 << (32 - 7) | v6 >> 7
  510. v3 += m[13]
  511. v3 += v7
  512. v15 ~= v3
  513. v15 = v15 << (32 - 8) | v15 >> 8
  514. v11 += v15
  515. v7 ~= v11
  516. v7 = v7 << (32 - 7) | v7 >> 7
  517. v1 += m[0]
  518. v1 += v5
  519. v13 ~= v1
  520. v13 = v13 << (32 - 8) | v13 >> 8
  521. v9 += v13
  522. v5 ~= v9
  523. v5 = v5 << (32 - 7) | v5 >> 7
  524. v0 += m[8]
  525. v0 += v4
  526. v12 ~= v0
  527. v12 = v12 << (32 - 8) | v12 >> 8
  528. v8 += v12
  529. v4 ~= v8
  530. v4 = v4 << (32 - 7) | v4 >> 7
  531. v0 += m[10]
  532. v0 += v5
  533. v15 ~= v0
  534. v15 = v15 << (32 - 16) | v15 >> 16
  535. v10 += v15
  536. v5 ~= v10
  537. v5 = v5 << (32 - 12) | v5 >> 12
  538. v1 += m[3]
  539. v1 += v6
  540. v12 ~= v1
  541. v12 = v12 << (32 - 16) | v12 >> 16
  542. v11 += v12
  543. v6 ~= v11
  544. v6 = v6 << (32 - 12) | v6 >> 12
  545. v2 += m[7]
  546. v2 += v7
  547. v13 ~= v2
  548. v13 = v13 << (32 - 16) | v13 >> 16
  549. v8 += v13
  550. v7 ~= v8
  551. v7 = v7 << (32 - 12) | v7 >> 12
  552. v3 += m[9]
  553. v3 += v4
  554. v14 ~= v3
  555. v14 = v14 << (32 - 16) | v14 >> 16
  556. v9 += v14
  557. v4 ~= v9
  558. v4 = v4 << (32 - 12) | v4 >> 12
  559. v2 += m[1]
  560. v2 += v7
  561. v13 ~= v2
  562. v13 = v13 << (32 - 8) | v13 >> 8
  563. v8 += v13
  564. v7 ~= v8
  565. v7 = v7 << (32 - 7) | v7 >> 7
  566. v3 += m[4]
  567. v3 += v4
  568. v14 ~= v3
  569. v14 = v14 << (32 - 8) | v14 >> 8
  570. v9 += v14
  571. v4 ~= v9
  572. v4 = v4 << (32 - 7) | v4 >> 7
  573. v1 += m[6]
  574. v1 += v6
  575. v12 ~= v1
  576. v12 = v12 << (32 - 8) | v12 >> 8
  577. v11 += v12
  578. v6 ~= v11
  579. v6 = v6 << (32 - 7) | v6 >> 7
  580. v0 += m[14]
  581. v0 += v5
  582. v15 ~= v0
  583. v15 = v15 << (32 - 8) | v15 >> 8
  584. v10 += v15
  585. v5 ~= v10
  586. v5 = v5 << (32 - 7) | v5 >> 7
  587. v0 += m[7]
  588. v0 += v4
  589. v12 ~= v0
  590. v12 = v12 << (32 - 16) | v12 >> 16
  591. v8 += v12
  592. v4 ~= v8
  593. v4 = v4 << (32 - 12) | v4 >> 12
  594. v1 += m[3]
  595. v1 += v5
  596. v13 ~= v1
  597. v13 = v13 << (32 - 16) | v13 >> 16
  598. v9 += v13
  599. v5 ~= v9
  600. v5 = v5 << (32 - 12) | v5 >> 12
  601. v2 += m[13]
  602. v2 += v6
  603. v14 ~= v2
  604. v14 = v14 << (32 - 16) | v14 >> 16
  605. v10 += v14
  606. v6 ~= v10
  607. v6 = v6 << (32 - 12) | v6 >> 12
  608. v3 += m[11]
  609. v3 += v7
  610. v15 ~= v3
  611. v15 = v15 << (32 - 16) | v15 >> 16
  612. v11 += v15
  613. v7 ~= v11
  614. v7 = v7 << (32 - 12) | v7 >> 12
  615. v2 += m[12]
  616. v2 += v6
  617. v14 ~= v2
  618. v14 = v14 << (32 - 8) | v14 >> 8
  619. v10 += v14
  620. v6 ~= v10
  621. v6 = v6 << (32 - 7) | v6 >> 7
  622. v3 += m[14]
  623. v3 += v7
  624. v15 ~= v3
  625. v15 = v15 << (32 - 8) | v15 >> 8
  626. v11 += v15
  627. v7 ~= v11
  628. v7 = v7 << (32 - 7) | v7 >> 7
  629. v1 += m[1]
  630. v1 += v5
  631. v13 ~= v1
  632. v13 = v13 << (32 - 8) | v13 >> 8
  633. v9 += v13
  634. v5 ~= v9
  635. v5 = v5 << (32 - 7) | v5 >> 7
  636. v0 += m[9]
  637. v0 += v4
  638. v12 ~= v0
  639. v12 = v12 << (32 - 8) | v12 >> 8
  640. v8 += v12
  641. v4 ~= v8
  642. v4 = v4 << (32 - 7) | v4 >> 7
  643. v0 += m[2]
  644. v0 += v5
  645. v15 ~= v0
  646. v15 = v15 << (32 - 16) | v15 >> 16
  647. v10 += v15
  648. v5 ~= v10
  649. v5 = v5 << (32 - 12) | v5 >> 12
  650. v1 += m[5]
  651. v1 += v6
  652. v12 ~= v1
  653. v12 = v12 << (32 - 16) | v12 >> 16
  654. v11 += v12
  655. v6 ~= v11
  656. v6 = v6 << (32 - 12) | v6 >> 12
  657. v2 += m[4]
  658. v2 += v7
  659. v13 ~= v2
  660. v13 = v13 << (32 - 16) | v13 >> 16
  661. v8 += v13
  662. v7 ~= v8
  663. v7 = v7 << (32 - 12) | v7 >> 12
  664. v3 += m[15]
  665. v3 += v4
  666. v14 ~= v3
  667. v14 = v14 << (32 - 16) | v14 >> 16
  668. v9 += v14
  669. v4 ~= v9
  670. v4 = v4 << (32 - 12) | v4 >> 12
  671. v2 += m[0]
  672. v2 += v7
  673. v13 ~= v2
  674. v13 = v13 << (32 - 8) | v13 >> 8
  675. v8 += v13
  676. v7 ~= v8
  677. v7 = v7 << (32 - 7) | v7 >> 7
  678. v3 += m[8]
  679. v3 += v4
  680. v14 ~= v3
  681. v14 = v14 << (32 - 8) | v14 >> 8
  682. v9 += v14
  683. v4 ~= v9
  684. v4 = v4 << (32 - 7) | v4 >> 7
  685. v1 += m[10]
  686. v1 += v6
  687. v12 ~= v1
  688. v12 = v12 << (32 - 8) | v12 >> 8
  689. v11 += v12
  690. v6 ~= v11
  691. v6 = v6 << (32 - 7) | v6 >> 7
  692. v0 += m[6]
  693. v0 += v5
  694. v15 ~= v0
  695. v15 = v15 << (32 - 8) | v15 >> 8
  696. v10 += v15
  697. v5 ~= v10
  698. v5 = v5 << (32 - 7) | v5 >> 7
  699. v0 += m[9]
  700. v0 += v4
  701. v12 ~= v0
  702. v12 = v12 << (32 - 16) | v12 >> 16
  703. v8 += v12
  704. v4 ~= v8
  705. v4 = v4 << (32 - 12) | v4 >> 12
  706. v1 += m[5]
  707. v1 += v5
  708. v13 ~= v1
  709. v13 = v13 << (32 - 16) | v13 >> 16
  710. v9 += v13
  711. v5 ~= v9
  712. v5 = v5 << (32 - 12) | v5 >> 12
  713. v2 += m[2]
  714. v2 += v6
  715. v14 ~= v2
  716. v14 = v14 << (32 - 16) | v14 >> 16
  717. v10 += v14
  718. v6 ~= v10
  719. v6 = v6 << (32 - 12) | v6 >> 12
  720. v3 += m[10]
  721. v3 += v7
  722. v15 ~= v3
  723. v15 = v15 << (32 - 16) | v15 >> 16
  724. v11 += v15
  725. v7 ~= v11
  726. v7 = v7 << (32 - 12) | v7 >> 12
  727. v2 += m[4]
  728. v2 += v6
  729. v14 ~= v2
  730. v14 = v14 << (32 - 8) | v14 >> 8
  731. v10 += v14
  732. v6 ~= v10
  733. v6 = v6 << (32 - 7) | v6 >> 7
  734. v3 += m[15]
  735. v3 += v7
  736. v15 ~= v3
  737. v15 = v15 << (32 - 8) | v15 >> 8
  738. v11 += v15
  739. v7 ~= v11
  740. v7 = v7 << (32 - 7) | v7 >> 7
  741. v1 += m[7]
  742. v1 += v5
  743. v13 ~= v1
  744. v13 = v13 << (32 - 8) | v13 >> 8
  745. v9 += v13
  746. v5 ~= v9
  747. v5 = v5 << (32 - 7) | v5 >> 7
  748. v0 += m[0]
  749. v0 += v4
  750. v12 ~= v0
  751. v12 = v12 << (32 - 8) | v12 >> 8
  752. v8 += v12
  753. v4 ~= v8
  754. v4 = v4 << (32 - 7) | v4 >> 7
  755. v0 += m[14]
  756. v0 += v5
  757. v15 ~= v0
  758. v15 = v15 << (32 - 16) | v15 >> 16
  759. v10 += v15
  760. v5 ~= v10
  761. v5 = v5 << (32 - 12) | v5 >> 12
  762. v1 += m[11]
  763. v1 += v6
  764. v12 ~= v1
  765. v12 = v12 << (32 - 16) | v12 >> 16
  766. v11 += v12
  767. v6 ~= v11
  768. v6 = v6 << (32 - 12) | v6 >> 12
  769. v2 += m[6]
  770. v2 += v7
  771. v13 ~= v2
  772. v13 = v13 << (32 - 16) | v13 >> 16
  773. v8 += v13
  774. v7 ~= v8
  775. v7 = v7 << (32 - 12) | v7 >> 12
  776. v3 += m[3]
  777. v3 += v4
  778. v14 ~= v3
  779. v14 = v14 << (32 - 16) | v14 >> 16
  780. v9 += v14
  781. v4 ~= v9
  782. v4 = v4 << (32 - 12) | v4 >> 12
  783. v2 += m[8]
  784. v2 += v7
  785. v13 ~= v2
  786. v13 = v13 << (32 - 8) | v13 >> 8
  787. v8 += v13
  788. v7 ~= v8
  789. v7 = v7 << (32 - 7) | v7 >> 7
  790. v3 += m[13]
  791. v3 += v4
  792. v14 ~= v3
  793. v14 = v14 << (32 - 8) | v14 >> 8
  794. v9 += v14
  795. v4 ~= v9
  796. v4 = v4 << (32 - 7) | v4 >> 7
  797. v1 += m[12]
  798. v1 += v6
  799. v12 ~= v1
  800. v12 = v12 << (32 - 8) | v12 >> 8
  801. v11 += v12
  802. v6 ~= v11
  803. v6 = v6 << (32 - 7) | v6 >> 7
  804. v0 += m[1]
  805. v0 += v5
  806. v15 ~= v0
  807. v15 = v15 << (32 - 8) | v15 >> 8
  808. v10 += v15
  809. v5 ~= v10
  810. v5 = v5 << (32 - 7) | v5 >> 7
  811. v0 += m[2]
  812. v0 += v4
  813. v12 ~= v0
  814. v12 = v12 << (32 - 16) | v12 >> 16
  815. v8 += v12
  816. v4 ~= v8
  817. v4 = v4 << (32 - 12) | v4 >> 12
  818. v1 += m[6]
  819. v1 += v5
  820. v13 ~= v1
  821. v13 = v13 << (32 - 16) | v13 >> 16
  822. v9 += v13
  823. v5 ~= v9
  824. v5 = v5 << (32 - 12) | v5 >> 12
  825. v2 += m[0]
  826. v2 += v6
  827. v14 ~= v2
  828. v14 = v14 << (32 - 16) | v14 >> 16
  829. v10 += v14
  830. v6 ~= v10
  831. v6 = v6 << (32 - 12) | v6 >> 12
  832. v3 += m[8]
  833. v3 += v7
  834. v15 ~= v3
  835. v15 = v15 << (32 - 16) | v15 >> 16
  836. v11 += v15
  837. v7 ~= v11
  838. v7 = v7 << (32 - 12) | v7 >> 12
  839. v2 += m[11]
  840. v2 += v6
  841. v14 ~= v2
  842. v14 = v14 << (32 - 8) | v14 >> 8
  843. v10 += v14
  844. v6 ~= v10
  845. v6 = v6 << (32 - 7) | v6 >> 7
  846. v3 += m[3]
  847. v3 += v7
  848. v15 ~= v3
  849. v15 = v15 << (32 - 8) | v15 >> 8
  850. v11 += v15
  851. v7 ~= v11
  852. v7 = v7 << (32 - 7) | v7 >> 7
  853. v1 += m[10]
  854. v1 += v5
  855. v13 ~= v1
  856. v13 = v13 << (32 - 8) | v13 >> 8
  857. v9 += v13
  858. v5 ~= v9
  859. v5 = v5 << (32 - 7) | v5 >> 7
  860. v0 += m[12]
  861. v0 += v4
  862. v12 ~= v0
  863. v12 = v12 << (32 - 8) | v12 >> 8
  864. v8 += v12
  865. v4 ~= v8
  866. v4 = v4 << (32 - 7) | v4 >> 7
  867. v0 += m[4]
  868. v0 += v5
  869. v15 ~= v0
  870. v15 = v15 << (32 - 16) | v15 >> 16
  871. v10 += v15
  872. v5 ~= v10
  873. v5 = v5 << (32 - 12) | v5 >> 12
  874. v1 += m[7]
  875. v1 += v6
  876. v12 ~= v1
  877. v12 = v12 << (32 - 16) | v12 >> 16
  878. v11 += v12
  879. v6 ~= v11
  880. v6 = v6 << (32 - 12) | v6 >> 12
  881. v2 += m[15]
  882. v2 += v7
  883. v13 ~= v2
  884. v13 = v13 << (32 - 16) | v13 >> 16
  885. v8 += v13
  886. v7 ~= v8
  887. v7 = v7 << (32 - 12) | v7 >> 12
  888. v3 += m[1]
  889. v3 += v4
  890. v14 ~= v3
  891. v14 = v14 << (32 - 16) | v14 >> 16
  892. v9 += v14
  893. v4 ~= v9
  894. v4 = v4 << (32 - 12) | v4 >> 12
  895. v2 += m[14]
  896. v2 += v7
  897. v13 ~= v2
  898. v13 = v13 << (32 - 8) | v13 >> 8
  899. v8 += v13
  900. v7 ~= v8
  901. v7 = v7 << (32 - 7) | v7 >> 7
  902. v3 += m[9]
  903. v3 += v4
  904. v14 ~= v3
  905. v14 = v14 << (32 - 8) | v14 >> 8
  906. v9 += v14
  907. v4 ~= v9
  908. v4 = v4 << (32 - 7) | v4 >> 7
  909. v1 += m[5]
  910. v1 += v6
  911. v12 ~= v1
  912. v12 = v12 << (32 - 8) | v12 >> 8
  913. v11 += v12
  914. v6 ~= v11
  915. v6 = v6 << (32 - 7) | v6 >> 7
  916. v0 += m[13]
  917. v0 += v5
  918. v15 ~= v0
  919. v15 = v15 << (32 - 8) | v15 >> 8
  920. v10 += v15
  921. v5 ~= v10
  922. v5 = v5 << (32 - 7) | v5 >> 7
  923. v0 += m[12]
  924. v0 += v4
  925. v12 ~= v0
  926. v12 = v12 << (32 - 16) | v12 >> 16
  927. v8 += v12
  928. v4 ~= v8
  929. v4 = v4 << (32 - 12) | v4 >> 12
  930. v1 += m[1]
  931. v1 += v5
  932. v13 ~= v1
  933. v13 = v13 << (32 - 16) | v13 >> 16
  934. v9 += v13
  935. v5 ~= v9
  936. v5 = v5 << (32 - 12) | v5 >> 12
  937. v2 += m[14]
  938. v2 += v6
  939. v14 ~= v2
  940. v14 = v14 << (32 - 16) | v14 >> 16
  941. v10 += v14
  942. v6 ~= v10
  943. v6 = v6 << (32 - 12) | v6 >> 12
  944. v3 += m[4]
  945. v3 += v7
  946. v15 ~= v3
  947. v15 = v15 << (32 - 16) | v15 >> 16
  948. v11 += v15
  949. v7 ~= v11
  950. v7 = v7 << (32 - 12) | v7 >> 12
  951. v2 += m[13]
  952. v2 += v6
  953. v14 ~= v2
  954. v14 = v14 << (32 - 8) | v14 >> 8
  955. v10 += v14
  956. v6 ~= v10
  957. v6 = v6 << (32 - 7) | v6 >> 7
  958. v3 += m[10]
  959. v3 += v7
  960. v15 ~= v3
  961. v15 = v15 << (32 - 8) | v15 >> 8
  962. v11 += v15
  963. v7 ~= v11
  964. v7 = v7 << (32 - 7) | v7 >> 7
  965. v1 += m[15]
  966. v1 += v5
  967. v13 ~= v1
  968. v13 = v13 << (32 - 8) | v13 >> 8
  969. v9 += v13
  970. v5 ~= v9
  971. v5 = v5 << (32 - 7) | v5 >> 7
  972. v0 += m[5]
  973. v0 += v4
  974. v12 ~= v0
  975. v12 = v12 << (32 - 8) | v12 >> 8
  976. v8 += v12
  977. v4 ~= v8
  978. v4 = v4 << (32 - 7) | v4 >> 7
  979. v0 += m[0]
  980. v0 += v5
  981. v15 ~= v0
  982. v15 = v15 << (32 - 16) | v15 >> 16
  983. v10 += v15
  984. v5 ~= v10
  985. v5 = v5 << (32 - 12) | v5 >> 12
  986. v1 += m[6]
  987. v1 += v6
  988. v12 ~= v1
  989. v12 = v12 << (32 - 16) | v12 >> 16
  990. v11 += v12
  991. v6 ~= v11
  992. v6 = v6 << (32 - 12) | v6 >> 12
  993. v2 += m[9]
  994. v2 += v7
  995. v13 ~= v2
  996. v13 = v13 << (32 - 16) | v13 >> 16
  997. v8 += v13
  998. v7 ~= v8
  999. v7 = v7 << (32 - 12) | v7 >> 12
  1000. v3 += m[8]
  1001. v3 += v4
  1002. v14 ~= v3
  1003. v14 = v14 << (32 - 16) | v14 >> 16
  1004. v9 += v14
  1005. v4 ~= v9
  1006. v4 = v4 << (32 - 12) | v4 >> 12
  1007. v2 += m[2]
  1008. v2 += v7
  1009. v13 ~= v2
  1010. v13 = v13 << (32 - 8) | v13 >> 8
  1011. v8 += v13
  1012. v7 ~= v8
  1013. v7 = v7 << (32 - 7) | v7 >> 7
  1014. v3 += m[11]
  1015. v3 += v4
  1016. v14 ~= v3
  1017. v14 = v14 << (32 - 8) | v14 >> 8
  1018. v9 += v14
  1019. v4 ~= v9
  1020. v4 = v4 << (32 - 7) | v4 >> 7
  1021. v1 += m[3]
  1022. v1 += v6
  1023. v12 ~= v1
  1024. v12 = v12 << (32 - 8) | v12 >> 8
  1025. v11 += v12
  1026. v6 ~= v11
  1027. v6 = v6 << (32 - 7) | v6 >> 7
  1028. v0 += m[7]
  1029. v0 += v5
  1030. v15 ~= v0
  1031. v15 = v15 << (32 - 8) | v15 >> 8
  1032. v10 += v15
  1033. v5 ~= v10
  1034. v5 = v5 << (32 - 7) | v5 >> 7
  1035. v0 += m[13]
  1036. v0 += v4
  1037. v12 ~= v0
  1038. v12 = v12 << (32 - 16) | v12 >> 16
  1039. v8 += v12
  1040. v4 ~= v8
  1041. v4 = v4 << (32 - 12) | v4 >> 12
  1042. v1 += m[7]
  1043. v1 += v5
  1044. v13 ~= v1
  1045. v13 = v13 << (32 - 16) | v13 >> 16
  1046. v9 += v13
  1047. v5 ~= v9
  1048. v5 = v5 << (32 - 12) | v5 >> 12
  1049. v2 += m[12]
  1050. v2 += v6
  1051. v14 ~= v2
  1052. v14 = v14 << (32 - 16) | v14 >> 16
  1053. v10 += v14
  1054. v6 ~= v10
  1055. v6 = v6 << (32 - 12) | v6 >> 12
  1056. v3 += m[3]
  1057. v3 += v7
  1058. v15 ~= v3
  1059. v15 = v15 << (32 - 16) | v15 >> 16
  1060. v11 += v15
  1061. v7 ~= v11
  1062. v7 = v7 << (32 - 12) | v7 >> 12
  1063. v2 += m[1]
  1064. v2 += v6
  1065. v14 ~= v2
  1066. v14 = v14 << (32 - 8) | v14 >> 8
  1067. v10 += v14
  1068. v6 ~= v10
  1069. v6 = v6 << (32 - 7) | v6 >> 7
  1070. v3 += m[9]
  1071. v3 += v7
  1072. v15 ~= v3
  1073. v15 = v15 << (32 - 8) | v15 >> 8
  1074. v11 += v15
  1075. v7 ~= v11
  1076. v7 = v7 << (32 - 7) | v7 >> 7
  1077. v1 += m[14]
  1078. v1 += v5
  1079. v13 ~= v1
  1080. v13 = v13 << (32 - 8) | v13 >> 8
  1081. v9 += v13
  1082. v5 ~= v9
  1083. v5 = v5 << (32 - 7) | v5 >> 7
  1084. v0 += m[11]
  1085. v0 += v4
  1086. v12 ~= v0
  1087. v12 = v12 << (32 - 8) | v12 >> 8
  1088. v8 += v12
  1089. v4 ~= v8
  1090. v4 = v4 << (32 - 7) | v4 >> 7
  1091. v0 += m[5]
  1092. v0 += v5
  1093. v15 ~= v0
  1094. v15 = v15 << (32 - 16) | v15 >> 16
  1095. v10 += v15
  1096. v5 ~= v10
  1097. v5 = v5 << (32 - 12) | v5 >> 12
  1098. v1 += m[15]
  1099. v1 += v6
  1100. v12 ~= v1
  1101. v12 = v12 << (32 - 16) | v12 >> 16
  1102. v11 += v12
  1103. v6 ~= v11
  1104. v6 = v6 << (32 - 12) | v6 >> 12
  1105. v2 += m[8]
  1106. v2 += v7
  1107. v13 ~= v2
  1108. v13 = v13 << (32 - 16) | v13 >> 16
  1109. v8 += v13
  1110. v7 ~= v8
  1111. v7 = v7 << (32 - 12) | v7 >> 12
  1112. v3 += m[2]
  1113. v3 += v4
  1114. v14 ~= v3
  1115. v14 = v14 << (32 - 16) | v14 >> 16
  1116. v9 += v14
  1117. v4 ~= v9
  1118. v4 = v4 << (32 - 12) | v4 >> 12
  1119. v2 += m[6]
  1120. v2 += v7
  1121. v13 ~= v2
  1122. v13 = v13 << (32 - 8) | v13 >> 8
  1123. v8 += v13
  1124. v7 ~= v8
  1125. v7 = v7 << (32 - 7) | v7 >> 7
  1126. v3 += m[10]
  1127. v3 += v4
  1128. v14 ~= v3
  1129. v14 = v14 << (32 - 8) | v14 >> 8
  1130. v9 += v14
  1131. v4 ~= v9
  1132. v4 = v4 << (32 - 7) | v4 >> 7
  1133. v1 += m[4]
  1134. v1 += v6
  1135. v12 ~= v1
  1136. v12 = v12 << (32 - 8) | v12 >> 8
  1137. v11 += v12
  1138. v6 ~= v11
  1139. v6 = v6 << (32 - 7) | v6 >> 7
  1140. v0 += m[0]
  1141. v0 += v5
  1142. v15 ~= v0
  1143. v15 = v15 << (32 - 8) | v15 >> 8
  1144. v10 += v15
  1145. v5 ~= v10
  1146. v5 = v5 << (32 - 7) | v5 >> 7
  1147. v0 += m[6]
  1148. v0 += v4
  1149. v12 ~= v0
  1150. v12 = v12 << (32 - 16) | v12 >> 16
  1151. v8 += v12
  1152. v4 ~= v8
  1153. v4 = v4 << (32 - 12) | v4 >> 12
  1154. v1 += m[14]
  1155. v1 += v5
  1156. v13 ~= v1
  1157. v13 = v13 << (32 - 16) | v13 >> 16
  1158. v9 += v13
  1159. v5 ~= v9
  1160. v5 = v5 << (32 - 12) | v5 >> 12
  1161. v2 += m[11]
  1162. v2 += v6
  1163. v14 ~= v2
  1164. v14 = v14 << (32 - 16) | v14 >> 16
  1165. v10 += v14
  1166. v6 ~= v10
  1167. v6 = v6 << (32 - 12) | v6 >> 12
  1168. v3 += m[0]
  1169. v3 += v7
  1170. v15 ~= v3
  1171. v15 = v15 << (32 - 16) | v15 >> 16
  1172. v11 += v15
  1173. v7 ~= v11
  1174. v7 = v7 << (32 - 12) | v7 >> 12
  1175. v2 += m[3]
  1176. v2 += v6
  1177. v14 ~= v2
  1178. v14 = v14 << (32 - 8) | v14 >> 8
  1179. v10 += v14
  1180. v6 ~= v10
  1181. v6 = v6 << (32 - 7) | v6 >> 7
  1182. v3 += m[8]
  1183. v3 += v7
  1184. v15 ~= v3
  1185. v15 = v15 << (32 - 8) | v15 >> 8
  1186. v11 += v15
  1187. v7 ~= v11
  1188. v7 = v7 << (32 - 7) | v7 >> 7
  1189. v1 += m[9]
  1190. v1 += v5
  1191. v13 ~= v1
  1192. v13 = v13 << (32 - 8) | v13 >> 8
  1193. v9 += v13
  1194. v5 ~= v9
  1195. v5 = v5 << (32 - 7) | v5 >> 7
  1196. v0 += m[15]
  1197. v0 += v4
  1198. v12 ~= v0
  1199. v12 = v12 << (32 - 8) | v12 >> 8
  1200. v8 += v12
  1201. v4 ~= v8
  1202. v4 = v4 << (32 - 7) | v4 >> 7
  1203. v0 += m[12]
  1204. v0 += v5
  1205. v15 ~= v0
  1206. v15 = v15 << (32 - 16) | v15 >> 16
  1207. v10 += v15
  1208. v5 ~= v10
  1209. v5 = v5 << (32 - 12) | v5 >> 12
  1210. v1 += m[13]
  1211. v1 += v6
  1212. v12 ~= v1
  1213. v12 = v12 << (32 - 16) | v12 >> 16
  1214. v11 += v12
  1215. v6 ~= v11
  1216. v6 = v6 << (32 - 12) | v6 >> 12
  1217. v2 += m[1]
  1218. v2 += v7
  1219. v13 ~= v2
  1220. v13 = v13 << (32 - 16) | v13 >> 16
  1221. v8 += v13
  1222. v7 ~= v8
  1223. v7 = v7 << (32 - 12) | v7 >> 12
  1224. v3 += m[10]
  1225. v3 += v4
  1226. v14 ~= v3
  1227. v14 = v14 << (32 - 16) | v14 >> 16
  1228. v9 += v14
  1229. v4 ~= v9
  1230. v4 = v4 << (32 - 12) | v4 >> 12
  1231. v2 += m[4]
  1232. v2 += v7
  1233. v13 ~= v2
  1234. v13 = v13 << (32 - 8) | v13 >> 8
  1235. v8 += v13
  1236. v7 ~= v8
  1237. v7 = v7 << (32 - 7) | v7 >> 7
  1238. v3 += m[5]
  1239. v3 += v4
  1240. v14 ~= v3
  1241. v14 = v14 << (32 - 8) | v14 >> 8
  1242. v9 += v14
  1243. v4 ~= v9
  1244. v4 = v4 << (32 - 7) | v4 >> 7
  1245. v1 += m[7]
  1246. v1 += v6
  1247. v12 ~= v1
  1248. v12 = v12 << (32 - 8) | v12 >> 8
  1249. v11 += v12
  1250. v6 ~= v11
  1251. v6 = v6 << (32 - 7) | v6 >> 7
  1252. v0 += m[2]
  1253. v0 += v5
  1254. v15 ~= v0
  1255. v15 = v15 << (32 - 8) | v15 >> 8
  1256. v10 += v15
  1257. v5 ~= v10
  1258. v5 = v5 << (32 - 7) | v5 >> 7
  1259. v0 += m[10]
  1260. v0 += v4
  1261. v12 ~= v0
  1262. v12 = v12 << (32 - 16) | v12 >> 16
  1263. v8 += v12
  1264. v4 ~= v8
  1265. v4 = v4 << (32 - 12) | v4 >> 12
  1266. v1 += m[8]
  1267. v1 += v5
  1268. v13 ~= v1
  1269. v13 = v13 << (32 - 16) | v13 >> 16
  1270. v9 += v13
  1271. v5 ~= v9
  1272. v5 = v5 << (32 - 12) | v5 >> 12
  1273. v2 += m[7]
  1274. v2 += v6
  1275. v14 ~= v2
  1276. v14 = v14 << (32 - 16) | v14 >> 16
  1277. v10 += v14
  1278. v6 ~= v10
  1279. v6 = v6 << (32 - 12) | v6 >> 12
  1280. v3 += m[1]
  1281. v3 += v7
  1282. v15 ~= v3
  1283. v15 = v15 << (32 - 16) | v15 >> 16
  1284. v11 += v15
  1285. v7 ~= v11
  1286. v7 = v7 << (32 - 12) | v7 >> 12
  1287. v2 += m[6]
  1288. v2 += v6
  1289. v14 ~= v2
  1290. v14 = v14 << (32 - 8) | v14 >> 8
  1291. v10 += v14
  1292. v6 ~= v10
  1293. v6 = v6 << (32 - 7) | v6 >> 7
  1294. v3 += m[5]
  1295. v3 += v7
  1296. v15 ~= v3
  1297. v15 = v15 << (32 - 8) | v15 >> 8
  1298. v11 += v15
  1299. v7 ~= v11
  1300. v7 = v7 << (32 - 7) | v7 >> 7
  1301. v1 += m[4]
  1302. v1 += v5
  1303. v13 ~= v1
  1304. v13 = v13 << (32 - 8) | v13 >> 8
  1305. v9 += v13
  1306. v5 ~= v9
  1307. v5 = v5 << (32 - 7) | v5 >> 7
  1308. v0 += m[2]
  1309. v0 += v4
  1310. v12 ~= v0
  1311. v12 = v12 << (32 - 8) | v12 >> 8
  1312. v8 += v12
  1313. v4 ~= v8
  1314. v4 = v4 << (32 - 7) | v4 >> 7
  1315. v0 += m[15]
  1316. v0 += v5
  1317. v15 ~= v0
  1318. v15 = v15 << (32 - 16) | v15 >> 16
  1319. v10 += v15
  1320. v5 ~= v10
  1321. v5 = v5 << (32 - 12) | v5 >> 12
  1322. v1 += m[9]
  1323. v1 += v6
  1324. v12 ~= v1
  1325. v12 = v12 << (32 - 16) | v12 >> 16
  1326. v11 += v12
  1327. v6 ~= v11
  1328. v6 = v6 << (32 - 12) | v6 >> 12
  1329. v2 += m[3]
  1330. v2 += v7
  1331. v13 ~= v2
  1332. v13 = v13 << (32 - 16) | v13 >> 16
  1333. v8 += v13
  1334. v7 ~= v8
  1335. v7 = v7 << (32 - 12) | v7 >> 12
  1336. v3 += m[13]
  1337. v3 += v4
  1338. v14 ~= v3
  1339. v14 = v14 << (32 - 16) | v14 >> 16
  1340. v9 += v14
  1341. v4 ~= v9
  1342. v4 = v4 << (32 - 12) | v4 >> 12
  1343. v2 += m[12]
  1344. v2 += v7
  1345. v13 ~= v2
  1346. v13 = v13 << (32 - 8) | v13 >> 8
  1347. v8 += v13
  1348. v7 ~= v8
  1349. v7 = v7 << (32 - 7) | v7 >> 7
  1350. v3 += m[0]
  1351. v3 += v4
  1352. v14 ~= v3
  1353. v14 = v14 << (32 - 8) | v14 >> 8
  1354. v9 += v14
  1355. v4 ~= v9
  1356. v4 = v4 << (32 - 7) | v4 >> 7
  1357. v1 += m[14]
  1358. v1 += v6
  1359. v12 ~= v1
  1360. v12 = v12 << (32 - 8) | v12 >> 8
  1361. v11 += v12
  1362. v6 ~= v11
  1363. v6 = v6 << (32 - 7) | v6 >> 7
  1364. v0 += m[11]
  1365. v0 += v5
  1366. v15 ~= v0
  1367. v15 = v15 << (32 - 8) | v15 >> 8
  1368. v10 += v15
  1369. v5 ~= v10
  1370. v5 = v5 << (32 - 7) | v5 >> 7
  1371. h0 ~= v0 ~ v8
  1372. h1 ~= v1 ~ v9
  1373. h2 ~= v2 ~ v10
  1374. h3 ~= v3 ~ v11
  1375. h4 ~= v4 ~ v12
  1376. h5 ~= v5 ~ v13
  1377. h6 ~= v6 ~ v14
  1378. h7 ~= v7 ~ v15
  1379. p = p[BLAKE2S_BLOCK_SIZE:]
  1380. }
  1381. ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] = h0, h1, h2, h3, h4, h5, h6, h7
  1382. }
  1383. blake2b_blocks :: #force_inline proc "contextless" (ctx: ^Blake2b_Context, p: []byte) {
  1384. h0, h1, h2, h3, h4, h5, h6, h7 := ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7]
  1385. p := p
  1386. for len(p) >= BLAKE2B_BLOCK_SIZE {
  1387. ctx.t[0] += BLAKE2B_BLOCK_SIZE
  1388. if ctx.t[0] < BLAKE2B_BLOCK_SIZE {
  1389. ctx.t[1]+=1
  1390. }
  1391. v0, v1, v2, v3, v4, v5, v6, v7 := h0, h1, h2, h3, h4, h5, h6, h7
  1392. v8 := BLAKE2B_IV[0]
  1393. v9 := BLAKE2B_IV[1]
  1394. v10 := BLAKE2B_IV[2]
  1395. v11 := BLAKE2B_IV[3]
  1396. v12 := BLAKE2B_IV[4] ~ ctx.t[0]
  1397. v13 := BLAKE2B_IV[5] ~ ctx.t[1]
  1398. v14 := BLAKE2B_IV[6] ~ ctx.f[0]
  1399. v15 := BLAKE2B_IV[7] ~ ctx.f[1]
  1400. m: [16]u64 = ---
  1401. j := 0
  1402. for i := 0; i < 16; i+=1 {
  1403. m[i] = u64(p[j]) | u64(p[j + 1]) << 8 | u64(p[j + 2]) << 16 | u64(p[j + 3]) << 24 |
  1404. u64(p[j + 4]) << 32 | u64(p[j + 5]) << 40 | u64(p[j + 6]) << 48 | u64(p[j + 7]) << 56
  1405. j += 8
  1406. }
  1407. v0 += m[0]
  1408. v0 += v4
  1409. v12 ~= v0
  1410. v12 = v12 << (64 - 32) | v12 >> 32
  1411. v8 += v12
  1412. v4 ~= v8
  1413. v4 = v4 << (64 - 24) | v4 >> 24
  1414. v1 += m[2]
  1415. v1 += v5
  1416. v13 ~= v1
  1417. v13 = v13 << (64 - 32) | v13 >> 32
  1418. v9 += v13
  1419. v5 ~= v9
  1420. v5 = v5 << (64 - 24) | v5 >> 24
  1421. v2 += m[4]
  1422. v2 += v6
  1423. v14 ~= v2
  1424. v14 = v14 << (64 - 32) | v14 >> 32
  1425. v10 += v14
  1426. v6 ~= v10
  1427. v6 = v6 << (64 - 24) | v6 >> 24
  1428. v3 += m[6]
  1429. v3 += v7
  1430. v15 ~= v3
  1431. v15 = v15 << (64 - 32) | v15 >> 32
  1432. v11 += v15
  1433. v7 ~= v11
  1434. v7 = v7 << (64 - 24) | v7 >> 24
  1435. v2 += m[5]
  1436. v2 += v6
  1437. v14 ~= v2
  1438. v14 = v14 << (64 - 16) | v14 >> 16
  1439. v10 += v14
  1440. v6 ~= v10
  1441. v6 = v6 << (64 - 63) | v6 >> 63
  1442. v3 += m[7]
  1443. v3 += v7
  1444. v15 ~= v3
  1445. v15 = v15 << (64 - 16) | v15 >> 16
  1446. v11 += v15
  1447. v7 ~= v11
  1448. v7 = v7 << (64 - 63) | v7 >> 63
  1449. v1 += m[3]
  1450. v1 += v5
  1451. v13 ~= v1
  1452. v13 = v13 << (64 - 16) | v13 >> 16
  1453. v9 += v13
  1454. v5 ~= v9
  1455. v5 = v5 << (64 - 63) | v5 >> 63
  1456. v0 += m[1]
  1457. v0 += v4
  1458. v12 ~= v0
  1459. v12 = v12 << (64 - 16) | v12 >> 16
  1460. v8 += v12
  1461. v4 ~= v8
  1462. v4 = v4 << (64 - 63) | v4 >> 63
  1463. v0 += m[8]
  1464. v0 += v5
  1465. v15 ~= v0
  1466. v15 = v15 << (64 - 32) | v15 >> 32
  1467. v10 += v15
  1468. v5 ~= v10
  1469. v5 = v5 << (64 - 24) | v5 >> 24
  1470. v1 += m[10]
  1471. v1 += v6
  1472. v12 ~= v1
  1473. v12 = v12 << (64 - 32) | v12 >> 32
  1474. v11 += v12
  1475. v6 ~= v11
  1476. v6 = v6 << (64 - 24) | v6 >> 24
  1477. v2 += m[12]
  1478. v2 += v7
  1479. v13 ~= v2
  1480. v13 = v13 << (64 - 32) | v13 >> 32
  1481. v8 += v13
  1482. v7 ~= v8
  1483. v7 = v7 << (64 - 24) | v7 >> 24
  1484. v3 += m[14]
  1485. v3 += v4
  1486. v14 ~= v3
  1487. v14 = v14 << (64 - 32) | v14 >> 32
  1488. v9 += v14
  1489. v4 ~= v9
  1490. v4 = v4 << (64 - 24) | v4 >> 24
  1491. v2 += m[13]
  1492. v2 += v7
  1493. v13 ~= v2
  1494. v13 = v13 << (64 - 16) | v13 >> 16
  1495. v8 += v13
  1496. v7 ~= v8
  1497. v7 = v7 << (64 - 63) | v7 >> 63
  1498. v3 += m[15]
  1499. v3 += v4
  1500. v14 ~= v3
  1501. v14 = v14 << (64 - 16) | v14 >> 16
  1502. v9 += v14
  1503. v4 ~= v9
  1504. v4 = v4 << (64 - 63) | v4 >> 63
  1505. v1 += m[11]
  1506. v1 += v6
  1507. v12 ~= v1
  1508. v12 = v12 << (64 - 16) | v12 >> 16
  1509. v11 += v12
  1510. v6 ~= v11
  1511. v6 = v6 << (64 - 63) | v6 >> 63
  1512. v0 += m[9]
  1513. v0 += v5
  1514. v15 ~= v0
  1515. v15 = v15 << (64 - 16) | v15 >> 16
  1516. v10 += v15
  1517. v5 ~= v10
  1518. v5 = v5 << (64 - 63) | v5 >> 63
  1519. v0 += m[14]
  1520. v0 += v4
  1521. v12 ~= v0
  1522. v12 = v12 << (64 - 32) | v12 >> 32
  1523. v8 += v12
  1524. v4 ~= v8
  1525. v4 = v4 << (64 - 24) | v4 >> 24
  1526. v1 += m[4]
  1527. v1 += v5
  1528. v13 ~= v1
  1529. v13 = v13 << (64 - 32) | v13 >> 32
  1530. v9 += v13
  1531. v5 ~= v9
  1532. v5 = v5 << (64 - 24) | v5 >> 24
  1533. v2 += m[9]
  1534. v2 += v6
  1535. v14 ~= v2
  1536. v14 = v14 << (64 - 32) | v14 >> 32
  1537. v10 += v14
  1538. v6 ~= v10
  1539. v6 = v6 << (64 - 24) | v6 >> 24
  1540. v3 += m[13]
  1541. v3 += v7
  1542. v15 ~= v3
  1543. v15 = v15 << (64 - 32) | v15 >> 32
  1544. v11 += v15
  1545. v7 ~= v11
  1546. v7 = v7 << (64 - 24) | v7 >> 24
  1547. v2 += m[15]
  1548. v2 += v6
  1549. v14 ~= v2
  1550. v14 = v14 << (64 - 16) | v14 >> 16
  1551. v10 += v14
  1552. v6 ~= v10
  1553. v6 = v6 << (64 - 63) | v6 >> 63
  1554. v3 += m[6]
  1555. v3 += v7
  1556. v15 ~= v3
  1557. v15 = v15 << (64 - 16) | v15 >> 16
  1558. v11 += v15
  1559. v7 ~= v11
  1560. v7 = v7 << (64 - 63) | v7 >> 63
  1561. v1 += m[8]
  1562. v1 += v5
  1563. v13 ~= v1
  1564. v13 = v13 << (64 - 16) | v13 >> 16
  1565. v9 += v13
  1566. v5 ~= v9
  1567. v5 = v5 << (64 - 63) | v5 >> 63
  1568. v0 += m[10]
  1569. v0 += v4
  1570. v12 ~= v0
  1571. v12 = v12 << (64 - 16) | v12 >> 16
  1572. v8 += v12
  1573. v4 ~= v8
  1574. v4 = v4 << (64 - 63) | v4 >> 63
  1575. v0 += m[1]
  1576. v0 += v5
  1577. v15 ~= v0
  1578. v15 = v15 << (64 - 32) | v15 >> 32
  1579. v10 += v15
  1580. v5 ~= v10
  1581. v5 = v5 << (64 - 24) | v5 >> 24
  1582. v1 += m[0]
  1583. v1 += v6
  1584. v12 ~= v1
  1585. v12 = v12 << (64 - 32) | v12 >> 32
  1586. v11 += v12
  1587. v6 ~= v11
  1588. v6 = v6 << (64 - 24) | v6 >> 24
  1589. v2 += m[11]
  1590. v2 += v7
  1591. v13 ~= v2
  1592. v13 = v13 << (64 - 32) | v13 >> 32
  1593. v8 += v13
  1594. v7 ~= v8
  1595. v7 = v7 << (64 - 24) | v7 >> 24
  1596. v3 += m[5]
  1597. v3 += v4
  1598. v14 ~= v3
  1599. v14 = v14 << (64 - 32) | v14 >> 32
  1600. v9 += v14
  1601. v4 ~= v9
  1602. v4 = v4 << (64 - 24) | v4 >> 24
  1603. v2 += m[7]
  1604. v2 += v7
  1605. v13 ~= v2
  1606. v13 = v13 << (64 - 16) | v13 >> 16
  1607. v8 += v13
  1608. v7 ~= v8
  1609. v7 = v7 << (64 - 63) | v7 >> 63
  1610. v3 += m[3]
  1611. v3 += v4
  1612. v14 ~= v3
  1613. v14 = v14 << (64 - 16) | v14 >> 16
  1614. v9 += v14
  1615. v4 ~= v9
  1616. v4 = v4 << (64 - 63) | v4 >> 63
  1617. v1 += m[2]
  1618. v1 += v6
  1619. v12 ~= v1
  1620. v12 = v12 << (64 - 16) | v12 >> 16
  1621. v11 += v12
  1622. v6 ~= v11
  1623. v6 = v6 << (64 - 63) | v6 >> 63
  1624. v0 += m[12]
  1625. v0 += v5
  1626. v15 ~= v0
  1627. v15 = v15 << (64 - 16) | v15 >> 16
  1628. v10 += v15
  1629. v5 ~= v10
  1630. v5 = v5 << (64 - 63) | v5 >> 63
  1631. v0 += m[11]
  1632. v0 += v4
  1633. v12 ~= v0
  1634. v12 = v12 << (64 - 32) | v12 >> 32
  1635. v8 += v12
  1636. v4 ~= v8
  1637. v4 = v4 << (64 - 24) | v4 >> 24
  1638. v1 += m[12]
  1639. v1 += v5
  1640. v13 ~= v1
  1641. v13 = v13 << (64 - 32) | v13 >> 32
  1642. v9 += v13
  1643. v5 ~= v9
  1644. v5 = v5 << (64 - 24) | v5 >> 24
  1645. v2 += m[5]
  1646. v2 += v6
  1647. v14 ~= v2
  1648. v14 = v14 << (64 - 32) | v14 >> 32
  1649. v10 += v14
  1650. v6 ~= v10
  1651. v6 = v6 << (64 - 24) | v6 >> 24
  1652. v3 += m[15]
  1653. v3 += v7
  1654. v15 ~= v3
  1655. v15 = v15 << (64 - 32) | v15 >> 32
  1656. v11 += v15
  1657. v7 ~= v11
  1658. v7 = v7 << (64 - 24) | v7 >> 24
  1659. v2 += m[2]
  1660. v2 += v6
  1661. v14 ~= v2
  1662. v14 = v14 << (64 - 16) | v14 >> 16
  1663. v10 += v14
  1664. v6 ~= v10
  1665. v6 = v6 << (64 - 63) | v6 >> 63
  1666. v3 += m[13]
  1667. v3 += v7
  1668. v15 ~= v3
  1669. v15 = v15 << (64 - 16) | v15 >> 16
  1670. v11 += v15
  1671. v7 ~= v11
  1672. v7 = v7 << (64 - 63) | v7 >> 63
  1673. v1 += m[0]
  1674. v1 += v5
  1675. v13 ~= v1
  1676. v13 = v13 << (64 - 16) | v13 >> 16
  1677. v9 += v13
  1678. v5 ~= v9
  1679. v5 = v5 << (64 - 63) | v5 >> 63
  1680. v0 += m[8]
  1681. v0 += v4
  1682. v12 ~= v0
  1683. v12 = v12 << (64 - 16) | v12 >> 16
  1684. v8 += v12
  1685. v4 ~= v8
  1686. v4 = v4 << (64 - 63) | v4 >> 63
  1687. v0 += m[10]
  1688. v0 += v5
  1689. v15 ~= v0
  1690. v15 = v15 << (64 - 32) | v15 >> 32
  1691. v10 += v15
  1692. v5 ~= v10
  1693. v5 = v5 << (64 - 24) | v5 >> 24
  1694. v1 += m[3]
  1695. v1 += v6
  1696. v12 ~= v1
  1697. v12 = v12 << (64 - 32) | v12 >> 32
  1698. v11 += v12
  1699. v6 ~= v11
  1700. v6 = v6 << (64 - 24) | v6 >> 24
  1701. v2 += m[7]
  1702. v2 += v7
  1703. v13 ~= v2
  1704. v13 = v13 << (64 - 32) | v13 >> 32
  1705. v8 += v13
  1706. v7 ~= v8
  1707. v7 = v7 << (64 - 24) | v7 >> 24
  1708. v3 += m[9]
  1709. v3 += v4
  1710. v14 ~= v3
  1711. v14 = v14 << (64 - 32) | v14 >> 32
  1712. v9 += v14
  1713. v4 ~= v9
  1714. v4 = v4 << (64 - 24) | v4 >> 24
  1715. v2 += m[1]
  1716. v2 += v7
  1717. v13 ~= v2
  1718. v13 = v13 << (64 - 16) | v13 >> 16
  1719. v8 += v13
  1720. v7 ~= v8
  1721. v7 = v7 << (64 - 63) | v7 >> 63
  1722. v3 += m[4]
  1723. v3 += v4
  1724. v14 ~= v3
  1725. v14 = v14 << (64 - 16) | v14 >> 16
  1726. v9 += v14
  1727. v4 ~= v9
  1728. v4 = v4 << (64 - 63) | v4 >> 63
  1729. v1 += m[6]
  1730. v1 += v6
  1731. v12 ~= v1
  1732. v12 = v12 << (64 - 16) | v12 >> 16
  1733. v11 += v12
  1734. v6 ~= v11
  1735. v6 = v6 << (64 - 63) | v6 >> 63
  1736. v0 += m[14]
  1737. v0 += v5
  1738. v15 ~= v0
  1739. v15 = v15 << (64 - 16) | v15 >> 16
  1740. v10 += v15
  1741. v5 ~= v10
  1742. v5 = v5 << (64 - 63) | v5 >> 63
  1743. v0 += m[7]
  1744. v0 += v4
  1745. v12 ~= v0
  1746. v12 = v12 << (64 - 32) | v12 >> 32
  1747. v8 += v12
  1748. v4 ~= v8
  1749. v4 = v4 << (64 - 24) | v4 >> 24
  1750. v1 += m[3]
  1751. v1 += v5
  1752. v13 ~= v1
  1753. v13 = v13 << (64 - 32) | v13 >> 32
  1754. v9 += v13
  1755. v5 ~= v9
  1756. v5 = v5 << (64 - 24) | v5 >> 24
  1757. v2 += m[13]
  1758. v2 += v6
  1759. v14 ~= v2
  1760. v14 = v14 << (64 - 32) | v14 >> 32
  1761. v10 += v14
  1762. v6 ~= v10
  1763. v6 = v6 << (64 - 24) | v6 >> 24
  1764. v3 += m[11]
  1765. v3 += v7
  1766. v15 ~= v3
  1767. v15 = v15 << (64 - 32) | v15 >> 32
  1768. v11 += v15
  1769. v7 ~= v11
  1770. v7 = v7 << (64 - 24) | v7 >> 24
  1771. v2 += m[12]
  1772. v2 += v6
  1773. v14 ~= v2
  1774. v14 = v14 << (64 - 16) | v14 >> 16
  1775. v10 += v14
  1776. v6 ~= v10
  1777. v6 = v6 << (64 - 63) | v6 >> 63
  1778. v3 += m[14]
  1779. v3 += v7
  1780. v15 ~= v3
  1781. v15 = v15 << (64 - 16) | v15 >> 16
  1782. v11 += v15
  1783. v7 ~= v11
  1784. v7 = v7 << (64 - 63) | v7 >> 63
  1785. v1 += m[1]
  1786. v1 += v5
  1787. v13 ~= v1
  1788. v13 = v13 << (64 - 16) | v13 >> 16
  1789. v9 += v13
  1790. v5 ~= v9
  1791. v5 = v5 << (64 - 63) | v5 >> 63
  1792. v0 += m[9]
  1793. v0 += v4
  1794. v12 ~= v0
  1795. v12 = v12 << (64 - 16) | v12 >> 16
  1796. v8 += v12
  1797. v4 ~= v8
  1798. v4 = v4 << (64 - 63) | v4 >> 63
  1799. v0 += m[2]
  1800. v0 += v5
  1801. v15 ~= v0
  1802. v15 = v15 << (64 - 32) | v15 >> 32
  1803. v10 += v15
  1804. v5 ~= v10
  1805. v5 = v5 << (64 - 24) | v5 >> 24
  1806. v1 += m[5]
  1807. v1 += v6
  1808. v12 ~= v1
  1809. v12 = v12 << (64 - 32) | v12 >> 32
  1810. v11 += v12
  1811. v6 ~= v11
  1812. v6 = v6 << (64 - 24) | v6 >> 24
  1813. v2 += m[4]
  1814. v2 += v7
  1815. v13 ~= v2
  1816. v13 = v13 << (64 - 32) | v13 >> 32
  1817. v8 += v13
  1818. v7 ~= v8
  1819. v7 = v7 << (64 - 24) | v7 >> 24
  1820. v3 += m[15]
  1821. v3 += v4
  1822. v14 ~= v3
  1823. v14 = v14 << (64 - 32) | v14 >> 32
  1824. v9 += v14
  1825. v4 ~= v9
  1826. v4 = v4 << (64 - 24) | v4 >> 24
  1827. v2 += m[0]
  1828. v2 += v7
  1829. v13 ~= v2
  1830. v13 = v13 << (64 - 16) | v13 >> 16
  1831. v8 += v13
  1832. v7 ~= v8
  1833. v7 = v7 << (64 - 63) | v7 >> 63
  1834. v3 += m[8]
  1835. v3 += v4
  1836. v14 ~= v3
  1837. v14 = v14 << (64 - 16) | v14 >> 16
  1838. v9 += v14
  1839. v4 ~= v9
  1840. v4 = v4 << (64 - 63) | v4 >> 63
  1841. v1 += m[10]
  1842. v1 += v6
  1843. v12 ~= v1
  1844. v12 = v12 << (64 - 16) | v12 >> 16
  1845. v11 += v12
  1846. v6 ~= v11
  1847. v6 = v6 << (64 - 63) | v6 >> 63
  1848. v0 += m[6]
  1849. v0 += v5
  1850. v15 ~= v0
  1851. v15 = v15 << (64 - 16) | v15 >> 16
  1852. v10 += v15
  1853. v5 ~= v10
  1854. v5 = v5 << (64 - 63) | v5 >> 63
  1855. v0 += m[9]
  1856. v0 += v4
  1857. v12 ~= v0
  1858. v12 = v12 << (64 - 32) | v12 >> 32
  1859. v8 += v12
  1860. v4 ~= v8
  1861. v4 = v4 << (64 - 24) | v4 >> 24
  1862. v1 += m[5]
  1863. v1 += v5
  1864. v13 ~= v1
  1865. v13 = v13 << (64 - 32) | v13 >> 32
  1866. v9 += v13
  1867. v5 ~= v9
  1868. v5 = v5 << (64 - 24) | v5 >> 24
  1869. v2 += m[2]
  1870. v2 += v6
  1871. v14 ~= v2
  1872. v14 = v14 << (64 - 32) | v14 >> 32
  1873. v10 += v14
  1874. v6 ~= v10
  1875. v6 = v6 << (64 - 24) | v6 >> 24
  1876. v3 += m[10]
  1877. v3 += v7
  1878. v15 ~= v3
  1879. v15 = v15 << (64 - 32) | v15 >> 32
  1880. v11 += v15
  1881. v7 ~= v11
  1882. v7 = v7 << (64 - 24) | v7 >> 24
  1883. v2 += m[4]
  1884. v2 += v6
  1885. v14 ~= v2
  1886. v14 = v14 << (64 - 16) | v14 >> 16
  1887. v10 += v14
  1888. v6 ~= v10
  1889. v6 = v6 << (64 - 63) | v6 >> 63
  1890. v3 += m[15]
  1891. v3 += v7
  1892. v15 ~= v3
  1893. v15 = v15 << (64 - 16) | v15 >> 16
  1894. v11 += v15
  1895. v7 ~= v11
  1896. v7 = v7 << (64 - 63) | v7 >> 63
  1897. v1 += m[7]
  1898. v1 += v5
  1899. v13 ~= v1
  1900. v13 = v13 << (64 - 16) | v13 >> 16
  1901. v9 += v13
  1902. v5 ~= v9
  1903. v5 = v5 << (64 - 63) | v5 >> 63
  1904. v0 += m[0]
  1905. v0 += v4
  1906. v12 ~= v0
  1907. v12 = v12 << (64 - 16) | v12 >> 16
  1908. v8 += v12
  1909. v4 ~= v8
  1910. v4 = v4 << (64 - 63) | v4 >> 63
  1911. v0 += m[14]
  1912. v0 += v5
  1913. v15 ~= v0
  1914. v15 = v15 << (64 - 32) | v15 >> 32
  1915. v10 += v15
  1916. v5 ~= v10
  1917. v5 = v5 << (64 - 24) | v5 >> 24
  1918. v1 += m[11]
  1919. v1 += v6
  1920. v12 ~= v1
  1921. v12 = v12 << (64 - 32) | v12 >> 32
  1922. v11 += v12
  1923. v6 ~= v11
  1924. v6 = v6 << (64 - 24) | v6 >> 24
  1925. v2 += m[6]
  1926. v2 += v7
  1927. v13 ~= v2
  1928. v13 = v13 << (64 - 32) | v13 >> 32
  1929. v8 += v13
  1930. v7 ~= v8
  1931. v7 = v7 << (64 - 24) | v7 >> 24
  1932. v3 += m[3]
  1933. v3 += v4
  1934. v14 ~= v3
  1935. v14 = v14 << (64 - 32) | v14 >> 32
  1936. v9 += v14
  1937. v4 ~= v9
  1938. v4 = v4 << (64 - 24) | v4 >> 24
  1939. v2 += m[8]
  1940. v2 += v7
  1941. v13 ~= v2
  1942. v13 = v13 << (64 - 16) | v13 >> 16
  1943. v8 += v13
  1944. v7 ~= v8
  1945. v7 = v7 << (64 - 63) | v7 >> 63
  1946. v3 += m[13]
  1947. v3 += v4
  1948. v14 ~= v3
  1949. v14 = v14 << (64 - 16) | v14 >> 16
  1950. v9 += v14
  1951. v4 ~= v9
  1952. v4 = v4 << (64 - 63) | v4 >> 63
  1953. v1 += m[12]
  1954. v1 += v6
  1955. v12 ~= v1
  1956. v12 = v12 << (64 - 16) | v12 >> 16
  1957. v11 += v12
  1958. v6 ~= v11
  1959. v6 = v6 << (64 - 63) | v6 >> 63
  1960. v0 += m[1]
  1961. v0 += v5
  1962. v15 ~= v0
  1963. v15 = v15 << (64 - 16) | v15 >> 16
  1964. v10 += v15
  1965. v5 ~= v10
  1966. v5 = v5 << (64 - 63) | v5 >> 63
  1967. v0 += m[2]
  1968. v0 += v4
  1969. v12 ~= v0
  1970. v12 = v12 << (64 - 32) | v12 >> 32
  1971. v8 += v12
  1972. v4 ~= v8
  1973. v4 = v4 << (64 - 24) | v4 >> 24
  1974. v1 += m[6]
  1975. v1 += v5
  1976. v13 ~= v1
  1977. v13 = v13 << (64 - 32) | v13 >> 32
  1978. v9 += v13
  1979. v5 ~= v9
  1980. v5 = v5 << (64 - 24) | v5 >> 24
  1981. v2 += m[0]
  1982. v2 += v6
  1983. v14 ~= v2
  1984. v14 = v14 << (64 - 32) | v14 >> 32
  1985. v10 += v14
  1986. v6 ~= v10
  1987. v6 = v6 << (64 - 24) | v6 >> 24
  1988. v3 += m[8]
  1989. v3 += v7
  1990. v15 ~= v3
  1991. v15 = v15 << (64 - 32) | v15 >> 32
  1992. v11 += v15
  1993. v7 ~= v11
  1994. v7 = v7 << (64 - 24) | v7 >> 24
  1995. v2 += m[11]
  1996. v2 += v6
  1997. v14 ~= v2
  1998. v14 = v14 << (64 - 16) | v14 >> 16
  1999. v10 += v14
  2000. v6 ~= v10
  2001. v6 = v6 << (64 - 63) | v6 >> 63
  2002. v3 += m[3]
  2003. v3 += v7
  2004. v15 ~= v3
  2005. v15 = v15 << (64 - 16) | v15 >> 16
  2006. v11 += v15
  2007. v7 ~= v11
  2008. v7 = v7 << (64 - 63) | v7 >> 63
  2009. v1 += m[10]
  2010. v1 += v5
  2011. v13 ~= v1
  2012. v13 = v13 << (64 - 16) | v13 >> 16
  2013. v9 += v13
  2014. v5 ~= v9
  2015. v5 = v5 << (64 - 63) | v5 >> 63
  2016. v0 += m[12]
  2017. v0 += v4
  2018. v12 ~= v0
  2019. v12 = v12 << (64 - 16) | v12 >> 16
  2020. v8 += v12
  2021. v4 ~= v8
  2022. v4 = v4 << (64 - 63) | v4 >> 63
  2023. v0 += m[4]
  2024. v0 += v5
  2025. v15 ~= v0
  2026. v15 = v15 << (64 - 32) | v15 >> 32
  2027. v10 += v15
  2028. v5 ~= v10
  2029. v5 = v5 << (64 - 24) | v5 >> 24
  2030. v1 += m[7]
  2031. v1 += v6
  2032. v12 ~= v1
  2033. v12 = v12 << (64 - 32) | v12 >> 32
  2034. v11 += v12
  2035. v6 ~= v11
  2036. v6 = v6 << (64 - 24) | v6 >> 24
  2037. v2 += m[15]
  2038. v2 += v7
  2039. v13 ~= v2
  2040. v13 = v13 << (64 - 32) | v13 >> 32
  2041. v8 += v13
  2042. v7 ~= v8
  2043. v7 = v7 << (64 - 24) | v7 >> 24
  2044. v3 += m[1]
  2045. v3 += v4
  2046. v14 ~= v3
  2047. v14 = v14 << (64 - 32) | v14 >> 32
  2048. v9 += v14
  2049. v4 ~= v9
  2050. v4 = v4 << (64 - 24) | v4 >> 24
  2051. v2 += m[14]
  2052. v2 += v7
  2053. v13 ~= v2
  2054. v13 = v13 << (64 - 16) | v13 >> 16
  2055. v8 += v13
  2056. v7 ~= v8
  2057. v7 = v7 << (64 - 63) | v7 >> 63
  2058. v3 += m[9]
  2059. v3 += v4
  2060. v14 ~= v3
  2061. v14 = v14 << (64 - 16) | v14 >> 16
  2062. v9 += v14
  2063. v4 ~= v9
  2064. v4 = v4 << (64 - 63) | v4 >> 63
  2065. v1 += m[5]
  2066. v1 += v6
  2067. v12 ~= v1
  2068. v12 = v12 << (64 - 16) | v12 >> 16
  2069. v11 += v12
  2070. v6 ~= v11
  2071. v6 = v6 << (64 - 63) | v6 >> 63
  2072. v0 += m[13]
  2073. v0 += v5
  2074. v15 ~= v0
  2075. v15 = v15 << (64 - 16) | v15 >> 16
  2076. v10 += v15
  2077. v5 ~= v10
  2078. v5 = v5 << (64 - 63) | v5 >> 63
  2079. v0 += m[12]
  2080. v0 += v4
  2081. v12 ~= v0
  2082. v12 = v12 << (64 - 32) | v12 >> 32
  2083. v8 += v12
  2084. v4 ~= v8
  2085. v4 = v4 << (64 - 24) | v4 >> 24
  2086. v1 += m[1]
  2087. v1 += v5
  2088. v13 ~= v1
  2089. v13 = v13 << (64 - 32) | v13 >> 32
  2090. v9 += v13
  2091. v5 ~= v9
  2092. v5 = v5 << (64 - 24) | v5 >> 24
  2093. v2 += m[14]
  2094. v2 += v6
  2095. v14 ~= v2
  2096. v14 = v14 << (64 - 32) | v14 >> 32
  2097. v10 += v14
  2098. v6 ~= v10
  2099. v6 = v6 << (64 - 24) | v6 >> 24
  2100. v3 += m[4]
  2101. v3 += v7
  2102. v15 ~= v3
  2103. v15 = v15 << (64 - 32) | v15 >> 32
  2104. v11 += v15
  2105. v7 ~= v11
  2106. v7 = v7 << (64 - 24) | v7 >> 24
  2107. v2 += m[13]
  2108. v2 += v6
  2109. v14 ~= v2
  2110. v14 = v14 << (64 - 16) | v14 >> 16
  2111. v10 += v14
  2112. v6 ~= v10
  2113. v6 = v6 << (64 - 63) | v6 >> 63
  2114. v3 += m[10]
  2115. v3 += v7
  2116. v15 ~= v3
  2117. v15 = v15 << (64 - 16) | v15 >> 16
  2118. v11 += v15
  2119. v7 ~= v11
  2120. v7 = v7 << (64 - 63) | v7 >> 63
  2121. v1 += m[15]
  2122. v1 += v5
  2123. v13 ~= v1
  2124. v13 = v13 << (64 - 16) | v13 >> 16
  2125. v9 += v13
  2126. v5 ~= v9
  2127. v5 = v5 << (64 - 63) | v5 >> 63
  2128. v0 += m[5]
  2129. v0 += v4
  2130. v12 ~= v0
  2131. v12 = v12 << (64 - 16) | v12 >> 16
  2132. v8 += v12
  2133. v4 ~= v8
  2134. v4 = v4 << (64 - 63) | v4 >> 63
  2135. v0 += m[0]
  2136. v0 += v5
  2137. v15 ~= v0
  2138. v15 = v15 << (64 - 32) | v15 >> 32
  2139. v10 += v15
  2140. v5 ~= v10
  2141. v5 = v5 << (64 - 24) | v5 >> 24
  2142. v1 += m[6]
  2143. v1 += v6
  2144. v12 ~= v1
  2145. v12 = v12 << (64 - 32) | v12 >> 32
  2146. v11 += v12
  2147. v6 ~= v11
  2148. v6 = v6 << (64 - 24) | v6 >> 24
  2149. v2 += m[9]
  2150. v2 += v7
  2151. v13 ~= v2
  2152. v13 = v13 << (64 - 32) | v13 >> 32
  2153. v8 += v13
  2154. v7 ~= v8
  2155. v7 = v7 << (64 - 24) | v7 >> 24
  2156. v3 += m[8]
  2157. v3 += v4
  2158. v14 ~= v3
  2159. v14 = v14 << (64 - 32) | v14 >> 32
  2160. v9 += v14
  2161. v4 ~= v9
  2162. v4 = v4 << (64 - 24) | v4 >> 24
  2163. v2 += m[2]
  2164. v2 += v7
  2165. v13 ~= v2
  2166. v13 = v13 << (64 - 16) | v13 >> 16
  2167. v8 += v13
  2168. v7 ~= v8
  2169. v7 = v7 << (64 - 63) | v7 >> 63
  2170. v3 += m[11]
  2171. v3 += v4
  2172. v14 ~= v3
  2173. v14 = v14 << (64 - 16) | v14 >> 16
  2174. v9 += v14
  2175. v4 ~= v9
  2176. v4 = v4 << (64 - 63) | v4 >> 63
  2177. v1 += m[3]
  2178. v1 += v6
  2179. v12 ~= v1
  2180. v12 = v12 << (64 - 16) | v12 >> 16
  2181. v11 += v12
  2182. v6 ~= v11
  2183. v6 = v6 << (64 - 63) | v6 >> 63
  2184. v0 += m[7]
  2185. v0 += v5
  2186. v15 ~= v0
  2187. v15 = v15 << (64 - 16) | v15 >> 16
  2188. v10 += v15
  2189. v5 ~= v10
  2190. v5 = v5 << (64 - 63) | v5 >> 63
  2191. v0 += m[13]
  2192. v0 += v4
  2193. v12 ~= v0
  2194. v12 = v12 << (64 - 32) | v12 >> 32
  2195. v8 += v12
  2196. v4 ~= v8
  2197. v4 = v4 << (64 - 24) | v4 >> 24
  2198. v1 += m[7]
  2199. v1 += v5
  2200. v13 ~= v1
  2201. v13 = v13 << (64 - 32) | v13 >> 32
  2202. v9 += v13
  2203. v5 ~= v9
  2204. v5 = v5 << (64 - 24) | v5 >> 24
  2205. v2 += m[12]
  2206. v2 += v6
  2207. v14 ~= v2
  2208. v14 = v14 << (64 - 32) | v14 >> 32
  2209. v10 += v14
  2210. v6 ~= v10
  2211. v6 = v6 << (64 - 24) | v6 >> 24
  2212. v3 += m[3]
  2213. v3 += v7
  2214. v15 ~= v3
  2215. v15 = v15 << (64 - 32) | v15 >> 32
  2216. v11 += v15
  2217. v7 ~= v11
  2218. v7 = v7 << (64 - 24) | v7 >> 24
  2219. v2 += m[1]
  2220. v2 += v6
  2221. v14 ~= v2
  2222. v14 = v14 << (64 - 16) | v14 >> 16
  2223. v10 += v14
  2224. v6 ~= v10
  2225. v6 = v6 << (64 - 63) | v6 >> 63
  2226. v3 += m[9]
  2227. v3 += v7
  2228. v15 ~= v3
  2229. v15 = v15 << (64 - 16) | v15 >> 16
  2230. v11 += v15
  2231. v7 ~= v11
  2232. v7 = v7 << (64 - 63) | v7 >> 63
  2233. v1 += m[14]
  2234. v1 += v5
  2235. v13 ~= v1
  2236. v13 = v13 << (64 - 16) | v13 >> 16
  2237. v9 += v13
  2238. v5 ~= v9
  2239. v5 = v5 << (64 - 63) | v5 >> 63
  2240. v0 += m[11]
  2241. v0 += v4
  2242. v12 ~= v0
  2243. v12 = v12 << (64 - 16) | v12 >> 16
  2244. v8 += v12
  2245. v4 ~= v8
  2246. v4 = v4 << (64 - 63) | v4 >> 63
  2247. v0 += m[5]
  2248. v0 += v5
  2249. v15 ~= v0
  2250. v15 = v15 << (64 - 32) | v15 >> 32
  2251. v10 += v15
  2252. v5 ~= v10
  2253. v5 = v5 << (64 - 24) | v5 >> 24
  2254. v1 += m[15]
  2255. v1 += v6
  2256. v12 ~= v1
  2257. v12 = v12 << (64 - 32) | v12 >> 32
  2258. v11 += v12
  2259. v6 ~= v11
  2260. v6 = v6 << (64 - 24) | v6 >> 24
  2261. v2 += m[8]
  2262. v2 += v7
  2263. v13 ~= v2
  2264. v13 = v13 << (64 - 32) | v13 >> 32
  2265. v8 += v13
  2266. v7 ~= v8
  2267. v7 = v7 << (64 - 24) | v7 >> 24
  2268. v3 += m[2]
  2269. v3 += v4
  2270. v14 ~= v3
  2271. v14 = v14 << (64 - 32) | v14 >> 32
  2272. v9 += v14
  2273. v4 ~= v9
  2274. v4 = v4 << (64 - 24) | v4 >> 24
  2275. v2 += m[6]
  2276. v2 += v7
  2277. v13 ~= v2
  2278. v13 = v13 << (64 - 16) | v13 >> 16
  2279. v8 += v13
  2280. v7 ~= v8
  2281. v7 = v7 << (64 - 63) | v7 >> 63
  2282. v3 += m[10]
  2283. v3 += v4
  2284. v14 ~= v3
  2285. v14 = v14 << (64 - 16) | v14 >> 16
  2286. v9 += v14
  2287. v4 ~= v9
  2288. v4 = v4 << (64 - 63) | v4 >> 63
  2289. v1 += m[4]
  2290. v1 += v6
  2291. v12 ~= v1
  2292. v12 = v12 << (64 - 16) | v12 >> 16
  2293. v11 += v12
  2294. v6 ~= v11
  2295. v6 = v6 << (64 - 63) | v6 >> 63
  2296. v0 += m[0]
  2297. v0 += v5
  2298. v15 ~= v0
  2299. v15 = v15 << (64 - 16) | v15 >> 16
  2300. v10 += v15
  2301. v5 ~= v10
  2302. v5 = v5 << (64 - 63) | v5 >> 63
  2303. v0 += m[6]
  2304. v0 += v4
  2305. v12 ~= v0
  2306. v12 = v12 << (64 - 32) | v12 >> 32
  2307. v8 += v12
  2308. v4 ~= v8
  2309. v4 = v4 << (64 - 24) | v4 >> 24
  2310. v1 += m[14]
  2311. v1 += v5
  2312. v13 ~= v1
  2313. v13 = v13 << (64 - 32) | v13 >> 32
  2314. v9 += v13
  2315. v5 ~= v9
  2316. v5 = v5 << (64 - 24) | v5 >> 24
  2317. v2 += m[11]
  2318. v2 += v6
  2319. v14 ~= v2
  2320. v14 = v14 << (64 - 32) | v14 >> 32
  2321. v10 += v14
  2322. v6 ~= v10
  2323. v6 = v6 << (64 - 24) | v6 >> 24
  2324. v3 += m[0]
  2325. v3 += v7
  2326. v15 ~= v3
  2327. v15 = v15 << (64 - 32) | v15 >> 32
  2328. v11 += v15
  2329. v7 ~= v11
  2330. v7 = v7 << (64 - 24) | v7 >> 24
  2331. v2 += m[3]
  2332. v2 += v6
  2333. v14 ~= v2
  2334. v14 = v14 << (64 - 16) | v14 >> 16
  2335. v10 += v14
  2336. v6 ~= v10
  2337. v6 = v6 << (64 - 63) | v6 >> 63
  2338. v3 += m[8]
  2339. v3 += v7
  2340. v15 ~= v3
  2341. v15 = v15 << (64 - 16) | v15 >> 16
  2342. v11 += v15
  2343. v7 ~= v11
  2344. v7 = v7 << (64 - 63) | v7 >> 63
  2345. v1 += m[9]
  2346. v1 += v5
  2347. v13 ~= v1
  2348. v13 = v13 << (64 - 16) | v13 >> 16
  2349. v9 += v13
  2350. v5 ~= v9
  2351. v5 = v5 << (64 - 63) | v5 >> 63
  2352. v0 += m[15]
  2353. v0 += v4
  2354. v12 ~= v0
  2355. v12 = v12 << (64 - 16) | v12 >> 16
  2356. v8 += v12
  2357. v4 ~= v8
  2358. v4 = v4 << (64 - 63) | v4 >> 63
  2359. v0 += m[12]
  2360. v0 += v5
  2361. v15 ~= v0
  2362. v15 = v15 << (64 - 32) | v15 >> 32
  2363. v10 += v15
  2364. v5 ~= v10
  2365. v5 = v5 << (64 - 24) | v5 >> 24
  2366. v1 += m[13]
  2367. v1 += v6
  2368. v12 ~= v1
  2369. v12 = v12 << (64 - 32) | v12 >> 32
  2370. v11 += v12
  2371. v6 ~= v11
  2372. v6 = v6 << (64 - 24) | v6 >> 24
  2373. v2 += m[1]
  2374. v2 += v7
  2375. v13 ~= v2
  2376. v13 = v13 << (64 - 32) | v13 >> 32
  2377. v8 += v13
  2378. v7 ~= v8
  2379. v7 = v7 << (64 - 24) | v7 >> 24
  2380. v3 += m[10]
  2381. v3 += v4
  2382. v14 ~= v3
  2383. v14 = v14 << (64 - 32) | v14 >> 32
  2384. v9 += v14
  2385. v4 ~= v9
  2386. v4 = v4 << (64 - 24) | v4 >> 24
  2387. v2 += m[4]
  2388. v2 += v7
  2389. v13 ~= v2
  2390. v13 = v13 << (64 - 16) | v13 >> 16
  2391. v8 += v13
  2392. v7 ~= v8
  2393. v7 = v7 << (64 - 63) | v7 >> 63
  2394. v3 += m[5]
  2395. v3 += v4
  2396. v14 ~= v3
  2397. v14 = v14 << (64 - 16) | v14 >> 16
  2398. v9 += v14
  2399. v4 ~= v9
  2400. v4 = v4 << (64 - 63) | v4 >> 63
  2401. v1 += m[7]
  2402. v1 += v6
  2403. v12 ~= v1
  2404. v12 = v12 << (64 - 16) | v12 >> 16
  2405. v11 += v12
  2406. v6 ~= v11
  2407. v6 = v6 << (64 - 63) | v6 >> 63
  2408. v0 += m[2]
  2409. v0 += v5
  2410. v15 ~= v0
  2411. v15 = v15 << (64 - 16) | v15 >> 16
  2412. v10 += v15
  2413. v5 ~= v10
  2414. v5 = v5 << (64 - 63) | v5 >> 63
  2415. v0 += m[10]
  2416. v0 += v4
  2417. v12 ~= v0
  2418. v12 = v12 << (64 - 32) | v12 >> 32
  2419. v8 += v12
  2420. v4 ~= v8
  2421. v4 = v4 << (64 - 24) | v4 >> 24
  2422. v1 += m[8]
  2423. v1 += v5
  2424. v13 ~= v1
  2425. v13 = v13 << (64 - 32) | v13 >> 32
  2426. v9 += v13
  2427. v5 ~= v9
  2428. v5 = v5 << (64 - 24) | v5 >> 24
  2429. v2 += m[7]
  2430. v2 += v6
  2431. v14 ~= v2
  2432. v14 = v14 << (64 - 32) | v14 >> 32
  2433. v10 += v14
  2434. v6 ~= v10
  2435. v6 = v6 << (64 - 24) | v6 >> 24
  2436. v3 += m[1]
  2437. v3 += v7
  2438. v15 ~= v3
  2439. v15 = v15 << (64 - 32) | v15 >> 32
  2440. v11 += v15
  2441. v7 ~= v11
  2442. v7 = v7 << (64 - 24) | v7 >> 24
  2443. v2 += m[6]
  2444. v2 += v6
  2445. v14 ~= v2
  2446. v14 = v14 << (64 - 16) | v14 >> 16
  2447. v10 += v14
  2448. v6 ~= v10
  2449. v6 = v6 << (64 - 63) | v6 >> 63
  2450. v3 += m[5]
  2451. v3 += v7
  2452. v15 ~= v3
  2453. v15 = v15 << (64 - 16) | v15 >> 16
  2454. v11 += v15
  2455. v7 ~= v11
  2456. v7 = v7 << (64 - 63) | v7 >> 63
  2457. v1 += m[4]
  2458. v1 += v5
  2459. v13 ~= v1
  2460. v13 = v13 << (64 - 16) | v13 >> 16
  2461. v9 += v13
  2462. v5 ~= v9
  2463. v5 = v5 << (64 - 63) | v5 >> 63
  2464. v0 += m[2]
  2465. v0 += v4
  2466. v12 ~= v0
  2467. v12 = v12 << (64 - 16) | v12 >> 16
  2468. v8 += v12
  2469. v4 ~= v8
  2470. v4 = v4 << (64 - 63) | v4 >> 63
  2471. v0 += m[15]
  2472. v0 += v5
  2473. v15 ~= v0
  2474. v15 = v15 << (64 - 32) | v15 >> 32
  2475. v10 += v15
  2476. v5 ~= v10
  2477. v5 = v5 << (64 - 24) | v5 >> 24
  2478. v1 += m[9]
  2479. v1 += v6
  2480. v12 ~= v1
  2481. v12 = v12 << (64 - 32) | v12 >> 32
  2482. v11 += v12
  2483. v6 ~= v11
  2484. v6 = v6 << (64 - 24) | v6 >> 24
  2485. v2 += m[3]
  2486. v2 += v7
  2487. v13 ~= v2
  2488. v13 = v13 << (64 - 32) | v13 >> 32
  2489. v8 += v13
  2490. v7 ~= v8
  2491. v7 = v7 << (64 - 24) | v7 >> 24
  2492. v3 += m[13]
  2493. v3 += v4
  2494. v14 ~= v3
  2495. v14 = v14 << (64 - 32) | v14 >> 32
  2496. v9 += v14
  2497. v4 ~= v9
  2498. v4 = v4 << (64 - 24) | v4 >> 24
  2499. v2 += m[12]
  2500. v2 += v7
  2501. v13 ~= v2
  2502. v13 = v13 << (64 - 16) | v13 >> 16
  2503. v8 += v13
  2504. v7 ~= v8
  2505. v7 = v7 << (64 - 63) | v7 >> 63
  2506. v3 += m[0]
  2507. v3 += v4
  2508. v14 ~= v3
  2509. v14 = v14 << (64 - 16) | v14 >> 16
  2510. v9 += v14
  2511. v4 ~= v9
  2512. v4 = v4 << (64 - 63) | v4 >> 63
  2513. v1 += m[14]
  2514. v1 += v6
  2515. v12 ~= v1
  2516. v12 = v12 << (64 - 16) | v12 >> 16
  2517. v11 += v12
  2518. v6 ~= v11
  2519. v6 = v6 << (64 - 63) | v6 >> 63
  2520. v0 += m[11]
  2521. v0 += v5
  2522. v15 ~= v0
  2523. v15 = v15 << (64 - 16) | v15 >> 16
  2524. v10 += v15
  2525. v5 ~= v10
  2526. v5 = v5 << (64 - 63) | v5 >> 63
  2527. v0 += m[0]
  2528. v0 += v4
  2529. v12 ~= v0
  2530. v12 = v12 << (64 - 32) | v12 >> 32
  2531. v8 += v12
  2532. v4 ~= v8
  2533. v4 = v4 << (64 - 24) | v4 >> 24
  2534. v1 += m[2]
  2535. v1 += v5
  2536. v13 ~= v1
  2537. v13 = v13 << (64 - 32) | v13 >> 32
  2538. v9 += v13
  2539. v5 ~= v9
  2540. v5 = v5 << (64 - 24) | v5 >> 24
  2541. v2 += m[4]
  2542. v2 += v6
  2543. v14 ~= v2
  2544. v14 = v14 << (64 - 32) | v14 >> 32
  2545. v10 += v14
  2546. v6 ~= v10
  2547. v6 = v6 << (64 - 24) | v6 >> 24
  2548. v3 += m[6]
  2549. v3 += v7
  2550. v15 ~= v3
  2551. v15 = v15 << (64 - 32) | v15 >> 32
  2552. v11 += v15
  2553. v7 ~= v11
  2554. v7 = v7 << (64 - 24) | v7 >> 24
  2555. v2 += m[5]
  2556. v2 += v6
  2557. v14 ~= v2
  2558. v14 = v14 << (64 - 16) | v14 >> 16
  2559. v10 += v14
  2560. v6 ~= v10
  2561. v6 = v6 << (64 - 63) | v6 >> 63
  2562. v3 += m[7]
  2563. v3 += v7
  2564. v15 ~= v3
  2565. v15 = v15 << (64 - 16) | v15 >> 16
  2566. v11 += v15
  2567. v7 ~= v11
  2568. v7 = v7 << (64 - 63) | v7 >> 63
  2569. v1 += m[3]
  2570. v1 += v5
  2571. v13 ~= v1
  2572. v13 = v13 << (64 - 16) | v13 >> 16
  2573. v9 += v13
  2574. v5 ~= v9
  2575. v5 = v5 << (64 - 63) | v5 >> 63
  2576. v0 += m[1]
  2577. v0 += v4
  2578. v12 ~= v0
  2579. v12 = v12 << (64 - 16) | v12 >> 16
  2580. v8 += v12
  2581. v4 ~= v8
  2582. v4 = v4 << (64 - 63) | v4 >> 63
  2583. v0 += m[8]
  2584. v0 += v5
  2585. v15 ~= v0
  2586. v15 = v15 << (64 - 32) | v15 >> 32
  2587. v10 += v15
  2588. v5 ~= v10
  2589. v5 = v5 << (64 - 24) | v5 >> 24
  2590. v1 += m[10]
  2591. v1 += v6
  2592. v12 ~= v1
  2593. v12 = v12 << (64 - 32) | v12 >> 32
  2594. v11 += v12
  2595. v6 ~= v11
  2596. v6 = v6 << (64 - 24) | v6 >> 24
  2597. v2 += m[12]
  2598. v2 += v7
  2599. v13 ~= v2
  2600. v13 = v13 << (64 - 32) | v13 >> 32
  2601. v8 += v13
  2602. v7 ~= v8
  2603. v7 = v7 << (64 - 24) | v7 >> 24
  2604. v3 += m[14]
  2605. v3 += v4
  2606. v14 ~= v3
  2607. v14 = v14 << (64 - 32) | v14 >> 32
  2608. v9 += v14
  2609. v4 ~= v9
  2610. v4 = v4 << (64 - 24) | v4 >> 24
  2611. v2 += m[13]
  2612. v2 += v7
  2613. v13 ~= v2
  2614. v13 = v13 << (64 - 16) | v13 >> 16
  2615. v8 += v13
  2616. v7 ~= v8
  2617. v7 = v7 << (64 - 63) | v7 >> 63
  2618. v3 += m[15]
  2619. v3 += v4
  2620. v14 ~= v3
  2621. v14 = v14 << (64 - 16) | v14 >> 16
  2622. v9 += v14
  2623. v4 ~= v9
  2624. v4 = v4 << (64 - 63) | v4 >> 63
  2625. v1 += m[11]
  2626. v1 += v6
  2627. v12 ~= v1
  2628. v12 = v12 << (64 - 16) | v12 >> 16
  2629. v11 += v12
  2630. v6 ~= v11
  2631. v6 = v6 << (64 - 63) | v6 >> 63
  2632. v0 += m[9]
  2633. v0 += v5
  2634. v15 ~= v0
  2635. v15 = v15 << (64 - 16) | v15 >> 16
  2636. v10 += v15
  2637. v5 ~= v10
  2638. v5 = v5 << (64 - 63) | v5 >> 63
  2639. v0 += m[14]
  2640. v0 += v4
  2641. v12 ~= v0
  2642. v12 = v12 << (64 - 32) | v12 >> 32
  2643. v8 += v12
  2644. v4 ~= v8
  2645. v4 = v4 << (64 - 24) | v4 >> 24
  2646. v1 += m[4]
  2647. v1 += v5
  2648. v13 ~= v1
  2649. v13 = v13 << (64 - 32) | v13 >> 32
  2650. v9 += v13
  2651. v5 ~= v9
  2652. v5 = v5 << (64 - 24) | v5 >> 24
  2653. v2 += m[9]
  2654. v2 += v6
  2655. v14 ~= v2
  2656. v14 = v14 << (64 - 32) | v14 >> 32
  2657. v10 += v14
  2658. v6 ~= v10
  2659. v6 = v6 << (64 - 24) | v6 >> 24
  2660. v3 += m[13]
  2661. v3 += v7
  2662. v15 ~= v3
  2663. v15 = v15 << (64 - 32) | v15 >> 32
  2664. v11 += v15
  2665. v7 ~= v11
  2666. v7 = v7 << (64 - 24) | v7 >> 24
  2667. v2 += m[15]
  2668. v2 += v6
  2669. v14 ~= v2
  2670. v14 = v14 << (64 - 16) | v14 >> 16
  2671. v10 += v14
  2672. v6 ~= v10
  2673. v6 = v6 << (64 - 63) | v6 >> 63
  2674. v3 += m[6]
  2675. v3 += v7
  2676. v15 ~= v3
  2677. v15 = v15 << (64 - 16) | v15 >> 16
  2678. v11 += v15
  2679. v7 ~= v11
  2680. v7 = v7 << (64 - 63) | v7 >> 63
  2681. v1 += m[8]
  2682. v1 += v5
  2683. v13 ~= v1
  2684. v13 = v13 << (64 - 16) | v13 >> 16
  2685. v9 += v13
  2686. v5 ~= v9
  2687. v5 = v5 << (64 - 63) | v5 >> 63
  2688. v0 += m[10]
  2689. v0 += v4
  2690. v12 ~= v0
  2691. v12 = v12 << (64 - 16) | v12 >> 16
  2692. v8 += v12
  2693. v4 ~= v8
  2694. v4 = v4 << (64 - 63) | v4 >> 63
  2695. v0 += m[1]
  2696. v0 += v5
  2697. v15 ~= v0
  2698. v15 = v15 << (64 - 32) | v15 >> 32
  2699. v10 += v15
  2700. v5 ~= v10
  2701. v5 = v5 << (64 - 24) | v5 >> 24
  2702. v1 += m[0]
  2703. v1 += v6
  2704. v12 ~= v1
  2705. v12 = v12 << (64 - 32) | v12 >> 32
  2706. v11 += v12
  2707. v6 ~= v11
  2708. v6 = v6 << (64 - 24) | v6 >> 24
  2709. v2 += m[11]
  2710. v2 += v7
  2711. v13 ~= v2
  2712. v13 = v13 << (64 - 32) | v13 >> 32
  2713. v8 += v13
  2714. v7 ~= v8
  2715. v7 = v7 << (64 - 24) | v7 >> 24
  2716. v3 += m[5]
  2717. v3 += v4
  2718. v14 ~= v3
  2719. v14 = v14 << (64 - 32) | v14 >> 32
  2720. v9 += v14
  2721. v4 ~= v9
  2722. v4 = v4 << (64 - 24) | v4 >> 24
  2723. v2 += m[7]
  2724. v2 += v7
  2725. v13 ~= v2
  2726. v13 = v13 << (64 - 16) | v13 >> 16
  2727. v8 += v13
  2728. v7 ~= v8
  2729. v7 = v7 << (64 - 63) | v7 >> 63
  2730. v3 += m[3]
  2731. v3 += v4
  2732. v14 ~= v3
  2733. v14 = v14 << (64 - 16) | v14 >> 16
  2734. v9 += v14
  2735. v4 ~= v9
  2736. v4 = v4 << (64 - 63) | v4 >> 63
  2737. v1 += m[2]
  2738. v1 += v6
  2739. v12 ~= v1
  2740. v12 = v12 << (64 - 16) | v12 >> 16
  2741. v11 += v12
  2742. v6 ~= v11
  2743. v6 = v6 << (64 - 63) | v6 >> 63
  2744. v0 += m[12]
  2745. v0 += v5
  2746. v15 ~= v0
  2747. v15 = v15 << (64 - 16) | v15 >> 16
  2748. v10 += v15
  2749. v5 ~= v10
  2750. v5 = v5 << (64 - 63) | v5 >> 63
  2751. h0 ~= v0 ~ v8
  2752. h1 ~= v1 ~ v9
  2753. h2 ~= v2 ~ v10
  2754. h3 ~= v3 ~ v11
  2755. h4 ~= v4 ~ v12
  2756. h5 ~= v5 ~ v13
  2757. h6 ~= v6 ~ v14
  2758. h7 ~= v7 ~ v15
  2759. p = p[BLAKE2B_BLOCK_SIZE:]
  2760. }
  2761. ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] = h0, h1, h2, h3, h4, h5, h6, h7
  2762. }