Auto merge of #79 - ebfull:nomorenightly, r=ebfull

Remove feature(i128_type)

The `i128_type` feature was recently stabilized in Rust, so this is unnecessary now for nightly users. In fact, in a few days there should be a new Rust beta (`1.26`) containing stable support for `i128_type`, meaning that (for Zcash) we can switch to the beta compiler for all future Rust development, and even switch to the stable compiler in six weeks when that's released.
This commit is contained in:
bmerge 2018-03-30 23:55:32 +00:00
commit dbe897d365
6 changed files with 83 additions and 88 deletions

View File

@ -2,7 +2,7 @@
name = "pairing" name = "pairing"
# Remember to change version string in README.md. # Remember to change version string in README.md.
version = "0.14.0" version = "0.14.1"
authors = ["Sean Bowe <ewillbefull@gmail.com>"] authors = ["Sean Bowe <ewillbefull@gmail.com>"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
@ -14,7 +14,7 @@ repository = "https://github.com/ebfull/pairing"
[dependencies] [dependencies]
rand = "0.4" rand = "0.4"
byteorder = "1" byteorder = "1"
clippy = { version = "0.0.186", optional = true } clippy = { version = "0.0.190", optional = true }
[features] [features]
unstable-features = ["expose-arith"] unstable-features = ["expose-arith"]

View File

@ -2135,15 +2135,14 @@ fn test_fq_repr_sub_noborrow() {
0x7c0577a26f59d5, 0x7c0577a26f59d5,
])); ]));
assert!( assert!(
t t == FqRepr([
== FqRepr([ 0x40a12b8967c54bae,
0x40a12b8967c54bae, 0xdeae37a0837d0d7b,
0xdeae37a0837d0d7b, 0xe592c487bae374e,
0xe592c487bae374e, 0xaf26bbc934462a61,
0xaf26bbc934462a61, 0x32d6cc6e2b7a4a03,
0x32d6cc6e2b7a4a03, 0xcdaf23e091c0313
0xcdaf23e091c0313 ])
])
); );
for _ in 0..1000 { for _ in 0..1000 {
@ -2223,15 +2222,14 @@ fn test_fq_repr_add_nocarry() {
0x7c0577a26f59d5, 0x7c0577a26f59d5,
])); ]));
assert!( assert!(
t t == FqRepr([
== FqRepr([ 0xcfae1db798be8c04,
0xcfae1db798be8c04, 0x999906db15a10d5a,
0x999906db15a10d5a, 0x270fa8d9defc6f79,
0x270fa8d9defc6f79, 0x83abb199c240f7b6,
0x83abb199c240f7b6, 0x27469abae93e1ff6,
0x27469abae93e1ff6, 0xdd2fd2d4dfab6be
0xdd2fd2d4dfab6be ])
])
); );
// Test for the associativity of addition. // Test for the associativity of addition.
@ -2575,15 +2573,14 @@ fn test_fq_mul_assign() {
0x1162b680fb8e9566, 0x1162b680fb8e9566,
]))); ])));
assert!( assert!(
tmp tmp == Fq(FqRepr([
== Fq(FqRepr([ 0x9dc4000001ebfe14,
0x9dc4000001ebfe14, 0x2850078997b00193,
0x2850078997b00193, 0xa8197f1abb4d7bf,
0xa8197f1abb4d7bf, 0xc0309573f4bfe871,
0xc0309573f4bfe871, 0xf48d0923ffaf7620,
0xf48d0923ffaf7620, 0x11d4b58c7a926e66
0x11d4b58c7a926e66 ]))
]))
); );
let mut rng = XorShiftRng::from_seed([0x5dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]); let mut rng = XorShiftRng::from_seed([0x5dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]);

View File

