mirror of
https://github.com/Qortal/pirate-librustzcash.git
synced 2025-07-30 20:11:23 +00:00
Move from Field::negate to Neg operator
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use ff::{BitIterator, Field, PrimeField, PrimeFieldRepr, SqrtField};
|
||||
use std::ops::{AddAssign, MulAssign, SubAssign};
|
||||
use std::ops::{AddAssign, MulAssign, Neg, SubAssign};
|
||||
|
||||
use super::{montgomery, JubjubEngine, JubjubParams, PrimeOrder, Unknown};
|
||||
|
||||
@@ -126,7 +126,7 @@ impl<E: JubjubEngine> Point<E, Unknown> {
|
||||
match tmp1.sqrt() {
|
||||
Some(mut x) => {
|
||||
if x.into_repr().is_odd() != sign {
|
||||
x.negate();
|
||||
x = x.neg();
|
||||
}
|
||||
|
||||
let mut t = x;
|
||||
@@ -213,12 +213,9 @@ impl<E: JubjubEngine, Subgroup> Point<E, Subgroup> {
|
||||
// only point of order 2 that is not the neutral element.
|
||||
if y.is_zero() {
|
||||
// This must be the point (0, 0) as above.
|
||||
let mut neg1 = E::Fr::one();
|
||||
neg1.negate();
|
||||
|
||||
Point {
|
||||
x: E::Fr::zero(),
|
||||
y: neg1,
|
||||
y: E::Fr::one().neg(),
|
||||
t: E::Fr::zero(),
|
||||
z: E::Fr::one(),
|
||||
_marker: PhantomData,
|
||||
@@ -324,8 +321,8 @@ impl<E: JubjubEngine, Subgroup> Point<E, Subgroup> {
|
||||
pub fn negate(&self) -> Self {
|
||||
let mut p = self.clone();
|
||||
|
||||
p.x.negate();
|
||||
p.t.negate();
|
||||
p.x = p.x.neg();
|
||||
p.t = p.t.neg();
|
||||
|
||||
p
|
||||
}
|
||||
@@ -352,8 +349,7 @@ impl<E: JubjubEngine, Subgroup> Point<E, Subgroup> {
|
||||
|
||||
// D = a*A
|
||||
// = -A
|
||||
let mut d = a;
|
||||
d.negate();
|
||||
let d = a.neg();
|
||||
|
||||
// E = (X1+Y1)^2 - A - B
|
||||
let mut e = self.x;
|
||||
|
@@ -5,7 +5,7 @@ use ff::{
|
||||
PrimeField, PrimeFieldDecodingError, PrimeFieldRepr, SqrtField,
|
||||
};
|
||||
use rand_core::RngCore;
|
||||
use std::ops::{Add, AddAssign, Mul, MulAssign, Sub, SubAssign};
|
||||
use std::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign};
|
||||
|
||||
use super::ToUniform;
|
||||
|
||||
@@ -269,6 +269,20 @@ impl From<Fs> for FsRepr {
|
||||
}
|
||||
}
|
||||
|
||||
impl Neg for Fs {
|
||||
type Output = Self;
|
||||
|
||||
#[inline]
|
||||
fn neg(mut self) -> Self {
|
||||
if !self.is_zero() {
|
||||
let mut tmp = MODULUS;
|
||||
tmp.sub_noborrow(&self.0);
|
||||
self.0 = tmp;
|
||||
}
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl<'r> Add<&'r Fs> for Fs {
|
||||
type Output = Self;
|
||||
|
||||
@@ -496,15 +510,6 @@ impl Field for Fs {
|
||||
self.reduce();
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn negate(&mut self) {
|
||||
if !self.is_zero() {
|
||||
let mut tmp = MODULUS;
|
||||
tmp.sub_noborrow(&self.0);
|
||||
self.0 = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
fn inverse(&self) -> Option<Self> {
|
||||
if self.is_zero() {
|
||||
None
|
||||
@@ -742,8 +747,7 @@ impl SqrtField for Fs {
|
||||
|
||||
#[test]
|
||||
fn test_neg_one() {
|
||||
let mut o = Fs::one();
|
||||
o.negate();
|
||||
let o = Fs::one().neg();
|
||||
|
||||
assert_eq!(NEGATIVE_ONE, o);
|
||||
}
|
||||
@@ -1471,10 +1475,9 @@ fn test_fs_double() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fs_negate() {
|
||||
fn test_fs_neg() {
|
||||
{
|
||||
let mut a = Fs::zero();
|
||||
a.negate();
|
||||
let a = Fs::zero().neg();
|
||||
|
||||
assert!(a.is_zero());
|
||||
}
|
||||
@@ -1487,8 +1490,7 @@ fn test_fs_negate() {
|
||||
for _ in 0..1000 {
|
||||
// Ensure (a - (-a)) = 0.
|
||||
let mut a = Fs::random(&mut rng);
|
||||
let mut b = a;
|
||||
b.negate();
|
||||
let b = a.neg();
|
||||
a.add_assign(&b);
|
||||
|
||||
assert!(a.is_zero());
|
||||
@@ -1534,8 +1536,7 @@ fn test_fs_sqrt() {
|
||||
for _ in 0..1000 {
|
||||
// Ensure sqrt(a^2) = a or -a
|
||||
let a = Fs::random(&mut rng);
|
||||
let mut nega = a;
|
||||
nega.negate();
|
||||
let nega = a.neg();
|
||||
let mut b = a;
|
||||
b.square();
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
use ff::{BitIterator, Field, PrimeField, PrimeFieldRepr, SqrtField};
|
||||
use std::ops::{AddAssign, MulAssign, SubAssign};
|
||||
use std::ops::{AddAssign, MulAssign, Neg, SubAssign};
|
||||
|
||||
use super::{edwards, JubjubEngine, JubjubParams, PrimeOrder, Unknown};
|
||||
|
||||
@@ -62,7 +62,7 @@ impl<E: JubjubEngine> Point<E, Unknown> {
|
||||
match rhs.sqrt() {
|
||||
Some(mut y) => {
|
||||
if y.into_repr().is_odd() != sign {
|
||||
y.negate();
|
||||
y = y.neg();
|
||||
}
|
||||
|
||||
Some(Point {
|
||||
@@ -190,7 +190,7 @@ impl<E: JubjubEngine, Subgroup> Point<E, Subgroup> {
|
||||
pub fn negate(&self) -> Self {
|
||||
let mut p = self.clone();
|
||||
|
||||
p.y.negate();
|
||||
p.y = p.y.neg();
|
||||
|
||||
p
|
||||
}
|
||||
@@ -242,7 +242,7 @@ impl<E: JubjubEngine, Subgroup> Point<E, Subgroup> {
|
||||
y3.sub_assign(&self.x);
|
||||
y3.mul_assign(&delta);
|
||||
y3.add_assign(&self.y);
|
||||
y3.negate();
|
||||
y3 = y3.neg();
|
||||
|
||||
Point {
|
||||
x: x3,
|
||||
@@ -292,7 +292,7 @@ impl<E: JubjubEngine, Subgroup> Point<E, Subgroup> {
|
||||
y3.sub_assign(&self.x);
|
||||
y3.mul_assign(&delta);
|
||||
y3.add_assign(&self.y);
|
||||
y3.negate();
|
||||
y3 = y3.neg();
|
||||
|
||||
Point {
|
||||
x: x3,
|
||||
|
@@ -1,7 +1,7 @@
|
||||
use super::{edwards, montgomery, JubjubEngine, JubjubParams, PrimeOrder};
|
||||
|
||||
use ff::{Field, LegendreSymbol, PrimeField, PrimeFieldRepr, SqrtField};
|
||||
use std::ops::{AddAssign, MulAssign, SubAssign};
|
||||
use std::ops::{AddAssign, MulAssign, Neg, SubAssign};
|
||||
|
||||
use rand_core::{RngCore, SeedableRng};
|
||||
use rand_xorshift::XorShiftRng;
|
||||
@@ -310,8 +310,7 @@ fn test_back_and_forth<E: JubjubEngine>(params: &E::Params) {
|
||||
|
||||
fn test_jubjub_params<E: JubjubEngine>(params: &E::Params) {
|
||||
// a = -1
|
||||
let mut a = E::Fr::one();
|
||||
a.negate();
|
||||
let a = E::Fr::one().neg();
|
||||
|
||||
{
|
||||
// Check that 2A is consistent with A
|
||||
@@ -339,7 +338,7 @@ fn test_jubjub_params<E: JubjubEngine>(params: &E::Params) {
|
||||
assert!(tmp.inverse().unwrap().legendre() == LegendreSymbol::QuadraticNonResidue);
|
||||
|
||||
// tmp = -d
|
||||
tmp.negate();
|
||||
tmp = tmp.neg();
|
||||
|
||||
// -d is nonsquare
|
||||
assert!(tmp.legendre() == LegendreSymbol::QuadraticNonResidue);
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
use crate::jubjub::*;
|
||||
use ff::{Field, PrimeField, PrimeFieldRepr};
|
||||
use std::ops::AddAssign;
|
||||
use std::ops::{AddAssign, Neg};
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum Personalization {
|
||||
@@ -65,7 +65,7 @@ where
|
||||
|
||||
// conditionally negate
|
||||
if c {
|
||||
tmp.negate();
|
||||
tmp = tmp.neg();
|
||||
}
|
||||
|
||||
acc.add_assign(&tmp);
|
||||
|
@@ -7,7 +7,7 @@ use crate::jubjub::{edwards::Point, FixedGenerators, JubjubEngine, JubjubParams,
|
||||
use ff::{Field, PrimeField, PrimeFieldRepr};
|
||||
use rand_core::RngCore;
|
||||
use std::io::{self, Read, Write};
|
||||
use std::ops::{AddAssign, MulAssign};
|
||||
use std::ops::{AddAssign, MulAssign, Neg};
|
||||
|
||||
use crate::util::hash_to_scalar;
|
||||
|
||||
@@ -194,7 +194,7 @@ pub fn batch_verify<'a, E: JubjubEngine, R: RngCore>(
|
||||
let z = E::Fs::random(rng);
|
||||
|
||||
s.mul_assign(&z);
|
||||
s.negate();
|
||||
s = s.neg();
|
||||
|
||||
r = r.mul(z, params);
|
||||
|
||||
|
Reference in New Issue
Block a user