| .TH ELGAMAL 3 |
| .SH NAME |
| eggen, egencrypt, egdecrypt, egsign, egverify, egpuballoc, egpubfree, egprivalloc, egprivfree, egsigalloc, egsigfree, egprivtopub - elgamal encryption |
| .SH SYNOPSIS |
| .B #include <u.h> |
| .br |
| .B #include <libc.h> |
| .br |
| .B #include <mp.h> |
| .br |
| .B #include <libsec.h> |
| .PP |
| .B |
| EGpriv* eggen(int nlen, int nrep) |
| .PP |
| .B |
| mpint* egencrypt(EGpub *k, mpint *in, mpint *out) |
| .PP |
| .B |
| mpint* egdecrypt(EGpriv *k, mpint *in, mpint *out) |
| .PP |
| .B |
| EGsig* egsign(EGpriv *k, mpint *m) |
| .PP |
| .B |
| int egverify(EGpub *k, EGsig *sig, mpint *m) |
| .PP |
| .B |
| EGpub* egpuballoc(void) |
| .PP |
| .B |
| void egpubfree(EGpub*) |
| .PP |
| .B |
| EGpriv* egprivalloc(void) |
| .PP |
| .B |
| void egprivfree(EGpriv*) |
| .PP |
| .B |
| EGsig* egsigalloc(void) |
| .PP |
| .B |
| void egsigfree(EGsig*) |
| .PP |
| .B |
| EGpub* egprivtopub(EGpriv*) |
| .SH DESCRIPTION |
| .PP |
| Elgamal is a public key encryption and signature algorithm. The owner of a key publishes |
| the public part of the key: |
| .EX |
| struct EGpub |
| { |
| mpint *p; // modulus |
| mpint *alpha; // generator |
| mpint *key; // (encryption key) alpha**secret mod p |
| }; |
| .EE |
| This part can be used for encrypting data (with |
| .IR egencrypt ) |
| to be sent to the owner. |
| The owner decrypts (with |
| .IR egdecrypt ) |
| using his private key: |
| .EX |
| struct EGpriv |
| { |
| EGpub pub; |
| mpint *secret; // (decryption key) |
| }; |
| .EE |
| .PP |
| Keys are generated using |
| .IR eggen . |
| .I Eggen |
| takes both bit length of the modulus |
| and the number of repetitions of the Miller-Rabin |
| primality test to run. If the latter is 0, it does the default number |
| of rounds. |
| .I Egprivtopub |
| returns a newly allocated copy of the public key |
| corresponding to the private key. |
| .PP |
| The routines |
| .IR egpuballoc , |
| .IR egpubfree , |
| .IR egprivalloc , |
| and |
| .I egprivfree |
| are provided to manage key storage. |
| .PP |
| .I Egsign |
| signs message |
| .I m |
| using a private key |
| .I k |
| yielding a |
| .EX |
| struct EGsig |
| { |
| mpint *r, *s; |
| }; |
| .EE |
| .I Egverify |
| returns 0 if the signature is valid and \-1 if not. |
| .PP |
| The routines |
| .I egsigalloc |
| and |
| .I egsigfree |
| are provided to manage signature storage. |
| .SH SOURCE |
| .B \*9/src/libsec |
| .SH SEE ALSO |
| .IR mp (3), |
| .IR aes (3), |
| .IR blowfish (3), |
| .IR des (3), |
| .IR dsa (3), |
| .IR rc4 (3), |
| .IR rsa (3), |
| .IR sechash (3), |
| .IR prime (3), |
| .IR rand (3) |