cargo fmt pairing
This commit is contained in:
parent
5635612252
commit
013fd03d86
|
@ -14,11 +14,10 @@ macro_rules! curve_impl {
|
|||
pub struct $affine {
|
||||
pub(crate) x: $basefield,
|
||||
pub(crate) y: $basefield,
|
||||
pub(crate) infinity: bool
|
||||
pub(crate) infinity: bool,
|
||||
}
|
||||
|
||||
impl ::std::fmt::Display for $affine
|
||||
{
|
||||
impl ::std::fmt::Display for $affine {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
if self.infinity {
|
||||
write!(f, "{}(Infinity)", $name)
|
||||
|
@ -30,13 +29,12 @@ macro_rules! curve_impl {
|
|||
|
||||
#[derive(Copy, Clone, Debug, Eq)]
|
||||
pub struct $projective {
|
||||
pub(crate) x: $basefield,
|
||||
pub(crate) y: $basefield,
|
||||
pub(crate) z: $basefield
|
||||
pub(crate) x: $basefield,
|
||||
pub(crate) y: $basefield,
|
||||
pub(crate) z: $basefield,
|
||||
}
|
||||
|
||||
impl ::std::fmt::Display for $projective
|
||||
{
|
||||
impl ::std::fmt::Display for $projective {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
write!(f, "{}", self.into_affine())
|
||||
}
|
||||
|
@ -89,7 +87,9 @@ macro_rules! curve_impl {
|
|||
let mut res = $projective::zero();
|
||||
for i in bits {
|
||||
res.double();
|
||||
if i { res.add_assign_mixed(self) }
|
||||
if i {
|
||||
res.add_assign_mixed(self)
|
||||
}
|
||||
}
|
||||
res
|
||||
}
|
||||
|
@ -112,12 +112,8 @@ macro_rules! curve_impl {
|
|||
|
||||
$affine {
|
||||
x: x,
|
||||
y: if (y < negy) ^ greatest {
|
||||
y
|
||||
} else {
|
||||
negy
|
||||
},
|
||||
infinity: false
|
||||
y: if (y < negy) ^ greatest { y } else { negy },
|
||||
infinity: false,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -156,7 +152,7 @@ macro_rules! curve_impl {
|
|||
$affine {
|
||||
x: $basefield::zero(),
|
||||
y: $basefield::one(),
|
||||
infinity: true
|
||||
infinity: true,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -182,7 +178,6 @@ macro_rules! curve_impl {
|
|||
fn into_projective(&self) -> $projective {
|
||||
(*self).into()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
impl PairingCurveAffine for $affine {
|
||||
|
@ -197,7 +192,6 @@ macro_rules! curve_impl {
|
|||
fn pairing_with(&self, other: &Self::Pair) -> Self::PairingResult {
|
||||
self.perform_pairing(other)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
impl CurveProjective for $projective {
|
||||
|
@ -227,7 +221,7 @@ macro_rules! curve_impl {
|
|||
$projective {
|
||||
x: $basefield::zero(),
|
||||
y: $basefield::one(),
|
||||
z: $basefield::zero()
|
||||
z: $basefield::zero(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,8 +239,7 @@ macro_rules! curve_impl {
|
|||
self.is_zero() || self.z == $basefield::one()
|
||||
}
|
||||
|
||||
fn batch_normalization(v: &mut [Self])
|
||||
{
|
||||
fn batch_normalization(v: &mut [Self]) {
|
||||
// Montgomery’s Trick and Fast Implementation of Masked AES
|
||||
// Genelle, Prouff and Quisquater
|
||||
// Section 3.2
|
||||
|
@ -254,9 +247,10 @@ macro_rules! curve_impl {
|
|||
// First pass: compute [a, ab, abc, ...]
|
||||
let mut prod = Vec::with_capacity(v.len());
|
||||
let mut tmp = $basefield::one();
|
||||
for g in v.iter_mut()
|
||||
// Ignore normalized elements
|
||||
.filter(|g| !g.is_normalized())
|
||||
for g in v
|
||||
.iter_mut()
|
||||
// Ignore normalized elements
|
||||
.filter(|g| !g.is_normalized())
|
||||
{
|
||||
tmp.mul_assign(&g.z);
|
||||
prod.push(tmp);
|
||||
|
@ -266,13 +260,19 @@ macro_rules! curve_impl {
|
|||
tmp = tmp.inverse().unwrap(); // Guaranteed to be nonzero.
|
||||
|
||||
// Second pass: iterate backwards to compute inverses
|
||||
for (g, s) in v.iter_mut()
|
||||
// Backwards
|
||||
.rev()
|
||||
// Ignore normalized elements
|
||||
.filter(|g| !g.is_normalized())
|
||||
// Backwards, skip last element, fill in one for last term.
|
||||
.zip(prod.into_iter().rev().skip(1).chain(Some($basefield::one())))
|
||||
for (g, s) in v
|
||||
.iter_mut()
|
||||
// Backwards
|
||||
.rev()
|
||||
// Ignore normalized elements
|
||||
.filter(|g| !g.is_normalized())
|
||||
// Backwards, skip last element, fill in one for last term.
|
||||
.zip(
|
||||
prod.into_iter()
|
||||
.rev()
|
||||
.skip(1)
|
||||
.chain(Some($basefield::one())),
|
||||
)
|
||||
{
|
||||
// tmp := tmp * g.z; g.z := tmp * s = 1/z
|
||||
let mut newtmp = tmp;
|
||||
|
@ -283,9 +283,7 @@ macro_rules! curve_impl {
|
|||
}
|
||||
|
||||
// Perform affine transformations
|
||||
for g in v.iter_mut()
|
||||
.filter(|g| !g.is_normalized())
|
||||
{
|
||||
for g in v.iter_mut().filter(|g| !g.is_normalized()) {
|
||||
let mut z = g.z; // 1/z
|
||||
z.square(); // 1/z^2
|
||||
g.x.mul_assign(&z); // x/z^2
|
||||
|
@ -538,8 +536,7 @@ macro_rules! curve_impl {
|
|||
|
||||
let mut found_one = false;
|
||||
|
||||
for i in BitIterator::new(other.into())
|
||||
{
|
||||
for i in BitIterator::new(other.into()) {
|
||||
if found_one {
|
||||
res.double();
|
||||
} else {
|
||||
|
@ -577,7 +574,7 @@ macro_rules! curve_impl {
|
|||
$projective {
|
||||
x: p.x,
|
||||
y: p.y,
|
||||
z: $basefield::one()
|
||||
z: $basefield::one(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -594,7 +591,7 @@ macro_rules! curve_impl {
|
|||
$affine {
|
||||
x: p.x,
|
||||
y: p.y,
|
||||
infinity: false
|
||||
infinity: false,
|
||||
}
|
||||
} else {
|
||||
// Z is nonzero, so it must have an inverse in a field.
|
||||
|
@ -614,12 +611,12 @@ macro_rules! curve_impl {
|
|||
$affine {
|
||||
x: x,
|
||||
y: y,
|
||||
infinity: false
|
||||
infinity: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
pub mod g1 {
|
||||
|
@ -990,7 +987,8 @@ pub mod g1 {
|
|||
0x9fe83b1b4a5d648d,
|
||||
0xf583cc5a508f6a40,
|
||||
0xc3ad2aefde0bb13,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0x60aa6f9552f03aae,
|
||||
0xecd01d5181300d35,
|
||||
|
@ -998,7 +996,8 @@ pub mod g1 {
|
|||
0xe760f57922998c9d,
|
||||
0x953703f5795a39e5,
|
||||
0xfe3ae0922df702c,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
};
|
||||
assert!(!p.is_on_curve());
|
||||
|
@ -1015,7 +1014,8 @@ pub mod g1 {
|
|||
0xea034ee2928b30a8,
|
||||
0xbd8833dc7c79a7f7,
|
||||
0xe45c9f0c0438675,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0x3b450eb1ab7b5dad,
|
||||
0xa65cb81e975e8675,
|
||||
|
@ -1023,7 +1023,8 @@ pub mod g1 {
|
|||
0x753ddf21a2601d20,
|
||||
0x532d0b640bd3ff8b,
|
||||
0x118d2c543f031102,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
};
|
||||
assert!(!p.is_on_curve());
|
||||
|
@ -1041,7 +1042,8 @@ pub mod g1 {
|
|||
0xf35de9ce0d6b4e84,
|
||||
0x265bddd23d1dec54,
|
||||
0x12a8778088458308,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0x8a22defa0d526256,
|
||||
0xc57ca55456fcb9ae,
|
||||
|
@ -1049,7 +1051,8 @@ pub mod g1 {
|
|||
0x921beef89d4f29df,
|
||||
0x5b6fda44ad85fa78,
|
||||
0xed74ab9f302cbe0,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
};
|
||||
assert!(p.is_on_curve());
|
||||
|
@ -1067,7 +1070,8 @@ pub mod g1 {
|
|||
0x485e77d50a5df10d,
|
||||
0x4c6fcac4b55fd479,
|
||||
0x86ed4d9906fb064,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0xd25ee6461538c65,
|
||||
0x9f3bbb2ecd3719b9,
|
||||
|
@ -1075,7 +1079,8 @@ pub mod g1 {
|
|||
0xcefca68333c35288,
|
||||
0x570c8005f8573fa6,
|
||||
0x152ca696fe034442,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
z: Fq::one(),
|
||||
};
|
||||
|
||||
|
@ -1087,7 +1092,8 @@ pub mod g1 {
|
|||
0x5f44314ec5e3fb03,
|
||||
0x24e8538737c6e675,
|
||||
0x8abd623a594fba8,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0x6b0528f088bb7044,
|
||||
0x2fdeb5c82917ff9e,
|
||||
|
@ -1095,7 +1101,8 @@ pub mod g1 {
|
|||
0xd65104c6f95a872a,
|
||||
0x1f2998a5a9c61253,
|
||||
0xe74846154a9e44,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
z: Fq::one(),
|
||||
});
|
||||
|
||||
|
@ -1111,7 +1118,8 @@ pub mod g1 {
|
|||
0xc4f9a52a428e23bb,
|
||||
0xd178b28dd4f407ef,
|
||||
0x17fb8905e9183c69
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0xd0de9d65292b7710,
|
||||
0xf6a05f2bcf1d9ca7,
|
||||
|
@ -1119,7 +1127,8 @@ pub mod g1 {
|
|||
0xeec8d1a5b7466c58,
|
||||
0x4bc362649dce6376,
|
||||
0x430cbdc5455b00a
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
}
|
||||
);
|
||||
|
@ -1135,7 +1144,8 @@ pub mod g1 {
|
|||
0x485e77d50a5df10d,
|
||||
0x4c6fcac4b55fd479,
|
||||
0x86ed4d9906fb064,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0xd25ee6461538c65,
|
||||
0x9f3bbb2ecd3719b9,
|
||||
|
@ -1143,7 +1153,8 @@ pub mod g1 {
|
|||
0xcefca68333c35288,
|
||||
0x570c8005f8573fa6,
|
||||
0x152ca696fe034442,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
z: Fq::one(),
|
||||
};
|
||||
|
||||
|
@ -1161,7 +1172,8 @@ pub mod g1 {
|
|||
0x4b914c16687dcde0,
|
||||
0x66c8baf177d20533,
|
||||
0xaf960cff3d83833
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0x3f0675695f5177a8,
|
||||
0x2b6d82ae178a1ba0,
|
||||
|
@ -1169,7 +1181,8 @@ pub mod g1 {
|
|||
0x1771a65b60572f4e,
|
||||
0x8b547c1313b27555,
|
||||
0x135075589a687b1e
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
}
|
||||
);
|
||||
|
@ -1192,7 +1205,8 @@ pub mod g1 {
|
|||
0x71ffa8021531705,
|
||||
0x7418d484386d267,
|
||||
0xd5108d8ff1fbd6,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0xa776ccbfe9981766,
|
||||
0x255632964ff40f4a,
|
||||
|
@ -1200,7 +1214,8 @@ pub mod g1 {
|
|||
0x520f74773e74c8c3,
|
||||
0x484c8fc982008f0,
|
||||
0xee2c3d922008cc6,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
};
|
||||
|
||||
|
@ -1212,7 +1227,8 @@ pub mod g1 {
|
|||
0xc6e05201e5f83991,
|
||||
0xf7c75910816f207c,
|
||||
0x18d4043e78103106,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0xa776ccbfe9981766,
|
||||
0x255632964ff40f4a,
|
||||
|
@ -1220,7 +1236,8 @@ pub mod g1 {
|
|||
0x520f74773e74c8c3,
|
||||
0x484c8fc982008f0,
|
||||
0xee2c3d922008cc6,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
};
|
||||
|
||||
|
@ -1235,7 +1252,8 @@ pub mod g1 {
|
|||
0x9676ff02ec39c227,
|
||||
0x4c12c15d7e55b9f3,
|
||||
0x57fd1e317db9bd,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
y: Fq::from_repr(FqRepr([
|
||||
0x1288334016679345,
|
||||
0xf955cd68615ff0b5,
|
||||
|
@ -1243,7 +1261,8 @@ pub mod g1 {
|
|||
0x1267d70db51049fb,
|
||||
0x4696deb9ab2ba3e7,
|
||||
0xb1e4e11177f59d4,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
infinity: false,
|
||||
};
|
||||
|
||||
|
@ -1673,7 +1692,8 @@ pub mod g2 {
|
|||
0x7a17a004747e3dbe,
|
||||
0xcc65406a7c2e5a73,
|
||||
0x10b8c03d64db4d0c,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xd30e70fe2f029778,
|
||||
0xda30772df0f5212e,
|
||||
|
@ -1681,7 +1701,8 @@ pub mod g2 {
|
|||
0xfb777e5b9b568608,
|
||||
0x789bac1fec71a2b9,
|
||||
0x1342f02e2da54405,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -1691,7 +1712,8 @@ pub mod g2 {
|
|||
0x663015d9410eb608,
|
||||
0x78e82a79d829a544,
|
||||
0x40a00545bb3c1e,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x4709802348e79377,
|
||||
0xb5ac4dc9204bcfbd,
|
||||
|
@ -1699,7 +1721,8 @@ pub mod g2 {
|
|||
0x15008b1dc399e8df,
|
||||
0x68128fd0548a3829,
|
||||
0x16a613db5c873aaa,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
infinity: false,
|
||||
};
|
||||
|
@ -1718,7 +1741,8 @@ pub mod g2 {
|
|||
0x41abba710d6c692c,
|
||||
0xffcc4b2b62ce8484,
|
||||
0x6993ec01b8934ed,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xb94e92d5f874e26,
|
||||
0x44516408bc115d95,
|
||||
|
@ -1726,7 +1750,8 @@ pub mod g2 {
|
|||
0xa5a0c2b7131f3555,
|
||||
0x83800965822367e7,
|
||||
0x10cf1d3ad8d90bfa,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -1736,7 +1761,8 @@ pub mod g2 {
|
|||
0x5a9171720e73eb51,
|
||||
0x38eb4fd8d658adb7,
|
||||
0xb649051bbc1164d,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x9225814253d7df75,
|
||||
0xc196c2513477f887,
|
||||
|
@ -1744,7 +1770,8 @@ pub mod g2 {
|
|||
0x55f2b8efad953e04,
|
||||
0x7379345eda55265e,
|
||||
0x377f2e6208fd4cb,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
infinity: false,
|
||||
};
|
||||
|
@ -1764,7 +1791,8 @@ pub mod g2 {
|
|||
0x2199bc19c48c393d,
|
||||
0x4a151b732a6075bf,
|
||||
0x17762a3b9108c4a7,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x26f461e944bbd3d1,
|
||||
0x298f3189a9cf6ed6,
|
||||
|
@ -1772,7 +1800,8 @@ pub mod g2 {
|
|||
0x7e147f3f9e6e241,
|
||||
0x72a9b63583963fff,
|
||||
0x158b0083c000462,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -1782,7 +1811,8 @@ pub mod g2 {
|
|||
0x68cad19430706b4d,
|
||||
0x3ccfb97b924dcea8,
|
||||
0x1660f93434588f8d,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xaaed3985b6dcb9c7,
|
||||
0xc1e985d6d898d9f4,
|
||||
|
@ -1790,7 +1820,8 @@ pub mod g2 {
|
|||
0x3940a2dbb914b529,
|
||||
0xbeb88137cf34f3e7,
|
||||
0x1699ee577c61b694,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
infinity: false,
|
||||
};
|
||||
|
@ -1810,7 +1841,8 @@ pub mod g2 {
|
|||
0x72556c999f3707ac,
|
||||
0x4617f2e6774e9711,
|
||||
0x100b2fe5bffe030b,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x7a33555977ec608,
|
||||
0xe23039d1fe9c0881,
|
||||
|
@ -1818,7 +1850,8 @@ pub mod g2 {
|
|||
0x4637c4f417667e2e,
|
||||
0x93ebe7c3e41f6acc,
|
||||
0xde884f89a9a371b,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -1828,7 +1861,8 @@ pub mod g2 {
|
|||
0x25fd427b4122f231,
|
||||
0xd83112aace35cae,
|
||||
0x191b2432407cbb7f,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xf68ae82fe97662f5,
|
||||
0xe986057068b50b7d,
|
||||
|
@ -1836,7 +1870,8 @@ pub mod g2 {
|
|||
0x9eaa6d19de569196,
|
||||
0xf6a03d31e2ec2183,
|
||||
0x3bdafaf7ca9b39b,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
z: Fq2::one(),
|
||||
};
|
||||
|
@ -1850,7 +1885,8 @@ pub mod g2 {
|
|||
0x8e73a96b329ad190,
|
||||
0x27c546f75ee1f3ab,
|
||||
0xa33d27add5e7e82,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x93b1ebcd54870dfe,
|
||||
0xf1578300e1342e11,
|
||||
|
@ -1858,7 +1894,8 @@ pub mod g2 {
|
|||
0x2089faf462438296,
|
||||
0x828e5848cd48ea66,
|
||||
0x141ecbac1deb038b,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -1868,7 +1905,8 @@ pub mod g2 {
|
|||
0x2767032fc37cc31d,
|
||||
0xd5ee2aba84fd10fe,
|
||||
0x16576ccd3dd0a4e8,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x4da9b6f6a96d1dd2,
|
||||
0x9657f7da77f1650e,
|
||||
|
@ -1876,7 +1914,8 @@ pub mod g2 {
|
|||
0x31898db63f87363a,
|
||||
0xabab040ddbd097cc,
|
||||
0x11ad236b9ba02990,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
z: Fq2::one(),
|
||||
});
|
||||
|
@ -1894,7 +1933,8 @@ pub mod g2 {
|
|||
0xf1273e6406eef9cc,
|
||||
0xababd760ff05cb92,
|
||||
0xd7c20456617e89
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xd1a50b8572cbd2b8,
|
||||
0x238f0ac6119d07df,
|
||||
|
@ -1902,7 +1942,8 @@ pub mod g2 {
|
|||
0x8b203284c51edf6b,
|
||||
0xc8a0b730bbb21f5e,
|
||||
0x1a3b59d29a31274
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -1912,7 +1953,8 @@ pub mod g2 {
|
|||
0x64528ab3863633dc,
|
||||
0x159384333d7cba97,
|
||||
0x4cb84741f3cafe8
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x242af0dc3640e1a4,
|
||||
0xe90a73ad65c66919,
|
||||
|
@ -1920,7 +1962,8 @@ pub mod g2 {
|
|||
0x38528f92b689644d,
|
||||
0xb6884deec59fb21f,
|
||||
0x3c075d3ec52ba90
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
infinity: false,
|
||||
}
|
||||
|
@ -1938,7 +1981,8 @@ pub mod g2 {
|
|||
0x72556c999f3707ac,
|
||||
0x4617f2e6774e9711,
|
||||
0x100b2fe5bffe030b,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x7a33555977ec608,
|
||||
0xe23039d1fe9c0881,
|
||||
|
@ -1946,7 +1990,8 @@ pub mod g2 {
|
|||
0x4637c4f417667e2e,
|
||||
0x93ebe7c3e41f6acc,
|
||||
0xde884f89a9a371b,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -1956,7 +2001,8 @@ pub mod g2 {
|
|||
0x25fd427b4122f231,
|
||||
0xd83112aace35cae,
|
||||
0x191b2432407cbb7f,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xf68ae82fe97662f5,
|
||||
0xe986057068b50b7d,
|
||||
|
@ -1964,7 +2010,8 @@ pub mod g2 {
|
|||
0x9eaa6d19de569196,
|
||||
0xf6a03d31e2ec2183,
|
||||
0x3bdafaf7ca9b39b,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
z: Fq2::one(),
|
||||
};
|
||||
|
@ -1984,7 +2031,8 @@ pub mod g2 {
|
|||
0xbcedcfce1e52d986,
|
||||
0x9755d4a3926e9862,
|
||||
0x18bab73760fd8024
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x4e7c5e0a2ae5b99e,
|
||||
0x96e582a27f028961,
|
||||
|
@ -1992,7 +2040,8 @@ pub mod g2 {
|
|||
0xeb0cf5e610ef4fe7,
|
||||
0x7b4c2bae8db6e70b,
|
||||
0xf136e43909fca0
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
y: Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -2002,7 +2051,8 @@ pub mod g2 {
|
|||
0xa5a2a51f7fde787b,
|
||||
0x8b92866bc6384188,
|
||||
0x81a53fe531d64ef
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x4c5d607666239b34,
|
||||
0xeddb5f48304d14b3,
|
||||
|
@ -2010,7 +2060,8 @@ pub mod g2 {
|
|||
0xb271f52f12ead742,
|
||||
0x244e6c2015c83348,
|
||||
0x19e2deae6eb9b441
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
},
|
||||
infinity: false,
|
||||
}
|
||||
|
|
|
@ -1582,26 +1582,24 @@ fn test_fq_is_valid() {
|
|||
a.0.sub_noborrow(&FqRepr::from(1));
|
||||
assert!(a.is_valid());
|
||||
assert!(Fq(FqRepr::from(0)).is_valid());
|
||||
assert!(
|
||||
Fq(FqRepr([
|
||||
0xdf4671abd14dab3e,
|
||||
0xe2dc0c9f534fbd33,
|
||||
0x31ca6c880cc444a6,
|
||||
0x257a67e70ef33359,
|
||||
0xf9b29e493f899b36,
|
||||
0x17c8be1800b9f059
|
||||
])).is_valid()
|
||||
);
|
||||
assert!(
|
||||
!Fq(FqRepr([
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff
|
||||
])).is_valid()
|
||||
);
|
||||
assert!(Fq(FqRepr([
|
||||
0xdf4671abd14dab3e,
|
||||
0xe2dc0c9f534fbd33,
|
||||
0x31ca6c880cc444a6,
|
||||
0x257a67e70ef33359,
|
||||
0xf9b29e493f899b36,
|
||||
0x17c8be1800b9f059
|
||||
]))
|
||||
.is_valid());
|
||||
assert!(!Fq(FqRepr([
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff
|
||||
]))
|
||||
.is_valid());
|
||||
|
||||
let mut rng = XorShiftRng::from_seed([
|
||||
0x59, 0x62, 0xbe, 0x5d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06, 0xbc,
|
||||
|
@ -1949,7 +1947,8 @@ fn test_fq_squaring() {
|
|||
0xdc05c659b4e15b27,
|
||||
0x79361e5a802c6a23,
|
||||
0x24bcbe5d51b9a6f
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
);
|
||||
|
||||
let mut rng = XorShiftRng::from_seed([
|
||||
|
@ -2099,16 +2098,15 @@ fn test_fq_sqrt() {
|
|||
#[test]
|
||||
fn test_fq_from_into_repr() {
|
||||
// q + 1 should not be in the field
|
||||
assert!(
|
||||
Fq::from_repr(FqRepr([
|
||||
0xb9feffffffffaaac,
|
||||
0x1eabfffeb153ffff,
|
||||
0x6730d2a0f6b0f624,
|
||||
0x64774b84f38512bf,
|
||||
0x4b1ba7b6434bacd7,
|
||||
0x1a0111ea397fe69a
|
||||
])).is_err()
|
||||
);
|
||||
assert!(Fq::from_repr(FqRepr([
|
||||
0xb9feffffffffaaac,
|
||||
0x1eabfffeb153ffff,
|
||||
0x6730d2a0f6b0f624,
|
||||
0x64774b84f38512bf,
|
||||
0x4b1ba7b6434bacd7,
|
||||
0x1a0111ea397fe69a
|
||||
]))
|
||||
.is_err());
|
||||
|
||||
// q should not be in the field
|
||||
assert!(Fq::from_repr(Fq::char()).is_err());
|
||||
|
|
|
@ -2,7 +2,7 @@ use super::fq::FROBENIUS_COEFF_FQ12_C1;
|
|||
use super::fq2::Fq2;
|
||||
use super::fq6::Fq6;
|
||||
use ff::Field;
|
||||
use rand_core::{RngCore};
|
||||
use rand_core::RngCore;
|
||||
|
||||
/// An element of Fq12, represented by c0 + c1 * w.
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use super::fq::{FROBENIUS_COEFF_FQ2_C1, Fq, NEGATIVE_ONE};
|
||||
use super::fq::{Fq, FROBENIUS_COEFF_FQ2_C1, NEGATIVE_ONE};
|
||||
use ff::{Field, SqrtField};
|
||||
use rand_core::RngCore;
|
||||
|
||||
|
@ -261,12 +261,11 @@ fn test_fq2_basics() {
|
|||
);
|
||||
assert!(Fq2::zero().is_zero());
|
||||
assert!(!Fq2::one().is_zero());
|
||||
assert!(
|
||||
!Fq2 {
|
||||
c0: Fq::zero(),
|
||||
c1: Fq::one(),
|
||||
}.is_zero()
|
||||
);
|
||||
assert!(!Fq2 {
|
||||
c0: Fq::zero(),
|
||||
c1: Fq::one(),
|
||||
}
|
||||
.is_zero());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -309,7 +308,8 @@ fn test_fq2_squaring() {
|
|||
0xf7f295a94e58ae7c,
|
||||
0x41b76dcc1c3fbe5e,
|
||||
0x7080c5fa1d8e042,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x38f473b3c870a4ab,
|
||||
0x6ad3291177c8c7e5,
|
||||
|
@ -317,7 +317,8 @@ fn test_fq2_squaring() {
|
|||
0xbfb99020604137a0,
|
||||
0xfc58a7b7be815407,
|
||||
0x10d1615e75250a21,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
a.square();
|
||||
assert_eq!(
|
||||
|
@ -330,7 +331,8 @@ fn test_fq2_squaring() {
|
|||
0xcb674157618da176,
|
||||
0x4cf17b5893c3d327,
|
||||
0x7eac81369c43361
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xc1579cf58e980cf8,
|
||||
0xa23eb7e12dd54d98,
|
||||
|
@ -338,7 +340,8 @@ fn test_fq2_squaring() {
|
|||
0x38d0d7275a9689e1,
|
||||
0x739c983042779a65,
|
||||
0x1542a61c8a8db994
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -356,7 +359,8 @@ fn test_fq2_mul() {
|
|||
0x9ee53e7e84d7532e,
|
||||
0x1c202d8ed97afb45,
|
||||
0x51d3f9253e2516f,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xa7348a8b511aedcf,
|
||||
0x143c215d8176b319,
|
||||
|
@ -364,7 +368,8 @@ fn test_fq2_mul() {
|
|||
0x9533e4a9a5158be,
|
||||
0x7a5e1ecb676d65f9,
|
||||
0x180c3ee46656b008,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
a.mul_assign(&Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -374,7 +379,8 @@ fn test_fq2_mul() {
|
|||
0xcd460f9f0c23e430,
|
||||
0x6c9110292bfa409,
|
||||
0x2c93a72eb8af83e,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x4b1c3f936d8992d4,
|
||||
0x1d2a72916dba4c8a,
|
||||
|
@ -382,7 +388,8 @@ fn test_fq2_mul() {
|
|||
0x57a06d3135a752ae,
|
||||
0x634cd3c6c565096d,
|
||||
0x19e17334d4e93558,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
});
|
||||
assert_eq!(
|
||||
a,
|
||||
|
@ -394,7 +401,8 @@ fn test_fq2_mul() {
|
|||
0x5511fe4d84ee5f78,
|
||||
0x5310a202d92f9963,
|
||||
0x1751afbe166e5399
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x84af0e1bd630117a,
|
||||
0x6c63cd4da2c2aa7,
|
||||
|
@ -402,7 +410,8 @@ fn test_fq2_mul() {
|
|||
0xc975106579c275ee,
|
||||
0x33a9ac82ce4c5083,
|
||||
0x1ef1a36c201589d
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -422,7 +431,8 @@ fn test_fq2_inverse() {
|
|||
0x9ee53e7e84d7532e,
|
||||
0x1c202d8ed97afb45,
|
||||
0x51d3f9253e2516f,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xa7348a8b511aedcf,
|
||||
0x143c215d8176b319,
|
||||
|
@ -430,7 +440,8 @@ fn test_fq2_inverse() {
|
|||
0x9533e4a9a5158be,
|
||||
0x7a5e1ecb676d65f9,
|
||||
0x180c3ee46656b008,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
let a = a.inverse().unwrap();
|
||||
assert_eq!(
|
||||
|
@ -443,7 +454,8 @@ fn test_fq2_inverse() {
|
|||
0xdfba703293941c30,
|
||||
0xa6c3d8f9586f2636,
|
||||
0x1351ef01941b70c4
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x8c39fd76a8312cb4,
|
||||
0x15d7b6b95defbff0,
|
||||
|
@ -451,7 +463,8 @@ fn test_fq2_inverse() {
|
|||
0xcbf651a0f367afb2,
|
||||
0xdf4e54f0d3ef15a6,
|
||||
0x103bdf241afb0019
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -469,7 +482,8 @@ fn test_fq2_addition() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -477,7 +491,8 @@ fn test_fq2_addition() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
a.add_assign(&Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -487,7 +502,8 @@ fn test_fq2_addition() {
|
|||
0x3b88899a42a6318f,
|
||||
0x986a4a62fa82a49d,
|
||||
0x13ce433fa26027f5,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x66323bf80b58b9b9,
|
||||
0xa1379b6facf6e596,
|
||||
|
@ -495,7 +511,8 @@ fn test_fq2_addition() {
|
|||
0x2236f55246d0d44d,
|
||||
0x4c8c1800eb104566,
|
||||
0x11d6e20e986c2085,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
});
|
||||
assert_eq!(
|
||||
a,
|
||||
|
@ -507,7 +524,8 @@ fn test_fq2_addition() {
|
|||
0xf4ef57d604b6bca2,
|
||||
0x65309427b3d5d090,
|
||||
0x14c715d5553f01d2
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xfdb032e7d9079a94,
|
||||
0x35a2809d15468d83,
|
||||
|
@ -515,7 +533,8 @@ fn test_fq2_addition() {
|
|||
0xd62fa51334f560fa,
|
||||
0x9ad265eb46e01984,
|
||||
0x1303f3465112c8bc
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -533,7 +552,8 @@ fn test_fq2_subtraction() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -541,7 +561,8 @@ fn test_fq2_subtraction() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
a.sub_assign(&Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
|
@ -551,7 +572,8 @@ fn test_fq2_subtraction() {
|
|||
0x3b88899a42a6318f,
|
||||
0x986a4a62fa82a49d,
|
||||
0x13ce433fa26027f5,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x66323bf80b58b9b9,
|
||||
0xa1379b6facf6e596,
|
||||
|
@ -559,7 +581,8 @@ fn test_fq2_subtraction() {
|
|||
0x2236f55246d0d44d,
|
||||
0x4c8c1800eb104566,
|
||||
0x11d6e20e986c2085,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
});
|
||||
assert_eq!(
|
||||
a,
|
||||
|
@ -571,7 +594,8 @@ fn test_fq2_subtraction() {
|
|||
0xe255902672ef6c43,
|
||||
0x7f77a718021c342d,
|
||||
0x72ba14049fe9881
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xeb4abaf7c255d1cd,
|
||||
0x11df49bc6cacc256,
|
||||
|
@ -579,7 +603,8 @@ fn test_fq2_subtraction() {
|
|||
0xf63905f39ad8cb1f,
|
||||
0x4cd5dd9fb40b3b8f,
|
||||
0x957411359ba6e4c
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -597,7 +622,8 @@ fn test_fq2_negation() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -605,7 +631,8 @@ fn test_fq2_negation() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
a.negate();
|
||||
assert_eq!(
|
||||
|
@ -618,7 +645,8 @@ fn test_fq2_negation() {
|
|||
0xab107d49317487ab,
|
||||
0x7e555df189f880e3,
|
||||
0x19083f5486a10cbd
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x228109103250c9d0,
|
||||
0x8a411ad149045812,
|
||||
|
@ -626,7 +654,8 @@ fn test_fq2_negation() {
|
|||
0xb07e9bc405608611,
|
||||
0xfcd559cbe77bd8b8,
|
||||
0x18d400b280d93e62
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -644,7 +673,8 @@ fn test_fq2_doubling() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -652,7 +682,8 @@ fn test_fq2_doubling() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
a.double();
|
||||
assert_eq!(
|
||||
|
@ -665,7 +696,8 @@ fn test_fq2_doubling() {
|
|||
0x72cd9c7784211627,
|
||||
0x998c938972a657e7,
|
||||
0x1f1a52b65bdb3b9
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x2efbeddf9b5dc1b6,
|
||||
0x28d5ca5ad09f4fdb,
|
||||
|
@ -673,7 +705,8 @@ fn test_fq2_doubling() {
|
|||
0x67f15f81dc49195b,
|
||||
0x9c8c9bd4b79fa83d,
|
||||
0x25a226f714d506e
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -691,7 +724,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -699,7 +733,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837,
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
};
|
||||
a.frobenius_map(0);
|
||||
assert_eq!(
|
||||
|
@ -712,7 +747,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -720,7 +756,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
a.frobenius_map(1);
|
||||
|
@ -734,7 +771,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x228109103250c9d0,
|
||||
0x8a411ad149045812,
|
||||
|
@ -742,7 +780,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb07e9bc405608611,
|
||||
0xfcd559cbe77bd8b8,
|
||||
0x18d400b280d93e62
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
a.frobenius_map(1);
|
||||
|
@ -756,7 +795,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -764,7 +804,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
a.frobenius_map(2);
|
||||
|
@ -778,7 +819,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb966ce3bc2108b13,
|
||||
0xccc649c4b9532bf3,
|
||||
0xf8d295b2ded9dc
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0x977df6efcdaee0db,
|
||||
0x946ae52d684fa7ed,
|
||||
|
@ -786,7 +828,8 @@ fn test_fq2_frobenius_map() {
|
|||
0xb3f8afc0ee248cad,
|
||||
0x4e464dea5bcfd41e,
|
||||
0x12d1137b8a6a837
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -805,7 +848,8 @@ fn test_fq2_sqrt() {
|
|||
0xdb4a116b5bf74aa1,
|
||||
0x1e58b2159dfe10e2,
|
||||
0x7ca7da1f13606ac
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xfa8de88b7516d2c3,
|
||||
0x371a75ed14f41629,
|
||||
|
@ -813,9 +857,11 @@ fn test_fq2_sqrt() {
|
|||
0x212611bca4e99121,
|
||||
0x8ee5394d77afb3d,
|
||||
0xec92336650e49d5
|
||||
])).unwrap(),
|
||||
}.sqrt()
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
.sqrt()
|
||||
.unwrap(),
|
||||
Fq2 {
|
||||
c0: Fq::from_repr(FqRepr([
|
||||
0x40b299b2704258c5,
|
||||
|
@ -824,7 +870,8 @@ fn test_fq2_sqrt() {
|
|||
0x8d7f1f723d02c1d3,
|
||||
0x881b3e01b611c070,
|
||||
0x10f6963bbad2ebc5
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
0xc099534fc209e752,
|
||||
0x7670594665676447,
|
||||
|
@ -832,7 +879,8 @@ fn test_fq2_sqrt() {
|
|||
0x6b852aeaf2afcb1b,
|
||||
0xa4c93b08105d71a9,
|
||||
0x8d7cfff94216330
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -845,10 +893,12 @@ fn test_fq2_sqrt() {
|
|||
0x64774b84f38512bf,
|
||||
0x4b1ba7b6434bacd7,
|
||||
0x1a0111ea397fe69a
|
||||
])).unwrap(),
|
||||
c1: Fq::zero(),
|
||||
}.sqrt()
|
||||
]))
|
||||
.unwrap(),
|
||||
c1: Fq::zero(),
|
||||
}
|
||||
.sqrt()
|
||||
.unwrap(),
|
||||
Fq2 {
|
||||
c0: Fq::zero(),
|
||||
c1: Fq::from_repr(FqRepr([
|
||||
|
@ -858,7 +908,8 @@ fn test_fq2_sqrt() {
|
|||
0x64774b84f38512bf,
|
||||
0x4b1ba7b6434bacd7,
|
||||
0x1a0111ea397fe69a
|
||||
])).unwrap(),
|
||||
]))
|
||||
.unwrap(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ impl ::std::fmt::Display for Fq6 {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
impl Fq6 {
|
||||
/// Multiply by quadratic nonresidue v.
|
||||
pub fn mul_by_nonresidue(&mut self) {
|
||||
|
|
|
@ -388,22 +388,20 @@ fn test_fr_is_valid() {
|
|||
a.0.sub_noborrow(&FrRepr::from(1));
|
||||
assert!(a.is_valid());
|
||||
assert!(Fr(FrRepr::from(0)).is_valid());
|
||||
assert!(
|
||||
Fr(FrRepr([
|
||||
0xffffffff00000000,
|
||||
0x53bda402fffe5bfe,
|
||||
0x3339d80809a1d805,
|
||||
0x73eda753299d7d48
|
||||
])).is_valid()
|
||||
);
|
||||
assert!(
|
||||
!Fr(FrRepr([
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff
|
||||
])).is_valid()
|
||||
);
|
||||
assert!(Fr(FrRepr([
|
||||
0xffffffff00000000,
|
||||
0x53bda402fffe5bfe,
|
||||
0x3339d80809a1d805,
|
||||
0x73eda753299d7d48
|
||||
]))
|
||||
.is_valid());
|
||||
assert!(!Fr(FrRepr([
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff,
|
||||
0xffffffffffffffff
|
||||
]))
|
||||
.is_valid());
|
||||
|
||||
let mut rng = XorShiftRng::from_seed([
|
||||
0x59, 0x62, 0xbe, 0x5d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06, 0xbc,
|
||||
|
@ -707,7 +705,8 @@ fn test_fr_squaring() {
|
|||
0xb79a310579e76ec2,
|
||||
0xac1da8d0a9af4e5f,
|
||||
0x13f629c49bf23e97
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
);
|
||||
|
||||
let mut rng = XorShiftRng::from_seed([
|
||||
|
@ -857,14 +856,13 @@ fn test_fr_sqrt() {
|
|||
#[test]
|
||||
fn test_fr_from_into_repr() {
|
||||
// r + 1 should not be in the field
|
||||
assert!(
|
||||
Fr::from_repr(FrRepr([
|
||||
0xffffffff00000002,
|
||||
0x53bda402fffe5bfe,
|
||||
0x3339d80809a1d805,
|
||||
0x73eda753299d7d48
|
||||
])).is_err()
|
||||
);
|
||||
assert!(Fr::from_repr(FrRepr([
|
||||
0xffffffff00000002,
|
||||
0x53bda402fffe5bfe,
|
||||
0x3339d80809a1d805,
|
||||
0x73eda753299d7d48
|
||||
]))
|
||||
.is_err());
|
||||
|
||||
// r should not be in the field
|
||||
assert!(Fr::from_repr(Fr::char()).is_err());
|
||||
|
@ -967,7 +965,8 @@ fn test_fr_display() {
|
|||
0x185ec8eb3f5b5aee,
|
||||
0x684499ffe4b9dd99,
|
||||
0x7c9bba7afb68faa
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
),
|
||||
"Fr(0x07c9bba7afb68faa684499ffe4b9dd99185ec8eb3f5b5aeec3cae746a3b5ecc7)".to_string()
|
||||
);
|
||||
|
@ -979,7 +978,8 @@ fn test_fr_display() {
|
|||
0xb0ad10817df79b6a,
|
||||
0xd034a80a2b74132b,
|
||||
0x41cf9a1336f50719
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
),
|
||||
"Fr(0x41cf9a1336f50719d034a80a2b74132bb0ad10817df79b6a44c71298ff198106)".to_string()
|
||||
);
|
||||
|
|
|
@ -9,8 +9,8 @@ mod fr;
|
|||
mod tests;
|
||||
|
||||
pub use self::ec::{
|
||||
G1, G1Affine, G1Compressed, G1Prepared, G1Uncompressed, G2, G2Affine, G2Compressed, G2Prepared,
|
||||
G2Uncompressed,
|
||||
G1Affine, G1Compressed, G1Prepared, G1Uncompressed, G2Affine, G2Compressed, G2Prepared,
|
||||
G2Uncompressed, G1, G2,
|
||||
};
|
||||
pub use self::fq::{Fq, FqRepr};
|
||||
pub use self::fq12::Fq12;
|
||||
|
|
15
src/lib.rs
15
src/lib.rs
|
@ -37,8 +37,7 @@ pub trait Engine: ScalarEngine {
|
|||
Base = Self::Fq,
|
||||
Scalar = Self::Fr,
|
||||
Affine = Self::G1Affine,
|
||||
>
|
||||
+ From<Self::G1Affine>;
|
||||
> + From<Self::G1Affine>;
|
||||
|
||||
/// The affine representation of an element in G1.
|
||||
type G1Affine: PairingCurveAffine<
|
||||
|
@ -48,8 +47,7 @@ pub trait Engine: ScalarEngine {
|
|||
Projective = Self::G1,
|
||||
Pair = Self::G2Affine,
|
||||
PairingResult = Self::Fqk,
|
||||
>
|
||||
+ From<Self::G1>;
|
||||
> + From<Self::G1>;
|
||||
|
||||
/// The projective representation of an element in G2.
|
||||
type G2: CurveProjective<
|
||||
|
@ -57,8 +55,7 @@ pub trait Engine: ScalarEngine {
|
|||
Base = Self::Fqe,
|
||||
Scalar = Self::Fr,
|
||||
Affine = Self::G2Affine,
|
||||
>
|
||||
+ From<Self::G2Affine>;
|
||||
> + From<Self::G2Affine>;
|
||||
|
||||
/// The affine representation of an element in G2.
|
||||
type G2Affine: PairingCurveAffine<
|
||||
|
@ -68,8 +65,7 @@ pub trait Engine: ScalarEngine {
|
|||
Projective = Self::G2,
|
||||
Pair = Self::G1Affine,
|
||||
PairingResult = Self::Fqk,
|
||||
>
|
||||
+ From<Self::G2>;
|
||||
> + From<Self::G2>;
|
||||
|
||||
/// The base field that hosts G1.
|
||||
type Fq: PrimeField + SqrtField;
|
||||
|
@ -101,7 +97,8 @@ pub trait Engine: ScalarEngine {
|
|||
{
|
||||
Self::final_exponentiation(&Self::miller_loop(
|
||||
[(&(p.into().prepare()), &(q.into().prepare()))].iter(),
|
||||
)).unwrap()
|
||||
))
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -117,8 +117,8 @@ pub fn from_str_tests<F: PrimeField>() {
|
|||
|
||||
{
|
||||
let mut rng = XorShiftRng::from_seed([
|
||||
0x59, 0x62, 0xbe, 0x5d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06, 0xbc,
|
||||
0xe5,
|
||||
0x59, 0x62, 0xbe, 0x5d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06,
|
||||
0xbc, 0xe5,
|
||||
]);
|
||||
|
||||
for _ in 0..1000 {
|
||||
|
|
Loading…
Reference in New Issue