Skip to content

10d9e/elgamal.sol

Repository files navigation

🔹 ElGamal Homomorphic Encryption in Solidity

This project implements ElGamal homomorphic encryption in Solidity, supporting two homomorphic schemes:

  1. ElGamal Multiplicative Homomorphism (ElGamalMultiplicative.sol)

    • Supports homomorphic multiplication and division
    • Supports scalar addition and subtraction
    • Uses modular exponentiation and modular inversion
    • Allows secure computations on encrypted values
  2. ElGamal Additive Homomorphism (ElGamalAdditive.sol)

    • Supports homomorphic addition and subtraction
    • Supports scalar multiplication and division
    • Uses modular exponentiation and modular inversion
    • Allows secure additive operations on encrypted values

Each contract enables privacy-preserving computations while ensuring correctness through modular arithmetic.


🔹 Features

Multiplicative Homomorphic Scheme (ElGamalMultiplicative.sol)

  • Homomorphic Multiplication: C_1^scalar, C_2^scalar
  • Homomorphic Division: C_1^(1/scalar), C_2^(1/scalar)
  • Scalar Addition: C_2 * g^scalar
  • Scalar Subtraction: C_2 / g^scalar

Additive Homomorphic Scheme (ElGamalAdditive.sol)

  • Homomorphic Addition: C_2 * C_2'
  • Homomorphic Subtraction: C_2 / C_2'
  • Scalar Multiplication: C_1^scalar, C_2^scalar
  • Scalar Division: (C_1^scalar * C_2)^(1/d) mod p

🔹 Smart Contracts

1️⃣ ElGamal Multiplicative Encryption

Located in contracts/ElGamalMultiplicative.sol, this contract enables multiplicative homomorphic operations.

🛠 Functions

Function Description
storeEncryptedValue(uint256 c1, uint256 c2) Stores encrypted values
getEncryptedBalance(address user) Retrieves the encrypted balance
homomorphicMultiplication(address user, uint256 scalar) Computes C_1^scalar, C_2^scalar
homomorphicDivision(address user, uint256 scalar) Computes C_1^(1/scalar), C_2^(1/scalar)
scalarAddition(address user, uint256 scalar) Adds g^scalar to C_2
scalarSubtraction(address user, uint256 scalar) Subtracts g^scalar from C_2

2️⃣ ElGamal Additive Encryption

Located in contracts/ElGamalAdditive.sol, this contract enables additive homomorphic operations.

🛠 Functions

Function Description
storeEncryptedValue(uint256 c1, uint256 c2) Stores encrypted values
getEncryptedBalance(address user) Retrieves the encrypted balance
homomorphicAddition(address user1, address user2) Computes C_2 * C_2'
homomorphicSubtraction(address user1, address user2) Computes C_2 / C_2'
scalarMultiply(address user1, uint256 multiplier, address user2) Computes C_1^scalar * C_2
scalarDivide(address user1, uint256 multiplier, address user2, uint256 divisor) Computes (C_1^scalar * C_2)^(1/d) mod p

🔹 Deployment

We use Hardhat Ignition for automated contract deployment.

1️⃣ Install Dependencies

Ensure you have Node.js, Hardhat, and dependencies installed:

npm install

2️⃣ Compile Contracts

npx hardhat compile

3️⃣ Deploy Contracts

To deploy ElGamal Multiplicative:

npx hardhat ignition deploy ElGamalMultiplicative.ts --network localhost

To deploy ElGamal Additive:

npx hardhat ignition deploy ElGamalAdditive.ts --network localhost

🔹 Running Tests

We use TypeScript test files to validate both contracts.

Run Tests for ElGamalMultiplicative

npx hardhat test test/ElGamalMultiplicative.test.ts

Run Tests for ElGamalAdditive

npx hardhat test test/ElGamalAdditive.test.ts

🔹 Example Usage

Encrypting a Value

To encrypt a value m:

uint256 r = 42; // Random value
uint256 c1 = modExp(g, r, p);
uint256 c2 = (m * modExp(h, r, p)) % p;

Performing a Homomorphic Multiplication

To multiply an encrypted value by a scalar k:

homomorphicMultiplication(userAddress, k);

Performing a Homomorphic Addition

To add two encrypted values:

homomorphicAddition(user1, user2);

Performing a Scalar Division

To divide an encrypted value by a scalar d:

scalarDivide(user1, multiplier, user2, divisor);

🔹 Security Considerations

  • Ensures modular safety using modular exponentiation (modExp).
  • Uses modular inverse (modInverse) to prevent errors in division.
  • Ensures correctness using TypeScript tests before deployment.

🔹 Contributing

Pull requests are welcome! If you find bugs or have feature requests, please open an issue.


🔹 License

This project is MIT-licensed.


🎯 Summary

Two Homomorphic Encryption Contracts: Additive & Multiplicative
Complete Deployment & Test Suite
Modular Arithmetic for Secure Computation
Future Support for Zero-Knowledge Proofs & FHE

🚀 Run npx hardhat test and deploy homomorphic encryption on Ethereum today!

About

ElGamal Homomorphic Encryption in Solidity

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors