⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keccakpermutationoptimized64.macros

📁 Keccak hash加密算法
💻 MACROS
字号:
/*Algorithm Name: KeccakAuthors: Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van AsscheDate: January 9, 2009This code, originally by Guido Bertoni, Joan Daemen, Michaël Peeters andGilles Van Assche as a part of the SHA-3 submission, is hereby put in thepublic domain. It is given as is, without any guarantee.For more information, feedback or questions, please refer to our website:http://keccak.noekeon.org/*/#define declareABCDE \    UINT64 Aba, Abe, Abi, Abo, Abu; \    UINT64 Aga, Age, Agi, Ago, Agu; \    UINT64 Aka, Ake, Aki, Ako, Aku; \    UINT64 Ama, Ame, Ami, Amo, Amu; \    UINT64 Asa, Ase, Asi, Aso, Asu; \    UINT64 Bba, Bbe, Bbi, Bbo, Bbu; \    UINT64 Bga, Bge, Bgi, Bgo, Bgu; \    UINT64 Bka, Bke, Bki, Bko, Bku; \    UINT64 Bma, Bme, Bmi, Bmo, Bmu; \    UINT64 Bsa, Bse, Bsi, Bso, Bsu; \    UINT64 Ca, Ce, Ci, Co, Cu; \    UINT64 Da, De, Di, Do, Du; \    UINT64 Eba, Ebe, Ebi, Ebo, Ebu; \    UINT64 Ega, Ege, Egi, Ego, Egu; \    UINT64 Eka, Eke, Eki, Eko, Eku; \    UINT64 Ema, Eme, Emi, Emo, Emu; \    UINT64 Esa, Ese, Esi, Eso, Esu; \#define thetaRhoPiChiIotaPrepareTheta(i) \    Da = Cu^ROL64(Ce, 1); \    De = Ca^ROL64(Ci, 1); \    Di = Ce^ROL64(Co, 1); \    Do = Ci^ROL64(Cu, 1); \    Du = Co^ROL64(Ca, 1); \\    Aba ^= Da; \    Bba = Aba; \    Age ^= De; \    Bbe = ROL64(Age, 44); \    Aki ^= Di; \    Bbi = ROL64(Aki, 43); \    Eba = Bba ^ ((~Bbe)&Bbi); \    Eba ^= KeccakRoundConstants[i]; \    Ca = Eba; \    Amo ^= Do; \    Bbo = ROL64(Amo, 21); \    Ebe = Bbe ^ ((~Bbi)&Bbo); \    Ce = Ebe; \    Asu ^= Du; \    Bbu = ROL64(Asu, 14); \    Ebi = Bbi ^ ((~Bbo)&Bbu); \    Ci = Ebi; \    Ebo = Bbo ^ ((~Bbu)&Bba); \    Co = Ebo; \    Ebu = Bbu ^ ((~Bba)&Bbe); \    Cu = Ebu; \\    Abo ^= Do; \    Bga = ROL64(Abo, 28); \    Agu ^= Du; \    Bge = ROL64(Agu, 20); \    Aka ^= Da; \    Bgi = ROL64(Aka,  3); \    Ega = Bga ^ ((~Bge)&Bgi); \    Ca ^= Ega; \    Ame ^= De; \    Bgo = ROL64(Ame, 45); \    Ege = Bge ^ ((~Bgi)&Bgo); \    Ce ^= Ege; \    Asi ^= Di; \    Bgu = ROL64(Asi, 61); \    Egi = Bgi ^ ((~Bgo)&Bgu); \    Ci ^= Egi; \    Ego = Bgo ^ ((~Bgu)&Bga); \    Co ^= Ego; \    Egu = Bgu ^ ((~Bga)&Bge); \    Cu ^= Egu; \\    Abe ^= De; \    Bka = ROL64(Abe,  1); \    Agi ^= Di; \    Bke = ROL64(Agi,  6); \    Ako ^= Do; \    Bki = ROL64(Ako, 25); \    Eka = Bka ^ ((~Bke)&Bki); \    Ca ^= Eka; \    Amu ^= Du; \    Bko = ROL64(Amu,  8); \    Eke = Bke ^ ((~Bki)&Bko); \    Ce ^= Eke; \    Asa ^= Da; \    Bku = ROL64(Asa, 18); \    Eki = Bki ^ ((~Bko)&Bku); \    Ci ^= Eki; \    Eko = Bko ^ ((~Bku)&Bka); \    Co ^= Eko; \    Eku = Bku ^ ((~Bka)&Bke); \    Cu ^= Eku; \\    Abu ^= Du; \    Bma = ROL64(Abu, 27); \    Aga ^= Da; \    Bme = ROL64(Aga, 36); \    Ake ^= De; \    Bmi = ROL64(Ake, 10); \    Ema = Bma ^ ((~Bme)&Bmi); \    Ca ^= Ema; \    Ami ^= Di; \    Bmo = ROL64(Ami, 15); \    Eme = Bme ^ ((~Bmi)&Bmo); \    Ce ^= Eme; \    Aso ^= Do; \    Bmu = ROL64(Aso, 56); \    Emi = Bmi ^ ((~Bmo)&Bmu); \    Ci ^= Emi; \    Emo = Bmo ^ ((~Bmu)&Bma); \    Co ^= Emo; \    Emu = Bmu ^ ((~Bma)&Bme); \    Cu ^= Emu; \\    Abi ^= Di; \    Bsa = ROL64(Abi, 62); \    Ago ^= Do; \    Bse = ROL64(Ago, 55); \    Aku ^= Du; \    Bsi = ROL64(Aku, 39); \    Esa = Bsa ^ ((~Bse)&Bsi); \    Ca ^= Esa; \    Ama ^= Da; \    Bso = ROL64(Ama, 41); \    Ese = Bse ^ ((~Bsi)&Bso); \    Ce ^= Ese; \    Ase ^= De; \    Bsu = ROL64(Ase,  2); \    Esi = Bsi ^ ((~Bso)&Bsu); \    Ci ^= Esi; \    Eso = Bso ^ ((~Bsu)&Bsa); \    Co ^= Eso; \    Esu = Bsu ^ ((~Bsa)&Bse); \    Cu ^= Esu; \\    Aba = Eba; \    Abe = Ebe; \    Abi = Ebi; \    Abo = Ebo; \    Abu = Ebu; \    Aga = Ega; \    Age = Ege; \    Agi = Egi; \    Ago = Ego; \    Agu = Egu; \    Aka = Eka; \    Ake = Eke; \    Aki = Eki; \    Ako = Eko; \    Aku = Eku; \    Ama = Ema; \    Ame = Eme; \    Ami = Emi; \    Amo = Emo; \    Amu = Emu; \    Asa = Esa; \    Ase = Ese; \    Asi = Esi; \    Aso = Eso; \    Asu = Esu; \#define thetaRhoPiAltchiIotaPrepareTheta(i) \    Da = Cu^ROL64(Ce, 1); \    De = Ca^ROL64(Ci, 1); \    Di = Ce^ROL64(Co, 1); \    Do = Ci^ROL64(Cu, 1); \    Du = Co^ROL64(Ca, 1); \\    Aba ^= Da; \    Bba = Aba; \    Age ^= De; \    Bbe = ROL64(Age, 44); \    Aki ^= Di; \    Bbi = ROL64(Aki, 43); \    Eba =  Bba ^ (  Bbe |  Bbi ); \    Eba ^= KeccakRoundConstants[i]; \    Ca = Eba; \    Amo ^= Do; \    Bbo = ROL64(Amo, 21); \    Ebe =  Bbe ^ ((~Bbi)|  Bbo ); \    Ce = Ebe; \    Asu ^= Du; \    Bbu = ROL64(Asu, 14); \    Ebi =  Bbi ^ (  Bbo &  Bbu ); \    Ci = Ebi; \    Ebo =  Bbo ^ (  Bbu |  Bba ); \    Co = Ebo; \    Ebu =  Bbu ^ (  Bba &  Bbe ); \    Cu = Ebu; \\    Abo ^= Do; \    Bga = ROL64(Abo, 28); \    Agu ^= Du; \    Bge = ROL64(Agu, 20); \    Aka ^= Da; \    Bgi = ROL64(Aka,  3); \    Ega =  Bga ^ (  Bge |  Bgi ); \    Ca ^= Ega; \    Ame ^= De; \    Bgo = ROL64(Ame, 45); \    Ege =  Bge ^ (  Bgi &  Bgo ); \    Ce ^= Ege; \    Asi ^= Di; \    Bgu = ROL64(Asi, 61); \    Egi =  Bgi ^ (  Bgo |(~Bgu)); \    Ci ^= Egi; \    Ego =  Bgo ^ (  Bgu |  Bga ); \    Co ^= Ego; \    Egu =  Bgu ^ (  Bga &  Bge ); \    Cu ^= Egu; \\    Abe ^= De; \    Bka = ROL64(Abe,  1); \    Agi ^= Di; \    Bke = ROL64(Agi,  6); \    Ako ^= Do; \    Bki = ROL64(Ako, 25); \    Eka =  Bka ^ (  Bke |  Bki ); \    Ca ^= Eka; \    Amu ^= Du; \    Bko = ROL64(Amu,  8); \    Eke =  Bke ^ (  Bki &  Bko ); \    Ce ^= Eke; \    Asa ^= Da; \    Bku = ROL64(Asa, 18); \    Eki =  Bki ^ ((~Bko)&  Bku ); \    Ci ^= Eki; \    Eko = ~Bko ^ (  Bku |  Bka ); \    Co ^= Eko; \    Eku =  Bku ^ (  Bka &  Bke ); \    Cu ^= Eku; \\    Abu ^= Du; \    Bma = ROL64(Abu, 27); \    Aga ^= Da; \    Bme = ROL64(Aga, 36); \    Ake ^= De; \    Bmi = ROL64(Ake, 10); \    Ema =  Bma ^ (  Bme &  Bmi ); \    Ca ^= Ema; \    Ami ^= Di; \    Bmo = ROL64(Ami, 15); \    Eme =  Bme ^ (  Bmi |  Bmo ); \    Ce ^= Eme; \    Aso ^= Do; \    Bmu = ROL64(Aso, 56); \    Emi =  Bmi ^ ((~Bmo)|  Bmu ); \    Ci ^= Emi; \    Emo = ~Bmo ^ (  Bmu &  Bma ); \    Co ^= Emo; \    Emu =  Bmu ^ (  Bma |  Bme ); \    Cu ^= Emu; \\    Abi ^= Di; \    Bsa = ROL64(Abi, 62); \    Ago ^= Do; \    Bse = ROL64(Ago, 55); \    Aku ^= Du; \    Bsi = ROL64(Aku, 39); \    Esa =  Bsa ^ ((~Bse)&  Bsi ); \    Ca ^= Esa; \    Ama ^= Da; \    Bso = ROL64(Ama, 41); \    Ese = ~Bse ^ (  Bsi |  Bso ); \    Ce ^= Ese; \    Ase ^= De; \    Bsu = ROL64(Ase,  2); \    Esi =  Bsi ^ (  Bso &  Bsu ); \    Ci ^= Esi; \    Eso =  Bso ^ (  Bsu |  Bsa ); \    Co ^= Eso; \    Esu =  Bsu ^ (  Bsa &  Bse ); \    Cu ^= Esu; \\    Aba = Eba; \    Abe = Ebe; \    Abi = Ebi; \    Abo = Ebo; \    Abu = Ebu; \    Aga = Ega; \    Age = Ege; \    Agi = Egi; \    Ago = Ego; \    Agu = Egu; \    Aka = Eka; \    Ake = Eke; \    Aki = Eki; \    Ako = Eko; \    Aku = Eku; \    Ama = Ema; \    Ame = Eme; \    Ami = Emi; \    Amo = Emo; \    Amu = Emu; \    Asa = Esa; \    Ase = Ese; \    Asi = Esi; \    Aso = Eso; \    Asu = Esu; \#ifdef UseBebigokimisa#define firstRound(i) \    Ca = Aba^Aga^Aka^Ama^Asa; \    Ce = Abe^Age^Ake^Ame^Ase; \    Ci = Abi^Agi^Aki^Ami^Asi; \    Co = Abo^Ago^Ako^Amo^Aso; \    Cu = Abu^Agu^Aku^Amu^Asu; \    thetaRhoPiAltchiIotaPrepareTheta(i)#define middleRound(i) \    thetaRhoPiAltchiIotaPrepareTheta(i)#else#define firstRound(i) \    Ca = Aba^Aga^Aka^Ama^Asa; \    Ce = Abe^Age^Ake^Ame^Ase; \    Ci = Abi^Agi^Aki^Ami^Asi; \    Co = Abo^Ago^Ako^Amo^Aso; \    Cu = Abu^Agu^Aku^Amu^Asu; \    thetaRhoPiChiIotaPrepareTheta(i)#define middleRound(i) \    thetaRhoPiChiIotaPrepareTheta(i)#endif#define lastRoundNormal(i) \    Da = Cu^ROL64(Ce, 1); \    De = Ca^ROL64(Ci, 1); \    Di = Ce^ROL64(Co, 1); \    Do = Ci^ROL64(Cu, 1); \    Du = Co^ROL64(Ca, 1); \\    Aba ^= Da; \    Bba = Aba; \    Age ^= De; \    Bbe = ROL64(Age, 44); \    Aki ^= Di; \    Bbi = ROL64(Aki, 43); \    Eba = Bba ^ ((~Bbe)&Bbi); \    Eba ^= KeccakRoundConstants[i]; \    Amo ^= Do; \    Bbo = ROL64(Amo, 21); \    Ebe = Bbe ^ ((~Bbi)&Bbo); \    Asu ^= Du; \    Bbu = ROL64(Asu, 14); \    Ebi = Bbi ^ ((~Bbo)&Bbu); \    Ebo = Bbo ^ ((~Bbu)&Bba); \    Ebu = Bbu ^ ((~Bba)&Bbe); \\    Abo ^= Do; \    Bga = ROL64(Abo, 28); \    Agu ^= Du; \    Bge = ROL64(Agu, 20); \    Aka ^= Da; \    Bgi = ROL64(Aka,  3); \    Ega = Bga ^ ((~Bge)&Bgi); \    Ame ^= De; \    Bgo = ROL64(Ame, 45); \    Ege = Bge ^ ((~Bgi)&Bgo); \    Asi ^= Di; \    Bgu = ROL64(Asi, 61); \    Egi = Bgi ^ ((~Bgo)&Bgu); \    Ego = Bgo ^ ((~Bgu)&Bga); \    Egu = Bgu ^ ((~Bga)&Bge); \\    Abe ^= De; \    Bka = ROL64(Abe,  1); \    Agi ^= Di; \    Bke = ROL64(Agi,  6); \    Ako ^= Do; \    Bki = ROL64(Ako, 25); \    Eka = Bka ^ ((~Bke)&Bki); \    Amu ^= Du; \    Bko = ROL64(Amu,  8); \    Eke = Bke ^ ((~Bki)&Bko); \    Asa ^= Da; \    Bku = ROL64(Asa, 18); \    Eki = Bki ^ ((~Bko)&Bku); \    Eko = Bko ^ ((~Bku)&Bka); \    Eku = Bku ^ ((~Bka)&Bke); \\    Abu ^= Du; \    Bma = ROL64(Abu, 27); \    Aga ^= Da; \    Bme = ROL64(Aga, 36); \    Ake ^= De; \    Bmi = ROL64(Ake, 10); \    Ema = Bma ^ ((~Bme)&Bmi); \    Ami ^= Di; \    Bmo = ROL64(Ami, 15); \    Eme = Bme ^ ((~Bmi)&Bmo); \    Aso ^= Do; \    Bmu = ROL64(Aso, 56); \    Emi = Bmi ^ ((~Bmo)&Bmu); \    Emo = Bmo ^ ((~Bmu)&Bma); \    Emu = Bmu ^ ((~Bma)&Bme); \\    Abi ^= Di; \    Bsa = ROL64(Abi, 62); \    Ago ^= Do; \    Bse = ROL64(Ago, 55); \    Aku ^= Du; \    Bsi = ROL64(Aku, 39); \    Esa = Bsa ^ ((~Bse)&Bsi); \    Ama ^= Da; \    Bso = ROL64(Ama, 41); \    Ese = Bse ^ ((~Bsi)&Bso); \    Ase ^= De; \    Bsu = ROL64(Ase,  2); \    Esi = Bsi ^ ((~Bso)&Bsu); \    Eso = Bso ^ ((~Bsu)&Bsa); \    Esu = Bsu ^ ((~Bsa)&Bse); \#define lastRoundBebigokimisa(i) \    Da = Cu^ROL64(Ce, 1); \    De = Ca^ROL64(Ci, 1); \    Di = Ce^ROL64(Co, 1); \    Do = Ci^ROL64(Cu, 1); \    Du = Co^ROL64(Ca, 1); \\    Aba ^= Da; \    Bba = Aba; \    Age ^= De; \    Bbe = ROL64(Age, 44); \    Aki ^= Di; \    Bbi = ROL64(Aki, 43); \    Eba =  Bba ^ (  Bbe |  Bbi ); \    Eba ^= KeccakRoundConstants[i]; \    Amo ^= Do; \    Bbo = ROL64(Amo, 21); \    Ebe =  Bbe ^ ((~Bbi)|  Bbo ); \    Asu ^= Du; \    Bbu = ROL64(Asu, 14); \    Ebi =  Bbi ^ (  Bbo &  Bbu ); \    Ebo =  Bbo ^ (  Bbu |  Bba ); \    Ebu =  Bbu ^ (  Bba &  Bbe ); \\    Abo ^= Do; \    Bga = ROL64(Abo, 28); \    Agu ^= Du; \    Bge = ROL64(Agu, 20); \    Aka ^= Da; \    Bgi = ROL64(Aka,  3); \    Ega =  Bga ^ (  Bge |  Bgi ); \    Ame ^= De; \    Bgo = ROL64(Ame, 45); \    Ege =  Bge ^ (  Bgi &  Bgo ); \    Asi ^= Di; \    Bgu = ROL64(Asi, 61); \    Egi =  Bgi ^ (  Bgo |(~Bgu)); \    Ego =  Bgo ^ (  Bgu |  Bga ); \    Egu =  Bgu ^ (  Bga &  Bge ); \\    Abe ^= De; \    Bka = ROL64(Abe,  1); \    Agi ^= Di; \    Bke = ROL64(Agi,  6); \    Ako ^= Do; \    Bki = ROL64(Ako, 25); \    Eka =  Bka ^ (  Bke |  Bki ); \    Amu ^= Du; \    Bko = ROL64(Amu,  8); \    Eke =  Bke ^ (  Bki &  Bko ); \    Asa ^= Da; \    Bku = ROL64(Asa, 18); \    Eki =  Bki ^ ((~Bko)&  Bku ); \    Eko = ~Bko ^ (  Bku |  Bka ); \    Eku =  Bku ^ (  Bka &  Bke ); \\    Abu ^= Du; \    Bma = ROL64(Abu, 27); \    Aga ^= Da; \    Bme = ROL64(Aga, 36); \    Ake ^= De; \    Bmi = ROL64(Ake, 10); \    Ema =  Bma ^ (  Bme &  Bmi ); \    Ami ^= Di; \    Bmo = ROL64(Ami, 15); \    Eme =  Bme ^ (  Bmi |  Bmo ); \    Aso ^= Do; \    Bmu = ROL64(Aso, 56); \    Emi =  Bmi ^ ((~Bmo)|  Bmu ); \    Emo = ~Bmo ^ (  Bmu &  Bma ); \    Emu =  Bmu ^ (  Bma |  Bme ); \\    Abi ^= Di; \    Bsa = ROL64(Abi, 62); \    Ago ^= Do; \    Bse = ROL64(Ago, 55); \    Aku ^= Du; \    Bsi = ROL64(Aku, 39); \    Esa =  Bsa ^ ((~Bse)&  Bsi ); \    Ama ^= Da; \    Bso = ROL64(Ama, 41); \    Ese = ~Bse ^ (  Bsi |  Bso ); \    Ase ^= De; \    Bsu = ROL64(Ase,  2); \    Esi =  Bsi ^ (  Bso &  Bsu ); \    Eso =  Bso ^ (  Bsu |  Bsa ); \    Esu =  Bsu ^ (  Bsa &  Bse ); \#ifdef UseBebigokimisa#define lastRound(i) \    lastRoundBebigokimisa(i)#else#define lastRound(i) \    lastRoundNormal(i)#endif#define copyFromState(X, state) \    X##ba = state[ 0]; \    X##be = state[ 1]; \    X##bi = state[ 2]; \    X##bo = state[ 3]; \    X##bu = state[ 4]; \    X##ga = state[ 5]; \    X##ge = state[ 6]; \    X##gi = state[ 7]; \    X##go = state[ 8]; \    X##gu = state[ 9]; \    X##ka = state[10]; \    X##ke = state[11]; \    X##ki = state[12]; \    X##ko = state[13]; \    X##ku = state[14]; \    X##ma = state[15]; \    X##me = state[16]; \    X##mi = state[17]; \    X##mo = state[18]; \    X##mu = state[19]; \    X##sa = state[20]; \    X##se = state[21]; \    X##si = state[22]; \    X##so = state[23]; \    X##su = state[24];#define copyToState(state, X) \    state[ 0] = X##ba; \    state[ 1] = X##be; \    state[ 2] = X##bi; \    state[ 3] = X##bo; \    state[ 4] = X##bu; \    state[ 5] = X##ga; \    state[ 6] = X##ge; \    state[ 7] = X##gi; \    state[ 8] = X##go; \    state[ 9] = X##gu; \    state[10] = X##ka; \    state[11] = X##ke; \    state[12] = X##ki; \    state[13] = X##ko; \    state[14] = X##ku; \    state[15] = X##ma; \    state[16] = X##me; \    state[17] = X##mi; \    state[18] = X##mo; \    state[19] = X##mu; \    state[20] = X##sa; \    state[21] = X##se; \    state[22] = X##si; \    state[23] = X##so; \    state[24] = X##su;#define copyFromStateAndXor8words(X, state, input) \    X##ba = state[ 0]^input[ 0]; \    X##be = state[ 1]^input[ 1]; \    X##bi = state[ 2]^input[ 2]; \    X##bo = state[ 3]^input[ 3]; \    X##bu = state[ 4]^input[ 4]; \    X##ga = state[ 5]^input[ 5]; \    X##ge = state[ 6]^input[ 6]; \    X##gi = state[ 7]^input[ 7]; \    X##go = state[ 8]; \    X##gu = state[ 9]; \    X##ka = state[10]; \    X##ke = state[11]; \    X##ki = state[12]; \    X##ko = state[13]; \    X##ku = state[14]; \    X##ma = state[15]; \    X##me = state[16]; \    X##mi = state[17]; \    X##mo = state[18]; \    X##mu = state[19]; \    X##sa = state[20]; \    X##se = state[21]; \    X##si = state[22]; \    X##so = state[23]; \    X##su = state[24];#define copyFromStateAndXor16words(X, state, input) \    X##ba = state[ 0]^input[ 0]; \    X##be = state[ 1]^input[ 1]; \    X##bi = state[ 2]^input[ 2]; \    X##bo = state[ 3]^input[ 3]; \    X##bu = state[ 4]^input[ 4]; \    X##ga = state[ 5]^input[ 5]; \    X##ge = state[ 6]^input[ 6]; \    X##gi = state[ 7]^input[ 7]; \    X##go = state[ 8]^input[ 8]; \    X##gu = state[ 9]^input[ 9]; \    X##ka = state[10]^input[10]; \    X##ke = state[11]^input[11]; \    X##ki = state[12]^input[12]; \    X##ko = state[13]^input[13]; \    X##ku = state[14]^input[14]; \    X##ma = state[15]^input[15]; \    X##me = state[16]; \    X##mi = state[17]; \    X##mo = state[18]; \    X##mu = state[19]; \    X##sa = state[20]; \    X##se = state[21]; \    X##si = state[22]; \    X##so = state[23]; \    X##su = state[24];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -