xref: /plan9/sys/man/2/elgamal (revision 3ff48bf5ed603850fcd251ddf13025d23d693782)
ELGAMAL 2
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: .EX 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 key: .EX 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 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 .EX 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 storage.

SOURCE
/sys/src/libsec
SEE ALSO
mp (2), aes (2), blowfish (2), des (2), dsa (2), rc4 (2), rsa (2), sechash (2), prime (2), rand (2)