Browse Source

added elgamal decryption (UNTESTED)

pull/8/head
Nanak Nihal Singh Khalsa 1 year ago
parent
commit
86c18f0757
1 changed files with 23 additions and 1 deletions
  1. +23
    -1
      src/lib.rs

+ 23
- 1
src/lib.rs

@ -13,7 +13,7 @@ use arrayref::array_ref;
// #[cfg(feature = "aarch64")] // #[cfg(feature = "aarch64")]
// extern crate blake; // compatible version with Blake used at circomlib // extern crate blake; // compatible version with Blake used at circomlib
use blake2::{Blake2b512, Blake2s256, Digest};
use blake2::{Blake2b512, Digest};
// use hex_literal::hex; // use hex_literal::hex;
use std::cmp::min; use std::cmp::min;
@ -158,6 +158,13 @@ impl Point {
} }
} }
pub fn inverse(&self) -> Point {
Point {
x: self.x.inverse().unwrap(),
y: self.y
}
}
pub fn mul_scalar(&self, n: &BigInt) -> Point { pub fn mul_scalar(&self, n: &BigInt) -> Point {
let mut r: PointProjective = PointProjective { let mut r: PointProjective = PointProjective {
x: Fr::zero(), x: Fr::zero(),
@ -382,6 +389,21 @@ impl PrivateKey {
let s = k + &sk_scalar * &h; let s = k + &sk_scalar * &h;
Ok((r, s)) Ok((r, s))
} }
// pub fn encrypt_elgamal(&self, msg: Point) -> [Point; 2] {
// }
pub fn decrypt_elgamal(&self, c1: Point, c2: Point) -> Point {
let shared_secret = c1.mul_scalar(&self.scalar_key());
let msg = c2.projective()
.add(
&shared_secret.inverse().projective()
)
.affine();
msg
}
} }
pub fn schnorr_hash(pk: &Point, msg: BigInt, c: &Point) -> Result<BigInt, String> { pub fn schnorr_hash(pk: &Point, msg: BigInt, c: &Point) -> Result<BigInt, String> {

Loading…
Cancel
Save