-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add ability to use a statically generated ecmult context. #254
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
# =========================================================================== | ||
# http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html | ||
# =========================================================================== | ||
# | ||
# SYNOPSIS | ||
# | ||
# AX_PROG_CC_FOR_BUILD | ||
# | ||
# DESCRIPTION | ||
# | ||
# This macro searches for a C compiler that generates native executables, | ||
# that is a C compiler that surely is not a cross-compiler. This can be | ||
# useful if you have to generate source code at compile-time like for | ||
# example GCC does. | ||
# | ||
# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything | ||
# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD). | ||
# The value of these variables can be overridden by the user by specifying | ||
# a compiler with an environment variable (like you do for standard CC). | ||
# | ||
# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object | ||
# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if | ||
# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are | ||
# substituted in the Makefile. | ||
# | ||
# LICENSE | ||
# | ||
# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org> | ||
# | ||
# Copying and distribution of this file, with or without modification, are | ||
# permitted in any medium without royalty provided the copyright notice | ||
# and this notice are preserved. This file is offered as-is, without any | ||
# warranty. | ||
|
||
#serial 8 | ||
|
||
AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD]) | ||
AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl | ||
AC_REQUIRE([AC_PROG_CC])dnl | ||
AC_REQUIRE([AC_PROG_CPP])dnl | ||
AC_REQUIRE([AC_EXEEXT])dnl | ||
AC_REQUIRE([AC_CANONICAL_HOST])dnl | ||
|
||
dnl Use the standard macros, but make them use other variable names | ||
dnl | ||
pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl | ||
pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl | ||
pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl | ||
pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl | ||
pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl | ||
pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl | ||
pushdef([ac_cv_objext], ac_cv_build_objext)dnl | ||
pushdef([ac_exeext], ac_build_exeext)dnl | ||
pushdef([ac_objext], ac_build_objext)dnl | ||
pushdef([CC], CC_FOR_BUILD)dnl | ||
pushdef([CPP], CPP_FOR_BUILD)dnl | ||
pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl | ||
pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl | ||
pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl | ||
pushdef([host], build)dnl | ||
pushdef([host_alias], build_alias)dnl | ||
pushdef([host_cpu], build_cpu)dnl | ||
pushdef([host_vendor], build_vendor)dnl | ||
pushdef([host_os], build_os)dnl | ||
pushdef([ac_cv_host], ac_cv_build)dnl | ||
pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl | ||
pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl | ||
pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl | ||
pushdef([ac_cv_host_os], ac_cv_build_os)dnl | ||
pushdef([ac_cpp], ac_build_cpp)dnl | ||
pushdef([ac_compile], ac_build_compile)dnl | ||
pushdef([ac_link], ac_build_link)dnl | ||
|
||
save_cross_compiling=$cross_compiling | ||
save_ac_tool_prefix=$ac_tool_prefix | ||
cross_compiling=no | ||
ac_tool_prefix= | ||
|
||
AC_PROG_CC | ||
AC_PROG_CPP | ||
AC_EXEEXT | ||
|
||
ac_tool_prefix=$save_ac_tool_prefix | ||
cross_compiling=$save_cross_compiling | ||
|
||
dnl Restore the old definitions | ||
dnl | ||
popdef([ac_link])dnl | ||
popdef([ac_compile])dnl | ||
popdef([ac_cpp])dnl | ||
popdef([ac_cv_host_os])dnl | ||
popdef([ac_cv_host_vendor])dnl | ||
popdef([ac_cv_host_cpu])dnl | ||
popdef([ac_cv_host_alias])dnl | ||
popdef([ac_cv_host])dnl | ||
popdef([host_os])dnl | ||
popdef([host_vendor])dnl | ||
popdef([host_cpu])dnl | ||
popdef([host_alias])dnl | ||
popdef([host])dnl | ||
popdef([LDFLAGS])dnl | ||
popdef([CPPFLAGS])dnl | ||
popdef([CFLAGS])dnl | ||
popdef([CPP])dnl | ||
popdef([CC])dnl | ||
popdef([ac_objext])dnl | ||
popdef([ac_exeext])dnl | ||
popdef([ac_cv_objext])dnl | ||
popdef([ac_cv_exeext])dnl | ||
popdef([ac_cv_prog_cc_g])dnl | ||
popdef([ac_cv_prog_cc_cross])dnl | ||
popdef([ac_cv_prog_cc_works])dnl | ||
popdef([ac_cv_prog_gcc])dnl | ||
popdef([ac_cv_prog_CPP])dnl | ||
|
||
dnl Finally, set Makefile variables | ||
dnl | ||
BUILD_EXEEXT=$ac_build_exeext | ||
BUILD_OBJEXT=$ac_build_objext | ||
AC_SUBST(BUILD_EXEEXT)dnl | ||
AC_SUBST(BUILD_OBJEXT)dnl | ||
AC_SUBST([CFLAGS_FOR_BUILD])dnl | ||
AC_SUBST([CPPFLAGS_FOR_BUILD])dnl | ||
AC_SUBST([LDFLAGS_FOR_BUILD])dnl | ||
]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/********************************************************************** | ||
* Copyright (c) 2013, 2014 Pieter Wuille * | ||
* Distributed under the MIT software license, see the accompanying * | ||
* file COPYING or http://www.opensource.org/licenses/mit-license.php.* | ||
**********************************************************************/ | ||
|
||
#ifndef _SECP256K1_BASIC_CONFIG_ | ||
#define _SECP256K1_BASIC_CONFIG_ | ||
|
||
#ifdef USE_BASIC_CONFIG | ||
|
||
#undef USE_ASM_X86_64 | ||
#undef USE_ENDOMORPHISM | ||
#undef USE_FIELD_10X26 | ||
#undef USE_FIELD_5X52 | ||
#undef USE_FIELD_INV_BUILTIN | ||
#undef USE_FIELD_INV_NUM | ||
#undef USE_NUM_GMP | ||
#undef USE_NUM_NONE | ||
#undef USE_SCALAR_4X64 | ||
#undef USE_SCALAR_8X32 | ||
#undef USE_SCALAR_INV_BUILTIN | ||
#undef USE_SCALAR_INV_NUM | ||
|
||
#define USE_NUM_NONE 1 | ||
#define USE_FIELD_INV_BUILTIN 1 | ||
#define USE_SCALAR_INV_BUILTIN 1 | ||
#define USE_FIELD_10X26 1 | ||
#define USE_SCALAR_8X32 1 | ||
|
||
#endif // USE_BASIC_CONFIG | ||
#endif // _SECP256K1_BASIC_CONFIG_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
/********************************************************************** | ||
* Copyright (c) 2013, 2014, 2015 Thomas Daede, Cory Fields * | ||
* Distributed under the MIT software license, see the accompanying * | ||
* file COPYING or http://www.opensource.org/licenses/mit-license.php.* | ||
**********************************************************************/ | ||
|
||
#define USE_BASIC_CONFIG 1 | ||
|
||
#include "basic-config.h" | ||
#include "include/secp256k1.h" | ||
#include "field_impl.h" | ||
#include "scalar_impl.h" | ||
#include "group_impl.h" | ||
#include "ecmult_gen_impl.h" | ||
|
||
int main(int argc, char **argv) { | ||
secp256k1_ecmult_gen_context_t ctx; | ||
int inner; | ||
int outer; | ||
FILE* fp; | ||
|
||
(void)argc; | ||
(void)argv; | ||
|
||
fp = fopen("src/ecmult_static_context.h","w"); | ||
if (fp == NULL) { | ||
fprintf(stderr, "Could not open src/ecmult_static_context.h for writing!\n"); | ||
return -1; | ||
} | ||
|
||
fprintf(fp, "#ifndef _SECP256K1_ECMULT_STATIC_CONTEXT_\n"); | ||
fprintf(fp, "#define _SECP256K1_ECMULT_STATIC_CONTEXT_\n"); | ||
fprintf(fp, "#include \"group.h\"\n"); | ||
fprintf(fp, "#define SC SECP256K1_GE_STORAGE_CONST\n"); | ||
fprintf(fp, "static const secp256k1_ge_storage_t secp256k1_ecmult_static_context[64][16] = {\n"); | ||
|
||
secp256k1_ecmult_gen_context_init(&ctx); | ||
secp256k1_ecmult_gen_context_build(&ctx); | ||
for(outer = 0; outer != 64; outer++) { | ||
fprintf(fp,"{\n"); | ||
for(inner = 0; inner != 16; inner++) { | ||
fprintf(fp," SC(%uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu)", SECP256K1_GE_STORAGE_CONST_GET((*ctx.prec)[outer][inner])); | ||
if (inner != 15) { | ||
fprintf(fp,",\n"); | ||
} else { | ||
fprintf(fp,"\n"); | ||
} | ||
} | ||
if (outer != 63) { | ||
fprintf(fp,"},\n"); | ||
} else { | ||
fprintf(fp,"}\n"); | ||
} | ||
} | ||
fprintf(fp,"};\n"); | ||
secp256k1_ecmult_gen_context_clear(&ctx); | ||
|
||
fprintf(fp, "#undef SC\n"); | ||
fprintf(fp, "#endif\n"); | ||
fclose(fp); | ||
|
||
return 0; | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this cast necessary?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is necessary to prevent a warning. I suppose I could change the type of ctx->prec instead at compile time to be const.