summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Jespersen <laumann.thomas@gmail.com>2014-12-31 10:26:44 +0100
committerThomas Jespersen <laumann.thomas@gmail.com>2014-12-31 10:26:44 +0100
commit1b580a8c9962f0d6081b4fa297ab33b8e3b095b2 (patch)
tree303e484c354788e8ba7712c6499e697fc4ebd626 /src
parent165d7d8bc3a25ce11706a9e9951240eba1b678f2 (diff)
Fix soleg_encode_end()
Diffstat (limited to 'src')
-rw-r--r--src/sole-gmp.c36
1 files changed, 15 insertions, 21 deletions
diff --git a/src/sole-gmp.c b/src/sole-gmp.c
index 2b3bcef..88b6419 100644
--- a/src/sole-gmp.c
+++ b/src/sole-gmp.c
@@ -333,35 +333,30 @@ void soleg_encode_end(soleg_stream *strm)
stream_stat(strm);
/* Writes the last two-three blocks */
- mpz_t db, res;
- mpz_inits(db, res, NULL);
- int have_even_blocks = strm->offset > BLK128SIZ;
+ mpz_t db, res, eof;
+ mpz_inits(db, res, eof, NULL);
+
+ bool have_even_blocks = strm->offset > BLK128SIZ;
if (have_even_blocks) {
soleg_encode_blk256(strm);
/* Composed double EOF */
- mpz_setbit(db, 256);
- mpz_setbit(db, 129);
- soleg_pass1_decompose(db, strm->r, db, strm->b3i);
+ mpz_setbit(eof, 256);
+ mpz_setbit(eof, 129);
+
+ soleg_pass1_decompose(db, strm->r, eof, strm->b3i);
} else {
- mpz_t eof;
mpz_setbit(eof, 128);
-
- blk256_set(&db, 0, strm->b1->hi, strm->b1->lo, strm->b1->hi, strm->b1->lo);
- /* blk256_set(&eof, 0, 0, 1, 0, 0); */
-
- /* Custom compose */
- blk256_add(&db, &db, &eof);
-
- soleg_pass1_decompose(&db, strm->r, &db, strm->b3i, strm->i3);
+ soleg_pass1_compose(db, strm->b1, eof);
+ soleg_pass1_decompose(db, strm->r, db, strm->b3i);
}
- soleg_pass2_regroup(&res, strm->q, strm->r, strm->i3);
- soleg_put_blk256(strm, &res);
+ soleg_pass2_regroup(res, strm->q, strm->r, strm->i3);
+ soleg_put_blk256(strm, res);
/* Cheeky implementation of final Pass 2 */
- soleg_put_blk256(strm, &db);
+ soleg_put_blk256(strm, db);
}
/**
@@ -394,7 +389,6 @@ void soleg_pass1_compose(mpz_t rop,
/**
* Decompose a 256-bit block by (B-3i)
- *
*/
void soleg_pass1_decompose(mpz_t q,
mpz_t rem,
@@ -417,6 +411,6 @@ void soleg_pass2_regroup(mpz_t rop,
mpz_t y,
mpz_t i3)
{
- mpz_mul(rop, y, i3);
- mpz_add(rop, rop, x);
+ mpz_set(rop, x);
+ mpz_addmul(rop, y, i3);
}