added libtommath-0.37
This commit is contained in:
parent
9294e79150
commit
fde740eae0
2
bn.tex
2
bn.tex
@ -49,7 +49,7 @@
|
|||||||
\begin{document}
|
\begin{document}
|
||||||
\frontmatter
|
\frontmatter
|
||||||
\pagestyle{empty}
|
\pagestyle{empty}
|
||||||
\title{LibTomMath User Manual \\ v0.36}
|
\title{LibTomMath User Manual \\ v0.37}
|
||||||
\author{Tom St Denis \\ tomstdenis@iahu.ca}
|
\author{Tom St Denis \\ tomstdenis@iahu.ca}
|
||||||
\maketitle
|
\maketitle
|
||||||
This text, the library and the accompanying textbook are all hereby placed in the public domain. This book has been
|
This text, the library and the accompanying textbook are all hereby placed in the public domain. This book has been
|
||||||
|
@ -40,6 +40,9 @@ mp_add_d (mp_int * a, mp_digit b, mp_int * c)
|
|||||||
/* fix sign */
|
/* fix sign */
|
||||||
a->sign = c->sign = MP_NEG;
|
a->sign = c->sign = MP_NEG;
|
||||||
|
|
||||||
|
/* clamp */
|
||||||
|
mp_clamp(c);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ int mp_radix_size (mp_int * a, int radix, int *size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mp_iszero(a) == MP_YES) {
|
if (mp_iszero(a) == MP_YES) {
|
||||||
*size = 2;
|
*size = 2;
|
||||||
return MP_OKAY;
|
return MP_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,9 @@ int mp_read_radix (mp_int * a, const char *str, int radix)
|
|||||||
int y, res, neg;
|
int y, res, neg;
|
||||||
char ch;
|
char ch;
|
||||||
|
|
||||||
|
/* zero the digit bignum */
|
||||||
|
mp_zero(a);
|
||||||
|
|
||||||
/* make sure the radix is ok */
|
/* make sure the radix is ok */
|
||||||
if (radix < 2 || radix > 64) {
|
if (radix < 2 || radix > 64) {
|
||||||
return MP_VAL;
|
return MP_VAL;
|
||||||
|
@ -36,6 +36,10 @@ mp_sub_d (mp_int * a, mp_digit b, mp_int * c)
|
|||||||
a->sign = MP_ZPOS;
|
a->sign = MP_ZPOS;
|
||||||
res = mp_add_d(a, b, c);
|
res = mp_add_d(a, b, c);
|
||||||
a->sign = c->sign = MP_NEG;
|
a->sign = c->sign = MP_NEG;
|
||||||
|
|
||||||
|
/* clamp */
|
||||||
|
mp_clamp(c);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,12 +27,12 @@ int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen)
|
|||||||
char *_s = str;
|
char *_s = str;
|
||||||
|
|
||||||
/* check range of the maxlen, radix */
|
/* check range of the maxlen, radix */
|
||||||
if (maxlen < 3 || radix < 2 || radix > 64) {
|
if (maxlen < 2 || radix < 2 || radix > 64) {
|
||||||
return MP_VAL;
|
return MP_VAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* quick out if its zero */
|
/* quick out if its zero */
|
||||||
if (mp_iszero(a) == 1) {
|
if (mp_iszero(a) == MP_YES) {
|
||||||
*str++ = '0';
|
*str++ = '0';
|
||||||
*str = '\0';
|
*str = '\0';
|
||||||
return MP_OKAY;
|
return MP_OKAY;
|
||||||
@ -57,21 +57,20 @@ int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen)
|
|||||||
|
|
||||||
digs = 0;
|
digs = 0;
|
||||||
while (mp_iszero (&t) == 0) {
|
while (mp_iszero (&t) == 0) {
|
||||||
|
if (--maxlen < 1) {
|
||||||
|
/* no more room */
|
||||||
|
break;
|
||||||
|
}
|
||||||
if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) {
|
if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) {
|
||||||
mp_clear (&t);
|
mp_clear (&t);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
*str++ = mp_s_rmap[d];
|
*str++ = mp_s_rmap[d];
|
||||||
++digs;
|
++digs;
|
||||||
|
|
||||||
if (--maxlen == 1) {
|
|
||||||
/* no more room */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* reverse the digits of the string. In this case _s points
|
/* reverse the digits of the string. In this case _s points
|
||||||
* to the first digit [exluding the sign] of the number]
|
* to the first digit [exluding the sign] of the number
|
||||||
*/
|
*/
|
||||||
bn_reverse ((unsigned char *)_s, digs);
|
bn_reverse ((unsigned char *)_s, digs);
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ while (<IN>) {
|
|||||||
$str = "chapter eight";
|
$str = "chapter eight";
|
||||||
} elsif ($a == 9) {
|
} elsif ($a == 9) {
|
||||||
$str = "chapter nine";
|
$str = "chapter nine";
|
||||||
} elsif ($a == 2) {
|
} elsif ($a == 10) {
|
||||||
$str = "chapter ten";
|
$str = "chapter ten";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
November 18th, 2005
|
||||||
|
v0.37 -- [Don Porter] reported on a TCL list [HEY SEND ME BUGREPORTS ALREADY!!!] that mp_add_d() would compute -0 with some inputs. Fixed.
|
||||||
|
-- [rinick@gmail.com] reported the makefile.bcc was messed up. Fixed.
|
||||||
|
-- [Kevin Kenny] reported some issues with mp_toradix_n(). Now it doesn't require a min of 3 chars of output.
|
||||||
|
-- Made the make command renamable. Wee
|
||||||
|
|
||||||
August 1st, 2005
|
August 1st, 2005
|
||||||
v0.36 -- LTM_PRIME_2MSB_ON was fixed and the "OFF" flag was removed.
|
v0.36 -- LTM_PRIME_2MSB_ON was fixed and the "OFF" flag was removed.
|
||||||
-- [Peter LaDow] found a typo in the XREALLOC macro
|
-- [Peter LaDow] found a typo in the XREALLOC macro
|
||||||
|
19
makefile
19
makefile
@ -3,10 +3,14 @@
|
|||||||
#Tom St Denis
|
#Tom St Denis
|
||||||
|
|
||||||
#version of library
|
#version of library
|
||||||
VERSION=0.36
|
VERSION=0.37
|
||||||
|
|
||||||
CFLAGS += -I./ -Wall -W -Wshadow -Wsign-compare
|
CFLAGS += -I./ -Wall -W -Wshadow -Wsign-compare
|
||||||
|
|
||||||
|
ifndef MAKE
|
||||||
|
MAKE=make
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef IGNORE_SPEED
|
ifndef IGNORE_SPEED
|
||||||
|
|
||||||
#for speed
|
#for speed
|
||||||
@ -124,7 +128,7 @@ timing: $(LIBNAME)
|
|||||||
|
|
||||||
# makes the LTM book DVI file, requires tetex, perl and makeindex [part of tetex I think]
|
# makes the LTM book DVI file, requires tetex, perl and makeindex [part of tetex I think]
|
||||||
docdvi: tommath.src
|
docdvi: tommath.src
|
||||||
cd pics ; make
|
cd pics ; MAKE=${MAKE} ${MAKE}
|
||||||
echo "hello" > tommath.ind
|
echo "hello" > tommath.ind
|
||||||
perl booker.pl
|
perl booker.pl
|
||||||
latex tommath > /dev/null
|
latex tommath > /dev/null
|
||||||
@ -141,7 +145,7 @@ poster: poster.tex
|
|||||||
docs: docdvi
|
docs: docdvi
|
||||||
dvipdf tommath
|
dvipdf tommath
|
||||||
rm -f tommath.log tommath.aux tommath.dvi tommath.idx tommath.toc tommath.lof tommath.ind tommath.ilg
|
rm -f tommath.log tommath.aux tommath.dvi tommath.idx tommath.toc tommath.lof tommath.ind tommath.ilg
|
||||||
cd pics ; make clean
|
cd pics ; MAKE=${MAKE} ${MAKE} clean
|
||||||
|
|
||||||
#LTM user manual
|
#LTM user manual
|
||||||
mandvi: bn.tex
|
mandvi: bn.tex
|
||||||
@ -161,10 +165,10 @@ pretty:
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.bat *.pdf *.o *.a *.obj *.lib *.exe *.dll etclib/*.o demo/demo.o test ltmtest mpitest mtest/mtest mtest/mtest.exe \
|
rm -f *.bat *.pdf *.o *.a *.obj *.lib *.exe *.dll etclib/*.o demo/demo.o test ltmtest mpitest mtest/mtest mtest/mtest.exe \
|
||||||
*.idx *.toc *.log *.aux *.dvi *.lof *.ind *.ilg *.ps *.log *.s mpi.c *.da *.dyn *.dpi tommath.tex `find -type f | grep [~] | xargs` *.lo *.la
|
*.idx *.toc *.log *.aux *.dvi *.lof *.ind *.ilg *.ps *.log *.s mpi.c *.da *.dyn *.dpi tommath.tex `find . -type f | grep [~] | xargs` *.lo *.la
|
||||||
rm -rf .libs
|
rm -rf .libs
|
||||||
cd etc ; make clean
|
cd etc ; MAKE=${MAKE} ${MAKE} clean
|
||||||
cd pics ; make clean
|
cd pics ; MAKE=${MAKE} ${MAKE} clean
|
||||||
|
|
||||||
#zipup the project (take that!)
|
#zipup the project (take that!)
|
||||||
no_oops: clean
|
no_oops: clean
|
||||||
@ -177,4 +181,5 @@ zipup: clean manual poster docs
|
|||||||
cd .. ; rm -rf ltm* libtommath-$(VERSION) ; mkdir libtommath-$(VERSION) ; \
|
cd .. ; rm -rf ltm* libtommath-$(VERSION) ; mkdir libtommath-$(VERSION) ; \
|
||||||
cp -R ./libtommath/* ./libtommath-$(VERSION)/ ; \
|
cp -R ./libtommath/* ./libtommath-$(VERSION)/ ; \
|
||||||
tar -c libtommath-$(VERSION)/* | bzip2 -9vvc > ltm-$(VERSION).tar.bz2 ; \
|
tar -c libtommath-$(VERSION)/* | bzip2 -9vvc > ltm-$(VERSION).tar.bz2 ; \
|
||||||
zip -9 -r ltm-$(VERSION).zip libtommath-$(VERSION)/*
|
zip -9 -r ltm-$(VERSION).zip libtommath-$(VERSION)/* ; \
|
||||||
|
mv -f ltm* ~ ; rm -rf libtommath-$(VERSION)
|
||||||
|
@ -39,6 +39,6 @@ TARGET = libtommath.lib
|
|||||||
|
|
||||||
$(TARGET): $(OBJECTS)
|
$(TARGET): $(OBJECTS)
|
||||||
|
|
||||||
.c.objbjbjbj:
|
.c.obj:
|
||||||
$(CC) $(CFLAGS) $<
|
$(CC) $(CFLAGS) $<
|
||||||
$(LIB) $(TARGET) -+$@
|
$(LIB) $(TARGET) -+$@
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#Makefile for GCC
|
#Makefile for GCC
|
||||||
#
|
#
|
||||||
#Tom St Denis
|
#Tom St Denis
|
||||||
VERSION=0:36
|
VERSION=0:37
|
||||||
|
|
||||||
CC = libtool --mode=compile gcc
|
CC = libtool --mode=compile gcc
|
||||||
|
|
||||||
@ -80,11 +80,13 @@ bn_mp_prime_random_ex.o bn_mp_get_int.o bn_mp_sqrt.o bn_mp_is_square.o bn_mp_ini
|
|||||||
bn_mp_init_set_int.o bn_mp_invmod_slow.o bn_mp_prime_rabin_miller_trials.o \
|
bn_mp_init_set_int.o bn_mp_invmod_slow.o bn_mp_prime_rabin_miller_trials.o \
|
||||||
bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin_n.o
|
bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin_n.o
|
||||||
|
|
||||||
|
objs: $(OBJECTS)
|
||||||
|
|
||||||
$(LIBNAME): $(OBJECTS)
|
$(LIBNAME): $(OBJECTS)
|
||||||
libtool --mode=link gcc *.lo -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION)
|
libtool --mode=link gcc *.lo -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION)
|
||||||
libtool --mode=link gcc *.o -o $(LIBNAME_S)
|
|
||||||
ranlib $(LIBNAME_S)
|
install: $(LIBNAME)
|
||||||
libtool --mode=install install -c $(LIBNAME) $(LIBPATH)/$@
|
libtool --mode=install install -c $(LIBNAME) $(LIBPATH)/$(LIBNAME)
|
||||||
install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
|
install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
|
||||||
install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)
|
install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)
|
||||||
|
|
||||||
|
BIN
poster.pdf
BIN
poster.pdf
Binary file not shown.
@ -913,6 +913,9 @@ mp_add_d (mp_int * a, mp_digit b, mp_int * c)
|
|||||||
/* fix sign */
|
/* fix sign */
|
||||||
a->sign = c->sign = MP_NEG;
|
a->sign = c->sign = MP_NEG;
|
||||||
|
|
||||||
|
/* clamp */
|
||||||
|
mp_clamp(c);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6241,7 +6244,7 @@ int mp_radix_size (mp_int * a, int radix, int *size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mp_iszero(a) == MP_YES) {
|
if (mp_iszero(a) == MP_YES) {
|
||||||
*size = 2;
|
*size = 2;
|
||||||
return MP_OKAY;
|
return MP_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6395,6 +6398,9 @@ int mp_read_radix (mp_int * a, const char *str, int radix)
|
|||||||
int y, res, neg;
|
int y, res, neg;
|
||||||
char ch;
|
char ch;
|
||||||
|
|
||||||
|
/* zero the digit bignum */
|
||||||
|
mp_zero(a);
|
||||||
|
|
||||||
/* make sure the radix is ok */
|
/* make sure the radix is ok */
|
||||||
if (radix < 2 || radix > 64) {
|
if (radix < 2 || radix > 64) {
|
||||||
return MP_VAL;
|
return MP_VAL;
|
||||||
@ -7562,6 +7568,10 @@ mp_sub_d (mp_int * a, mp_digit b, mp_int * c)
|
|||||||
a->sign = MP_ZPOS;
|
a->sign = MP_ZPOS;
|
||||||
res = mp_add_d(a, b, c);
|
res = mp_add_d(a, b, c);
|
||||||
a->sign = c->sign = MP_NEG;
|
a->sign = c->sign = MP_NEG;
|
||||||
|
|
||||||
|
/* clamp */
|
||||||
|
mp_clamp(c);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8448,12 +8458,12 @@ int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen)
|
|||||||
char *_s = str;
|
char *_s = str;
|
||||||
|
|
||||||
/* check range of the maxlen, radix */
|
/* check range of the maxlen, radix */
|
||||||
if (maxlen < 3 || radix < 2 || radix > 64) {
|
if (maxlen < 2 || radix < 2 || radix > 64) {
|
||||||
return MP_VAL;
|
return MP_VAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* quick out if its zero */
|
/* quick out if its zero */
|
||||||
if (mp_iszero(a) == 1) {
|
if (mp_iszero(a) == MP_YES) {
|
||||||
*str++ = '0';
|
*str++ = '0';
|
||||||
*str = '\0';
|
*str = '\0';
|
||||||
return MP_OKAY;
|
return MP_OKAY;
|
||||||
@ -8478,21 +8488,20 @@ int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen)
|
|||||||
|
|
||||||
digs = 0;
|
digs = 0;
|
||||||
while (mp_iszero (&t) == 0) {
|
while (mp_iszero (&t) == 0) {
|
||||||
|
if (--maxlen < 1) {
|
||||||
|
/* no more room */
|
||||||
|
break;
|
||||||
|
}
|
||||||
if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) {
|
if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) {
|
||||||
mp_clear (&t);
|
mp_clear (&t);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
*str++ = mp_s_rmap[d];
|
*str++ = mp_s_rmap[d];
|
||||||
++digs;
|
++digs;
|
||||||
|
|
||||||
if (--maxlen == 1) {
|
|
||||||
/* no more room */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* reverse the digits of the string. In this case _s points
|
/* reverse the digits of the string. In this case _s points
|
||||||
* to the first digit [exluding the sign] of the number]
|
* to the first digit [exluding the sign] of the number
|
||||||
*/
|
*/
|
||||||
bn_reverse ((unsigned char *)_s, digs);
|
bn_reverse ((unsigned char *)_s, digs);
|
||||||
|
|
||||||
|
BIN
tommath.pdf
BIN
tommath.pdf
Binary file not shown.
@ -66,7 +66,7 @@ QUALCOMM Australia \\
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
\maketitle
|
\maketitle
|
||||||
This text has been placed in the public domain. This text corresponds to the v0.36 release of the
|
This text has been placed in the public domain. This text corresponds to the v0.37 release of the
|
||||||
LibTomMath project.
|
LibTomMath project.
|
||||||
|
|
||||||
\begin{alltt}
|
\begin{alltt}
|
||||||
|
232
tommath.tex
232
tommath.tex
@ -66,7 +66,7 @@ QUALCOMM Australia \\
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
\maketitle
|
\maketitle
|
||||||
This text has been placed in the public domain. This text corresponds to the v0.36 release of the
|
This text has been placed in the public domain. This text corresponds to the v0.37 release of the
|
||||||
LibTomMath project.
|
LibTomMath project.
|
||||||
|
|
||||||
\begin{alltt}
|
\begin{alltt}
|
||||||
@ -8808,70 +8808,73 @@ This algorithm initiates a temporary mp\_int with the value of the single digit
|
|||||||
039 /* fix sign */
|
039 /* fix sign */
|
||||||
040 a->sign = c->sign = MP_NEG;
|
040 a->sign = c->sign = MP_NEG;
|
||||||
041
|
041
|
||||||
042 return res;
|
042 /* clamp */
|
||||||
043 \}
|
043 mp_clamp(c);
|
||||||
044
|
044
|
||||||
045 /* old number of used digits in c */
|
045 return res;
|
||||||
046 oldused = c->used;
|
046 \}
|
||||||
047
|
047
|
||||||
048 /* sign always positive */
|
048 /* old number of used digits in c */
|
||||||
049 c->sign = MP_ZPOS;
|
049 oldused = c->used;
|
||||||
050
|
050
|
||||||
051 /* source alias */
|
051 /* sign always positive */
|
||||||
052 tmpa = a->dp;
|
052 c->sign = MP_ZPOS;
|
||||||
053
|
053
|
||||||
054 /* destination alias */
|
054 /* source alias */
|
||||||
055 tmpc = c->dp;
|
055 tmpa = a->dp;
|
||||||
056
|
056
|
||||||
057 /* if a is positive */
|
057 /* destination alias */
|
||||||
058 if (a->sign == MP_ZPOS) \{
|
058 tmpc = c->dp;
|
||||||
059 /* add digit, after this we're propagating
|
059
|
||||||
060 * the carry.
|
060 /* if a is positive */
|
||||||
061 */
|
061 if (a->sign == MP_ZPOS) \{
|
||||||
062 *tmpc = *tmpa++ + b;
|
062 /* add digit, after this we're propagating
|
||||||
063 mu = *tmpc >> DIGIT_BIT;
|
063 * the carry.
|
||||||
064 *tmpc++ &= MP_MASK;
|
064 */
|
||||||
065
|
065 *tmpc = *tmpa++ + b;
|
||||||
066 /* now handle rest of the digits */
|
066 mu = *tmpc >> DIGIT_BIT;
|
||||||
067 for (ix = 1; ix < a->used; ix++) \{
|
067 *tmpc++ &= MP_MASK;
|
||||||
068 *tmpc = *tmpa++ + mu;
|
068
|
||||||
069 mu = *tmpc >> DIGIT_BIT;
|
069 /* now handle rest of the digits */
|
||||||
070 *tmpc++ &= MP_MASK;
|
070 for (ix = 1; ix < a->used; ix++) \{
|
||||||
071 \}
|
071 *tmpc = *tmpa++ + mu;
|
||||||
072 /* set final carry */
|
072 mu = *tmpc >> DIGIT_BIT;
|
||||||
073 ix++;
|
073 *tmpc++ &= MP_MASK;
|
||||||
074 *tmpc++ = mu;
|
074 \}
|
||||||
075
|
075 /* set final carry */
|
||||||
076 /* setup size */
|
076 ix++;
|
||||||
077 c->used = a->used + 1;
|
077 *tmpc++ = mu;
|
||||||
078 \} else \{
|
078
|
||||||
079 /* a was negative and |a| < b */
|
079 /* setup size */
|
||||||
080 c->used = 1;
|
080 c->used = a->used + 1;
|
||||||
081
|
081 \} else \{
|
||||||
082 /* the result is a single digit */
|
082 /* a was negative and |a| < b */
|
||||||
083 if (a->used == 1) \{
|
083 c->used = 1;
|
||||||
084 *tmpc++ = b - a->dp[0];
|
084
|
||||||
085 \} else \{
|
085 /* the result is a single digit */
|
||||||
086 *tmpc++ = b;
|
086 if (a->used == 1) \{
|
||||||
087 \}
|
087 *tmpc++ = b - a->dp[0];
|
||||||
088
|
088 \} else \{
|
||||||
089 /* setup count so the clearing of oldused
|
089 *tmpc++ = b;
|
||||||
090 * can fall through correctly
|
090 \}
|
||||||
091 */
|
091
|
||||||
092 ix = 1;
|
092 /* setup count so the clearing of oldused
|
||||||
093 \}
|
093 * can fall through correctly
|
||||||
094
|
094 */
|
||||||
095 /* now zero to oldused */
|
095 ix = 1;
|
||||||
096 while (ix++ < oldused) \{
|
096 \}
|
||||||
097 *tmpc++ = 0;
|
097
|
||||||
098 \}
|
098 /* now zero to oldused */
|
||||||
099 mp_clamp(c);
|
099 while (ix++ < oldused) \{
|
||||||
100
|
100 *tmpc++ = 0;
|
||||||
101 return MP_OKAY;
|
101 \}
|
||||||
102 \}
|
102 mp_clamp(c);
|
||||||
103
|
103
|
||||||
104 #endif
|
104 return MP_OKAY;
|
||||||
105
|
105 \}
|
||||||
|
106
|
||||||
|
107 #endif
|
||||||
|
108
|
||||||
\end{alltt}
|
\end{alltt}
|
||||||
\end{small}
|
\end{small}
|
||||||
|
|
||||||
@ -9481,62 +9484,65 @@ as part of larger input without any significant problem.
|
|||||||
020 int y, res, neg;
|
020 int y, res, neg;
|
||||||
021 char ch;
|
021 char ch;
|
||||||
022
|
022
|
||||||
023 /* make sure the radix is ok */
|
023 /* zero the digit bignum */
|
||||||
024 if (radix < 2 || radix > 64) \{
|
024 mp_zero(a);
|
||||||
025 return MP_VAL;
|
025
|
||||||
026 \}
|
026 /* make sure the radix is ok */
|
||||||
027
|
027 if (radix < 2 || radix > 64) \{
|
||||||
028 /* if the leading digit is a
|
028 return MP_VAL;
|
||||||
029 * minus set the sign to negative.
|
029 \}
|
||||||
030 */
|
030
|
||||||
031 if (*str == '-') \{
|
031 /* if the leading digit is a
|
||||||
032 ++str;
|
032 * minus set the sign to negative.
|
||||||
033 neg = MP_NEG;
|
033 */
|
||||||
034 \} else \{
|
034 if (*str == '-') \{
|
||||||
035 neg = MP_ZPOS;
|
035 ++str;
|
||||||
036 \}
|
036 neg = MP_NEG;
|
||||||
037
|
037 \} else \{
|
||||||
038 /* set the integer to the default of zero */
|
038 neg = MP_ZPOS;
|
||||||
039 mp_zero (a);
|
039 \}
|
||||||
040
|
040
|
||||||
041 /* process each digit of the string */
|
041 /* set the integer to the default of zero */
|
||||||
042 while (*str) \{
|
042 mp_zero (a);
|
||||||
043 /* if the radix < 36 the conversion is case insensitive
|
043
|
||||||
044 * this allows numbers like 1AB and 1ab to represent the same value
|
044 /* process each digit of the string */
|
||||||
045 * [e.g. in hex]
|
045 while (*str) \{
|
||||||
046 */
|
046 /* if the radix < 36 the conversion is case insensitive
|
||||||
047 ch = (char) ((radix < 36) ? toupper (*str) : *str);
|
047 * this allows numbers like 1AB and 1ab to represent the same value
|
||||||
048 for (y = 0; y < 64; y++) \{
|
048 * [e.g. in hex]
|
||||||
049 if (ch == mp_s_rmap[y]) \{
|
049 */
|
||||||
050 break;
|
050 ch = (char) ((radix < 36) ? toupper (*str) : *str);
|
||||||
051 \}
|
051 for (y = 0; y < 64; y++) \{
|
||||||
052 \}
|
052 if (ch == mp_s_rmap[y]) \{
|
||||||
053
|
053 break;
|
||||||
054 /* if the char was found in the map
|
054 \}
|
||||||
055 * and is less than the given radix add it
|
055 \}
|
||||||
056 * to the number, otherwise exit the loop.
|
056
|
||||||
057 */
|
057 /* if the char was found in the map
|
||||||
058 if (y < radix) \{
|
058 * and is less than the given radix add it
|
||||||
059 if ((res = mp_mul_d (a, (mp_digit) radix, a)) != MP_OKAY) \{
|
059 * to the number, otherwise exit the loop.
|
||||||
060 return res;
|
060 */
|
||||||
061 \}
|
061 if (y < radix) \{
|
||||||
062 if ((res = mp_add_d (a, (mp_digit) y, a)) != MP_OKAY) \{
|
062 if ((res = mp_mul_d (a, (mp_digit) radix, a)) != MP_OKAY) \{
|
||||||
063 return res;
|
063 return res;
|
||||||
064 \}
|
064 \}
|
||||||
065 \} else \{
|
065 if ((res = mp_add_d (a, (mp_digit) y, a)) != MP_OKAY) \{
|
||||||
066 break;
|
066 return res;
|
||||||
067 \}
|
067 \}
|
||||||
068 ++str;
|
068 \} else \{
|
||||||
069 \}
|
069 break;
|
||||||
070
|
070 \}
|
||||||
071 /* set the sign only if a != 0 */
|
071 ++str;
|
||||||
072 if (mp_iszero(a) != 1) \{
|
072 \}
|
||||||
073 a->sign = neg;
|
073
|
||||||
074 \}
|
074 /* set the sign only if a != 0 */
|
||||||
075 return MP_OKAY;
|
075 if (mp_iszero(a) != 1) \{
|
||||||
076 \}
|
076 a->sign = neg;
|
||||||
077 #endif
|
077 \}
|
||||||
078
|
078 return MP_OKAY;
|
||||||
|
079 \}
|
||||||
|
080 #endif
|
||||||
|
081
|
||||||
\end{alltt}
|
\end{alltt}
|
||||||
\end{small}
|
\end{small}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user