Blame


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