diff --git a/.travis.yml b/.travis.yml index 709f428..f9f46f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ rust: env: - TEST_COMMAND=test FEATURES=--features="yolocrypto" + - TEST_COMMAND=test FEATURES=--features="yolocrypto serde" - TEST_COMMAND=test FEATURES=--features="yolocrypto nightly" - TEST_COMMAND=bench FEATURES=--features="yolocrypto bench" - TEST_COMMAND=bench FEATURES=--features="yolocrypto nightly bench" diff --git a/Cargo.toml b/Cargo.toml index eab9733..5bdd3bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,12 +20,7 @@ travis-ci = { repository = "isislovecruft/curve25519-dalek", branch = "master"} [dependencies.serde] version = "1.0" - -[dependencies.serde_json] -version = "1.0" - -[dependencies.serde_cbor] -version = "0.6" +optional = true [dependencies.arrayref] version = "0.3.3" @@ -44,6 +39,9 @@ version = "^0.6" [dev-dependencies.sha2] version = "0.4" +[dev-dependencies.serde_cbor] +version = "0.6" + [features] nightly = ["radix_51"] default = ["std"] diff --git a/src/curve.rs b/src/curve.rs index b516321..d191a0f 100644 --- a/src/curve.rs +++ b/src/curve.rs @@ -286,11 +286,12 @@ impl CompressedMontgomeryU { // structs containing `ExtendedPoint`s and use Serde's derived // serializers to serialize those structures. -use serde::{Serialize, Deserialize}; -use serde::{Serializer, Deserializer}; +#[cfg(feature = "serde")] +use serde::{self, Serialize, Deserialize, Serializer, Deserializer}; +#[cfg(feature = "serde")] use serde::de::Visitor; -use serde; +#[cfg(feature = "serde")] impl Serialize for ExtendedPoint { fn serialize(&self, serializer: S) -> Result where S: Serializer @@ -299,6 +300,7 @@ impl Serialize for ExtendedPoint { } } +#[cfg(feature = "serde")] impl<'de> Deserialize<'de> for ExtendedPoint { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de> @@ -1610,7 +1612,7 @@ mod test { mod vartime { use super::super::*; use super::{A_SCALAR, B_SCALAR, A_TIMES_BASEPOINT, DOUBLE_SCALAR_MULT_RESULT}; - + /// Test double_scalar_mult_vartime vs ed25519.py #[test] fn double_scalar_mult_basepoint_vs_ed25519py() { @@ -1630,9 +1632,11 @@ mod test { } } + #[cfg(feature = "serde")] use serde_cbor; #[test] + #[cfg(feature = "serde")] fn serde_cbor_basepoint_roundtrip() { let output = serde_cbor::to_vec(&constants::ED25519_BASEPOINT).unwrap(); let parsed: ExtendedPoint = serde_cbor::from_slice(&output).unwrap(); diff --git a/src/decaf.rs b/src/decaf.rs index 95eb65c..fa259e5 100644 --- a/src/decaf.rs +++ b/src/decaf.rs @@ -116,11 +116,12 @@ impl Identity for CompressedDecaf { // structs containing `DecafPoint`s and use Serde's derived // serializers to serialize those structures. -use serde::{Serialize, Deserialize}; -use serde::{Serializer, Deserializer}; +#[cfg(feature = "serde")] +use serde::{self, Serialize, Deserialize, Serializer, Deserializer}; +#[cfg(feature = "serde")] use serde::de::Visitor; -use serde; +#[cfg(feature = "serde")] impl Serialize for DecafPoint { fn serialize(&self, serializer: S) -> Result where S: Serializer @@ -129,6 +130,7 @@ impl Serialize for DecafPoint { } } +#[cfg(feature = "serde")] impl<'de> Deserialize<'de> for DecafPoint { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de> @@ -436,9 +438,11 @@ mod test { use curve::Identity; use super::*; + #[cfg(feature = "serde")] use serde_cbor; #[test] + #[cfg(feature = "serde")] fn serde_cbor_basepoint_roundtrip() { let output = serde_cbor::to_vec(&constants::DECAF_ED25519_BASEPOINT).unwrap(); let parsed: DecafPoint = serde_cbor::from_slice(&output).unwrap(); diff --git a/src/lib.rs b/src/lib.rs index 91491d5..408d7ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -47,10 +47,10 @@ extern crate arrayref; extern crate generic_array; extern crate digest; -//#[cfg(feature = "serde")] +#[cfg(feature = "serde")] extern crate serde; +#[cfg(all(test, feature = "serde"))] extern crate serde_cbor; -extern crate serde_json; #[cfg(feature = "std")] extern crate core;