diff --git a/Cargo.toml b/Cargo.toml index 6333a93..9530a36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,17 +11,12 @@ documentation = "https://docs.rs/secp256k1/" description = "Rust bindings for Pieter Wuille's `libsecp256k1` library. Implements ECDSA for the SECG elliptic curve group secp256k1 and related utilities." keywords = [ "crypto", "ECDSA", "secp256k1", "libsecp256k1", "bitcoin" ] readme = "README.md" -build = "build.rs" -links = "secp256k1" autoexamples = false # Remove when edition 2018 https://github.com/rust-lang/cargo/issues/5330 # Should make docs.rs show all functions, even those behind non-default features [package.metadata.docs.rs] features = [ "rand", "rand-std", "serde", "recovery", "endomorphism" ] -[build-dependencies] -cc = ">= 1.0.28, < 1.0.42" - [lib] name = "secp256k1" path = "src/lib.rs" @@ -29,16 +24,19 @@ path = "src/lib.rs" [features] unstable = [] default = ["std"] -std = [] +std = ["secp256k1-sys/std"] rand-std = ["rand/std"] -recovery = [] -endomorphism = [] -lowmemory = [] +recovery = ["secp256k1-sys/recovery"] +endomorphism = ["secp256k1-sys/endomorphism"] +lowmemory = ["secp256k1-sys/lowmemory"] # Do not use this feature! HAZMAT. (meant for Bitcoin Core only) -dont_replace_c_symbols = [] +dont_replace_c_symbols = ["secp256k1-sys/dont_replace_c_symbols"] # Do not use this feature! HAZMAT. (meant for Fuzzing only. this is *BROKEN CRYPTOGRAPHY*) -fuzztarget = [] +fuzztarget = ["secp256k1-sys/fuzztarget"] + +[dependencies] +secp256k1-sys = { version = "0.1.0", default-features = false, path = "./secp256k1-sys" } [dev-dependencies] rand = "0.6" diff --git a/secp256k1-sys/Cargo.toml b/secp256k1-sys/Cargo.toml new file mode 100644 index 0000000..ff84686 --- /dev/null +++ b/secp256k1-sys/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "secp256k1-sys" +version = "0.1.0" +authors = [ "Dawid Ciężarkiewicz ", + "Andrew Poelstra ", + "Steven Roose " ] +license = "CC0-1.0" +homepage = "https://github.com/rust-bitcoin/rust-secp256k1/" +repository = "https://github.com/rust-bitcoin/rust-secp256k1/" +documentation = "https://docs.rs/secp256k1-sys/" +description = "FFI for Pieter Wuille's `libsecp256k1` library." +keywords = [ "crypto", "ECDSA", "secp256k1", "libsecp256k1", "bitcoin", "ffi" ] +readme = "README.md" +build = "build.rs" +links = "secp256k1" + +# Should make docs.rs show all functions, even those behind non-default features +[package.metadata.docs.rs] +features = [ "recovery", "endomorphism", "lowmemory" ] + +[build-dependencies] +cc = ">= 1.0.28, <= 1.0.41" + +[lib] +name = "secp256k1_sys" +path = "src/lib.rs" + +[features] +default = ["std"] +recovery = [] +endomorphism = [] +lowmemory = [] +std = [] + +# Do not use this feature! HAZMAT. (meant for Bitcoin Core only) +dont_replace_c_symbols = [] +# Do not use this feature! HAZMAT. (meant for Fuzzing only. this is *BROKEN CRYPTOGRAPHY*) +fuzztarget = [] diff --git a/build.rs b/secp256k1-sys/build.rs similarity index 100% rename from build.rs rename to secp256k1-sys/build.rs diff --git a/depend/check_uint128_t.c b/secp256k1-sys/depend/check_uint128_t.c similarity index 100% rename from depend/check_uint128_t.c rename to secp256k1-sys/depend/check_uint128_t.c diff --git a/depend/secp256k1/.gitignore b/secp256k1-sys/depend/secp256k1/.gitignore similarity index 100% rename from depend/secp256k1/.gitignore rename to secp256k1-sys/depend/secp256k1/.gitignore diff --git a/depend/secp256k1/.travis.yml b/secp256k1-sys/depend/secp256k1/.travis.yml similarity index 100% rename from depend/secp256k1/.travis.yml rename to secp256k1-sys/depend/secp256k1/.travis.yml diff --git a/depend/secp256k1/COPYING b/secp256k1-sys/depend/secp256k1/COPYING similarity index 100% rename from depend/secp256k1/COPYING rename to secp256k1-sys/depend/secp256k1/COPYING diff --git a/depend/secp256k1/Makefile.am b/secp256k1-sys/depend/secp256k1/Makefile.am similarity index 100% rename from depend/secp256k1/Makefile.am rename to secp256k1-sys/depend/secp256k1/Makefile.am diff --git a/depend/secp256k1/README.md b/secp256k1-sys/depend/secp256k1/README.md similarity index 100% rename from depend/secp256k1/README.md rename to secp256k1-sys/depend/secp256k1/README.md diff --git a/depend/secp256k1/TODO b/secp256k1-sys/depend/secp256k1/TODO similarity index 100% rename from depend/secp256k1/TODO rename to secp256k1-sys/depend/secp256k1/TODO diff --git a/depend/secp256k1/autogen.sh b/secp256k1-sys/depend/secp256k1/autogen.sh similarity index 100% rename from depend/secp256k1/autogen.sh rename to secp256k1-sys/depend/secp256k1/autogen.sh diff --git a/depend/secp256k1/build-aux/m4/ax_jni_include_dir.m4 b/secp256k1-sys/depend/secp256k1/build-aux/m4/ax_jni_include_dir.m4 similarity index 100% rename from depend/secp256k1/build-aux/m4/ax_jni_include_dir.m4 rename to secp256k1-sys/depend/secp256k1/build-aux/m4/ax_jni_include_dir.m4 diff --git a/depend/secp256k1/build-aux/m4/ax_prog_cc_for_build.m4 b/secp256k1-sys/depend/secp256k1/build-aux/m4/ax_prog_cc_for_build.m4 similarity index 100% rename from depend/secp256k1/build-aux/m4/ax_prog_cc_for_build.m4 rename to secp256k1-sys/depend/secp256k1/build-aux/m4/ax_prog_cc_for_build.m4 diff --git a/depend/secp256k1/build-aux/m4/bitcoin_secp.m4 b/secp256k1-sys/depend/secp256k1/build-aux/m4/bitcoin_secp.m4 similarity index 100% rename from depend/secp256k1/build-aux/m4/bitcoin_secp.m4 rename to secp256k1-sys/depend/secp256k1/build-aux/m4/bitcoin_secp.m4 diff --git a/depend/secp256k1/configure.ac b/secp256k1-sys/depend/secp256k1/configure.ac similarity index 100% rename from depend/secp256k1/configure.ac rename to secp256k1-sys/depend/secp256k1/configure.ac diff --git a/depend/secp256k1/contrib/lax_der_parsing.c b/secp256k1-sys/depend/secp256k1/contrib/lax_der_parsing.c similarity index 100% rename from depend/secp256k1/contrib/lax_der_parsing.c rename to secp256k1-sys/depend/secp256k1/contrib/lax_der_parsing.c diff --git a/depend/secp256k1/contrib/lax_der_parsing.h b/secp256k1-sys/depend/secp256k1/contrib/lax_der_parsing.h similarity index 100% rename from depend/secp256k1/contrib/lax_der_parsing.h rename to secp256k1-sys/depend/secp256k1/contrib/lax_der_parsing.h diff --git a/depend/secp256k1/contrib/lax_der_privatekey_parsing.c b/secp256k1-sys/depend/secp256k1/contrib/lax_der_privatekey_parsing.c similarity index 100% rename from depend/secp256k1/contrib/lax_der_privatekey_parsing.c rename to secp256k1-sys/depend/secp256k1/contrib/lax_der_privatekey_parsing.c diff --git a/depend/secp256k1/contrib/lax_der_privatekey_parsing.h b/secp256k1-sys/depend/secp256k1/contrib/lax_der_privatekey_parsing.h similarity index 100% rename from depend/secp256k1/contrib/lax_der_privatekey_parsing.h rename to secp256k1-sys/depend/secp256k1/contrib/lax_der_privatekey_parsing.h diff --git a/depend/secp256k1/include/secp256k1.h b/secp256k1-sys/depend/secp256k1/include/secp256k1.h similarity index 100% rename from depend/secp256k1/include/secp256k1.h rename to secp256k1-sys/depend/secp256k1/include/secp256k1.h diff --git a/depend/secp256k1/include/secp256k1_ecdh.h b/secp256k1-sys/depend/secp256k1/include/secp256k1_ecdh.h similarity index 100% rename from depend/secp256k1/include/secp256k1_ecdh.h rename to secp256k1-sys/depend/secp256k1/include/secp256k1_ecdh.h diff --git a/depend/secp256k1/include/secp256k1_preallocated.h b/secp256k1-sys/depend/secp256k1/include/secp256k1_preallocated.h similarity index 100% rename from depend/secp256k1/include/secp256k1_preallocated.h rename to secp256k1-sys/depend/secp256k1/include/secp256k1_preallocated.h diff --git a/depend/secp256k1/include/secp256k1_recovery.h b/secp256k1-sys/depend/secp256k1/include/secp256k1_recovery.h similarity index 100% rename from depend/secp256k1/include/secp256k1_recovery.h rename to secp256k1-sys/depend/secp256k1/include/secp256k1_recovery.h diff --git a/depend/secp256k1/libsecp256k1.pc.in b/secp256k1-sys/depend/secp256k1/libsecp256k1.pc.in similarity index 100% rename from depend/secp256k1/libsecp256k1.pc.in rename to secp256k1-sys/depend/secp256k1/libsecp256k1.pc.in diff --git a/depend/secp256k1/obj/.gitignore b/secp256k1-sys/depend/secp256k1/obj/.gitignore similarity index 100% rename from depend/secp256k1/obj/.gitignore rename to secp256k1-sys/depend/secp256k1/obj/.gitignore diff --git a/depend/secp256k1/sage/group_prover.sage b/secp256k1-sys/depend/secp256k1/sage/group_prover.sage similarity index 100% rename from depend/secp256k1/sage/group_prover.sage rename to secp256k1-sys/depend/secp256k1/sage/group_prover.sage diff --git a/depend/secp256k1/sage/secp256k1.sage b/secp256k1-sys/depend/secp256k1/sage/secp256k1.sage similarity index 100% rename from depend/secp256k1/sage/secp256k1.sage rename to secp256k1-sys/depend/secp256k1/sage/secp256k1.sage diff --git a/depend/secp256k1/sage/weierstrass_prover.sage b/secp256k1-sys/depend/secp256k1/sage/weierstrass_prover.sage similarity index 100% rename from depend/secp256k1/sage/weierstrass_prover.sage rename to secp256k1-sys/depend/secp256k1/sage/weierstrass_prover.sage diff --git a/depend/secp256k1/src/asm/field_10x26_arm.s b/secp256k1-sys/depend/secp256k1/src/asm/field_10x26_arm.s similarity index 100% rename from depend/secp256k1/src/asm/field_10x26_arm.s rename to secp256k1-sys/depend/secp256k1/src/asm/field_10x26_arm.s diff --git a/depend/secp256k1/src/basic-config.h b/secp256k1-sys/depend/secp256k1/src/basic-config.h similarity index 100% rename from depend/secp256k1/src/basic-config.h rename to secp256k1-sys/depend/secp256k1/src/basic-config.h diff --git a/depend/secp256k1/src/bench.h b/secp256k1-sys/depend/secp256k1/src/bench.h similarity index 100% rename from depend/secp256k1/src/bench.h rename to secp256k1-sys/depend/secp256k1/src/bench.h diff --git a/depend/secp256k1/src/bench_ecdh.c b/secp256k1-sys/depend/secp256k1/src/bench_ecdh.c similarity index 100% rename from depend/secp256k1/src/bench_ecdh.c rename to secp256k1-sys/depend/secp256k1/src/bench_ecdh.c diff --git a/depend/secp256k1/src/bench_ecmult.c b/secp256k1-sys/depend/secp256k1/src/bench_ecmult.c similarity index 100% rename from depend/secp256k1/src/bench_ecmult.c rename to secp256k1-sys/depend/secp256k1/src/bench_ecmult.c diff --git a/depend/secp256k1/src/bench_internal.c b/secp256k1-sys/depend/secp256k1/src/bench_internal.c similarity index 100% rename from depend/secp256k1/src/bench_internal.c rename to secp256k1-sys/depend/secp256k1/src/bench_internal.c diff --git a/depend/secp256k1/src/bench_recover.c b/secp256k1-sys/depend/secp256k1/src/bench_recover.c similarity index 100% rename from depend/secp256k1/src/bench_recover.c rename to secp256k1-sys/depend/secp256k1/src/bench_recover.c diff --git a/depend/secp256k1/src/bench_sign.c b/secp256k1-sys/depend/secp256k1/src/bench_sign.c similarity index 100% rename from depend/secp256k1/src/bench_sign.c rename to secp256k1-sys/depend/secp256k1/src/bench_sign.c diff --git a/depend/secp256k1/src/bench_verify.c b/secp256k1-sys/depend/secp256k1/src/bench_verify.c similarity index 100% rename from depend/secp256k1/src/bench_verify.c rename to secp256k1-sys/depend/secp256k1/src/bench_verify.c diff --git a/depend/secp256k1/src/ecdsa.h b/secp256k1-sys/depend/secp256k1/src/ecdsa.h similarity index 100% rename from depend/secp256k1/src/ecdsa.h rename to secp256k1-sys/depend/secp256k1/src/ecdsa.h diff --git a/depend/secp256k1/src/ecdsa_impl.h b/secp256k1-sys/depend/secp256k1/src/ecdsa_impl.h similarity index 100% rename from depend/secp256k1/src/ecdsa_impl.h rename to secp256k1-sys/depend/secp256k1/src/ecdsa_impl.h diff --git a/depend/secp256k1/src/eckey.h b/secp256k1-sys/depend/secp256k1/src/eckey.h similarity index 100% rename from depend/secp256k1/src/eckey.h rename to secp256k1-sys/depend/secp256k1/src/eckey.h diff --git a/depend/secp256k1/src/eckey_impl.h b/secp256k1-sys/depend/secp256k1/src/eckey_impl.h similarity index 100% rename from depend/secp256k1/src/eckey_impl.h rename to secp256k1-sys/depend/secp256k1/src/eckey_impl.h diff --git a/depend/secp256k1/src/ecmult.h b/secp256k1-sys/depend/secp256k1/src/ecmult.h similarity index 100% rename from depend/secp256k1/src/ecmult.h rename to secp256k1-sys/depend/secp256k1/src/ecmult.h diff --git a/depend/secp256k1/src/ecmult_const.h b/secp256k1-sys/depend/secp256k1/src/ecmult_const.h similarity index 100% rename from depend/secp256k1/src/ecmult_const.h rename to secp256k1-sys/depend/secp256k1/src/ecmult_const.h diff --git a/depend/secp256k1/src/ecmult_const_impl.h b/secp256k1-sys/depend/secp256k1/src/ecmult_const_impl.h similarity index 100% rename from depend/secp256k1/src/ecmult_const_impl.h rename to secp256k1-sys/depend/secp256k1/src/ecmult_const_impl.h diff --git a/depend/secp256k1/src/ecmult_gen.h b/secp256k1-sys/depend/secp256k1/src/ecmult_gen.h similarity index 100% rename from depend/secp256k1/src/ecmult_gen.h rename to secp256k1-sys/depend/secp256k1/src/ecmult_gen.h diff --git a/depend/secp256k1/src/ecmult_gen_impl.h b/secp256k1-sys/depend/secp256k1/src/ecmult_gen_impl.h similarity index 100% rename from depend/secp256k1/src/ecmult_gen_impl.h rename to secp256k1-sys/depend/secp256k1/src/ecmult_gen_impl.h diff --git a/depend/secp256k1/src/ecmult_impl.h b/secp256k1-sys/depend/secp256k1/src/ecmult_impl.h similarity index 100% rename from depend/secp256k1/src/ecmult_impl.h rename to secp256k1-sys/depend/secp256k1/src/ecmult_impl.h diff --git a/depend/secp256k1/src/field.h b/secp256k1-sys/depend/secp256k1/src/field.h similarity index 100% rename from depend/secp256k1/src/field.h rename to secp256k1-sys/depend/secp256k1/src/field.h diff --git a/depend/secp256k1/src/field_10x26.h b/secp256k1-sys/depend/secp256k1/src/field_10x26.h similarity index 100% rename from depend/secp256k1/src/field_10x26.h rename to secp256k1-sys/depend/secp256k1/src/field_10x26.h diff --git a/depend/secp256k1/src/field_10x26_impl.h b/secp256k1-sys/depend/secp256k1/src/field_10x26_impl.h similarity index 100% rename from depend/secp256k1/src/field_10x26_impl.h rename to secp256k1-sys/depend/secp256k1/src/field_10x26_impl.h diff --git a/depend/secp256k1/src/field_5x52.h b/secp256k1-sys/depend/secp256k1/src/field_5x52.h similarity index 100% rename from depend/secp256k1/src/field_5x52.h rename to secp256k1-sys/depend/secp256k1/src/field_5x52.h diff --git a/depend/secp256k1/src/field_5x52_asm_impl.h b/secp256k1-sys/depend/secp256k1/src/field_5x52_asm_impl.h similarity index 100% rename from depend/secp256k1/src/field_5x52_asm_impl.h rename to secp256k1-sys/depend/secp256k1/src/field_5x52_asm_impl.h diff --git a/depend/secp256k1/src/field_5x52_impl.h b/secp256k1-sys/depend/secp256k1/src/field_5x52_impl.h similarity index 100% rename from depend/secp256k1/src/field_5x52_impl.h rename to secp256k1-sys/depend/secp256k1/src/field_5x52_impl.h diff --git a/depend/secp256k1/src/field_5x52_int128_impl.h b/secp256k1-sys/depend/secp256k1/src/field_5x52_int128_impl.h similarity index 100% rename from depend/secp256k1/src/field_5x52_int128_impl.h rename to secp256k1-sys/depend/secp256k1/src/field_5x52_int128_impl.h diff --git a/depend/secp256k1/src/field_impl.h b/secp256k1-sys/depend/secp256k1/src/field_impl.h similarity index 100% rename from depend/secp256k1/src/field_impl.h rename to secp256k1-sys/depend/secp256k1/src/field_impl.h diff --git a/depend/secp256k1/src/gen_context.c b/secp256k1-sys/depend/secp256k1/src/gen_context.c similarity index 100% rename from depend/secp256k1/src/gen_context.c rename to secp256k1-sys/depend/secp256k1/src/gen_context.c diff --git a/depend/secp256k1/src/group.h b/secp256k1-sys/depend/secp256k1/src/group.h similarity index 100% rename from depend/secp256k1/src/group.h rename to secp256k1-sys/depend/secp256k1/src/group.h diff --git a/depend/secp256k1/src/group_impl.h b/secp256k1-sys/depend/secp256k1/src/group_impl.h similarity index 100% rename from depend/secp256k1/src/group_impl.h rename to secp256k1-sys/depend/secp256k1/src/group_impl.h diff --git a/depend/secp256k1/src/hash.h b/secp256k1-sys/depend/secp256k1/src/hash.h similarity index 100% rename from depend/secp256k1/src/hash.h rename to secp256k1-sys/depend/secp256k1/src/hash.h diff --git a/depend/secp256k1/src/hash_impl.h b/secp256k1-sys/depend/secp256k1/src/hash_impl.h similarity index 100% rename from depend/secp256k1/src/hash_impl.h rename to secp256k1-sys/depend/secp256k1/src/hash_impl.h diff --git a/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1.java b/secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1.java similarity index 100% rename from depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1.java rename to secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1.java diff --git a/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java b/secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java similarity index 100% rename from depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java rename to secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java diff --git a/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java b/secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java similarity index 100% rename from depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java rename to secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java diff --git a/depend/secp256k1/src/java/org/bitcoin/Secp256k1Context.java b/secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/Secp256k1Context.java similarity index 100% rename from depend/secp256k1/src/java/org/bitcoin/Secp256k1Context.java rename to secp256k1-sys/depend/secp256k1/src/java/org/bitcoin/Secp256k1Context.java diff --git a/depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.c b/secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.c similarity index 100% rename from depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.c rename to secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.c diff --git a/depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.h b/secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.h similarity index 100% rename from depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.h rename to secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_NativeSecp256k1.h diff --git a/depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.c b/secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.c similarity index 100% rename from depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.c rename to secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.c diff --git a/depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.h b/secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.h similarity index 100% rename from depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.h rename to secp256k1-sys/depend/secp256k1/src/java/org_bitcoin_Secp256k1Context.h diff --git a/depend/secp256k1/src/modules/ecdh/Makefile.am.include b/secp256k1-sys/depend/secp256k1/src/modules/ecdh/Makefile.am.include similarity index 100% rename from depend/secp256k1/src/modules/ecdh/Makefile.am.include rename to secp256k1-sys/depend/secp256k1/src/modules/ecdh/Makefile.am.include diff --git a/depend/secp256k1/src/modules/ecdh/main_impl.h b/secp256k1-sys/depend/secp256k1/src/modules/ecdh/main_impl.h similarity index 100% rename from depend/secp256k1/src/modules/ecdh/main_impl.h rename to secp256k1-sys/depend/secp256k1/src/modules/ecdh/main_impl.h diff --git a/depend/secp256k1/src/modules/ecdh/tests_impl.h b/secp256k1-sys/depend/secp256k1/src/modules/ecdh/tests_impl.h similarity index 100% rename from depend/secp256k1/src/modules/ecdh/tests_impl.h rename to secp256k1-sys/depend/secp256k1/src/modules/ecdh/tests_impl.h diff --git a/depend/secp256k1/src/modules/recovery/Makefile.am.include b/secp256k1-sys/depend/secp256k1/src/modules/recovery/Makefile.am.include similarity index 100% rename from depend/secp256k1/src/modules/recovery/Makefile.am.include rename to secp256k1-sys/depend/secp256k1/src/modules/recovery/Makefile.am.include diff --git a/depend/secp256k1/src/modules/recovery/main_impl.h b/secp256k1-sys/depend/secp256k1/src/modules/recovery/main_impl.h similarity index 100% rename from depend/secp256k1/src/modules/recovery/main_impl.h rename to secp256k1-sys/depend/secp256k1/src/modules/recovery/main_impl.h diff --git a/depend/secp256k1/src/modules/recovery/tests_impl.h b/secp256k1-sys/depend/secp256k1/src/modules/recovery/tests_impl.h similarity index 100% rename from depend/secp256k1/src/modules/recovery/tests_impl.h rename to secp256k1-sys/depend/secp256k1/src/modules/recovery/tests_impl.h diff --git a/depend/secp256k1/src/num.h b/secp256k1-sys/depend/secp256k1/src/num.h similarity index 100% rename from depend/secp256k1/src/num.h rename to secp256k1-sys/depend/secp256k1/src/num.h diff --git a/depend/secp256k1/src/num_gmp.h b/secp256k1-sys/depend/secp256k1/src/num_gmp.h similarity index 100% rename from depend/secp256k1/src/num_gmp.h rename to secp256k1-sys/depend/secp256k1/src/num_gmp.h diff --git a/depend/secp256k1/src/num_gmp_impl.h b/secp256k1-sys/depend/secp256k1/src/num_gmp_impl.h similarity index 100% rename from depend/secp256k1/src/num_gmp_impl.h rename to secp256k1-sys/depend/secp256k1/src/num_gmp_impl.h diff --git a/depend/secp256k1/src/num_impl.h b/secp256k1-sys/depend/secp256k1/src/num_impl.h similarity index 100% rename from depend/secp256k1/src/num_impl.h rename to secp256k1-sys/depend/secp256k1/src/num_impl.h diff --git a/depend/secp256k1/src/scalar.h b/secp256k1-sys/depend/secp256k1/src/scalar.h similarity index 100% rename from depend/secp256k1/src/scalar.h rename to secp256k1-sys/depend/secp256k1/src/scalar.h diff --git a/depend/secp256k1/src/scalar_4x64.h b/secp256k1-sys/depend/secp256k1/src/scalar_4x64.h similarity index 100% rename from depend/secp256k1/src/scalar_4x64.h rename to secp256k1-sys/depend/secp256k1/src/scalar_4x64.h diff --git a/depend/secp256k1/src/scalar_4x64_impl.h b/secp256k1-sys/depend/secp256k1/src/scalar_4x64_impl.h similarity index 100% rename from depend/secp256k1/src/scalar_4x64_impl.h rename to secp256k1-sys/depend/secp256k1/src/scalar_4x64_impl.h diff --git a/depend/secp256k1/src/scalar_8x32.h b/secp256k1-sys/depend/secp256k1/src/scalar_8x32.h similarity index 100% rename from depend/secp256k1/src/scalar_8x32.h rename to secp256k1-sys/depend/secp256k1/src/scalar_8x32.h diff --git a/depend/secp256k1/src/scalar_8x32_impl.h b/secp256k1-sys/depend/secp256k1/src/scalar_8x32_impl.h similarity index 100% rename from depend/secp256k1/src/scalar_8x32_impl.h rename to secp256k1-sys/depend/secp256k1/src/scalar_8x32_impl.h diff --git a/depend/secp256k1/src/scalar_impl.h b/secp256k1-sys/depend/secp256k1/src/scalar_impl.h similarity index 100% rename from depend/secp256k1/src/scalar_impl.h rename to secp256k1-sys/depend/secp256k1/src/scalar_impl.h diff --git a/depend/secp256k1/src/scalar_low.h b/secp256k1-sys/depend/secp256k1/src/scalar_low.h similarity index 100% rename from depend/secp256k1/src/scalar_low.h rename to secp256k1-sys/depend/secp256k1/src/scalar_low.h diff --git a/depend/secp256k1/src/scalar_low_impl.h b/secp256k1-sys/depend/secp256k1/src/scalar_low_impl.h similarity index 100% rename from depend/secp256k1/src/scalar_low_impl.h rename to secp256k1-sys/depend/secp256k1/src/scalar_low_impl.h diff --git a/depend/secp256k1/src/scratch.h b/secp256k1-sys/depend/secp256k1/src/scratch.h similarity index 100% rename from depend/secp256k1/src/scratch.h rename to secp256k1-sys/depend/secp256k1/src/scratch.h diff --git a/depend/secp256k1/src/scratch_impl.h b/secp256k1-sys/depend/secp256k1/src/scratch_impl.h similarity index 100% rename from depend/secp256k1/src/scratch_impl.h rename to secp256k1-sys/depend/secp256k1/src/scratch_impl.h diff --git a/depend/secp256k1/src/secp256k1.c b/secp256k1-sys/depend/secp256k1/src/secp256k1.c similarity index 100% rename from depend/secp256k1/src/secp256k1.c rename to secp256k1-sys/depend/secp256k1/src/secp256k1.c diff --git a/depend/secp256k1/src/testrand.h b/secp256k1-sys/depend/secp256k1/src/testrand.h similarity index 100% rename from depend/secp256k1/src/testrand.h rename to secp256k1-sys/depend/secp256k1/src/testrand.h diff --git a/depend/secp256k1/src/testrand_impl.h b/secp256k1-sys/depend/secp256k1/src/testrand_impl.h similarity index 100% rename from depend/secp256k1/src/testrand_impl.h rename to secp256k1-sys/depend/secp256k1/src/testrand_impl.h diff --git a/depend/secp256k1/src/tests.c b/secp256k1-sys/depend/secp256k1/src/tests.c similarity index 100% rename from depend/secp256k1/src/tests.c rename to secp256k1-sys/depend/secp256k1/src/tests.c diff --git a/depend/secp256k1/src/tests_exhaustive.c b/secp256k1-sys/depend/secp256k1/src/tests_exhaustive.c similarity index 100% rename from depend/secp256k1/src/tests_exhaustive.c rename to secp256k1-sys/depend/secp256k1/src/tests_exhaustive.c diff --git a/depend/secp256k1/src/util.h b/secp256k1-sys/depend/secp256k1/src/util.h similarity index 100% rename from depend/secp256k1/src/util.h rename to secp256k1-sys/depend/secp256k1/src/util.h diff --git a/src/ffi.rs b/secp256k1-sys/src/lib.rs similarity index 97% rename from src/ffi.rs rename to secp256k1-sys/src/lib.rs index 01a8530..7577a85 100644 --- a/src/ffi.rs +++ b/secp256k1-sys/src/lib.rs @@ -12,11 +12,31 @@ // along with this software. // If not, see . // - -//! # FFI bindings +//! # secp256k1-sys FFI bindings //! Direct bindings to the underlying C library functions. These should //! not be needed for most users. -use core::{mem, hash, slice, ptr}; + +#![crate_type = "lib"] +#![crate_type = "rlib"] +#![crate_type = "dylib"] +#![crate_name = "secp256k1_sys"] + +#![cfg_attr(all(not(test), not(fuzztarget), not(feature = "std")), no_std)] +#![cfg_attr(feature = "dev", allow(unstable_features))] +#![cfg_attr(feature = "dev", feature(plugin))] +#![cfg_attr(feature = "dev", plugin(clippy))] + +#[cfg(any(test, feature = "std"))] +extern crate core; + +#[macro_use] +mod macros; +pub mod types; + +#[cfg(feature = "recovery")] +pub mod recovery; + +use core::{hash, slice, ptr}; use types::*; /// Flag for context to enable no precomputation @@ -268,6 +288,7 @@ extern "C" { // Returns: a newly created context object. // In: flags: which parts of the context to initialize. pub unsafe extern "C" fn secp256k1_context_create(flags: c_uint) -> *mut Context { + use std::mem; assert!(mem::align_of::() >= mem::align_of::()); assert_eq!(mem::size_of::(), mem::size_of::<&usize>()); @@ -366,7 +387,7 @@ unsafe fn strlen(mut str_ptr: *const c_char) -> usize { /// Rust doesn't promise what pointers does it give to ZST (https://doc.rust-lang.org/nomicon/exotic-sizes.html#zero-sized-types-zsts) /// In case the type is empty this trait will give a NULL pointer, which should be handled in C. /// -pub(crate) trait CPtr { +pub trait CPtr { type Target; fn as_c_ptr(&self) -> *const Self::Target; fn as_mut_c_ptr(&mut self) -> *mut Self::Target; @@ -397,10 +418,12 @@ impl CPtr for [T] { #[cfg(feature = "fuzztarget")] mod fuzz_dummy { extern crate std; - use types::*; - use ffi::*; use self::std::{ptr, mem}; use self::std::boxed::Box; + use types::*; + use ::{Signature, Context, NonceFn, EcdhHashFn, PublicKey, SharedSecret, + SECP256K1_START_NONE, SECP256K1_START_VERIFY, SECP256K1_START_SIGN, + SECP256K1_SER_COMPRESSED, SECP256K1_SER_UNCOMPRESSED}; extern "C" { pub static secp256k1_ecdh_hash_function_default: EcdhHashFn; @@ -421,7 +444,7 @@ mod fuzz_dummy { } /// Return dummy size of context struct. - pub unsafe fn secp256k1_context_preallocated_clone_size(cx: *mut Context) -> usize { + pub unsafe fn secp256k1_context_preallocated_clone_size(_cx: *mut Context) -> usize { mem::size_of::() } @@ -767,3 +790,4 @@ mod tests { assert_eq!(orig.len(), unsafe {strlen(test.as_ptr())}); } } + diff --git a/secp256k1-sys/src/macros.rs b/secp256k1-sys/src/macros.rs new file mode 100644 index 0000000..76c45bd --- /dev/null +++ b/secp256k1-sys/src/macros.rs @@ -0,0 +1,158 @@ +// Bitcoin secp256k1 bindings +// Written in 2014 by +// Dawid Ciężarkiewicz +// Andrew Poelstra +// +// To the extent possible under law, the author(s) have dedicated all +// copyright and related and neighboring rights to this software to +// the public domain worldwide. This software is distributed without +// any warranty. +// +// You should have received a copy of the CC0 Public Domain Dedication +// along with this software. +// If not, see . +// + +// This is a macro that routinely comes in handy +#[macro_export] +macro_rules! impl_array_newtype { + ($thing:ident, $ty:ty, $len:expr) => { + impl Copy for $thing {} + + impl $thing { + #[inline] + /// Converts the object to a raw pointer for FFI interfacing + pub fn as_ptr(&self) -> *const $ty { + let &$thing(ref dat) = self; + dat.as_ptr() + } + + #[inline] + /// Converts the object to a mutable raw pointer for FFI interfacing + pub fn as_mut_ptr(&mut self) -> *mut $ty { + let &mut $thing(ref mut dat) = self; + dat.as_mut_ptr() + } + + #[inline] + /// Returns the length of the object as an array + pub fn len(&self) -> usize { $len } + + #[inline] + /// Returns whether the object as an array is empty + pub fn is_empty(&self) -> bool { false } + } + + impl PartialEq for $thing { + #[inline] + fn eq(&self, other: &$thing) -> bool { + &self[..] == &other[..] + } + } + + impl Eq for $thing {} + + impl PartialOrd for $thing { + #[inline] + fn partial_cmp(&self, other: &$thing) -> Option<::core::cmp::Ordering> { + self[..].partial_cmp(&other[..]) + } + } + + impl Ord for $thing { + #[inline] + fn cmp(&self, other: &$thing) -> ::core::cmp::Ordering { + self[..].cmp(&other[..]) + } + } + + impl Clone for $thing { + #[inline] + fn clone(&self) -> $thing { + let &$thing(ref dat) = self; + $thing(dat.clone()) + } + } + + impl ::core::ops::Index for $thing { + type Output = $ty; + + #[inline] + fn index(&self, index: usize) -> &$ty { + let &$thing(ref dat) = self; + &dat[index] + } + } + + impl ::core::ops::Index<::core::ops::Range> for $thing { + type Output = [$ty]; + + #[inline] + fn index(&self, index: ::core::ops::Range) -> &[$ty] { + let &$thing(ref dat) = self; + &dat[index] + } + } + + impl ::core::ops::Index<::core::ops::RangeTo> for $thing { + type Output = [$ty]; + + #[inline] + fn index(&self, index: ::core::ops::RangeTo) -> &[$ty] { + let &$thing(ref dat) = self; + &dat[index] + } + } + + impl ::core::ops::Index<::core::ops::RangeFrom> for $thing { + type Output = [$ty]; + + #[inline] + fn index(&self, index: ::core::ops::RangeFrom) -> &[$ty] { + let &$thing(ref dat) = self; + &dat[index] + } + } + + impl ::core::ops::Index<::core::ops::RangeFull> for $thing { + type Output = [$ty]; + + #[inline] + fn index(&self, _: ::core::ops::RangeFull) -> &[$ty] { + let &$thing(ref dat) = self; + &dat[..] + } + } + impl ::CPtr for $thing { + type Target = $ty; + fn as_c_ptr(&self) -> *const Self::Target { + if self.is_empty() { + ::core::ptr::null() + } else { + self.as_ptr() + } + } + + fn as_mut_c_ptr(&mut self) -> *mut Self::Target { + if self.is_empty() { + ::core::ptr::null::() as *mut _ + } else { + self.as_mut_ptr() + } + } + } + } +} + +macro_rules! impl_raw_debug { + ($thing:ident) => { + impl ::core::fmt::Debug for $thing { + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + for i in self[..].iter().cloned() { + write!(f, "{:02x}", i)?; + } + Ok(()) + } + } + } +} diff --git a/src/recovery/ffi.rs b/secp256k1-sys/src/recovery.rs similarity index 95% rename from src/recovery/ffi.rs rename to secp256k1-sys/src/recovery.rs index 5a84b46..f64c967 100644 --- a/src/recovery/ffi.rs +++ b/secp256k1-sys/src/recovery.rs @@ -15,9 +15,9 @@ //! # FFI of the recovery module -use core::mem; -use types::*; -use ffi::{Context, NonceFn, PublicKey, Signature, CPtr}; +use ::types::*; +#[cfg(not(feature = "fuzztarget"))] +use ::{Context, Signature, NonceFn, PublicKey}; /// Library-internal representation of a Secp256k1 signature + recovery ID #[repr(C)] @@ -71,10 +71,11 @@ extern "C" { #[cfg(feature = "fuzztarget")] mod fuzz_dummy { extern crate std; - use types::*; - use ffi::*; use self::std::ptr; use super::RecoverableSignature; + use types::*; + use ::{Signature, Context, PublicKey, NonceFn, secp256k1_ec_seckey_verify, + SECP256K1_START_NONE, SECP256K1_START_VERIFY, SECP256K1_START_SIGN}; pub unsafe fn secp256k1_ecdsa_recoverable_signature_parse_compact(_cx: *const Context, _sig: *mut RecoverableSignature, _input64: *const c_uchar, _recid: c_int) @@ -125,3 +126,4 @@ mod fuzz_dummy { } #[cfg(feature = "fuzztarget")] pub use self::fuzz_dummy::*; + diff --git a/src/types.rs b/secp256k1-sys/src/types.rs similarity index 99% rename from src/types.rs rename to secp256k1-sys/src/types.rs index f0e761b..8c9f362 100644 --- a/src/types.rs +++ b/secp256k1-sys/src/types.rs @@ -38,4 +38,4 @@ mod tests { assert_eq!(TypeId::of::(), TypeId::of::()); assert_eq!(TypeId::of::(), TypeId::of::()); } -} \ No newline at end of file +} diff --git a/src/context.rs b/src/context.rs index ca7eba8..13d341e 100644 --- a/src/context.rs +++ b/src/context.rs @@ -1,7 +1,7 @@ use core::marker::PhantomData; use ptr; use ffi::{self, CPtr}; -use types::{c_uint, c_void}; +use ffi::types::{c_uint, c_void}; use Error; use Secp256k1; diff --git a/src/lib.rs b/src/lib.rs index 224f324..74254f2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -139,8 +139,14 @@ #![cfg_attr(feature = "dev", feature(plugin))] #![cfg_attr(feature = "dev", plugin(clippy))] + #![cfg_attr(all(not(test), not(fuzztarget), not(feature = "std")), no_std)] #![cfg_attr(all(test, feature = "unstable"), feature(test))] + +#[macro_use] +pub extern crate secp256k1_sys; +pub use secp256k1_sys as ffi; + #[cfg(all(test, feature = "unstable"))] extern crate test; #[cfg(any(test, feature = "rand"))] pub extern crate rand; #[cfg(any(test))] extern crate rand_core; @@ -153,11 +159,9 @@ use core::{fmt, ptr, str}; #[macro_use] mod macros; -mod types; mod context; pub mod constants; pub mod ecdh; -pub mod ffi; pub mod key; #[cfg(feature = "recovery")] pub mod recovery; diff --git a/src/macros.rs b/src/macros.rs index 0b9211c..bf8fb0c 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -13,136 +13,6 @@ // If not, see . // -// This is a macro that routinely comes in handy -macro_rules! impl_array_newtype { - ($thing:ident, $ty:ty, $len:expr) => { - impl Copy for $thing {} - - impl $thing { - #[inline] - /// Converts the object to a raw pointer for FFI interfacing - pub fn as_ptr(&self) -> *const $ty { - let &$thing(ref dat) = self; - dat.as_ptr() - } - - #[inline] - /// Converts the object to a mutable raw pointer for FFI interfacing - pub fn as_mut_ptr(&mut self) -> *mut $ty { - let &mut $thing(ref mut dat) = self; - dat.as_mut_ptr() - } - - #[inline] - /// Returns the length of the object as an array - pub fn len(&self) -> usize { $len } - - #[inline] - /// Returns whether the object as an array is empty - pub fn is_empty(&self) -> bool { false } - } - - impl PartialEq for $thing { - #[inline] - fn eq(&self, other: &$thing) -> bool { - &self[..] == &other[..] - } - } - - impl Eq for $thing {} - - impl PartialOrd for $thing { - #[inline] - fn partial_cmp(&self, other: &$thing) -> Option<::core::cmp::Ordering> { - self[..].partial_cmp(&other[..]) - } - } - - impl Ord for $thing { - #[inline] - fn cmp(&self, other: &$thing) -> ::core::cmp::Ordering { - self[..].cmp(&other[..]) - } - } - - impl Clone for $thing { - #[inline] - fn clone(&self) -> $thing { - let &$thing(ref dat) = self; - $thing(dat.clone()) - } - } - - impl ::core::ops::Index for $thing { - type Output = $ty; - - #[inline] - fn index(&self, index: usize) -> &$ty { - let &$thing(ref dat) = self; - &dat[index] - } - } - - impl ::core::ops::Index<::core::ops::Range> for $thing { - type Output = [$ty]; - - #[inline] - fn index(&self, index: ::core::ops::Range) -> &[$ty] { - let &$thing(ref dat) = self; - &dat[index] - } - } - - impl ::core::ops::Index<::core::ops::RangeTo> for $thing { - type Output = [$ty]; - - #[inline] - fn index(&self, index: ::core::ops::RangeTo) -> &[$ty] { - let &$thing(ref dat) = self; - &dat[index] - } - } - - impl ::core::ops::Index<::core::ops::RangeFrom> for $thing { - type Output = [$ty]; - - #[inline] - fn index(&self, index: ::core::ops::RangeFrom) -> &[$ty] { - let &$thing(ref dat) = self; - &dat[index] - } - } - - impl ::core::ops::Index<::core::ops::RangeFull> for $thing { - type Output = [$ty]; - - #[inline] - fn index(&self, _: ::core::ops::RangeFull) -> &[$ty] { - let &$thing(ref dat) = self; - &dat[..] - } - } - impl ::ffi::CPtr for $thing { - type Target = $ty; - fn as_c_ptr(&self) -> *const Self::Target { - if self.is_empty() { - ::core::ptr::null() - } else { - self.as_ptr() - } - } - - fn as_mut_c_ptr(&mut self) -> *mut Self::Target { - if self.is_empty() { - ::core::ptr::null::() as *mut _ - } else { - self.as_mut_ptr() - } - } - } - } -} - macro_rules! impl_pretty_debug { ($thing:ident) => { impl ::core::fmt::Debug for $thing { @@ -157,19 +27,6 @@ macro_rules! impl_pretty_debug { } } -macro_rules! impl_raw_debug { - ($thing:ident) => { - impl ::core::fmt::Debug for $thing { - fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { - for i in self[..].iter().cloned() { - write!(f, "{:02x}", i)?; - } - Ok(()) - } - } - } -} - #[cfg(feature="serde")] /// Implements `Serialize` and `Deserialize` for a type `$t` which represents /// a newtype over a byte-slice over length `$len`. Type `$t` must implement diff --git a/src/recovery/mod.rs b/src/recovery.rs similarity index 99% rename from src/recovery/mod.rs rename to src/recovery.rs index 1cad4e6..d50cca9 100644 --- a/src/recovery/mod.rs +++ b/src/recovery.rs @@ -25,7 +25,7 @@ pub use key::SecretKey; pub use key::PublicKey; use self::super_ffi::CPtr; -mod ffi; +use ffi::recovery as ffi; /// A tag used for recovering the public key from a compact signature #[derive(Copy, Clone, PartialEq, Eq, Debug)]