1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-23 15:18:16 +00:00

Rewrite streebogs input-data-length-bug workaround to make it easier to understand

This commit is contained in:
jsteube 2019-04-14 16:06:02 +02:00
parent c34f75fe2d
commit eaefbec3fa
2 changed files with 16 additions and 24 deletions

View File

@ -757,7 +757,9 @@ DECLSPEC void streebog256_transform (streebog256_ctx_t *ctx, const u32 *w0, cons
DECLSPEC void streebog256_update_64 (streebog256_ctx_t *ctx, u32 *w0, u32 *w1, u32 *w2, u32 *w3, const int len) DECLSPEC void streebog256_update_64 (streebog256_ctx_t *ctx, u32 *w0, u32 *w1, u32 *w2, u32 *w3, const int len)
{ {
const int pos = ctx->len; const int pos = ctx->len & 63;
ctx->len += len;
if ((pos + len) < 64) if ((pos + len) < 64)
{ {
@ -779,8 +781,6 @@ DECLSPEC void streebog256_update_64 (streebog256_ctx_t *ctx, u32 *w0, u32 *w1, u
ctx->w3[1] |= w3[1]; ctx->w3[1] |= w3[1];
ctx->w3[2] |= w3[2]; ctx->w3[2] |= w3[2];
ctx->w3[3] |= w3[3]; ctx->w3[3] |= w3[3];
ctx->len += len;
} }
else else
{ {
@ -826,8 +826,6 @@ DECLSPEC void streebog256_update_64 (streebog256_ctx_t *ctx, u32 *w0, u32 *w1, u
ctx->w3[1] = c3[1]; ctx->w3[1] = c3[1];
ctx->w3[2] = c3[2]; ctx->w3[2] = c3[2];
ctx->w3[3] = c3[3]; ctx->w3[3] = c3[3];
ctx->len = (pos + len) & 63;
} }
} }
@ -1022,7 +1020,7 @@ DECLSPEC void streebog256_final (streebog256_ctx_t *ctx)
streebog256_g (ctx->h, ctx->n, m, ctx->s_sbob_sl64); streebog256_g (ctx->h, ctx->n, m, ctx->s_sbob_sl64);
u64 sizebuf[8] = { 0 }; u64 sizebuf[8] = { 0 };
sizebuf[7] = hc_swap64_S ((u64) (ctx->len << 3)); sizebuf[7] = hc_swap64_S ((u64) (pos << 3));
streebog256_add (ctx->n, sizebuf); streebog256_add (ctx->n, sizebuf);
@ -1414,7 +1412,9 @@ DECLSPEC void streebog256_transform_vector (streebog256_ctx_vector_t *ctx, const
DECLSPEC void streebog256_update_vector_64 (streebog256_ctx_vector_t *ctx, u32x *w0, u32x *w1, u32x *w2, u32x *w3, const int len) DECLSPEC void streebog256_update_vector_64 (streebog256_ctx_vector_t *ctx, u32x *w0, u32x *w1, u32x *w2, u32x *w3, const int len)
{ {
const int pos = ctx->len; const int pos = ctx->len & 63;
ctx->len += len;
if ((pos + len) < 64) if ((pos + len) < 64)
{ {
@ -1436,8 +1436,6 @@ DECLSPEC void streebog256_update_vector_64 (streebog256_ctx_vector_t *ctx, u32x
ctx->w3[1] |= w3[1]; ctx->w3[1] |= w3[1];
ctx->w3[2] |= w3[2]; ctx->w3[2] |= w3[2];
ctx->w3[3] |= w3[3]; ctx->w3[3] |= w3[3];
ctx->len += len;
} }
else else
{ {
@ -1483,8 +1481,6 @@ DECLSPEC void streebog256_update_vector_64 (streebog256_ctx_vector_t *ctx, u32x
ctx->w3[1] = c3[1]; ctx->w3[1] = c3[1];
ctx->w3[2] = c3[2]; ctx->w3[2] = c3[2];
ctx->w3[3] = c3[3]; ctx->w3[3] = c3[3];
ctx->len = (pos + len) & 63;
} }
} }
@ -1622,7 +1618,7 @@ DECLSPEC void streebog256_final_vector (streebog256_ctx_vector_t *ctx)
streebog256_g_vector (ctx->h, ctx->n, m, ctx->s_sbob_sl64); streebog256_g_vector (ctx->h, ctx->n, m, ctx->s_sbob_sl64);
u64x sizebuf[8] = { 0 }; u64x sizebuf[8] = { 0 };
sizebuf[7] = hc_swap64 ((u64x) (ctx->len << 3)); sizebuf[7] = hc_swap64 ((u64x) (pos << 3));
streebog256_add_vector (ctx->n, sizebuf); streebog256_add_vector (ctx->n, sizebuf);

View File

@ -757,7 +757,9 @@ DECLSPEC void streebog512_transform (streebog512_ctx_t *ctx, const u32 *w0, cons
DECLSPEC void streebog512_update_64 (streebog512_ctx_t *ctx, u32 *w0, u32 *w1, u32 *w2, u32 *w3, const int len) DECLSPEC void streebog512_update_64 (streebog512_ctx_t *ctx, u32 *w0, u32 *w1, u32 *w2, u32 *w3, const int len)
{ {
const int pos = ctx->len; const int pos = ctx->len & 63;
ctx->len += len;
if ((pos + len) < 64) if ((pos + len) < 64)
{ {
@ -779,8 +781,6 @@ DECLSPEC void streebog512_update_64 (streebog512_ctx_t *ctx, u32 *w0, u32 *w1, u
ctx->w3[1] |= w3[1]; ctx->w3[1] |= w3[1];
ctx->w3[2] |= w3[2]; ctx->w3[2] |= w3[2];
ctx->w3[3] |= w3[3]; ctx->w3[3] |= w3[3];
ctx->len += len;
} }
else else
{ {
@ -826,8 +826,6 @@ DECLSPEC void streebog512_update_64 (streebog512_ctx_t *ctx, u32 *w0, u32 *w1, u
ctx->w3[1] = c3[1]; ctx->w3[1] = c3[1];
ctx->w3[2] = c3[2]; ctx->w3[2] = c3[2];
ctx->w3[3] = c3[3]; ctx->w3[3] = c3[3];
ctx->len = (pos + len) & 63;
} }
} }
@ -1022,7 +1020,7 @@ DECLSPEC void streebog512_final (streebog512_ctx_t *ctx)
streebog512_g (ctx->h, ctx->n, m, ctx->s_sbob_sl64); streebog512_g (ctx->h, ctx->n, m, ctx->s_sbob_sl64);
u64 sizebuf[8] = { 0 }; u64 sizebuf[8] = { 0 };
sizebuf[7] = hc_swap64_S ((u64) (ctx->len << 3)); sizebuf[7] = hc_swap64_S ((u64) (pos << 3));
streebog512_add (ctx->n, sizebuf); streebog512_add (ctx->n, sizebuf);
@ -1433,7 +1431,9 @@ DECLSPEC void streebog512_transform_vector (streebog512_ctx_vector_t *ctx, const
DECLSPEC void streebog512_update_vector_64 (streebog512_ctx_vector_t *ctx, u32x *w0, u32x *w1, u32x *w2, u32x *w3, const int len) DECLSPEC void streebog512_update_vector_64 (streebog512_ctx_vector_t *ctx, u32x *w0, u32x *w1, u32x *w2, u32x *w3, const int len)
{ {
const int pos = ctx->len; const int pos = ctx->len & 63;
ctx->len += len;
if ((pos + len) < 64) if ((pos + len) < 64)
{ {
@ -1455,8 +1455,6 @@ DECLSPEC void streebog512_update_vector_64 (streebog512_ctx_vector_t *ctx, u32x
ctx->w3[1] |= w3[1]; ctx->w3[1] |= w3[1];
ctx->w3[2] |= w3[2]; ctx->w3[2] |= w3[2];
ctx->w3[3] |= w3[3]; ctx->w3[3] |= w3[3];
ctx->len += len;
} }
else else
{ {
@ -1502,8 +1500,6 @@ DECLSPEC void streebog512_update_vector_64 (streebog512_ctx_vector_t *ctx, u32x
ctx->w3[1] = c3[1]; ctx->w3[1] = c3[1];
ctx->w3[2] = c3[2]; ctx->w3[2] = c3[2];
ctx->w3[3] = c3[3]; ctx->w3[3] = c3[3];
ctx->len = (pos + len) & 63;
} }
} }
@ -1641,7 +1637,7 @@ DECLSPEC void streebog512_final_vector (streebog512_ctx_vector_t *ctx)
streebog512_g_vector (ctx->h, ctx->n, m, ctx->s_sbob_sl64); streebog512_g_vector (ctx->h, ctx->n, m, ctx->s_sbob_sl64);
u64x sizebuf[8] = { 0 }; u64x sizebuf[8] = { 0 };
sizebuf[7] = hc_swap64 ((u64x) (ctx->len << 3)); sizebuf[7] = hc_swap64 ((u64x) (pos << 3));
streebog512_add_vector (ctx->n, sizebuf); streebog512_add_vector (ctx->n, sizebuf);