Inside Bitcoin
Opening the selected file…
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
251MSG2A = vreinterpretq_u32_u8(vrev32q_u8(vld1q_u8(input + 32)));252MSG3A = vreinterpretq_u32_u8(vrev32q_u8(vld1q_u8(input + 48)));253MSG0B = vreinterpretq_u32_u8(vrev32q_u8(vld1q_u8(input + 64)));254MSG1B = vreinterpretq_u32_u8(vrev32q_u8(vld1q_u8(input + 80)));255MSG2B = vreinterpretq_u32_u8(vrev32q_u8(vld1q_u8(input + 96)));256MSG3B = vreinterpretq_u32_u8(vrev32q_u8(vld1q_u8(input + 112)));258// Transform 1: Rounds 1-4259TMP = vld1q_u32(&K[0]);260TMP0A = vaddq_u32(MSG0A, TMP);261TMP0B = vaddq_u32(MSG0B, TMP);262TMP2A = STATE0A;263TMP2B = STATE0B;264MSG0A = vsha256su0q_u32(MSG0A, MSG1A);265MSG0B = vsha256su0q_u32(MSG0B, MSG1B);266STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);267STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);268STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);269STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);270MSG0A = vsha256su1q_u32(MSG0A, MSG2A, MSG3A);271MSG0B = vsha256su1q_u32(MSG0B, MSG2B, MSG3B);273// Transform 1: Rounds 5-8274TMP = vld1q_u32(&K[4]);275TMP0A = vaddq_u32(MSG1A, TMP);276TMP0B = vaddq_u32(MSG1B, TMP);277TMP2A = STATE0A;278TMP2B = STATE0B;279MSG1A = vsha256su0q_u32(MSG1A, MSG2A);280MSG1B = vsha256su0q_u32(MSG1B, MSG2B);281STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);282STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);283STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);284STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);285MSG1A = vsha256su1q_u32(MSG1A, MSG3A, MSG0A);286MSG1B = vsha256su1q_u32(MSG1B, MSG3B, MSG0B);288// Transform 1: Rounds 9-12289TMP = vld1q_u32(&K[8]);290TMP0A = vaddq_u32(MSG2A, TMP);291TMP0B = vaddq_u32(MSG2B, TMP);292TMP2A = STATE0A;293TMP2B = STATE0B;294MSG2A = vsha256su0q_u32(MSG2A, MSG3A);295MSG2B = vsha256su0q_u32(MSG2B, MSG3B);296STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);297STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);298STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);299STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);300MSG2A = vsha256su1q_u32(MSG2A, MSG0A, MSG1A);301MSG2B = vsha256su1q_u32(MSG2B, MSG0B, MSG1B);303// Transform 1: Rounds 13-16304TMP = vld1q_u32(&K[12]);305TMP0A = vaddq_u32(MSG3A, TMP);306TMP0B = vaddq_u32(MSG3B, TMP);307TMP2A = STATE0A;308TMP2B = STATE0B;309MSG3A = vsha256su0q_u32(MSG3A, MSG0A);310MSG3B = vsha256su0q_u32(MSG3B, MSG0B);311STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);312STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);313STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);314STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);315MSG3A = vsha256su1q_u32(MSG3A, MSG1A, MSG2A);316MSG3B = vsha256su1q_u32(MSG3B, MSG1B, MSG2B);318// Transform 1: Rounds 17-20319TMP = vld1q_u32(&K[16]);320TMP0A = vaddq_u32(MSG0A, TMP);321TMP0B = vaddq_u32(MSG0B, TMP);322TMP2A = STATE0A;323TMP2B = STATE0B;324MSG0A = vsha256su0q_u32(MSG0A, MSG1A);325MSG0B = vsha256su0q_u32(MSG0B, MSG1B);326STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);327STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);328STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);329STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);330MSG0A = vsha256su1q_u32(MSG0A, MSG2A, MSG3A);331MSG0B = vsha256su1q_u32(MSG0B, MSG2B, MSG3B);333// Transform 1: Rounds 21-24334TMP = vld1q_u32(&K[20]);335TMP0A = vaddq_u32(MSG1A, TMP);336TMP0B = vaddq_u32(MSG1B, TMP);337TMP2A = STATE0A;338TMP2B = STATE0B;339MSG1A = vsha256su0q_u32(MSG1A, MSG2A);340MSG1B = vsha256su0q_u32(MSG1B, MSG2B);341STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);342STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);343STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);344STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);345MSG1A = vsha256su1q_u32(MSG1A, MSG3A, MSG0A);346MSG1B = vsha256su1q_u32(MSG1B, MSG3B, MSG0B);348// Transform 1: Rounds 25-28349TMP = vld1q_u32(&K[24]);350TMP0A = vaddq_u32(MSG2A, TMP);351TMP0B = vaddq_u32(MSG2B, TMP);352TMP2A = STATE0A;353TMP2B = STATE0B;354MSG2A = vsha256su0q_u32(MSG2A, MSG3A);355MSG2B = vsha256su0q_u32(MSG2B, MSG3B);356STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);357STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);358STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);359STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);360MSG2A = vsha256su1q_u32(MSG2A, MSG0A, MSG1A);361MSG2B = vsha256su1q_u32(MSG2B, MSG0B, MSG1B);363// Transform 1: Rounds 29-32364TMP = vld1q_u32(&K[28]);365TMP0A = vaddq_u32(MSG3A, TMP);366TMP0B = vaddq_u32(MSG3B, TMP);367TMP2A = STATE0A;368TMP2B = STATE0B;369MSG3A = vsha256su0q_u32(MSG3A, MSG0A);370MSG3B = vsha256su0q_u32(MSG3B, MSG0B);371STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);372STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);373STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);374STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);375MSG3A = vsha256su1q_u32(MSG3A, MSG1A, MSG2A);376MSG3B = vsha256su1q_u32(MSG3B, MSG1B, MSG2B);378// Transform 1: Rounds 33-36379TMP = vld1q_u32(&K[32]);380TMP0A = vaddq_u32(MSG0A, TMP);381TMP0B = vaddq_u32(MSG0B, TMP);382TMP2A = STATE0A;383TMP2B = STATE0B;384MSG0A = vsha256su0q_u32(MSG0A, MSG1A);385MSG0B = vsha256su0q_u32(MSG0B, MSG1B);386STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);387STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);388STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);389STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);390MSG0A = vsha256su1q_u32(MSG0A, MSG2A, MSG3A);391MSG0B = vsha256su1q_u32(MSG0B, MSG2B, MSG3B);393// Transform 1: Rounds 37-40394TMP = vld1q_u32(&K[36]);395TMP0A = vaddq_u32(MSG1A, TMP);396TMP0B = vaddq_u32(MSG1B, TMP);397TMP2A = STATE0A;398TMP2B = STATE0B;399MSG1A = vsha256su0q_u32(MSG1A, MSG2A);400MSG1B = vsha256su0q_u32(MSG1B, MSG2B);401STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);402STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);403STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);404STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);405MSG1A = vsha256su1q_u32(MSG1A, MSG3A, MSG0A);406MSG1B = vsha256su1q_u32(MSG1B, MSG3B, MSG0B);408// Transform 1: Rounds 41-44409TMP = vld1q_u32(&K[40]);410TMP0A = vaddq_u32(MSG2A, TMP);411TMP0B = vaddq_u32(MSG2B, TMP);412TMP2A = STATE0A;413TMP2B = STATE0B;414MSG2A = vsha256su0q_u32(MSG2A, MSG3A);415MSG2B = vsha256su0q_u32(MSG2B, MSG3B);416STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);417STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);418STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);419STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);420MSG2A = vsha256su1q_u32(MSG2A, MSG0A, MSG1A);421MSG2B = vsha256su1q_u32(MSG2B, MSG0B, MSG1B);423// Transform 1: Rounds 45-48424TMP = vld1q_u32(&K[44]);425TMP0A = vaddq_u32(MSG3A, TMP);426TMP0B = vaddq_u32(MSG3B, TMP);427TMP2A = STATE0A;428TMP2B = STATE0B;429MSG3A = vsha256su0q_u32(MSG3A, MSG0A);430MSG3B = vsha256su0q_u32(MSG3B, MSG0B);431STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);432STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);433STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);434STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);435MSG3A = vsha256su1q_u32(MSG3A, MSG1A, MSG2A);436MSG3B = vsha256su1q_u32(MSG3B, MSG1B, MSG2B);438// Transform 1: Rounds 49-52439TMP = vld1q_u32(&K[48]);440TMP0A = vaddq_u32(MSG0A, TMP);441TMP0B = vaddq_u32(MSG0B, TMP);442TMP2A = STATE0A;443TMP2B = STATE0B;444STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);445STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);446STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);447STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);449// Transform 1: Rounds 53-56450TMP = vld1q_u32(&K[52]);451TMP0A = vaddq_u32(MSG1A, TMP);452TMP0B = vaddq_u32(MSG1B, TMP);453TMP2A = STATE0A;454TMP2B = STATE0B;455STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);456STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);457STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);458STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);460// Transform 1: Rounds 57-60461TMP = vld1q_u32(&K[56]);462TMP0A = vaddq_u32(MSG2A, TMP);463TMP0B = vaddq_u32(MSG2B, TMP);464TMP2A = STATE0A;465TMP2B = STATE0B;466STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);467STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);468STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);469STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);471// Transform 1: Rounds 61-64472TMP = vld1q_u32(&K[60]);473TMP0A = vaddq_u32(MSG3A, TMP);474TMP0B = vaddq_u32(MSG3B, TMP);475TMP2A = STATE0A;476TMP2B = STATE0B;477STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);478STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);479STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);480STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);482// Transform 1: Update state483TMP = vld1q_u32(&INIT[0]);484STATE0A = vaddq_u32(STATE0A, TMP);485STATE0B = vaddq_u32(STATE0B, TMP);486TMP = vld1q_u32(&INIT[4]);487STATE1A = vaddq_u32(STATE1A, TMP);488STATE1B = vaddq_u32(STATE1B, TMP);490// Transform 2: Save state491ABCD_SAVEA = STATE0A;492ABCD_SAVEB = STATE0B;493EFGH_SAVEA = STATE1A;494EFGH_SAVEB = STATE1B;496// Transform 2: Rounds 1-4497TMP = vld1q_u32(&MIDS[0]);498TMP2A = STATE0A;499TMP2B = STATE0B;500STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.