diff options
| author | Mattias Andrée <maandree@operamail.com> | 2013-02-04 02:43:29 +0100 | 
|---|---|---|
| committer | Mattias Andrée <maandree@operamail.com> | 2013-02-04 02:43:29 +0100 | 
| commit | 8788015d8cbb89ee51c35b4830df59d5d582d205 (patch) | |
| tree | e040c09eaf99094061460ea65f528ad5fe4bdfef | |
| parent | more opt (diff) | |
| download | sha3sum-8788015d8cbb89ee51c35b4830df59d5d582d205.tar.gz sha3sum-8788015d8cbb89ee51c35b4830df59d5d582d205.tar.bz2 sha3sum-8788015d8cbb89ee51c35b4830df59d5d582d205.tar.xz | |
more opt
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
| -rwxr-xr-x | sha3sum.py | 108 | 
1 files changed, 76 insertions, 32 deletions
| @@ -96,11 +96,7 @@ class SHA3:          @param   x:int  The value of which to calculate the binary logarithm          @return   :int  The binary logarithm          ''' -        rc_a = 0 if (x & 0xFF00) == 0 else 8 -        rc_b = 0 if (x & 0xF0F0) == 0 else 4 -        rc_c = 0 if (x & 0xCCCC) == 0 else 2 -        rc_d = 0 if (x & 0xAAAA) == 0 else 1 -        return (rc_a + rc_b) + (rc_c + rc_d) +        return ((0 if (x & 0xFF00) == 0 else 8) + (0 if (x & 0xF0F0) == 0 else 4)) + ((0 if (x & 0xCCCC) == 0 else 2) + (0 if (x & 0xAAAA) == 0 else 1))      @staticmethod @@ -113,15 +109,14 @@ class SHA3:          '''          # θ step (step 1 and 2 of 3)          SHA3.C[0] = (A[0]  ^ A[1])  ^ (A[2]  ^ A[3])  ^ A[4] -        SHA3.C[1] = (A[5]  ^ A[6])  ^ (A[7]  ^ A[8])  ^ A[9]          SHA3.C[2] = (A[10] ^ A[11]) ^ (A[12] ^ A[13]) ^ A[14] -        SHA3.C[3] = (A[15] ^ A[16]) ^ (A[17] ^ A[18]) ^ A[19] +        db = SHA3.C[0] ^ SHA3.rotate(SHA3.C[2], 1)          SHA3.C[4] = (A[20] ^ A[21]) ^ (A[22] ^ A[23]) ^ A[24] -         +        dd = SHA3.C[2] ^ SHA3.rotate(SHA3.C[4], 1) +        SHA3.C[1] = (A[5]  ^ A[6])  ^ (A[7]  ^ A[8])  ^ A[9]          da = SHA3.C[4] ^ SHA3.rotate(SHA3.C[1], 1) -        db = SHA3.C[0] ^ SHA3.rotate(SHA3.C[2], 1) +        SHA3.C[3] = (A[15] ^ A[16]) ^ (A[17] ^ A[18]) ^ A[19]          dc = SHA3.C[1] ^ SHA3.rotate(SHA3.C[3], 1) -        dd = SHA3.C[2] ^ SHA3.rotate(SHA3.C[4], 1)          de = SHA3.C[3] ^ SHA3.rotate(SHA3.C[0], 1)          # ρ and π steps, with last part of θ @@ -240,10 +235,10 @@ class SHA3:          '''          rc = 0          i = off + ww - 1 -        n = len(message) +        n = min(len(message), rr)          while i >= off:              rc <<= 8 -            rc |= message[i] if (i < rr) and (i < n) else 0 +            rc |= message[i] if (i < n) else 0              i -= 1          return rc @@ -276,8 +271,8 @@ class SHA3:              message = [0] * (nnn - nrf)              message[0] = bbbb              nnn -= nrf -            for i in range(1, nnn): -                message[i] = 0 +            #for i in range(1, nnn): +            #    message[i] = 0              message[nnn - 1] = 0x80          return msg[:nrf] + bytes(message) @@ -326,16 +321,40 @@ class SHA3:          SHA3.M = SHA3.M[nnn:]          # Absorbing phase -        msg_i =[0, 0, 0, 0, 0, -                0, 0, 0, 0, 0, -                0, 0, 0, 0, 0, -                0, 0, 0, 0, 0, -                0, 0, 0, 0, 0]          m = nnn -        for i in range(0, m, rr): -            for j in range(25): -                SHA3.S[j] ^= SHA3.toLane(message[i:], rr, ww, j * ww) -            SHA3.keccakF(SHA3.S) +        if ww == 8: +            for i in range(0, m, rr): +                SHA3.S[ 0] ^= SHA3.toLane(message[i:], rr, 8, 0) +                SHA3.S[ 1] ^= SHA3.toLane(message[i:], rr, 8, 8) +                SHA3.S[ 2] ^= SHA3.toLane(message[i:], rr, 8, 16) +                SHA3.S[ 3] ^= SHA3.toLane(message[i:], rr, 8, 24) +                SHA3.S[ 4] ^= SHA3.toLane(message[i:], rr, 8, 32) +                SHA3.S[ 5] ^= SHA3.toLane(message[i:], rr, 8, 40) +                SHA3.S[ 6] ^= SHA3.toLane(message[i:], rr, 8, 48) +                SHA3.S[ 7] ^= SHA3.toLane(message[i:], rr, 8, 56) +                SHA3.S[ 8] ^= SHA3.toLane(message[i:], rr, 8, 64) +                SHA3.S[ 9] ^= SHA3.toLane(message[i:], rr, 8, 72) +                SHA3.S[10] ^= SHA3.toLane(message[i:], rr, 8, 80) +                SHA3.S[11] ^= SHA3.toLane(message[i:], rr, 8, 88) +                SHA3.S[12] ^= SHA3.toLane(message[i:], rr, 8, 96) +                SHA3.S[13] ^= SHA3.toLane(message[i:], rr, 8, 104) +                SHA3.S[14] ^= SHA3.toLane(message[i:], rr, 8, 112) +                SHA3.S[15] ^= SHA3.toLane(message[i:], rr, 8, 120) +                SHA3.S[16] ^= SHA3.toLane(message[i:], rr, 8, 128) +                SHA3.S[17] ^= SHA3.toLane(message[i:], rr, 8, 136) +                SHA3.S[18] ^= SHA3.toLane(message[i:], rr, 8, 144) +                SHA3.S[19] ^= SHA3.toLane(message[i:], rr, 8, 152) +                SHA3.S[20] ^= SHA3.toLane(message[i:], rr, 8, 160) +                SHA3.S[21] ^= SHA3.toLane(message[i:], rr, 8, 168) +                SHA3.S[22] ^= SHA3.toLane(message[i:], rr, 8, 176) +                SHA3.S[23] ^= SHA3.toLane(message[i:], rr, 8, 184) +                SHA3.S[24] ^= SHA3.toLane(message[i:], rr, 8, 192) +                SHA3.keccakF(SHA3.S) +        else: +            for i in range(0, m, rr): +                for j in range(25): +                    SHA3.S[j] ^= SHA3.toLane(message[i:], rr, ww, j * ww) +                SHA3.keccakF(SHA3.S)      @staticmethod @@ -358,16 +377,40 @@ class SHA3:          ww = SHA3.w >> 3          # Absorbing phase -        msg_i =[0, 0, 0, 0, 0, -                0, 0, 0, 0, 0, -                0, 0, 0, 0, 0, -                0, 0, 0, 0, 0, -                0, 0, 0, 0, 0]          m = nnn -        for i in range(0, m, rr): -            for j in range(25): -                SHA3.S[j] ^= SHA3.toLane(message[i:], rr, ww, j * ww) -            SHA3.keccakF(SHA3.S) +        if ww == 8: +            for i in range(0, m, rr): +                SHA3.S[ 0] ^= SHA3.toLane(message[i:], rr, 8, 0) +                SHA3.S[ 1] ^= SHA3.toLane(message[i:], rr, 8, 8) +                SHA3.S[ 2] ^= SHA3.toLane(message[i:], rr, 8, 16) +                SHA3.S[ 3] ^= SHA3.toLane(message[i:], rr, 8, 24) +                SHA3.S[ 4] ^= SHA3.toLane(message[i:], rr, 8, 32) +                SHA3.S[ 5] ^= SHA3.toLane(message[i:], rr, 8, 40) +                SHA3.S[ 6] ^= SHA3.toLane(message[i:], rr, 8, 48) +                SHA3.S[ 7] ^= SHA3.toLane(message[i:], rr, 8, 56) +                SHA3.S[ 8] ^= SHA3.toLane(message[i:], rr, 8, 64) +                SHA3.S[ 9] ^= SHA3.toLane(message[i:], rr, 8, 72) +                SHA3.S[10] ^= SHA3.toLane(message[i:], rr, 8, 80) +                SHA3.S[11] ^= SHA3.toLane(message[i:], rr, 8, 88) +                SHA3.S[12] ^= SHA3.toLane(message[i:], rr, 8, 96) +                SHA3.S[13] ^= SHA3.toLane(message[i:], rr, 8, 104) +                SHA3.S[14] ^= SHA3.toLane(message[i:], rr, 8, 112) +                SHA3.S[15] ^= SHA3.toLane(message[i:], rr, 8, 120) +                SHA3.S[16] ^= SHA3.toLane(message[i:], rr, 8, 128) +                SHA3.S[17] ^= SHA3.toLane(message[i:], rr, 8, 136) +                SHA3.S[18] ^= SHA3.toLane(message[i:], rr, 8, 144) +                SHA3.S[19] ^= SHA3.toLane(message[i:], rr, 8, 152) +                SHA3.S[20] ^= SHA3.toLane(message[i:], rr, 8, 160) +                SHA3.S[21] ^= SHA3.toLane(message[i:], rr, 8, 168) +                SHA3.S[22] ^= SHA3.toLane(message[i:], rr, 8, 176) +                SHA3.S[23] ^= SHA3.toLane(message[i:], rr, 8, 184) +                SHA3.S[24] ^= SHA3.toLane(message[i:], rr, 8, 192) +                SHA3.keccakF(SHA3.S) +        else: +            for i in range(0, m, rr): +                for j in range(25): +                    SHA3.S[j] ^= SHA3.toLane(message[i:], rr, ww, j * ww) +                SHA3.keccakF(SHA3.S)          # Squeezing phase          olen = SHA3.n @@ -391,6 +434,7 @@ class SHA3:          return bytes(rc) +  if __name__ == '__main__':      cmd = sys.argv[0]      args = sys.argv[1:] | 
