Blob


1 .TH ELGAMAL 3
2 .SH NAME
3 eggen, egencrypt, egdecrypt, egsign, egverify, egpuballoc, egpubfree, egprivalloc, egprivfree, egsigalloc, egsigfree, egprivtopub - elgamal encryption
4 .SH SYNOPSIS
5 .B #include <u.h>
6 .br
7 .B #include <libc.h>
8 .br
9 .B #include <mp.h>
10 .br
11 .B #include <libsec.h>
12 .PP
13 .B
14 EGpriv* eggen(int nlen, int nrep)
15 .PP
16 .B
17 mpint* egencrypt(EGpub *k, mpint *in, mpint *out)
18 .PP
19 .B
20 mpint* egdecrypt(EGpriv *k, mpint *in, mpint *out)
21 .PP
22 .B
23 EGsig* egsign(EGpriv *k, mpint *m)
24 .PP
25 .B
26 int egverify(EGpub *k, EGsig *sig, mpint *m)
27 .PP
28 .B
29 EGpub* egpuballoc(void)
30 .PP
31 .B
32 void egpubfree(EGpub*)
33 .PP
34 .B
35 EGpriv* egprivalloc(void)
36 .PP
37 .B
38 void egprivfree(EGpriv*)
39 .PP
40 .B
41 EGsig* egsigalloc(void)
42 .PP
43 .B
44 void egsigfree(EGsig*)
45 .PP
46 .B
47 EGpub* egprivtopub(EGpriv*)
48 .SH DESCRIPTION
49 .PP
50 Elgamal is a public key encryption and signature algorithm. The owner of a key publishes
51 the public part of the key:
52 .EX
53 struct EGpub
54 {
55 mpint *p; // modulus
56 mpint *alpha; // generator
57 mpint *key; // (encryption key) alpha**secret mod p
58 };
59 .EE
60 This part can be used for encrypting data (with
61 .IR egencrypt )
62 to be sent to the owner.
63 The owner decrypts (with
64 .IR egdecrypt )
65 using his private key:
66 .EX
67 struct EGpriv
68 {
69 EGpub pub;
70 mpint *secret; // (decryption key)
71 };
72 .EE
73 .PP
74 Keys are generated using
75 .IR eggen .
76 .I Eggen
77 takes both bit length of the modulus
78 and the number of repetitions of the Miller-Rabin
79 primality test to run. If the latter is 0, it does the default number
80 of rounds.
81 .I Egprivtopub
82 returns a newly allocated copy of the public key
83 corresponding to the private key.
84 .PP
85 The routines
86 .IR egpuballoc ,
87 .IR egpubfree ,
88 .IR egprivalloc ,
89 and
90 .I egprivfree
91 are provided to manage key storage.
92 .PP
93 .I Egsign
94 signs message
95 .I m
96 using a private key
97 .I k
98 yielding a
99 .EX
100 struct EGsig
102 mpint *r, *s;
103 };
104 .EE
105 .I Egverify
106 returns 0 if the signature is valid and \-1 if not.
107 .PP
108 The routines
109 .I egsigalloc
110 and
111 .I egsigfree
112 are provided to manage signature storage.
113 .SH SOURCE
114 .B \*9/src/libsec
115 .SH SEE ALSO
116 .IR mp (3),
117 .IR aes (3),
118 .IR blowfish (3),
119 .IR des (3),
120 .IR dsa (3),
121 .IR rc4 (3),
122 .IR rsa (3),
123 .IR sechash (3),
124 .IR prime (3),
125 .IR rand (3)