Hex Artifact Content
Not logged in

Artifact 48a93f299782bb0d00a00223ecffa0cdbc37426c:


0000: 5c 20 6b 65 63 63 61 6b 20 77 72 61 70 70 65 72  \ keccak wrapper
0010: 0a 0a 5c 20 43 6f 70 79 72 69 67 68 74 20 c2 a9  ..\ Copyright ©
0020: 20 32 30 31 32 2d 32 30 31 35 20 20 20 42 65 72   2012-2015   Ber
0030: 6e 64 20 50 61 79 73 61 6e 0a 0a 5c 20 54 68 69  nd Paysan..\ Thi
0040: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65  s program is fre
0050: 65 20 73 6f 66 74 77 61 72 65 3a 20 79 6f 75 20  e software: you 
0060: 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65  can redistribute
0070: 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66   it and/or modif
0080: 79 0a 5c 20 69 74 20 75 6e 64 65 72 20 74 68 65  y.\ it under the
0090: 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 47 4e   terms of the GN
00a0: 55 20 41 66 66 65 72 6f 20 47 65 6e 65 72 61 6c  U Affero General
00b0: 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20   Public License 
00c0: 61 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 0a  as published by.
00d0: 5c 20 74 68 65 20 46 72 65 65 20 53 6f 66 74 77  \ the Free Softw
00e0: 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20  are Foundation, 
00f0: 65 69 74 68 65 72 20 76 65 72 73 69 6f 6e 20 33  either version 3
0100: 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c   of the License,
0110: 20 6f 72 0a 5c 20 28 61 74 20 79 6f 75 72 20 6f   or.\ (at your o
0120: 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72  ption) any later
0130: 20 76 65 72 73 69 6f 6e 2e 0a 0a 5c 20 54 68 69   version...\ Thi
0140: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73  s program is dis
0150: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20  tributed in the 
0160: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c  hope that it wil
0170: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 5c 20 62  l be useful,.\ b
0180: 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57  ut WITHOUT ANY W
0190: 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74  ARRANTY; without
01a0: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65   even the implie
01b0: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 5c 20  d warranty of.\ 
01c0: 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20  MERCHANTABILITY 
01d0: 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41  or FITNESS FOR A
01e0: 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50   PARTICULAR PURP
01f0: 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 5c 20  OSE.  See the.\ 
0200: 47 4e 55 20 41 66 66 65 72 6f 20 47 65 6e 65 72  GNU Affero Gener
0210: 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73  al Public Licens
0220: 65 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69  e for more detai
0230: 6c 73 2e 0a 0a 5c 20 59 6f 75 20 73 68 6f 75 6c  ls...\ You shoul
0240: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20  d have received 
0250: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e  a copy of the GN
0260: 55 20 41 66 66 65 72 6f 20 47 65 6e 65 72 61 6c  U Affero General
0270: 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a   Public License.
0280: 5c 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69  \ along with thi
0290: 73 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e  s program.  If n
02a0: 6f 74 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f 2f  ot, see <http://
02b0: 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65  www.gnu.org/lice
02c0: 6e 73 65 73 2f 3e 2e 0a 0a 5c 63 20 23 69 6e 63  nses/>...\c #inc
02d0: 6c 75 64 65 20 3c 4b 65 63 63 61 6b 46 2d 31 36  lude <KeccakF-16
02e0: 30 30 2e 68 3e 0a 5c 63 20 55 49 4e 54 36 34 2a  00.h>.\c UINT64*
02f0: 20 4b 65 63 63 61 6b 45 6e 63 72 79 70 74 4c 6f   KeccakEncryptLo
0300: 6f 70 28 6b 65 63 63 61 6b 5f 73 74 61 74 65 20  op(keccak_state 
0310: 73 74 61 74 65 2c 20 55 49 4e 54 36 34 20 2a 20  state, UINT64 * 
0320: 64 61 74 61 2c 20 69 6e 74 20 6e 2c 20 69 6e 74  data, int n, int
0330: 20 72 6f 75 6e 64 73 29 0a 5c 63 20 7b 0a 5c 63   rounds).\c {.\c
0340: 20 20 20 77 68 69 6c 65 28 6e 3e 30 29 20 7b 0a     while(n>0) {.
0350: 5c 63 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  \c     unsigned 
0360: 69 6e 74 20 70 20 3d 20 6e 20 3e 3d 20 31 32 38  int p = n >= 128
0370: 20 3f 20 31 32 38 20 3a 20 6e 3b 0a 5c 63 20 20   ? 128 : n;.\c  
0380: 20 20 20 4b 65 63 63 61 6b 46 28 73 74 61 74 65     KeccakF(state
0390: 2c 20 72 6f 75 6e 64 73 29 3b 0a 5c 63 20 20 20  , rounds);.\c   
03a0: 20 20 4b 65 63 63 61 6b 45 6e 63 72 79 70 74 28    KeccakEncrypt(
03b0: 73 74 61 74 65 2c 20 64 61 74 61 2c 20 70 29 3b  state, data, p);
03c0: 0a 5c 63 20 20 20 20 20 64 61 74 61 20 3d 20 28  .\c     data = (
03d0: 55 49 4e 54 36 34 2a 29 28 28 28 63 68 61 72 2a  UINT64*)(((char*
03e0: 29 64 61 74 61 29 2b 70 29 3b 20 6e 2d 3d 70 3b  )data)+p); n-=p;
03f0: 0a 5c 63 20 20 20 7d 0a 5c 63 20 20 20 72 65 74  .\c   }.\c   ret
0400: 75 72 6e 20 64 61 74 61 3b 0a 5c 63 20 7d 0a 5c  urn data;.\c }.\
0410: 63 20 55 49 4e 54 36 34 2a 20 4b 65 63 63 61 6b  c UINT64* Keccak
0420: 44 65 63 72 79 70 74 4c 6f 6f 70 28 6b 65 63 63  DecryptLoop(kecc
0430: 61 6b 5f 73 74 61 74 65 20 73 74 61 74 65 2c 20  ak_state state, 
0440: 55 49 4e 54 36 34 20 2a 20 64 61 74 61 2c 20 69  UINT64 * data, i
0450: 6e 74 20 6e 2c 20 69 6e 74 20 72 6f 75 6e 64 73  nt n, int rounds
0460: 29 0a 5c 63 20 7b 0a 5c 63 20 20 20 77 68 69 6c  ).\c {.\c   whil
0470: 65 28 6e 3e 30 29 20 7b 0a 5c 63 20 20 20 20 20  e(n>0) {.\c     
0480: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 70 20 3d  unsigned int p =
0490: 20 6e 20 3e 3d 20 31 32 38 20 3f 20 31 32 38 20   n >= 128 ? 128 
04a0: 3a 20 6e 3b 0a 5c 63 20 20 20 20 20 4b 65 63 63  : n;.\c     Kecc
04b0: 61 6b 46 28 73 74 61 74 65 2c 20 72 6f 75 6e 64  akF(state, round
04c0: 73 29 3b 0a 5c 63 20 20 20 20 20 4b 65 63 63 61  s);.\c     Kecca
04d0: 6b 44 65 63 72 79 70 74 28 73 74 61 74 65 2c 20  kDecrypt(state, 
04e0: 64 61 74 61 2c 20 70 29 3b 0a 5c 63 20 20 20 20  data, p);.\c    
04f0: 20 64 61 74 61 20 3d 20 28 55 49 4e 54 36 34 2a   data = (UINT64*
0500: 29 28 28 28 63 68 61 72 2a 29 64 61 74 61 29 2b  )(((char*)data)+
0510: 70 29 3b 20 6e 2d 3d 70 3b 0a 5c 63 20 20 20 7d  p); n-=p;.\c   }
0520: 0a 5c 63 20 20 20 72 65 74 75 72 6e 20 64 61 74  .\c   return dat
0530: 61 3b 0a 5c 63 20 7d 0a 0a 5c 20 2d 2d 2d 2d 2d  a;.\c }..\ -----
0540: 2d 3d 3d 3d 3c 20 66 75 6e 63 74 69 6f 6e 73 20  -===< functions 
0550: 3e 3d 3d 3d 2d 2d 2d 2d 2d 2d 2d 0a 63 2d 66 75  >===-------.c-fu
0560: 6e 63 74 69 6f 6e 20 4b 65 63 63 61 6b 49 6e 69  nction KeccakIni
0570: 74 69 61 6c 69 7a 65 20 4b 65 63 63 61 6b 49 6e  tialize KeccakIn
0580: 69 74 69 61 6c 69 7a 65 20 20 2d 2d 20 76 6f 69  itialize  -- voi
0590: 64 0a 63 2d 66 75 6e 63 74 69 6f 6e 20 4b 65 63  d.c-function Kec
05a0: 63 61 6b 46 20 4b 65 63 63 61 6b 46 20 61 20 6e  cakF KeccakF a n
05b0: 20 2d 2d 20 76 6f 69 64 0a 63 2d 66 75 6e 63 74   -- void.c-funct
05c0: 69 6f 6e 20 4b 65 63 63 61 6b 49 6e 69 74 69 61  ion KeccakInitia
05d0: 6c 69 7a 65 53 74 61 74 65 20 4b 65 63 63 61 6b  lizeState Keccak
05e0: 49 6e 69 74 69 61 6c 69 7a 65 53 74 61 74 65 20  InitializeState 
05f0: 61 20 2d 2d 20 76 6f 69 64 0a 63 2d 66 75 6e 63  a -- void.c-func
0600: 74 69 6f 6e 20 4b 65 63 63 61 6b 45 78 74 72 61  tion KeccakExtra
0610: 63 74 20 4b 65 63 63 61 6b 45 78 74 72 61 63 74  ct KeccakExtract
0620: 20 61 20 61 20 6e 20 2d 2d 20 76 6f 69 64 0a 63   a a n -- void.c
0630: 2d 66 75 6e 63 74 69 6f 6e 20 4b 65 63 63 61 6b  -function Keccak
0640: 41 62 73 6f 72 62 20 4b 65 63 63 61 6b 41 62 73  Absorb KeccakAbs
0650: 6f 72 62 20 61 20 61 20 6e 20 2d 2d 20 76 6f 69  orb a a n -- voi
0660: 64 0a 63 2d 66 75 6e 63 74 69 6f 6e 20 4b 65 63  d.c-function Kec
0670: 63 61 6b 45 6e 63 72 79 70 74 20 4b 65 63 63 61  cakEncrypt Kecca
0680: 6b 45 6e 63 72 79 70 74 20 61 20 61 20 6e 20 2d  kEncrypt a a n -
0690: 2d 20 76 6f 69 64 0a 63 2d 66 75 6e 63 74 69 6f  - void.c-functio
06a0: 6e 20 4b 65 63 63 61 6b 44 65 63 72 79 70 74 20  n KeccakDecrypt 
06b0: 4b 65 63 63 61 6b 44 65 63 72 79 70 74 20 61 20  KeccakDecrypt a 
06c0: 61 20 6e 20 2d 2d 20 76 6f 69 64 0a 63 2d 66 75  a n -- void.c-fu
06d0: 6e 63 74 69 6f 6e 20 4b 65 63 63 61 6b 45 6e 63  nction KeccakEnc
06e0: 72 79 70 74 4c 6f 6f 70 20 4b 65 63 63 61 6b 45  ryptLoop KeccakE
06f0: 6e 63 72 79 70 74 4c 6f 6f 70 20 61 20 61 20 6e  ncryptLoop a a n
0700: 20 6e 20 2d 2d 20 61 0a 63 2d 66 75 6e 63 74 69   n -- a.c-functi
0710: 6f 6e 20 4b 65 63 63 61 6b 44 65 63 72 79 70 74  on KeccakDecrypt
0720: 4c 6f 6f 70 20 4b 65 63 63 61 6b 44 65 63 72 79  Loop KeccakDecry
0730: 70 74 4c 6f 6f 70 20 61 20 61 20 6e 20 6e 20 2d  ptLoop a a n n -
0740: 2d 20 61 0a 0a                                   - a..