Rename all symbols in libmp(3) to mp_*, just like Solaris.

The function pow() in libmp(3) clashes with pow(3) in libm. We could
rename this single function, but we can just take the same approach as
the Solaris folks did, which is to prefix all function names with mp_.

libmp(3) isn't really popular nowadays. I suspect not a single
application in ports depends on it. There's still a chance, so I've
increased the SHLIB_MAJOR and __FreeBSD_version.

Reviewed by:	deischen, rdivacky
This commit is contained in:
ed 2009-02-26 21:43:15 +00:00
parent bb22735cfd
commit fa4082de19
15 changed files with 255 additions and 229 deletions

View File

@ -14,6 +14,8 @@
# The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
#
# 20090226: libmp(3) functions renamed
OLD_LIBS+=usr/lib/libmp.so.6
# 20090223: changeover of USB stacks
OLD_FILES+=usr/include/dev/usb2/include/ufm2_ioctl.h
OLD_FILES+=usr/include/dev/usb2/include/urio2_ioctl.h

View File

@ -68,19 +68,19 @@ extractideakey(MINT *ck, IdeaData *ideakey)
short base = (1 << 8);
char *k;
z = itom(0);
a = itom(0);
madd(ck, z, a);
z = mp_itom(0);
a = mp_itom(0);
mp_madd(ck, z, a);
for (i = 0; i < ((KEYSIZE - 128) / 8); i++) {
sdiv(a, base, a, &r);
mp_sdiv(a, base, a, &r);
}
k = (char *)ideakey;
for (i = 0; i < 16; i++) {
sdiv(a, base, a, &r);
mp_sdiv(a, base, a, &r);
*k++ = r;
}
mfree(z);
mfree(a);
mp_mfree(z);
mp_mfree(a);
}
/*
@ -97,19 +97,19 @@ extractdeskey(MINT *ck, DesData *deskey)
short base = (1 << 8);
char *k;
z = itom(0);
a = itom(0);
madd(ck, z, a);
z = mp_itom(0);
a = mp_itom(0);
mp_madd(ck, z, a);
for (i = 0; i < ((KEYSIZE - 64) / 2) / 8; i++) {
sdiv(a, base, a, &r);
mp_sdiv(a, base, a, &r);
}
k = (char *)deskey;
for (i = 0; i < 8; i++) {
sdiv(a, base, a, &r);
mp_sdiv(a, base, a, &r);
*k++ = r;
}
mfree(z);
mfree(a);
mp_mfree(z);
mp_mfree(a);
}
/*
@ -121,19 +121,19 @@ common_key(char *xsecret, char *xpublic, IdeaData *ideakey, DesData *deskey)
MINT *public;
MINT *secret;
MINT *common;
MINT *modulus = xtom(HEXMODULUS);
MINT *modulus = mp_xtom(HEXMODULUS);
public = xtom(xpublic);
secret = xtom(xsecret);
common = itom(0);
pow(public, secret, modulus, common);
public = mp_xtom(xpublic);
secret = mp_xtom(xsecret);
common = mp_itom(0);
mp_pow(public, secret, modulus, common);
extractdeskey(common, deskey);
extractideakey(common, ideakey);
des_set_odd_parity(deskey);
mfree(common);
mfree(secret);
mfree(public);
mfree(modulus);
mp_mfree(common);
mp_mfree(secret);
mp_mfree(public);
mp_mfree(modulus);
}
/*
@ -161,12 +161,12 @@ genkeys(char *public, char *secret)
# define BASEBITS (8*sizeof(short) - 1)
# define BASE (1 << BASEBITS)
MINT *pk = itom(0);
MINT *sk = itom(0);
MINT *pk = mp_itom(0);
MINT *sk = mp_itom(0);
MINT *tmp;
MINT *base = itom(BASE);
MINT *root = itom(PROOT);
MINT *modulus = xtom(HEXMODULUS);
MINT *base = mp_itom(BASE);
MINT *root = mp_itom(PROOT);
MINT *modulus = mp_xtom(HEXMODULUS);
short r;
unsigned short seed[KEYSIZE/BASEBITS + 1];
char *xkey;
@ -174,24 +174,24 @@ genkeys(char *public, char *secret)
getseed((char *)seed, sizeof(seed));
for (i = 0; i < KEYSIZE/BASEBITS + 1; i++) {
r = seed[i] % BASE;
tmp = itom(r);
mult(sk, base, sk);
madd(sk, tmp, sk);
mfree(tmp);
tmp = mp_itom(r);
mp_mult(sk, base, sk);
mp_madd(sk, tmp, sk);
mp_mfree(tmp);
}
tmp = itom(0);
mdiv(sk, modulus, tmp, sk);
mfree(tmp);
pow(root, sk, modulus, pk);
xkey = mtox(sk);
tmp = mp_itom(0);
mp_mdiv(sk, modulus, tmp, sk);
mp_mfree(tmp);
mp_pow(root, sk, modulus, pk);
xkey = mp_mtox(sk);
adjust(secret, xkey);
xkey = mtox(pk);
xkey = mp_mtox(pk);
adjust(public, xkey);
mfree(sk);
mfree(base);
mfree(pk);
mfree(root);
mfree(modulus);
mp_mfree(sk);
mp_mfree(base);
mp_mfree(pk);
mp_mfree(root);
mp_mfree(modulus);
}
/*

View File

@ -1,14 +1,17 @@
# $FreeBSD$
LIB= mp
SHLIB_MAJOR= 6
SHLIB_MAJOR= 7
DPADD= ${LIBCRYPTO}
LDADD= -lcrypto
MAN= libmp.3
INCS= mp.h
SRCS= mpasbn.c
WARNS?= 0
WARNS?= 6
CFLAGS+= -I${.CURDIR}/../../crypto
VERSION_DEF= ${.CURDIR}/../libc/Versions.def
SYMBOL_MAPS= ${.CURDIR}/Symbol.map
.include <bsd.lib.mk>

23
lib/libmp/Symbol.map Normal file
View File

@ -0,0 +1,23 @@
/*
* $FreeBSD$
*/
FBSD_1.1 {
mp_gcd;
mp_itom;
mp_madd;
mp_mcmp;
mp_mdiv;
mp_mfree;
mp_min;
mp_mout;
mp_move;
mp_msqrt;
mp_msub;
mp_mtox;
mp_mult;
mp_pow;
mp_rpow;
mp_sdiv;
mp_xtom;
};

