]> git.lizzy.rs Git - plan9front.git/blob - sys/man/2/elgamal
kernel: increase bootfs.paq compression level and blocksize
[plan9front.git] / sys / man / 2 / elgamal
1 .TH ELGAMAL 2
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
101         {
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 /sys/src/libsec
115 .SH SEE ALSO
116 .IR mp (2),
117 .IR aes (2),
118 .IR blowfish (2),
119 .IR des (2),
120 .IR dsa (2),
121 .IR rc4 (2),
122 .IR rsa (2),
123 .IR sechash (2),
124 .IR prime (2),
125 .IR rand (2)