]> git.lizzy.rs Git - plan9front.git/blob - sys/man/2/dsa
vt: implement proper selections (thanks Ori_B)
[plan9front.git] / sys / man / 2 / dsa
1 .TH DSA 2
2 .SH NAME
3 dsagen, dsasign, dsaverify, dsapuballoc, dsapubfree, dsaprivalloc, dsaprivfree, dsasigalloc, dsasigfree, dsaprivtopub - digital signature algorithm
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 DSApriv*        dsagen(DSApub *opub)
15 .PP
16 .B
17 DSAsig* dsasign(DSApriv *k, mpint *m)
18 .PP
19 .B
20 int             dsaverify(DSApub *k, DSAsig *sig, mpint *m)
21 .PP
22 .B
23 DSApub* dsapuballoc(void)
24 .PP
25 .B
26 void            dsapubfree(DSApub*)
27 .PP
28 .B
29 DSApriv*        dsaprivalloc(void)
30 .PP
31 .B
32 void            dsaprivfree(DSApriv*)
33 .PP
34 .B
35 DSAsig* dsasigalloc(void)
36 .PP
37 .B
38 void            dsasigfree(DSAsig*)
39 .PP
40 .B
41 DSApub* dsaprivtopub(DSApriv*)
42 .SH DESCRIPTION
43 .PP
44 DSA is the NIST approved digital signature algorithm.  The owner of a key publishes
45 the public part of the key:
46 .IP
47 .EX
48 struct DSApub
49 {
50         mpint   *p;     // modulus
51         mpint   *q;     // group order, q divides p-1
52         mpint   *alpha; // group generator
53         mpint   *key;   // alpha**secret mod p
54 };
55 .EE
56 .LP
57 This part can be used for verifying signatures (with
58 .IR dsaverify )
59 created by the owner.
60 The owner signs (with
61 .IR dsasign )
62 using his private key:
63 .IP
64 .EX
65 struct DSApriv
66 {
67         DSApub  pub;
68         mpint   *secret; // (decryption key)
69 };
70 .EE
71 .PP
72 Keys are generated using
73 .IR dsagen .
74 If
75 .IR dsagen 's
76 argument
77 .I opub
78 is
79 .BR nil ,
80 a key is created using a new
81 .B p
82 and
83 .B q
84 generated by
85 .I DSAprimes
86 (see
87 .IR prime (2)).
88 Otherwise,
89 .B p
90 and
91 .B q
92 are copied from the old key.
93 .PP
94 .I Dsaprivtopub
95 returns a newly allocated copy of the public key
96 corresponding to the private key.
97 .PP
98 The routines
99 .IR dsapuballoc ,
100 .IR dsapubfree ,
101 .IR dsaprivalloc ,
102 and
103 .I dsaprivfree
104 are provided to manage key storage.
105 .PP
106 .I Dsasign
107 signs message
108 .I m
109 using a private key
110 .I k
111 yielding a
112 .IP
113 .EX
114 struct DSAsig
115 {
116         mpint   *r, *s;
117 };
118 .EE
119 .LP
120 .I Dsaverify
121 returns 0 if the signature is valid and \-1 if not.
122 .PP
123 The routines
124 .I dsasigalloc
125 and
126 .I dsasigfree
127 are provided to manage signature storage.
128 .SH SOURCE
129 .B /sys/src/libsec
130 .SH SEE ALSO
131 .IR mp (2),
132 .IR aes (2),
133 .IR blowfish (2),
134 .IR des (2),
135 .IR rc4 (2),
136 .IR rsa (2),
137 .IR sechash (2),
138 .IR prime (2),
139 .IR rand (2)