Tcl Source Code

Check-in [902c7eef54]
Login
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Apply non-comment changes to take our fork of libtommath up to tracking 0.42.0 from 0.39.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | core-8-5-branch | libtommath-merge-0-42-0
Files: files | file ages | folders
SHA1: 902c7eef54ebeaa31eb8b6ac7b92358569f5b2e2
User & Date: dkf 2011-03-14 14:23:22
Original Comment: Apply non-comment changes to take our fork of libtommath up to tracking 0.42.0 from 0.39.
Context
2011-03-14
15:08
merge 8.4 check-in: 3e9d0beb61 user: dgp tags: core-8-5-branch
14:25
Apply non-comment changes to take our fork of libtommath up to tracking 0.42.0 from 0.39. check-in: 71dc9aa917 user: dkf tags: trunk
14:23
Apply non-comment changes to take our fork of libtommath up to tracking 0.42.0 from 0.39. check-in: 902c7eef54 user: dkf tags: core-8-5-branch, libtommath-merge-0-42-0
2011-03-11
23:09
merge-mark check-in: 5dc038c5af user: jan.nijtmans tags: core-8-5-branch
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to libtommath/bn_mp_div_d.c.

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 */

static int s_is_power_of_two(mp_digit b, int *p)
{
   int x;

   /* quick out - if (b & (b-1)) isn't zero, b isn't a power of two */
   if ((b & (b-1)) != 0) {
       return 0;
   }
   for (x = 1; x < DIGIT_BIT; x++) {
      if (b == (((mp_digit)1)<<x)) {
         *p = x;
         return 1;
      }






|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 */

static int s_is_power_of_two(mp_digit b, int *p)
{
   int x;

   /* quick out - if (b & (b-1)) isn't zero, b isn't a power of two */
   if ((b==0) || (b & (b-1))) {
       return 0;
   }
   for (x = 1; x < DIGIT_BIT; x++) {
      if (b == (((mp_digit)1)<<x)) {
         *p = x;
         return 1;
      }

Changes to libtommath/bn_mp_montgomery_setup.c.

44
45
46
47
48
49
50
51
52
53
54
55
  x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
#endif
#ifdef MP_64BIT
  x *= 2 - b * x;               /* here x*a==1 mod 2**64 */
#endif

  /* rho = -1/m mod b */
  *rho = (((mp_word)1 << ((mp_word) DIGIT_BIT)) - x) & MP_MASK;

  return MP_OKAY;
}
#endif






|




44
45
46
47
48
49
50
51
52
53
54
55
  x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
#endif
#ifdef MP_64BIT
  x *= 2 - b * x;               /* here x*a==1 mod 2**64 */
#endif

  /* rho = -1/m mod b */
  *rho = (unsigned long)(((mp_word)1 << ((mp_word) DIGIT_BIT)) - x) & MP_MASK;

  return MP_OKAY;
}
#endif

Changes to libtommath/bn_mp_prime_next_prime.c.

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
      /* if didn't pass sieve and step == MAX then skip test */
      if (y == 1 && step >= ((((mp_digit)1)<<DIGIT_BIT) - kstep)) {
         continue;
      }

      /* is this prime? */
      for (x = 0; x < t; x++) {
          mp_set(&b, ltm_prime_tab[t]);
          if ((err = mp_prime_miller_rabin(a, &b, &res)) != MP_OKAY) {
             goto LBL_ERR;
          }
          if (res == MP_NO) {
             break;
          }
      }






|







139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
      /* if didn't pass sieve and step == MAX then skip test */
      if (y == 1 && step >= ((((mp_digit)1)<<DIGIT_BIT) - kstep)) {
         continue;
      }

      /* is this prime? */
      for (x = 0; x < t; x++) {
          mp_set(&b, ltm_prime_tab[x]);
          if ((err = mp_prime_miller_rabin(a, &b, &res)) != MP_OKAY) {
             goto LBL_ERR;
          }
          if (res == MP_NO) {
             break;
          }
      }

Changes to libtommath/bn_mp_shrink.c.

15
16
17
18
19
20
21





22
23
24
25
26
27
28
29
30
31
 * Tom St Denis, [email protected], http://math.libtomcrypt.com
 */

/* shrink a bignum */
int mp_shrink (mp_int * a)
{
  mp_digit *tmp;





  if (a->alloc != a->used && a->used > 0) {
    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) {
      return MP_MEM;
    }
    a->dp    = tmp;
    a->alloc = a->used;
  }
  return MP_OKAY;
}
#endif






>
>
>
>
>
|
|



|




15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 * Tom St Denis, [email protected], http://math.libtomcrypt.com
 */

/* shrink a bignum */
int mp_shrink (mp_int * a)
{
  mp_digit *tmp;
  int used = 1;
  
  if(a->used > 0)
    used = a->used;
  
  if (a->alloc != used) {
    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * used)) == NULL) {
      return MP_MEM;
    }
    a->dp    = tmp;
    a->alloc = used;
  }
  return MP_OKAY;
}
#endif

Changes to libtommath/changes.txt.















