Skip to content

Commit

Permalink
Switch from libcollections to liballoc (gated on an "alloc" feature)
Browse files Browse the repository at this point in the history
libcollections was recently merged into liballoc:

rust-lang/rust#42648

I went ahead and also added an "alloc" feature which no_std users can use to opt
into liballoc features (i.e. any code using Vec). This should have no effect on
anything but no_std usage. It does make it possible for people without
allocators to use curve25519-dalek if they want though. Might be nice for
"bare metal" development.

All that said, from what I can gather liballoc, while not "stable", should
likely stick around for the forseeable future.

Some backstory on the liballoc/libcollections merge here:

rust-lang/rust#42565
  • Loading branch information
plotskogwq authored and tonychain committed Jun 19, 2017
1 parent e879869 commit 9f1d7fa
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 5 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ matrix:
env: TEST_COMMAND=build EXTRA_FLAGS=--no-default-features FEATURES=''
- rust: beta
env: TEST_COMMAND=build EXTRA_FLAGS=--no-default-features FEATURES=''
- rust: nightly
env: TEST_COMMAND=build EXTRA_FLAGS=--no-default-features FEATURES='alloc'

script:
- cargo $TEST_COMMAND --features="$FEATURES" $EXTRA_FLAGS
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ version = "0.6"
nightly = ["radix_51"]
default = ["std"]
std = ["rand"]
alloc = []
yolocrypto = []
bench = []
# Radix-51 arithmetic using u128
Expand Down
5 changes: 3 additions & 2 deletions src/curve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@
// affine and projective cakes and eat both of them too.
#![allow(non_snake_case)]

#[cfg(not(feature = "std"))]
use collections::Vec;
#[cfg(feature = "alloc")]
use alloc::Vec;

use core::fmt::Debug;
use core::iter::Iterator;
Expand Down Expand Up @@ -1195,6 +1195,7 @@ pub mod vartime {
///
/// A vector of `Scalar`s and a vector of `ExtendedPoints`. It is an
/// error to call this function with two vectors of different lengths.
#[cfg(any(feature = "alloc", feature = "std"))]
pub fn k_fold_scalar_mult<'a,'b,I,J>(scalars: I, points: J) -> ExtendedPoint
where I: IntoIterator<Item=&'a Scalar>, J: IntoIterator<Item=&'b ExtendedPoint>
{
Expand Down
6 changes: 3 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// - Henry de Valence <hdevalence@hdevalence.ca>

#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(not(feature = "std"), feature(collections))]
#![cfg_attr(feature = "alloc", feature(alloc))]
#![cfg_attr(feature = "nightly", feature(i128_type))]
#![cfg_attr(feature = "bench", feature(test))]

Expand Down Expand Up @@ -58,8 +58,8 @@ extern crate core;
#[cfg(feature = "std")]
extern crate rand;

#[cfg(not(feature = "std"))]
extern crate collections;
#[cfg(feature = "alloc")]
extern crate alloc;

// Modules for low-level operations directly on field elements and curve points.

Expand Down

0 comments on commit 9f1d7fa

Please sign in to comment.