o1js-elgamal
Version:
This repository implements Elgmal, a partial homomorphic encryption scheme originally described by [Taher Elgamal in 1985](https://caislab.kaist.ac.kr/lecture/2010/spring/cs548/basic/B02.pdf). This implementation includes the original version of Elgamal,
20 lines • 733 B
JavaScript
import { Field, isReady, shutdown } from 'o1js';
await isReady;
const { ElGamalFF } = await import('../elgamal.js');
let { pk, sk } = ElGamalFF.generateKeys();
let m1 = Field(15);
let m2 = Field(3);
let c1 = ElGamalFF.encrypt(m1, pk);
let c2 = ElGamalFF.encrypt(m2, pk);
let plain1 = ElGamalFF.decrypt(c1, sk);
let plain2 = ElGamalFF.decrypt(c2, sk);
console.log('valid decrypt?', plain1.equals(m1).toBoolean());
console.log('valid decrypt?', plain2.equals(m2).toBoolean());
let c = c1.mul(c2);
let m3 = m1.mul(m2);
let plain3 = ElGamalFF.decrypt(c, sk);
console.log(`homomorphic multiplicative ${plain3.toString()} === ${m3.toString()}, ${m3
.equals(plain3)
.toBoolean()}`);
shutdown();
//# sourceMappingURL=elgamalff.js.map