2 The Keccak sponge function, designed by Guido Bertoni, Joan Daemen,
3 Michaƫl Peeters and Gilles Van Assche. For more information, feedback or
4 questions, please refer to our website: http://keccak.noekeon.org/
6 Implementation by the designers,
7 hereby denoted as "the implementer".
9 To the extent possible under law, the implementer has waived all copyright
10 and related or neighboring rights to the source code in this file.
11 http://creativecommons.org/publicdomain/zero/1.0/
15 #include "displayIntermediateValues.h"
16 #include "KeccakNISTInterface.h"
18 FILE *intermediateValueFile
= 0;
21 void displaySetIntermediateValueFile(FILE *f
)
23 intermediateValueFile
= f
;
26 void displaySetLevel(int level
)
31 void displayBytes(int level
, const char *text
, const unsigned char *bytes
, unsigned int size
)
35 if ((intermediateValueFile
) && (level
<= displayLevel
)) {
36 fprintf(intermediateValueFile
, "%s:\n", text
);
38 fprintf(intermediateValueFile
, "%02X ", bytes
[i
]);
39 fprintf(intermediateValueFile
, "\n");
40 fprintf(intermediateValueFile
, "\n");
44 void displayBits(int level
, const char *text
, const unsigned char *data
, unsigned int size
, int MSBfirst
)
46 unsigned int i
, iByte
, iBit
;
48 if ((intermediateValueFile
) && (level
<= displayLevel
)) {
49 fprintf(intermediateValueFile
, "%s:\n", text
);
50 for(i
=0; i
<size
; i
++) {
54 fprintf(intermediateValueFile
, "%d ", ((data
[iByte
] << iBit
) & 0x80) != 0);
56 fprintf(intermediateValueFile
, "%d ", ((data
[iByte
] >> iBit
) & 0x01) != 0);
58 fprintf(intermediateValueFile
, "\n");
59 fprintf(intermediateValueFile
, "\n");
63 void displayStateAsBytes(int level
, const char *text
, const unsigned char *state
)
65 displayBytes(level
, text
, state
, KeccakPermutationSizeInBytes
);
68 void displayStateAs32bitWords(int level
, const char *text
, const unsigned int *state
)
72 if ((intermediateValueFile
) && (level
<= displayLevel
)) {
73 fprintf(intermediateValueFile
, "%s:\n", text
);
74 for(i
=0; i
<KeccakPermutationSize
/64; i
++) {
75 fprintf(intermediateValueFile
, "%08X:%08X", (unsigned int)state
[2*i
+0], (unsigned int)state
[2*i
+1]);
77 fprintf(intermediateValueFile
, "\n");
79 fprintf(intermediateValueFile
, " ");
84 void displayStateAs64bitWords(int level
, const char *text
, const unsigned long long int *state
)
88 if ((intermediateValueFile
) && (level
<= displayLevel
)) {
89 fprintf(intermediateValueFile
, "%s:\n", text
);
90 for(i
=0; i
<KeccakPermutationSize
/64; i
++) {
91 fprintf(intermediateValueFile
, "%08X", (unsigned int)(state
[i
] >> 32));
92 fprintf(intermediateValueFile
, "%08X", (unsigned int)(state
[i
] & 0xFFFFFFFFULL
));
94 fprintf(intermediateValueFile
, "\n");
96 fprintf(intermediateValueFile
, " ");
101 void displayRoundNumber(int level
, unsigned int i
)
103 if ((intermediateValueFile
) && (level
<= displayLevel
)) {
104 fprintf(intermediateValueFile
, "\n");
105 fprintf(intermediateValueFile
, "--- Round %d ---\n", i
);
106 fprintf(intermediateValueFile
, "\n");
110 void displayText(int level
, const char *text
)
112 if ((intermediateValueFile
) && (level
<= displayLevel
)) {
113 fprintf(intermediateValueFile
, text
);
114 fprintf(intermediateValueFile
, "\n");
115 fprintf(intermediateValueFile
, "\n");