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