WIP: ElGamal encryption

TODO:

- [ ] Detail algorithem in docstring
- [ ] Add more test case
- [ ] Use primitive_root in #2307