-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
41b959b
commit e61ed65
Showing
81 changed files
with
20,867 additions
and
0 deletions.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
ACLOCAL_AMFLAGS = -I build-aux/m4 | ||
|
||
lib_LTLIBRARIES = libsecp256k1.la | ||
if USE_JNI | ||
JNI_LIB = libsecp256k1_jni.la | ||
noinst_LTLIBRARIES = $(JNI_LIB) | ||
else | ||
JNI_LIB = | ||
endif | ||
include_HEADERS = include/secp256k1.h | ||
noinst_HEADERS = | ||
noinst_HEADERS += src/scalar.h | ||
noinst_HEADERS += src/scalar_4x64.h | ||
noinst_HEADERS += src/scalar_8x32.h | ||
noinst_HEADERS += src/scalar_low.h | ||
noinst_HEADERS += src/scalar_impl.h | ||
noinst_HEADERS += src/scalar_4x64_impl.h | ||
noinst_HEADERS += src/scalar_8x32_impl.h | ||
noinst_HEADERS += src/scalar_low_impl.h | ||
noinst_HEADERS += src/group.h | ||
noinst_HEADERS += src/group_impl.h | ||
noinst_HEADERS += src/num_gmp.h | ||
noinst_HEADERS += src/num_gmp_impl.h | ||
noinst_HEADERS += src/ecdsa.h | ||
noinst_HEADERS += src/ecdsa_impl.h | ||
noinst_HEADERS += src/eckey.h | ||
noinst_HEADERS += src/eckey_impl.h | ||
noinst_HEADERS += src/ecmult.h | ||
noinst_HEADERS += src/ecmult_impl.h | ||
noinst_HEADERS += src/ecmult_const.h | ||
noinst_HEADERS += src/ecmult_const_impl.h | ||
noinst_HEADERS += src/ecmult_gen.h | ||
noinst_HEADERS += src/ecmult_gen_impl.h | ||
noinst_HEADERS += src/num.h | ||
noinst_HEADERS += src/num_impl.h | ||
noinst_HEADERS += src/field_10x26.h | ||
noinst_HEADERS += src/field_10x26_impl.h | ||
noinst_HEADERS += src/field_5x52.h | ||
noinst_HEADERS += src/field_5x52_impl.h | ||
noinst_HEADERS += src/field_5x52_int128_impl.h | ||
noinst_HEADERS += src/field_5x52_asm_impl.h | ||
noinst_HEADERS += src/java/org_bitcoin_NativeSecp256k1.h | ||
noinst_HEADERS += src/java/org_bitcoin_Secp256k1Context.h | ||
noinst_HEADERS += src/util.h | ||
noinst_HEADERS += src/testrand.h | ||
noinst_HEADERS += src/testrand_impl.h | ||
noinst_HEADERS += src/hash.h | ||
noinst_HEADERS += src/hash_impl.h | ||
noinst_HEADERS += src/field.h | ||
noinst_HEADERS += src/field_impl.h | ||
noinst_HEADERS += src/bench.h | ||
noinst_HEADERS += contrib/lax_der_parsing.h | ||
noinst_HEADERS += contrib/lax_der_parsing.c | ||
noinst_HEADERS += contrib/lax_der_privatekey_parsing.h | ||
noinst_HEADERS += contrib/lax_der_privatekey_parsing.c | ||
|
||
if USE_EXTERNAL_ASM | ||
COMMON_LIB = libsecp256k1_common.la | ||
noinst_LTLIBRARIES = $(COMMON_LIB) | ||
else | ||
COMMON_LIB = | ||
endif | ||
|
||
pkgconfigdir = $(libdir)/pkgconfig | ||
pkgconfig_DATA = libsecp256k1.pc | ||
|
||
if USE_EXTERNAL_ASM | ||
if USE_ASM_ARM | ||
libsecp256k1_common_la_SOURCES = src/asm/field_10x26_arm.s | ||
endif | ||
endif | ||
|
||
libsecp256k1_la_SOURCES = src/secp256k1.c | ||
libsecp256k1_la_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/include -I$(top_srcdir)/src $(SECP_INCLUDES) | ||
libsecp256k1_la_LIBADD = $(JNI_LIB) $(SECP_LIBS) $(COMMON_LIB) | ||
|
||
libsecp256k1_jni_la_SOURCES = src/java/org_bitcoin_NativeSecp256k1.c src/java/org_bitcoin_Secp256k1Context.c | ||
libsecp256k1_jni_la_CPPFLAGS = -DSECP256K1_BUILD $(JNI_INCLUDES) | ||
|
||
noinst_PROGRAMS = | ||
if USE_BENCHMARK | ||
noinst_PROGRAMS += bench_verify bench_sign bench_internal | ||
bench_verify_SOURCES = src/bench_verify.c | ||
bench_verify_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB) | ||
bench_sign_SOURCES = src/bench_sign.c | ||
bench_sign_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB) | ||
bench_internal_SOURCES = src/bench_internal.c | ||
bench_internal_LDADD = $(SECP_LIBS) $(COMMON_LIB) | ||
bench_internal_CPPFLAGS = -DSECP256K1_BUILD $(SECP_INCLUDES) | ||
endif | ||
|
||
TESTS = | ||
if USE_TESTS | ||
noinst_PROGRAMS += tests | ||
tests_SOURCES = src/tests.c | ||
tests_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/src -I$(top_srcdir)/include $(SECP_INCLUDES) $(SECP_TEST_INCLUDES) | ||
if !ENABLE_COVERAGE | ||
tests_CPPFLAGS += -DVERIFY | ||
endif | ||
tests_LDADD = $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB) | ||
tests_LDFLAGS = -static | ||
TESTS += tests | ||
endif | ||
|
||
if USE_EXHAUSTIVE_TESTS | ||
noinst_PROGRAMS += exhaustive_tests | ||
exhaustive_tests_SOURCES = src/tests_exhaustive.c | ||
exhaustive_tests_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/src $(SECP_INCLUDES) | ||
if !ENABLE_COVERAGE | ||
exhaustive_tests_CPPFLAGS += -DVERIFY | ||
endif | ||
exhaustive_tests_LDADD = $(SECP_LIBS) | ||
exhaustive_tests_LDFLAGS = -static | ||
TESTS += exhaustive_tests | ||
endif | ||
|
||
JAVAROOT=src/java | ||
JAVAORG=org/bitcoin | ||
JAVA_GUAVA=$(srcdir)/$(JAVAROOT)/guava/guava-18.0.jar | ||
CLASSPATH_ENV=CLASSPATH=$(JAVA_GUAVA) | ||
JAVA_FILES= \ | ||
$(JAVAROOT)/$(JAVAORG)/NativeSecp256k1.java \ | ||
$(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Test.java \ | ||
$(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Util.java \ | ||
$(JAVAROOT)/$(JAVAORG)/Secp256k1Context.java | ||
|
||
if USE_JNI | ||
|
||
$(JAVA_GUAVA): | ||
@echo Guava is missing. Fetch it via: \ | ||
wget https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar -O $(@) | ||
@false | ||
|
||
.stamp-java: $(JAVA_FILES) | ||
@echo Compiling $^ | ||
$(AM_V_at)$(CLASSPATH_ENV) javac $^ | ||
@touch $@ | ||
|
||
if USE_TESTS | ||
|
||
check-java: libsecp256k1.la $(JAVA_GUAVA) .stamp-java | ||
$(AM_V_at)java -Djava.library.path="./:./src:./src/.libs:.libs/" -cp "$(JAVA_GUAVA):$(JAVAROOT)" $(JAVAORG)/NativeSecp256k1Test | ||
|
||
endif | ||
endif | ||
|
||
if USE_ECMULT_STATIC_PRECOMPUTATION | ||
CPPFLAGS_FOR_BUILD +=-I$(top_srcdir) | ||
CFLAGS_FOR_BUILD += -Wall -Wextra -Wno-unused-function | ||
|
||
gen_context_OBJECTS = gen_context.o | ||
gen_context_BIN = gen_context$(BUILD_EXEEXT) | ||
gen_%.o: src/gen_%.c | ||
$(CC_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -c $< -o $@ | ||
|
||
$(gen_context_BIN): $(gen_context_OBJECTS) | ||
$(CC_FOR_BUILD) $^ -o $@ | ||
|
||
$(libsecp256k1_la_OBJECTS): src/ecmult_static_context.h | ||
$(tests_OBJECTS): src/ecmult_static_context.h | ||
$(bench_internal_OBJECTS): src/ecmult_static_context.h | ||
|
||
src/ecmult_static_context.h: $(gen_context_BIN) | ||
./$(gen_context_BIN) | ||
|
||
CLEANFILES = $(gen_context_BIN) src/ecmult_static_context.h $(JAVAROOT)/$(JAVAORG)/*.class .stamp-java | ||
endif | ||
|
||
EXTRA_DIST = autogen.sh src/gen_context.c src/basic-config.h $(JAVA_FILES) | ||
|
||
if ENABLE_MODULE_ECDH | ||
include src/modules/ecdh/Makefile.am.include | ||
endif | ||
|
||
if ENABLE_MODULE_RECOVERY | ||
include src/modules/recovery/Makefile.am.include | ||
endif |
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,8 @@ | ||
include_HEADERS += include/secp256k1_recovery.h | ||
noinst_HEADERS += src/modules/recovery/main_impl.h | ||
noinst_HEADERS += src/modules/recovery/tests_impl.h | ||
if USE_BENCHMARK | ||
noinst_PROGRAMS += bench_recover | ||
bench_recover_SOURCES = src/bench_recover.c | ||
bench_recover_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB) | ||
endif |
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,3 @@ | ||
#!/bin/sh | ||
set -e | ||
autoreconf -if --warnings=all |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
/********************************************************************** | ||
* Copyright (c) 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_BENCH_H_ | ||
#define _SECP256K1_BENCH_H_ | ||
|
||
#include <stdio.h> | ||
#include <math.h> | ||
#include "sys/time.h" | ||
|
||
static double gettimedouble(void) { | ||
struct timeval tv; | ||
gettimeofday(&tv, NULL); | ||
return tv.tv_usec * 0.000001 + tv.tv_sec; | ||
} | ||
|
||
void print_number(double x) { | ||
double y = x; | ||
int c = 0; | ||
if (y < 0.0) { | ||
y = -y; | ||
} | ||
while (y < 100.0) { | ||
y *= 10.0; | ||
c++; | ||
} | ||
printf("%.*f", c, x); | ||
} | ||
|
||
void run_benchmark(char *name, void (*benchmark)(void*), void (*setup)(void*), void (*teardown)(void*), void* data, int count, int iter) { | ||
int i; | ||
double min = HUGE_VAL; | ||
double sum = 0.0; | ||
double max = 0.0; | ||
for (i = 0; i < count; i++) { | ||
double begin, total; | ||
if (setup != NULL) { | ||
setup(data); | ||
} | ||
begin = gettimedouble(); | ||
benchmark(data); | ||
total = gettimedouble() - begin; | ||
if (teardown != NULL) { | ||
teardown(data); | ||
} | ||
if (total < min) { | ||
min = total; | ||
} | ||
if (total > max) { | ||
max = total; | ||
} | ||
sum += total; | ||
} | ||
printf("%s: min ", name); | ||
print_number(min * 1000000.0 / iter); | ||
printf("us / avg "); | ||
print_number((sum / count) * 1000000.0 / iter); | ||
printf("us / max "); | ||
print_number(max * 1000000.0 / iter); | ||
printf("us\n"); | ||
} | ||
|
||
#endif |
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,54 @@ | ||
/********************************************************************** | ||
* Copyright (c) 2015 Pieter Wuille, Andrew Poelstra * | ||
* Distributed under the MIT software license, see the accompanying * | ||
* file COPYING or http://www.opensource.org/licenses/mit-license.php.* | ||
**********************************************************************/ | ||
|
||
#include <string.h> | ||
|
||
#include "include/secp256k1.h" | ||
#include "include/secp256k1_ecdh.h" | ||
#include "util.h" | ||
#include "bench.h" | ||
|
||
typedef struct { | ||
secp256k1_context *ctx; | ||
secp256k1_pubkey point; | ||
unsigned char scalar[32]; | ||
} bench_ecdh_t; | ||
|
||
static void bench_ecdh_setup(void* arg) { | ||
int i; | ||
bench_ecdh_t *data = (bench_ecdh_t*)arg; | ||
const unsigned char point[] = { | ||
0x03, | ||
0x54, 0x94, 0xc1, 0x5d, 0x32, 0x09, 0x97, 0x06, | ||
0xc2, 0x39, 0x5f, 0x94, 0x34, 0x87, 0x45, 0xfd, | ||
0x75, 0x7c, 0xe3, 0x0e, 0x4e, 0x8c, 0x90, 0xfb, | ||
0xa2, 0xba, 0xd1, 0x84, 0xf8, 0x83, 0xc6, 0x9f | ||
}; | ||
|
||
/* create a context with no capabilities */ | ||
data->ctx = secp256k1_context_create(SECP256K1_FLAGS_TYPE_CONTEXT); | ||
for (i = 0; i < 32; i++) { | ||
data->scalar[i] = i + 1; | ||
} | ||
CHECK(secp256k1_ec_pubkey_parse(data->ctx, &data->point, point, sizeof(point)) == 1); | ||
} | ||
|
||
static void bench_ecdh(void* arg) { | ||
int i; | ||
unsigned char res[32]; | ||
bench_ecdh_t *data = (bench_ecdh_t*)arg; | ||
|
||
for (i = 0; i < 20000; i++) { | ||
CHECK(secp256k1_ecdh(data->ctx, res, &data->point, data->scalar) == 1); | ||
} | ||
} | ||
|
||
int main(void) { | ||
bench_ecdh_t data; | ||
|
||
run_benchmark("ecdh", bench_ecdh, bench_ecdh_setup, NULL, &data, 10, 20000); | ||
return 0; | ||
} |
Oops, something went wrong.