aboutsummaryrefslogtreecommitdiff
path: root/man/man3/elgamal.3
diff options
context:
space:
mode:
Diffstat (limited to 'man/man3/elgamal.3')
-rw-r--r--man/man3/elgamal.3125
1 files changed, 125 insertions, 0 deletions
diff --git a/man/man3/elgamal.3 b/man/man3/elgamal.3
new file mode 100644
index 00000000..8298c7d8
--- /dev/null
+++ b/man/man3/elgamal.3
@@ -0,0 +1,125 @@
+.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 /sys/src/libsec
+.SH SEE ALSO
+.IR mp (2),
+.IR aes (2),
+.IR blowfish (2),
+.IR des (2),
+.IR dsa (2),
+.IR rc4 (2),
+.IR rsa (2),
+.IR sechash (2),
+.IR prime (2),
+.IR rand (2)