.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)
