Beispiel #1
0
HashReturn Init(hashState *state, int hashbitlen)
{
    KeccakInitialize();
    switch(hashbitlen) {
        case 0: // Arbitrary length output
            state->capacity = 576;
            break;
        case 224:
            state->capacity = 448;
            break;
        case 256:
            state->capacity = 512;
            break;
        case 384:
            state->capacity = 768;
            break;
        case 512:
            state->capacity = 1024;
            break;
        default:
            return BAD_HASHLEN;
    }
    state->rate = KeccakPermutationSize - state->capacity;
    state->diversifier = hashbitlen/8;
    state->hashbitlen = hashbitlen;
    KeccakInitializeState(state->state);
    memset(state->dataQueue, 0, KeccakMaximumRateInBytes);
    state->bitsInQueue = 0;
    state->squeezing = 0;
    state->bitsAvailableForSqueezing = 0;

    return SUCCESS;
}
Beispiel #2
0
int InitDuplex(duplexState *state, unsigned int rate, unsigned int capacity)
{
    if (rate+capacity != 1600)
        return 1;
    if ((rate <= 0) || (rate > 1600))
        return 1;
    KeccakInitialize();
    state->rate = rate;
    state->capacity = capacity;
    state->rho_max = rate-2;
    KeccakInitializeState(state->state);
    return 0;
}
Beispiel #3
0
static int InitSponge(spongeState *state, unsigned int rate, unsigned int capacity)
{
    if (rate+capacity != 1600)
        return 1;
    if ((rate <= 0) || (rate >= 1600) || ((rate % 64) != 0))
        return 1;
    KeccakInitialize();
    state->rate = rate;
    state->capacity = capacity;
    state->fixedOutputLength = 0;
    KeccakInitializeState(state->state);
    memset(state->dataQueue, 0, KeccakMaximumRateInBytes);
    state->bitsInQueue = 0;
    state->squeezing = 0;
    state->bitsAvailableForSqueezing = 0;

    return 0;
}
Beispiel #4
0
HashReturn InitEx(hashState *state, unsigned int rate, unsigned int capacity, unsigned char diversifier)
{
    if (rate+capacity != 1600)
        return BAD_HASHLEN;
    if ((rate <= 0) || (rate >= 1600) || ((rate % 64) != 0))
        return BAD_HASHLEN;
    KeccakInitialize();
    state->rate = rate;
    state->capacity = capacity;
    state->diversifier = diversifier;
    state->hashbitlen = 0;
    KeccakInitializeState(state->state);
    memset(state->dataQueue, 0, KeccakMaximumRateInBytes);
    state->bitsInQueue = 0;
    state->squeezing = 0;
    state->bitsAvailableForSqueezing = 0;

    return SUCCESS;
}