Subversion Repositories planix.SVN

Rev

Rev 34 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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)