#include "bee2/core/mem.h"
#include "bee2/core/util.h"
#include "bee2/crypto/belt.h"
#include "belt_lcl.h"
void beltCompr(u32 h[8], const u32 X[8], void* stack)
{
u32* buf = (u32*)stack;
ASSERT(memIsDisjoint3(h, 32, X, 32, buf, 48));
beltBlockXor(buf, h, h + 4);
beltBlockCopy(buf + 4, buf);
beltBlockEncr2(buf, X);
beltBlockXor2(buf, buf + 4);
beltBlockCopy(buf + 8, h);
beltBlockCopy(buf + 4, h + 4);
beltBlockCopy(h, X);
beltBlockEncr2(h, buf);
beltBlockXor2(h, X);
beltBlockNeg(buf + 4, buf);
beltBlockCopy(h + 4, X + 4);
beltBlockEncr2(h + 4, buf + 4);
beltBlockXor2(h + 4, X + 4);
}
void beltCompr2(u32 s[4], u32 h[8], const u32 X[8], void* stack)
{
u32* buf = (u32*)stack;
ASSERT(memIsDisjoint4(s, 16, h, 32, X, 32, buf, 48));
beltBlockXor(buf, h, h + 4);
beltBlockCopy(buf + 4, buf);
beltBlockEncr2(buf, X);
beltBlockXor2(buf, buf + 4);
beltBlockXor2(s, buf);
beltBlockCopy(buf + 8, h);
beltBlockCopy(buf + 4, h + 4);
beltBlockCopy(h, X);
beltBlockEncr2(h, buf);
beltBlockXor2(h, X);
beltBlockNeg(buf + 4, buf);
beltBlockCopy(h + 4, X + 4);
beltBlockEncr2(h + 4, buf + 4);
beltBlockXor2(h + 4, X + 4);
}
size_t beltCompr_deep()
{
return 12 * 4;
}