summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-03-27 20:54:34 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-03-27 20:54:34 (GMT)
commit471032ae680a0582e9d1475ae13079ce86e4ac34 (patch)
tree5e60564479598e0ad6b6320789acbfb39807e48c
parentb31857f4b154b6ee2870deccbe42395fe4351b24 (diff)
downloadtcl-471032ae680a0582e9d1475ae13079ce86e4ac34.zip
tcl-471032ae680a0582e9d1475ae13079ce86e4ac34.tar.gz
tcl-471032ae680a0582e9d1475ae13079ce86e4ac34.tar.bz2
Libtommath 1.3
-rw-r--r--libtommath/CMakeLists.txt311
-rw-r--r--libtommath/appveyor.yml40
-rw-r--r--libtommath/bn_deprecated.c61
-rw-r--r--libtommath/bn_mp_div.c4
-rw-r--r--libtommath/bn_mp_div_d.c4
-rw-r--r--libtommath/bn_mp_expt_n.c (renamed from libtommath/bn_mp_expt_u32.c)23
-rw-r--r--libtommath/bn_mp_get_ll.c7
-rw-r--r--libtommath/bn_mp_get_mag_ull.c7
-rw-r--r--libtommath/bn_mp_init_ll.c7
-rw-r--r--libtommath/bn_mp_init_ull.c7
-rw-r--r--libtommath/bn_mp_log_n.c29
-rw-r--r--libtommath/bn_mp_log_u32.c180
-rw-r--r--libtommath/bn_mp_mul.c6
-rw-r--r--libtommath/bn_mp_prime_rand.c5
-rw-r--r--libtommath/bn_mp_root_n.c (renamed from libtommath/bn_mp_root_u32.c)28
-rw-r--r--libtommath/bn_mp_set_double.c4
-rw-r--r--libtommath/bn_mp_set_ll.c7
-rw-r--r--libtommath/bn_mp_set_ull.c7
-rw-r--r--libtommath/bn_mp_sqrt.c73
-rw-r--r--libtommath/bn_s_mp_balance_mul.c4
-rw-r--r--libtommath/bn_s_mp_div_3.c (renamed from libtommath/bn_mp_div_3.c)4
-rw-r--r--libtommath/bn_s_mp_log.c81
-rw-r--r--libtommath/bn_s_mp_log_2expt.c12
-rw-r--r--libtommath/bn_s_mp_log_d.c65
-rw-r--r--libtommath/bn_s_mp_mul_high_digs_fast.c4
-rw-r--r--libtommath/bn_s_mp_rand_jenkins.c4
-rw-r--r--libtommath/bn_s_mp_toom_mul.c6
-rw-r--r--libtommath/changes.txt8
-rwxr-xr-xlibtommath/helper.pl40
-rw-r--r--libtommath/libtommath.pc.in9
-rw-r--r--libtommath/libtommath_VS2008.sln2
-rw-r--r--libtommath/libtommath_VS2008.vcproj50
-rw-r--r--libtommath/makefile56
-rw-r--r--libtommath/makefile.mingw62
-rw-r--r--libtommath/makefile.msvc50
-rw-r--r--libtommath/makefile.shared53
-rw-r--r--libtommath/makefile.unix52
-rw-r--r--libtommath/makefile_include.mk6
-rw-r--r--libtommath/sources.cmake167
-rw-r--r--libtommath/tommath.def19
-rw-r--r--libtommath/tommath.h58
-rw-r--r--libtommath/tommath_class.h113
-rw-r--r--libtommath/tommath_private.h12
-rwxr-xr-xlibtommath/win64-arm/libtommath.dllbin69120 -> 70144 bytes
-rwxr-xr-xlibtommath/win64/libtommath.dllbin81408 -> 81408 bytes
-rw-r--r--macosx/Tcl.xcodeproj/project.pbxproj16
-rw-r--r--unix/Makefile.in27
-rw-r--r--win/Makefile.in4
-rw-r--r--win/makefile.vc4
49 files changed, 1127 insertions, 671 deletions
diff --git a/libtommath/CMakeLists.txt b/libtommath/CMakeLists.txt
new file mode 100644
index 0000000..0b84e79
--- /dev/null
+++ b/libtommath/CMakeLists.txt
@@ -0,0 +1,311 @@
+# SPDX-License-Identifier: Unlicense
+#
+# LibTomMath, a free open source portable number theoretic multiple-precision
+# integer (MPI) library written entirely in C.
+#
+
+cmake_minimum_required(VERSION 3.10)
+
+project(libtommath
+ VERSION 1.3.0
+ DESCRIPTION "A free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C."
+ HOMEPAGE_URL "https://www.libtom.net/LibTomMath"
+ LANGUAGES C)
+
+# package release version
+# bump if re-releasing the same VERSION + patches
+# set to 1 if releasing a new VERSION
+set(PACKAGE_RELEASE_VERSION 1)
+
+#-----------------------------------------------------------------------------
+# Include cmake modules
+#-----------------------------------------------------------------------------
+include(GNUInstallDirs)
+include(CheckIPOSupported)
+include(CMakePackageConfigHelpers)
+# default is "No tests"
+option(BUILD_TESTING "" OFF)
+include(CTest)
+include(sources.cmake)
+
+#-----------------------------------------------------------------------------
+# Options
+#-----------------------------------------------------------------------------
+option(BUILD_SHARED_LIBS "Build shared library and only the shared library if \"ON\", default is static" OFF)
+
+#-----------------------------------------------------------------------------
+# Add support for ccache if desired
+#-----------------------------------------------------------------------------
+find_program(CCACHE ccache)
+
+if(CCACHE)
+ option(ENABLE_CCACHE "Enable ccache." ON)
+endif()
+
+# use ccache if installed
+if(CCACHE AND ENABLE_CCACHE)
+ set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE})
+endif()
+
+#-----------------------------------------------------------------------------
+# Compose CFLAGS
+#-----------------------------------------------------------------------------
+
+# Some information ported from makefile_include.mk
+
+
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ message(STATUS "Setting build type to 'Release' as none was specified.")
+ set(CMAKE_BUILD_TYPE "Release")
+endif()
+
+# We only differentiate between MSVC and GCC-compatible compilers
+if(MSVC)
+ set(LTM_C_FLAGS -W3)
+elseif(WATCOM)
+ set(LTM_C_FLAGS -fo=.obj -oaxt -3r -w3)
+else()
+ set(LTM_C_FLAGS -Wall -Wsign-compare -Wextra -Wshadow
+ -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align
+ -Wstrict-prototypes -Wpointer-arith -Wsystem-headers)
+ set(CMAKE_C_FLAGS_DEBUG "-g3")
+ set(CMAKE_C_FLAGS_RELEASE "-O3 -funroll-loops -fomit-frame-pointer")
+ set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g3 -O2")
+ set(CMAKE_C_FLAGS_MINSIZEREL "-Os")
+endif()
+
+# What compiler do we have and what are their...uhm... peculiarities
+if(CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang")
+ list(APPEND LTM_C_FLAGS -Wno-typedef-redefinition -Wno-tautological-compare -Wno-builtin-requires-header)
+ # Clang requires at least '-O1' for dead code elimination
+ set(CMAKE_C_FLAGS_DEBUG "-O1 ${CMAKE_C_FLAGS_DEBUG}")
+endif()
+if(CMAKE_C_COMPILER MATCHES "mingw")
+ list(APPEND LTM_C_FLAGS -Wno-shadow -Wno-expansion-to-defined -Wno-declaration-after-statement -Wno-bad-function-cast)
+endif()
+if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ list(APPEND LTM_C_FLAGS -Wno-nullability-completeness)
+endif()
+if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
+ list(APPEND LTM_C_FLAGS -no-undefined)
+endif()
+
+# TODO: coverage (lgcov)
+
+# If the user set the environment variables at generate-time, append them
+# in order to allow overriding our defaults.
+# ${LTM_CFLAGS} means the user passed it via sth like:
+# $ cmake -DLTM_CFLAGS="foo"
+list(APPEND LTM_C_FLAGS ${LTM_CFLAGS})
+list(APPEND LTM_LD_FLAGS ${LTM_LDFLAGS})
+
+#-----------------------------------------------------------------------------
+# library target
+#-----------------------------------------------------------------------------
+add_library(${PROJECT_NAME}
+ ${SOURCES}
+ ${HEADERS}
+)
+
+target_include_directories(${PROJECT_NAME} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>
+)
+
+target_compile_options(${PROJECT_NAME} BEFORE PRIVATE
+ ${LTM_C_FLAGS}
+)
+target_link_options(${PROJECT_NAME} BEFORE PRIVATE
+ ${LTM_LD_FLAGS}
+)
+
+set(PUBLIC_HEADERS tommath.h)
+set(C89 False CACHE BOOL "(Usually maintained automatically) Enable when the library is in c89 mode to package the correct header files on install")
+if(C89)
+ list(APPEND PUBLIC_HEADERS tommath_c89.h)
+endif()
+
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ OUTPUT_NAME tommath
+ VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR}
+ PUBLIC_HEADER "${PUBLIC_HEADERS}"
+)
+
+option(COMPILE_LTO "Build with LTO enabled")
+if(COMPILE_LTO)
+ check_ipo_supported(RESULT COMPILER_SUPPORTS_LTO)
+ if(COMPILER_SUPPORTS_LTO)
+ set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+ else()
+ message(SEND_ERROR "This compiler does not support LTO. Reconfigure ${PROJECT_NAME} with -DCOMPILE_LTO=OFF.")
+ endif()
+endif()
+
+#-----------------------------------------------------------------------------
+# demo target
+#-----------------------------------------------------------------------------
+
+if(BUILD_TESTING)
+ enable_testing()
+ add_subdirectory(demo)
+endif()
+
+#-----------------------------------------------------------------------------
+# Install/export targets and files
+#-----------------------------------------------------------------------------
+set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
+set(PROJECT_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake")
+set(PROJECT_CONFIG_FILE "${PROJECT_NAME}-config.cmake")
+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
+
+install(TARGETS ${PROJECT_NAME}
+ EXPORT ${TARGETS_EXPORT_NAME}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Libraries
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+)
+
+# Install libtommath.pc for pkg-config if we build a shared library
+if(BUILD_SHARED_LIBS)
+ # Let the user override the default directory of the pkg-config file (usually this shouldn't be required to be changed)
+ set(CMAKE_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" CACHE PATH "Folder where to install .pc files")
+
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
+ @ONLY
+ )
+
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
+ DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR}
+ )
+endif()
+
+# generate package version file
+write_basic_package_version_file(
+ ${PROJECT_VERSION_FILE}
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY SameMajorVersion
+)
+
+# install version file
+install(FILES ${PROJECT_VERSION_FILE}
+ DESTINATION ${CONFIG_INSTALL_DIR}
+)
+
+# build directory package config
+export(EXPORT ${TARGETS_EXPORT_NAME}
+ FILE ${PROJECT_CONFIG_FILE}
+)
+
+# installed package config
+install(EXPORT ${TARGETS_EXPORT_NAME}
+ DESTINATION ${CONFIG_INSTALL_DIR}
+ FILE ${PROJECT_CONFIG_FILE}
+)
+
+# add to CMake registry
+export(PACKAGE ${PROJECT_NAME})
+
+#---------------------------------------------------------------------------------------
+# Create release packages
+#---------------------------------------------------------------------------------------
+
+# determine distribution and architecture
+find_program(LSB_RELEASE lsb_release)
+find_program(SYSCTL sysctl)
+find_program(UNAME uname)
+
+if(UNAME)
+ execute_process(COMMAND uname -m OUTPUT_VARIABLE MACHINE_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+elseif(SYSCTL)
+ execute_process(COMMAND sysctl -b hw.machine_arch OUTPUT_VARIABLE MACHINE_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+else()
+ string(TOLOWER ${CMAKE_SYSTEM_NAME} MACHINE_ARCH)
+endif()
+
+if(LSB_RELEASE)
+ execute_process(COMMAND lsb_release -si OUTPUT_VARIABLE LINUX_DISTRO OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(COMMAND lsb_release -sc OUTPUT_VARIABLE LINUX_DISTRO_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(COMMAND lsb_release -sr OUTPUT_VARIABLE LINUX_DISTRO_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ string(TOLOWER ${LINUX_DISTRO} LINUX_DISTRO)
+ if(LINUX_DISTRO_CODENAME STREQUAL "n/a")
+ set(DISTRO_PACK_PATH ${LINUX_DISTRO}/${LINUX_DISTRO_VERSION}/)
+ else()
+ set(DISTRO_PACK_PATH ${LINUX_DISTRO}/${LINUX_DISTRO_CODENAME}/)
+ endif()
+else()
+ set(DISTRO_PACK_PATH ${CMAKE_SYSTEM_NAME}/)
+endif()
+
+# make sure untagged versions get a different package name
+execute_process(COMMAND git describe --exact-match --tags ERROR_QUIET RESULT_VARIABLE REPO_HAS_TAG)
+if(REPO_HAS_TAG EQUAL 0)
+ set(PACKAGE_NAME_SUFFIX "")
+else()
+ set(PACKAGE_NAME_SUFFIX "-git")
+ message(STATUS "Use -git suffix")
+endif()
+
+# default CPack generators
+set(CPACK_GENERATOR TGZ STGZ)
+
+# extra CPack generators
+if(LINUX_DISTRO STREQUAL "debian" OR LINUX_DISTRO STREQUAL "ubuntu" OR LINUX_DISTRO STREQUAL "linuxmint")
+ list(APPEND CPACK_GENERATOR DEB)
+elseif(LINUX_DISTRO STREQUAL "fedora" OR LINUX_DISTRO STREQUAL "opensuse" OR LINUX_DISTRO STREQUAL "centos")
+ list(APPEND CPACK_GENERATOR RPM)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ list(APPEND CPACK_GENERATOR FREEBSD)
+endif()
+
+set(LTM_DEBIAN_SHARED_PACKAGE_NAME "${PROJECT_NAME}${PACKAGE_NAME_SUFFIX}${PROJECT_VERSION_MAJOR}")
+
+# general CPack config
+set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/packages/${DISTRO_PACK_PATH})
+message(STATUS "CPack: packages will be generated under ${CPACK_PACKAGE_DIRECTORY}")
+if(BUILD_SHARED_LIBS)
+ set(CPACK_PACKAGE_NAME "${PROJECT_NAME}${PROJECT_VERSION_MAJOR}")
+ set(CPACK_DEBIAN_PACKAGE_NAME "${LTM_DEBIAN_SHARED_PACKAGE_NAME}")
+else()
+ set(CPACK_PACKAGE_NAME "${PROJECT_NAME}-devel")
+ set(CPACK_DEBIAN_LIBRARIES_PACKAGE_NAME "${PROJECT_NAME}${PACKAGE_NAME_SUFFIX}-dev")
+endif()
+set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LibTomMath")
+set(CPACK_PACKAGE_VENDOR "libtom projects")
+set(CPACK_PACKAGE_CONTACT "libtom@googlegroups.com")
+set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
+set(PACKAGE_NAME_TRAILER ${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${MACHINE_ARCH})
+set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${PACKAGE_NAME_TRAILER})
+
+# deb specific CPack config
+set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
+set(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON)
+set(CPACK_DEBIAN_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION})
+set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
+if(BUILD_SHARED_LIBS)
+ set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
+else()
+ set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
+ set(CPACK_DEBIAN_PACKAGE_DEPENDS ${LTM_DEBIAN_SHARED_PACKAGE_NAME})
+ set(CPACK_DEB_COMPONENT_INSTALL ON)
+ set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
+ set(CPACK_COMPONENTS_ALL Libraries)
+endif()
+
+# rpm specific CPack config
+set(CPACK_RPM_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION})
+set(CPACK_RPM_PACKAGE_ARCHITECTURE ${MACHINE_ARCH})
+set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}")
+set(CPACK_RPM_PACKAGE_LICENSE "The Unlicense")
+
+# FreeBSD specific CPack config
+set(CPACK_FREEBSD_PACKAGE_MAINTAINER "gahr@FreeBSD.org")
+set(CPACK_FREEBSD_PACKAGE_ORIGIN "math/libtommath")
+set(CPACK_FREEBSD_PACKAGE_CATEGORIES "math")
+
+include(CPack)
diff --git a/libtommath/appveyor.yml b/libtommath/appveyor.yml
index 0a8e075..e235491 100644
--- a/libtommath/appveyor.yml
+++ b/libtommath/appveyor.yml
@@ -1,20 +1,20 @@
-version: 1.2.1-{build}
-branches:
- only:
- - master
- - develop
- - /^release/
- - /^travis/
-image:
-- Visual Studio 2019
-- Visual Studio 2017
-- Visual Studio 2015
-build_script:
-- cmd: >-
- if "Visual Studio 2019"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
- if "Visual Studio 2017"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
- if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
- if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
- nmake -f makefile.msvc all
-test_script:
-- cmd: test.exe
+version: 1.3.0-{build}
+branches:
+ only:
+ - master
+ - develop
+ - /^release/
+ - /^travis/
+image:
+- Visual Studio 2019
+- Visual Studio 2017
+- Visual Studio 2015
+build_script:
+- cmd: >-
+ if "Visual Studio 2019"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
+ if "Visual Studio 2017"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
+ if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
+ if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
+ nmake -f makefile.msvc all
+test_script:
+- cmd: test.exe
diff --git a/libtommath/bn_deprecated.c b/libtommath/bn_deprecated.c
index 2056b20..fc19092 100644
--- a/libtommath/bn_deprecated.c
+++ b/libtommath/bn_deprecated.c
@@ -74,6 +74,12 @@ mp_err mp_balance_mul(const mp_int *a, const mp_int *b, mp_int *c)
return s_mp_balance_mul(a, b, c);
}
#endif
+#ifdef BN_MP_DIV_3_C
+mp_err mp_div_3(const mp_int *a, mp_int *c, mp_digit *d)
+{
+ return s_mp_div_3(a, c, d);
+}
+#endif
#ifdef BN_MP_EXPTMOD_FAST_C
mp_err mp_exptmod_fast(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y, int redmode)
{
@@ -184,51 +190,88 @@ unsigned long mp_get_long(const mp_int *a)
#ifdef BN_MP_GET_LONG_LONG_C
unsigned long long mp_get_long_long(const mp_int *a)
{
- return mp_get_mag_ull(a);
+ return (unsigned long long)mp_get_mag_u64(a);
}
#endif
+#ifdef BN_MP_GET_LL_C
+MP_GET_SIGNED(mp_get_ll, mp_get_mag_u64, long long, uint64_t)
+#endif
+#ifdef BN_MP_GET_MAG_ULL_C
+MP_GET_MAG(mp_get_mag_ull, unsigned long long)
+#endif
+#ifdef BN_MP_INIT_LL_C
+MP_INIT_INT(mp_init_ll, mp_set_i64, long long)
+#endif
+#ifdef BN_MP_SET_LL_C
+MP_SET_SIGNED(mp_set_ll, mp_set_i64, long long, long long)
+#endif
+#ifdef BN_MP_INIT_ULL_C
+MP_INIT_INT(mp_init_ull, mp_set_u64, unsigned long long)
+#endif
+#ifdef BN_MP_SET_ULL_C
+MP_SET_UNSIGNED(mp_set_ull, unsigned long long)
+#endif
#ifdef BN_MP_PRIME_IS_DIVISIBLE_C
mp_err mp_prime_is_divisible(const mp_int *a, mp_bool *result)
{
return s_mp_prime_is_divisible(a, result);
}
#endif
+#ifdef BN_MP_LOG_U32_C
+mp_err mp_log_u32(const mp_int *a, uint32_t base, uint32_t *c)
+{
+ mp_err e;
+ int c_;
+ if (base > MP_MIN(MP_DIGIT_MAX, INT_MAX)) {
+ return MP_VAL;
+ }
+ e = mp_log_n(a, (int)base, &c_);
+ *c = (uint32_t)c_;
+ return e;
+}
+#endif
#ifdef BN_MP_EXPT_D_EX_C
mp_err mp_expt_d_ex(const mp_int *a, mp_digit b, mp_int *c, int fast)
{
(void)fast;
- if (b > MP_MIN(MP_DIGIT_MAX, UINT32_MAX)) {
+ if (b > MP_MIN(MP_DIGIT_MAX, INT_MAX)) {
return MP_VAL;
}
- return mp_expt_u32(a, (uint32_t)b, c);
+ return mp_expt_n(a, (int)b, c);
}
#endif
#ifdef BN_MP_EXPT_D_C
mp_err mp_expt_d(const mp_int *a, mp_digit b, mp_int *c)
{
- if (b > MP_MIN(MP_DIGIT_MAX, UINT32_MAX)) {
+ if (b > MP_MIN(MP_DIGIT_MAX, INT_MAX)) {
return MP_VAL;
}
- return mp_expt_u32(a, (uint32_t)b, c);
+ return mp_expt_n(a, (int)b, c);
}
#endif
#ifdef BN_MP_N_ROOT_EX_C
mp_err mp_n_root_ex(const mp_int *a, mp_digit b, mp_int *c, int fast)
{
(void)fast;
- if (b > MP_MIN(MP_DIGIT_MAX, UINT32_MAX)) {
+ if (b > MP_MIN(MP_DIGIT_MAX, INT_MAX)) {
return MP_VAL;
}
- return mp_root_u32(a, (uint32_t)b, c);
+ return mp_root_n(a, (int)b, c);
}
#endif
#ifdef BN_MP_N_ROOT_C
mp_err mp_n_root(const mp_int *a, mp_digit b, mp_int *c)
{
- if (b > MP_MIN(MP_DIGIT_MAX, UINT32_MAX)) {
+ if (b > MP_MIN(MP_DIGIT_MAX, INT_MAX)) {
return MP_VAL;
}
- return mp_root_u32(a, (uint32_t)b, c);
+ return mp_root_n(a, (int)b, c);
+}
+#endif
+#ifdef BN_MP_ROOT_U32_C
+mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
+{
+ return mp_root_n(a, (int)b, c);
}
#endif
#ifdef BN_MP_UNSIGNED_BIN_SIZE_C
diff --git a/libtommath/bn_mp_div.c b/libtommath/bn_mp_div.c
index bca227d..71de55b 100644
--- a/libtommath/bn_mp_div.c
+++ b/libtommath/bn_mp_div.c
@@ -31,7 +31,7 @@ mp_err mp_div(const mp_int *a, const mp_int *b, mp_int *c, mp_int *d)
}
/* init our temps */
- if ((err = mp_init_multi(&ta, &tb, &tq, &q, (void *)NULL)) != MP_OKAY) {
+ if ((err = mp_init_multi(&ta, &tb, &tq, &q, NULL)) != MP_OKAY) {
return err;
}
@@ -64,7 +64,7 @@ mp_err mp_div(const mp_int *a, const mp_int *b, mp_int *c, mp_int *d)
d->sign = MP_IS_ZERO(d) ? MP_ZPOS : n;
}
LBL_ERR:
- mp_clear_multi(&ta, &tb, &tq, &q, (void *)NULL);
+ mp_clear_multi(&ta, &tb, &tq, &q, NULL);
return err;
}
diff --git a/libtommath/bn_mp_div_d.c b/libtommath/bn_mp_div_d.c
index b9d718b..24a2c19 100644
--- a/libtommath/bn_mp_div_d.c
+++ b/libtommath/bn_mp_div_d.c
@@ -44,8 +44,8 @@ mp_err mp_div_d(const mp_int *a, mp_digit b, mp_int *c, mp_digit *d)
}
/* three? */
- if (MP_HAS(MP_DIV_3) && (b == 3u)) {
- return mp_div_3(a, c, d);
+ if (MP_HAS(S_MP_DIV_3) && (b == 3u)) {
+ return s_mp_div_3(a, c, d);
}
/* no easy answer [c'est la vie]. Just division */
diff --git a/libtommath/bn_mp_expt_u32.c b/libtommath/bn_mp_expt_n.c
index 2ab67ba..19c0225 100644
--- a/libtommath/bn_mp_expt_u32.c
+++ b/libtommath/bn_mp_expt_n.c
@@ -1,13 +1,22 @@
#include "tommath_private.h"
-#ifdef BN_MP_EXPT_U32_C
+#ifdef BN_MP_EXPT_N_C
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-/* calculate c = a**b using a square-multiply algorithm */
+#ifdef BN_MP_EXPT_U32_C
mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c)
{
- mp_err err;
+ if (b > MP_MIN(MP_DIGIT_MAX, INT_MAX)) {
+ return MP_VAL;
+ }
+ return mp_expt_n(a, (int)b, c);
+}
+#endif
+/* calculate c = a**b using a square-multiply algorithm */
+mp_err mp_expt_n(const mp_int *a, int b, mp_int *c)
+{
+ mp_err err;
mp_int g;
if ((err = mp_init_copy(&g, a)) != MP_OKAY) {
@@ -17,16 +26,16 @@ mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c)
/* set initial result */
mp_set(c, 1uL);
- while (b > 0u) {
+ while (b > 0) {
/* if the bit is set multiply */
- if ((b & 1u) != 0u) {
+ if ((b & 1) != 0) {
if ((err = mp_mul(c, &g, c)) != MP_OKAY) {
goto LBL_ERR;
}
}
/* square */
- if (b > 1u) {
+ if (b > 1) {
if ((err = mp_sqr(&g, &g)) != MP_OKAY) {
goto LBL_ERR;
}
@@ -36,8 +45,6 @@ mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c)
b >>= 1;
}
- err = MP_OKAY;
-
LBL_ERR:
mp_clear(&g);
return err;
diff --git a/libtommath/bn_mp_get_ll.c b/libtommath/bn_mp_get_ll.c
deleted file mode 100644
index 2687534..0000000
--- a/libtommath/bn_mp_get_ll.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "tommath_private.h"
-#ifdef BN_MP_GET_LL_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-MP_GET_SIGNED(mp_get_ll, mp_get_mag_ull, long long, unsigned long long)
-#endif
diff --git a/libtommath/bn_mp_get_mag_ull.c b/libtommath/bn_mp_get_mag_ull.c
deleted file mode 100644
index 63a2741..0000000
--- a/libtommath/bn_mp_get_mag_ull.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "tommath_private.h"
-#ifdef BN_MP_GET_MAG_ULL_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-MP_GET_MAG(mp_get_mag_ull, unsigned long long)
-#endif
diff --git a/libtommath/bn_mp_init_ll.c b/libtommath/bn_mp_init_ll.c
deleted file mode 100644
index dc7c4a4..0000000
--- a/libtommath/bn_mp_init_ll.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "tommath_private.h"
-#ifdef BN_MP_INIT_LL_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-MP_INIT_INT(mp_init_ll, mp_set_ll, long long)
-#endif
diff --git a/libtommath/bn_mp_init_ull.c b/libtommath/bn_mp_init_ull.c
deleted file mode 100644
index 84110c0..0000000
--- a/libtommath/bn_mp_init_ull.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "tommath_private.h"
-#ifdef BN_MP_INIT_ULL_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-MP_INIT_INT(mp_init_ull, mp_set_ull, unsigned long long)
-#endif
diff --git a/libtommath/bn_mp_log_n.c b/libtommath/bn_mp_log_n.c
new file mode 100644
index 0000000..d866fa0
--- /dev/null
+++ b/libtommath/bn_mp_log_n.c
@@ -0,0 +1,29 @@
+#include "tommath_private.h"
+#ifdef BN_MP_LOG_N_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+mp_err mp_log_n(const mp_int *a, int base, int *c)
+{
+ if (mp_isneg(a) || mp_iszero(a) || (base < 2) || (unsigned)base > (unsigned)MP_DIGIT_MAX) {
+ return MP_VAL;
+ }
+
+ if (MP_HAS(S_MP_LOG_2EXPT) && MP_IS_2EXPT((mp_digit)base)) {
+ *c = s_mp_log_2expt(a, (mp_digit)base);
+ return MP_OKAY;
+ }
+
+ if (MP_HAS(S_MP_LOG_D) && (a->used == 1)) {
+ *c = s_mp_log_d((mp_digit)base, a->dp[0]);
+ return MP_OKAY;
+ }
+
+ if (MP_HAS(S_MP_LOG)) {
+ return s_mp_log(a, (mp_digit)base, c);
+ }
+
+ return MP_VAL;
+}
+
+#endif
diff --git a/libtommath/bn_mp_log_u32.c b/libtommath/bn_mp_log_u32.c
deleted file mode 100644
index b86d789..0000000
--- a/libtommath/bn_mp_log_u32.c
+++ /dev/null
@@ -1,180 +0,0 @@
-#include "tommath_private.h"
-#ifdef BN_MP_LOG_U32_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-/* Compute log_{base}(a) */
-static mp_word s_pow(mp_word base, mp_word exponent)
-{
- mp_word result = 1u;
- while (exponent != 0u) {
- if ((exponent & 1u) == 1u) {
- result *= base;
- }
- exponent >>= 1;
- base *= base;
- }
-
- return result;
-}
-
-static mp_digit s_digit_ilogb(mp_digit base, mp_digit n)
-{
- mp_word bracket_low = 1u, bracket_mid, bracket_high, N;
- mp_digit ret, high = 1u, low = 0uL, mid;
-
- if (n < base) {
- return 0uL;
- }
- if (n == base) {
- return 1uL;
- }
-
- bracket_high = (mp_word) base ;
- N = (mp_word) n;
-
- while (bracket_high < N) {
- low = high;
- bracket_low = bracket_high;
- high <<= 1;
- bracket_high *= bracket_high;
- }
-
- while (((mp_digit)(high - low)) > 1u) {
- mid = (low + high) >> 1;
- bracket_mid = bracket_low * s_pow(base, (mp_word)(mid - low));
-
- if (N < bracket_mid) {
- high = mid ;
- bracket_high = bracket_mid ;
- }
- if (N > bracket_mid) {
- low = mid ;
- bracket_low = bracket_mid ;
- }
- if (N == bracket_mid) {
- return (mp_digit) mid;
- }
- }
-
- if (bracket_high == N) {
- ret = high;
- } else {
- ret = low;
- }
-
- return ret;
-}
-
-/* TODO: output could be "int" because the output of mp_radix_size is int, too,
- as is the output of mp_bitcount.
- With the same problem: max size is INT_MAX * MP_DIGIT not INT_MAX only!
-*/
-mp_err mp_log_u32(const mp_int *a, uint32_t base, uint32_t *c)
-{
- mp_err err;
- mp_ord cmp;
- uint32_t high, low, mid;
- mp_int bracket_low, bracket_high, bracket_mid, t, bi_base;
-
- err = MP_OKAY;
-
- if (a->sign == MP_NEG) {
- return MP_VAL;
- }
-
- if (MP_IS_ZERO(a)) {
- return MP_VAL;
- }
-
- if (base < 2u) {
- return MP_VAL;
- }
-
- /* A small shortcut for bases that are powers of two. */
- if ((base & (base - 1u)) == 0u) {
- int y, bit_count;
- for (y=0; (y < 7) && ((base & 1u) == 0u); y++) {
- base >>= 1;
- }
- bit_count = mp_count_bits(a) - 1;
- *c = (uint32_t)(bit_count/y);
- return MP_OKAY;
- }
-
- if (a->used == 1) {
- *c = (uint32_t)s_digit_ilogb(base, a->dp[0]);
- return err;
- }
-
- cmp = mp_cmp_d(a, base);
- if ((cmp == MP_LT) || (cmp == MP_EQ)) {
- *c = cmp == MP_EQ;
- return err;
- }
-
- if ((err =
- mp_init_multi(&bracket_low, &bracket_high,
- &bracket_mid, &t, &bi_base, NULL)) != MP_OKAY) {
- return err;
- }
-
- low = 0u;
- mp_set(&bracket_low, 1uL);
- high = 1u;
-
- mp_set(&bracket_high, base);
-
- /*
- A kind of Giant-step/baby-step algorithm.
- Idea shamelessly stolen from https://programmingpraxis.com/2010/05/07/integer-logarithms/2/
- The effect is asymptotic, hence needs benchmarks to test if the Giant-step should be skipped
- for small n.
- */
- while (mp_cmp(&bracket_high, a) == MP_LT) {
- low = high;
- if ((err = mp_copy(&bracket_high, &bracket_low)) != MP_OKAY) {
- goto LBL_ERR;
- }
- high <<= 1;
- if ((err = mp_sqr(&bracket_high, &bracket_high)) != MP_OKAY) {
- goto LBL_ERR;
- }
- }
- mp_set(&bi_base, base);
-
- while ((high - low) > 1u) {
- mid = (high + low) >> 1;
-
- if ((err = mp_expt_u32(&bi_base, (uint32_t)(mid - low), &t)) != MP_OKAY) {
- goto LBL_ERR;
- }
- if ((err = mp_mul(&bracket_low, &t, &bracket_mid)) != MP_OKAY) {
- goto LBL_ERR;
- }
- cmp = mp_cmp(a, &bracket_mid);
- if (cmp == MP_LT) {
- high = mid;
- mp_exch(&bracket_mid, &bracket_high);
- }
- if (cmp == MP_GT) {
- low = mid;
- mp_exch(&bracket_mid, &bracket_low);
- }
- if (cmp == MP_EQ) {
- *c = mid;
- goto LBL_END;
- }
- }
-
- *c = (mp_cmp(&bracket_high, a) == MP_EQ) ? high : low;
-
-LBL_END:
-LBL_ERR:
- mp_clear_multi(&bracket_low, &bracket_high, &bracket_mid,
- &t, &bi_base, NULL);
- return err;
-}
-
-
-#endif
diff --git a/libtommath/bn_mp_mul.c b/libtommath/bn_mp_mul.c
index c40feac..561913a 100644
--- a/libtommath/bn_mp_mul.c
+++ b/libtommath/bn_mp_mul.c
@@ -12,14 +12,12 @@ mp_err mp_mul(const mp_int *a, const mp_int *b, mp_int *c)
digs = a->used + b->used + 1;
mp_sign neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG;
- if (a == b) {
- return mp_sqr(a,c);
- } else if (MP_HAS(S_MP_BALANCE_MUL) &&
+ if (MP_HAS(S_MP_BALANCE_MUL) &&
/* Check sizes. The smaller one needs to be larger than the Karatsuba cut-off.
* The bigger one needs to be at least about one MP_KARATSUBA_MUL_CUTOFF bigger
* to make some sense, but it depends on architecture, OS, position of the
* stars... so YMMV.
- * Using it to cut the input into slices small enough for s_mp_mul_digs_fast
+ * Using it to cut the input into slices small enough for fast_s_mp_mul_digs
* was actually slower on the author's machine, but YMMV.
*/
(min_len >= MP_KARATSUBA_MUL_CUTOFF) &&
diff --git a/libtommath/bn_mp_prime_rand.c b/libtommath/bn_mp_prime_rand.c
index 4530e9a..b931569 100644
--- a/libtommath/bn_mp_prime_rand.c
+++ b/libtommath/bn_mp_prime_rand.c
@@ -36,7 +36,10 @@ mp_err s_mp_prime_random_ex(mp_int *a, int t, int size, int flags, private_mp_pr
}
/* calc the byte size */
- bsize = (size>>3) + ((size&7)?1:0);
+ bsize = (size>>3);
+ if (size&7) {
+ bsize++;
+ }
/* we need a buffer of bsize bytes */
tmp = (unsigned char *) MP_MALLOC((size_t)bsize);
diff --git a/libtommath/bn_mp_root_u32.c b/libtommath/bn_mp_root_n.c
index ba65549..5b92ff5 100644
--- a/libtommath/bn_mp_root_u32.c
+++ b/libtommath/bn_mp_root_n.c
@@ -1,5 +1,5 @@
#include "tommath_private.h"
-#ifdef BN_MP_ROOT_U32_C
+#ifdef BN_MP_ROOT_N_C
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
@@ -12,15 +12,18 @@
* which will find the root in log(N) time where
* each step involves a fair bit.
*/
-mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
+mp_err mp_root_n(const mp_int *a, int b, mp_int *c)
{
mp_int t1, t2, t3, a_;
- mp_ord cmp;
int ilog2;
mp_err err;
+ if (b < 0 || (unsigned)b > (unsigned)MP_DIGIT_MAX) {
+ return MP_VAL;
+ }
+
/* input must be positive if b is even */
- if (((b & 1u) == 0u) && (a->sign == MP_NEG)) {
+ if (((b & 1) == 0) && mp_isneg(a)) {
return MP_VAL;
}
@@ -40,7 +43,7 @@ mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
log_2(n) because the bit-length of the "n" is measured
with an int and hence the root is always < 2 (two).
*/
- if (b > (uint32_t)(INT_MAX/2)) {
+ if (b > INT_MAX/2) {
mp_set(c, 1uL);
c->sign = a->sign;
err = MP_OKAY;
@@ -48,13 +51,13 @@ mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
}
/* "b" is smaller than INT_MAX, we can cast safely */
- if (ilog2 < (int)b) {
+ if (ilog2 < b) {
mp_set(c, 1uL);
c->sign = a->sign;
err = MP_OKAY;
goto LBL_ERR;
}
- ilog2 = ilog2 / ((int)b);
+ ilog2 = ilog2 / b;
if (ilog2 == 0) {
mp_set(c, 1uL);
c->sign = a->sign;
@@ -71,7 +74,7 @@ mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
/* t2 = t1 - ((t1**b - a) / (b * t1**(b-1))) */
/* t3 = t1**(b-1) */
- if ((err = mp_expt_u32(&t1, b - 1u, &t3)) != MP_OKAY) goto LBL_ERR;
+ if ((err = mp_expt_n(&t1, b - 1, &t3)) != MP_OKAY) goto LBL_ERR;
/* numerator */
/* t2 = t1**b */
@@ -82,7 +85,7 @@ mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
/* denominator */
/* t3 = t1**(b-1) * b */
- if ((err = mp_mul_d(&t3, b, &t3)) != MP_OKAY) goto LBL_ERR;
+ if ((err = mp_mul_d(&t3, (mp_digit)b, &t3)) != MP_OKAY) goto LBL_ERR;
/* t3 = (t1**b - a)/(b * t1**(b-1)) */
if ((err = mp_div(&t2, &t3, &t3, NULL)) != MP_OKAY) goto LBL_ERR;
@@ -101,7 +104,8 @@ mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
/* result can be off by a few so check */
/* Loop beneath can overshoot by one if found root is smaller than actual root */
for (;;) {
- if ((err = mp_expt_u32(&t1, b, &t2)) != MP_OKAY) goto LBL_ERR;
+ mp_ord cmp;
+ if ((err = mp_expt_n(&t1, b, &t2)) != MP_OKAY) goto LBL_ERR;
cmp = mp_cmp(&t2, &a_);
if (cmp == MP_EQ) {
err = MP_OKAY;
@@ -115,7 +119,7 @@ mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
}
/* correct overshoot from above or from recurrence */
for (;;) {
- if ((err = mp_expt_u32(&t1, b, &t2)) != MP_OKAY) goto LBL_ERR;
+ if ((err = mp_expt_n(&t1, b, &t2)) != MP_OKAY) goto LBL_ERR;
if (mp_cmp(&t2, &a_) == MP_GT) {
if ((err = mp_sub_d(&t1, 1uL, &t1)) != MP_OKAY) goto LBL_ERR;
} else {
@@ -129,8 +133,6 @@ mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c)
/* set the sign of the result */
c->sign = a->sign;
- err = MP_OKAY;
-
LBL_ERR:
mp_clear_multi(&t1, &t2, &t3, NULL);
return err;
diff --git a/libtommath/bn_mp_set_double.c b/libtommath/bn_mp_set_double.c
index 7f1ab75..a42fc70 100644
--- a/libtommath/bn_mp_set_double.c
+++ b/libtommath/bn_mp_set_double.c
@@ -16,7 +16,7 @@ mp_err mp_set_double(mp_int *a, double b)
cast.dbl = b;
exp = (int)((unsigned)(cast.bits >> 52) & 0x7FFu);
- frac = (cast.bits & (((uint64_t)1 << 52) - (uint64_t)1)) | ((uint64_t)1 << 52);
+ frac = (cast.bits & ((1uLL << 52) - 1uLL)) | (1uLL << 52);
if (exp == 0x7FF) { /* +-inf, NaN */
return MP_VAL;
@@ -30,7 +30,7 @@ mp_err mp_set_double(mp_int *a, double b)
return err;
}
- if (((cast.bits >> 63) != 0u) && !MP_IS_ZERO(a)) {
+ if (((cast.bits >> 63) != 0uLL) && !MP_IS_ZERO(a)) {
a->sign = MP_NEG;
}
diff --git a/libtommath/bn_mp_set_ll.c b/libtommath/bn_mp_set_ll.c
deleted file mode 100644
index 3e2324f..0000000
--- a/libtommath/bn_mp_set_ll.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "tommath_private.h"
-#ifdef BN_MP_SET_LL_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-MP_SET_SIGNED(mp_set_ll, mp_set_ull, long long, unsigned long long)
-#endif
diff --git a/libtommath/bn_mp_set_ull.c b/libtommath/bn_mp_set_ull.c
deleted file mode 100644
index 8fbc1bd..0000000
--- a/libtommath/bn_mp_set_ull.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "tommath_private.h"
-#ifdef BN_MP_SET_ULL_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-MP_SET_UNSIGNED(mp_set_ull, unsigned long long)
-#endif
diff --git a/libtommath/bn_mp_sqrt.c b/libtommath/bn_mp_sqrt.c
index dcf28fd..82d6824 100644
--- a/libtommath/bn_mp_sqrt.c
+++ b/libtommath/bn_mp_sqrt.c
@@ -3,24 +3,11 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-#ifndef NO_FLOATING_POINT
-#include <float.h>
-#include <math.h>
-#if (MP_DIGIT_BIT != 28) || (FLT_RADIX != 2) || (DBL_MANT_DIG != 53) || (DBL_MAX_EXP != 1024)
-#define NO_FLOATING_POINT
-#endif
-#endif
-
/* this function is less generic than mp_n_root, simpler and faster */
mp_err mp_sqrt(const mp_int *arg, mp_int *ret)
{
mp_err err;
mp_int t1, t2;
-#ifndef NO_FLOATING_POINT
- int i, j, k;
- volatile double d;
- mp_digit dig;
-#endif
/* must be positive */
if (arg->sign == MP_NEG) {
@@ -33,64 +20,6 @@ mp_err mp_sqrt(const mp_int *arg, mp_int *ret)
return MP_OKAY;
}
-#ifndef NO_FLOATING_POINT
-
- i = (arg->used / 2) - 1;
- j = 2 * i;
- if ((err = mp_init_size(&t1, i+2)) != MP_OKAY) {
- return err;
- }
-
- if ((err = mp_init(&t2)) != MP_OKAY) {
- goto E2;
- }
-
- for (k = 0; k < i; ++k) {
- t1.dp[k] = (mp_digit) 0;
- }
-
- /* Estimate the square root using the hardware floating point unit. */
-
- d = 0.0;
- for (k = arg->used-1; k >= j; --k) {
- d = ldexp(d, MP_DIGIT_BIT) + (double)(arg->dp[k]);
- }
-
- /*
- * At this point, d is the nearest floating point number to the most
- * significant 1 or 2 mp_digits of arg. Extract its square root.
- */
-
- d = sqrt(d);
-
- /* dig is the most significant mp_digit of the square root */
-
- dig = (mp_digit) ldexp(d, -MP_DIGIT_BIT);
-
- /*
- * If the most significant digit is nonzero, find the next digit down
- * by subtracting MP_DIGIT_BIT times thie most significant digit.
- * Subtract one from the result so that our initial estimate is always
- * low.
- */
-
- if (dig) {
- t1.used = i+2;
- d -= ldexp((double) dig, MP_DIGIT_BIT);
- if (d >= 1.0) {
- t1.dp[i+1] = dig;
- t1.dp[i] = ((mp_digit) d) - 1;
- } else {
- t1.dp[i+1] = dig-1;
- t1.dp[i] = MP_DIGIT_MAX;
- }
- } else {
- t1.used = i+1;
- t1.dp[i] = ((mp_digit) d) - 1;
- }
-
-#else
-
if ((err = mp_init_copy(&t1, arg)) != MP_OKAY) {
return err;
}
@@ -102,8 +31,6 @@ mp_err mp_sqrt(const mp_int *arg, mp_int *ret)
/* First approx. (not very bad for large arg) */
mp_rshd(&t1, t1.used/2);
-#endif
-
/* t1 > 0 */
if ((err = mp_div(arg, &t1, &t2, NULL)) != MP_OKAY) {
goto E1;
diff --git a/libtommath/bn_s_mp_balance_mul.c b/libtommath/bn_s_mp_balance_mul.c
index 557cc1d..7ece5d7 100644
--- a/libtommath/bn_s_mp_balance_mul.c
+++ b/libtommath/bn_s_mp_balance_mul.c
@@ -19,7 +19,7 @@ mp_err s_mp_balance_mul(const mp_int *a, const mp_int *b, mp_int *c)
if ((err = mp_init_size(&a0, bsize + 2)) != MP_OKAY) {
return err;
}
- if ((err = mp_init_multi(&tmp, &r, (void *)NULL)) != MP_OKAY) {
+ if ((err = mp_init_multi(&tmp, &r, NULL)) != MP_OKAY) {
mp_clear(&a0);
return err;
}
@@ -75,7 +75,7 @@ mp_err s_mp_balance_mul(const mp_int *a, const mp_int *b, mp_int *c)
mp_exch(&r,c);
LBL_ERR:
- mp_clear_multi(&a0, &tmp, &r, (void *)NULL);
+ mp_clear_multi(&a0, &tmp, &r,NULL);
return err;
}
#endif
diff --git a/libtommath/bn_mp_div_3.c b/libtommath/bn_s_mp_div_3.c
index 3a23fdf..e0aeefc 100644
--- a/libtommath/bn_mp_div_3.c
+++ b/libtommath/bn_s_mp_div_3.c
@@ -1,10 +1,10 @@
#include "tommath_private.h"
-#ifdef BN_MP_DIV_3_C
+#ifdef BN_S_MP_DIV_3_C
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
/* divide by three (based on routine from MPI and the GMP manual) */
-mp_err mp_div_3(const mp_int *a, mp_int *c, mp_digit *d)
+mp_err s_mp_div_3(const mp_int *a, mp_int *c, mp_digit *d)
{
mp_int q;
mp_word w, t;
diff --git a/libtommath/bn_s_mp_log.c b/libtommath/bn_s_mp_log.c
new file mode 100644
index 0000000..a75212a
--- /dev/null
+++ b/libtommath/bn_s_mp_log.c
@@ -0,0 +1,81 @@
+#include "tommath_private.h"
+#ifdef BN_S_MP_LOG_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+mp_err s_mp_log(const mp_int *a, mp_digit base, int *c)
+{
+ mp_err err;
+ int high, low;
+ mp_int bracket_low, bracket_high, bracket_mid, t, bi_base;
+
+ mp_ord cmp = mp_cmp_d(a, base);
+ if ((cmp == MP_LT) || (cmp == MP_EQ)) {
+ *c = cmp == MP_EQ;
+ return MP_OKAY;
+ }
+
+ if ((err =
+ mp_init_multi(&bracket_low, &bracket_high,
+ &bracket_mid, &t, &bi_base, NULL)) != MP_OKAY) {
+ return err;
+ }
+
+ low = 0;
+ mp_set(&bracket_low, 1uL);
+ high = 1;
+
+ mp_set(&bracket_high, base);
+
+ /*
+ A kind of Giant-step/baby-step algorithm.
+ Idea shamelessly stolen from https://programmingpraxis.com/2010/05/07/integer-logarithms/2/
+ The effect is asymptotic, hence needs benchmarks to test if the Giant-step should be skipped
+ for small n.
+ */
+ while (mp_cmp(&bracket_high, a) == MP_LT) {
+ low = high;
+ if ((err = mp_copy(&bracket_high, &bracket_low)) != MP_OKAY) {
+ goto LBL_END;
+ }
+ high <<= 1;
+ if ((err = mp_sqr(&bracket_high, &bracket_high)) != MP_OKAY) {
+ goto LBL_END;
+ }
+ }
+ mp_set(&bi_base, base);
+
+ while ((high - low) > 1) {
+ int mid = (high + low) >> 1;
+
+ if ((err = mp_expt_n(&bi_base, mid - low, &t)) != MP_OKAY) {
+ goto LBL_END;
+ }
+ if ((err = mp_mul(&bracket_low, &t, &bracket_mid)) != MP_OKAY) {
+ goto LBL_END;
+ }
+ cmp = mp_cmp(a, &bracket_mid);
+ if (cmp == MP_LT) {
+ high = mid;
+ mp_exch(&bracket_mid, &bracket_high);
+ }
+ if (cmp == MP_GT) {
+ low = mid;
+ mp_exch(&bracket_mid, &bracket_low);
+ }
+ if (cmp == MP_EQ) {
+ *c = mid;
+ goto LBL_END;
+ }
+ }
+
+ *c = (mp_cmp(&bracket_high, a) == MP_EQ) ? high : low;
+
+LBL_END:
+ mp_clear_multi(&bracket_low, &bracket_high, &bracket_mid,
+ &t, &bi_base, NULL);
+ return err;
+}
+
+
+#endif
diff --git a/libtommath/bn_s_mp_log_2expt.c b/libtommath/bn_s_mp_log_2expt.c
new file mode 100644
index 0000000..e87ff35
--- /dev/null
+++ b/libtommath/bn_s_mp_log_2expt.c
@@ -0,0 +1,12 @@
+#include "tommath_private.h"
+#ifdef BN_S_MP_LOG_2EXPT_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+int s_mp_log_2expt(const mp_int *a, mp_digit base)
+{
+ int y;
+ for (y = 0; (base & 1) == 0; y++, base >>= 1) {}
+ return (mp_count_bits(a) - 1) / y;
+}
+#endif
diff --git a/libtommath/bn_s_mp_log_d.c b/libtommath/bn_s_mp_log_d.c
new file mode 100644
index 0000000..181d984
--- /dev/null
+++ b/libtommath/bn_s_mp_log_d.c
@@ -0,0 +1,65 @@
+#include "tommath_private.h"
+#ifdef BN_S_MP_LOG_D_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+static mp_word s_pow(mp_word base, mp_word exponent)
+{
+ mp_word result = 1u;
+ while (exponent != 0u) {
+ if ((exponent & 1u) == 1u) {
+ result *= base;
+ }
+ exponent >>= 1;
+ base *= base;
+ }
+
+ return result;
+}
+
+int s_mp_log_d(mp_digit base, mp_digit n)
+{
+ mp_word bracket_low = 1uLL, bracket_high = base, N = n;
+ int ret, high = 1, low = 0;
+
+ if (n < base) {
+ return 0;
+ }
+ if (n == base) {
+ return 1;
+ }
+
+ while (bracket_high < N) {
+ low = high;
+ bracket_low = bracket_high;
+ high <<= 1;
+ bracket_high *= bracket_high;
+ }
+
+ while (((mp_digit)(high - low)) > 1uL) {
+ int mid = (low + high) >> 1;
+ mp_word bracket_mid = bracket_low * s_pow(base, (mp_word)(mid - low));
+
+ if (N < bracket_mid) {
+ high = mid ;
+ bracket_high = bracket_mid ;
+ }
+ if (N > bracket_mid) {
+ low = mid ;
+ bracket_low = bracket_mid ;
+ }
+ if (N == bracket_mid) {
+ return mid;
+ }
+ }
+
+ if (bracket_high == N) {
+ ret = high;
+ } else {
+ ret = low;
+ }
+
+ return ret;
+}
+
+#endif
diff --git a/libtommath/bn_s_mp_mul_high_digs_fast.c b/libtommath/bn_s_mp_mul_high_digs_fast.c
index 0796f72..4ce7f59 100644
--- a/libtommath/bn_s_mp_mul_high_digs_fast.c
+++ b/libtommath/bn_s_mp_mul_high_digs_fast.c
@@ -3,8 +3,8 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-/* this is a modified version of s_mp_mul_digs_fast that only produces
- * output digits *above* digs. See the comments for s_mp_mul_digs_fast
+/* this is a modified version of fast_s_mul_digs that only produces
+ * output digits *above* digs. See the comments for fast_s_mul_digs
* to see how it works.
*
* This is used in the Barrett reduction since for one of the multiplications
diff --git a/libtommath/bn_s_mp_rand_jenkins.c b/libtommath/bn_s_mp_rand_jenkins.c
index c64afac..da0771c 100644
--- a/libtommath/bn_s_mp_rand_jenkins.c
+++ b/libtommath/bn_s_mp_rand_jenkins.c
@@ -27,10 +27,10 @@ static uint64_t s_rand_jenkins_val(void)
void s_mp_rand_jenkins_init(uint64_t seed)
{
- int i;
+ uint64_t i;
jenkins_x.a = 0xf1ea5eedULL;
jenkins_x.b = jenkins_x.c = jenkins_x.d = seed;
- for (i = 0; i < 20; ++i) {
+ for (i = 0uLL; i < 20uLL; ++i) {
(void)s_rand_jenkins_val();
}
}
diff --git a/libtommath/bn_s_mp_toom_mul.c b/libtommath/bn_s_mp_toom_mul.c
index c7db3a5..eefce6c 100644
--- a/libtommath/bn_s_mp_toom_mul.c
+++ b/libtommath/bn_s_mp_toom_mul.c
@@ -36,7 +36,7 @@ mp_err s_mp_toom_mul(const mp_int *a, const mp_int *b, mp_int *c)
mp_err err;
/* init temps */
- if ((err = mp_init_multi(&S1, &S2, &T1, (void *)NULL)) != MP_OKAY) {
+ if ((err = mp_init_multi(&S1, &S2, &T1, NULL)) != MP_OKAY) {
return err;
}
@@ -146,7 +146,7 @@ mp_err s_mp_toom_mul(const mp_int *a, const mp_int *b, mp_int *c)
if ((err = mp_sub(&S2, &a1, &S2)) != MP_OKAY) goto LBL_ERR;
/** S2 = S2 / 3; \\ this is an exact division */
- if ((err = mp_div_3(&S2, &S2, NULL)) != MP_OKAY) goto LBL_ERR;
+ if ((err = s_mp_div_3(&S2, &S2, NULL)) != MP_OKAY) goto LBL_ERR;
/** a1 = S1 - a1; */
if ((err = mp_sub(&S1, &a1, &a1)) != MP_OKAY) goto LBL_ERR;
@@ -208,7 +208,7 @@ LBL_ERRa2:
LBL_ERRa1:
mp_clear(&a0);
LBL_ERRa0:
- mp_clear_multi(&S1, &S2, &T1, (void *)NULL);
+ mp_clear_multi(&S1, &S2, &T1, NULL);
return err;
}
diff --git a/libtommath/changes.txt b/libtommath/changes.txt
index 956cdd4..80ff7dd 100644
--- a/libtommath/changes.txt
+++ b/libtommath/changes.txt
@@ -1,3 +1,9 @@
+Mar 27th, 2024
+v1.3.0
+ -- Deprecate more APIs which are replaced in develop (PR #572)
+ -- Add support for CMake (PR #573)
+ -- Add support for GitHub Actions (PR #573)
+
Sep 04th, 2023
v1.2.1
-- Bugfix release because of potential integer overflow
@@ -417,7 +423,7 @@ v0.13 -- tons of minor speed-ups in low level add, sub, mul_2 and div_2 which p
Jan 17th, 2003
v0.12 -- re-wrote the majority of the makefile so its more portable and will
install via "make install" on most *nix platforms
- -- Re-packaged all the source as separate files. Means the library a single
+ -- Re-packaged all the source as seperate files. Means the library a single
file packagage any more. Instead of just adding "bn.c" you have to add
libtommath.a
-- Renamed "bn.h" to "tommath.h"
diff --git a/libtommath/helper.pl b/libtommath/helper.pl
index c624b7c..6366d04 100755
--- a/libtommath/helper.pl
+++ b/libtommath/helper.pl
@@ -51,7 +51,7 @@ sub check_source {
push @{$troubles->{tab}}, $lineno if $l =~ /\t/ && basename($file) !~ /^makefile/i;
push @{$troubles->{non_ascii_char}}, $lineno if $l =~ /[^[:ascii:]]/;
push @{$troubles->{cpp_comment}}, $lineno if $file =~ /\.(c|h)$/ && ($l =~ /\s\/\// || $l =~ /\/\/\s/);
- # we prefer using MP_MALLOC, MP_FREE, MP_REALLOC, MP_CALLOC ...
+ # we prefer using XMALLOC, XFREE, XREALLOC, XCALLOC ...
push @{$troubles->{unwanted_malloc}}, $lineno if $file =~ /^[^\/]+\.c$/ && $l =~ /\bmalloc\s*\(/;
push @{$troubles->{unwanted_realloc}}, $lineno if $file =~ /^[^\/]+\.c$/ && $l =~ /\brealloc\s*\(/;
push @{$troubles->{unwanted_calloc}}, $lineno if $file =~ /^[^\/]+\.c$/ && $l =~ /\bcalloc\s*\(/;
@@ -222,11 +222,32 @@ sub patch_file {
return $content;
}
+sub make_sources_cmake {
+ my ($src_ref, $hdr_ref) = @_;
+ my @sources = @{ $src_ref };
+ my @headers = @{ $hdr_ref };
+ my $output = "# SPDX-License-Identifier: Unlicense
+# Autogenerated File! Do not edit.
+
+set(SOURCES\n";
+ foreach my $sobj (sort @sources) {
+ $output .= $sobj . "\n";
+ }
+ $output .= ")\n\nset(HEADERS\n";
+ foreach my $hobj (sort @headers) {
+ $output .= $hobj . "\n";
+ }
+ $output .= ")\n";
+ return $output;
+}
+
sub process_makefiles {
my $write = shift;
my $changed_count = 0;
- my @o = map { my $x = $_; $x =~ s/\.c$/.o/; $x } bsd_glob("*.c");
- my @all = bsd_glob("*.{c,h}");
+ my @headers = bsd_glob("*.h");
+ my @sources = bsd_glob("*.c");
+ my @o = map { my $x = $_; $x =~ s/\.c$/.o/; $x } @sources;
+ my @all = sort(@sources, @headers);
my $var_o = prepare_variable("OBJECTS", @o);
(my $var_obj = $var_o) =~ s/\.o\b/.obj/sg;
@@ -245,10 +266,12 @@ sub process_makefiles {
}
# update OBJECTS + HEADERS in makefile*
- for my $m (qw/ makefile makefile.shared makefile_include.mk makefile.msvc makefile.unix makefile.mingw /) {
+ for my $m (qw/ makefile makefile.shared makefile_include.mk makefile.msvc makefile.unix makefile.mingw sources.cmake /) {
my $old = read_file($m);
my $new = $m eq 'makefile.msvc' ? patch_file($old, $var_obj)
- : patch_file($old, $var_o);
+ : $m eq 'sources.cmake' ? make_sources_cmake(\@sources, \@headers)
+ : patch_file($old, $var_o);
+
if ($old ne $new) {
write_file($m, $new) if $write;
warn "changed: $m\n";
@@ -389,6 +412,11 @@ EOS
push @deps, $a;
}
}
+ if ($filename =~ "BN_DEPRECATED") {
+ push(@deps, qw(BN_MP_GET_LL_C BN_MP_INIT_LL_C BN_MP_SET_LL_C));
+ push(@deps, qw(BN_MP_GET_MAG_ULL_C BN_MP_INIT_ULL_C BN_MP_SET_ULL_C));
+ push(@deps, qw(BN_MP_DIV_3_C BN_MP_EXPT_U32_C BN_MP_ROOT_U32_C BN_MP_LOG_U32_C));
+ }
@deps = sort(@deps);
foreach my $a (@deps) {
if ($list !~ /$a/) {
@@ -435,6 +463,8 @@ sub generate_def {
@files = grep(!/mp_radix_smap/, @files);
push(@files, qw(mp_set_int mp_set_long mp_set_long_long mp_get_int mp_get_long mp_get_long_long mp_init_set_int));
+ push(@files, qw(mp_get_ll mp_get_mag_ull mp_init_ll mp_set_ll mp_init_ull mp_set_ull));
+ push(@files, qw(mp_div_3 mp_expt_u32 mp_root_u32 mp_log_u32));
my $files = join("\n ", sort(grep(/^mp_/, @files)));
write_file "tommath.def", "; libtommath
diff --git a/libtommath/libtommath.pc.in b/libtommath/libtommath.pc.in
index 099b1cd..7ce50fd 100644
--- a/libtommath/libtommath.pc.in
+++ b/libtommath/libtommath.pc.in
@@ -1,10 +1,9 @@
-prefix=@to-be-replaced@
-exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
-includedir=${prefix}/include
+prefix=@CMAKE_INSTALL_PREFIX@
+libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
+includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
Name: LibTomMath
Description: public domain library for manipulating large integer numbers
-Version: @to-be-replaced@
+Version: @PROJECT_VERSION@
Libs: -L${libdir} -ltommath
Cflags: -I${includedir}
diff --git a/libtommath/libtommath_VS2008.sln b/libtommath/libtommath_VS2008.sln
index 3bd6688..6bfc159 100644
--- a/libtommath/libtommath_VS2008.sln
+++ b/libtommath/libtommath_VS2008.sln
@@ -1,4 +1,4 @@
-
+
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tommath", "libtommath_VS2008.vcproj", "{42109FEE-B0B9-4FCD-9E56-2863BF8C55D2}"
diff --git a/libtommath/libtommath_VS2008.vcproj b/libtommath/libtommath_VS2008.vcproj
index 67cc89b..5cbbb89 100644
--- a/libtommath/libtommath_VS2008.vcproj
+++ b/libtommath/libtommath_VS2008.vcproj
@@ -401,10 +401,6 @@
>
</File>
<File
- RelativePath="bn_mp_div_3.c"
- >
- </File>
- <File
RelativePath="bn_mp_div_d.c"
>
</File>
@@ -429,7 +425,7 @@
>
</File>
<File
- RelativePath="bn_mp_expt_u32.c"
+ RelativePath="bn_mp_expt_n.c"
>
</File>
<File
@@ -477,10 +473,6 @@
>
</File>
<File
- RelativePath="bn_mp_get_ll.c"
- >
- </File>
- <File
RelativePath="bn_mp_get_mag_u32.c"
>
</File>
@@ -493,10 +485,6 @@
>
</File>
<File
- RelativePath="bn_mp_get_mag_ull.c"
- >
- </File>
- <File
RelativePath="bn_mp_grow.c"
>
</File>
@@ -525,10 +513,6 @@
>
</File>
<File
- RelativePath="bn_mp_init_ll.c"
- >
- </File>
- <File
RelativePath="bn_mp_init_multi.c"
>
</File>
@@ -553,10 +537,6 @@
>
</File>
<File
- RelativePath="bn_mp_init_ull.c"
- >
- </File>
- <File
RelativePath="bn_mp_invmod.c"
>
</File>
@@ -581,7 +561,7 @@
>
</File>
<File
- RelativePath="bn_mp_log_u32.c"
+ RelativePath="bn_mp_log_n.c"
>
</File>
<File
@@ -729,7 +709,7 @@
>
</File>
<File
- RelativePath="bn_mp_root_u32.c"
+ RelativePath="bn_mp_root_n.c"
>
</File>
<File
@@ -761,10 +741,6 @@
>
</File>
<File
- RelativePath="bn_mp_set_ll.c"
- >
- </File>
- <File
RelativePath="bn_mp_set_u32.c"
>
</File>
@@ -777,10 +753,6 @@
>
</File>
<File
- RelativePath="bn_mp_set_ull.c"
- >
- </File>
- <File
RelativePath="bn_mp_shrink.c"
>
</File>
@@ -857,6 +829,10 @@
>
</File>
<File
+ RelativePath="bn_s_mp_div_3.c"
+ >
+ </File>
+ <File
RelativePath="bn_s_mp_exptmod.c"
>
</File>
@@ -885,6 +861,18 @@
>
</File>
<File
+ RelativePath="bn_s_mp_log.c"
+ >
+ </File>
+ <File
+ RelativePath="bn_s_mp_log_2expt.c"
+ >
+ </File>
+ <File
+ RelativePath="bn_s_mp_log_d.c"
+ >
+ </File>
+ <File
RelativePath="bn_s_mp_montgomery_reduce_fast.c"
>
</File>
diff --git a/libtommath/makefile b/libtommath/makefile
index be9fac6..bee51a1 100644
--- a/libtommath/makefile
+++ b/libtommath/makefile
@@ -29,32 +29,32 @@ LCOV_ARGS=--directory .
OBJECTS=bn_cutoffs.o bn_deprecated.o bn_mp_2expt.o bn_mp_abs.o bn_mp_add.o bn_mp_add_d.o bn_mp_addmod.o \
bn_mp_and.o bn_mp_clamp.o bn_mp_clear.o bn_mp_clear_multi.o bn_mp_cmp.o bn_mp_cmp_d.o bn_mp_cmp_mag.o \
bn_mp_cnt_lsb.o bn_mp_complement.o bn_mp_copy.o bn_mp_count_bits.o bn_mp_decr.o bn_mp_div.o bn_mp_div_2.o \
-bn_mp_div_2d.o bn_mp_div_3.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
-bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_u32.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
+bn_mp_div_2d.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
+bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_n.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
bn_mp_from_sbin.o bn_mp_from_ubin.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_double.o bn_mp_get_i32.o \
-bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_ll.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o \
-bn_mp_get_mag_ull.o bn_mp_grow.o bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o \
-bn_mp_init_i64.o bn_mp_init_l.o bn_mp_init_ll.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o \
-bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o bn_mp_init_ull.o bn_mp_invmod.o bn_mp_is_square.o \
-bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_u32.o bn_mp_lshd.o bn_mp_mod.o \
-bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \
-bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_neg.o \
-bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o \
-bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \
-bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o bn_mp_prime_strong_lucas_selfridge.o \
-bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o \
-bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o \
-bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_root_u32.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o \
-bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_ll.o bn_mp_set_u32.o \
-bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_rsh.o bn_mp_sqr.o \
-bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o bn_mp_submod.o \
-bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o bn_mp_xor.o bn_mp_zero.o \
-bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
-bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
-bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
-bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
-bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
-bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
+bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o bn_mp_grow.o \
+bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o bn_mp_init_i64.o bn_mp_init_l.o \
+bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o \
+bn_mp_invmod.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_n.o \
+bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o \
+bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o \
+bn_mp_mulmod.o bn_mp_neg.o bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o \
+bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o \
+bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o \
+bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o \
+bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \
+bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o \
+bn_mp_root_n.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o \
+bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_shrink.o \
+bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
+bn_mp_submod.o bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o \
+bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_div_3.o \
+bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
+bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_log.o bn_s_mp_log_2expt.o bn_s_mp_log_d.o \
+bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o \
+bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o \
+bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o \
+bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
#END_INS
@@ -133,7 +133,11 @@ pre_gen:
sed -e 's/[[:blank:]]*$$//' mpi.c > pre_gen/mpi.c
rm mpi.c
-zipup: clean astyle new_file docs
+zipup:
+ $(MAKE) clean
+ $(MAKE) .zipup
+
+.zipup: astyle new_file docs
@# Update the index, so diff-index won't fail in case the pdf has been created.
@# As the pdf creation modifies the tex files, git sometimes detects the
@# modified files, but misses that it's put back to its original version.
diff --git a/libtommath/makefile.mingw b/libtommath/makefile.mingw
index 7eee57d..d05d84d 100644
--- a/libtommath/makefile.mingw
+++ b/libtommath/makefile.mingw
@@ -11,16 +11,20 @@
#The following can be overridden from command line e.g. make -f makefile.mingw CC=gcc ARFLAGS=rcs
PREFIX = c:\mingw
-CC = gcc
+CC = i686-w64-mingw32-gcc
+#CC = x86_64-w64-mingw32-clang
+#CC = aarch64-w64-mingw32-clang
AR = ar
ARFLAGS = r
RANLIB = ranlib
-STRIP = strip
+STRIP = i686-w64-mingw32-gcc-strip
+#STRIP = x86_64-w64-mingw32-strip
+#STRIP = aarch64-w64-mingw32-strip
CFLAGS = -O2
LDFLAGS =
#Compilation flags
-LTM_CFLAGS = -I. $(CFLAGS)
+LTM_CFLAGS = -I. $(CFLAGS) -DTCL_WITH_EXTERNAL_TOMMATH
LTM_LDFLAGS = $(LDFLAGS) -static-libgcc
#Libraries to be created
@@ -32,32 +36,32 @@ LIBMAIN_D =libtommath.dll
OBJECTS=bn_cutoffs.o bn_deprecated.o bn_mp_2expt.o bn_mp_abs.o bn_mp_add.o bn_mp_add_d.o bn_mp_addmod.o \
bn_mp_and.o bn_mp_clamp.o bn_mp_clear.o bn_mp_clear_multi.o bn_mp_cmp.o bn_mp_cmp_d.o bn_mp_cmp_mag.o \
bn_mp_cnt_lsb.o bn_mp_complement.o bn_mp_copy.o bn_mp_count_bits.o bn_mp_decr.o bn_mp_div.o bn_mp_div_2.o \
-bn_mp_div_2d.o bn_mp_div_3.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
-bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_u32.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
+bn_mp_div_2d.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
+bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_n.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
bn_mp_from_sbin.o bn_mp_from_ubin.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_double.o bn_mp_get_i32.o \
-bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_ll.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o \
-bn_mp_get_mag_ull.o bn_mp_grow.o bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o \
-bn_mp_init_i64.o bn_mp_init_l.o bn_mp_init_ll.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o \
-bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o bn_mp_init_ull.o bn_mp_invmod.o bn_mp_is_square.o \
-bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_u32.o bn_mp_lshd.o bn_mp_mod.o \
-bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \
-bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_neg.o \
-bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o \
-bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \
-bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o bn_mp_prime_strong_lucas_selfridge.o \
-bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o \
-bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o \
-bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_root_u32.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o \
-bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_ll.o bn_mp_set_u32.o \
-bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_rsh.o bn_mp_sqr.o \
-bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o bn_mp_submod.o \
-bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o bn_mp_xor.o bn_mp_zero.o \
-bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
-bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
-bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
-bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
-bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
-bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
+bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o bn_mp_grow.o \
+bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o bn_mp_init_i64.o bn_mp_init_l.o \
+bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o \
+bn_mp_invmod.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_n.o \
+bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o \
+bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o \
+bn_mp_mulmod.o bn_mp_neg.o bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o \
+bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o \
+bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o \
+bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o \
+bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \
+bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o \
+bn_mp_root_n.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o \
+bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_shrink.o \
+bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
+bn_mp_submod.o bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o \
+bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_div_3.o \
+bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
+bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_log.o bn_s_mp_log_2expt.o bn_s_mp_log_d.o \
+bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o \
+bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o \
+bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o \
+bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
HEADERS_PUB=tommath.h
HEADERS=tommath_private.h tommath_class.h tommath_superclass.h tommath_cutoffs.h $(HEADERS_PUB)
@@ -78,7 +82,7 @@ $(LIBMAIN_S): $(OBJECTS)
#Create DLL + import library libtommath.dll.a
$(LIBMAIN_D) $(LIBMAIN_I): $(OBJECTS)
- $(CC) -s -shared -o $(LIBMAIN_D) $^ -Wl,--enable-auto-import,--export-all -Wl,--out-implib=$(LIBMAIN_I) $(LTM_LDFLAGS)
+ $(CC) -s -shared -o $(LIBMAIN_D) $^ -Wl,--enable-auto-import tommath.def -Wl,--out-implib=$(LIBMAIN_I) $(LTM_LDFLAGS)
$(STRIP) -S $(LIBMAIN_D)
#Build test suite
diff --git a/libtommath/makefile.msvc b/libtommath/makefile.msvc
index aa8d8be..a78080b 100644
--- a/libtommath/makefile.msvc
+++ b/libtommath/makefile.msvc
@@ -24,32 +24,32 @@ LIBMAIN_S =tommath.lib
OBJECTS=bn_cutoffs.obj bn_deprecated.obj bn_mp_2expt.obj bn_mp_abs.obj bn_mp_add.obj bn_mp_add_d.obj bn_mp_addmod.obj \
bn_mp_and.obj bn_mp_clamp.obj bn_mp_clear.obj bn_mp_clear_multi.obj bn_mp_cmp.obj bn_mp_cmp_d.obj bn_mp_cmp_mag.obj \
bn_mp_cnt_lsb.obj bn_mp_complement.obj bn_mp_copy.obj bn_mp_count_bits.obj bn_mp_decr.obj bn_mp_div.obj bn_mp_div_2.obj \
-bn_mp_div_2d.obj bn_mp_div_3.obj bn_mp_div_d.obj bn_mp_dr_is_modulus.obj bn_mp_dr_reduce.obj bn_mp_dr_setup.obj \
-bn_mp_error_to_string.obj bn_mp_exch.obj bn_mp_expt_u32.obj bn_mp_exptmod.obj bn_mp_exteuclid.obj bn_mp_fread.obj \
+bn_mp_div_2d.obj bn_mp_div_d.obj bn_mp_dr_is_modulus.obj bn_mp_dr_reduce.obj bn_mp_dr_setup.obj \
+bn_mp_error_to_string.obj bn_mp_exch.obj bn_mp_expt_n.obj bn_mp_exptmod.obj bn_mp_exteuclid.obj bn_mp_fread.obj \
bn_mp_from_sbin.obj bn_mp_from_ubin.obj bn_mp_fwrite.obj bn_mp_gcd.obj bn_mp_get_double.obj bn_mp_get_i32.obj \
-bn_mp_get_i64.obj bn_mp_get_l.obj bn_mp_get_ll.obj bn_mp_get_mag_u32.obj bn_mp_get_mag_u64.obj bn_mp_get_mag_ul.obj \
-bn_mp_get_mag_ull.obj bn_mp_grow.obj bn_mp_incr.obj bn_mp_init.obj bn_mp_init_copy.obj bn_mp_init_i32.obj \
-bn_mp_init_i64.obj bn_mp_init_l.obj bn_mp_init_ll.obj bn_mp_init_multi.obj bn_mp_init_set.obj bn_mp_init_size.obj \
-bn_mp_init_u32.obj bn_mp_init_u64.obj bn_mp_init_ul.obj bn_mp_init_ull.obj bn_mp_invmod.obj bn_mp_is_square.obj \
-bn_mp_iseven.obj bn_mp_isodd.obj bn_mp_kronecker.obj bn_mp_lcm.obj bn_mp_log_u32.obj bn_mp_lshd.obj bn_mp_mod.obj \
-bn_mp_mod_2d.obj bn_mp_mod_d.obj bn_mp_montgomery_calc_normalization.obj bn_mp_montgomery_reduce.obj \
-bn_mp_montgomery_setup.obj bn_mp_mul.obj bn_mp_mul_2.obj bn_mp_mul_2d.obj bn_mp_mul_d.obj bn_mp_mulmod.obj bn_mp_neg.obj \
-bn_mp_or.obj bn_mp_pack.obj bn_mp_pack_count.obj bn_mp_prime_fermat.obj bn_mp_prime_frobenius_underwood.obj \
-bn_mp_prime_is_prime.obj bn_mp_prime_miller_rabin.obj bn_mp_prime_next_prime.obj \
-bn_mp_prime_rabin_miller_trials.obj bn_mp_prime_rand.obj bn_mp_prime_strong_lucas_selfridge.obj \
-bn_mp_radix_size.obj bn_mp_radix_smap.obj bn_mp_rand.obj bn_mp_read_radix.obj bn_mp_reduce.obj bn_mp_reduce_2k.obj \
-bn_mp_reduce_2k_l.obj bn_mp_reduce_2k_setup.obj bn_mp_reduce_2k_setup_l.obj bn_mp_reduce_is_2k.obj \
-bn_mp_reduce_is_2k_l.obj bn_mp_reduce_setup.obj bn_mp_root_u32.obj bn_mp_rshd.obj bn_mp_sbin_size.obj bn_mp_set.obj \
-bn_mp_set_double.obj bn_mp_set_i32.obj bn_mp_set_i64.obj bn_mp_set_l.obj bn_mp_set_ll.obj bn_mp_set_u32.obj \
-bn_mp_set_u64.obj bn_mp_set_ul.obj bn_mp_set_ull.obj bn_mp_shrink.obj bn_mp_signed_rsh.obj bn_mp_sqr.obj \
-bn_mp_sqrmod.obj bn_mp_sqrt.obj bn_mp_sqrtmod_prime.obj bn_mp_sub.obj bn_mp_sub_d.obj bn_mp_submod.obj \
-bn_mp_to_radix.obj bn_mp_to_sbin.obj bn_mp_to_ubin.obj bn_mp_ubin_size.obj bn_mp_unpack.obj bn_mp_xor.obj bn_mp_zero.obj \
-bn_prime_tab.obj bn_s_mp_add.obj bn_s_mp_balance_mul.obj bn_s_mp_exptmod.obj bn_s_mp_exptmod_fast.obj \
-bn_s_mp_get_bit.obj bn_s_mp_invmod_fast.obj bn_s_mp_invmod_slow.obj bn_s_mp_karatsuba_mul.obj \
-bn_s_mp_karatsuba_sqr.obj bn_s_mp_montgomery_reduce_fast.obj bn_s_mp_mul_digs.obj bn_s_mp_mul_digs_fast.obj \
-bn_s_mp_mul_high_digs.obj bn_s_mp_mul_high_digs_fast.obj bn_s_mp_prime_is_divisible.obj \
-bn_s_mp_rand_jenkins.obj bn_s_mp_rand_platform.obj bn_s_mp_reverse.obj bn_s_mp_sqr.obj bn_s_mp_sqr_fast.obj \
-bn_s_mp_sub.obj bn_s_mp_toom_mul.obj bn_s_mp_toom_sqr.obj
+bn_mp_get_i64.obj bn_mp_get_l.obj bn_mp_get_mag_u32.obj bn_mp_get_mag_u64.obj bn_mp_get_mag_ul.obj bn_mp_grow.obj \
+bn_mp_incr.obj bn_mp_init.obj bn_mp_init_copy.obj bn_mp_init_i32.obj bn_mp_init_i64.obj bn_mp_init_l.obj \
+bn_mp_init_multi.obj bn_mp_init_set.obj bn_mp_init_size.obj bn_mp_init_u32.obj bn_mp_init_u64.obj bn_mp_init_ul.obj \
+bn_mp_invmod.obj bn_mp_is_square.obj bn_mp_iseven.obj bn_mp_isodd.obj bn_mp_kronecker.obj bn_mp_lcm.obj bn_mp_log_n.obj \
+bn_mp_lshd.obj bn_mp_mod.obj bn_mp_mod_2d.obj bn_mp_mod_d.obj bn_mp_montgomery_calc_normalization.obj \
+bn_mp_montgomery_reduce.obj bn_mp_montgomery_setup.obj bn_mp_mul.obj bn_mp_mul_2.obj bn_mp_mul_2d.obj bn_mp_mul_d.obj \
+bn_mp_mulmod.obj bn_mp_neg.obj bn_mp_or.obj bn_mp_pack.obj bn_mp_pack_count.obj bn_mp_prime_fermat.obj \
+bn_mp_prime_frobenius_underwood.obj bn_mp_prime_is_prime.obj bn_mp_prime_miller_rabin.obj \
+bn_mp_prime_next_prime.obj bn_mp_prime_rabin_miller_trials.obj bn_mp_prime_rand.obj \
+bn_mp_prime_strong_lucas_selfridge.obj bn_mp_radix_size.obj bn_mp_radix_smap.obj bn_mp_rand.obj \
+bn_mp_read_radix.obj bn_mp_reduce.obj bn_mp_reduce_2k.obj bn_mp_reduce_2k_l.obj bn_mp_reduce_2k_setup.obj \
+bn_mp_reduce_2k_setup_l.obj bn_mp_reduce_is_2k.obj bn_mp_reduce_is_2k_l.obj bn_mp_reduce_setup.obj \
+bn_mp_root_n.obj bn_mp_rshd.obj bn_mp_sbin_size.obj bn_mp_set.obj bn_mp_set_double.obj bn_mp_set_i32.obj \
+bn_mp_set_i64.obj bn_mp_set_l.obj bn_mp_set_u32.obj bn_mp_set_u64.obj bn_mp_set_ul.obj bn_mp_shrink.obj \
+bn_mp_signed_rsh.obj bn_mp_sqr.obj bn_mp_sqrmod.obj bn_mp_sqrt.obj bn_mp_sqrtmod_prime.obj bn_mp_sub.obj bn_mp_sub_d.obj \
+bn_mp_submod.obj bn_mp_to_radix.obj bn_mp_to_sbin.obj bn_mp_to_ubin.obj bn_mp_ubin_size.obj bn_mp_unpack.obj \
+bn_mp_xor.obj bn_mp_zero.obj bn_prime_tab.obj bn_s_mp_add.obj bn_s_mp_balance_mul.obj bn_s_mp_div_3.obj \
+bn_s_mp_exptmod.obj bn_s_mp_exptmod_fast.obj bn_s_mp_get_bit.obj bn_s_mp_invmod_fast.obj bn_s_mp_invmod_slow.obj \
+bn_s_mp_karatsuba_mul.obj bn_s_mp_karatsuba_sqr.obj bn_s_mp_log.obj bn_s_mp_log_2expt.obj bn_s_mp_log_d.obj \
+bn_s_mp_montgomery_reduce_fast.obj bn_s_mp_mul_digs.obj bn_s_mp_mul_digs_fast.obj bn_s_mp_mul_high_digs.obj \
+bn_s_mp_mul_high_digs_fast.obj bn_s_mp_prime_is_divisible.obj bn_s_mp_rand_jenkins.obj \
+bn_s_mp_rand_platform.obj bn_s_mp_reverse.obj bn_s_mp_sqr.obj bn_s_mp_sqr_fast.obj bn_s_mp_sub.obj \
+bn_s_mp_toom_mul.obj bn_s_mp_toom_sqr.obj
HEADERS_PUB=tommath.h
HEADERS=tommath_private.h tommath_class.h tommath_superclass.h tommath_cutoffs.h $(HEADERS_PUB)
diff --git a/libtommath/makefile.shared b/libtommath/makefile.shared
index 6802107..bf0ee43 100644
--- a/libtommath/makefile.shared
+++ b/libtommath/makefile.shared
@@ -26,32 +26,32 @@ LCOV_ARGS=--directory .libs --directory .
OBJECTS=bn_cutoffs.o bn_deprecated.o bn_mp_2expt.o bn_mp_abs.o bn_mp_add.o bn_mp_add_d.o bn_mp_addmod.o \
bn_mp_and.o bn_mp_clamp.o bn_mp_clear.o bn_mp_clear_multi.o bn_mp_cmp.o bn_mp_cmp_d.o bn_mp_cmp_mag.o \
bn_mp_cnt_lsb.o bn_mp_complement.o bn_mp_copy.o bn_mp_count_bits.o bn_mp_decr.o bn_mp_div.o bn_mp_div_2.o \
-bn_mp_div_2d.o bn_mp_div_3.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
-bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_u32.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
+bn_mp_div_2d.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
+bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_n.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
bn_mp_from_sbin.o bn_mp_from_ubin.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_double.o bn_mp_get_i32.o \
-bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_ll.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o \
-bn_mp_get_mag_ull.o bn_mp_grow.o bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o \
-bn_mp_init_i64.o bn_mp_init_l.o bn_mp_init_ll.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o \
-bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o bn_mp_init_ull.o bn_mp_invmod.o bn_mp_is_square.o \
-bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_u32.o bn_mp_lshd.o bn_mp_mod.o \
-bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \
-bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_neg.o \
-bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o \
-bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \
-bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o bn_mp_prime_strong_lucas_selfridge.o \
-bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o \
-bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o \
-bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_root_u32.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o \
-bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_ll.o bn_mp_set_u32.o \
-bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_rsh.o bn_mp_sqr.o \
-bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o bn_mp_submod.o \
-bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o bn_mp_xor.o bn_mp_zero.o \
-bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
-bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
-bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
-bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
-bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
-bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
+bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o bn_mp_grow.o \
+bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o bn_mp_init_i64.o bn_mp_init_l.o \
+bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o \
+bn_mp_invmod.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_n.o \
+bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o \
+bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o \
+bn_mp_mulmod.o bn_mp_neg.o bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o \
+bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o \
+bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o \
+bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o \
+bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \
+bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o \
+bn_mp_root_n.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o \
+bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_shrink.o \
+bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
+bn_mp_submod.o bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o \
+bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_div_3.o \
+bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
+bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_log.o bn_s_mp_log_2expt.o bn_s_mp_log_d.o \
+bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o \
+bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o \
+bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o \
+bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
#END_INS
@@ -70,7 +70,8 @@ install: $(LIBNAME)
install -d $(DESTDIR)$(INCPATH)
$(LIBTOOL) --mode=install install -m 644 $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME)
install -m 644 $(HEADERS_PUB) $(DESTDIR)$(INCPATH)
- sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' libtommath.pc.in > libtommath.pc
+ sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' -e 's,@CMAKE_INSTALL_LIBDIR@,lib,' \
+ -e 's,@CMAKE_INSTALL_INCLUDEDIR@,include,' libtommath.pc.in > libtommath.pc
install -d $(DESTDIR)$(LIBPATH)/pkgconfig
install -m 644 libtommath.pc $(DESTDIR)$(LIBPATH)/pkgconfig/
diff --git a/libtommath/makefile.unix b/libtommath/makefile.unix
index 9336da0..fdc3fa7 100644
--- a/libtommath/makefile.unix
+++ b/libtommath/makefile.unix
@@ -21,7 +21,7 @@ RANLIB = ranlib
CFLAGS = -O2
LDFLAGS =
-VERSION = 1.2.1
+VERSION = 1.3.0
#Compilation flags
LTM_CFLAGS = -I. $(CFLAGS)
@@ -33,32 +33,32 @@ LIBMAIN_S = libtommath.a
OBJECTS=bn_cutoffs.o bn_deprecated.o bn_mp_2expt.o bn_mp_abs.o bn_mp_add.o bn_mp_add_d.o bn_mp_addmod.o \
bn_mp_and.o bn_mp_clamp.o bn_mp_clear.o bn_mp_clear_multi.o bn_mp_cmp.o bn_mp_cmp_d.o bn_mp_cmp_mag.o \
bn_mp_cnt_lsb.o bn_mp_complement.o bn_mp_copy.o bn_mp_count_bits.o bn_mp_decr.o bn_mp_div.o bn_mp_div_2.o \
-bn_mp_div_2d.o bn_mp_div_3.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
-bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_u32.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
+bn_mp_div_2d.o bn_mp_div_d.o bn_mp_dr_is_modulus.o bn_mp_dr_reduce.o bn_mp_dr_setup.o \
+bn_mp_error_to_string.o bn_mp_exch.o bn_mp_expt_n.o bn_mp_exptmod.o bn_mp_exteuclid.o bn_mp_fread.o \
bn_mp_from_sbin.o bn_mp_from_ubin.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_double.o bn_mp_get_i32.o \
-bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_ll.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o \
-bn_mp_get_mag_ull.o bn_mp_grow.o bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o \
-bn_mp_init_i64.o bn_mp_init_l.o bn_mp_init_ll.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o \
-bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o bn_mp_init_ull.o bn_mp_invmod.o bn_mp_is_square.o \
-bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_u32.o bn_mp_lshd.o bn_mp_mod.o \
-bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \
-bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_neg.o \
-bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o \
-bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \
-bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o bn_mp_prime_strong_lucas_selfridge.o \
-bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o \
-bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o \
-bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_root_u32.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o \
-bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_ll.o bn_mp_set_u32.o \
-bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_rsh.o bn_mp_sqr.o \
-bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o bn_mp_submod.o \
-bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o bn_mp_xor.o bn_mp_zero.o \
-bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
-bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
-bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
-bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
-bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
-bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
+bn_mp_get_i64.o bn_mp_get_l.o bn_mp_get_mag_u32.o bn_mp_get_mag_u64.o bn_mp_get_mag_ul.o bn_mp_grow.o \
+bn_mp_incr.o bn_mp_init.o bn_mp_init_copy.o bn_mp_init_i32.o bn_mp_init_i64.o bn_mp_init_l.o \
+bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_size.o bn_mp_init_u32.o bn_mp_init_u64.o bn_mp_init_ul.o \
+bn_mp_invmod.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_log_n.o \
+bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o \
+bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o \
+bn_mp_mulmod.o bn_mp_neg.o bn_mp_or.o bn_mp_pack.o bn_mp_pack_count.o bn_mp_prime_fermat.o \
+bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o \
+bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o bn_mp_prime_rand.o \
+bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o \
+bn_mp_read_radix.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \
+bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o \
+bn_mp_root_n.o bn_mp_rshd.o bn_mp_sbin_size.o bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o \
+bn_mp_set_i64.o bn_mp_set_l.o bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_shrink.o \
+bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
+bn_mp_submod.o bn_mp_to_radix.o bn_mp_to_sbin.o bn_mp_to_ubin.o bn_mp_ubin_size.o bn_mp_unpack.o \
+bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_div_3.o \
+bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
+bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_log.o bn_s_mp_log_2expt.o bn_s_mp_log_d.o \
+bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o \
+bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o \
+bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o \
+bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
HEADERS_PUB=tommath.h
HEADERS=tommath_private.h tommath_class.h tommath_superclass.h tommath_cutoffs.h $(HEADERS_PUB)
diff --git a/libtommath/makefile_include.mk b/libtommath/makefile_include.mk
index 71f04dd..df51a12 100644
--- a/libtommath/makefile_include.mk
+++ b/libtommath/makefile_include.mk
@@ -3,9 +3,9 @@
#
#version of library
-VERSION=1.2.1
-VERSION_PC=1.2.1
-VERSION_SO=3:1:2
+VERSION=1.3.0
+VERSION_PC=1.3.0
+VERSION_SO=4:0:3
PLATFORM := $(shell uname | sed -e 's/_.*//')
diff --git a/libtommath/sources.cmake b/libtommath/sources.cmake
new file mode 100644
index 0000000..a2df090
--- /dev/null
+++ b/libtommath/sources.cmake
@@ -0,0 +1,167 @@
+# SPDX-License-Identifier: Unlicense
+# Autogenerated File! Do not edit.
+
+set(SOURCES
+bn_cutoffs.c
+bn_deprecated.c
+bn_mp_2expt.c
+bn_mp_abs.c
+bn_mp_add.c
+bn_mp_add_d.c
+bn_mp_addmod.c
+bn_mp_and.c
+bn_mp_clamp.c
+bn_mp_clear.c
+bn_mp_clear_multi.c
+bn_mp_cmp.c
+bn_mp_cmp_d.c
+bn_mp_cmp_mag.c
+bn_mp_cnt_lsb.c
+bn_mp_complement.c
+bn_mp_copy.c
+bn_mp_count_bits.c
+bn_mp_decr.c
+bn_mp_div.c
+bn_mp_div_2.c
+bn_mp_div_2d.c
+bn_mp_div_d.c
+bn_mp_dr_is_modulus.c
+bn_mp_dr_reduce.c
+bn_mp_dr_setup.c
+bn_mp_error_to_string.c
+bn_mp_exch.c
+bn_mp_expt_n.c
+bn_mp_exptmod.c
+bn_mp_exteuclid.c
+bn_mp_fread.c
+bn_mp_from_sbin.c
+bn_mp_from_ubin.c
+bn_mp_fwrite.c
+bn_mp_gcd.c
+bn_mp_get_double.c
+bn_mp_get_i32.c
+bn_mp_get_i64.c
+bn_mp_get_l.c
+bn_mp_get_mag_u32.c
+bn_mp_get_mag_u64.c
+bn_mp_get_mag_ul.c
+bn_mp_grow.c
+bn_mp_incr.c
+bn_mp_init.c
+bn_mp_init_copy.c
+bn_mp_init_i32.c
+bn_mp_init_i64.c
+bn_mp_init_l.c
+bn_mp_init_multi.c
+bn_mp_init_set.c
+bn_mp_init_size.c
+bn_mp_init_u32.c
+bn_mp_init_u64.c
+bn_mp_init_ul.c
+bn_mp_invmod.c
+bn_mp_is_square.c
+bn_mp_iseven.c
+bn_mp_isodd.c
+bn_mp_kronecker.c
+bn_mp_lcm.c
+bn_mp_log_n.c
+bn_mp_lshd.c
+bn_mp_mod.c
+bn_mp_mod_2d.c
+bn_mp_mod_d.c
+bn_mp_montgomery_calc_normalization.c
+bn_mp_montgomery_reduce.c
+bn_mp_montgomery_setup.c
+bn_mp_mul.c
+bn_mp_mul_2.c
+bn_mp_mul_2d.c
+bn_mp_mul_d.c
+bn_mp_mulmod.c
+bn_mp_neg.c
+bn_mp_or.c
+bn_mp_pack.c
+bn_mp_pack_count.c
+bn_mp_prime_fermat.c
+bn_mp_prime_frobenius_underwood.c
+bn_mp_prime_is_prime.c
+bn_mp_prime_miller_rabin.c
+bn_mp_prime_next_prime.c
+bn_mp_prime_rabin_miller_trials.c
+bn_mp_prime_rand.c
+bn_mp_prime_strong_lucas_selfridge.c
+bn_mp_radix_size.c
+bn_mp_radix_smap.c
+bn_mp_rand.c
+bn_mp_read_radix.c
+bn_mp_reduce.c
+bn_mp_reduce_2k.c
+bn_mp_reduce_2k_l.c
+bn_mp_reduce_2k_setup.c
+bn_mp_reduce_2k_setup_l.c
+bn_mp_reduce_is_2k.c
+bn_mp_reduce_is_2k_l.c
+bn_mp_reduce_setup.c
+bn_mp_root_n.c
+bn_mp_rshd.c
+bn_mp_sbin_size.c
+bn_mp_set.c
+bn_mp_set_double.c
+bn_mp_set_i32.c
+bn_mp_set_i64.c
+bn_mp_set_l.c
+bn_mp_set_u32.c
+bn_mp_set_u64.c
+bn_mp_set_ul.c
+bn_mp_shrink.c
+bn_mp_signed_rsh.c
+bn_mp_sqr.c
+bn_mp_sqrmod.c
+bn_mp_sqrt.c
+bn_mp_sqrtmod_prime.c
+bn_mp_sub.c
+bn_mp_sub_d.c
+bn_mp_submod.c
+bn_mp_to_radix.c
+bn_mp_to_sbin.c
+bn_mp_to_ubin.c
+bn_mp_ubin_size.c
+bn_mp_unpack.c
+bn_mp_xor.c
+bn_mp_zero.c
+bn_prime_tab.c
+bn_s_mp_add.c
+bn_s_mp_balance_mul.c
+bn_s_mp_div_3.c
+bn_s_mp_exptmod.c
+bn_s_mp_exptmod_fast.c
+bn_s_mp_get_bit.c
+bn_s_mp_invmod_fast.c
+bn_s_mp_invmod_slow.c
+bn_s_mp_karatsuba_mul.c
+bn_s_mp_karatsuba_sqr.c
+bn_s_mp_log.c
+bn_s_mp_log_2expt.c
+bn_s_mp_log_d.c
+bn_s_mp_montgomery_reduce_fast.c
+bn_s_mp_mul_digs.c
+bn_s_mp_mul_digs_fast.c
+bn_s_mp_mul_high_digs.c
+bn_s_mp_mul_high_digs_fast.c
+bn_s_mp_prime_is_divisible.c
+bn_s_mp_rand_jenkins.c
+bn_s_mp_rand_platform.c
+bn_s_mp_reverse.c
+bn_s_mp_sqr.c
+bn_s_mp_sqr_fast.c
+bn_s_mp_sub.c
+bn_s_mp_toom_mul.c
+bn_s_mp_toom_sqr.c
+)
+
+set(HEADERS
+tommath.h
+tommath_class.h
+tommath_cutoffs.h
+tommath_private.h
+tommath_superclass.h
+)
diff --git a/libtommath/tommath.def b/libtommath/tommath.def
index 879767f..312843d 100644
--- a/libtommath/tommath.def
+++ b/libtommath/tommath.def
@@ -33,6 +33,7 @@ EXPORTS
mp_dr_setup
mp_error_to_string
mp_exch
+ mp_expt_n
mp_expt_u32
mp_exptmod
mp_exteuclid
@@ -75,6 +76,7 @@ EXPORTS
mp_isodd
mp_kronecker
mp_lcm
+ mp_log_n
mp_log_u32
mp_lshd
mp_mod
@@ -111,11 +113,11 @@ EXPORTS
mp_reduce_is_2k
mp_reduce_is_2k_l
mp_reduce_setup
+ mp_root_n
mp_root_u32
mp_rshd
mp_sbin_size
mp_set
- mp_set_double
mp_set_i32
mp_set_i64
mp_set_int
@@ -143,14 +145,15 @@ EXPORTS
mp_unpack
mp_xor
mp_zero
- s_mp_mul_digs
- s_mp_sub
s_mp_add
- s_mp_toom_mul
- s_mp_mul_digs_fast
+ s_mp_balance_mul
s_mp_karatsuba_mul
- s_mp_sqr_fast
- s_mp_reverse
s_mp_karatsuba_sqr
- s_mp_toom_sqr
+ s_mp_mul_digs
+ s_mp_mul_digs_fast
+ s_mp_reverse
s_mp_sqr
+ s_mp_sqr_fast
+ s_mp_sub
+ s_mp_toom_mul
+ s_mp_toom_sqr
diff --git a/libtommath/tommath.h b/libtommath/tommath.h
index a235210..9e0839e 100644
--- a/libtommath/tommath.h
+++ b/libtommath/tommath.h
@@ -234,22 +234,13 @@ TOOM_SQR_CUTOFF;
#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 405)
# define MP_DEPRECATED(x) __attribute__((deprecated("replaced by " #x)))
-#elif defined(_MSC_VER) && _MSC_VER >= 1500
-# define MP_DEPRECATED(x) __declspec(deprecated("replaced by " #x))
-#else
-# define MP_DEPRECATED(x)
-#endif
-
-#ifndef MP_NO_DEPRECATED_PRAGMA
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 301)
# define PRIVATE_MP_DEPRECATED_PRAGMA(s) _Pragma(#s)
# define MP_DEPRECATED_PRAGMA(s) PRIVATE_MP_DEPRECATED_PRAGMA(GCC warning s)
#elif defined(_MSC_VER) && _MSC_VER >= 1500
+# define MP_DEPRECATED(x) __declspec(deprecated("replaced by " #x))
# define MP_DEPRECATED_PRAGMA(s) __pragma(message(s))
-#endif
-#endif
-
-#ifndef MP_DEPRECATED_PRAGMA
+#else
+# define MP_DEPRECATED(s)
# define MP_DEPRECATED_PRAGMA(s)
#endif
@@ -338,7 +329,7 @@ mp_err mp_init_u64(mp_int *a, uint64_t b) MP_WUR;
uint32_t mp_get_mag_u32(const mp_int *a) MP_WUR;
uint64_t mp_get_mag_u64(const mp_int *a) MP_WUR;
unsigned long mp_get_mag_ul(const mp_int *a) MP_WUR;
-#define mp_get_mag_ull(a) ((unsigned long long)mp_get_mag_u64(a))
+MP_DEPRECATED(mp_get_mag_u64) unsigned long long mp_get_mag_ull(const mp_int *a) MP_WUR;
/* get integer, set integer (long) */
long mp_get_l(const mp_int *a) MP_WUR;
@@ -351,14 +342,14 @@ void mp_set_ul(mp_int *a, unsigned long b);
mp_err mp_init_ul(mp_int *a, unsigned long b) MP_WUR;
/* get integer, set integer (long long) */
-#define mp_get_ll(a) ((long long)mp_get_i64(a))
-#define mp_set_ll(a,b) mp_set_i64(a,b)
-#define mp_init_ll(a,b) mp_init_i64(a,b)
+MP_DEPRECATED(mp_get_i64) long long mp_get_ll(const mp_int *a) MP_WUR;
+MP_DEPRECATED(mp_set_i64) void mp_set_ll(mp_int *a, long long b);
+MP_DEPRECATED(mp_init_i64) mp_err mp_init_ll(mp_int *a, long long b) MP_WUR;
/* get integer, set integer (unsigned long long) */
-#define mp_get_ull(a) ((unsigned long long)mp_get_i64(a))
-#define mp_set_ull(a,b) mp_set_u64(a,b)
-#define mp_init_ull(a,b) mp_init_u64(a,b)
+#define mp_get_ull(a) (MP_DEPRECATED_PRAGMA("mp_get_ull() has been deprecated, use mp_get_u64()") ((unsigned long long)mp_get_ll(a)))
+MP_DEPRECATED(mp_set_u64) void mp_set_ull(mp_int *a, unsigned long long b);
+MP_DEPRECATED(mp_init_u64) mp_err mp_init_ull(mp_int *a, unsigned long long b) MP_WUR;
/* set to single unsigned digit, up to MP_DIGIT_MAX */
void mp_set(mp_int *a, mp_digit b);
@@ -367,7 +358,7 @@ mp_err mp_init_set(mp_int *a, mp_digit b) MP_WUR;
/* get integer, set integer and init with integer (deprecated) */
MP_DEPRECATED(mp_get_mag_u32/mp_get_u32) unsigned long mp_get_int(const mp_int *a) MP_WUR;
MP_DEPRECATED(mp_get_mag_ul/mp_get_ul) unsigned long mp_get_long(const mp_int *a) MP_WUR;
-MP_DEPRECATED(mp_get_mag_ull/mp_get_ull) unsigned long long mp_get_long_long(const mp_int *a) MP_WUR;
+MP_DEPRECATED(mp_get_mag_u64/mp_get_u64) unsigned long long mp_get_long_long(const mp_int *a) MP_WUR;
MP_DEPRECATED(mp_set_ul) mp_err mp_set_int(mp_int *a, unsigned long b);
MP_DEPRECATED(mp_set_ul) mp_err mp_set_long(mp_int *a, unsigned long b);
MP_DEPRECATED(mp_set_ull) mp_err mp_set_long_long(mp_int *a, unsigned long long b);
@@ -416,7 +407,7 @@ mp_err mp_div_2d(const mp_int *a, int b, mp_int *c, mp_int *d) MP_WUR;
mp_err mp_div_2(const mp_int *a, mp_int *b) MP_WUR;
/* a/3 => 3c + d == a */
-mp_err mp_div_3(const mp_int *a, mp_int *c, mp_digit *d) MP_WUR;
+MP_DEPRECATED(mp_div_d) mp_err mp_div_3(const mp_int *a, mp_int *c, mp_digit *d) MP_WUR;
/* c = a * 2**b, implemented as c = a << b */
mp_err mp_mul_2d(const mp_int *a, int b, mp_int *c) MP_WUR;
@@ -563,13 +554,24 @@ mp_err mp_exteuclid(const mp_int *a, const mp_int *b, mp_int *U1, mp_int *U2, mp
/* c = [a, b] or (a*b)/(a, b) */
mp_err mp_lcm(const mp_int *a, const mp_int *b, mp_int *c) MP_WUR;
+/* Integer logarithm to integer base */
+mp_err mp_log_n(const mp_int *a, int base, int *c) MP_WUR;
+MP_DEPRECATED(mp_log_n) mp_err mp_log_u32(const mp_int *a, uint32_t base, uint32_t *c) MP_WUR;
+
+/* c = a**b */
+mp_err mp_expt_n(const mp_int *a, int b, mp_int *c) MP_WUR;
+MP_DEPRECATED(mp_expt_n) mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c) MP_WUR;
+MP_DEPRECATED(mp_expt_n) mp_err mp_expt_d(const mp_int *a, mp_digit b, mp_int *c) MP_WUR;
+MP_DEPRECATED(mp_expt_n) mp_err mp_expt_d_ex(const mp_int *a, mp_digit b, mp_int *c, int fast) MP_WUR;
+
/* finds one of the b'th root of a, such that |c|**b <= |a|
*
* returns error if a < 0 and b is even
*/
-mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c) MP_WUR;
-MP_DEPRECATED(mp_root_u32) mp_err mp_n_root(const mp_int *a, mp_digit b, mp_int *c) MP_WUR;
-MP_DEPRECATED(mp_root_u32) mp_err mp_n_root_ex(const mp_int *a, mp_digit b, mp_int *c, int fast) MP_WUR;
+mp_err mp_root_n(const mp_int *a, int b, mp_int *c) MP_WUR;
+MP_DEPRECATED(mp_root_n) mp_err mp_root_u32(const mp_int *a, uint32_t b, mp_int *c) MP_WUR;
+MP_DEPRECATED(mp_root_n) mp_err mp_n_root(const mp_int *a, mp_digit b, mp_int *c) MP_WUR;
+MP_DEPRECATED(mp_root_n) mp_err mp_n_root_ex(const mp_int *a, mp_digit b, mp_int *c, int fast) MP_WUR;
/* special sqrt algo */
mp_err mp_sqrt(const mp_int *arg, mp_int *ret) MP_WUR;
@@ -729,14 +731,6 @@ MP_DEPRECATED(mp_prime_rand) mp_err mp_prime_random_ex(mp_int *a, int t, int siz
private_mp_prime_callback cb, void *dat) MP_WUR;
mp_err mp_prime_rand(mp_int *a, int t, int size, int flags) MP_WUR;
-/* Integer logarithm to integer base */
-mp_err mp_log_u32(const mp_int *a, uint32_t base, uint32_t *c) MP_WUR;
-
-/* c = a**b */
-mp_err mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c) MP_WUR;
-MP_DEPRECATED(mp_expt_u32) mp_err mp_expt_d(const mp_int *a, mp_digit b, mp_int *c) MP_WUR;
-MP_DEPRECATED(mp_expt_u32) mp_err mp_expt_d_ex(const mp_int *a, mp_digit b, mp_int *c, int fast) MP_WUR;
-
/* ---> radix conversion <--- */
int mp_count_bits(const mp_int *a) MP_WUR;
diff --git a/libtommath/tommath_class.h b/libtommath/tommath_class.h
index 52ba585..0be592b 100644
--- a/libtommath/tommath_class.h
+++ b/libtommath/tommath_class.h
@@ -33,14 +33,13 @@
# define BN_MP_DIV_C
# define BN_MP_DIV_2_C
# define BN_MP_DIV_2D_C
-# define BN_MP_DIV_3_C
# define BN_MP_DIV_D_C
# define BN_MP_DR_IS_MODULUS_C
# define BN_MP_DR_REDUCE_C
# define BN_MP_DR_SETUP_C
# define BN_MP_ERROR_TO_STRING_C
# define BN_MP_EXCH_C
-# define BN_MP_EXPT_U32_C
+# define BN_MP_EXPT_N_C
# define BN_MP_EXPTMOD_C
# define BN_MP_EXTEUCLID_C
# define BN_MP_FREAD_C
@@ -52,11 +51,9 @@
# define BN_MP_GET_I32_C
# define BN_MP_GET_I64_C
# define BN_MP_GET_L_C
-# define BN_MP_GET_LL_C
# define BN_MP_GET_MAG_U32_C
# define BN_MP_GET_MAG_U64_C
# define BN_MP_GET_MAG_UL_C
-# define BN_MP_GET_MAG_ULL_C
# define BN_MP_GROW_C
# define BN_MP_INCR_C
# define BN_MP_INIT_C
@@ -64,21 +61,19 @@
# define BN_MP_INIT_I32_C
# define BN_MP_INIT_I64_C
# define BN_MP_INIT_L_C
-# define BN_MP_INIT_LL_C
# define BN_MP_INIT_MULTI_C
# define BN_MP_INIT_SET_C
# define BN_MP_INIT_SIZE_C
# define BN_MP_INIT_U32_C
# define BN_MP_INIT_U64_C
# define BN_MP_INIT_UL_C
-# define BN_MP_INIT_ULL_C
# define BN_MP_INVMOD_C
# define BN_MP_IS_SQUARE_C
# define BN_MP_ISEVEN_C
# define BN_MP_ISODD_C
# define BN_MP_KRONECKER_C
# define BN_MP_LCM_C
-# define BN_MP_LOG_U32_C
+# define BN_MP_LOG_N_C
# define BN_MP_LSHD_C
# define BN_MP_MOD_C
# define BN_MP_MOD_2D_C
@@ -115,7 +110,7 @@
# define BN_MP_REDUCE_IS_2K_C
# define BN_MP_REDUCE_IS_2K_L_C
# define BN_MP_REDUCE_SETUP_C
-# define BN_MP_ROOT_U32_C
+# define BN_MP_ROOT_N_C
# define BN_MP_RSHD_C
# define BN_MP_SBIN_SIZE_C
# define BN_MP_SET_C
@@ -123,11 +118,9 @@
# define BN_MP_SET_I32_C
# define BN_MP_SET_I64_C
# define BN_MP_SET_L_C
-# define BN_MP_SET_LL_C
# define BN_MP_SET_U32_C
# define BN_MP_SET_U64_C
# define BN_MP_SET_UL_C
-# define BN_MP_SET_ULL_C
# define BN_MP_SHRINK_C
# define BN_MP_SIGNED_RSH_C
# define BN_MP_SQR_C
@@ -147,6 +140,7 @@
# define BN_PRIME_TAB_C
# define BN_S_MP_ADD_C
# define BN_S_MP_BALANCE_MUL_C
+# define BN_S_MP_DIV_3_C
# define BN_S_MP_EXPTMOD_C
# define BN_S_MP_EXPTMOD_FAST_C
# define BN_S_MP_GET_BIT_C
@@ -154,6 +148,9 @@
# define BN_S_MP_INVMOD_SLOW_C
# define BN_S_MP_KARATSUBA_MUL_C
# define BN_S_MP_KARATSUBA_SQR_C
+# define BN_S_MP_LOG_C
+# define BN_S_MP_LOG_2EXPT_C
+# define BN_S_MP_LOG_D_C
# define BN_S_MP_MONTGOMERY_REDUCE_FAST_C
# define BN_S_MP_MUL_DIGS_C
# define BN_S_MP_MUL_DIGS_FAST_C
@@ -182,28 +179,36 @@
# define BN_MP_AND_C
# define BN_MP_BALANCE_MUL_C
# define BN_MP_CMP_D_C
+# define BN_MP_DIV_3_C
# define BN_MP_EXPORT_C
# define BN_MP_EXPTMOD_FAST_C
# define BN_MP_EXPT_D_C
# define BN_MP_EXPT_D_EX_C
+# define BN_MP_EXPT_N_C
# define BN_MP_EXPT_U32_C
# define BN_MP_FROM_SBIN_C
# define BN_MP_FROM_UBIN_C
# define BN_MP_GET_BIT_C
# define BN_MP_GET_INT_C
+# define BN_MP_GET_LL_C
# define BN_MP_GET_LONG_C
# define BN_MP_GET_LONG_LONG_C
# define BN_MP_GET_MAG_U32_C
+# define BN_MP_GET_MAG_U64_C
# define BN_MP_GET_MAG_ULL_C
# define BN_MP_GET_MAG_UL_C
# define BN_MP_IMPORT_C
+# define BN_MP_INIT_LL_C
# define BN_MP_INIT_SET_INT_C
# define BN_MP_INIT_U32_C
+# define BN_MP_INIT_ULL_C
# define BN_MP_INVMOD_SLOW_C
# define BN_MP_JACOBI_C
# define BN_MP_KARATSUBA_MUL_C
# define BN_MP_KARATSUBA_SQR_C
# define BN_MP_KRONECKER_C
+# define BN_MP_LOG_N_C
+# define BN_MP_LOG_U32_C
# define BN_MP_N_ROOT_C
# define BN_MP_N_ROOT_EX_C
# define BN_MP_OR_C
@@ -213,13 +218,16 @@
# define BN_MP_RAND_DIGIT_C
# define BN_MP_READ_SIGNED_BIN_C
# define BN_MP_READ_UNSIGNED_BIN_C
+# define BN_MP_ROOT_N_C
# define BN_MP_ROOT_U32_C
# define BN_MP_SBIN_SIZE_C
# define BN_MP_SET_INT_C
+# define BN_MP_SET_LL_C
# define BN_MP_SET_LONG_C
# define BN_MP_SET_LONG_LONG_C
# define BN_MP_SET_U32_C
# define BN_MP_SET_U64_C
+# define BN_MP_SET_ULL_C
# define BN_MP_SIGNED_BIN_SIZE_C
# define BN_MP_SIGNED_RSH_C
# define BN_MP_TC_AND_C
@@ -242,6 +250,7 @@
# define BN_MP_UNSIGNED_BIN_SIZE_C
# define BN_MP_XOR_C
# define BN_S_MP_BALANCE_MUL_C
+# define BN_S_MP_DIV_3_C
# define BN_S_MP_EXPTMOD_FAST_C
# define BN_S_MP_GET_BIT_C
# define BN_S_MP_INVMOD_FAST_C
@@ -369,21 +378,14 @@
# define BN_MP_ZERO_C
#endif
-#if defined(BN_MP_DIV_3_C)
-# define BN_MP_CLAMP_C
-# define BN_MP_CLEAR_C
-# define BN_MP_EXCH_C
-# define BN_MP_INIT_SIZE_C
-#endif
-
#if defined(BN_MP_DIV_D_C)
# define BN_MP_CLAMP_C
# define BN_MP_CLEAR_C
# define BN_MP_COPY_C
# define BN_MP_DIV_2D_C
-# define BN_MP_DIV_3_C
# define BN_MP_EXCH_C
# define BN_MP_INIT_SIZE_C
+# define BN_S_MP_DIV_3_C
#endif
#if defined(BN_MP_DR_IS_MODULUS_C)
@@ -405,7 +407,7 @@
#if defined(BN_MP_EXCH_C)
#endif
-#if defined(BN_MP_EXPT_U32_C)
+#if defined(BN_MP_EXPT_N_C)
# define BN_MP_CLEAR_C
# define BN_MP_INIT_COPY_C
# define BN_MP_MUL_C
@@ -486,10 +488,6 @@
# define BN_MP_GET_MAG_UL_C
#endif
-#if defined(BN_MP_GET_LL_C)
-# define BN_MP_GET_MAG_ULL_C
-#endif
-
#if defined(BN_MP_GET_MAG_U32_C)
#endif
@@ -499,9 +497,6 @@
#if defined(BN_MP_GET_MAG_UL_C)
#endif
-#if defined(BN_MP_GET_MAG_ULL_C)
-#endif
-
#if defined(BN_MP_GROW_C)
#endif
@@ -535,11 +530,6 @@
# define BN_MP_SET_L_C
#endif
-#if defined(BN_MP_INIT_LL_C)
-# define BN_MP_INIT_C
-# define BN_MP_SET_LL_C
-#endif
-
#if defined(BN_MP_INIT_MULTI_C)
# define BN_MP_CLEAR_C
# define BN_MP_INIT_C
@@ -568,11 +558,6 @@
# define BN_MP_SET_UL_C
#endif
-#if defined(BN_MP_INIT_ULL_C)
-# define BN_MP_INIT_C
-# define BN_MP_SET_ULL_C
-#endif
-
#if defined(BN_MP_INVMOD_C)
# define BN_MP_CMP_D_C
# define BN_S_MP_INVMOD_FAST_C
@@ -616,18 +601,10 @@
# define BN_MP_MUL_C
#endif
-#if defined(BN_MP_LOG_U32_C)
-# define BN_MP_CLEAR_MULTI_C
-# define BN_MP_CMP_C
-# define BN_MP_CMP_D_C
-# define BN_MP_COPY_C
-# define BN_MP_COUNT_BITS_C
-# define BN_MP_EXCH_C
-# define BN_MP_EXPT_U32_C
-# define BN_MP_INIT_MULTI_C
-# define BN_MP_MUL_C
-# define BN_MP_SET_C
-# define BN_MP_SQR_C
+#if defined(BN_MP_LOG_N_C)
+# define BN_S_MP_LOG_2EXPT_C
+# define BN_S_MP_LOG_C
+# define BN_S_MP_LOG_D_C
#endif
#if defined(BN_MP_LSHD_C)
@@ -929,7 +906,7 @@
# define BN_MP_DIV_C
#endif
-#if defined(BN_MP_ROOT_U32_C)
+#if defined(BN_MP_ROOT_N_C)
# define BN_MP_2EXPT_C
# define BN_MP_ADD_D_C
# define BN_MP_CLEAR_MULTI_C
@@ -938,7 +915,7 @@
# define BN_MP_COUNT_BITS_C
# define BN_MP_DIV_C
# define BN_MP_EXCH_C
-# define BN_MP_EXPT_U32_C
+# define BN_MP_EXPT_N_C
# define BN_MP_INIT_MULTI_C
# define BN_MP_MUL_C
# define BN_MP_MUL_D_C
@@ -976,10 +953,6 @@
# define BN_MP_SET_UL_C
#endif
-#if defined(BN_MP_SET_LL_C)
-# define BN_MP_SET_ULL_C
-#endif
-
#if defined(BN_MP_SET_U32_C)
#endif
@@ -989,9 +962,6 @@
#if defined(BN_MP_SET_UL_C)
#endif
-#if defined(BN_MP_SET_ULL_C)
-#endif
-
#if defined(BN_MP_SHRINK_C)
#endif
@@ -1121,6 +1091,13 @@
# define BN_MP_MUL_C
#endif
+#if defined(BN_S_MP_DIV_3_C)
+# define BN_MP_CLAMP_C
+# define BN_MP_CLEAR_C
+# define BN_MP_EXCH_C
+# define BN_MP_INIT_SIZE_C
+#endif
+
#if defined(BN_S_MP_EXPTMOD_C)
# define BN_MP_CLEAR_C
# define BN_MP_COPY_C
@@ -1213,6 +1190,26 @@
# define BN_S_MP_SUB_C
#endif
+#if defined(BN_S_MP_LOG_C)
+# define BN_MP_CLEAR_MULTI_C
+# define BN_MP_CMP_C
+# define BN_MP_CMP_D_C
+# define BN_MP_COPY_C
+# define BN_MP_EXCH_C
+# define BN_MP_EXPT_N_C
+# define BN_MP_INIT_MULTI_C
+# define BN_MP_MUL_C
+# define BN_MP_SET_C
+# define BN_MP_SQR_C
+#endif
+
+#if defined(BN_S_MP_LOG_2EXPT_C)
+# define BN_MP_COUNT_BITS_C
+#endif
+
+#if defined(BN_S_MP_LOG_D_C)
+#endif
+
#if defined(BN_S_MP_MONTGOMERY_REDUCE_FAST_C)
# define BN_MP_CLAMP_C
# define BN_MP_CMP_MAG_C
@@ -1283,13 +1280,13 @@
# define BN_MP_CLEAR_C
# define BN_MP_CLEAR_MULTI_C
# define BN_MP_DIV_2_C
-# define BN_MP_DIV_3_C
# define BN_MP_INIT_MULTI_C
# define BN_MP_INIT_SIZE_C
# define BN_MP_LSHD_C
# define BN_MP_MUL_2_C
# define BN_MP_MUL_C
# define BN_MP_SUB_C
+# define BN_S_MP_DIV_3_C
#endif
#if defined(BN_S_MP_TOOM_SQR_C)
diff --git a/libtommath/tommath_private.h b/libtommath/tommath_private.h
index f5ee285..2d2d9a4 100644
--- a/libtommath/tommath_private.h
+++ b/libtommath/tommath_private.h
@@ -5,7 +5,11 @@
#define TOMMATH_PRIV_H_
#include <stdint.h>
-#include "tclTomMath.h"
+#ifndef TCL_WITH_EXTERNAL_TOMMATH
+# include "tclTomMath.h"
+#else
+# include "tommath.h"
+#endif
#include "tommath_class.h"
/*
@@ -159,6 +163,8 @@ typedef private_mp_word mp_word;
#define MP_MIN(x, y) (((x) < (y)) ? (x) : (y))
#define MP_MAX(x, y) (((x) > (y)) ? (x) : (y))
+#define MP_IS_2EXPT(x) (((x) != 0u) && (((x) & ((x) - 1u)) == 0u))
+
/* Static assertion */
#define MP_STATIC_ASSERT(msg, cond) typedef char mp_static_assert_##msg[(cond) ? 1 : -1];
@@ -190,8 +196,11 @@ extern MP_PRIVATE mp_err(*s_mp_rand_source)(void *out, size_t size);
/* lowlevel functions, do not call! */
MP_PRIVATE mp_bool s_mp_get_bit(const mp_int *a, unsigned int b);
+MP_PRIVATE int s_mp_log_2expt(const mp_int *a, mp_digit base) MP_WUR;
+MP_PRIVATE int s_mp_log_d(mp_digit base, mp_digit n) MP_WUR;
MP_PRIVATE mp_err s_mp_add(const mp_int *a, const mp_int *b, mp_int *c) MP_WUR;
MP_PRIVATE mp_err s_mp_sub(const mp_int *a, const mp_int *b, mp_int *c) MP_WUR;
+MP_PRIVATE mp_err s_mp_div_3(const mp_int *a, mp_int *c, mp_digit *d) MP_WUR;
MP_PRIVATE mp_err s_mp_mul_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int digs) MP_WUR;
MP_PRIVATE mp_err s_mp_mul_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs) MP_WUR;
MP_PRIVATE mp_err s_mp_mul_high_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int digs) MP_WUR;
@@ -208,6 +217,7 @@ MP_PRIVATE mp_err s_mp_invmod_slow(const mp_int *a, const mp_int *b, mp_int *c)
MP_PRIVATE mp_err s_mp_montgomery_reduce_fast(mp_int *x, const mp_int *n, mp_digit rho) MP_WUR;
MP_PRIVATE mp_err s_mp_exptmod_fast(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y, int redmode) MP_WUR;
MP_PRIVATE mp_err s_mp_exptmod(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y, int redmode) MP_WUR;
+MP_PRIVATE mp_err s_mp_log(const mp_int *a, mp_digit base, int *c) MP_WUR;
MP_PRIVATE mp_err s_mp_rand_platform(void *p, size_t n) MP_WUR;
MP_PRIVATE mp_err s_mp_prime_random_ex(mp_int *a, int t, int size, int flags, private_mp_prime_callback cb, void *dat);
MP_PRIVATE void s_mp_reverse(unsigned char *s, size_t len);
diff --git a/libtommath/win64-arm/libtommath.dll b/libtommath/win64-arm/libtommath.dll
index e795d6d..9cec45b 100755
--- a/libtommath/win64-arm/libtommath.dll
+++ b/libtommath/win64-arm/libtommath.dll
Binary files differ
diff --git a/libtommath/win64/libtommath.dll b/libtommath/win64/libtommath.dll
index 3667593..856af88 100755
--- a/libtommath/win64/libtommath.dll
+++ b/libtommath/win64/libtommath.dll
Binary files differ
diff --git a/macosx/Tcl.xcodeproj/project.pbxproj b/macosx/Tcl.xcodeproj/project.pbxproj
index 8d27c1c..09b3b14 100644
--- a/macosx/Tcl.xcodeproj/project.pbxproj
+++ b/macosx/Tcl.xcodeproj/project.pbxproj
@@ -110,7 +110,7 @@
F96D48F408F272C3004A47F5 /* bn_mp_div.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427608F272B3004A47F5 /* bn_mp_div.c */; };
F96D48F508F272C3004A47F5 /* bn_mp_div_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427708F272B3004A47F5 /* bn_mp_div_2.c */; };
F96D48F608F272C3004A47F5 /* bn_mp_div_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */; };
- F96D48F708F272C3004A47F5 /* bn_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427908F272B3004A47F5 /* bn_mp_div_3.c */; };
+ F96D48F708F272C3004A47F5 /* bn_s_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427908F272B3004A47F5 /* bn_s_mp_div_3.c */; };
F96D48F808F272C3004A47F5 /* bn_mp_div_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */; };
F96D48FC08F272C3004A47F5 /* bn_mp_exch.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427E08F272B3004A47F5 /* bn_mp_exch.c */; };
F96D490508F272C3004A47F5 /* bn_mp_grow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428708F272B3004A47F5 /* bn_mp_grow.c */; };
@@ -163,7 +163,7 @@
F9E61D29090A486C002B3151 /* bn_mp_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A208F272B3004A47F5 /* bn_mp_neg.c */; };
F9E61D2A090A4891002B3151 /* bn_mp_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */; };
F9E61D2B090A48A4002B3151 /* bn_mp_and.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426C08F272B3004A47F5 /* bn_mp_and.c */; };
- F9E61D2C090A48AC002B3151 /* bn_mp_expt_u32.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427F08F272B3004A47F5 /* bn_mp_expt_u32.c */; };
+ F9E61D2C090A48AC002B3151 /* bn_mp_expt_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427F08F272B3004A47F5 /* bn_mp_expt_n.c */; };
F9E61D2D090A48BB002B3151 /* bn_mp_xor.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */; };
F9E61D2E090A48BF002B3151 /* bn_mp_or.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A308F272B3004A47F5 /* bn_mp_or.c */; };
F9E61D2F090A48C7002B3151 /* bn_mp_shrink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */; };
@@ -569,10 +569,10 @@
F96D427608F272B3004A47F5 /* bn_mp_div.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div.c; sourceTree = "<group>"; };
F96D427708F272B3004A47F5 /* bn_mp_div_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2.c; sourceTree = "<group>"; };
F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2d.c; sourceTree = "<group>"; };
- F96D427908F272B3004A47F5 /* bn_mp_div_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_3.c; sourceTree = "<group>"; };
+ F96D427908F272B3004A47F5 /* bn_s_mp_div_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_div_3.c; sourceTree = "<group>"; };
F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_d.c; sourceTree = "<group>"; };
F96D427E08F272B3004A47F5 /* bn_mp_exch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exch.c; sourceTree = "<group>"; };
- F96D427F08F272B3004A47F5 /* bn_mp_expt_u32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_expt_u32.c; sourceTree = "<group>"; };
+ F96D427F08F272B3004A47F5 /* bn_mp_expt_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_expt_n.c; sourceTree = "<group>"; };
F96D427F08F272B3004A47F5 /* bn_mp_expt_d_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_expt_d_ex.c; sourceTree = "<group>"; };
F96D428708F272B3004A47F5 /* bn_mp_grow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_grow.c; sourceTree = "<group>"; };
F96D428808F272B3004A47F5 /* bn_mp_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init.c; sourceTree = "<group>"; };
@@ -1406,10 +1406,10 @@
F96D427608F272B3004A47F5 /* bn_mp_div.c */,
F96D427708F272B3004A47F5 /* bn_mp_div_2.c */,
F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */,
- F96D427908F272B3004A47F5 /* bn_mp_div_3.c */,
+ F96D427908F272B3004A47F5 /* bn_s_mp_div_3.c */,
F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */,
F96D427E08F272B3004A47F5 /* bn_mp_exch.c */,
- F96D427F08F272B3004A47F5 /* bn_mp_expt_u32.c */,
+ F96D427F08F272B3004A47F5 /* bn_mp_expt_n.c */,
F96D427F08F272B3004A47F5 /* bn_mp_expt_d_ex.c */,
F96D428708F272B3004A47F5 /* bn_mp_grow.c */,
F96D428808F272B3004A47F5 /* bn_mp_init.c */,
@@ -2023,10 +2023,10 @@
F96D48F408F272C3004A47F5 /* bn_mp_div.c in Sources */,
F96D48F508F272C3004A47F5 /* bn_mp_div_2.c in Sources */,
F96D48F608F272C3004A47F5 /* bn_mp_div_2d.c in Sources */,
- F96D48F708F272C3004A47F5 /* bn_mp_div_3.c in Sources */,
+ F96D48F708F272C3004A47F5 /* bn_s_mp_div_3.c in Sources */,
F96D48F808F272C3004A47F5 /* bn_mp_div_d.c in Sources */,
F96D48FC08F272C3004A47F5 /* bn_mp_exch.c in Sources */,
- F9E61D2C090A48AC002B3151 /* bn_mp_expt_u32.c in Sources */,
+ F9E61D2C090A48AC002B3151 /* bn_mp_expt_n.c in Sources */,
F9E61D2C090A48AC002B3151 /* bn_mp_expt_d_ex.c in Sources */,
F96D490508F272C3004A47F5 /* bn_mp_grow.c in Sources */,
F96D490608F272C3004A47F5 /* bn_mp_init.c in Sources */,
diff --git a/unix/Makefile.in b/unix/Makefile.in
index eed8d91..3d8267f 100644
--- a/unix/Makefile.in
+++ b/unix/Makefile.in
@@ -328,7 +328,7 @@ TOMMATH_OBJS = bn_s_mp_reverse.o bn_s_mp_mul_digs_fast.o \
bn_mp_cmp.o bn_mp_cmp_d.o bn_mp_cmp_mag.o \
bn_mp_cnt_lsb.o bn_mp_copy.o \
bn_mp_count_bits.o bn_mp_div.o bn_mp_div_d.o bn_mp_div_2.o \
- bn_mp_div_2d.o bn_mp_div_3.o bn_mp_exch.o bn_mp_expt_u32.o \
+ bn_mp_div_2d.o bn_s_mp_div_3.o bn_mp_exch.o bn_mp_expt_n.o \
bn_mp_get_mag_u64.o \
bn_mp_grow.o bn_mp_init.o \
bn_mp_init_copy.o bn_mp_init_multi.o bn_mp_init_set.o \
@@ -522,14 +522,14 @@ TOMMATH_SRCS = \
$(TOMMATH_DIR)/bn_mp_div.c \
$(TOMMATH_DIR)/bn_mp_div_2.c \
$(TOMMATH_DIR)/bn_mp_div_2d.c \
- $(TOMMATH_DIR)/bn_mp_div_3.c \
+ $(TOMMATH_DIR)/bn_s_mp_div_3.c \
$(TOMMATH_DIR)/bn_mp_div_d.c \
$(TOMMATH_DIR)/bn_mp_dr_is_modulus.c \
$(TOMMATH_DIR)/bn_mp_dr_reduce.c \
$(TOMMATH_DIR)/bn_mp_dr_setup.c \
$(TOMMATH_DIR)/bn_mp_error_to_string.c \
$(TOMMATH_DIR)/bn_mp_exch.c \
- $(TOMMATH_DIR)/bn_mp_expt_u32.c \
+ $(TOMMATH_DIR)/bn_mp_expt_n.c \
$(TOMMATH_DIR)/bn_mp_exptmod.c \
$(TOMMATH_DIR)/bn_mp_exteuclid.c \
$(TOMMATH_DIR)/bn_mp_fread.c \
@@ -541,11 +541,9 @@ TOMMATH_SRCS = \
$(TOMMATH_DIR)/bn_mp_get_i32.c \
$(TOMMATH_DIR)/bn_mp_get_i64.c \
$(TOMMATH_DIR)/bn_mp_get_l.c \
- $(TOMMATH_DIR)/bn_mp_get_ll.c \
$(TOMMATH_DIR)/bn_mp_get_mag_u32.c \
$(TOMMATH_DIR)/bn_mp_get_mag_u64.c \
$(TOMMATH_DIR)/bn_mp_get_mag_ul.c \
- $(TOMMATH_DIR)/bn_mp_get_mag_ull.c \
$(TOMMATH_DIR)/bn_mp_grow.c \
$(TOMMATH_DIR)/bn_mp_incr.c \
$(TOMMATH_DIR)/bn_mp_init.c \
@@ -553,21 +551,22 @@ TOMMATH_SRCS = \
$(TOMMATH_DIR)/bn_mp_init_i32.c \
$(TOMMATH_DIR)/bn_mp_init_i64.c \
$(TOMMATH_DIR)/bn_mp_init_l.c \
- $(TOMMATH_DIR)/bn_mp_init_ll.c \
$(TOMMATH_DIR)/bn_mp_init_multi.c \
$(TOMMATH_DIR)/bn_mp_init_set.c \
$(TOMMATH_DIR)/bn_mp_init_size.c \
$(TOMMATH_DIR)/bn_mp_init_u32.c \
$(TOMMATH_DIR)/bn_mp_init_u64.c \
$(TOMMATH_DIR)/bn_mp_init_ul.c \
- $(TOMMATH_DIR)/bn_mp_init_ull.c \
$(TOMMATH_DIR)/bn_mp_invmod.c \
$(TOMMATH_DIR)/bn_mp_is_square.c \
$(TOMMATH_DIR)/bn_mp_iseven.c \
$(TOMMATH_DIR)/bn_mp_isodd.c \
$(TOMMATH_DIR)/bn_mp_kronecker.c \
$(TOMMATH_DIR)/bn_mp_lcm.c \
- $(TOMMATH_DIR)/bn_mp_log_u32.c \
+ $(TOMMATH_DIR)/bn_mp_log_n.c \
+ $(TOMMATH_DIR)/bn_s_mp_log.c \
+ $(TOMMATH_DIR)/bn_s_mp_log_2expt.c \
+ $(TOMMATH_DIR)/bn_s_mp_log_d.c \
$(TOMMATH_DIR)/bn_mp_lshd.c \
$(TOMMATH_DIR)/bn_mp_mod.c \
$(TOMMATH_DIR)/bn_mp_mod_2d.c \
@@ -604,7 +603,7 @@ TOMMATH_SRCS = \
$(TOMMATH_DIR)/bn_mp_reduce_is_2k.c \
$(TOMMATH_DIR)/bn_mp_reduce_is_2k_l.c \
$(TOMMATH_DIR)/bn_mp_reduce_setup.c \
- $(TOMMATH_DIR)/bn_mp_root_u32.c \
+ $(TOMMATH_DIR)/bn_mp_root_n.c \
$(TOMMATH_DIR)/bn_mp_rshd.c \
$(TOMMATH_DIR)/bn_mp_sbin_size.c \
$(TOMMATH_DIR)/bn_mp_set.c \
@@ -612,11 +611,9 @@ TOMMATH_SRCS = \
$(TOMMATH_DIR)/bn_mp_set_i32.c \
$(TOMMATH_DIR)/bn_mp_set_i64.c \
$(TOMMATH_DIR)/bn_mp_set_l.c \
- $(TOMMATH_DIR)/bn_mp_set_ll.c \
$(TOMMATH_DIR)/bn_mp_set_u32.c \
$(TOMMATH_DIR)/bn_mp_set_u64.c \
$(TOMMATH_DIR)/bn_mp_set_ul.c \
- $(TOMMATH_DIR)/bn_mp_set_ull.c \
$(TOMMATH_DIR)/bn_mp_shrink.c \
$(TOMMATH_DIR)/bn_mp_signed_rsh.c \
$(TOMMATH_DIR)/bn_mp_sqr.c \
@@ -1656,14 +1653,14 @@ bn_mp_div_2.o: $(TOMMATH_DIR)/bn_mp_div_2.c $(MATHHDRS)
bn_mp_div_2d.o: $(TOMMATH_DIR)/bn_mp_div_2d.c $(MATHHDRS)
$(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_div_2d.c
-bn_mp_div_3.o: $(TOMMATH_DIR)/bn_mp_div_3.c $(MATHHDRS)
- $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_div_3.c
+bn_s_mp_div_3.o: $(TOMMATH_DIR)/bn_s_mp_div_3.c $(MATHHDRS)
+ $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_s_mp_div_3.c
bn_mp_exch.o: $(TOMMATH_DIR)/bn_mp_exch.c $(MATHHDRS)
$(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_exch.c
-bn_mp_expt_u32.o: $(TOMMATH_DIR)/bn_mp_expt_u32.c $(MATHHDRS)
- $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_expt_u32.c
+bn_mp_expt_n.o: $(TOMMATH_DIR)/bn_mp_expt_n.c $(MATHHDRS)
+ $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_expt_n.c
bn_mp_get_mag_u64.o: $(TOMMATH_DIR)/bn_mp_get_mag_u64.c $(MATHHDRS)
$(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_get_mag_u64.c
diff --git a/win/Makefile.in b/win/Makefile.in
index 625d9e7..fa88264 100644
--- a/win/Makefile.in
+++ b/win/Makefile.in
@@ -387,9 +387,9 @@ TOMMATH_OBJS = \
bn_mp_div_d.${OBJEXT} \
bn_mp_div_2.${OBJEXT} \
bn_mp_div_2d.${OBJEXT} \
- bn_mp_div_3.${OBJEXT} \
+ bn_s_mp_div_3.${OBJEXT} \
bn_mp_exch.${OBJEXT} \
- bn_mp_expt_u32.${OBJEXT} \
+ bn_mp_expt_n.${OBJEXT} \
bn_mp_get_mag_u64.${OBJEXT} \
bn_mp_grow.${OBJEXT} \
bn_mp_init.${OBJEXT} \
diff --git a/win/makefile.vc b/win/makefile.vc
index ed7157f..aa122c3 100644
--- a/win/makefile.vc
+++ b/win/makefile.vc
@@ -367,9 +367,9 @@ TOMMATHOBJS = \
$(TMP_DIR)\bn_mp_div_d.obj \
$(TMP_DIR)\bn_mp_div_2.obj \
$(TMP_DIR)\bn_mp_div_2d.obj \
- $(TMP_DIR)\bn_mp_div_3.obj \
+ $(TMP_DIR)\bn_s_mp_div_3.obj \
$(TMP_DIR)\bn_mp_exch.obj \
- $(TMP_DIR)\bn_mp_expt_u32.obj \
+ $(TMP_DIR)\bn_mp_expt_n.obj \
$(TMP_DIR)\bn_mp_get_mag_u64.obj \
$(TMP_DIR)\bn_mp_grow.obj \
$(TMP_DIR)\bn_mp_init.obj \