Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
nettle
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
5
Merge Requests
5
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Nettle
nettle
Commits
2a22cbdc
Commit
2a22cbdc
authored
Jun 25, 2014
by
Niels Möller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support for building with mini-gmp.
parent
cd957908
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
187 additions
and
28 deletions
+187
-28
ChangeLog
ChangeLog
+38
-0
Makefile.in
Makefile.in
+14
-6
bignum.h.in
bignum.h.in
+21
-1
configure.ac
configure.ac
+46
-20
examples/ecc-benchmark.c
examples/ecc-benchmark.c
+18
-0
testsuite/ecc-mod-test.c
testsuite/ecc-mod-test.c
+9
-0
testsuite/ecc-modinv-test.c
testsuite/ecc-modinv-test.c
+9
-0
testsuite/ecc-mul-a-test.c
testsuite/ecc-mul-a-test.c
+9
-0
testsuite/ecc-mul-g-test.c
testsuite/ecc-mul-g-test.c
+9
-0
testsuite/ecc-redc-test.c
testsuite/ecc-redc-test.c
+9
-0
testsuite/symbols-test
testsuite/symbols-test
+5
-1
No files found.
ChangeLog
View file @
2a22cbdc
2014-06-25 Niels Möller <nisse@lysator.liu.se>
Support for building with mini-gmp instead of the real GMP.
* configure.ac: New command line option --enable-mini-gmp. Also
disable all libgmp-related checks when enabled.
(NETTLE_USE_MINI_GMP): New substituted variable.
(LIBHOGWEED_LIBS): Use $(LIBS) instead of -lgmp.
(IF_MINI_GMP): New Makefile conditional.
(GMP_NUMB_BITS): Alternative test for the mini-gmp case.
Substituted also in bignum.h.
(HAVE_MPZ_POWM_SEC): Drop this unused check.
* bignum.h: Renamed, to...
* bignum.h.in: New name.
(NETTLE_USE_MINI_GMP): Substituted by configure.
(GMP_NUMB_BITS): Substituted by configure, for the mini-gmp case.
* Makefile.in (OPT_HOGWEED_SOURCES): New variable, value
conditional on @IF_MINI_GMP@.
(hogweed_SOURCES): Add $(OPT_HOGWEED_SOURCES).
(PRE_CPPFLAGS): Add -I$(srcdir).
(HEADERS): Delete bignum.h.
(INSTALL_HEADERS): Add bignum.h. Also add mini-gmp.h, if mini-gmp
is enabled.
(DISTFILES): Added bignum.h.in.
(bignum.h): New target.
(distclean-here): Delete bignum.h.
* examples/ecc-benchmark.c (modinv_gcd) [NETTLE_USE_MINI_GMP]:
Disable this benchmark.
(mpn_random) [NETTLE_USE_MINI_GMP]: Provide a simple implementation.
* testsuite/ecc-mod-test.c [NETTLE_USE_MINI_GMP]: Skip test, it
depends on gmp_randstate_t.
* testsuite/ecc-modinv-test.c [NETTLE_USE_MINI_GMP]: Likewise.
* testsuite/ecc-mul-a-test.c [NETTLE_USE_MINI_GMP]: Likewise.
* testsuite/ecc-mul-g-test.c [NETTLE_USE_MINI_GMP]: Likewise.
* testsuite/ecc-redc-test.c [NETTLE_USE_MINI_GMP]: Likewise.
Various preparations for mini-gmp support.
* testsuite/bignum-test.c: Use WITH_HOGWEED instead of HAVE_LIBGMP
for preprocessor conditionals.
* testsuite/testutils.h: Likewise.
...
...
Makefile.in
View file @
2a22cbdc
...
...
@@ -15,11 +15,15 @@ MKDIR_P = @MKDIR_P@
OPT_ASM_NETTLE_SOURCES
=
@OPT_ASM_NETTLE_SOURCES@
OPT_ASM_HOGWEED_SOURCES
=
@OPT_ASM_HOGWEED_SOURCES@
OPT_HOGWEED_SOURCES
=
@IF_MINI_GMP@ mini-gmp.c
SUBDIRS
=
tools testsuite examples
include
config.make
PRE_CPPFLAGS
=
-I
.
# $(srcdir) is needed for includes in bignum.h.
PRE_CPPFLAGS
=
-I
.
-I
$(srcdir)
# FIXME: Add configuration of LIBEXT?
LIBTARGETS
=
@IF_STATIC@ libnettle.a @IF_HOGWEED@ libhogweed.a
SHLIBTARGETS
=
@IF_SHARED@
$(LIBNETTLE_FORLINK)
@IF_HOGWEED@
$(LIBHOGWEED_FORLINK)
...
...
@@ -165,9 +169,10 @@ hogweed_SOURCES = sexp.c sexp-format.c \
ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c
\
ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c
\
ecc-ecdsa-sign.c ecdsa-sign.c
\
ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c
ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c
\
$(OPT_HOGWEED_SOURCES)
HEADERS
=
aes.h arcfour.h arctwo.h asn1.h b
ignum.h b
lowfish.h
\
HEADERS
=
aes.h arcfour.h arctwo.h asn1.h blowfish.h
\
base16.h base64.h buffer.h camellia.h cast128.h
\
cbc.h ccm.h chacha.h chacha-poly1305.h ctr.h
\
des.h des-compat.h dsa.h dsa-compat.h eax.h
\
...
...
@@ -185,7 +190,7 @@ HEADERS = aes.h arcfour.h arctwo.h asn1.h bignum.h blowfish.h \
serpent.h sha.h sha1.h sha2.h sha3.h twofish.h
\
umac.h yarrow.h poly1305.h
INSTALL_HEADERS
=
$(HEADERS)
nettle-stdint.h
INSTALL_HEADERS
=
$(HEADERS)
nettle-stdint.h
bignum.h @IF_MINI_GMP@ mini-gmp.h
SOURCES
=
$(nettle_SOURCES)
$(hogweed_SOURCES)
\
$(getopt_SOURCES)
$(internal_SOURCES)
\
...
...
@@ -194,7 +199,7 @@ SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
DISTFILES
=
$(SOURCES)
$(HEADERS)
getopt.h getopt_int.h
\
.bootstrap run-tests
\
aclocal.m4 configure.ac
\
configure stamp-h.in
\
configure stamp-h.in
bignum.h.in
\
config.guess config.sub install-sh texinfo.tex
\
config.h.in config.m4.in config.make.in Makefile.in
\
README AUTHORS COPYING.LESSERv3 COPYINGv2 COPYINGv3
\
...
...
@@ -411,6 +416,9 @@ stamp-h: config.h.in config.status
./config.status config.h
echo
timestamp
>
stamp-h
bignum.h
:
bignum.h.in config.status
./config.status
$@
Makefile
:
Makefile.in config.status
./config.status
$@
...
...
@@ -617,7 +625,7 @@ clean-here:
distclean-here
:
clean-here
-
rm
-f
config.h stamp-h config.log config.status machine.m4
\
config.make config.m4 Makefile nettle-stdint.h
\
config.make config.m4 Makefile nettle-stdint.h
bignum.h
\
nettle.pc hogweed.pc
\
*
.asm
*
.d
...
...
bignum.h
→
bignum.h
.in
View file @
2a22cbdc
...
...
@@ -36,9 +36,29 @@
#include "nettle-meta.h"
#include <gmp.h>
#include "nettle-types.h"
#define NETTLE_USE_MINI_GMP @NETTLE_USE_MINI_GMP@
#if NETTLE_USE_MINI_GMP
# include "mini-gmp.h"
/* We need a preprocessor constant for GMP_NUMB_BITS, simply using
sizeof(mp_limb_t) * CHAR_BIT is not good enough. */
# define GMP_NUMB_BITS @GMP_NUMB_BITS@
# define GMP_NUMB_MASK (~(mp_limb_t) 0)
/* Functions missing in older gmp versions, and checked for with ifdef */
# define mpz_limbs_read mpz_limbs_read
# define mpn_copyd mpn_copyd
# define mpn_sqr mpn_sqr
# define mpz_combit mpz_combit
# define mpz_import mpz_import
# define mpz_export mpz_export
#else
# include <gmp.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
...
...
configure.ac
View file @
2a22cbdc
...
...
@@ -72,6 +72,17 @@ AC_ARG_ENABLE(arm-neon,
AC_HELP_STRING([--enable-arm-neon], [Enable ARM Neon assembly. (default=auto)]),,
[enable_arm_neon=auto])
AC_ARG_ENABLE(mini-gmp,
AC_HELP_STRING([--enable-mini-gmp], [Enable mini-gmp, used instead of libgmp.]),,
[enable_mini_gmp=no])
if test "x$enable_mini_gmp" = xyes ; then
NETTLE_USE_MINI_GMP=1
else
NETTLE_USE_MINI_GMP=0
fi
AC_SUBST([NETTLE_USE_MINI_GMP])
LSH_RPATH_INIT([`echo $with_lib_path | sed 's/:/ /g'` \
`echo $exec_prefix | sed "s@^NONE@$prefix/lib@g" | sed "s@^NONE@$ac_default_prefix/lib@g"` \
/usr/local/lib /sw/local/lib /sw/lib \
...
...
@@ -441,7 +452,7 @@ case "$host_os" in
LIBHOGWEED_SONAME='libhogweed.$(LIBHOGWEED_MAJOR).dylib'
LIBHOGWEED_FILE='libhogweed.$(LIBHOGWEED_MAJOR).$(LIBHOGWEED_MINOR).dylib'
LIBHOGWEED_LINK='$(CC) $(CFLAGS) -dynamiclib -L. $(LDFLAGS) -install_name ${libdir}/$(LIBHOGWEED_SONAME) -compatibility_version $(LIBHOGWEED_MAJOR) -current_version $(LIBHOGWEED_MAJOR).$(LIBHOGWEED_MINOR)'
LIBHOGWEED_LIBS='-lnettle
-lgmp
'
LIBHOGWEED_LIBS='-lnettle
$(LIBS)
'
;;
solaris*)
# Sun's ld uses -h to set the soname, and this option is passed
...
...
@@ -457,7 +468,7 @@ case "$host_os" in
LIBHOGWEED_SONAME='$(LIBHOGWEED_FORLINK).$(LIBHOGWEED_MAJOR)'
LIBHOGWEED_FILE='$(LIBHOGWEED_SONAME).$(LIBHOGWEED_MINOR)'
LIBHOGWEED_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -G -h $(LIBHOGWEED_SONAME)'
LIBHOGWEED_LIBS='libnettle.so
-lgmp
'
LIBHOGWEED_LIBS='libnettle.so
$(LIBS)
'
;;
*)
LIBNETTLE_FORLINK=libnettle.so
...
...
@@ -474,7 +485,7 @@ case "$host_os" in
# (does not work in general, e.g., with static linking all of
# -lhogweed -lgmp -lnettle are still required). Also makes dlopen
# of libhogweed.so work, without having to use RTLD_GLOBAL.
LIBHOGWEED_LIBS='libnettle.so
-lgmp
'
LIBHOGWEED_LIBS='libnettle.so
$(LIBS)
'
;;
esac
...
...
@@ -693,20 +704,30 @@ fi
# Checks for libraries
if test "x$enable_public_key" = "xyes" ; then
AC_CHECK_LIB(gmp, __gmpz_getlimbn,,
[AC_MSG_WARN(
[GNU MP not found, or not 3.1 or up, see http://gmplib.org/.
Support for public key algorithms will be unavailable.])]
enable_public_key=no)
# Add -R flags needed to run programs linked with gmp
LSH_RPATH_FIX
if test "x$enable_mini_gmp" = "xno" ; then
AC_CHECK_LIB(gmp, __gmpz_getlimbn,,
[AC_MSG_WARN(
[GNU MP not found, or not 3.1 or up, see http://gmplib.org/.
Support for public key algorithms will be unavailable.])]
enable_public_key=no)
# Add -R flags needed to run programs linked with gmp
LSH_RPATH_FIX
fi
fi
nettle_cv_gmp_numb_bits=0
if test "x$enable_public_key" = "xyes" ; then
# Check for gmp limb size
nettle_cv_gmp_numb_bits=0
if test "$enable_public_key" = yes; then
if test "x$enable_mini_gmp" = "xyes" ; then
AC_MSG_CHECKING([for mini-gmp limb size])
# With mini-gmp, mp_limb_t is always unsigned long.
AC_COMPUTE_INT(nettle_cv_gmp_numb_bits, [(sizeof(unsigned long) * CHAR_BIT)],
[#include <limits.h>],
[AC_MSG_FAILURE([cannot find value of GMP_NUMB_BITS])])
AC_MSG_RESULT([$nettle_cv_gmp_numb_bits bits])
else
AC_MSG_CHECKING([for GMP limb size])
AC_COMPUTE_INT(nettle_cv_gmp_numb_bits, [GMP_NUMB_BITS],
[#include <gmp.h>],
...
...
@@ -714,14 +735,11 @@ if test "x$enable_public_key" = "xyes" ; then
AC_MSG_RESULT([$nettle_cv_gmp_numb_bits bits])
fi
GMP_NUMB_BITS="$nettle_cv_gmp_numb_bits"
AC_SUBST([GMP_NUMB_BITS])
AH_TEMPLATE([HAVE_MPZ_POWM_SEC], [Define if mpz_powm_sec is available (appeared in GMP-5)])
AC_CHECK_FUNC(__gmpz_powm_sec, [AC_DEFINE(HAVE_MPZ_POWM_SEC)])
fi
GMP_NUMB_BITS="$nettle_cv_gmp_numb_bits"
AC_SUBST([GMP_NUMB_BITS])
AH_TEMPLATE([WITH_HOGWEED], [Defined if public key features are enabled])
if test "x$enable_public_key" = xyes ; then
...
...
@@ -765,11 +783,18 @@ else
IF_DOCUMENTATION='#'
fi
if test "x$enable_mini_gmp" = "xyes" ; then
IF_MINI_GMP=''
else
IF_MINI_GMP='#'
fi
AC_SUBST(IF_HOGWEED)
AC_SUBST(IF_STATIC)
AC_SUBST(IF_SHARED)
AC_SUBST(IF_DOCUMENTATION)
AC_SUBST(IF_DLL)
AC_SUBST(IF_MINI_GMP)
OPENSSL_LIBFLAGS=''
...
...
@@ -834,7 +859,7 @@ if test x$GCC = xyes ; then
# inttypes.h.
fi
AC_CONFIG_FILES([config.make config.m4 Makefile])
AC_CONFIG_FILES([config.make config.m4 Makefile
bignum.h
])
AC_CONFIG_FILES([tools/Makefile testsuite/Makefile examples/Makefile])
AC_CONFIG_FILES([nettle.pc hogweed.pc])
...
...
@@ -852,5 +877,6 @@ AC_MSG_NOTICE([summary of build options:
Static libraries: ${enable_static}
Shared libraries: ${enable_shared}
Public key crypto: ${enable_public_key}
Using mini-gmp: ${enable_mini_gmp}
Documentation: ${enable_documentation}
])
examples/ecc-benchmark.c
View file @
2a22cbdc
...
...
@@ -108,6 +108,7 @@ time_function(void (*f)(void *arg), void *arg)
return
elapsed
/
ncalls
;
}
#if !NETTLE_USE_MINI_GMP
static
int
modinv_gcd
(
const
struct
ecc_curve
*
ecc
,
mp_limb_t
*
rp
,
mp_limb_t
*
ap
,
mp_limb_t
*
tp
)
...
...
@@ -134,6 +135,7 @@ modinv_gcd (const struct ecc_curve *ecc,
mpn_copyi
(
rp
,
sp
,
size
);
return
1
;
}
#endif
struct
ecc_ctx
{
const
struct
ecc_curve
*
ecc
;
...
...
@@ -175,6 +177,7 @@ bench_modinv (void *p)
ecc_modp_inv
(
ctx
->
ecc
,
ctx
->
rp
,
ctx
->
rp
+
ctx
->
ecc
->
size
,
ctx
->
tp
);
}
#if !NETTLE_USE_MINI_GMP
static
void
bench_modinv_gcd
(
void
*
p
)
{
...
...
@@ -182,6 +185,7 @@ bench_modinv_gcd (void *p)
mpn_copyi
(
ctx
->
rp
+
ctx
->
ecc
->
size
,
ctx
->
ap
,
ctx
->
ecc
->
size
);
modinv_gcd
(
ctx
->
ecc
,
ctx
->
rp
,
ctx
->
rp
+
ctx
->
ecc
->
size
,
ctx
->
tp
);
}
#endif
#ifdef mpn_sec_powm
static
void
...
...
@@ -233,6 +237,16 @@ bench_mul_a (void *p)
ecc_mul_a
(
ctx
->
ecc
,
1
,
ctx
->
rp
,
ctx
->
ap
,
ctx
->
bp
,
ctx
->
tp
);
}
#if NETTLE_USE_MINI_GMP
static
void
mpn_random
(
mp_limb_t
*
xp
,
mp_size_t
n
)
{
mp_size_t
i
;
for
(
i
=
0
;
i
<
n
;
i
++
)
xp
[
i
]
=
rand
();
}
#endif
static
void
bench_curve
(
const
struct
ecc_curve
*
ecc
)
{
...
...
@@ -276,7 +290,11 @@ bench_curve (const struct ecc_curve *ecc)
modq
=
time_function
(
bench_modq
,
&
ctx
);
modinv
=
time_function
(
bench_modinv
,
&
ctx
);
#if !NETTLE_USE_MINI_GMP
modinv_gcd
=
time_function
(
bench_modinv_gcd
,
&
ctx
);
#else
modinv_gcd
=
0
;
#endif
#ifdef mpn_sec_powm
modinv_powm
=
time_function
(
bench_modinv_powm
,
&
ctx
);
#else
...
...
testsuite/ecc-mod-test.c
View file @
2a22cbdc
#include "testutils.h"
#if NETTLE_USE_MINI_GMP
void
test_main
(
void
)
{
SKIP
();
}
#else
/* ! NETTLE_USE_MINI_GMP */
static
void
ref_mod
(
mp_limb_t
*
rp
,
const
mp_limb_t
*
ap
,
const
mp_limb_t
*
mp
,
mp_size_t
mn
)
{
...
...
@@ -113,3 +121,4 @@ test_main (void)
mpz_clear
(
r
);
gmp_randclear
(
state
);
}
#endif
/* ! NETTLE_USE_MINI_GMP */
testsuite/ecc-modinv-test.c
View file @
2a22cbdc
#include "testutils.h"
#if NETTLE_USE_MINI_GMP
void
test_main
(
void
)
{
SKIP
();
}
#else
/* ! NETTLE_USE_MINI_GMP */
static
int
ref_modinv
(
mp_limb_t
*
rp
,
const
mp_limb_t
*
ap
,
const
mp_limb_t
*
mp
,
mp_size_t
mn
)
{
...
...
@@ -105,3 +113,4 @@ test_main (void)
gmp_randclear
(
state
);
mpz_clear
(
r
);
}
#endif
/* ! NETTLE_USE_MINI_GMP */
testsuite/ecc-mul-a-test.c
View file @
2a22cbdc
#include "testutils.h"
#if NETTLE_USE_MINI_GMP
void
test_main
(
void
)
{
SKIP
();
}
#else
/* ! NETTLE_USE_MINI_GMP */
void
test_main
(
void
)
{
...
...
@@ -100,3 +108,4 @@ test_main (void)
mpz_clear
(
r
);
gmp_randclear
(
state
);
}
#endif
/* ! NETTLE_USE_MINI_GMP */
testsuite/ecc-mul-g-test.c
View file @
2a22cbdc
#include "testutils.h"
#if NETTLE_USE_MINI_GMP
void
test_main
(
void
)
{
SKIP
();
}
#else
/* ! NETTLE_USE_MINI_GMP */
void
test_main
(
void
)
{
...
...
@@ -56,3 +64,4 @@ test_main (void)
mpz_clear
(
r
);
gmp_randclear
(
state
);
}
#endif
/* ! NETTLE_USE_MINI_GMP */
testsuite/ecc-redc-test.c
View file @
2a22cbdc
#include "testutils.h"
#if NETTLE_USE_MINI_GMP
void
test_main
(
void
)
{
SKIP
();
}
#else
/* ! NETTLE_USE_MINI_GMP */
static
void
ref_redc
(
mp_limb_t
*
rp
,
const
mp_limb_t
*
ap
,
const
mp_limb_t
*
mp
,
mp_size_t
mn
)
{
...
...
@@ -98,3 +106,4 @@ test_main (void)
mpz_clear
(
r
);
gmp_randclear
(
state
);
}
#endif
/* ! NETTLE_USE_MINI_GMP */
testsuite/symbols-test
View file @
2a22cbdc
...
...
@@ -27,8 +27,12 @@ if [ -s test1.out ] ; then
fi
if
[
-s
../libhogweed.a
]
;
then
PATTERN
=
'\.?_?_?nettle_|get_pc_thunk'
if
grep
'^#define.*NETTLE_USE_MINI_GMP.*1$'
../bignum.h
>
/dev/null
;
then
PATTERN
=
"
$PATTERN
|mp_|mpz_|mpn_"
fi
(
$NM
-g
../libhogweed.a
||
$NM
../libhogweed.a
)
\
|
grep
' [DRT] '
| egrep
-v
'( |^)\.?_?_?nettle_|get_pc_thunk'
\
|
grep
' [DRT] '
| egrep
-v
"( |^)(
$PATTERN
)"
\
|
sort
-k3
>
test1.out
if
[
-s
test1.out
]
;
then
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment