Skip to content

10d9e/elgamal.sol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

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

No packages published