ctx->base.ctxr->data[i] = cpu_to_le32(req->processed / blocksize);
                }
        } else if (req->digest == CONTEXT_CONTROL_DIGEST_HMAC) {
-               cdesc->control_data.control0 |= CONTEXT_CONTROL_SIZE(10);
+               cdesc->control_data.control0 |= CONTEXT_CONTROL_SIZE(2 * req->state_sz / sizeof(u32));
 
-               memcpy(ctx->base.ctxr->data, ctx->ipad, digestsize);
-               memcpy(ctx->base.ctxr->data + digestsize / sizeof(u32),
-                      ctx->opad, digestsize);
+               memcpy(ctx->base.ctxr->data, ctx->ipad, req->state_sz);
+               memcpy(ctx->base.ctxr->data + req->state_sz / sizeof(u32),
+                      ctx->opad, req->state_sz);
        }
 }