@ -849,13 +849,12 @@ fn test_fr_repr_sub_noborrow() {
0x298a30c744b31acf, 0x298a30c744b31acf,
])); ]));
assert!( assert!(
t t == FrRepr([
== FrRepr([ 0xb813415048991c1f,
0xb813415048991c1f, 0x10ad07ae88725d92,
0x10ad07ae88725d92, 0x5a7b851271759961,
0x5a7b851271759961, 0x36850eedd30c39c5
0x36850eedd30c39c5 ])
])
); );
for _ in 0..1000 { for _ in 0..1000 {
@ -1252,13 +1251,12 @@ fn test_fr_mul_assign() {
0x5ae3f03b561a841d, 0x5ae3f03b561a841d,
]))); ])));
assert!( assert!(
tmp tmp == Fr(FrRepr([
== Fr(FrRepr([ 0x23717213ce710f71,
0x23717213ce710f71, 0xdbee1fe53a16e1af,
0xdbee1fe53a16e1af, 0xf565d3e1c2a48000,
0xf565d3e1c2a48000, 0x4426507ee75df9d7
0x4426507ee75df9d7 ]))
]))
); );
let mut rng = XorShiftRng::from_seed([0x5dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]); let mut rng = XorShiftRng::from_seed([0x5dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]);

View File

@ -350,7 +350,7 @@ impl G2Prepared {
coeffs.push(doubling_step(&mut r)); coeffs.push(doubling_step(&mut r));
G2Prepared { G2Prepared {
coeffs: coeffs, coeffs,
infinity: false, infinity: false,
} }
} }

View File

