int RiverKeyak_Initialize(Keyak_Instance *instance, const unsigned char *key, unsigned int keySizeInBits, const unsigned char *nonce) { int result = Keccak_DuplexInitialize(&(instance->duplex), 548, 252); if (result != 0) return result; instance->phase = Keyak_Phase_FeedingAssociatedData; return Keyak_Initialize(&(instance->duplex), key, keySizeInBits, nonce); }
void displayDuplexIntermediateValuesOne(FILE *f, unsigned int rate, unsigned int capacity) { Keccak_DuplexInstance duplex; unsigned char input[512]; unsigned int inBitLen; unsigned char output[512]; unsigned int outBitLen; unsigned int i, j; const unsigned int M = 239*251; unsigned int x = 33; Keccak_DuplexInitialize(&duplex, rate, capacity); displayStateAsBytes(1, "Initial state", duplex.state); for(i=0; i<=rate+120; i+=123) { inBitLen = i; if (inBitLen > (rate-2)) inBitLen = rate-2; memset(input, 0, 512); for(j=0; j<inBitLen; j++) { x = (x*x) % M; if ((x % 2) != 0) input[j/8] |= 1 << (j%8); } { char text[100]; sprintf(text, "Input (%d bits)", inBitLen); displayBytes(1, text, input, (inBitLen+7)/8); } outBitLen = rate; if ((inBitLen%8) == 0) Keccak_Duplexing(&duplex, input, inBitLen/8, output, (outBitLen+7)/8, 0x01); else Keccak_Duplexing(&duplex, input, inBitLen/8, output, (outBitLen+7)/8, input[inBitLen/8] | (1 << (inBitLen%8))); { char text[100]; sprintf(text, "Output (%d bits)", outBitLen); displayBytes(1, text, output, (outBitLen+7)/8); } } }