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;
}
Exemple #2
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);
    }
}