1
2
3
4
5
6
7













April 4th, 2006
v0.39  -- Jim Wigginton pointed out my Montgomery examples in figures 6.4 and 6.6 were off by one, k should be 9 not 8
       -- Bruce Guenter suggested I use --tag=CC for libtool builds where the compiler may think it's C++.
       -- "mm" from sci.crypt pointed out that my mp_gcd was sub-optimal (I also updated and corrected the book)
       -- updated some of the @@ tags in tommath.src to reflect source changes.
       -- updated email and url info in all source files

>
>
>
>
>
>
>
>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
July 23rd, 2010
v0.42.0
       -- Fix for mp_prime_next_prime() bug when checking generated prime
       -- allow mp_shrink to shrink initialized, but empty MPI's
       -- Added project and solution files for Visual Studio 2005 and Visual Studio 2008. 

March 10th, 2007
v0.41  -- Wolfgang Ehrhardt suggested a quick fix to mp_div_d() which makes the detection of powers of two quicker. 
       -- [CRI] Added libtommath.dsp for Visual C++ users.

December 24th, 2006
v0.40  -- Updated makefile to properly support LIBNAME
       -- Fixed bug in fast_s_mp_mul_high_digs() which overflowed (line 83), thanks Valgrind!

April 4th, 2006
v0.39  -- Jim Wigginton pointed out my Montgomery examples in figures 6.4 and 6.6 were off by one, k should be 9 not 8
       -- Bruce Guenter suggested I use --tag=CC for libtool builds where the compiler may think it's C++.
       -- "mm" from sci.crypt pointed out that my mp_gcd was sub-optimal (I also updated and corrected the book)
       -- updated some of the @@ tags in tommath.src to reflect source changes.
       -- updated email and url info in all source files

Changes to libtommath/etc/drprimes.txt.

1
2
3
4
5
6



280-bit prime:
p == 1942668892225729070919461906823518906642406839052139521251812409738904285204940164839

532-bit prime:
p == 14059105607947488696282932836518693308967803494693489478439861164411992439598399594747002144074658928593502845729752797260025831423419686528151609940203368691747




|
|

|
|

>
>
>
1
2
3
4
5
6
7
8
9
300-bit prime:
p == 2037035976334486086268445688409378161051468393665936250636140449354381298610415201576637819

540-bit prime:
p == 3599131035634557106248430806148785487095757694641533306480604458089470064537190296255232548883112685719936728506816716098566612844395439751206810991770626477344739

780-bit prime:
p == 6359114106063703798370219984742410466332205126109989319225557147754704702203399726411277962562135973685197744935448875852478791860694279747355800678568677946181447581781401213133886609947027230004277244697462656003655947791725966271167

Changes to libtommath/makefile.

1
2
3
4
5
6
7
8
9
10
11
12
13
..
36
37
38
39
40
41
42
43
44
45
46
47
48



49
50
51
52
53
54
55
#Makefile for GCC
#
#Tom St Denis

#version of library 
VERSION=0.39

CFLAGS  +=  -I./ -Wall -W -Wshadow -Wsign-compare

ifndef MAKE
   MAKE=make
endif

................................................................................

ifndef INSTALL_USER
   USER=root
else
   USER=$(INSTALL_USER)
endif

default: libtommath.a

#default files to install
ifndef LIBNAME
   LIBNAME=libtommath.a
endif



HEADERS=tommath.h tommath_class.h tommath_superclass.h

#LIBPATH-The directory for libtommath to be installed to.
#INCPATH-The directory to install the header files for libtommath.
#DATAPATH-The directory to install the pdf docs.
DESTDIR=
LIBPATH=/usr/lib




|







 







<
<




>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
..
36
37
38
39
40
41
42


43
44
45
46
47
48
49
50
51
52
53
54
55
56
#Makefile for GCC
#
#Tom St Denis

#version of library 
VERSION=0.42.0

CFLAGS  +=  -I./ -Wall -W -Wshadow -Wsign-compare

ifndef MAKE
   MAKE=make
endif

................................................................................

ifndef INSTALL_USER
   USER=root
else
   USER=$(INSTALL_USER)
endif



#default files to install
ifndef LIBNAME
   LIBNAME=libtommath.a
endif

default: ${LIBNAME}

HEADERS=tommath.h tommath_class.h tommath_superclass.h

#LIBPATH-The directory for libtommath to be installed to.
#INCPATH-The directory to install the header files for libtommath.
#DATAPATH-The directory to install the pdf docs.
DESTDIR=
LIBPATH=/usr/lib

Changes to libtommath/makefile.shared.

1
2
3
4
5
6
7
8
9
10
11
#Makefile for GCC
#
#Tom St Denis
VERSION=0:39

CC = libtool --mode=compile --tag=CC gcc

CFLAGS  +=  -I./ -Wall -W -Wshadow -Wsign-compare

ifndef IGNORE_SPEED



|







1
2
3
4
5
6
7
8
9
10
11
#Makefile for GCC
#
#Tom St Denis
VERSION=0:41

CC = libtool --mode=compile --tag=CC gcc

