SHOW:
|
|
- or go back to the newest paste.
| 1 | #define rotl(x,r) (x << r) | (x >> (64-r)) | |
| 2 | #define r(x,s,t,u,v,r1,r2,r3,r4)\ | |
| 3 | x^=s;x=rotl(x,r1);x+=t;x=rotl(x,r2);x^=u;x=rotl(x,r3);x+=v;x=rotl(x,r4) | |
| 4 | ||
| 5 | #define rotr(x,r) (x >> r) | (x << (64-r)) | |
| 6 | #define rinv(x,s,t,u,v,r1,r2,r3,r4)\ | |
| 7 | x=rotr(x,r4);x-=v;x=rotr(x,r3);x^=u;x=rotr(x,r2);x-=t;x=rotr(x,r1);x^=s | |
| 8 | ||
| 9 | void f(uint64_t x[8]) | |
| 10 | {
| |
| 11 | uint64_t a, b, c, d, e, f, g, h; | |
| 12 | a = 0x243F6A8885A308D3 + x[0]; a=rotl(a, 3); | |
| 13 | b = 0x13198A2E03707344 + x[1]; b=rotl(b, 5); | |
| 14 | c = 0xA4093822299F31D0 + x[2]; c=rotl(c, 7); | |
| 15 | d = 0x082EFA98EC4E6C89 + x[3]; d=rotl(d,11); | |
| 16 | e = 0x452821E638D01377 + x[4]; e=rotl(e,13); | |
| 17 | f = 0xBE5466CF34E90C6C + x[5]; f=rotl(f,17); | |
| 18 | g = 0xC0AC29B7C97C50DD + x[6]; g=rotl(g,19); | |
| 19 | h = 0x3F84D5B5B5470917 + x[7]; h=rotl(h,23); | |
| 20 | ||
| 21 | r(e,a,b,c,d,41,21,17,29); | |
| 22 | r(f,b,c,d,a,33,49, 1,17); | |
| 23 | r(g,c,d,a,b,41,11,17, 3); | |
| 24 | r(h,d,a,b,c,17, 7,33,55); | |
| 25 | ||
| 26 | r(a,e,f,g,h, 9,27,17,51); | |
| 27 | r(b,f,g,h,e,25,61,49,53); | |
| 28 | r(c,g,h,e,f,49,23,33,39); | |
| 29 | r(d,h,e,f,g,57,51,49,27); | |
| 30 | ||
| 31 | e += 0x9216D5D98979FB1B; e=rotl(e,47); | |
| 32 | f += 0xD1310BA698DFB5AC; f=rotl(f,53); | |
| 33 | g += 0x2FFD72DBD01ADFB7; g=rotl(g,59); | |
| 34 | h += 0xB8E1AFED6A267E96; h=rotl(h,61); | |
| 35 | ||
| 36 | r(e,a,b,c,d,33,15, 1,47); | |
| 37 | r(f,b,c,d,a,57,13,49,37); | |
| 38 | r(g,c,d,a,b,25, 3,49,11); | |
| 39 | r(h,d,a,b,c, 9,37,17,13); | |
| 40 | ||
| 41 | a += 0xBA7C9045F12C7F99; a=rotl(a,29); | |
| 42 | b += 0x24A19947B3916CF7; b=rotl(b,37); | |
| 43 | c += 0x0801F2E2858EFC16; c=rotl(c,41); | |
| 44 | d += 0x636920D871574E69; d=rotl(d,43); | |
| 45 | ||
| 46 | r(a,e,f,g,h, 9, 5,17,45); | |
| 47 | r(b,f,g,h,e,25,29,49,21); | |
| 48 | r(c,g,h,e,f,17,57,33, 9); | |
| 49 | r(d,h,e,f,g,57,19,49,59); | |
| 50 | ||
| 51 | e += 0xA458FEA3F4933D7E; e=rotl(e, 3); | |
| 52 | f += 0x0D95748F728EB658; f=rotl(f, 5); | |
| 53 | g += 0x718BCD5882154AEE; g=rotl(g, 7); | |
| 54 | h += 0x7B54A41DC25A59B5; h=rotl(h,11); | |
| 55 | ||
| 56 | r(e,a,b,c,d, 9,27,17,51); | |
| 57 | r(f,b,c,d,a,25,61,49,53); | |
| 58 | r(g,c,d,a,b,49,23,33,39); | |
| 59 | r(h,d,a,b,c,57,51,49,28); | |
| 60 | ||
| 61 | a += 0x9C30D5392AF26013; a=rotl(a,13); | |
| 62 | b += 0xC5D1B023286085F0; b=rotl(b,17); | |
| 63 | c += 0xCA417918B8DB38EF; c=rotl(c,19); | |
| 64 | d += 0x8E79DCB0603A180E; d=rotl(d,23); | |
| 65 | ||
| 66 | r(a,e,f,g,h,41,21,17,29); | |
| 67 | r(b,f,g,h,e,33,49, 1,17); | |
| 68 | r(c,g,h,e,f,41,11,17, 3); | |
| 69 | r(d,h,e,f,g,17, 7,33,55); | |
| 70 | ||
| 71 | x[0] = a; | |
| 72 | x[1] = b; | |
| 73 | x[2] = c; | |
| 74 | x[3] = d; | |
| 75 | x[4] = e; | |
| 76 | x[5] = f; | |
| 77 | x[6] = g; | |
| 78 | x[7] = h; | |
| 79 | } | |
| 80 | ||
| 81 | ||
| 82 | void finv(uint64_t x[8]) | |
| 83 | {
| |
| 84 | uint64_t a, b, c, d, e, f, g, h; | |
| 85 | ||
| 86 | a = x[0]; | |
| 87 | b = x[1]; | |
| 88 | c = x[2]; | |
| 89 | d = x[3]; | |
| 90 | e = x[4]; | |
| 91 | f = x[5]; | |
| 92 | g = x[6]; | |
| 93 | h = x[7]; | |
| 94 | ||
| 95 | rinv(a,e,f,g,h,41,21,17,29); | |
| 96 | rinv(b,f,g,h,e,33,49, 1,17); | |
| 97 | rinv(c,g,h,e,f,41,11,17, 3); | |
| 98 | rinv(d,h,e,f,g,17, 7,33,55); | |
| 99 | ||
| 100 | a=rotr(a,13);a -= 0x9C30D5392AF26013; | |
| 101 | b=rotr(b,17);b -= 0xC5D1B023286085F0; | |
| 102 | c=rotr(c,19);c -= 0xCA417918B8DB38EF; | |
| 103 | d=rotr(d,23);d -= 0x8E79DCB0603A180E; | |
| 104 | ||
| 105 | rinv(e,a,b,c,d, 9,27,17,51); | |
| 106 | rinv(f,b,c,d,a,25,61,49,53); | |
| 107 | rinv(g,c,d,a,b,49,23,33,39); | |
| 108 | rinv(h,d,a,b,c,57,51,49,28); | |
| 109 | ||
| 110 | e=rotr(e, 3); e -= 0xA458FEA3F4933D7E; | |
| 111 | f=rotr(f, 5); f -= 0x0D95748F728EB658; | |
| 112 | g=rotr(g, 7); g -= 0x718BCD5882154AEE; | |
| 113 | h=rotr(h,11); h -= 0x7B54A41DC25A59B5; | |
| 114 | ||
| 115 | rinv(a,e,f,g,h, 9, 5,17,45); | |
| 116 | rinv(b,f,g,h,e,25,29,49,21); | |
| 117 | rinv(c,g,h,e,f,17,57,33, 9); | |
| 118 | rinv(d,h,e,f,g,57,19,49,59); | |
| 119 | ||
| 120 | a=rotr(a,29); a -= 0xBA7C9045F12C7F99; | |
| 121 | b=rotr(b,37); b -= 0x24A19947B3916CF7; | |
| 122 | c=rotr(c,41); c -= 0x0801F2E2858EFC16; | |
| 123 | d=rotr(d,43); d -= 0x636920D871574E69; | |
| 124 | ||
| 125 | rinv(e,a,b,c,d,33,15, 1,47); | |
| 126 | rinv(f,b,c,d,a,57,13,49,37); | |
| 127 | rinv(g,c,d,a,b,25, 3,49,11); | |
| 128 | rinv(h,d,a,b,c, 9,37,17,13); | |
| 129 | ||
| 130 | e=rotr(e,47); e -= 0x9216D5D98979FB1B; | |
| 131 | f=rotr(f,53); f -= 0xD1310BA698DFB5AC; | |
| 132 | g=rotr(g,59); g -= 0x2FFD72DBD01ADFB7; | |
| 133 | h=rotr(h,61); h -= 0xB8E1AFED6A267E96; | |
| 134 | ||
| 135 | rinv(a,e,f,g,h, 9,27,17,51); | |
| 136 | rinv(b,f,g,h,e,25,61,49,53); | |
| 137 | rinv(c,g,h,e,f,49,23,33,39); | |
| 138 | rinv(d,h,e,f,g,57,51,49,27); | |
| 139 | ||
| 140 | rinv(e,a,b,c,d,41,21,17,29); | |
| 141 | rinv(f,b,c,d,a,33,49, 1,17); | |
| 142 | rinv(g,c,d,a,b,41,11,17, 3); | |
| 143 | rinv(h,d,a,b,c,17, 7,33,55); | |
| 144 | ||
| 145 | a=rotr(a, 3); x[0] = a - 0x243F6A8885A308D3; | |
| 146 | b=rotr(b, 5); x[1] = b - 0x13198A2E03707344; | |
| 147 | c=rotr(c, 7); x[2] = c - 0xA4093822299F31D0; | |
| 148 | d=rotr(d,11); x[3] = d - 0x082EFA98EC4E6C89; | |
| 149 | e=rotr(e,13); x[4] = e - 0x452821E638D01377; | |
| 150 | f=rotr(f,17); x[5] = f - 0xBE5466CF34E90C6C; | |
| 151 | g=rotr(g,19); x[6] = g - 0xC0AC29B7C97C50DD; | |
| 152 | h=rotr(h,23); x[7] = h - 0x3F84D5B5B5470917; | |
| 153 | } |