Artifact
48a93f299782bb0d00a00223ecffa0cdbc37426c:
- File
keccaklib.fs
— part of check-in
[295cbe28ec]
at
2019-10-03 14:35:43
on branch trunk
— HOSTPREFIX env variable
(user:
bernd
size: 1861)
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..