|
|
|
/*
|
|
|
|
* DiabloMiner - OpenCL miner for BitCoin
|
|
|
|
* Copyright (C) 2010, 2011, 2012 Patrick McFarland <diablod3@gmail.com>
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more detail).
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef VECTORS4
|
|
|
|
typedef uint4 z;
|
|
|
|
#elif defined(VECTORS2)
|
|
|
|
typedef uint2 z;
|
|
|
|
#else
|
|
|
|
typedef uint z;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef BITALIGN
|
|
|
|
#pragma OPENCL EXTENSION cl_amd_media_ops : enable
|
|
|
|
#define Zrotr(a, b) amd_bitalign((z)a, (z)a, (z)(32 - b))
|
|
|
|
#else
|
|
|
|
#define Zrotr(a, b) rotate((z)a, (z)b)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef BFI_INT
|
|
|
|
#define ZCh(a, b, c) amd_bytealign(a, b, c)
|
|
|
|
#define ZMa(a, b, c) amd_bytealign((c ^ a), (b), (a))
|
|
|
|
#else
|
|
|
|
#define ZCh(a, b, c) bitselect((z)c, (z)b, (z)a)
|
|
|
|
#define ZMa(a, b, c) bitselect((z)a, (z)b, (z)c ^ (z)a)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define ZR25(n) ((Zrotr((n), 25) ^ Zrotr((n), 14) ^ ((n) >> 3U)))
|
|
|
|
#define ZR15(n) ((Zrotr((n), 15) ^ Zrotr((n), 13) ^ ((n) >> 10U)))
|
|
|
|
#define ZR26(n) ((Zrotr((n), 26) ^ Zrotr((n), 21) ^ Zrotr((n), 7)))
|
|
|
|
#define ZR30(n) ((Zrotr((n), 30) ^ Zrotr((n), 19) ^ Zrotr((n), 10)))
|
|
|
|
|
|
|
|
__kernel __attribute__((reqd_work_group_size(WORKSIZE, 1, 1))) void search(
|
|
|
|
const z base,
|
|
|
|
const uint PreVal4_state0, const uint PreVal4_state0_k7,
|
|
|
|
const uint PreVal4_T1,
|
|
|
|
const uint W18, const uint W19,
|
|
|
|
const uint W16, const uint W17,
|
|
|
|
const uint W16_plus_K16, const uint W17_plus_K17,
|
|
|
|
const uint W31, const uint W32,
|
|
|
|
const uint d1, const uint b1, const uint c1,
|
|
|
|
const uint h1, const uint f1, const uint g1,
|
|
|
|
const uint c1_plus_k5, const uint b1_plus_k6,
|
|
|
|
const uint state0, const uint state1, const uint state2, const uint state3,
|
|
|
|
const uint state4, const uint state5, const uint state6, const uint state7,
|
|
|
|
__global uint * output)
|
|
|
|
{
|
|
|
|
|
|
|
|
z ZA[930];
|
|
|
|
|
|
|
|
const z Znonce = base + (uint)(get_global_id(0));
|
|
|
|
|
|
|
|
ZA[15]=Znonce+PreVal4_state0;
|
|
|
|
ZA[16]=(ZCh(ZA[15],b1,c1)+d1)+ZR26(ZA[15]);
|
|
|
|
ZA[26]=Znonce+PreVal4_T1;
|
|
|
|
ZA[17]=ZA[16]+h1;
|
|
|
|
ZA[19]=(ZCh(ZA[17],ZA[15],b1)+c1_plus_k5)+ZR26(ZA[17]);
|
|
|
|
ZA[28]=ZMa(f1,g1,ZA[26])+ZR30(ZA[26])+ZA[16];
|
|
|
|
ZA[20]=ZA[19]+g1;
|
|
|
|
ZA[22]=(ZCh(ZA[20],ZA[17],ZA[15])+b1_plus_k6)+ZR26(ZA[20]);
|
|
|
|
ZA[29]=ZMa(ZA[26],f1,ZA[28])+ZR30(ZA[28])+ZA[19];
|
|
|
|
ZA[23]=ZA[22]+f1;
|
|
|
|
ZA[30]=ZMa(ZA[28],ZA[26],ZA[29])+ZR30(ZA[29])+ZA[22];
|
|
|
|
ZA[181]=Znonce+PreVal4_state0_k7+ZCh(ZA[23],ZA[20],ZA[17])+ZR26(ZA[23]);
|
|
|
|
ZA[182]=ZA[181]+ZA[26];
|
|
|
|
ZA[183]=ZA[181]+ZMa(ZA[29],ZA[28],ZA[30])+ZR30(ZA[30]);
|
|
|
|
ZA[186]=(ZCh(ZA[182],ZA[23],ZA[20])+ZA[17]+0xd807aa98U)+ZR26(ZA[182]);
|
|
|
|
ZA[187]=ZA[186]+ZA[28];
|
|
|
|
ZA[188]=ZA[186]+ZMa(ZA[30],ZA[29],ZA[183])+ZR30(ZA[183]);
|
|
|
|
ZA[191]=(ZCh(ZA[187],ZA[182],ZA[23])+ZA[20]+0x12835b01U)+ZR26(ZA[187]);
|
|
|
|
ZA[192]=ZA[191]+ZA[29];
|
|
|
|
ZA[193]=ZA[191]+ZMa(ZA[183],ZA[30],ZA[188])+ZR30(ZA[188]);
|
|
|
|
ZA[196]=(ZCh(ZA[192],ZA[187],ZA[182])+ZA[23]+0x243185beU)+ZR26(ZA[192]);
|
|
|
|
ZA[197]=ZA[196]+ZA[30];
|
|
|
|
ZA[198]=ZA[196]+ZMa(ZA[188],ZA[183],ZA[193])+ZR30(ZA[193]);
|
|
|
|
ZA[201]=(ZCh(ZA[197],ZA[192],ZA[187])+ZA[182]+0x550c7dc3U)+ZR26(ZA[197]);
|
|
|
|
ZA[202]=ZA[201]+ZA[183];
|
|
|
|
ZA[203]=ZA[201]+ZMa(ZA[193],ZA[188],ZA[198])+ZR30(ZA[198]);
|
|
|
|
ZA[206]=(ZCh(ZA[202],ZA[197],ZA[192])+ZA[187]+0x72be5d74U)+ZR26(ZA[202]);
|
|
|
|
ZA[207]=ZA[206]+ZA[188];
|
|
|
|
ZA[208]=ZA[206]+ZMa(ZA[198],ZA[193],ZA[203])+ZR30(ZA[203]);
|
|
|
|
ZA[211]=(ZCh(ZA[207],ZA[202],ZA[197])+ZA[192]+0x80deb1feU)+ZR26(ZA[207]);
|
|
|
|
ZA[212]=ZA[193]+ZA[211];
|
|
|
|
ZA[213]=ZA[211]+ZMa(ZA[203],ZA[198],ZA[208])+ZR30(ZA[208]);
|
|
|
|
ZA[216]=(ZCh(ZA[212],ZA[207],ZA[202])+ZA[197]+0x9bdc06a7U)+ZR26(ZA[212]);
|
|
|
|
ZA[217]=ZA[198]+ZA[216];
|
|
|
|
ZA[218]=ZA[216]+ZMa(ZA[208],ZA[203],ZA[213])+ZR30(ZA[213]);
|
|
|
|
ZA[220]=(ZCh(ZA[217],ZA[212],ZA[207])+ZA[202]+0xc19bf3f4U)+ZR26(ZA[217]);
|
|
|
|
ZA[222]=ZA[203]+ZA[220];
|
|
|
|
ZA[223]=ZA[220]+ZMa(ZA[213],ZA[208],ZA[218])+ZR30(ZA[218]);
|
|
|
|
ZA[226]=(ZCh(ZA[222],ZA[217],ZA[212])+ZA[207]+W16_plus_K16)+ZR26(ZA[222]);
|
|
|
|
ZA[0]=ZR25(Znonce)+W18;
|
|
|
|
ZA[228]=ZA[226]+ZMa(ZA[218],ZA[213],ZA[223])+ZR30(ZA[223]);
|
|
|
|
ZA[227]=ZA[208]+ZA[226];
|
|
|
|
ZA[231]=(ZCh(ZA[227],ZA[222],ZA[217])+ZA[212]+W17_plus_K17)+ZR26(ZA[227]);
|
|
|
|
ZA[232]=ZA[213]+ZA[231];
|
|
|
|
ZA[233]=ZA[231]+ZMa(ZA[223],ZA[218],ZA[228])+ZR30(ZA[228]);
|
|
|
|
ZA[32]=Znonce+W19;
|
|
|
|
ZA[236]=(ZCh(ZA[232],ZA[227],ZA[222])+ZA[217]+ZA[0]+0x0fc19dc6U)+ZR26(ZA[232]);
|
|
|
|
ZA[3]=ZR15(ZA[0])+0x80000000U;
|
|
|
|
ZA[238]=ZA[236]+ZMa(ZA[228],ZA[223],ZA[233])+ZR30(ZA[233]);
|
|
|
|
ZA[237]=ZA[218]+ZA[236];
|
|
|
|
ZA[241]=(ZCh(ZA[237],ZA[232],ZA[227])+ZA[222]+ZA[32]+0x240ca1ccU)+ZR26(ZA[237]);
|
|
|
|
ZA[35]=ZR15(ZA[32]);
|
|
|
|
ZA[243]=ZA[241]+ZMa(ZA[233],ZA[228],ZA[238])+ZR30(ZA[238]);
|
|
|
|
ZA[242]=ZA[223]+ZA[241];
|
|
|
|
ZA[246]=(ZCh(ZA[242],ZA[237],ZA[232])+ZA[227]+ZA[3]+0x2de92c6fU)+ZR26(ZA[242]);
|
|
|
|
ZA[7]=ZR15(ZA[3])+0x00000280U;
|
|
|
|
ZA[248]=ZA[246]+ZMa(ZA[238],ZA[233],ZA[243])+ZR30(ZA[243]);
|
|
|
|
ZA[247]=ZA[228]+ZA[246];
|
|
|
|
ZA[251]=(ZCh(ZA[247],ZA[242],ZA[237])+ZA[232]+ZA[35]+0x4a7484aaU)+ZR26(ZA[247]);
|
|
|
|
ZA[38]=ZR15(ZA[35])+W16;
|
|
|
|
ZA[253]=ZA[251]+ZMa(ZA[243],ZA[238],ZA[248])+ZR30(ZA[248]);
|
|
|
|
ZA[252]=ZA[233]+ZA[251];
|
|
|
|
ZA[256]=(ZCh(ZA[252],ZA[247],ZA[242])+ZA[237]+ZA[7]+0x5cb0a9dcU)+ZR26(ZA[252]);
|
|
|
|
ZA[10]=ZR15(ZA[7])+W17;
|
|
|
|
ZA[258]=ZA[256]+ZMa(ZA[248],ZA[243],ZA[253])+ZR30(ZA[253]);
|
|
|
|
ZA[257]=ZA[238]+ZA[256];
|
|
|
|
ZA[261]=(ZCh(ZA[257],ZA[252],ZA[247])+ZA[242]+ZA[38]+0x76f988daU)+ZR26(ZA[257]);
|
|
|
|
ZA[43]=ZR15(ZA[38])+ZA[0];
|
|
|
|
ZA[263]=ZA[261]+ZMa(ZA[253],ZA[248],ZA[258])+ZR30(ZA[258]);
|
|
|
|
ZA[262]=ZA[243]+ZA[261];
|
|
|
|
ZA[266]=(ZCh(ZA[262],ZA[257],ZA[252])+ZA[247]+ZA[10]+0x983e5152U)+ZR26(ZA[262]);
|
|
|
|
ZA[52]=ZR15(ZA[10])+ZA[32];
|
|
|
|
ZA[267]=ZA[248]+ZA[266];
|
|
|
|
ZA[268]=ZA[266]+ZMa(ZA[258],ZA[253],ZA[263])+ZR30(ZA[263]);
|
|
|
|
ZA[271]=(ZCh(ZA[267],ZA[262],ZA[257])+ZA[252]+ZA[43]+0xa831c66dU)+ZR26(ZA[267]);
|
|
|
|
ZA[48]=ZR15(ZA[43])+ZA[3];
|
|
|
|
ZA[273]=ZA[271]+ZMa(ZA[263],ZA[258],ZA[268])+ZR30(ZA[268]);
|
|
|
|
ZA[272]=ZA[253]+ZA[271];
|
|
|
|
ZA[276]=(ZCh(ZA[272],ZA[267],ZA[262])+ZA[257]+ZA[52]+0xb00327c8U)+ZR26(ZA[272]);
|
|
|
|
ZA[61]=ZR15(ZA[52])+ZA[35];
|
|
|
|
ZA[278]=ZA[276]+ZMa(ZA[268],ZA[263],ZA[273])+ZR30(ZA[273]);
|
|
|
|
ZA[277]=ZA[258]+ZA[276];
|
|
|
|
ZA[281]=(ZCh(ZA[277],ZA[272],ZA[267])+ZA[262]+ZA[48]+0xbf597fc7U)+ZR26(ZA[277]);
|
|
|
|
ZA[53]=ZR15(ZA[48])+ZA[7];
|
|
|
|
ZA[283]=ZA[281]+ZMa(ZA[273],ZA[268],ZA[278])+ZR30(ZA[278]);
|
|
|
|
ZA[282]=ZA[263]+ZA[281];
|
|
|
|
ZA[286]=(ZCh(ZA[282],ZA[277],ZA[272])+ZA[267]+ZA[61]+0xc6e00bf3U)+ZR26(ZA[282]);
|
|
|
|
ZA[66]=ZR15(ZA[61])+ZA[38]+0x00A00055U;
|
|
|
|
ZA[288]=ZA[286]+ZMa(ZA[278],ZA[273],ZA[283])+ZR30(ZA[283]);
|
|
|
|
ZA[287]=ZA[268]+ZA[286];
|
|
|
|
ZA[291]=(ZCh(ZA[287],ZA[282],ZA[277])+ZA[272]+ZA[53]+0xd5a79147U)+ZR26(ZA[287]);
|
|
|
|
ZA[67]=ZR15(ZA[53])+ZA[10]+W31;
|
|
|
|
ZA[293]=ZA[291]+ZMa(ZA[283],ZA[278],ZA[288])+ZR30(ZA[288]);
|
|
|
|
ZA[292]=ZA[273]+ZA[291];
|
|
|
|
ZA[296]=(ZCh(ZA[292],ZA[287],ZA[282])+ZA[277]+ZA[66]+0x06ca6351U)+ZR26(ZA[292]);
|
|
|
|
ZA[75]=ZR15(ZA[66])+ZA[43]+W32;
|
|
|
|
ZA[298]=ZA[296]+ZMa(ZA[288],ZA[283],ZA[293])+ZR30(ZA[293]);
|
|
|
|
ZA[297]=ZA[278]+ZA[296];
|
|
|
|
ZA[301]=(ZCh(ZA[297],ZA[292],ZA[287])+ZA[282]+ZA[67]+0x14292967U)+ZR26(ZA[297]);
|
|
|
|
ZA[70]=ZR15(ZA[67])+ZA[52]+ZR25(ZA[0])+W17;
|
|
|
|
ZA[302]=ZA[283]+ZA[301];
|
|
|
|
ZA[303]=ZA[301]+ZMa(ZA[293],ZA[288],ZA[298])+ZR30(ZA[298]);
|
|
|
|
ZA[306]=(ZCh(ZA[302],ZA[297],ZA[292])+ZA[287]+ZA[75]+0x27b70a85U)+ZR26(ZA[302]);
|
|
|
|
ZA[78]=ZR15(ZA[75])+ZR25(ZA[32])+ZA[0]+ZA[48];
|
|
|
|
ZA[308]=ZA[306]+ZMa(ZA[298],ZA[293],ZA[303])+ZR30(ZA[303]);
|
|
|
|
ZA[307]=ZA[288]+ZA[306];
|
|
|
|
ZA[311]=(ZCh(ZA[307],ZA[302],ZA[297])+ZA[292]+ZA[70]+0x2e1b2138U)+ZR26(ZA[307]);
|
|
|
|
ZA[79]=ZR15(ZA[70])+ZA[32]+ZR25(ZA[3])+ZA[61];
|
|
|
|
ZA[312]=ZA[293]+ZA[311];
|
|
|
|
ZA[313]=ZA[311]+ZMa(ZA[303],ZA[298],ZA[308])+ZR30(ZA[308]);
|
|
|
|
ZA[316]=(ZCh(ZA[312],ZA[307],ZA[302])+ZA[297]+ZA[78]+0x4d2c6dfcU)+ZR26(ZA[312]);
|
|
|
|
ZA[87]=ZR15(ZA[78])+ZR25(ZA[35])+ZA[3]+ZA[53];
|
|
|
|
ZA[318]=ZA[316]+ZMa(ZA[308],ZA[303],ZA[313])+ZR30(ZA[313]);
|
|
|
|
ZA[317]=ZA[298]+ZA[316];
|
|
|
|
ZA[321]=(ZCh(ZA[317],ZA[312],ZA[307])+ZA[302]+ZA[79]+0x53380d13U)+ZR26(ZA[317]);
|
|
|
|
ZA[88]=ZR15(ZA[79])+ZA[35]+ZR25(ZA[7])+ZA[66];
|
|
|
|
ZA[322]=ZA[303]+ZA[321];
|
|
|
|
ZA[323]=ZA[321]+ZMa(ZA[313],ZA[308],ZA[318])+ZR30(ZA[318]);
|
|
|
|
ZA[326]=(ZCh(ZA[322],ZA[317],ZA[312])+ZA[307]+ZA[87]+0x650a7354U)+ZR26(ZA[322]);
|
|
|
|
ZA[94]=ZR15(ZA[87])+ZR25(ZA[38])+ZA[7]+ZA[67];
|
|
|
|
ZA[328]=ZA[326]+ZMa(ZA[318],ZA[313],ZA[323])+ZR30(ZA[323]);
|
|
|
|
ZA[327]=ZA[308]+ZA[326];
|
|
|
|
ZA[331]=(ZCh(ZA[327],ZA[322],ZA[317])+ZA[312]+ZA[88]+0x766a0abbU)+ZR26(ZA[327]);
|
|
|
|
ZA[95]=ZR15(ZA[88])+ZA[38]+ZR25(ZA[10])+ZA[75];
|
|
|
|
ZA[332]=ZA[313]+ZA[331];
|
|
|
|
ZA[333]=ZA[331]+ZMa(ZA[323],ZA[318],ZA[328])+ZR30(ZA[328]);
|
|
|
|
ZA[336]=(ZCh(ZA[332],ZA[327],ZA[322])+ZA[317]+ZA[94]+0x81c2c92eU)+ZR26(ZA[332]);
|
|
|
|
ZA[102]=ZR15(ZA[94])+ZR25(ZA[43])+ZA[10]+ZA[70];
|
|
|
|
ZA[337]=ZA[318]+ZA[336];
|
|
|
|
ZA[338]=ZA[336]+ZMa(ZA[328],ZA[323],ZA[333])+ZR30(ZA[333]);
|
|
|
|
ZA[341]=(ZCh(ZA[337],ZA[332],ZA[327])+ZA[322]+ZA[95]+0x92722c85U)+ZR26(ZA[337]);
|
|
|
|
ZA[103]=ZR15(ZA[95])+ZR25(ZA[52])+ZA[43]+ZA[78];
|
|
|
|
ZA[342]=ZA[323]+ZA[341];
|
|
|
|
ZA[343]=ZA[341]+ZMa(ZA[333],ZA[328],ZA[338])+ZR30(ZA[338]);
|
|
|
|
ZA[346]=(ZCh(ZA[342],ZA[337],ZA[332])+ZA[327]+ZA[102]+0xa2bfe8a1U)+ZR26(ZA[342]);
|
|
|
|
ZA[110]=ZR15(ZA[102])+ZR25(ZA[48])+ZA[52]+ZA[79];
|
|
|
|
ZA[347]=ZA[328]+ZA[346];
|
|
|
|
ZA[348]=ZA[346]+ZMa(ZA[338],ZA[333],ZA[343])+ZR30(ZA[343]);
|
|
|
|
ZA[351]=(ZCh(ZA[347],ZA[342],ZA[337])+ZA[332]+ZA[103]+0xa81a664bU)+ZR26(ZA[347]);
|
|
|
|
ZA[111]=ZR15(ZA[103])+ZA[87]+ZR25(ZA[61])+ZA[48];
|
|
|
|
ZA[353]=ZA[351]+ZMa(ZA[343],ZA[338],ZA[348])+ZR30(ZA[348]);
|
|
|
|
ZA[352]=ZA[333]+ZA[351];
|
|
|
|
ZA[356]=(ZCh(ZA[352],ZA[347],ZA[342])+ZA[337]+ZA[110]+0xc24b8b70U)+ZR26(ZA[352]);
|
|
|
|
ZA[118]=ZR15(ZA[110])+ZA[88]+ZR25(ZA[53])+ZA[61];
|
|
|
|
ZA[357]=ZA[338]+ZA[356];
|
|
|
|
ZA[358]=ZA[356]+ZMa(ZA[348],ZA[343],ZA[353])+ZR30(ZA[353]);
|
|
|
|
ZA[361]=(ZCh(ZA[357],ZA[352],ZA[347])+ZA[342]+ZA[111]+0xc76c51a3U)+ZR26(ZA[357]);
|
|
|
|
ZA[119]=ZR15(ZA[111])+ZR25(ZA[66])+ZA[53]+ZA[94];
|
|
|
|
ZA[362]=ZA[343]+ZA[361];
|
|
|
|
ZA[363]=ZA[361]+ZMa(ZA[353],ZA[348],ZA[358])+ZR30(ZA[358]);
|
|
|
|
ZA[366]=(ZCh(ZA[362],ZA[357],ZA[352])+ZA[347]+ZA[118]+0xd192e819U)+ZR26(ZA[362]);
|
|
|
|
ZA[126]=ZR15(ZA[118])+ZR25(ZA[67])+ZA[66]+ZA[95];
|
|
|
|
ZA[367]=ZA[348]+ZA[366];
|
|
|
|
ZA[368]=ZA[366]+ZMa(ZA[358],ZA[353],ZA[363])+ZR30(ZA[363]);
|
|
|
|
ZA[371]=(ZCh(ZA[367],ZA[362],ZA[357])+ZA[352]+ZA[119]+0xd6990624U)+ZR26(ZA[367]);
|
|
|
|
ZA[127]=ZR15(ZA[119])+ZA[102]+ZR25(ZA[75])+ZA[67];
|
|
|
|
ZA[372]=ZA[353]+ZA[371];
|
|
|
|
ZA[373]=ZA[371]+ZMa(ZA[363],ZA[358],ZA[368])+ZR30(ZA[368]);
|
|
|
|
ZA[376]=(ZCh(ZA[372],ZA[367],ZA[362])+ZA[357]+ZA[126]+0xf40e3585U)+ZR26(ZA[372]);
|
|
|
|
ZA[134]=ZR15(ZA[126])+ZA[103]+ZR25(ZA[70])+ZA[75];
|
|
|
|
ZA[377]=ZA[358]+ZA[376];
|
|
|
|
ZA[378]=ZA[376]+ZMa(ZA[368],ZA[363],ZA[373])+ZR30(ZA[373]);
|
|
|
|
ZA[381]=(ZCh(ZA[377],ZA[372],ZA[367])+ZA[362]+ZA[127]+0x106aa070U)+ZR26(ZA[377]);
|
|
|
|
ZA[135]=ZR15(ZA[127])+ZA[110]+ZR25(ZA[78])+ZA[70];
|
|
|
|
ZA[382]=ZA[363]+ZA[381];
|
|
|
|
ZA[383]=ZA[381]+ZMa(ZA[373],ZA[368],ZA[378])+ZR30(ZA[378]);
|
|
|
|
ZA[386]=(ZCh(ZA[382],ZA[377],ZA[372])+ZA[367]+ZA[134]+0x19a4c116U)+ZR26(ZA[382]);
|
|
|
|
ZA[142]=ZR15(ZA[134])+ZA[111]+ZR25(ZA[79])+ZA[78];
|
|
|
|
ZA[387]=ZA[368]+ZA[386];
|
|
|
|
ZA[388]=ZA[386]+ZMa(ZA[378],ZA[373],ZA[383])+ZR30(ZA[383]);
|
|
|
|
ZA[391]=(ZCh(ZA[387],ZA[382],ZA[377])+ZA[372]+ZA[135]+0x1e376c08U)+ZR26(ZA[387]);
|
|
|
|
ZA[143]=ZR15(ZA[135])+ZA[118]+ZR25(ZA[87])+ZA[79];
|
|
|
|
ZA[392]=ZA[373]+ZA[391];
|
|
|
|
ZA[393]=ZA[391]+ZMa(ZA[383],ZA[378],ZA[388])+ZR30(ZA[388]);
|
|
|
|
ZA[396]=(ZCh(ZA[392],ZA[387],ZA[382])+ZA[377]+ZA[142]+0x2748774cU)+ZR26(ZA[392]);
|
|
|
|
ZA[149]=ZR15(ZA[142])+ZA[119]+ZR25(ZA[88])+ZA[87];
|
|
|
|
ZA[397]=ZA[378]+ZA[396];
|
|
|
|
ZA[398]=ZA[396]+ZMa(ZA[388],ZA[383],ZA[393])+ZR30(ZA[393]);
|
|
|
|
ZA[401]=(ZCh(ZA[397],ZA[392],ZA[387])+ZA[382]+ZA[143]+0x34b0bcb5U)+ZR26(ZA[397]);
|
|
|
|
ZA[150]=ZR15(ZA[143])+ZA[126]+ZR25(ZA[94])+ZA[88];
|
|
|
|
ZA[402]=ZA[383]+ZA[401];
|
|
|
|
ZA[403]=ZA[401]+ZMa(ZA[393],ZA[388],ZA[398])+ZR30(ZA[398]);
|
|
|
|
ZA[406]=(ZCh(ZA[402],ZA[397],ZA[392])+ZA[387]+ZA[149]+0x391c0cb3U)+ZR26(ZA[402]);
|
|
|
|
ZA[155]=ZR15(ZA[149])+ZA[127]+ZR25(ZA[95])+ZA[94];
|
|
|
|
ZA[407]=ZA[388]+ZA[406];
|
|
|
|
ZA[408]=ZA[406]+ZMa(ZA[398],ZA[393],ZA[403])+ZR30(ZA[403]);
|
|
|
|
ZA[411]=(ZCh(ZA[407],ZA[402],ZA[397])+ZA[392]+ZA[150]+0x4ed8aa4aU)+ZR26(ZA[407]);
|
|
|
|
ZA[156]=ZR15(ZA[150])+ZA[134]+ZR25(ZA[102])+ZA[95];
|
|
|
|
ZA[412]=ZA[393]+ZA[411];
|
|
|
|
ZA[413]=ZA[411]+ZMa(ZA[403],ZA[398],ZA[408])+ZR30(ZA[408]);
|
|
|
|
ZA[416]=(ZCh(ZA[412],ZA[407],ZA[402])+ZA[397]+ZA[155]+0x5b9cca4fU)+ZR26(ZA[412]);
|
|
|
|
ZA[161]=ZR15(ZA[155])+ZA[135]+ZR25(ZA[103])+ZA[102];
|
|
|
|
ZA[417]=ZA[398]+ZA[416];
|
|
|
|
ZA[418]=ZA[416]+ZMa(ZA[408],ZA[403],ZA[413])+ZR30(ZA[413]);
|
|
|
|
ZA[421]=(ZCh(ZA[417],ZA[412],ZA[407])+ZA[402]+ZA[156]+0x682e6ff3U)+ZR26(ZA[417]);
|
|
|
|
ZA[162]=ZR15(ZA[156])+ZA[142]+ZR25(ZA[110])+ZA[103];
|
|
|
|
ZA[422]=ZA[403]+ZA[421];
|
|
|
|
ZA[423]=ZA[421]+ZMa(ZA[413],ZA[408],ZA[418])+ZR30(ZA[418]);
|
|
|
|
ZA[426]=(ZCh(ZA[422],ZA[417],ZA[412])+ZA[407]+ZA[161]+0x748f82eeU)+ZR26(ZA[422]);
|
|
|
|
ZA[167]=ZR15(ZA[161])+ZA[143]+ZR25(ZA[111])+ZA[110];
|
|
|
|
ZA[427]=ZA[408]+ZA[426];
|
|
|
|
ZA[428]=ZA[426]+ZMa(ZA[418],ZA[413],ZA[423])+ZR30(ZA[423]);
|
|
|
|
ZA[431]=(ZCh(ZA[427],ZA[422],ZA[417])+ZA[412]+ZA[162]+0x78a5636fU)+ZR26(ZA[427]);
|
|
|
|
ZA[168]=ZR15(ZA[162])+ZA[149]+ZR25(ZA[118])+ZA[111];
|
|
|
|
ZA[432]=ZA[413]+ZA[431];
|
|
|
|
ZA[433]=ZA[431]+ZMa(ZA[423],ZA[418],ZA[428])+ZR30(ZA[428]);
|
|
|
|
ZA[436]=(ZCh(ZA[432],ZA[427],ZA[422])+ZA[417]+ZA[167]+0x84c87814U)+ZR26(ZA[432]);
|
|
|
|
ZA[172]=ZR15(ZA[167])+ZA[150]+ZR25(ZA[119])+ZA[118];
|
|
|
|
ZA[437]=ZA[418]+ZA[436];
|
|
|
|
ZA[438]=ZA[436]+ZMa(ZA[428],ZA[423],ZA[433])+ZR30(ZA[433]);
|
|
|
|
ZA[441]=(ZCh(ZA[437],ZA[432],ZA[427])+ZA[422]+ZA[168]+0x8cc70208U)+ZR26(ZA[437]);
|
|
|
|
ZA[173]=ZR15(ZA[168])+ZA[155]+ZR25(ZA[126])+ZA[119];
|
|
|
|
ZA[442]=ZA[423]+ZA[441];
|
|
|
|
ZA[443]=ZA[441]+ZMa(ZA[433],ZA[428],ZA[438])+ZR30(ZA[438]);
|
|
|
|
ZA[445]=(ZCh(ZA[442],ZA[437],ZA[432])+ZA[427]+ZA[172]+0x90befffaU)+ZR26(ZA[442]);
|
|
|
|
ZA[446]=ZA[428]+ZA[445];
|
|
|
|
ZA[447]=ZA[445]+ZMa(ZA[438],ZA[433],ZA[443])+ZR30(ZA[443]);
|
|
|
|
ZA[449]=(ZCh(ZA[446],ZA[442],ZA[437])+ZA[432]+ZA[173]+0xa4506cebU)+ZR26(ZA[446]);
|
|
|
|
ZA[451]=ZA[449]+ZMa(ZA[443],ZA[438],ZA[447])+ZR30(ZA[447]);
|
|
|
|
ZA[450]=ZA[433]+ZA[449];
|
|
|
|
ZA[453]=(ZCh(ZA[450],ZA[446],ZA[442])+ZA[437]+ZR15(ZA[172])+ZA[156]+ZR25(ZA[127])+ZA[126]+0xbef9a3f7U)+ZR26(ZA[450]);
|
|
|
|
ZA[454]=ZA[438]+ZA[453];
|
|
|
|
ZA[455]=ZA[453]+ZMa(ZA[447],ZA[443],ZA[451])+ZR30(ZA[451]);
|
|
|
|
ZA[457]=(ZCh(ZA[454],ZA[450],ZA[446])+ZA[442]+ZR15(ZA[173])+ZA[161]+ZR25(ZA[134])+ZA[127]+0xc67178f2U)+ZR26(ZA[454]);
|
|
|
|
ZA[461]=ZA[455]+state1;
|
|
|
|
ZA[460]=ZA[457]+ZMa(ZA[451],ZA[447],ZA[455])+ZR30(ZA[455])+state0;
|
|
|
|
ZA[495]=ZA[460]+0x98c7e2a2U;
|
|
|
|
ZA[498]=(ZCh(ZA[495],0x510e527fU,0x9b05688cU)+ZA[461]+0x90bb1e3cU)+ZR26(ZA[495]);
|
|
|
|
ZA[462]=ZA[451]+state2;
|
|
|
|
ZA[496]=ZA[460]+0xfc08884dU;
|
|
|
|
ZA[506]=ZA[498]+0x3c6ef372U;
|
|
|
|
ZA[507]=(ZCh(ZA[506],ZA[495],0x510e527fU)+ZA[462]+0x50c6645bU)+ZR26(ZA[506]);
|
|
|
|
ZA[463]=ZA[447]+state3;
|
|
|
|
ZA[499]=ZA[498]+ZMa(0x6a09e667U,0xbb67ae85U,ZA[496])+ZR30(ZA[496]);
|
|
|
|
ZA[508]=ZA[507]+0xbb67ae85U;
|
|
|
|
ZA[510]=(ZCh(ZA[508],ZA[506],ZA[495])+ZA[463]+0x3ac42e24U)+ZR26(ZA[508]);
|
|
|
|
ZA[464]=ZA[443]+ZA[457]+state4;
|
|
|
|
ZA[511]=ZA[510]+0x6a09e667U;
|
|
|
|
ZA[509]=ZMa(ZA[496],0x6a09e667U,ZA[499])+ZR30(ZA[499])+ZA[507];
|
|
|
|
ZA[465]=ZA[454]+state5;
|
|
|
|
ZA[514]=(ZCh(ZA[511],ZA[508],ZA[506])+ZA[464]+ZA[460]+0xd21ea4fdU)+ZR26(ZA[511]);
|
|
|
|
ZA[516]=ZA[496]+ZA[514];
|
|
|
|
ZA[513]=ZA[510]+ZMa(ZA[499],ZA[496],ZA[509])+ZR30(ZA[509]);
|
|
|
|
ZA[466]=ZA[450]+state6;
|
|
|
|
ZA[520]=(ZCh(ZA[516],ZA[511],ZA[508])+ZA[506]+ZA[465]+0x59f111f1U)+ZR26(ZA[516]);
|
|
|
|
ZA[521]=ZA[499]+ZA[520];
|
|
|
|
ZA[517]=ZA[514]+ZMa(ZA[509],ZA[499],ZA[513])+ZR30(ZA[513]);
|
|
|
|
ZA[467]=ZA[446]+state7;
|
|
|
|
ZA[525]=(ZCh(ZA[521],ZA[516],ZA[511])+ZA[508]+ZA[466]+0x923f82a4U)+ZR26(ZA[521]);
|
|
|
|
ZA[526]=ZA[509]+ZA[525];
|
|
|
|
ZA[523]=ZA[520]+ZMa(ZA[513],ZA[509],ZA[517])+ZR30(ZA[517]);
|
|
|
|
ZA[530]=(ZCh(ZA[526],ZA[521],ZA[516])+ZA[511]+ZA[467]+0xab1c5ed5U)+ZR26(ZA[526]);
|
|
|
|
ZA[531]=ZA[513]+ZA[530];
|
|
|
|
ZA[527]=ZMa(ZA[517],ZA[513],ZA[523])+ZR30(ZA[523])+ZA[525];
|
|
|
|
ZA[534]=(ZCh(ZA[531],ZA[526],ZA[521])+ZA[516]+0x5807aa98U)+ZR26(ZA[531]);
|
|
|
|
ZA[535]=ZA[517]+ZA[534];
|
|
|
|
ZA[532]=ZMa(ZA[523],ZA[517],ZA[527])+ZR30(ZA[527])+ZA[530];
|
|
|
|
ZA[539]=(ZCh(ZA[535],ZA[531],ZA[526])+ZA[521]+0x12835b01U)+ZR26(ZA[535]);
|
|
|
|
ZA[540]=ZA[523]+ZA[539];
|
|
|
|
ZA[536]=ZMa(ZA[527],ZA[523],ZA[532])+ZR30(ZA[532])+ZA[534];
|
|
|
|
ZA[543]=(ZCh(ZA[540],ZA[535],ZA[531])+ZA[526]+0x243185beU)+ZR26(ZA[540]);
|
|
|
|
ZA[544]=ZA[527]+ZA[543];
|
|
|
|
ZA[541]=ZMa(ZA[532],ZA[527],ZA[536])+ZR30(ZA[536])+ZA[539];
|
|
|
|
ZA[558]=(ZCh(ZA[544],ZA[540],ZA[535])+ZA[531]+0x550c7dc3U)+ZR26(ZA[544]);
|
|
|
|
ZA[559]=ZA[532]+ZA[558];
|
|
|
|
ZA[545]=ZMa(ZA[536],ZA[532],ZA[541])+ZR30(ZA[541])+ZA[543];
|
|
|
|
ZA[562]=(ZCh(ZA[559],ZA[544],ZA[540])+ZA[535]+0x72be5d74U)+ZR26(ZA[559]);
|
|
|
|
ZA[563]=ZA[536]+ZA[562];
|
|
|
|
ZA[560]=ZMa(ZA[541],ZA[536],ZA[545])+ZR30(ZA[545])+ZA[558];
|
|
|
|
ZA[568]=(ZCh(ZA[563],ZA[559],ZA[544])+ZA[540]+0x80deb1feU)+ZR26(ZA[563]);
|
|
|
|
ZA[569]=ZA[541]+ZA[568];
|
|
|
|
ZA[565]=ZA[562]+ZMa(ZA[545],ZA[541],ZA[560])+ZR30(ZA[560]);
|
|
|
|
ZA[574]=(ZCh(ZA[569],ZA[563],ZA[559])+ZA[544]+0x9bdc06a7U)+ZR26(ZA[569]);
|
|
|
|
ZA[497]=ZR25(ZA[461])+ZA[460];
|
|
|
|
ZA[575]=ZA[545]+ZA[574];
|
|
|
|
ZA[571]=ZA[568]+ZMa(ZA[560],ZA[545],ZA[565])+ZR30(ZA[565]);
|
|
|
|
ZA[578]=(ZCh(ZA[575],ZA[569],ZA[563])+ZA[559]+0xc19bf274U)+ZR26(ZA[575]);
|
|
|
|
ZA[471]=ZR25(ZA[462])+ZA[461]+0x00a00000U;
|
|
|
|
ZA[579]=ZA[560]+ZA[578];
|
|
|
|
ZA[577]=ZA[574]+ZMa(ZA[565],ZA[560],ZA[571])+ZR30(ZA[571]);
|
|
|
|
ZA[583]=(ZCh(ZA[579],ZA[575],ZA[569])+ZA[563]+ZA[497]+0xe49b69c1U)+ZR26(ZA[579]);
|
|
|
|
ZA[584]=ZA[565]+ZA[583];
|
|
|
|
ZA[581]=ZA[578]+ZMa(ZA[571],ZA[565],ZA[577])+ZR30(ZA[577]);
|
|
|
|
ZA[588]=(ZCh(ZA[584],ZA[579],ZA[575])+ZA[569]+ZA[471]+0xefbe4786U)+ZR26(ZA[584]);
|
|
|
|
ZA[501]=ZR15(ZA[497])+ZR25(ZA[463])+ZA[462];
|
|
|
|
ZA[474]=ZR15(ZA[471])+ZA[463]+ZR25(ZA[464]);
|
|
|
|
ZA[589]=ZA[571]+ZA[588];
|
|
|
|
ZA[585]=ZA[583]+ZMa(ZA[577],ZA[571],ZA[581])+ZR30(ZA[581]);
|
|
|
|
ZA[592]=(ZCh(ZA[589],ZA[584],ZA[579])+ZA[575]+0x0fc19dc6U+ZA[501])+ZR26(ZA[589]);
|
|
|
|
ZA[518]=ZR15(ZA[501])+ZR25(ZA[465])+ZA[464];
|
|
|
|
ZA[593]=ZA[577]+ZA[592];
|
|
|
|
ZA[591]=ZA[588]+ZMa(ZA[581],ZA[577],ZA[585])+ZR30(ZA[585]);
|
|
|
|
ZA[597]=(ZCh(ZA[593],ZA[589],ZA[584])+ZA[579]+ZA[474]+0x240ca1ccU)+ZR26(ZA[593]);
|
|
|
|
ZA[482]=ZR15(ZA[474])+ZR25(ZA[466])+ZA[465];
|
|
|
|
ZA[598]=ZA[581]+ZA[597];
|
|
|
|
ZA[595]=ZA[592]+ZMa(ZA[585],ZA[581],ZA[591])+ZR30(ZA[591]);
|
|
|
|
ZA[632]=(ZCh(ZA[598],ZA[593],ZA[589])+ZA[584]+ZA[518]+0x2de92c6fU)+ZR26(ZA[598]);
|
|
|
|
ZA[528]=ZR15(ZA[518])+ZA[466]+0x00000100U+ZR25(ZA[467]);
|
|
|
|
ZA[736]=ZA[585]+ZA[632];
|
|
|
|
ZA[600]=ZA[597]+ZMa(ZA[591],ZA[585],ZA[595])+ZR30(ZA[595]);
|
|
|
|
ZA[738]=(ZCh(ZA[736],ZA[598],ZA[593])+ZA[589]+ZA[482]+0x4a7484aaU)+ZR26(ZA[736]);
|
|
|
|
ZA[502]=ZA[497]+ZR15(ZA[482])+ZA[467]+0x11002000U;
|
|
|
|
ZA[739]=ZA[591]+ZA[738];
|
|
|
|
ZA[737]=ZMa(ZA[595],ZA[591],ZA[600])+ZR30(ZA[600])+ZA[632];
|
|
|
|
ZA[741]=(ZCh(ZA[739],ZA[736],ZA[598])+ZA[593]+ZA[528]+0x5cb0a9dcU)+ZR26(ZA[739]);
|
|
|
|
ZA[537]=ZR15(ZA[528])+ZA[471]+0x80000000U;
|
|
|
|
ZA[742]=ZA[595]+ZA[741];
|
|
|
|
ZA[740]=ZMa(ZA[600],ZA[595],ZA[737])+ZR30(ZA[737])+ZA[738];
|
|
|
|
ZA[747]=(ZCh(ZA[742],ZA[739],ZA[736])+ZA[598]+ZA[502]+0x76f988daU)+ZR26(ZA[742]);
|
|
|
|
ZA[546]=ZR15(ZA[502])+ZA[501];
|
|
|
|
ZA[748]=ZA[600]+ZA[747];
|
|
|
|
ZA[743]=ZMa(ZA[737],ZA[600],ZA[740])+ZR30(ZA[740])+ZA[741];
|
|
|
|
ZA[752]=(ZCh(ZA[748],ZA[742],ZA[739])+ZA[736]+ZA[537]+0x983e5152U)+ZR26(ZA[748]);
|
|
|
|
ZA[554]=ZR15(ZA[537])+ZA[474];
|
|
|
|
ZA[753]=ZA[737]+ZA[752];
|
|
|
|
ZA[750]=ZA[747]+ZMa(ZA[740],ZA[737],ZA[743])+ZR30(ZA[743]);
|
|
|
|
ZA[757]=(ZCh(ZA[753],ZA[748],ZA[742])+ZA[739]+ZA[546]+0xa831c66dU)+ZR26(ZA[753]);
|
|
|
|
ZA[566]=ZR15(ZA[546])+ZA[518];
|
|
|
|
ZA[758]=ZA[740]+ZA[757];
|
|
|
|
ZA[755]=ZA[752]+ZMa(ZA[743],ZA[740],ZA[750])+ZR30(ZA[750]);
|
|
|
|
ZA[762]=(ZCh(ZA[758],ZA[753],ZA[748])+ZA[742]+ZA[554]+0xb00327c8U)+ZR26(ZA[758]);
|
|
|
|
ZA[567]=ZR15(ZA[554])+ZA[482];
|
|
|
|
ZA[763]=ZA[743]+ZA[762];
|
|
|
|
ZA[760]=ZA[757]+ZMa(ZA[750],ZA[743],ZA[755])+ZR30(ZA[755]);
|
|
|
|
ZA[767]=(ZCh(ZA[763],ZA[758],ZA[753])+ZA[748]+ZA[566]+0xbf597fc7U)+ZR26(ZA[763]);
|
|
|
|
ZA[614]=ZR15(ZA[566])+ZA[528];
|
|
|
|
ZA[768]=ZA[750]+ZA[767];
|
|
|
|
ZA[765]=ZA[762]+ZMa(ZA[755],ZA[750],ZA[760])+ZR30(ZA[760]);
|
|
|
|
ZA[772]=(ZCh(ZA[768],ZA[763],ZA[758])+ZA[753]+ZA[567]+0xc6e00bf3U)+ZR26(ZA[768]);
|
|
|
|
ZA[616]=ZR15(ZA[567])+ZA[502]+0x00400022U;
|
|
|
|
ZA[773]=ZA[755]+ZA[772];
|
|
|
|
ZA[770]=ZA[767]+ZMa(ZA[760],ZA[755],ZA[765])+ZR30(ZA[765]);
|
|
|
|
ZA[777]=(ZCh(ZA[773],ZA[768],ZA[763])+ZA[758]+ZA[614]+0xd5a79147U)+ZR26(ZA[773]);
|
|
|
|
ZA[619]=ZR15(ZA[614])+ZA[537]+ZR25(ZA[497])+0x00000100U;
|
|
|
|
ZA[778]=ZA[760]+ZA[777];
|
|
|
|
ZA[775]=ZA[772]+ZMa(ZA[765],ZA[760],ZA[770])+ZR30(ZA[770]);
|
|
|
|
ZA[782]=(ZCh(ZA[778],ZA[773],ZA[768])+ZA[763]+ZA[616]+0x06ca6351U)+ZR26(ZA[778]);
|
|
|
|
ZA[622]=ZR15(ZA[616])+ZR25(ZA[471])+ZA[497]+ZA[546];
|
|
|
|
ZA[783]=ZA[765]+ZA[782];
|
|
|
|
ZA[780]=ZA[777]+ZMa(ZA[770],ZA[765],ZA[775])+ZR30(ZA[775]);
|
|
|
|
ZA[787]=(ZCh(ZA[783],ZA[778],ZA[773])+ZA[768]+ZA[619]+0x14292967U)+ZR26(ZA[783]);
|
|
|
|
ZA[627]=ZR15(ZA[619])+ZR25(ZA[501])+ZA[554]+ZA[471];
|
|
|
|
ZA[788]=ZA[770]+ZA[787];
|
|
|
|
ZA[785]=ZA[782]+ZMa(ZA[775],ZA[770],ZA[780])+ZR30(ZA[780]);
|
|
|
|
ZA[792]=(ZCh(ZA[788],ZA[783],ZA[778])+ZA[773]+ZA[622]+0x27b70a85U)+ZR26(ZA[788]);
|
|
|
|
ZA[631]=ZR15(ZA[622])+ZA[566]+ZR25(ZA[474])+ZA[501];
|
|
|
|
ZA[793]=ZA[775]+ZA[792];
|
|
|
|
ZA[790]=ZA[787]+ZMa(ZA[780],ZA[775],ZA[785])+ZR30(ZA[785]);
|
|
|
|
ZA[797]=(ZCh(ZA[793],ZA[788],ZA[783])+ZA[778]+ZA[627]+0x2e1b2138U)+ZR26(ZA[793]);
|
|
|
|
ZA[636]=ZR15(ZA[627])+ZA[567]+ZR25(ZA[518])+ZA[474];
|
|
|
|
ZA[798]=ZA[780]+ZA[797];
|
|
|
|
ZA[795]=ZA[792]+ZMa(ZA[785],ZA[780],ZA[790])+ZR30(ZA[790]);
|
|
|
|
ZA[802]=(ZCh(ZA[798],ZA[793],ZA[788])+ZA[783]+ZA[631]+0x4d2c6dfcU)+ZR26(ZA[798]);
|
|
|
|
ZA[640]=ZR15(ZA[631])+ZR25(ZA[482])+ZA[518]+ZA[614];
|
|
|
|
ZA[803]=ZA[785]+ZA[802];
|
|
|
|
ZA[800]=ZA[797]+ZMa(ZA[790],ZA[785],ZA[795])+ZR30(ZA[795]);
|
|
|
|
ZA[807]=(ZCh(ZA[803],ZA[798],ZA[793])+ZA[788]+ZA[636]+0x53380d13U)+ZR26(ZA[803]);
|
|
|
|
ZA[644]=ZR15(ZA[636])+ZA[616]+ZR25(ZA[528])+ZA[482];
|
|
|
|
ZA[808]=ZA[790]+ZA[807];
|
|
|
|
ZA[805]=ZA[802]+ZMa(ZA[795],ZA[790],ZA[800])+ZR30(ZA[800]);
|
|
|
|
ZA[812]=(ZCh(ZA[808],ZA[803],ZA[798])+ZA[793]+ZA[640]+0x650a7354U)+ZR26(ZA[808]);
|
|
|
|
ZA[648]=ZR15(ZA[640])+ZA[619]+ZR25(ZA[502])+ZA[528];
|
|
|
|
ZA[813]=ZA[795]+ZA[812];
|
|
|
|
ZA[810]=ZA[807]+ZMa(ZA[800],ZA[795],ZA[805])+ZR30(ZA[805]);
|
|
|
|
ZA[817]=(ZCh(ZA[813],ZA[808],ZA[803])+ZA[798]+ZA[644]+0x766a0abbU)+ZR26(ZA[813]);
|
|
|
|
ZA[651]=ZR15(ZA[644])+ZA[622]+ZR25(ZA[537])+ZA[502];
|
|
|
|
ZA[818]=ZA[800]+ZA[817];
|
|
|
|
ZA[815]=ZA[812]+ZMa(ZA[805],ZA[800],ZA[810])+ZR30(ZA[810]);
|
|
|
|
ZA[822]=(ZCh(ZA[818],ZA[813],ZA[808])+ZA[803]+ZA[648]+0x81c2c92eU)+ZR26(ZA[818]);
|
|
|
|
ZA[655]=ZR15(ZA[648])+ZA[627]+ZR25(ZA[546])+ZA[537];
|
|
|
|
ZA[823]=ZA[805]+ZA[822];
|
|
|
|
ZA[820]=ZA[817]+ZMa(ZA[810],ZA[805],ZA[815])+ZR30(ZA[815]);
|
|
|
|
ZA[827]=(ZCh(ZA[823],ZA[818],ZA[813])+ZA[808]+ZA[651]+0x92722c85U)+ZR26(ZA[823]);
|
|
|
|
ZA[659]=ZR15(ZA[651])+ZA[631]+ZR25(ZA[554])+ZA[546];
|
|
|
|
ZA[828]=ZA[810]+ZA[827];
|
|
|
|
ZA[825]=ZA[822]+ZMa(ZA[815],ZA[810],ZA[820])+ZR30(ZA[820]);
|
|
|
|
ZA[832]=(ZCh(ZA[828],ZA[823],ZA[818])+ZA[813]+ZA[655]+0xa2bfe8a1U)+ZR26(ZA[828]);
|
|
|
|
ZA[663]=ZR15(ZA[655])+ZA[636]+ZR25(ZA[566])+ZA[554];
|
|
|
|
ZA[833]=ZA[815]+ZA[832];
|
|
|
|
ZA[830]=ZA[827]+ZMa(ZA[820],ZA[815],ZA[825])+ZR30(ZA[825]);
|
|
|
|
ZA[837]=(ZCh(ZA[833],ZA[828],ZA[823])+ZA[818]+ZA[659]+0xa81a664bU)+ZR26(ZA[833]);
|
|
|
|
ZA[667]=ZR15(ZA[659])+ZA[640]+ZR25(ZA[567])+ZA[566];
|
|
|
|
ZA[838]=ZA[820]+ZA[837];
|
|
|
|
ZA[835]=ZA[832]+ZMa(ZA[825],ZA[820],ZA[830])+ZR30(ZA[830]);
|
|
|
|
ZA[842]=(ZCh(ZA[838],ZA[833],ZA[828])+ZA[823]+ZA[663]+0xc24b8b70U)+ZR26(ZA[838]);
|
|
|
|
ZA[671]=ZR15(ZA[663])+ZA[644]+ZR25(ZA[614])+ZA[567];
|
|
|
|
ZA[843]=ZA[825]+ZA[842];
|
|
|
|
ZA[840]=ZA[837]+ZMa(ZA[830],ZA[825],ZA[835])+ZR30(ZA[835]);
|
|
|
|
ZA[847]=(ZCh(ZA[843],ZA[838],ZA[833])+ZA[828]+ZA[667]+0xc76c51a3U)+ZR26(ZA[843]);
|
|
|
|
ZA[679]=ZR15(ZA[667])+ZA[648]+ZR25(ZA[616])+ZA[614];
|
|
|
|
ZA[848]=ZA[830]+ZA[847];
|
|
|
|
ZA[845]=ZA[842]+ZMa(ZA[835],ZA[830],ZA[840])+ZR30(ZA[840]);
|
|
|
|
ZA[852]=(ZCh(ZA[848],ZA[843],ZA[838])+ZA[833]+ZA[671]+0xd192e819U)+ZR26(ZA[848]);
|
|
|
|
ZA[684]=ZR15(ZA[671])+ZA[651]+ZR25(ZA[619])+ZA[616];
|
|
|
|
ZA[853]=ZA[835]+ZA[852];
|
|
|
|
ZA[850]=ZA[847]+ZMa(ZA[840],ZA[835],ZA[845])+ZR30(ZA[845]);
|
|
|
|
ZA[857]=(ZCh(ZA[853],ZA[848],ZA[843])+ZA[838]+ZA[679]+0xd6990624U)+ZR26(ZA[853]);
|
|
|
|
ZA[688]=ZR15(ZA[679])+ZA[655]+ZR25(ZA[622])+ZA[619];
|
|
|
|
ZA[858]=ZA[840]+ZA[857];
|
|
|
|
ZA[855]=ZA[852]+ZMa(ZA[845],ZA[840],ZA[850])+ZR30(ZA[850]);
|
|
|
|
ZA[862]=(ZCh(ZA[858],ZA[853],ZA[848])+ZA[843]+ZA[684]+0xf40e3585U)+ZR26(ZA[858]);
|
|
|
|
ZA[692]=ZR15(ZA[684])+ZA[659]+ZR25(ZA[627])+ZA[622];
|
|
|
|
ZA[863]=ZA[845]+ZA[862];
|
|
|
|
ZA[860]=ZA[857]+ZMa(ZA[850],ZA[845],ZA[855])+ZR30(ZA[855]);
|
|
|
|
ZA[867]=(ZCh(ZA[863],ZA[858],ZA[853])+ZA[848]+ZA[688]+0x106aa070U)+ZR26(ZA[863]);
|
|
|
|
ZA[696]=ZR15(ZA[688])+ZA[663]+ZR25(ZA[631])+ZA[627];
|
|
|
|
ZA[868]=ZA[850]+ZA[867];
|
|
|
|
ZA[865]=ZA[862]+ZMa(ZA[855],ZA[850],ZA[860])+ZR30(ZA[860]);
|
|
|
|
ZA[873]=(ZCh(ZA[868],ZA[863],ZA[858])+ZA[853]+ZA[692]+0x19a4c116U)+ZR26(ZA[868]);
|
|
|
|
ZA[700]=ZR15(ZA[692])+ZA[667]+ZR25(ZA[636])+ZA[631];
|
|
|
|
ZA[874]=ZA[855]+ZA[873];
|
|
|
|
ZA[870]=ZA[867]+ZMa(ZA[860],ZA[855],ZA[865])+ZR30(ZA[865]);
|
|
|
|
ZA[878]=(ZCh(ZA[874],ZA[868],ZA[863])+ZA[858]+ZA[696]+0x1e376c08U)+ZR26(ZA[874]);
|
|
|
|
ZA[704]=ZR15(ZA[696])+ZA[671]+ZR25(ZA[640])+ZA[636];
|
|
|
|
ZA[879]=ZA[860]+ZA[878];
|
|
|
|
ZA[876]=ZA[873]+ZMa(ZA[865],ZA[860],ZA[870])+ZR30(ZA[870]);
|
|
|
|
ZA[883]=(ZCh(ZA[879],ZA[874],ZA[868])+ZA[863]+ZA[700]+0x2748774cU)+ZR26(ZA[879]);
|
|
|
|
ZA[708]=ZR15(ZA[700])+ZA[679]+ZR25(ZA[644])+ZA[640];
|
|
|
|
ZA[884]=ZA[865]+ZA[883];
|
|
|
|
ZA[881]=ZA[878]+ZMa(ZA[870],ZA[865],ZA[876])+ZR30(ZA[876]);
|
|
|
|
ZA[888]=(ZCh(ZA[884],ZA[879],ZA[874])+ZA[868]+ZA[704]+0x34b0bcb5U)+ZR26(ZA[884]);
|
|
|
|
ZA[712]=ZR15(ZA[704])+ZA[684]+ZR25(ZA[648])+ZA[644];
|
|
|
|
ZA[889]=ZA[870]+ZA[888];
|
|
|
|
ZA[886]=ZA[883]+ZMa(ZA[876],ZA[870],ZA[881])+ZR30(ZA[881]);
|
|
|
|
ZA[893]=(ZCh(ZA[889],ZA[884],ZA[879])+ZA[874]+ZA[708]+0x391c0cb3U)+ZR26(ZA[889]);
|
|
|
|
ZA[716]=ZR15(ZA[708])+ZA[688]+ZR25(ZA[651])+ZA[648];
|
|
|
|
ZA[894]=ZA[876]+ZA[893];
|
|
|
|
ZA[891]=ZA[888]+ZMa(ZA[881],ZA[876],ZA[886])+ZR30(ZA[886]);
|
|
|
|
ZA[898]=(ZCh(ZA[894],ZA[889],ZA[884])+ZA[879]+ZA[712]+0x4ed8aa4aU)+ZR26(ZA[894]);
|
|
|
|
ZA[720]=ZR15(ZA[712])+ZA[692]+ZR25(ZA[655])+ZA[651];
|
|
|
|
ZA[899]=ZA[881]+ZA[898];
|
|
|
|
ZA[896]=ZA[893]+ZMa(ZA[886],ZA[881],ZA[891])+ZR30(ZA[891]);
|
|
|
|
ZA[903]=(ZCh(ZA[899],ZA[894],ZA[889])+ZA[884]+ZA[716]+0x5b9cca4fU)+ZR26(ZA[899]);
|
|
|
|
ZA[724]=ZR15(ZA[716])+ZA[696]+ZR25(ZA[659])+ZA[655];
|
|
|
|
ZA[904]=ZA[886]+ZA[903];
|
|
|
|
ZA[901]=ZA[898]+ZMa(ZA[891],ZA[886],ZA[896])+ZR30(ZA[896]);
|
|
|
|
ZA[908]=(ZCh(ZA[904],ZA[899],ZA[894])+ZA[889]+ZA[720]+0x682e6ff3U)+ZR26(ZA[904]);
|
|
|
|
ZA[727]=ZR15(ZA[720])+ZA[700]+ZR25(ZA[663])+ZA[659];
|
|
|
|
ZA[909]=ZA[891]+ZA[908];
|
|
|
|
ZA[906]=ZA[903]+ZMa(ZA[896],ZA[891],ZA[901])+ZR30(ZA[901]);
|
|
|
|
ZA[913]=(ZCh(ZA[909],ZA[904],ZA[899])+ZA[894]+ZA[724]+0x748f82eeU)+ZR26(ZA[909]);
|
|
|
|
ZA[730]=ZR15(ZA[724])+ZA[704]+ZR25(ZA[667])+ZA[663];
|
|
|
|
ZA[914]=ZA[896]+ZA[913];
|
|
|
|
ZA[911]=ZA[908]+ZMa(ZA[901],ZA[896],ZA[906])+ZR30(ZA[906]);
|
|
|
|
ZA[918]=(ZCh(ZA[914],ZA[909],ZA[904])+ZA[899]+ZA[901]+ZA[727]+0x78a5636fU)+ZR26(ZA[914]);
|
|
|
|
ZA[920]=(ZCh(ZA[918],ZA[914],ZA[909])+ZA[906]+ZA[904]+ZA[730]+0x84c87814U)+ZR26(ZA[918]);
|
|
|
|
ZA[922]=(ZCh(ZA[920],ZA[918],ZA[914])+ZA[911]+ZA[909]+ZR15(ZA[727])+ZA[708]+ZR25(ZA[671])+ZA[667]+0x8cc70208U)+ZR26(ZA[920]);
|
|
|
|
ZA[924]=(ZCh(ZA[922],ZA[920],ZA[918])+ZA[913]+ZMa(ZA[906],ZA[901],ZA[911])+ZR30(ZA[911])+ZA[914]+ZR15(ZA[730])+ZA[712]+ZR25(ZA[679])+ZA[671])+ZR26(ZA[922]);
|
|
|
|
|
|
|
|
#define FOUND (0x80)
|
|
|
|
#define NFLAG (0x7F)
|
|
|
|
|
|
|
|
#if defined(VECTORS4)
|
|
|
|
bool result = any(ZA[924] == 0x136032EDU);
|
|
|
|
|
|
|
|
if (result) {
|
|
|
|
if (ZA[924].x == 0x136032EDU)
|
|
|
|
output[FOUND] = output[NFLAG & Znonce.x] = Znonce.x;
|
|
|
|
if (ZA[924].y == 0x136032EDU)
|
|
|
|
output[FOUND] = output[NFLAG & Znonce.y] = Znonce.y;
|
|
|
|
if (ZA[924].z == 0x136032EDU)
|
|
|
|
output[FOUND] = output[NFLAG & Znonce.z] = Znonce.z;
|
|
|
|
if (ZA[924].w == 0x136032EDU)
|
|
|
|
output[FOUND] = output[NFLAG & Znonce.w] = Znonce.w;
|
|
|
|
}
|
|
|
|
#elif defined(VECTORS2)
|
|
|
|
bool result = any(ZA[924] == 0x136032EDU);
|
|
|
|
|
|
|
|
if (result) {
|
|
|
|
if (ZA[924].x == 0x136032EDU)
|
|
|
|
output[FOUND] = output[NFLAG & Znonce.x] = Znonce.x;
|
|
|
|
if (ZA[924].y == 0x136032EDU)
|
|
|
|
output[FOUND] = output[NFLAG & Znonce.y] = Znonce.y;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
if (ZA[924] == 0x136032EDU)
|
|
|
|
output[FOUND] = output[NFLAG & Znonce] = Znonce;
|
|
|
|
#endif
|
|
|
|
}
|