gost28147_set_param(&ctx, param);
gost28147_encrypt(&ctx, GOST28147_KEY_SIZE, enc, cek);
- gost28147_imit_init(&ictx);
gost28147_imit_set_key(&ictx, GOST28147_KEY_SIZE, kd);
gost28147_imit_set_param(&ictx, param);
gost28147_imit_set_nonce(&ictx, ukm);
gost28147_set_param(&ctx, param);
gost28147_decrypt(&ctx, GOST28147_KEY_SIZE, cek, enc);
- gost28147_imit_init(&ictx);
gost28147_imit_set_key(&ictx, GOST28147_KEY_SIZE, kd);
gost28147_imit_set_param(&ictx, param);
gost28147_imit_set_nonce(&ictx, ukm);
}
}
-void
-gost28147_imit_init(struct gost28147_imit_ctx *ctx)
+static void
+_gost28147_imit_reinit(struct gost28147_imit_ctx *ctx)
{
- memset(ctx->state, 0, GOST28147_BLOCK_SIZE);
+ ctx->state[0] = 0;
+ ctx->state[1] = 0;
ctx->index = 0;
ctx->count = 0;
- gost28147_set_param(&ctx->cctx, &gost28147_param_TC26_Z); /* Default */
}
void
assert(key);
_gost28147_set_key(&ctx->cctx, key);
- /* Do not reset param here */
+ _gost28147_imit_reinit(ctx);
+ if (!ctx->cctx.sbox)
+ gost28147_set_param(&ctx->cctx, &gost28147_param_TC26_Z);
}
void
}
_nettle_write_le32(length, digest, ctx->state);
- gost28147_imit_init(ctx);
+ _gost28147_imit_reinit(ctx);
}
#endif
#define gost28147_key_wrap_cryptopro _gnutls_gost28147_key_wrap_cryptopro
#define gost28147_key_unwrap_cryptopro _gnutls_gost28147_key_unwrap_cryptopro
-#define gost28147_imit_init _gnutls_gost28147_imit_init
#define gost28147_imit_set_key _gnutls_gost28147_imit_set_key
#define gost28147_imit_set_nonce _gnutls_gost28147_imit_set_nonce
#define gost28147_imit_set_param _gnutls_gost28147_imit_set_param
uint32_t state[GOST28147_IMIT_BLOCK_SIZE/4];
};
-void
-gost28147_imit_init(struct gost28147_imit_ctx *ctx);
-
void
gost28147_imit_set_key(struct gost28147_imit_ctx *ctx,
size_t length,