int Keccak_SpongeInitialize(Keccak_SpongeInstance *instance, unsigned int rate, unsigned int capacity) { if (rate+capacity != 1600) return 1; if ((rate <= 0) || (rate > 1600) || ((rate % 8) != 0)) return 1; KeccakF1600_Initialize(); KeccakF1600_StateInitialize(instance->state); instance->rate = rate; instance->byteIOIndex = 0; instance->squeezing = 0; return 0; }
void displayPermutationIntermediateValues() { unsigned char state[KeccakF_width/8]; #ifdef KeccakReference32BI const char *fileName = "KeccakF-1600-IntermediateValues32BI.txt"; #else const char *fileName = "KeccakF-1600-IntermediateValues.txt"; #endif FILE *f; f = fopen(fileName, "w"); if (f == NULL) printf("Could not open %s\n", fileName); else { KeccakF1600_Initialize(); fprintf(f, "+++ The round constants +++\n"); fprintf(f, "\n"); displayRoundConstants(f); fprintf(f, "+++ The rho offsets +++\n"); fprintf(f, "\n"); displayRhoOffsets(f); displaySetIntermediateValueFile(f); displaySetLevel(3); fprintf(f, "+++ Example with the all-zero input +++\n"); fprintf(f, "\n"); memset(state, 0, KeccakF_width/8); KeccakF1600_StatePermute(state); fprintf(f, "+++ Example taking the previous output as input +++\n"); fprintf(f, "\n"); KeccakF1600_StatePermute(state); fclose(f); displaySetIntermediateValueFile(0); } }