Remove tinv
authorPanu Matilainen <pmatilai@redhat.com>
Fri, 2 Nov 2007 08:18:23 +0000 (10:18 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Fri, 2 Nov 2007 08:18:23 +0000 (10:18 +0200)
rpmio/Makefile.am
rpmio/tinv.c [deleted file]

index 5b5a11a..8878e7b 100644 (file)
@@ -51,10 +51,6 @@ check_PROGRAMS += tglob
 tglob_SOURCES = tglob.c rpmio_internal.h
 tglob_LDADD = librpmio.la @WITH_POPT_LIB@
 
-check_PROGRAMS += tinv
-tinv_SOURCES = tinv.c
-tinv_LDADD = librpmio.la @WITH_POPT_LIB@
-
 check_PROGRAMS += tkey
 tkey_SOURCES = tkey.c rpmio_internal.h
 tkey_LDADD = librpmio.la @WITH_POPT_LIB@
diff --git a/rpmio/tinv.c b/rpmio/tinv.c
deleted file mode 100644 (file)
index 8e17239..0000000
+++ /dev/null
@@ -1,512 +0,0 @@
-#include "system.h"
-#include <beecrypt/mpbarrett.h>
-#include <beecrypt/mp.h>
-#include <popt.h>
-#include "debug.h"
-
-static int _debug = 0;
-
-static int Zmpbinv_w(const mpbarrett* b, size_t xsize, const mpw* xdata, mpw* result, mpw* wksp)
-{
-       size_t ysize = b->size+1;
-       size_t ubits, vbits;
-       int k = 0;
-
-       mpw* u = wksp;
-       mpw* v = u+ysize;
-       mpw* A = v+ysize;
-       mpw* B = A+ysize;
-       mpw* C = B+ysize;
-       mpw* D = C+ysize;
-
-       mpsetx(ysize, u, xsize, xdata);
-       mpsetx(ysize, v, b->size, b->modl);
-       mpsetw(ysize, A, 1);
-       mpzero(ysize, B);
-       mpzero(ysize, C);
-       mpsetw(ysize, D, 1);
-
-       for (k = 0; mpeven(ysize, u) && mpeven(ysize, v); k++) {
-               mpdivtwo(ysize, u);
-               mpdivtwo(ysize, v);
-       }
-
-       if (mpeven(ysize, u))
-               (void) mpadd(ysize, u, v);
-
-if (_debug < 0)
-fprintf(stderr, "       u: "), mpfprintln(stderr, ysize, u);
-if (_debug < 0)
-fprintf(stderr, "       v: "), mpfprintln(stderr, ysize, v);
-if (_debug < 0)
-fprintf(stderr, "       A: "), mpfprintln(stderr, ysize, A);
-if (_debug < 0)
-fprintf(stderr, "       B: "), mpfprintln(stderr, ysize, B);
-if (_debug < 0)
-fprintf(stderr, "       C: "), mpfprintln(stderr, ysize, C);
-if (_debug < 0)
-fprintf(stderr, "       D: "), mpfprintln(stderr, ysize, D);
-
-       ubits = vbits = MP_WORDS_TO_BITS(ysize);
-
-       do {
-               while (mpeven(ysize, v)) {
-                       mpsdivtwo(ysize, v);
-                       vbits -= 1;
-                       if (mpodd(ysize, C)) {
-                               (void) mpaddx(ysize, C, b->size, b->modl);
-                               (void) mpsubx(ysize, D, xsize, xdata);
-                       }
-                       mpsdivtwo(ysize, C);
-                       mpsdivtwo(ysize, D);
-if (_debug < 0)
-fprintf(stderr, "-->>   v: "), mpfprintln(stderr, ysize, v);
-               }
-
-               if (ubits >= vbits) {
-                       mpw* swapu;
-                       size_t  swapi;
-
-if (_debug < 0)
-fprintf(stderr, "--> (swap u <-> v)\n");
-                       swapu = u;      u = v;          v = swapu;
-                       swapi = ubits;  ubits = vbits;  vbits = swapi;
-                       swapu = A;      A = C;          C = swapu;
-                       swapu = B;      B = D;          D = swapu;
-               }
-
-               if (!((u[ysize-1] + v[ysize-1]) & 0x3)) {
-if (_debug < 0)
-fprintf(stderr, "--> (even parity)\n");
-                       mpadd(ysize, v, u);
-                       mpadd(ysize, C, A);
-                       mpadd(ysize, D, B);
-               } else {
-if (_debug < 0)
-fprintf(stderr, "--> (odd parity)\n");
-                       mpsub(ysize, v, u);
-                       mpsub(ysize, C, A);
-                       mpsub(ysize, D, B);
-               }
-if (_debug < 0)
-fprintf(stderr, "       v: "), mpfprintln(stderr, ysize, v);
-if (_debug < 0)
-fprintf(stderr, "       C: "), mpfprintln(stderr, ysize, C);
-if (_debug < 0)
-fprintf(stderr, "       D: "), mpfprintln(stderr, ysize, D);
-               vbits++;
-       } while (mpnz(ysize, v));
-
-#ifdef NOTYET
-       if (!mpisone(ysize, u))
-               return 0;
-#endif
-
-       if (result) {
-               mpsetx(b->size, result, ysize, A);
-               if (*A & 0x80000000)
-                       (void) mpneg(b->size, result);
-               while (--k > 0)
-                       mpadd(b->size, result, result);
-       }
-
-fprintf(stderr, "=== EXIT: "), mpfprintln(stderr, b->size, result);
-fprintf(stderr, "       u: "), mpfprintln(stderr, ysize, u);
-fprintf(stderr, "       v: "), mpfprintln(stderr, ysize, v);
-fprintf(stderr, "       A: "), mpfprintln(stderr, ysize, A);
-fprintf(stderr, "       B: "), mpfprintln(stderr, ysize, B);
-fprintf(stderr, "       C: "), mpfprintln(stderr, ysize, C);
-fprintf(stderr, "       D: "), mpfprintln(stderr, ysize, D);
-
-       return 1;
-}
-
-static int Ympbinv_w(const mpbarrett* b, size_t xsize, const mpw* xdata, mpw* result, mpw* wksp)
-{
-       size_t  ysize = b->size+1;
-       int k;
-       mpw* u1 = wksp;
-       mpw* u2 = u1+ysize;
-       mpw* u3 = u2+ysize;
-       mpw* v1 = u3+ysize;
-       mpw* v2 = v1+ysize;
-       mpw* v3 = v2+ysize;
-       mpw* t1 = v3+ysize;
-       mpw* t2 = t1+ysize;
-       mpw* t3 = t2+ysize;
-       mpw* u  = t3+ysize;
-       mpw* v  =  u+ysize;
-
-       mpsetx(ysize, u, xsize, xdata);
-       mpsetx(ysize, v, b->size, b->modl);
-
-       /* Y1. Find power of 2. */
-       for (k = 0; mpeven(ysize, u) && mpeven(ysize, v); k++) {
-               mpdivtwo(ysize, u);
-               mpdivtwo(ysize, v);
-       }
-
-if (_debug < 0)
-fprintf(stderr, "       u: "), mpfprintln(stderr, ysize, u);
-if (_debug < 0)
-fprintf(stderr, "       v: "), mpfprintln(stderr, ysize, v);
-
-       /* Y2. Initialize. */
-       mpsetw(ysize, u1, 1);
-if (_debug < 0)
-fprintf(stderr, "      u1: "), mpfprintln(stderr, ysize, u1);
-       mpzero(ysize, u2);
-if (_debug < 0)
-fprintf(stderr, "      u2: "), mpfprintln(stderr, ysize, u2);
-       mpsetx(ysize, u3, ysize, u);
-if (_debug < 0)
-fprintf(stderr, "      u3: "), mpfprintln(stderr, ysize, u3);
-
-       mpsetx(ysize, v1, ysize, v);
-if (_debug < 0)
-fprintf(stderr, "      v1: "), mpfprintln(stderr, ysize, v1);
-       mpsetw(ysize, v2, 1);
-       (void) mpsub(ysize, v2, u);
-if (_debug < 0)
-fprintf(stderr, "      v2: "), mpfprintln(stderr, ysize, v2);
-       mpsetx(ysize, v3, ysize, v);
-if (_debug < 0)
-fprintf(stderr, "      v3: "), mpfprintln(stderr, ysize, v3);
-
-       if (mpodd(ysize, u)) {
-               mpzero(ysize, t1);
-if (_debug < 0)
-fprintf(stderr, "      t1: "), mpfprintln(stderr, ysize, t1);
-               mpzero(ysize, t2);
-               mpsubw(ysize, t2, 1);
-if (_debug < 0)
-fprintf(stderr, "      t2: "), mpfprintln(stderr, ysize, t2);
-               mpzero(ysize, t3);
-               mpsub(ysize, t3, v);
-if (_debug < 0)
-fprintf(stderr, "      t3: "), mpfprintln(stderr, ysize, t3);
-               goto Y4;
-       } else {
-               mpsetw(ysize, t1, 1);
-if (_debug < 0)
-fprintf(stderr, "      t1: "), mpfprintln(stderr, ysize, t1);
-               mpzero(ysize, t2);
-if (_debug < 0)
-fprintf(stderr, "      t2: "), mpfprintln(stderr, ysize, t2);
-               mpsetx(ysize, t3, ysize, u);
-if (_debug < 0)
-fprintf(stderr, "      t3: "), mpfprintln(stderr, ysize, t3);
-       }
-
-       do {
-           do {
-               if (mpodd(ysize, t1) || mpodd(ysize, t2)) {
-                       mpadd(ysize, t1, v);
-                       mpsub(ysize, t2, u);
-               }
-               mpsdivtwo(ysize, t1);
-               mpsdivtwo(ysize, t2);
-               mpsdivtwo(ysize, t3);
-Y4:
-if (_debug < 0)
-fprintf(stderr, "   Y4 t3: "), mpfprintln(stderr, ysize, t3);
-           } while (mpeven(ysize, t3));
-
-           /* Y5. Reset max(u3,v3). */
-           if (!(*t3 & 0x80000000)) {
-if (_debug < 0)
-fprintf(stderr, "--> Y5 (t3 > 0)\n");
-               mpsetx(ysize, u1, ysize, t1);
-if (_debug < 0)
-fprintf(stderr, "      u1: "), mpfprintln(stderr, ysize, u1);
-               mpsetx(ysize, u2, ysize, t2);
-if (_debug < 0)
-fprintf(stderr, "      u2: "), mpfprintln(stderr, ysize, u2);
-               mpsetx(ysize, u3, ysize, t3);
-if (_debug < 0)
-fprintf(stderr, "      u3: "), mpfprintln(stderr, ysize, u3);
-           } else {
-if (_debug < 0)
-fprintf(stderr, "--> Y5 (t3 <= 0)\n");
-               mpsetx(ysize, v1, ysize, v);
-               mpsub(ysize, v1, t1);
-if (_debug < 0)
-fprintf(stderr, "      v1: "), mpfprintln(stderr, ysize, v1);
-               mpsetx(ysize, v2, ysize, u);
-               mpneg(ysize, v2);
-               mpsub(ysize, v2, t2);
-if (_debug < 0)
-fprintf(stderr, "      v2: "), mpfprintln(stderr, ysize, v2);
-               mpzero(ysize, v3);
-               mpsub(ysize, v3, t3);
-if (_debug < 0)
-fprintf(stderr, "      v3: "), mpfprintln(stderr, ysize, v3);
-           }
-
-           /* Y6. Subtract. */
-           mpsetx(ysize, t1, ysize, u1);
-           mpsub(ysize, t1, v1);
-           mpsetx(ysize, t2, ysize, u2);
-           mpsub(ysize, t2, v2);
-           mpsetx(ysize, t3, ysize, u3);
-           mpsub(ysize, t3, v3);
-
-           if (*t1 & 0x80000000) {
-               mpadd(ysize, t1, v);
-               mpsub(ysize, t2, u);
-           }
-
-if (_debug < 0)
-fprintf(stderr, "-->Y6 t1: "), mpfprintln(stderr, ysize, t1);
-if (_debug < 0)
-fprintf(stderr, "      t2: "), mpfprintln(stderr, ysize, t2);
-if (_debug < 0)
-fprintf(stderr, "      t3: "), mpfprintln(stderr, ysize, t3);
-
-       } while (mpnz(ysize, t3));
-
-       if (!(mpisone(ysize, u3) && mpisone(ysize, v3)))
-               return 0;
-
-       if (result) {
-               while (--k > 0)
-                       mpadd(ysize, u1, u1);
-               mpsetx(b->size, result, ysize, u1);
-       }
-
-fprintf(stderr, "=== EXIT: "), mpfprintln(stderr, b->size, result);
-fprintf(stderr, "      u1: "), mpfprintln(stderr, ysize, u1);
-fprintf(stderr, "      u2: "), mpfprintln(stderr, ysize, u2);
-fprintf(stderr, "      u3: "), mpfprintln(stderr, ysize, u3);
-fprintf(stderr, "      v1: "), mpfprintln(stderr, ysize, v1);
-fprintf(stderr, "      v2: "), mpfprintln(stderr, ysize, v2);
-fprintf(stderr, "      v3: "), mpfprintln(stderr, ysize, v3);
-fprintf(stderr, "      t1: "), mpfprintln(stderr, ysize, t1);
-fprintf(stderr, "      t2: "), mpfprintln(stderr, ysize, t2);
-fprintf(stderr, "      t3: "), mpfprintln(stderr, ysize, t3);
-
-       return 1;
-}
-
-/**
- *  Computes the inverse (modulo b) of x, and returns 1 if x was invertible.
- *  needs workspace of (6*size+6) words
- *  @note xdata and result cannot point to the same area
- */
-static int Xmpbinv_w(const mpbarrett* b, size_t xsize, const mpw* xdata, mpw* result, mpw* wksp)
-{
-       /*
-        * Fact: if a element of Zn, then a is invertible if and only if gcd(a,n) = 1
-        * Hence: if b->modl is even, then x must be odd, otherwise the gcd(x,n) >= 2
-        *
-        * The calling routine must guarantee this condition.
-        */
-
-       size_t ysize = b->size+1;
-
-       mpw* u = wksp;
-       mpw* v = u+ysize;
-       mpw* A = v+ysize;
-       mpw* B = A+ysize;
-       mpw* C = B+ysize;
-       mpw* D = C+ysize;
-
-       mpsetx(ysize, u, b->size, b->modl);
-       mpsetx(ysize, v, xsize, xdata);
-       mpsetw(ysize, A, 1);
-       mpzero(ysize, B);
-       mpzero(ysize, C);
-       mpsetw(ysize, D, 1);
-
-if (_debug < 0)
-fprintf(stderr, "       u: "), mpfprintln(stderr, ysize, u);
-if (_debug < 0)
-fprintf(stderr, "       v: "), mpfprintln(stderr, ysize, v);
-if (_debug < 0)
-fprintf(stderr, "       A: "), mpfprintln(stderr, ysize, A);
-if (_debug < 0)
-fprintf(stderr, "       B: "), mpfprintln(stderr, ysize, B);
-if (_debug < 0)
-fprintf(stderr, "       C: "), mpfprintln(stderr, ysize, C);
-if (_debug < 0)
-fprintf(stderr, "       D: "), mpfprintln(stderr, ysize, D);
-
-       do {
-               while (mpeven(ysize, u))
-               {
-                       mpdivtwo(ysize, u);
-
-                       if (mpodd(ysize, A) || mpodd(ysize, B))
-                       {
-                               (void) mpaddx(ysize, A, xsize, xdata);
-                               (void) mpsubx(ysize, B, b->size, b->modl);
-                       }
-
-                       mpsdivtwo(ysize, A);
-                       mpsdivtwo(ysize, B);
-               }
-               while (mpeven(ysize, v))
-               {
-                       mpdivtwo(ysize, v);
-
-                       if (mpodd(ysize, C) || mpodd(ysize, D))
-                       {
-                               (void) mpaddx(ysize, C, xsize, xdata);
-                               (void) mpsubx(ysize, D, b->size, b->modl);
-                       }
-
-                       mpsdivtwo(ysize, C);
-                       mpsdivtwo(ysize, D);
-               }
-               if (mpge(ysize, u, v))
-               {
-if (_debug < 0)
-fprintf(stderr, "--> 5 (u >= v)\n");
-                       (void) mpsub(ysize, u, v);
-                       (void) mpsub(ysize, A, C);
-                       (void) mpsub(ysize, B, D);
-if (_debug < 0)
-fprintf(stderr, "       u: "), mpfprintln(stderr, ysize, u);
-if (_debug < 0)
-fprintf(stderr, "       A: "), mpfprintln(stderr, ysize, A);
-if (_debug < 0)
-fprintf(stderr, "       B: "), mpfprintln(stderr, ysize, B);
-               }
-               else
-               {
-if (_debug < 0)
-fprintf(stderr, "--> 5 (u < v)\n");
-                       (void) mpsub(ysize, v, u);
-                       (void) mpsub(ysize, C, A);
-                       (void) mpsub(ysize, D, B);
-if (_debug < 0)
-fprintf(stderr, "       v: "), mpfprintln(stderr, ysize, v);
-if (_debug < 0)
-fprintf(stderr, "       C: "), mpfprintln(stderr, ysize, C);
-if (_debug < 0)
-fprintf(stderr, "       D: "), mpfprintln(stderr, ysize, D);
-               }
-
-       } while (mpnz(ysize, u));
-
-       if (!mpisone(ysize, v))
-               return 0;
-
-       if (result)
-       {
-               mpsetx(b->size, result, ysize, D);
-               if (*D & 0x80000000)
-                       (void) mpadd(b->size, result, b->modl);
-       }
-
-fprintf(stderr, "=== EXIT: "), mpfprintln(stderr, b->size, result);
-fprintf(stderr, "       u: "), mpfprintln(stderr, ysize, u);
-fprintf(stderr, "       v: "), mpfprintln(stderr, ysize, v);
-fprintf(stderr, "       A: "), mpfprintln(stderr, ysize, A);
-fprintf(stderr, "       B: "), mpfprintln(stderr, ysize, B);
-fprintf(stderr, "       C: "), mpfprintln(stderr, ysize, C);
-fprintf(stderr, "       D: "), mpfprintln(stderr, ysize, D);
-       return 1;
-}
-
-static const char * dsa_q      = "a1b35510319a59825c721e73e41d687ffe351bc9";
-static const char * dsa_s[]    = {
-    "22e917d8a47462c09748e00aebbab5fd93793495",        /* samba-2.2.1a-4.i386.rpm */
-    "0476b30eb86899c6785fad4f7a62e43d59481273",        /* gtkhtml-devel-0.9.2-9.i386.rpm */
-    "8adbca132a0e6a2d2ee5bb2cd837b350c9f8db42",        /* lha-1.00-17.i386.rpm */
-
-    "026efa7a5a60d29921ec93f503b5c483d131d8c4",        /* jed-0.99.14-2.i386.rpm */
-    "2e4ec3c986b5a1f8f77b0b9f911d4e1b0ed8d869",        /* ttfonts-zh_TW-2.11-5.noarch.rpm */
-
-    "259e4859e65c2528d3c35eaf2717d8963c834e94",        /* libxml2-2.4.2-1.i386.rpm */
-    "45462b3534c2ff7a13f232a4e6e4460c61b2e232",        /* slang-1.4.4-4.i386.rpm */
-    "0a73e678141aea7b4e5195afb7db3e9ec00f9f85",        /* time-1.7-14.i386.rpm */
-    NULL
-};
-
-static const char * dsa_w_good[]= {
-    "8b2eeda5fd34067c248bc3262e28f5668e64500b",        /* samba-2.2.1a-4.i386.rpm */
-    "98f6a05c5cc17c2e48faad178d2c21c0bcca694b",        /* gtkhtml-devel-0.9.2-9.i386.rpm */
-    "8ec91350f3237ee249ea009143f692d4cc2f8d2e",        /* lha-1.00-17.i386.rpm */
-
-    "7db9e81c6f60fdd29243f67b70af7d1d14c9c703",        /* jed-0.99.14-2.i386.rpm */
-    "6bdc316aef981e45c47dabab904a31747d349eec",        /* ttfonts-zh_TW-2.11-5.noarch.rpm */
-
-    "6d1eaa6c78ad945a1de7bc369f7992e9df3735d9",        /* libxml2-2.4.2-1.i386.rpm */
-    "79dc6adee7817e7dc248cfeb4b358e933af6de01",        /* slang-1.4.4-4.i386.rpm */
-    "2659140a40cb05e85c536a299327addb0a762b8a",        /* time-1.7-14.i386.rpm */
-    NULL
-};
-
-static const char * dsa_w_bad[]        = {
-    "e97b9895cb99acf9c819a4b24a0b8ce6902f3442",        /* samba-2.2.1a-4.i386.rpm */
-    "f7434b4c2b2722abec888ea3a90eb940be954d82",        /* gtkhtml-devel-0.9.2-9.i386.rpm */
-    "ed15be40c189255fed77e21d5fd92a54cdfa7165",        /* lha-1.00-17.i386.rpm */
-
-    "dc06930c3dc6a45035d1d8078c92149d1694ab3a",        /* jed-0.99.14-2.i386.rpm */
-    "ca28dc5abdfdc4c3680b8d37ac2cc8f47eff8323",        /* ttfonts-zh_TW-2.11-5.noarch.rpm */
-
-    "cb6b555c47133ad7c1759dc2bb5c2a69e1021a10",        /* libxml2-2.4.2-1.i386.rpm */
-    "d82915ceb5e724fb65d6b177671826133cc1c238",        /* slang-1.4.4-4.i386.rpm */
-    "2659140a40cb05e85c536a299327addb0a762b8a",        /* time-1.7-14.i386.rpm */
-    NULL
-};
-
-static struct poptOption optionsTable[] = {
- { "debug", 'd', POPT_ARG_VAL, &_debug, -1,            NULL, NULL },
-  POPT_AUTOHELP
-  POPT_TABLEEND
-};
-
-int
-main(int argc, char *argv[])
-{
-    poptContext optCon = poptGetContext(argv[0], argc, argv, optionsTable, 0);
-    mpbarrett q;
-    mpnumber s;
-    size_t qsize;
-    mpw* qtemp;
-    mpw* qwksp;
-    int rc;
-    int i;
-
-    while ((rc = poptGetNextOpt(optCon)) > 0) {
-       switch (rc) {
-       default:
-            break;
-       }
-    }
-
-    mpbzero(&q); mpbsethex(&q, dsa_q);
-    qsize = q.size;
-    qtemp = malloc((13*qsize+13) * sizeof(*qtemp));
-    qwksp = qtemp+2*qsize;
-
-    for (i = 0; i < 9; i++) {
-       if (dsa_s[i] == NULL) break;
-fprintf(stderr, "================================================== %d\n", i);
-       fprintf(stderr, "       s: %s\n", dsa_s[i]);
-       mpnzero(&s); mpnsethex(&s, dsa_s[i]);
-
-fprintf(stderr, "-------------------------------------------------- %d\n", i);
-       rc = Xmpbinv_w(&q, s.size, s.data, qtemp, qwksp);
-       fprintf(stderr, "beecrypt: "); mpfprintln(stderr, qsize, qtemp);
-
-fprintf(stderr, "-------------------------------------------------- %d\n", i);
-       rc = Ympbinv_w(&q, s.size, s.data, qtemp, qwksp);
-       fprintf(stderr, "   Knuth: "); mpfprintln(stderr, qsize, qtemp);
-
-fprintf(stderr, "-------------------------------------------------- %d\n", i);
-       rc = Zmpbinv_w(&q, s.size, s.data, qtemp, qwksp);
-       fprintf(stderr, "   Brent: "); mpfprintln(stderr, qsize, qtemp);
-
-fprintf(stderr, "-------------------------------------------------- %d\n", i);
-       fprintf(stderr, "       q: %s\n", dsa_q);
-       fprintf(stderr, "       s: %s\n", dsa_s[i]);
-       fprintf(stderr, "    GOOD: %s\n", dsa_w_good[i]);
-       fprintf(stderr, "     BAD: %s\n", dsa_w_bad[i]);
-    }
-
-    return 0;
-
-}