Inside Bitcoin
Opening the selected file…
Inside Bitcoin
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.
501STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);502STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);503STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);505// Transform 2: Rounds 5-8506TMP = vld1q_u32(&MIDS[4]);507TMP2A = STATE0A;508TMP2B = STATE0B;509STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);510STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);511STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);512STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);514// Transform 2: Rounds 9-12515TMP = vld1q_u32(&MIDS[8]);516TMP2A = STATE0A;517TMP2B = STATE0B;518STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);519STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);520STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);521STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);523// Transform 2: Rounds 13-16524TMP = vld1q_u32(&MIDS[12]);525TMP2A = STATE0A;526TMP2B = STATE0B;527STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);528STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);529STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);530STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);532// Transform 2: Rounds 17-20533TMP = vld1q_u32(&MIDS[16]);534TMP2A = STATE0A;535TMP2B = STATE0B;536STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);537STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);538STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);539STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);541// Transform 2: Rounds 21-24542TMP = vld1q_u32(&MIDS[20]);543TMP2A = STATE0A;544TMP2B = STATE0B;545STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);546STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);547STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);548STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);550// Transform 2: Rounds 25-28551TMP = vld1q_u32(&MIDS[24]);552TMP2A = STATE0A;553TMP2B = STATE0B;554STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);555STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);556STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);557STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);559// Transform 2: Rounds 29-32560TMP = vld1q_u32(&MIDS[28]);561TMP2A = STATE0A;562TMP2B = STATE0B;563STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);564STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);565STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);566STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);568// Transform 2: Rounds 33-36569TMP = vld1q_u32(&MIDS[32]);570TMP2A = STATE0A;571TMP2B = STATE0B;572STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);573STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);574STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);575STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);577// Transform 2: Rounds 37-40578TMP = vld1q_u32(&MIDS[36]);579TMP2A = STATE0A;580TMP2B = STATE0B;581STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);582STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);583STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);584STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);586// Transform 2: Rounds 41-44587TMP = vld1q_u32(&MIDS[40]);588TMP2A = STATE0A;589TMP2B = STATE0B;590STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);591STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);592STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);593STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);595// Transform 2: Rounds 45-48596TMP = vld1q_u32(&MIDS[44]);597TMP2A = STATE0A;598TMP2B = STATE0B;599STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);600STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);601STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);602STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);604// Transform 2: Rounds 49-52605TMP = vld1q_u32(&MIDS[48]);606TMP2A = STATE0A;607TMP2B = STATE0B;608STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);609STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);610STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);611STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);613// Transform 2: Rounds 53-56614TMP = vld1q_u32(&MIDS[52]);615TMP2A = STATE0A;616TMP2B = STATE0B;617STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);618STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);619STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);620STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);622// Transform 2: Rounds 57-60623TMP = vld1q_u32(&MIDS[56]);624TMP2A = STATE0A;625TMP2B = STATE0B;626STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);627STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);628STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);629STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);631// Transform 2: Rounds 61-64632TMP = vld1q_u32(&MIDS[60]);633TMP2A = STATE0A;634TMP2B = STATE0B;635STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);636STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);637STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);638STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);640// Transform 2: Update state641STATE0A = vaddq_u32(STATE0A, ABCD_SAVEA);642STATE0B = vaddq_u32(STATE0B, ABCD_SAVEB);643STATE1A = vaddq_u32(STATE1A, EFGH_SAVEA);644STATE1B = vaddq_u32(STATE1B, EFGH_SAVEB);646// Transform 3: Pad previous output647MSG0A = STATE0A;648MSG0B = STATE0B;649MSG1A = STATE1A;650MSG1B = STATE1B;651MSG2A = vld1q_u32(&FINAL[0]);652MSG2B = MSG2A;653MSG3A = vld1q_u32(&FINAL[4]);654MSG3B = MSG3A;656// Transform 3: Load state657STATE0A = vld1q_u32(&INIT[0]);658STATE0B = STATE0A;659STATE1A = vld1q_u32(&INIT[4]);660STATE1B = STATE1A;662// Transform 3: Rounds 1-4663TMP = vld1q_u32(&K[0]);664TMP0A = vaddq_u32(MSG0A, TMP);665TMP0B = vaddq_u32(MSG0B, TMP);666TMP2A = STATE0A;667TMP2B = STATE0B;668MSG0A = vsha256su0q_u32(MSG0A, MSG1A);669MSG0B = vsha256su0q_u32(MSG0B, MSG1B);670STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);671STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);672STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);673STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);674MSG0A = vsha256su1q_u32(MSG0A, MSG2A, MSG3A);675MSG0B = vsha256su1q_u32(MSG0B, MSG2B, MSG3B);677// Transform 3: Rounds 5-8678TMP = vld1q_u32(&K[4]);679TMP0A = vaddq_u32(MSG1A, TMP);680TMP0B = vaddq_u32(MSG1B, TMP);681TMP2A = STATE0A;682TMP2B = STATE0B;683MSG1A = vsha256su0q_u32(MSG1A, MSG2A);684MSG1B = vsha256su0q_u32(MSG1B, MSG2B);685STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);686STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);687STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);688STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);689MSG1A = vsha256su1q_u32(MSG1A, MSG3A, MSG0A);690MSG1B = vsha256su1q_u32(MSG1B, MSG3B, MSG0B);692// Transform 3: Rounds 9-12693TMP = vld1q_u32(&FINS[0]);694TMP2A = STATE0A;695TMP2B = STATE0B;696MSG2A = vld1q_u32(&FINS[4]);697MSG2B = MSG2A;698STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);699STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);700STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);701STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);702MSG2A = vsha256su1q_u32(MSG2A, MSG0A, MSG1A);703MSG2B = vsha256su1q_u32(MSG2B, MSG0B, MSG1B);705// Transform 3: Rounds 13-16706TMP = vld1q_u32(&FINS[8]);707TMP2A = STATE0A;708TMP2B = STATE0B;709MSG3A = vsha256su0q_u32(MSG3A, MSG0A);710MSG3B = vsha256su0q_u32(MSG3B, MSG0B);711STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP);712STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP);713STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP);714STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP);715MSG3A = vsha256su1q_u32(MSG3A, MSG1A, MSG2A);716MSG3B = vsha256su1q_u32(MSG3B, MSG1B, MSG2B);718// Transform 3: Rounds 17-20719TMP = vld1q_u32(&K[16]);720TMP0A = vaddq_u32(MSG0A, TMP);721TMP0B = vaddq_u32(MSG0B, TMP);722TMP2A = STATE0A;723TMP2B = STATE0B;724MSG0A = vsha256su0q_u32(MSG0A, MSG1A);725MSG0B = vsha256su0q_u32(MSG0B, MSG1B);726STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);727STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);728STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);729STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);730MSG0A = vsha256su1q_u32(MSG0A, MSG2A, MSG3A);731MSG0B = vsha256su1q_u32(MSG0B, MSG2B, MSG3B);733// Transform 3: Rounds 21-24734TMP = vld1q_u32(&K[20]);735TMP0A = vaddq_u32(MSG1A, TMP);736TMP0B = vaddq_u32(MSG1B, TMP);737TMP2A = STATE0A;738TMP2B = STATE0B;739MSG1A = vsha256su0q_u32(MSG1A, MSG2A);740MSG1B = vsha256su0q_u32(MSG1B, MSG2B);741STATE0A = vsha256hq_u32(STATE0A, STATE1A, TMP0A);742STATE0B = vsha256hq_u32(STATE0B, STATE1B, TMP0B);743STATE1A = vsha256h2q_u32(STATE1A, TMP2A, TMP0A);744STATE1B = vsha256h2q_u32(STATE1B, TMP2B, TMP0B);745MSG1A = vsha256su1q_u32(MSG1A, MSG3A, MSG0A);746MSG1B = vsha256su1q_u32(MSG1B, MSG3B, MSG0B);748// Transform 3: Rounds 25-28749TMP = vld1q_u32(&K[24]);750TMP0A = vaddq_u32(MSG2A, 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.