|
|
|
@ -1227,29 +1227,43 @@ DECLSPEC void streebog512_hmac_final (streebog512_hmac_ctx_t *ctx)
|
|
|
|
|
{
|
|
|
|
|
streebog512_final (&ctx->ipad);
|
|
|
|
|
|
|
|
|
|
u32 t0[4];
|
|
|
|
|
u32 t1[4];
|
|
|
|
|
u32 t2[4];
|
|
|
|
|
u32 t3[4];
|
|
|
|
|
|
|
|
|
|
t0[0] = h32_from_64_S (ctx->ipad.h[7]);
|
|
|
|
|
t0[1] = l32_from_64_S (ctx->ipad.h[7]);
|
|
|
|
|
t0[2] = h32_from_64_S (ctx->ipad.h[6]);
|
|
|
|
|
t0[3] = l32_from_64_S (ctx->ipad.h[6]);
|
|
|
|
|
t1[0] = h32_from_64_S (ctx->ipad.h[5]);
|
|
|
|
|
t1[1] = l32_from_64_S (ctx->ipad.h[5]);
|
|
|
|
|
t1[2] = h32_from_64_S (ctx->ipad.h[4]);
|
|
|
|
|
t1[3] = l32_from_64_S (ctx->ipad.h[4]);
|
|
|
|
|
t2[0] = h32_from_64_S (ctx->ipad.h[3]);
|
|
|
|
|
t2[1] = l32_from_64_S (ctx->ipad.h[3]);
|
|
|
|
|
t2[2] = h32_from_64_S (ctx->ipad.h[2]);
|
|
|
|
|
t2[3] = l32_from_64_S (ctx->ipad.h[2]);
|
|
|
|
|
t3[0] = h32_from_64_S (ctx->ipad.h[1]);
|
|
|
|
|
t3[1] = l32_from_64_S (ctx->ipad.h[1]);
|
|
|
|
|
t3[2] = h32_from_64_S (ctx->ipad.h[0]);
|
|
|
|
|
t3[3] = l32_from_64_S (ctx->ipad.h[0]);
|
|
|
|
|
|
|
|
|
|
streebog512_update_64 (&ctx->opad, t0, t1, t2, t3, 64);
|
|
|
|
|
ctx->opad.w0[0] = h32_from_64_S (ctx->ipad.h[7]);
|
|
|
|
|
ctx->opad.w0[1] = l32_from_64_S (ctx->ipad.h[7]);
|
|
|
|
|
ctx->opad.w0[2] = h32_from_64_S (ctx->ipad.h[6]);
|
|
|
|
|
ctx->opad.w0[3] = l32_from_64_S (ctx->ipad.h[6]);
|
|
|
|
|
ctx->opad.w1[0] = h32_from_64_S (ctx->ipad.h[5]);
|
|
|
|
|
ctx->opad.w1[1] = l32_from_64_S (ctx->ipad.h[5]);
|
|
|
|
|
ctx->opad.w1[2] = h32_from_64_S (ctx->ipad.h[4]);
|
|
|
|
|
ctx->opad.w1[3] = l32_from_64_S (ctx->ipad.h[4]);
|
|
|
|
|
ctx->opad.w2[0] = h32_from_64_S (ctx->ipad.h[3]);
|
|
|
|
|
ctx->opad.w2[1] = l32_from_64_S (ctx->ipad.h[3]);
|
|
|
|
|
ctx->opad.w2[2] = h32_from_64_S (ctx->ipad.h[2]);
|
|
|
|
|
ctx->opad.w2[3] = l32_from_64_S (ctx->ipad.h[2]);
|
|
|
|
|
ctx->opad.w3[0] = h32_from_64_S (ctx->ipad.h[1]);
|
|
|
|
|
ctx->opad.w3[1] = l32_from_64_S (ctx->ipad.h[1]);
|
|
|
|
|
ctx->opad.w3[2] = h32_from_64_S (ctx->ipad.h[0]);
|
|
|
|
|
ctx->opad.w3[3] = l32_from_64_S (ctx->ipad.h[0]);
|
|
|
|
|
|
|
|
|
|
ctx->opad.len = 0;
|
|
|
|
|
|
|
|
|
|
streebog512_transform (&ctx->opad, ctx->opad.w0, ctx->opad.w1, ctx->opad.w2, ctx->opad.w3);
|
|
|
|
|
|
|
|
|
|
ctx->opad.w0[0] = 0;
|
|
|
|
|
ctx->opad.w0[1] = 0;
|
|
|
|
|
ctx->opad.w0[2] = 0;
|
|
|
|
|
ctx->opad.w0[3] = 0;
|
|
|
|
|
ctx->opad.w1[0] = 0;
|
|
|
|
|
ctx->opad.w1[1] = 0;
|
|
|
|
|
ctx->opad.w1[2] = 0;
|
|
|
|
|
ctx->opad.w1[3] = 0;
|
|
|
|
|
ctx->opad.w2[0] = 0;
|
|
|
|
|
ctx->opad.w2[1] = 0;
|
|
|
|
|
ctx->opad.w2[2] = 0;
|
|
|
|
|
ctx->opad.w2[3] = 0;
|
|
|
|
|
ctx->opad.w3[0] = 0;
|
|
|
|
|
ctx->opad.w3[1] = 0;
|
|
|
|
|
ctx->opad.w3[2] = 0;
|
|
|
|
|
ctx->opad.w3[3] = 0;
|
|
|
|
|
|
|
|
|
|
streebog512_final (&ctx->opad);
|
|
|
|
|
}
|
|
|
|
@ -1822,29 +1836,43 @@ DECLSPEC void streebog512_hmac_final_vector (streebog512_hmac_ctx_vector_t *ctx)
|
|
|
|
|
{
|
|
|
|
|
streebog512_final_vector (&ctx->ipad);
|
|
|
|
|
|
|
|
|
|
u32x t0[4];
|
|
|
|
|
u32x t1[4];
|
|
|
|
|
u32x t2[4];
|
|
|
|
|
u32x t3[4];
|
|
|
|
|
|
|
|
|
|
t0[0] = h32_from_64 (ctx->ipad.h[7]);
|
|
|
|
|
t0[1] = l32_from_64 (ctx->ipad.h[7]);
|
|
|
|
|
t0[2] = h32_from_64 (ctx->ipad.h[6]);
|
|
|
|
|
t0[3] = l32_from_64 (ctx->ipad.h[6]);
|
|
|
|
|
t1[0] = h32_from_64 (ctx->ipad.h[5]);
|
|
|
|
|
t1[1] = l32_from_64 (ctx->ipad.h[5]);
|
|
|
|
|
t1[2] = h32_from_64 (ctx->ipad.h[4]);
|
|
|
|
|
t1[3] = l32_from_64 (ctx->ipad.h[4]);
|
|
|
|
|
t2[0] = h32_from_64 (ctx->ipad.h[3]);
|
|
|
|
|
t2[1] = l32_from_64 (ctx->ipad.h[3]);
|
|
|
|
|
t2[2] = h32_from_64 (ctx->ipad.h[2]);
|
|
|
|
|
t2[3] = l32_from_64 (ctx->ipad.h[2]);
|
|
|
|
|
t3[0] = h32_from_64 (ctx->ipad.h[1]);
|
|
|
|
|
t3[1] = l32_from_64 (ctx->ipad.h[1]);
|
|
|
|
|
t3[2] = h32_from_64 (ctx->ipad.h[0]);
|
|
|
|
|
t3[3] = l32_from_64 (ctx->ipad.h[0]);
|
|
|
|
|
|
|
|
|
|
streebog512_update_vector_64 (&ctx->opad, t0, t1, t2, t3, 64);
|
|
|
|
|
ctx->opad.w0[0] = h32_from_64 (ctx->ipad.h[7]);
|
|
|
|
|
ctx->opad.w0[1] = l32_from_64 (ctx->ipad.h[7]);
|
|
|
|
|
ctx->opad.w0[2] = h32_from_64 (ctx->ipad.h[6]);
|
|
|
|
|
ctx->opad.w0[3] = l32_from_64 (ctx->ipad.h[6]);
|
|
|
|
|
ctx->opad.w1[0] = h32_from_64 (ctx->ipad.h[5]);
|
|
|
|
|
ctx->opad.w1[1] = l32_from_64 (ctx->ipad.h[5]);
|
|
|
|
|
ctx->opad.w1[2] = h32_from_64 (ctx->ipad.h[4]);
|
|
|
|
|
ctx->opad.w1[3] = l32_from_64 (ctx->ipad.h[4]);
|
|
|
|
|
ctx->opad.w2[0] = h32_from_64 (ctx->ipad.h[3]);
|
|
|
|
|
ctx->opad.w2[1] = l32_from_64 (ctx->ipad.h[3]);
|
|
|
|
|
ctx->opad.w2[2] = h32_from_64 (ctx->ipad.h[2]);
|
|
|
|
|
ctx->opad.w2[3] = l32_from_64 (ctx->ipad.h[2]);
|
|
|
|
|
ctx->opad.w3[0] = h32_from_64 (ctx->ipad.h[1]);
|
|
|
|
|
ctx->opad.w3[1] = l32_from_64 (ctx->ipad.h[1]);
|
|
|
|
|
ctx->opad.w3[2] = h32_from_64 (ctx->ipad.h[0]);
|
|
|
|
|
ctx->opad.w3[3] = l32_from_64 (ctx->ipad.h[0]);
|
|
|
|
|
|
|
|
|
|
ctx->opad.len = 0;
|
|
|
|
|
|
|
|
|
|
streebog512_transform_vector (&ctx->opad, ctx->opad.w0, ctx->opad.w1, ctx->opad.w2, ctx->opad.w3);
|
|
|
|
|
|
|
|
|
|
ctx->opad.w0[0] = 0;
|
|
|
|
|
ctx->opad.w0[1] = 0;
|
|
|
|
|
ctx->opad.w0[2] = 0;
|
|
|
|
|
ctx->opad.w0[3] = 0;
|
|
|
|
|
ctx->opad.w1[0] = 0;
|
|
|
|
|
ctx->opad.w1[1] = 0;
|
|
|
|
|
ctx->opad.w1[2] = 0;
|
|
|
|
|
ctx->opad.w1[3] = 0;
|
|
|
|
|
ctx->opad.w2[0] = 0;
|
|
|
|
|
ctx->opad.w2[1] = 0;
|
|
|
|
|
ctx->opad.w2[2] = 0;
|
|
|
|
|
ctx->opad.w2[3] = 0;
|
|
|
|
|
ctx->opad.w3[0] = 0;
|
|
|
|
|
ctx->opad.w3[1] = 0;
|
|
|
|
|
ctx->opad.w3[2] = 0;
|
|
|
|
|
ctx->opad.w3[3] = 0;
|
|
|
|
|
|
|
|
|
|
streebog512_final_vector (&ctx->opad);
|
|
|
|
|
}
|
|
|
|
|