@ -1,6 +1,3 @@
// If the "u128-support" feature is enabled, this library can use
// more efficient arithmetic. Only available in the nightly compiler.
#![cfg_attr(feature = "u128-support", feature(i128_type))]
// `clippy` is a code linting tool for improving code quality by catching // `clippy` is a code linting tool for improving code quality by catching
// common mistakes or strange code patterns. If the `clippy` feature is // common mistakes or strange code patterns. If the `clippy` feature is
// provided, it is enabled and all compiler warnings are prohibited. // provided, it is enabled and all compiler warnings are prohibited.
@ -39,42 +36,42 @@ pub trait Engine: Sized + 'static + Clone {
/// The projective representation of an element in G1. /// The projective representation of an element in G1.
type G1: CurveProjective< type G1: CurveProjective<
Engine = Self, Engine = Self,
Base = Self::Fq, Base = Self::Fq,
Scalar = Self::Fr, Scalar = Self::Fr,
Affine = Self::G1Affine, Affine = Self::G1Affine,
> >
+ From<Self::G1Affine>; + From<Self::G1Affine>;
/// The affine representation of an element in G1. /// The affine representation of an element in G1.
type G1Affine: CurveAffine< type G1Affine: CurveAffine<
Engine = Self, Engine = Self,
Base = Self::Fq, Base = Self::Fq,
Scalar = Self::Fr, Scalar = Self::Fr,
Projective = Self::G1, Projective = Self::G1,
Pair = Self::G2Affine, Pair = Self::G2Affine,
PairingResult = Self::Fqk, PairingResult = Self::Fqk,
> >
+ From<Self::G1>; + From<Self::G1>;
/// The projective representation of an element in G2. /// The projective representation of an element in G2.
type G2: CurveProjective< type G2: CurveProjective<
Engine = Self, Engine = Self,
Base = Self::Fqe, Base = Self::Fqe,
Scalar = Self::Fr, Scalar = Self::Fr,
Affine = Self::G2Affine, Affine = Self::G2Affine,
> >
+ From<Self::G2Affine>; + From<Self::G2Affine>;
/// The affine representation of an element in G2. /// The affine representation of an element in G2.
type G2Affine: CurveAffine< type G2Affine: CurveAffine<
Engine = Self, Engine = Self,
Base = Self::Fqe, Base = Self::Fqe,
Scalar = Self::Fr, Scalar = Self::Fr,
Projective = Self::G2, Projective = Self::G2,
Pair = Self::G1Affine, Pair = Self::G1Affine,
PairingResult = Self::Fqk, PairingResult = Self::Fqk,
> >
+ From<Self::G2>; + From<Self::G2>;
/// The base field that hosts G1. /// The base field that hosts G1.
@ -113,8 +110,8 @@ pub trait Engine: Sized + 'static + Clone {
/// Projective representation of an elliptic curve point guaranteed to be /// Projective representation of an elliptic curve point guaranteed to be
/// in the correct prime order subgroup. /// in the correct prime order subgroup.
pub trait CurveProjective pub trait CurveProjective:
: PartialEq PartialEq
+ Eq + Eq
+ Sized + Sized
+ Copy + Copy
@ -124,7 +121,8 @@ pub trait CurveProjective
+ fmt::Debug + fmt::Debug
+ fmt::Display + fmt::Display
+ rand::Rand + rand::Rand
+ 'static { + 'static
{
type Engine: Engine<Fr = Self::Scalar>; type Engine: Engine<Fr = Self::Scalar>;
type Scalar: PrimeField + SqrtField; type Scalar: PrimeField + SqrtField;
type Base: SqrtField; type Base: SqrtField;
@ -183,9 +181,9 @@ pub trait CurveProjective
/// Affine representation of an elliptic curve point guaranteed to be /// Affine representation of an elliptic curve point guaranteed to be
/// in the correct prime order subgroup. /// in the correct prime order subgroup.
pub trait CurveAffine pub trait CurveAffine:
: Copy + Clone + Sized + Send + Sync + fmt::Debug + fmt::Display + PartialEq + Eq + 'static Copy + Clone + Sized + Send + Sync + fmt::Debug + fmt::Display + PartialEq + Eq + 'static
{ {
type Engine: Engine<Fr = Self::Scalar>; type Engine: Engine<Fr = Self::Scalar>;
type Scalar: PrimeField + SqrtField; type Scalar: PrimeField + SqrtField;
type Base: SqrtField; type Base: SqrtField;
@ -235,8 +233,9 @@ pub trait CurveAffine
} }
/// An encoded elliptic curve point, which should essentially wrap a `[u8; N]`. /// An encoded elliptic curve point, which should essentially wrap a `[u8; N]`.
pub trait EncodedPoint pub trait EncodedPoint:
: Sized + Send + Sync + AsRef<[u8]> + AsMut<[u8]> + Clone + Copy + 'static { Sized + Send + Sync + AsRef<[u8]> + AsMut<[u8]> + Clone + Copy + 'static
{
type Affine: CurveAffine; type Affine: CurveAffine;
/// Creates an empty representation. /// Creates an empty representation.
@ -264,9 +263,9 @@ pub trait EncodedPoint
} }
/// This trait represents an element of a field. /// This trait represents an element of a field.
pub trait Field pub trait Field:
: Sized + Eq + Copy + Clone + Send + Sync + fmt::Debug + fmt::Display + 'static + rand::Rand Sized + Eq + Copy + Clone + Send + Sync + fmt::Debug + fmt::Display + 'static + rand::Rand
{ {
/// Returns the zero element of the field, the additive identity. /// Returns the zero element of the field, the additive identity.
fn zero() -> Self; fn zero() -> Self;
@ -337,8 +336,8 @@ pub trait SqrtField: Field {
/// This trait represents a wrapper around a biginteger which can encode any element of a particular /// This trait represents a wrapper around a biginteger which can encode any element of a particular
/// prime field. It is a smart wrapper around a sequence of `u64` limbs, least-significant digit /// prime field. It is a smart wrapper around a sequence of `u64` limbs, least-significant digit
/// first. /// first.
pub trait PrimeFieldRepr pub trait PrimeFieldRepr:
: Sized Sized
+ Copy + Copy
+ Clone + Clone
+ Eq + Eq
@ -352,7 +351,8 @@ pub trait PrimeFieldRepr
+ rand::Rand + rand::Rand
+ AsRef<[u64]> + AsRef<[u64]>
+ AsMut<[u64]> + AsMut<[u64]>
+ From<u64> { + From<u64>
{
/// Subtract another represetation from this one. /// Subtract another represetation from this one.
fn sub_noborrow(&mut self, other: &Self); fn sub_noborrow(&mut self, other: &Self);
@ -566,7 +566,7 @@ impl<E: AsRef<[u64]>> BitIterator<E> {
pub fn new(t: E) -> Self { pub fn new(t: E) -> Self {
let n = t.as_ref().len() * 64; let n = t.as_ref().len() * 64;
BitIterator { t: t, n: n } BitIterator { t, n }
} }
} }

View File

@ -102,7 +102,7 @@ impl<G: CurveProjective> Wnaf<(), Vec<G>, Vec<i64>> {
Wnaf { Wnaf {
base: &self.base[..], base: &self.base[..],
scalar: &mut self.scalar, scalar: &mut self.scalar,
window_size: window_size, window_size,
} }
} }
@ -123,7 +123,7 @@ impl<G: CurveProjective> Wnaf<(), Vec<G>, Vec<i64>> {
Wnaf { Wnaf {
base: &mut self.base, base: &mut self.base,
scalar: &self.scalar[..], scalar: &self.scalar[..],
window_size: window_size, window_size,
} }
} }
} }