/ c_src / displayIntermediateValues.c
displayIntermediateValues.c
  1  /*
  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/
  5  
  6  Implementation by the designers,
  7  hereby denoted as "the implementer".
  8  
  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/
 12  */
 13  
 14  #include <stdio.h>
 15  #include "displayIntermediateValues.h"
 16  #include "KeccakNISTInterface.h"
 17  
 18  FILE *intermediateValueFile = 0;
 19  int displayLevel = 0;
 20  
 21  void displaySetIntermediateValueFile(FILE *f)
 22  {
 23      intermediateValueFile = f;
 24  }
 25  
 26  void displaySetLevel(int level)
 27  {
 28      displayLevel = level;
 29  }
 30  
 31  void displayBytes(int level, const char *text, const unsigned char *bytes, unsigned int size)
 32  {
 33      unsigned int i;
 34  
 35      if ((intermediateValueFile) && (level <= displayLevel)) {
 36          fprintf(intermediateValueFile, "%s:\n", text);
 37          for(i=0; i<size; i++)
 38              fprintf(intermediateValueFile, "%02X ", bytes[i]);
 39          fprintf(intermediateValueFile, "\n");
 40          fprintf(intermediateValueFile, "\n");
 41      }
 42  }
 43  
 44  void displayBits(int level, const char *text, const unsigned char *data, unsigned int size, int MSBfirst)
 45  {
 46      unsigned int i, iByte, iBit;
 47  
 48      if ((intermediateValueFile) && (level <= displayLevel)) {
 49          fprintf(intermediateValueFile, "%s:\n", text);
 50          for(i=0; i<size; i++) {
 51              iByte = i/8;
 52              iBit = i%8;
 53              if (MSBfirst)
 54                  fprintf(intermediateValueFile, "%d ", ((data[iByte] << iBit) & 0x80) != 0);
 55              else
 56                  fprintf(intermediateValueFile, "%d ", ((data[iByte] >> iBit) & 0x01) != 0);
 57          }
 58          fprintf(intermediateValueFile, "\n");
 59          fprintf(intermediateValueFile, "\n");
 60      }
 61  }
 62  
 63  void displayStateAsBytes(int level, const char *text, const unsigned char *state)
 64  {
 65      displayBytes(level, text, state, KeccakPermutationSizeInBytes);
 66  }
 67  
 68  void displayStateAs32bitWords(int level, const char *text, const unsigned int *state)
 69  {
 70      unsigned int i;
 71  
 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]);
 76              if ((i%5) == 4)
 77                  fprintf(intermediateValueFile, "\n");
 78              else
 79                  fprintf(intermediateValueFile, " ");
 80          }
 81      }
 82  }
 83  
 84  void displayStateAs64bitWords(int level, const char *text, const unsigned long long int *state)
 85  {
 86      unsigned int i;
 87  
 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));
 93              if ((i%5) == 4)
 94                  fprintf(intermediateValueFile, "\n");
 95              else
 96                  fprintf(intermediateValueFile, " ");
 97          }
 98      }
 99  }
100  
101  void displayRoundNumber(int level, unsigned int i)
102  {
103      if ((intermediateValueFile) && (level <= displayLevel)) {
104          fprintf(intermediateValueFile, "\n");
105          fprintf(intermediateValueFile, "--- Round %d ---\n", i);
106          fprintf(intermediateValueFile, "\n");
107      }
108  }
109  
110  void displayText(int level, const char *text)
111  {
112      if ((intermediateValueFile) && (level <= displayLevel)) {
113          fprintf(intermediateValueFile, "%s", text);
114          fprintf(intermediateValueFile, "\n");
115          fprintf(intermediateValueFile, "\n");
116      }
117  }