.TH ELGAMAL 2 .SH NAME eggen, egencrypt, egdecrypt, egsign, egverify, egalloc, egfree, egpuballoc, egpubfree, egprivalloc, egprivfree, egsigalloc, egsigfree, egprivtopub - elgamal encryption .SH SYNOPSIS .B #include .br .B #include .br .B #include .br .B #include .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 The corresponding keys for the ElGamal algorithm are: .EX struct EGpub { mpint *p; // modulus mpint *alpha; // generator mpint *key; // (encryption key) alpha**secret mod p }; .EE and .EX struct EGpriv { EGpub pub; mpint *secret; // (decryption key) }; .EE .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. .SH SOURCE .B /sys/src/libsec .SH SEE ALSO .IR mp (2), .IR aes (2), .IR blowfish (2), .IR des (2), .IR rc4 (2), .IR rsa (2), .IR sechash (2), .IR prime (2), .IR rand (2)