generate G2 with unknown discrete logs
This commit is contained in:
parent
59a1d70c91
commit
84b57df325
@ -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.15.1"
|
version = "0.15.2"
|
||||||
authors = [
|
authors = [
|
||||||
"Sean Bowe <ewillbefull@gmail.com>",
|
"Sean Bowe <ewillbefull@gmail.com>",
|
||||||
"Jack Grigg <jack@z.cash>",
|
"Jack Grigg <jack@z.cash>",
|
||||||
|
@ -885,6 +885,10 @@ pub mod g1 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl G1Affine {
|
impl G1Affine {
|
||||||
|
// fn scale_by_cofactor(&self) -> G1 {
|
||||||
|
// self.into_projective()
|
||||||
|
// }
|
||||||
|
|
||||||
fn get_generator() -> Self {
|
fn get_generator() -> Self {
|
||||||
G1Affine {
|
G1Affine {
|
||||||
x: super::super::fq::G1_GENERATOR_X,
|
x: super::super::fq::G1_GENERATOR_X,
|
||||||
@ -1023,20 +1027,45 @@ pub mod g2 {
|
|||||||
G1Affine
|
G1Affine
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// impl Rand for G2 {
|
||||||
|
// fn rand<R: Rng>(rng: &mut R) -> Self {
|
||||||
|
|
||||||
|
// let mut r = G2::one();
|
||||||
|
// let k = Fr::rand(rng);
|
||||||
|
// r.mul_assign(k);
|
||||||
|
// return r;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// impl Rand for G2Affine {
|
||||||
|
// fn rand<R: Rng>(rng: &mut R) -> Self {
|
||||||
|
// let mut r = G2::one();
|
||||||
|
// let k = Fr::rand(rng);
|
||||||
|
// r.mul_assign(k);
|
||||||
|
// return r.into_affine();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
impl Rand for G2 {
|
impl Rand for G2 {
|
||||||
fn rand<R: Rng>(rng: &mut R) -> Self {
|
fn rand<R: Rng>(rng: &mut R) -> Self {
|
||||||
let mut r = G2::one();
|
loop {
|
||||||
let k = Fr::rand(rng);
|
let x = rng.gen();
|
||||||
r.mul_assign(k);
|
let greatest = rng.gen();
|
||||||
return r;
|
|
||||||
|
if let Some(p) = G2Affine::get_point_from_x(x, greatest) {
|
||||||
|
if !p.is_zero() {
|
||||||
|
if p.is_on_curve() {
|
||||||
|
return p.scale_by_cofactor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Rand for G2Affine {
|
impl Rand for G2Affine {
|
||||||
fn rand<R: Rng>(rng: &mut R) -> Self {
|
fn rand<R: Rng>(rng: &mut R) -> Self {
|
||||||
let mut r = G2::one();
|
let r = G2::rand(rng);
|
||||||
let k = Fr::rand(rng);
|
|
||||||
r.mul_assign(k);
|
|
||||||
return r.into_affine();
|
return r.into_affine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1273,6 +1302,18 @@ pub mod g2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl G2Affine {
|
impl G2Affine {
|
||||||
|
fn scale_by_cofactor(&self) -> G2 {
|
||||||
|
// G2 cofactor = 2p - n = 2q - r
|
||||||
|
// 0x30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d
|
||||||
|
let cofactor = BitIterator::new([
|
||||||
|
0x345f2299c0f9fa8d,
|
||||||
|
0x06ceecda572a2489,
|
||||||
|
0xb85045b68181585e,
|
||||||
|
0x30644e72e131a029,
|
||||||
|
]);
|
||||||
|
self.mul_bits(cofactor)
|
||||||
|
}
|
||||||
|
|
||||||
fn get_generator() -> Self {
|
fn get_generator() -> Self {
|
||||||
G2Affine {
|
G2Affine {
|
||||||
x: Fq2 {
|
x: Fq2 {
|
||||||
@ -1586,9 +1627,9 @@ pub mod g2 {
|
|||||||
r.mul_assign(order);
|
r.mul_assign(order);
|
||||||
assert!(r.is_zero());
|
assert!(r.is_zero());
|
||||||
|
|
||||||
// let mut t = G2::rand(&mut rng);
|
let mut t = G2::rand(&mut rng);
|
||||||
// t.mul_assign(order);
|
t.mul_assign(order);
|
||||||
// assert!(t.is_zero());
|
assert!(t.is_zero());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user