View File

@ -70,47 +70,47 @@ stored using the defined type
Pointers to
.Vt MINT
are initialized using
.Fn itom
.Fn mp_itom
or
.Fn xtom ,
.Fn mp_xtom ,
and must be recycled with
.Fn mfree
.Fn mp_mfree
when they are no longer needed.
Routines which store a result in one of their arguments expect that
the latter has also been initialized prior to being passed to it.
The following routines are defined and implemented:
.Pp
.Ft "MINT *" Ns
.Fn itom "short n" ;
.Fn mp_itom "short n" ;
.Pp
.Ft "MINT *" Ns
.Fn xtom "const char *s" ;
.Fn mp_xtom "const char *s" ;
.Pp
.Ft "char *" Ns
.Fn mtox "const MINT *mp" ;
.Fn mp_mtox "const MINT *mp" ;
.Pp
.Ft void
.Fn mfree "MINT *mp" ;
.Fn mp_mfree "MINT *mp" ;
.Bd -ragged -offset indent
.Fn itom
.Fn mp_itom
returns an
.Vt MINT
with the value of
.Fa n .
.Fn xtom
.Fn mp_xtom
returns an
.Vt MINT
with the value of
.Fa s ,
which is treated to be in hexadecimal.
The return values from
.Fn itom
.Fn mp_itom
and
.Fn xtom
.Fn mp_xtom
must be released with
.Fn mfree
.Fn mp_mfree
when they are no longer needed.
.Fn mtox
.Fn mp_mtox
returns a null-terminated hexadecimal string having the value of
.Fa mp ;
its return value must be released with
@ -120,18 +120,18 @@ when it is no longer needed.
.Ed
.Pp
.Ft void
.Fn madd "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Fn mp_madd "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Pp
.Ft void
.Fn msub "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Fn mp_msub "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Pp
.Ft void
.Fn mult "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Fn mp_mult "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Bd -ragged -offset indent
.Fn madd ,
.Fn msub ,
.Fn mp_madd ,
.Fn mp_msub ,
and
.Fn mult
.Fn mp_mult
store the sum, difference, or product, respectively, of
.Fa mp1
and
@ -141,12 +141,12 @@ in
.Ed
.Pp
.Ft void
.Fn mdiv "const MINT *nmp" "const MINT *dmp" "MINT *qmp" "MINT *rmp" ;
.Fn mp_mdiv "const MINT *nmp" "const MINT *dmp" "MINT *qmp" "MINT *rmp" ;
.Pp
.Ft void
.Fn sdiv "const MINT *nmp" "short d" "MINT *qmp" "short *ro" ;
.Fn mp_sdiv "const MINT *nmp" "short d" "MINT *qmp" "short *ro" ;
.Bd -ragged -offset indent
.Fn mdiv
.Fn mp_mdiv
computes the quotient and remainder of
.Fa nmp
and
@ -156,9 +156,9 @@ and stores the result in
and
.Fa rmp ,
respectively.
.Fn sdiv
.Fn mp_sdiv
is similar to
.Fn mdiv
.Fn mp_mdiv
except the divisor
.Fa ( dmp
or
@ -171,12 +171,12 @@ are ordinary integers.
.Ed
.Pp
.Ft void
.Fn pow "const MINT *bmp" "const MINT *emp" "const MINT *mmp" "MINT *rmp" ;
.Fn mp_pow "const MINT *bmp" "const MINT *emp" "const MINT *mmp" "MINT *rmp" ;
.Pp
.Ft void
.Fn rpow "const MINT *bmp" "short e" "MINT *rmp" ;
.Fn mp_rpow "const MINT *bmp" "short e" "MINT *rmp" ;
.Bd -ragged -offset indent
.Fn rpow
.Fn mp_rpow
computes the result of
.Fa bmp
raised to the
@ -185,7 +185,7 @@ power and reduced modulo
.Fa mmp ;
the result is stored in
.Fa rmp .
.Fn pow
.Fn mp_pow
computes the result of
.Fa bmp
raised to the
@ -195,25 +195,25 @@ power and stores the result in
.Ed
.Pp
.Ft void
.Fn min "MINT *mp" ;
.Fn mp_min "MINT *mp" ;
.Pp
.Ft void
.Fn mout "const MINT *mp" ;
.Fn mp_mout "const MINT *mp" ;
.Bd -ragged -offset indent
.Fn min
.Fn mp_min
reads a line from standard input, tries to interpret it as a decimal
number, and if successful, stores the result in
.Fa mp .
.Fn mout
.Fn mp_mout
prints the value, in decimal, of
.Fa mp
to standard output (without a trailing newline).
.Ed
.Pp
.Ft void
.Fn gcd "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Fn mp_gcd "const MINT *mp1" "const MINT *mp2" "MINT *rmp" ;
.Bd -ragged -offset indent
.Fn gcd
.Fn mp_gcd
computes the greatest common divisor of
.Fa mp1
and
@ -223,7 +223,7 @@ and stores the result in
.Ed
.Pp
.Ft int
.Fn mcmp "const MINT *mp1" "const MINT *mp2" ;
.Fn mp_mcmp "const MINT *mp1" "const MINT *mp2" ;
.Bd -ragged -offset indent
.Fa mcmp
compares the values of
@ -243,9 +243,9 @@ is greater than
.Ed
.Pp
.Ft void
.Fn move "const MINT *smp" "MINT *tmp" ;
.Fn mp_move "const MINT *smp" "MINT *tmp" ;
.Bd -ragged -offset indent
.Fn move
.Fn mp_move
copies the value of
.Fa smp
to
@ -254,9 +254,9 @@ to
.Ed
.Pp
.Ft void
.Fn msqrt "const MINT *nmp" "MINT *xmp" "MINT *rmp" ;
.Fn mp_msqrt "const MINT *nmp" "MINT *xmp" "MINT *rmp" ;
.Bd -ragged -offset indent
.Fn msqrt
.Fn mp_msqrt
computes the square root and remainder of
.Fa nmp
and stores them in
@ -296,24 +296,16 @@ implemented in terms of
This implementation appeared in
.Fx 5.0 .
.Sh BUGS
The
.Fn pow
routine exists in both
.Nm libmp
and
.Nm libm
with incompatible semantics.
.Pp
Errors are reported via output to standard error and abnormal
program termination instead of via return values.
The application cannot control this behavior.
.Pp
It is not clear whether the string returned by
.Fn mtox
.Fn mp_mtox
may be written to by the caller.
This implementation allows it, but others may not.
Ideally,
.Fn mtox
.Fn mp_mtox
would take a pointer to a buffer to fill in.
.Pp
It is not clear whether using the same variable as both source and

View File

@ -11,22 +11,22 @@ typedef struct _mint {
BIGNUM *bn;
} MINT;
void gcd(const MINT *, const MINT *, MINT *);
MINT *itom(short);
void madd(const MINT *, const MINT *, MINT *);
int mcmp(const MINT *, const MINT *);
void mdiv(const MINT *, const MINT *, MINT *, MINT *);
void mfree(MINT *);
void min(MINT *);
void mout(const MINT *);
void move(const MINT *, MINT *);
void msqrt(const MINT *, MINT *, MINT *);
void msub(const MINT *, const MINT *, MINT *);
char *mtox(const MINT *);
void mult(const MINT *, const MINT *, MINT *);
void pow(const MINT *, const MINT *, const MINT *, MINT *);
void rpow(const MINT *, short, MINT *);
void sdiv(const MINT *, short, MINT *, short *);
MINT *xtom(const char *);
void mp_gcd(const MINT *, const MINT *, MINT *);
MINT *mp_itom(short);
void mp_madd(const MINT *, const MINT *, MINT *);
int mp_mcmp(const MINT *, const MINT *);
void mp_mdiv(const MINT *, const MINT *, MINT *, MINT *);
void mp_mfree(MINT *);
void mp_min(MINT *);
void mp_mout(const MINT *);
void mp_move(const MINT *, MINT *);
void mp_msqrt(const MINT *, MINT *, MINT *);
void mp_msub(const MINT *, const MINT *, MINT *);
char *mp_mtox(const MINT *);
void mp_mult(const MINT *, const MINT *, MINT *);
void mp_pow(const MINT *, const MINT *, const MINT *, MINT *);
void mp_rpow(const MINT *, short, MINT *);
void mp_sdiv(const MINT *, short, MINT *, short *);
MINT *mp_xtom(const char *);
#endif /* !_MP_H_ */

View File

@ -140,7 +140,7 @@ _dtom(const char *msg, const char *s)
* Compute the greatest common divisor of mp1 and mp2; result goes in rmp.
*/
void
gcd(const MINT *mp1, const MINT *mp2, MINT *rmp)
mp_gcd(const MINT *mp1, const MINT *mp2, MINT *rmp)
{
BIGNUM b;
BN_CTX *c;
@ -173,7 +173,7 @@ _itom(const char *msg, short n)
}
MINT *
itom(short n)
mp_itom(short n)
{
return (_itom("itom", n));
@ -194,7 +194,7 @@ _madd(const char *msg, const MINT *mp1, const MINT *mp2, MINT *rmp)
}
void
madd(const MINT *mp1, const MINT *mp2, MINT *rmp)
mp_madd(const MINT *mp1, const MINT *mp2, MINT *rmp)
{
_madd("madd", mp1, mp2, rmp);
@ -204,7 +204,7 @@ madd(const MINT *mp1, const MINT *mp2, MINT *rmp)
* Return -1, 0, or 1 if mp1<mp2, mp1==mp2, or mp1>mp2, respectivley.
*/
int
mcmp(const MINT *mp1, const MINT *mp2)
mp_mcmp(const MINT *mp1, const MINT *mp2)
{
return (BN_cmp(mp1->bn, mp2->bn));
@ -239,7 +239,7 @@ _mdiv(const char *msg, const MINT *nmp, const MINT *dmp, MINT *qmp, MINT *rmp,
}
void
mdiv(const MINT *nmp, const MINT *dmp, MINT *qmp, MINT *rmp)
mp_mdiv(const MINT *nmp, const MINT *dmp, MINT *qmp, MINT *rmp)
{
BN_CTX *c;
@ -263,7 +263,7 @@ _mfree(const char *msg __unused, MINT *mp)
}
void
mfree(MINT *mp)
mp_mfree(MINT *mp)
{
_mfree("mfree", mp);
@ -277,7 +277,7 @@ mfree(MINT *mp)
* exported.)
*/
void
min(MINT *mp)
mp_min(MINT *mp)
{
MINT *rmp;
char *line, *nline;
@ -302,7 +302,7 @@ min(MINT *mp)
* above min() for why this is so useless.
*/
void
mout(const MINT *mp)
mp_mout(const MINT *mp)
{
char *s;
@ -315,7 +315,7 @@ mout(const MINT *mp)
* Set the value of tmp to the value of smp (i.e., tmp=smp).
*/
void
move(const MINT *smp, MINT *tmp)
mp_move(const MINT *smp, MINT *tmp)
{
_movem("move", smp, tmp);
@ -357,7 +357,7 @@ _movem(const char *msg, const MINT *smp, MINT *tmp)
* although suboptimal, works, too; this is that is used below.
*/
void
msqrt(const MINT *nmp, MINT *xmp, MINT *rmp)
mp_msqrt(const MINT *nmp, MINT *xmp, MINT *rmp)
{
BN_CTX *c;
MINT *tolerance;
@ -409,7 +409,7 @@ _msub(const char *msg, const MINT *mp1, const MINT *mp2, MINT *rmp)
}
void
msub(const MINT *mp1, const MINT *mp2, MINT *rmp)
mp_msub(const MINT *mp1, const MINT *mp2, MINT *rmp)
{
_msub("msub", mp1, mp2, rmp);
@ -467,7 +467,7 @@ _mtox(const char *msg, const MINT *mp)
}
char *
mtox(const MINT *mp)
mp_mtox(const MINT *mp)
{
return (_mtox("mtox", mp));
@ -488,7 +488,7 @@ _mult(const char *msg, const MINT *mp1, const MINT *mp2, MINT *rmp, BN_CTX *c)
}
void
mult(const MINT *mp1, const MINT *mp2, MINT *rmp)
mp_mult(const MINT *mp1, const MINT *mp2, MINT *rmp)
{
BN_CTX *c;
@ -504,7 +504,7 @@ mult(const MINT *mp1, const MINT *mp2, MINT *rmp)
* means 'raise to power', not 'bitwise XOR'.)
*/
void
pow(const MINT *bmp, const MINT *emp, const MINT *mmp, MINT *rmp)
mp_pow(const MINT *bmp, const MINT *emp, const MINT *mmp, MINT *rmp)
{
BIGNUM b;
BN_CTX *c;
@ -523,7 +523,7 @@ pow(const MINT *bmp, const MINT *emp, const MINT *mmp, MINT *rmp)
* Compute rmp=bmp^e. (See note above pow().)
*/
void
rpow(const MINT *bmp, short e, MINT *rmp)
mp_rpow(const MINT *bmp, short e, MINT *rmp)
{
MINT *emp;
BIGNUM b;
@ -572,7 +572,7 @@ _sdiv(const char *msg, const MINT *nmp, short d, MINT *qmp, short *ro,
}
void
sdiv(const MINT *nmp, short d, MINT *qmp, short *ro)
mp_sdiv(const MINT *nmp, short d, MINT *qmp, short *ro)
{
BN_CTX *c;
@ -602,7 +602,7 @@ _xtom(const char *msg, const char *s)
}
MINT *
xtom(const char *s)
mp_xtom(const char *s)
{
return (_xtom("xtom", s));

View File

@ -13,7 +13,7 @@ INTERNALLIB=
SRCS= genget.c getent.c misc.c
CFLAGS+= -I${TELNETDIR}
WARNS?= 0
WARNS?= 2
.if !defined(RELEASE_CRUNCH)
.if ${MK_OPENSSL} != "no"

View File

@ -57,7 +57,7 @@
* is created, otherwise 1.
*/
#undef __FreeBSD_version
#define __FreeBSD_version 800064 /* Master, propagated to newvers */
#define __FreeBSD_version 800065 /* Master, propagated to newvers */
#ifndef LOCORE
#include <sys/types.h>

View File

@ -40,7 +40,7 @@ static void
testmcmp(const MINT *mp1, const MINT *mp2, const char *tname)
{
if (mcmp(mp1, mp2) == 0)
if (mp_mcmp(mp1, mp2) == 0)
printf("ok %d - %s\n", ++tnr, tname);
else
printf("not ok - %d %s\n", ++tnr, tname);
@ -53,32 +53,32 @@ testsimpel(void)
MINT *t2;
char *s;
madd(c42, c1, t0);
mp_madd(c42, c1, t0);
testmcmp(c43, t0, "madd0");
madd(t0, c1, t0);
mp_madd(t0, c1, t0);
testmcmp(c44, t0, "madd1");
msub(t0, c1, t0);
mp_msub(t0, c1, t0);
testmcmp(c43, t0, "msub0");
msub(t0, c1, t0);
mp_msub(t0, c1, t0);
testmcmp(c42, t0, "msub1");
move(c42, t0);
mp_move(c42, t0);
testmcmp(c42, t0, "move0");
t2 = xtom(str42);
t2 = mp_xtom(str42);
testmcmp(c42, t2, "xtom");
s = mtox(t2);
s = mp_mtox(t2);
if (strcmp(str42, s) == 0)
printf("ok %d - %s\n", ++tnr, "mtox0");
else
printf("not ok %d - %s\n", ++tnr, "mtox0");
mfree(t2);
mp_mfree(t2);
}
static int
testgcd(void)
{
gcd(c10, c15, t0);
mp_gcd(c10, c15, t0);
testmcmp(t0, c5, "gcd0");
}
@ -86,10 +86,10 @@ static int
testmsqrt(void)
{
msqrt(c25, t0, t1);
mp_msqrt(c25, t0, t1);
testmcmp(t0, c5, "msqrt0");
testmcmp(t1, c0, "msqrt1");
msqrt(c42, t0, t1);
mp_msqrt(c42, t0, t1);
testmcmp(t0, c6, "msqrt2");
testmcmp(t1, c6, "msqrt3");
}
@ -100,34 +100,34 @@ testdiv(void)
short ro;
MINT *t2;
mdiv(c42, c5, t0, t1);
mp_mdiv(c42, c5, t0, t1);
testmcmp(t0, c8, "mdiv0");
testmcmp(t1, c2, "mdiv1");
mdiv(c10, c8, t0, t1);
mp_mdiv(c10, c8, t0, t1);
testmcmp(t0, c1, "mdiv2");
testmcmp(t1, c2, "mdiv3");
sdiv(c42, 5, t0, &ro);
mp_sdiv(c42, 5, t0, &ro);
testmcmp(t0, c8, "sdiv0");
t2 = itom(ro); // Simpler to use common testmcmp()
t2 = mp_itom(ro); // Simpler to use common testmcmp()
testmcmp(t2, c2, "sdiv1");
mfree(t2);
mp_mfree(t2);
sdiv(c10, 8, t0, &ro);
mp_sdiv(c10, 8, t0, &ro);
testmcmp(t0, c1, "sdiv2");
t2 = itom(ro); // Simpler to use common testmcmp()
t2 = mp_itom(ro); // Simpler to use common testmcmp()
testmcmp(t2, c2, "sdiv3");
mfree(t2);
mp_mfree(t2);
}
static int
testmult(void)
{
mult(c5, c2, t0);
mp_mult(c5, c2, t0);
testmcmp(t0, c10, "mmult0");
mult(c3, c14, t0);
mp_mult(c3, c14, t0);
testmcmp(t0, c42, "mmult1");
}
@ -135,11 +135,11 @@ static int
testpow(void)
{
pow(c2, c3, c10, t0);
mp_pow(c2, c3, c10, t0);
testmcmp(t0, c8, "pow0");
pow(c2, c3, c3, t0);
mp_pow(c2, c3, c3, t0);
testmcmp(t0, c2, "pow1");
rpow(c2, 3, t0);
mp_rpow(c2, 3, t0);
testmcmp(t0, c8, "rpow0");
}
@ -160,25 +160,25 @@ main(int argc, char *argv[])
* cumbersome way to in theory be able to check for memory
* leaks.
*/
c0 = itom(0);
c1 = itom(1);
c2 = itom(2);
c3 = itom(3);
c5 = itom(5);
c6 = itom(6);
c8 = itom(8);
c10 = itom(10);
c14 = itom(14);
c15 = itom(15);
c25 = itom(25);
c42 = itom(42);
c43 = itom(43);
c44 = itom(44);
c45 = itom(45);
c0 = mp_itom(0);
c1 = mp_itom(1);
c2 = mp_itom(2);
c3 = mp_itom(3);
c5 = mp_itom(5);
c6 = mp_itom(6);
c8 = mp_itom(8);
c10 = mp_itom(10);
c14 = mp_itom(14);
c15 = mp_itom(15);
c25 = mp_itom(25);
c42 = mp_itom(42);
c43 = mp_itom(43);
c44 = mp_itom(44);
c45 = mp_itom(45);
// Init temp variables
t0 = itom(0);
t1 = itom(0);
t0 = mp_itom(0);
t1 = mp_itom(0);
// Run tests
testsimpel();
@ -189,23 +189,23 @@ main(int argc, char *argv[])
testmsqrt();
// Cleanup
mfree(c0);
mfree(c1);
mfree(c2);
mfree(c3);
mfree(c5);
mfree(c6);
mfree(c8);
mfree(c10);
mfree(c14);
mfree(c15);
mfree(c25);
mfree(c42);
mfree(c43);
mfree(c44);
mfree(c45);
mfree(t0);
mfree(t1);
mp_mfree(c0);
mp_mfree(c1);
mp_mfree(c2);
mp_mfree(c3);
mp_mfree(c5);
mp_mfree(c6);
mp_mfree(c8);
mp_mfree(c10);
mp_mfree(c14);
mp_mfree(c15);
mp_mfree(c25);
mp_mfree(c42);
mp_mfree(c43);
mp_mfree(c44);
mp_mfree(c45);
mp_mfree(t0);
mp_mfree(t1);
return (EX_OK);
}

View File

@ -13,4 +13,6 @@ CFLAGS+= -DYP
DPADD= ${LIBRPCSVC} ${LIBMP} ${LIBCRYPTO}
LDADD= -lrpcsvc -lmp -lcrypto
WARNS?= 6
.include <bsd.prog.mk>

View File

@ -11,4 +11,6 @@ MAN= newkey.8
DPADD= ${LIBRPCSVC} ${LIBMP} ${LIBCRYPTO}
LDADD= -lrpcsvc -lmp -lcrypto
WARNS?= 6
.include <bsd.prog.mk>

View File

@ -79,12 +79,12 @@ genkeys(char *public, char *secret, char *pass)
# define BASEBITS (8*sizeof (short) - 1)
# define BASE (1 << BASEBITS)
MINT *pk = itom(0);
MINT *sk = itom(0);
MINT *pk = mp_itom(0);
MINT *sk = mp_itom(0);
MINT *tmp;
MINT *base = itom(BASE);
MINT *root = itom(PROOT);
MINT *modulus = xtom(HEXMODULUS);
MINT *base = mp_itom(BASE);
MINT *root = mp_itom(PROOT);
MINT *modulus = mp_xtom(HEXMODULUS);
short r;
unsigned short seed[KEYSIZE/BASEBITS + 1];
char *xkey;
@ -92,24 +92,24 @@ genkeys(char *public, char *secret, char *pass)
getseed((char *)seed, sizeof (seed), (u_char *)pass);
for (i = 0; i < KEYSIZE/BASEBITS + 1; i++) {
r = seed[i] % BASE;
tmp = itom(r);
mult(sk, base, sk);
madd(sk, tmp, sk);
mfree(tmp);
tmp = mp_itom(r);
mp_mult(sk, base, sk);
mp_madd(sk, tmp, sk);
mp_mfree(tmp);
}
tmp = itom(0);
mdiv(sk, modulus, tmp, sk);
mfree(tmp);
pow(root, sk, modulus, pk);
xkey = mtox(sk);
tmp = mp_itom(0);
mp_mdiv(sk, modulus, tmp, sk);
mp_mfree(tmp);
mp_pow(root, sk, modulus, pk);
xkey = mp_mtox(sk);
adjust(secret, xkey);
xkey = mtox(pk);
xkey = mp_mtox(pk);
adjust(public, xkey);
mfree(sk);
mfree(base);
mfree(pk);
mfree(root);
mfree(modulus);
mp_mfree(sk);
mp_mfree(base);
mp_mfree(pk);
mp_mfree(root);
mp_mfree(modulus);
}
/*

View File

@ -9,6 +9,8 @@ CFLAGS+= -DKEYSERV_RANDOM -DBROKEN_DES -I.
DPADD= ${LIBMP} ${LIBCRYPTO} ${LIBRPCSVC}
LDADD= -lmp -lcrypto -lrpcsvc
WARNS?= 1
RPCDIR= ${DESTDIR}/usr/include/rpcsvc
CLEANFILES= crypt_svc.c crypt.h

View File

@ -84,7 +84,7 @@ void
setmodulus(modx)
char *modx;
{
MODULUS = xtom(modx);
MODULUS = mp_xtom(modx);
}
/*
@ -198,19 +198,19 @@ pk_crypt(uid, remote_name, remote_key, key, mode)
}
if (!readcache(xpublic, xsecret, &deskey)) {
public = xtom(xpublic);
secret = xtom(xsecret);
public = mp_xtom(xpublic);
secret = mp_xtom(xsecret);
/* Sanity Check on public and private keys */
if ((public == NULL) || (secret == NULL))
return (KEY_SYSTEMERR);
common = itom(0);
pow(public, secret, MODULUS, common);
common = mp_itom(0);
mp_pow(public, secret, MODULUS, common);
extractdeskey(common, &deskey);
writecache(xpublic, xsecret, &deskey);
mfree(secret);
mfree(public);
mfree(common);
mp_mfree(secret);
mp_mfree(public);
mp_mfree(common);
}
err = ecb_crypt((char *)&deskey, (char *)key, sizeof (des_block),
DES_HW | mode);
@ -248,19 +248,19 @@ pk_get_conv_key(uid, xpublic, result)
}
if (!readcache(xpublic, xsecret, &result->cryptkeyres_u.deskey)) {
public = xtom(xpublic);
secret = xtom(xsecret);
public = mp_xtom(xpublic);
secret = mp_xtom(xsecret);
/* Sanity Check on public and private keys */
if ((public == NULL) || (secret == NULL))
return (KEY_SYSTEMERR);
common = itom(0);
pow(public, secret, MODULUS, common);
common = mp_itom(0);
mp_pow(public, secret, MODULUS, common);
extractdeskey(common, &result->cryptkeyres_u.deskey);
writecache(xpublic, xsecret, &result->cryptkeyres_u.deskey);
mfree(secret);
mfree(public);
mfree(common);
mp_mfree(secret);
mp_mfree(public);
mp_mfree(common);
}
return (KEY_SUCCESS);
@ -281,21 +281,21 @@ extractdeskey(ck, deskey)
short base = (1 << 8);
char *k;
a = itom(0);
a = mp_itom(0);
#ifdef SOLARIS_MP
_mp_move(ck, a);
#else
move(ck, a);
mp_move(ck, a);
#endif
for (i = 0; i < ((KEYSIZE - 64) / 2) / 8; i++) {
sdiv(a, base, a, &r);
mp_sdiv(a, base, a, &r);
}
k = deskey->c;
for (i = 0; i < 8; i++) {
sdiv(a, base, a, &r);
mp_sdiv(a, base, a, &r);
*k++ = r;
}
mfree(a);
mp_mfree(a);
des_setparity((char *)deskey);
}