Blame


1 cfa37a7b 2004-04-10 devnull .TH RSA 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull asn1dump,
4 cfa37a7b 2004-04-10 devnull asn1toRSApriv,
5 cfa37a7b 2004-04-10 devnull decodepem,
6 058b0118 2005-01-03 devnull decodepemchain,
7 cfa37a7b 2004-04-10 devnull rsadecrypt,
8 cfa37a7b 2004-04-10 devnull rsaencrypt,
9 058b0118 2005-01-03 devnull rsafill,,
10 cfa37a7b 2004-04-10 devnull rsagen,
11 cfa37a7b 2004-04-10 devnull rsaprivalloc,
12 cfa37a7b 2004-04-10 devnull rsaprivfree,
13 cfa37a7b 2004-04-10 devnull rsaprivtopub,
14 cfa37a7b 2004-04-10 devnull rsapuballoc,
15 cfa37a7b 2004-04-10 devnull rsapubfree,
16 cfa37a7b 2004-04-10 devnull X509toRSApub,
17 058b0118 2005-01-03 devnull X509dump,
18 cfa37a7b 2004-04-10 devnull X509gen,
19 058b0118 2005-01-03 devnull X509req,
20 cfa37a7b 2004-04-10 devnull X509verify \- RSA encryption algorithm
21 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
22 cfa37a7b 2004-04-10 devnull .B #include <u.h>
23 cfa37a7b 2004-04-10 devnull .br
24 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
25 cfa37a7b 2004-04-10 devnull .br
26 cfa37a7b 2004-04-10 devnull .B #include <mp.h>
27 cfa37a7b 2004-04-10 devnull .br
28 cfa37a7b 2004-04-10 devnull .B #include <libsec.h>
29 cfa37a7b 2004-04-10 devnull .PP
30 cfa37a7b 2004-04-10 devnull .B
31 058b0118 2005-01-03 devnull .ta +\w'\fLPEMChain* 'u
32 cfa37a7b 2004-04-10 devnull RSApriv* rsagen(int nlen, int elen, int nrep)
33 cfa37a7b 2004-04-10 devnull .PP
34 cfa37a7b 2004-04-10 devnull .B
35 058b0118 2005-01-03 devnull RSApriv* rsafill(mpint *n, mpint *ek, mpint *dk, mpint *p, mpint *q)
36 058b0118 2005-01-03 devnull .PP
37 058b0118 2005-01-03 devnull .B
38 cfa37a7b 2004-04-10 devnull mpint* rsaencrypt(RSApub *k, mpint *in, mpint *out)
39 cfa37a7b 2004-04-10 devnull .PP
40 cfa37a7b 2004-04-10 devnull .B
41 cfa37a7b 2004-04-10 devnull mpint* rsadecrypt(RSApriv *k, mpint *in, mpint *out)
42 cfa37a7b 2004-04-10 devnull .PP
43 cfa37a7b 2004-04-10 devnull .B
44 cfa37a7b 2004-04-10 devnull RSApub* rsapuballoc(void)
45 cfa37a7b 2004-04-10 devnull .PP
46 cfa37a7b 2004-04-10 devnull .B
47 cfa37a7b 2004-04-10 devnull void rsapubfree(RSApub*)
48 cfa37a7b 2004-04-10 devnull .PP
49 cfa37a7b 2004-04-10 devnull .B
50 cfa37a7b 2004-04-10 devnull RSApriv* rsaprivalloc(void)
51 cfa37a7b 2004-04-10 devnull .PP
52 cfa37a7b 2004-04-10 devnull .B
53 cfa37a7b 2004-04-10 devnull void rsaprivfree(RSApriv*)
54 cfa37a7b 2004-04-10 devnull .PP
55 cfa37a7b 2004-04-10 devnull .B
56 cfa37a7b 2004-04-10 devnull RSApub* rsaprivtopub(RSApriv*)
57 cfa37a7b 2004-04-10 devnull .PP
58 cfa37a7b 2004-04-10 devnull .B
59 cfa37a7b 2004-04-10 devnull RSApub* X509toRSApub(uchar *cert, int ncert, char *name, int nname)
60 cfa37a7b 2004-04-10 devnull .PP
61 cfa37a7b 2004-04-10 devnull .B
62 cfa37a7b 2004-04-10 devnull RSApriv* asn1toRSApriv(uchar *priv, int npriv)
63 cfa37a7b 2004-04-10 devnull .PP
64 cfa37a7b 2004-04-10 devnull .B
65 cfa37a7b 2004-04-10 devnull void asn1dump(uchar *der, int len)
66 cfa37a7b 2004-04-10 devnull .PP
67 cfa37a7b 2004-04-10 devnull .B
68 cfa37a7b 2004-04-10 devnull uchar* decodepem(char *s, char *type, int *len)
69 cfa37a7b 2004-04-10 devnull .PP
70 cfa37a7b 2004-04-10 devnull .B
71 058b0118 2005-01-03 devnull PEMChain* decodepemchain(char *s, char *type)
72 058b0118 2005-01-03 devnull .PP
73 058b0118 2005-01-03 devnull .B
74 058b0118 2005-01-03 devnull void X509dump(uchar *cert, int ncert)
75 058b0118 2005-01-03 devnull .PP
76 058b0118 2005-01-03 devnull .B
77 cfa37a7b 2004-04-10 devnull uchar* X509gen(RSApriv *priv, char *subj, ulong valid[2], int *certlen);
78 cfa37a7b 2004-04-10 devnull .PP
79 cfa37a7b 2004-04-10 devnull .B
80 cfa37a7b 2004-04-10 devnull uchar* X509req(RSApriv *priv, char *subj, int *certlen);
81 cfa37a7b 2004-04-10 devnull .PP
82 cfa37a7b 2004-04-10 devnull .B
83 cfa37a7b 2004-04-10 devnull char* X509verify(uchar *cert, int ncert, RSApub *pk)
84 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
85 cfa37a7b 2004-04-10 devnull .PP
86 cfa37a7b 2004-04-10 devnull RSA is a public key encryption algorithm. The owner of a key publishes
87 cfa37a7b 2004-04-10 devnull the public part of the key:
88 cfa37a7b 2004-04-10 devnull .EX
89 cfa37a7b 2004-04-10 devnull struct RSApub
90 cfa37a7b 2004-04-10 devnull {
91 cfa37a7b 2004-04-10 devnull mpint *n; // modulus
92 cfa37a7b 2004-04-10 devnull mpint *ek; // exp (encryption key)
93 cfa37a7b 2004-04-10 devnull };
94 cfa37a7b 2004-04-10 devnull .EE
95 cfa37a7b 2004-04-10 devnull This part can be used for encrypting data (with
96 cfa37a7b 2004-04-10 devnull .IR rsaencrypt )
97 cfa37a7b 2004-04-10 devnull to be sent to the owner.
98 cfa37a7b 2004-04-10 devnull The owner decrypts (with
99 cfa37a7b 2004-04-10 devnull .IR rsadecrypt )
100 cfa37a7b 2004-04-10 devnull using his private key:
101 cfa37a7b 2004-04-10 devnull .EX
102 cfa37a7b 2004-04-10 devnull struct RSApriv
103 cfa37a7b 2004-04-10 devnull {
104 cfa37a7b 2004-04-10 devnull RSApub pub;
105 cfa37a7b 2004-04-10 devnull mpint *dk; // exp (decryption key)
106 cfa37a7b 2004-04-10 devnull
107 cfa37a7b 2004-04-10 devnull // precomputed crt values
108 cfa37a7b 2004-04-10 devnull mpint *p;
109 cfa37a7b 2004-04-10 devnull mpint *q;
110 cfa37a7b 2004-04-10 devnull mpint *kp; // k mod p-1
111 cfa37a7b 2004-04-10 devnull mpint *kq; // k mod q-1
112 cfa37a7b 2004-04-10 devnull mpint *c2; // for converting residues to number
113 cfa37a7b 2004-04-10 devnull };
114 cfa37a7b 2004-04-10 devnull .EE
115 cfa37a7b 2004-04-10 devnull .PP
116 cfa37a7b 2004-04-10 devnull Keys are generated using
117 cfa37a7b 2004-04-10 devnull .IR rsagen .
118 cfa37a7b 2004-04-10 devnull .I Rsagen
119 cfa37a7b 2004-04-10 devnull takes both bit length of the modulus, the bit length of the
120 cfa37a7b 2004-04-10 devnull public key exponent, and the number of repetitions of the Miller-Rabin
121 cfa37a7b 2004-04-10 devnull primality test to run. If the latter is 0, it does the default number
122 cfa37a7b 2004-04-10 devnull of rounds.
123 cfa37a7b 2004-04-10 devnull .I Rsagen
124 cfa37a7b 2004-04-10 devnull returns a newly allocated structure containing both
125 cfa37a7b 2004-04-10 devnull public and private keys.
126 cfa37a7b 2004-04-10 devnull .I Rsaprivtopub
127 cfa37a7b 2004-04-10 devnull returns a newly allocated copy of the public key
128 cfa37a7b 2004-04-10 devnull corresponding to the private key.
129 cfa37a7b 2004-04-10 devnull .PP
130 058b0118 2005-01-03 devnull .I Rsafill
131 058b0118 2005-01-03 devnull takes as input the bare minimum pieces of an RSA private key
132 058b0118 2005-01-03 devnull and computes the rest
133 058b0118 2005-01-03 devnull .RB ( kp ,
134 058b0118 2005-01-03 devnull .BR kq ,
135 058b0118 2005-01-03 devnull and
136 058b0118 2005-01-03 devnull .BR c2 ).
137 058b0118 2005-01-03 devnull It returns a new private key.
138 058b0118 2005-01-03 devnull All the
139 058b0118 2005-01-03 devnull .BR mpint s
140 058b0118 2005-01-03 devnull in the key,
141 058b0118 2005-01-03 devnull even the ones that correspond directly to
142 058b0118 2005-01-03 devnull .IR rsafill 's
143 058b0118 2005-01-03 devnull input parameters,
144 058b0118 2005-01-03 devnull are freshly allocated,
145 058b0118 2005-01-03 devnull .PP
146 cfa37a7b 2004-04-10 devnull The routines
147 cfa37a7b 2004-04-10 devnull .IR rsaalloc ,
148 cfa37a7b 2004-04-10 devnull .IR rsafree ,
149 cfa37a7b 2004-04-10 devnull .IR rsapuballoc ,
150 cfa37a7b 2004-04-10 devnull .IR rsapubfree ,
151 cfa37a7b 2004-04-10 devnull .IR rsaprivalloc ,
152 cfa37a7b 2004-04-10 devnull and
153 cfa37a7b 2004-04-10 devnull .I rsaprivfree
154 cfa37a7b 2004-04-10 devnull are provided to aid in user provided key I/O.
155 cfa37a7b 2004-04-10 devnull .PP
156 cfa37a7b 2004-04-10 devnull Given a binary X.509
157 cfa37a7b 2004-04-10 devnull .IR cert ,
158 cfa37a7b 2004-04-10 devnull the routine
159 cfa37a7b 2004-04-10 devnull .I X509toRSApub
160 cfa37a7b 2004-04-10 devnull returns the public key and, if
161 cfa37a7b 2004-04-10 devnull .I name
162 cfa37a7b 2004-04-10 devnull is not nil, the CN part of the Distinguished Name of the
163 cfa37a7b 2004-04-10 devnull certificate's Subject.
164 cfa37a7b 2004-04-10 devnull (This is conventionally a userid or a host DNS name.)
165 cfa37a7b 2004-04-10 devnull No verification is done of the certificate signature; the
166 cfa37a7b 2004-04-10 devnull caller should check the fingerprint,
167 cfa37a7b 2004-04-10 devnull .IR sha1(cert) ,
168 cfa37a7b 2004-04-10 devnull against a table or check the certificate by other means.
169 cfa37a7b 2004-04-10 devnull X.509 certificates are often stored in PEM format; use
170 cfa37a7b 2004-04-10 devnull .I dec64
171 cfa37a7b 2004-04-10 devnull to convert to binary before computing the fingerprint or calling
172 cfa37a7b 2004-04-10 devnull .IR X509toRSApub .
173 cfa37a7b 2004-04-10 devnull For the special case of
174 cfa37a7b 2004-04-10 devnull certificates signed by a known trusted key
175 cfa37a7b 2004-04-10 devnull (in a single step, without certificate chains)
176 cfa37a7b 2004-04-10 devnull .I X509verify
177 cfa37a7b 2004-04-10 devnull checks the signature on
178 cfa37a7b 2004-04-10 devnull .IR cert .
179 cfa37a7b 2004-04-10 devnull It returns nil if successful, else an error string.
180 cfa37a7b 2004-04-10 devnull .PP
181 058b0118 2005-01-03 devnull .I X509dump
182 058b0118 2005-01-03 devnull prints an X.509 certificate to standard ouptut.
183 058b0118 2005-01-03 devnull .PP
184 cfa37a7b 2004-04-10 devnull .I X509gen
185 cfa37a7b 2004-04-10 devnull creates a self-signed X.509 certificate, given an RSA keypair
186 cfa37a7b 2004-04-10 devnull .IR priv ,
187 cfa37a7b 2004-04-10 devnull a issuer/subject string
188 cfa37a7b 2004-04-10 devnull .IR subj ,
189 cfa37a7b 2004-04-10 devnull and the starting and ending validity dates,
190 cfa37a7b 2004-04-10 devnull .IR valid .
191 cfa37a7b 2004-04-10 devnull Length of the allocated binary certificate is stored in
192 cfa37a7b 2004-04-10 devnull .IR certlen .
193 cfa37a7b 2004-04-10 devnull The subject line is conventionally of the form
194 cfa37a7b 2004-04-10 devnull .EX
195 cfa37a7b 2004-04-10 devnull "C=US ST=NJ L=07922 O=Lucent OU='Bell Labs' CN=Eric"
196 cfa37a7b 2004-04-10 devnull .EE
197 cfa37a7b 2004-04-10 devnull using the quoting conventions of
198 058b0118 2005-01-03 devnull .I tokenize
199 058b0118 2005-01-03 devnull (see
200 d32deab1 2020-08-16 rsc .MR getfields (3) ).
201 cfa37a7b 2004-04-10 devnull .PP
202 058b0118 2005-01-03 devnull .I X509req
203 058b0118 2005-01-03 devnull creates an X.509 certification request.
204 058b0118 2005-01-03 devnull .PP
205 cfa37a7b 2004-04-10 devnull .I Asn1toRSApriv
206 cfa37a7b 2004-04-10 devnull converts an ASN1 formatted RSA private key into the corresponding
207 cfa37a7b 2004-04-10 devnull .B RSApriv
208 cfa37a7b 2004-04-10 devnull structure.
209 cfa37a7b 2004-04-10 devnull .PP
210 cfa37a7b 2004-04-10 devnull .I Asn1dump
211 cfa37a7b 2004-04-10 devnull prints an ASN1 object to standard output.
212 cfa37a7b 2004-04-10 devnull .PP
213 cfa37a7b 2004-04-10 devnull .I Decodepem
214 cfa37a7b 2004-04-10 devnull takes a zero terminated string,
215 cfa37a7b 2004-04-10 devnull .IR s ,
216 cfa37a7b 2004-04-10 devnull and decodes the PEM (privacy-enhanced mail) formatted section for
217 cfa37a7b 2004-04-10 devnull .I type
218 cfa37a7b 2004-04-10 devnull within it.
219 cfa37a7b 2004-04-10 devnull If successful, it returns the decoded section and sets
220 cfa37a7b 2004-04-10 devnull .BI * len
221 cfa37a7b 2004-04-10 devnull to its decoded length.
222 cfa37a7b 2004-04-10 devnull If not, it returns
223 cfa37a7b 2004-04-10 devnull .BR nil ,
224 cfa37a7b 2004-04-10 devnull and
225 cfa37a7b 2004-04-10 devnull .BI * len
226 cfa37a7b 2004-04-10 devnull is undefined.
227 058b0118 2005-01-03 devnull .PP
228 058b0118 2005-01-03 devnull .I Decodepemchain
229 058b0118 2005-01-03 devnull is similar but expects a sequence of PEM-formatted sections
230 058b0118 2005-01-03 devnull and returns a linked list of the decodings:
231 058b0118 2005-01-03 devnull .IP
232 058b0118 2005-01-03 devnull .EX
233 058b0118 2005-01-03 devnull typedef struct PEMChain PEMChain
234 058b0118 2005-01-03 devnull struct PEMChain
235 058b0118 2005-01-03 devnull {
236 058b0118 2005-01-03 devnull PEMChain *next;
237 058b0118 2005-01-03 devnull uchar *pem;
238 058b0118 2005-01-03 devnull int pemlen;
239 058b0118 2005-01-03 devnull };
240 058b0118 2005-01-03 devnull .EE
241 cfa37a7b 2004-04-10 devnull .SH SOURCE
242 c3674de4 2005-01-11 devnull .B \*9/src/libsec
243 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
244 d32deab1 2020-08-16 rsc .MR mp (3) ,
245 d32deab1 2020-08-16 rsc .MR aes (3) ,
246 d32deab1 2020-08-16 rsc .MR blowfish (3) ,
247 d32deab1 2020-08-16 rsc .MR des (3) ,
248 d32deab1 2020-08-16 rsc .MR dsa (3) ,
249 d32deab1 2020-08-16 rsc .MR elgamal (3) ,
250 d32deab1 2020-08-16 rsc .MR rc4 (3) ,
251 d32deab1 2020-08-16 rsc .MR sechash (3) ,
252 d32deab1 2020-08-16 rsc .MR prime (3) ,
253 d32deab1 2020-08-16 rsc .MR rand (3)
254 058b0118 2005-01-03 devnull .\" .IR pem (8)