From 62b9f06104889fd99e889908a813ac7210e0bf12 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Wed, 7 Aug 2019 18:00:35 +0000 Subject: [PATCH] build.rs: Add feature 'lowmemory' to reduce memory usage Currently, this only set `ECMULT_WINDOW_SIZE` to 4 instead of 15. Fixes #139. fixup --- .travis.yml | 1 + CHANGELOG.md | 7 +++++++ Cargo.toml | 1 + build.rs | 8 ++++++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5554a38..084a2ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,7 @@ script: - cargo build --verbose --no-default-features --features="rand" - cargo build --verbose --no-default-features --features="rand serde recovery endomorphism" - cargo build --verbose --no-default-features --features="fuzztarget recovery" + - cargo build --verbose --no-default-features --features="lowmemory" - cargo build --verbose - cargo test --verbose - cargo build --release diff --git a/CHANGELOG.md b/CHANGELOG.md index 93f41d2..8f913bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 0.15.1 - ????-??-?? + +- Add feature `lowmemory` that reduces the EC mult window size to require + significantly less memory for the validation context (~340B instead of + ~520kB), at the cost of slower validation. It does not affect signing, nor + the size of the signing context. + # 0.15.0 - 2019-07-25 * Implement hex human-readable serde for PublicKey diff --git a/Cargo.toml b/Cargo.toml index e0090ca..4ee277b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,6 +32,7 @@ fuzztarget = [] std = ["rand/std"] recovery = [] endomorphism = [] +lowmemory = [] [dev-dependencies] rand = "0.6" diff --git a/build.rs b/build.rs index 86d8125..3e11c59 100644 --- a/build.rs +++ b/build.rs @@ -53,9 +53,13 @@ fn main() { .define("USE_FIELD_INV_BUILTIN", Some("1")) .define("USE_SCALAR_INV_BUILTIN", Some("1")) .define("ENABLE_MODULE_ECDH", Some("1")) - .define("USE_EXTERNAL_DEFAULT_CALLBACKS", Some("1")) - .define("ECMULT_WINDOW_SIZE", Some("15")); // This is the default in the configure file (`auto`) + .define("USE_EXTERNAL_DEFAULT_CALLBACKS", Some("1")); + if cfg!(feature = "lowmemory") { + base_config.define("ECMULT_WINDOW_SIZE", Some("4")); // A low-enough value to consume neglible memory + } else { + base_config.define("ECMULT_WINDOW_SIZE", Some("15")); // This is the default in the configure file (`auto`) + } #[cfg(feature = "endomorphism")] base_config.define("USE_ENDOMORPHISM", Some("1")); #[cfg(feature = "recovery")]