|  | 
 NAME     
 |  |  |  | eggen, egencrypt, egdecrypt, egsign, egverify, egpuballoc, egpubfree,
    egprivalloc, egprivfree, egsigalloc, egsigfree, egprivtopub -
    elgamal encryption 
 | 
 SYNOPSIS     
 |  |  |  | #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*)
 
 | 
 DESCRIPTION     
 |  |  |  | Elgamal is a public key encryption and signature algorithm. The
    owner of a key publishes the public part of the key: 
 This part can be used for encrypting data (with egencrypt) to
    be sent to the owner. The owner decrypts (with egdecrypt) using
    his private key:|  |  |  | struct EGpub {
 
 };|  |  |  | mpint *p;    // modulus mpint *alpha;      // generator
 mpint *key; // (encryption key) alpha**secret mod p
 
 | 
 
 | 
 
 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 corresponding 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 EGpriv {
 
 };|  |  |  | EGpub pub; mpint *secret; // (decryption key)
 
 | 
 
 | 
 Egverify returns 0 if the signature is valid and –1 if not. 
    
    
    The routines egsigalloc and egsigfree are provided to manage signature
    storage.
 
 | 
 SOURCE     
 SEE ALSO    
 |  |