term% ls -F
term% cat index.txt
ELGAMAL(2)                    System Calls Manual                   ELGAMAL(2)

       eggen,  egencrypt,  egdecrypt, egsign, egverify, egpuballoc, egpubfree,
       egprivalloc, egprivfree, egsigalloc, egsigfree, egprivtopub  -  elgamal

       #include <u.h>
       #include <libc.h>
       #include <mp.h>
       #include <libsec.h>

       EGpriv*   eggen(int nlen, int nrep)

       mpint*    egencrypt(EGpub *k, mpint *in, mpint *out)

       mpint*    egdecrypt(EGpriv *k, mpint *in, mpint *out)

       EGsig*    egsign(EGpriv *k, mpint *m)

       int       egverify(EGpub *k, EGsig *sig, mpint *m)

       EGpub*    egpuballoc(void)

       void      egpubfree(EGpub*)

       EGpriv*   egprivalloc(void)

       void      egprivfree(EGpriv*)

       EGsig*    egsigalloc(void)

       void      egsigfree(EGsig*)

       EGpub*    egprivtopub(EGpriv*)

       Elgamal  is a public key encryption and signature algorithm.  The owner
       of a key publishes the public part of the key:
            struct EGpub
                 mpint     *p;  // modulus
                 mpint     *alpha;   // generator
                 mpint     *key;     // (encryption key) alpha**secret mod p
       This part can be used for encrypting data (with egencrypt) to  be  sent
       to  the  owner.   The owner decrypts (with egdecrypt) using his private
            struct EGpriv
                 EGpub     pub;
                 mpint     *secret; // (decryption key)

       Keys are generated using eggen.  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.
       Egprivtopub  returns  a  newly  allocated copy of the public key correā€
       sponding to the private key.

       The routines egpuballoc, egpubfree,  egprivalloc,  and  egprivfree  are
       provided to manage key storage.

       Egsign signs message m using a private key k yielding a
            struct EGsig
                 mpint     *r, *s;
       Egverify returns 0 if the signature is valid and -1 if not.

       The  routines egsigalloc and egsigfree are provided to manage signature


       mp(2), aes(2), blowfish(2), des(2), dsa(2), rc4(2), rsa(2), sechash(2),
       prime(2), rand(2)