CFLAGS  +=  -I./ -Wall -W -Wshadow -Wsign-compare

ifndef IGNORE_SPEED

Changes to libtommath/pre_gen/mpi.c.

549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
....
2022
2023
2024
2025
2026
2027
2028





2029
2030
2031
2032
2033
2034
2035
2036
....
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
....
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
....
6843
6844
6845
6846
6847
6848
6849





6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
  olduse  = c->used;
  c->used = pa;

  {
    register mp_digit *tmpc;

    tmpc = c->dp + digs;
    for (ix = digs; ix <= pa; ix++) {
      /* now extract the previous digit [below the carry] */
      *tmpc++ = W[ix];
    }

    /* clear unused digits [that existed in the old copy of c] */
    for (; ix < olduse; ix++) {
      *tmpc++ = 0;
................................................................................
 * Tom St Denis, [email protected], http://math.libtomcrypt.com
 */

static int s_is_power_of_two(mp_digit b, int *p)
{
   int x;






   for (x = 1; x < DIGIT_BIT; x++) {
      if (b == (((mp_digit)1)<<x)) {
         *p = x;
         return 1;
      }
   }
   return 0;
}
................................................................................
  x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
#endif
#ifdef MP_64BIT
  x *= 2 - b * x;               /* here x*a==1 mod 2**64 */
#endif

  /* rho = -1/m mod b */
  *rho = (((mp_word)1 << ((mp_word) DIGIT_BIT)) - x) & MP_MASK;

  return MP_OKAY;
}
#endif

/* End: bn_mp_montgomery_setup.c */

................................................................................
      /* if didn't pass sieve and step == MAX then skip test */
      if (y == 1 && step >= ((((mp_digit)1)<<DIGIT_BIT) - kstep)) {
         continue;
      }

      /* is this prime? */
      for (x = 0; x < t; x++) {
          mp_set(&b, ltm_prime_tab[t]);
          if ((err = mp_prime_miller_rabin(a, &b, &res)) != MP_OKAY) {
             goto LBL_ERR;
          }
          if (res == MP_NO) {
             break;
          }
      }
................................................................................
 * Tom St Denis, [email protected], http://math.libtomcrypt.com
 */

/* shrink a bignum */
int mp_shrink (mp_int * a)
{
  mp_digit *tmp;





  if (a->alloc != a->used && a->used > 0) {
    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) {
      return MP_MEM;
    }
    a->dp    = tmp;
    a->alloc = a->used;
  }
  return MP_OKAY;
}
#endif

/* End: bn_mp_shrink.c */







|







 







>
>
>
>
>
|







 







|







 







|







 







>
>
>
>
>
|
|



|







549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
....
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
....
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
....
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
....
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
  olduse  = c->used;
  c->used = pa;

  {
    register mp_digit *tmpc;

    tmpc = c->dp + digs;
    for (ix = digs; ix < pa; ix++) {
      /* now extract the previous digit [below the carry] */
      *tmpc++ = W[ix];
    }

    /* clear unused digits [that existed in the old copy of c] */
    for (; ix < olduse; ix++) {
      *tmpc++ = 0;
................................................................................
 * Tom St Denis, [email protected], http://math.libtomcrypt.com
 */

static int s_is_power_of_two(mp_digit b, int *p)
{
   int x;

   /* fast return if no power of two */
   if ((b==0) || (b & (b-1))) {
      return 0;
   }

   for (x = 0; x < DIGIT_BIT; x++) {
      if (b == (((mp_digit)1)<<x)) {
         *p = x;
         return 1;
      }
   }
   return 0;
}
................................................................................
  x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
#endif
#ifdef MP_64BIT
  x *= 2 - b * x;               /* here x*a==1 mod 2**64 */
#endif

  /* rho = -1/m mod b */
  *rho = (unsigned long)(((mp_word)1 << ((mp_word) DIGIT_BIT)) - x) & MP_MASK;

  return MP_OKAY;
}
#endif

/* End: bn_mp_montgomery_setup.c */

................................................................................
      /* if didn't pass sieve and step == MAX then skip test */
      if (y == 1 && step >= ((((mp_digit)1)<<DIGIT_BIT) - kstep)) {
         continue;
      }

      /* is this prime? */
      for (x = 0; x < t; x++) {
          mp_set(&b, ltm_prime_tab[x]);
          if ((err = mp_prime_miller_rabin(a, &b, &res)) != MP_OKAY) {
             goto LBL_ERR;
          }
          if (res == MP_NO) {
             break;
          }
      }
................................................................................
 * Tom St Denis, [email protected], http://math.libtomcrypt.com
 */

/* shrink a bignum */
int mp_shrink (mp_int * a)
{
  mp_digit *tmp;
  int used = 1;
  
  if(a->used > 0)
    used = a->used;
  
  if (a->alloc != used) {
    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * used)) == NULL) {
      return MP_MEM;
    }
    a->dp    = tmp;
    a->alloc = used;
  }
  return MP_OKAY;
}
#endif

/* End: bn_mp_shrink.c */