Blame


1 f7012583 2003-11-25 devnull #ifndef _LIBSEC_H_
2 f7012583 2003-11-25 devnull #define _LIBSEC_H_ 1
3 f7012583 2003-11-25 devnull #if defined(__cplusplus)
4 f7012583 2003-11-25 devnull extern "C" {
5 f7012583 2003-11-25 devnull #endif
6 97a5e5f2 2003-11-23 devnull /*
7 97a5e5f2 2003-11-23 devnull #pragma lib "libsec.a"
8 97a5e5f2 2003-11-23 devnull #pragma src "/sys/src/libsec"
9 97a5e5f2 2003-11-23 devnull */
10 1a0954ab 2005-01-04 devnull
11 1a0954ab 2005-01-04 devnull AUTOLIB(sec)
12 97a5e5f2 2003-11-23 devnull
13 97a5e5f2 2003-11-23 devnull #ifndef _MPINT
14 97a5e5f2 2003-11-23 devnull typedef struct mpint mpint;
15 97a5e5f2 2003-11-23 devnull #endif
16 97a5e5f2 2003-11-23 devnull
17 cbeb0b26 2006-04-01 devnull /*******************************************************/
18 cbeb0b26 2006-04-01 devnull /* AES definitions */
19 cbeb0b26 2006-04-01 devnull /*******************************************************/
20 97a5e5f2 2003-11-23 devnull
21 97a5e5f2 2003-11-23 devnull enum
22 97a5e5f2 2003-11-23 devnull {
23 97a5e5f2 2003-11-23 devnull AESbsize= 16,
24 97a5e5f2 2003-11-23 devnull AESmaxkey= 32,
25 97a5e5f2 2003-11-23 devnull AESmaxrounds= 14
26 97a5e5f2 2003-11-23 devnull };
27 97a5e5f2 2003-11-23 devnull
28 97a5e5f2 2003-11-23 devnull typedef struct AESstate AESstate;
29 97a5e5f2 2003-11-23 devnull struct AESstate
30 97a5e5f2 2003-11-23 devnull {
31 97a5e5f2 2003-11-23 devnull ulong setup;
32 97a5e5f2 2003-11-23 devnull int rounds;
33 97a5e5f2 2003-11-23 devnull int keybytes;
34 97a5e5f2 2003-11-23 devnull uchar key[AESmaxkey]; /* unexpanded key */
35 97a5e5f2 2003-11-23 devnull u32int ekey[4*(AESmaxrounds + 1)]; /* encryption key */
36 97a5e5f2 2003-11-23 devnull u32int dkey[4*(AESmaxrounds + 1)]; /* decryption key */
37 97a5e5f2 2003-11-23 devnull uchar ivec[AESbsize]; /* initialization vector */
38 97a5e5f2 2003-11-23 devnull };
39 97a5e5f2 2003-11-23 devnull
40 97a5e5f2 2003-11-23 devnull void setupAESstate(AESstate *s, uchar key[], int keybytes, uchar *ivec);
41 97a5e5f2 2003-11-23 devnull void aesCBCencrypt(uchar *p, int len, AESstate *s);
42 97a5e5f2 2003-11-23 devnull void aesCBCdecrypt(uchar *p, int len, AESstate *s);
43 97a5e5f2 2003-11-23 devnull
44 cbeb0b26 2006-04-01 devnull /*******************************************************/
45 cbeb0b26 2006-04-01 devnull /* Blowfish Definitions */
46 cbeb0b26 2006-04-01 devnull /*******************************************************/
47 97a5e5f2 2003-11-23 devnull
48 97a5e5f2 2003-11-23 devnull enum
49 97a5e5f2 2003-11-23 devnull {
50 97a5e5f2 2003-11-23 devnull BFbsize = 8,
51 97a5e5f2 2003-11-23 devnull BFrounds = 16
52 97a5e5f2 2003-11-23 devnull };
53 97a5e5f2 2003-11-23 devnull
54 cbeb0b26 2006-04-01 devnull /* 16-round Blowfish */
55 97a5e5f2 2003-11-23 devnull typedef struct BFstate BFstate;
56 97a5e5f2 2003-11-23 devnull struct BFstate
57 97a5e5f2 2003-11-23 devnull {
58 97a5e5f2 2003-11-23 devnull ulong setup;
59 97a5e5f2 2003-11-23 devnull
60 97a5e5f2 2003-11-23 devnull uchar key[56];
61 97a5e5f2 2003-11-23 devnull uchar ivec[8];
62 97a5e5f2 2003-11-23 devnull
63 97a5e5f2 2003-11-23 devnull u32int pbox[BFrounds+2];
64 97a5e5f2 2003-11-23 devnull u32int sbox[1024];
65 97a5e5f2 2003-11-23 devnull };
66 97a5e5f2 2003-11-23 devnull
67 97a5e5f2 2003-11-23 devnull void setupBFstate(BFstate *s, uchar key[], int keybytes, uchar *ivec);
68 97a5e5f2 2003-11-23 devnull void bfCBCencrypt(uchar*, int, BFstate*);
69 97a5e5f2 2003-11-23 devnull void bfCBCdecrypt(uchar*, int, BFstate*);
70 97a5e5f2 2003-11-23 devnull void bfECBencrypt(uchar*, int, BFstate*);
71 97a5e5f2 2003-11-23 devnull void bfECBdecrypt(uchar*, int, BFstate*);
72 97a5e5f2 2003-11-23 devnull
73 cbeb0b26 2006-04-01 devnull /*******************************************************/
74 cbeb0b26 2006-04-01 devnull /* DES definitions */
75 cbeb0b26 2006-04-01 devnull /*******************************************************/
76 97a5e5f2 2003-11-23 devnull
77 97a5e5f2 2003-11-23 devnull enum
78 97a5e5f2 2003-11-23 devnull {
79 97a5e5f2 2003-11-23 devnull DESbsize= 8
80 97a5e5f2 2003-11-23 devnull };
81 97a5e5f2 2003-11-23 devnull
82 cbeb0b26 2006-04-01 devnull /* single des */
83 97a5e5f2 2003-11-23 devnull typedef struct DESstate DESstate;
84 97a5e5f2 2003-11-23 devnull struct DESstate
85 97a5e5f2 2003-11-23 devnull {
86 97a5e5f2 2003-11-23 devnull ulong setup;
87 97a5e5f2 2003-11-23 devnull uchar key[8]; /* unexpanded key */
88 97a5e5f2 2003-11-23 devnull ulong expanded[32]; /* expanded key */
89 97a5e5f2 2003-11-23 devnull uchar ivec[8]; /* initialization vector */
90 97a5e5f2 2003-11-23 devnull };
91 97a5e5f2 2003-11-23 devnull
92 97a5e5f2 2003-11-23 devnull void setupDESstate(DESstate *s, uchar key[8], uchar *ivec);
93 97a5e5f2 2003-11-23 devnull void des_key_setup(uchar[8], ulong[32]);
94 97a5e5f2 2003-11-23 devnull void block_cipher(ulong*, uchar*, int);
95 97a5e5f2 2003-11-23 devnull void desCBCencrypt(uchar*, int, DESstate*);
96 97a5e5f2 2003-11-23 devnull void desCBCdecrypt(uchar*, int, DESstate*);
97 97a5e5f2 2003-11-23 devnull void desECBencrypt(uchar*, int, DESstate*);
98 97a5e5f2 2003-11-23 devnull void desECBdecrypt(uchar*, int, DESstate*);
99 97a5e5f2 2003-11-23 devnull
100 cbeb0b26 2006-04-01 devnull /* for backward compatibility with 7 byte DES key format */
101 97a5e5f2 2003-11-23 devnull void des56to64(uchar *k56, uchar *k64);
102 97a5e5f2 2003-11-23 devnull void des64to56(uchar *k64, uchar *k56);
103 97a5e5f2 2003-11-23 devnull void key_setup(uchar[7], ulong[32]);
104 97a5e5f2 2003-11-23 devnull
105 cbeb0b26 2006-04-01 devnull /* triple des encrypt/decrypt orderings */
106 97a5e5f2 2003-11-23 devnull enum {
107 97a5e5f2 2003-11-23 devnull DES3E= 0,
108 97a5e5f2 2003-11-23 devnull DES3D= 1,
109 97a5e5f2 2003-11-23 devnull DES3EEE= 0,
110 97a5e5f2 2003-11-23 devnull DES3EDE= 2,
111 97a5e5f2 2003-11-23 devnull DES3DED= 5,
112 97a5e5f2 2003-11-23 devnull DES3DDD= 7
113 97a5e5f2 2003-11-23 devnull };
114 97a5e5f2 2003-11-23 devnull
115 97a5e5f2 2003-11-23 devnull typedef struct DES3state DES3state;
116 97a5e5f2 2003-11-23 devnull struct DES3state
117 97a5e5f2 2003-11-23 devnull {
118 97a5e5f2 2003-11-23 devnull ulong setup;
119 97a5e5f2 2003-11-23 devnull uchar key[3][8]; /* unexpanded key */
120 97a5e5f2 2003-11-23 devnull ulong expanded[3][32]; /* expanded key */
121 97a5e5f2 2003-11-23 devnull uchar ivec[8]; /* initialization vector */
122 97a5e5f2 2003-11-23 devnull };
123 97a5e5f2 2003-11-23 devnull
124 97a5e5f2 2003-11-23 devnull void setupDES3state(DES3state *s, uchar key[3][8], uchar *ivec);
125 97a5e5f2 2003-11-23 devnull void triple_block_cipher(ulong keys[3][32], uchar*, int);
126 97a5e5f2 2003-11-23 devnull void des3CBCencrypt(uchar*, int, DES3state*);
127 97a5e5f2 2003-11-23 devnull void des3CBCdecrypt(uchar*, int, DES3state*);
128 97a5e5f2 2003-11-23 devnull void des3ECBencrypt(uchar*, int, DES3state*);
129 97a5e5f2 2003-11-23 devnull void des3ECBdecrypt(uchar*, int, DES3state*);
130 97a5e5f2 2003-11-23 devnull
131 cbeb0b26 2006-04-01 devnull /*******************************************************/
132 cbeb0b26 2006-04-01 devnull /* digests */
133 cbeb0b26 2006-04-01 devnull /*******************************************************/
134 97a5e5f2 2003-11-23 devnull
135 97a5e5f2 2003-11-23 devnull enum
136 97a5e5f2 2003-11-23 devnull {
137 97a5e5f2 2003-11-23 devnull SHA1dlen= 20, /* SHA digest length */
138 97a5e5f2 2003-11-23 devnull MD4dlen= 16, /* MD4 digest length */
139 97a5e5f2 2003-11-23 devnull MD5dlen= 16 /* MD5 digest length */
140 97a5e5f2 2003-11-23 devnull };
141 97a5e5f2 2003-11-23 devnull
142 97a5e5f2 2003-11-23 devnull typedef struct DigestState DigestState;
143 97a5e5f2 2003-11-23 devnull struct DigestState
144 97a5e5f2 2003-11-23 devnull {
145 97a5e5f2 2003-11-23 devnull ulong len;
146 97a5e5f2 2003-11-23 devnull u32int state[5];
147 97a5e5f2 2003-11-23 devnull uchar buf[128];
148 97a5e5f2 2003-11-23 devnull int blen;
149 97a5e5f2 2003-11-23 devnull char malloced;
150 97a5e5f2 2003-11-23 devnull char seeded;
151 97a5e5f2 2003-11-23 devnull };
152 97a5e5f2 2003-11-23 devnull typedef struct DigestState SHAstate; /* obsolete name */
153 97a5e5f2 2003-11-23 devnull typedef struct DigestState SHA1state;
154 97a5e5f2 2003-11-23 devnull typedef struct DigestState MD5state;
155 97a5e5f2 2003-11-23 devnull typedef struct DigestState MD4state;
156 97a5e5f2 2003-11-23 devnull
157 97a5e5f2 2003-11-23 devnull DigestState* md4(uchar*, ulong, uchar*, DigestState*);
158 97a5e5f2 2003-11-23 devnull DigestState* md5(uchar*, ulong, uchar*, DigestState*);
159 97a5e5f2 2003-11-23 devnull DigestState* sha1(uchar*, ulong, uchar*, DigestState*);
160 97a5e5f2 2003-11-23 devnull DigestState* hmac_md5(uchar*, ulong, uchar*, ulong, uchar*, DigestState*);
161 97a5e5f2 2003-11-23 devnull DigestState* hmac_sha1(uchar*, ulong, uchar*, ulong, uchar*, DigestState*);
162 97a5e5f2 2003-11-23 devnull char* sha1pickle(SHA1state*);
163 97a5e5f2 2003-11-23 devnull SHA1state* sha1unpickle(char*);
164 97a5e5f2 2003-11-23 devnull
165 cbeb0b26 2006-04-01 devnull /*******************************************************/
166 cbeb0b26 2006-04-01 devnull /* random number generation */
167 cbeb0b26 2006-04-01 devnull /*******************************************************/
168 97a5e5f2 2003-11-23 devnull void genrandom(uchar *buf, int nbytes);
169 97a5e5f2 2003-11-23 devnull void prng(uchar *buf, int nbytes);
170 97a5e5f2 2003-11-23 devnull ulong fastrand(void);
171 97a5e5f2 2003-11-23 devnull ulong nfastrand(ulong);
172 97a5e5f2 2003-11-23 devnull
173 cbeb0b26 2006-04-01 devnull /*******************************************************/
174 cbeb0b26 2006-04-01 devnull /* primes */
175 cbeb0b26 2006-04-01 devnull /*******************************************************/
176 cbeb0b26 2006-04-01 devnull void genprime(mpint *p, int n, int accuracy); /* generate an n bit probable prime */
177 cbeb0b26 2006-04-01 devnull void gensafeprime(mpint *p, mpint *alpha, int n, int accuracy); /* prime and generator */
178 cbeb0b26 2006-04-01 devnull void genstrongprime(mpint *p, int n, int accuracy); /* generate an n bit strong prime */
179 97a5e5f2 2003-11-23 devnull void DSAprimes(mpint *q, mpint *p, uchar seed[SHA1dlen]);
180 cbeb0b26 2006-04-01 devnull int probably_prime(mpint *n, int nrep); /* miller-rabin test */
181 cbeb0b26 2006-04-01 devnull int smallprimetest(mpint *p); /* returns -1 if not prime, 0 otherwise */
182 97a5e5f2 2003-11-23 devnull
183 cbeb0b26 2006-04-01 devnull /*******************************************************/
184 cbeb0b26 2006-04-01 devnull /* rc4 */
185 cbeb0b26 2006-04-01 devnull /*******************************************************/
186 97a5e5f2 2003-11-23 devnull typedef struct RC4state RC4state;
187 97a5e5f2 2003-11-23 devnull struct RC4state
188 97a5e5f2 2003-11-23 devnull {
189 97a5e5f2 2003-11-23 devnull uchar state[256];
190 97a5e5f2 2003-11-23 devnull uchar x;
191 97a5e5f2 2003-11-23 devnull uchar y;
192 97a5e5f2 2003-11-23 devnull };
193 97a5e5f2 2003-11-23 devnull
194 97a5e5f2 2003-11-23 devnull void setupRC4state(RC4state*, uchar*, int);
195 97a5e5f2 2003-11-23 devnull void rc4(RC4state*, uchar*, int);
196 97a5e5f2 2003-11-23 devnull void rc4skip(RC4state*, int);
197 97a5e5f2 2003-11-23 devnull void rc4back(RC4state*, int);
198 97a5e5f2 2003-11-23 devnull
199 cbeb0b26 2006-04-01 devnull /*******************************************************/
200 cbeb0b26 2006-04-01 devnull /* rsa */
201 cbeb0b26 2006-04-01 devnull /*******************************************************/
202 97a5e5f2 2003-11-23 devnull typedef struct RSApub RSApub;
203 97a5e5f2 2003-11-23 devnull typedef struct RSApriv RSApriv;
204 678ede7e 2004-12-27 devnull typedef struct PEMChain PEMChain;
205 97a5e5f2 2003-11-23 devnull
206 cbeb0b26 2006-04-01 devnull /* public/encryption key */
207 97a5e5f2 2003-11-23 devnull struct RSApub
208 97a5e5f2 2003-11-23 devnull {
209 cbeb0b26 2006-04-01 devnull mpint *n; /* modulus */
210 cbeb0b26 2006-04-01 devnull mpint *ek; /* exp (encryption key) */
211 97a5e5f2 2003-11-23 devnull };
212 97a5e5f2 2003-11-23 devnull
213 cbeb0b26 2006-04-01 devnull /* private/decryption key */
214 97a5e5f2 2003-11-23 devnull struct RSApriv
215 97a5e5f2 2003-11-23 devnull {
216 97a5e5f2 2003-11-23 devnull RSApub pub;
217 97a5e5f2 2003-11-23 devnull
218 cbeb0b26 2006-04-01 devnull mpint *dk; /* exp (decryption key) */
219 97a5e5f2 2003-11-23 devnull
220 cbeb0b26 2006-04-01 devnull /* precomputed values to help with chinese remainder theorem calc */
221 97a5e5f2 2003-11-23 devnull mpint *p;
222 97a5e5f2 2003-11-23 devnull mpint *q;
223 cbeb0b26 2006-04-01 devnull mpint *kp; /* dk mod p-1 */
224 cbeb0b26 2006-04-01 devnull mpint *kq; /* dk mod q-1 */
225 cbeb0b26 2006-04-01 devnull mpint *c2; /* (inv p) mod q */
226 97a5e5f2 2003-11-23 devnull };
227 97a5e5f2 2003-11-23 devnull
228 678ede7e 2004-12-27 devnull struct PEMChain
229 678ede7e 2004-12-27 devnull {
230 678ede7e 2004-12-27 devnull PEMChain *next;
231 678ede7e 2004-12-27 devnull uchar *pem;
232 678ede7e 2004-12-27 devnull int pemlen;
233 678ede7e 2004-12-27 devnull };
234 678ede7e 2004-12-27 devnull
235 97a5e5f2 2003-11-23 devnull RSApriv* rsagen(int nlen, int elen, int rounds);
236 97a5e5f2 2003-11-23 devnull mpint* rsaencrypt(RSApub *k, mpint *in, mpint *out);
237 97a5e5f2 2003-11-23 devnull mpint* rsadecrypt(RSApriv *k, mpint *in, mpint *out);
238 97a5e5f2 2003-11-23 devnull RSApub* rsapuballoc(void);
239 97a5e5f2 2003-11-23 devnull void rsapubfree(RSApub*);
240 97a5e5f2 2003-11-23 devnull RSApriv* rsaprivalloc(void);
241 97a5e5f2 2003-11-23 devnull void rsaprivfree(RSApriv*);
242 97a5e5f2 2003-11-23 devnull RSApub* rsaprivtopub(RSApriv*);
243 97a5e5f2 2003-11-23 devnull RSApub* X509toRSApub(uchar*, int, char*, int);
244 97a5e5f2 2003-11-23 devnull RSApriv* asn1toRSApriv(uchar*, int);
245 678ede7e 2004-12-27 devnull uchar* decodepem(char *s, char *type, int *len, char**);
246 678ede7e 2004-12-27 devnull PEMChain* decodepemchain(char *s, char *type);
247 97a5e5f2 2003-11-23 devnull uchar* X509gen(RSApriv *priv, char *subj, ulong valid[2], int *certlen);
248 42e8d853 2005-02-13 devnull RSApriv* rsafill(mpint *n, mpint *ek, mpint *dk, mpint *p, mpint *q);
249 42e8d853 2005-02-13 devnull uchar* X509req(RSApriv *priv, char *subj, int *certlen);
250 97a5e5f2 2003-11-23 devnull
251 cbeb0b26 2006-04-01 devnull /*******************************************************/
252 cbeb0b26 2006-04-01 devnull /* elgamal */
253 cbeb0b26 2006-04-01 devnull /*******************************************************/
254 97a5e5f2 2003-11-23 devnull typedef struct EGpub EGpub;
255 97a5e5f2 2003-11-23 devnull typedef struct EGpriv EGpriv;
256 97a5e5f2 2003-11-23 devnull typedef struct EGsig EGsig;
257 97a5e5f2 2003-11-23 devnull
258 cbeb0b26 2006-04-01 devnull /* public/encryption key */
259 97a5e5f2 2003-11-23 devnull struct EGpub
260 97a5e5f2 2003-11-23 devnull {
261 cbeb0b26 2006-04-01 devnull mpint *p; /* modulus */
262 cbeb0b26 2006-04-01 devnull mpint *alpha; /* generator */
263 cbeb0b26 2006-04-01 devnull mpint *key; /* (encryption key) alpha**secret mod p */
264 97a5e5f2 2003-11-23 devnull };
265 97a5e5f2 2003-11-23 devnull
266 cbeb0b26 2006-04-01 devnull /* private/decryption key */
267 97a5e5f2 2003-11-23 devnull struct EGpriv
268 97a5e5f2 2003-11-23 devnull {
269 97a5e5f2 2003-11-23 devnull EGpub pub;
270 cbeb0b26 2006-04-01 devnull mpint *secret; /* (decryption key) */
271 97a5e5f2 2003-11-23 devnull };
272 97a5e5f2 2003-11-23 devnull
273 cbeb0b26 2006-04-01 devnull /* signature */
274 97a5e5f2 2003-11-23 devnull struct EGsig
275 97a5e5f2 2003-11-23 devnull {
276 97a5e5f2 2003-11-23 devnull mpint *r, *s;
277 97a5e5f2 2003-11-23 devnull };
278 97a5e5f2 2003-11-23 devnull
279 97a5e5f2 2003-11-23 devnull EGpriv* eggen(int nlen, int rounds);
280 97a5e5f2 2003-11-23 devnull mpint* egencrypt(EGpub *k, mpint *in, mpint *out);
281 97a5e5f2 2003-11-23 devnull mpint* egdecrypt(EGpriv *k, mpint *in, mpint *out);
282 97a5e5f2 2003-11-23 devnull EGsig* egsign(EGpriv *k, mpint *m);
283 97a5e5f2 2003-11-23 devnull int egverify(EGpub *k, EGsig *sig, mpint *m);
284 97a5e5f2 2003-11-23 devnull EGpub* egpuballoc(void);
285 97a5e5f2 2003-11-23 devnull void egpubfree(EGpub*);
286 97a5e5f2 2003-11-23 devnull EGpriv* egprivalloc(void);
287 97a5e5f2 2003-11-23 devnull void egprivfree(EGpriv*);
288 97a5e5f2 2003-11-23 devnull EGsig* egsigalloc(void);
289 97a5e5f2 2003-11-23 devnull void egsigfree(EGsig*);
290 97a5e5f2 2003-11-23 devnull EGpub* egprivtopub(EGpriv*);
291 97a5e5f2 2003-11-23 devnull
292 cbeb0b26 2006-04-01 devnull /*******************************************************/
293 cbeb0b26 2006-04-01 devnull /* dsa */
294 cbeb0b26 2006-04-01 devnull /*******************************************************/
295 97a5e5f2 2003-11-23 devnull typedef struct DSApub DSApub;
296 97a5e5f2 2003-11-23 devnull typedef struct DSApriv DSApriv;
297 97a5e5f2 2003-11-23 devnull typedef struct DSAsig DSAsig;
298 97a5e5f2 2003-11-23 devnull
299 cbeb0b26 2006-04-01 devnull /* public/encryption key */
300 97a5e5f2 2003-11-23 devnull struct DSApub
301 97a5e5f2 2003-11-23 devnull {
302 cbeb0b26 2006-04-01 devnull mpint *p; /* modulus */
303 cbeb0b26 2006-04-01 devnull mpint *q; /* group order, q divides p-1 */
304 cbeb0b26 2006-04-01 devnull mpint *alpha; /* group generator */
305 cbeb0b26 2006-04-01 devnull mpint *key; /* (encryption key) alpha**secret mod p */
306 97a5e5f2 2003-11-23 devnull };
307 97a5e5f2 2003-11-23 devnull
308 cbeb0b26 2006-04-01 devnull /* private/decryption key */
309 97a5e5f2 2003-11-23 devnull struct DSApriv
310 97a5e5f2 2003-11-23 devnull {
311 97a5e5f2 2003-11-23 devnull DSApub pub;
312 cbeb0b26 2006-04-01 devnull mpint *secret; /* (decryption key) */
313 97a5e5f2 2003-11-23 devnull };
314 97a5e5f2 2003-11-23 devnull
315 cbeb0b26 2006-04-01 devnull /* signature */
316 97a5e5f2 2003-11-23 devnull struct DSAsig
317 97a5e5f2 2003-11-23 devnull {
318 97a5e5f2 2003-11-23 devnull mpint *r, *s;
319 97a5e5f2 2003-11-23 devnull };
320 97a5e5f2 2003-11-23 devnull
321 97a5e5f2 2003-11-23 devnull DSApriv* dsagen(DSApub *opub);
322 97a5e5f2 2003-11-23 devnull DSAsig* dsasign(DSApriv *k, mpint *m);
323 97a5e5f2 2003-11-23 devnull int dsaverify(DSApub *k, DSAsig *sig, mpint *m);
324 97a5e5f2 2003-11-23 devnull DSApub* dsapuballoc(void);
325 97a5e5f2 2003-11-23 devnull void dsapubfree(DSApub*);
326 97a5e5f2 2003-11-23 devnull DSApriv* dsaprivalloc(void);
327 97a5e5f2 2003-11-23 devnull void dsaprivfree(DSApriv*);
328 97a5e5f2 2003-11-23 devnull DSAsig* dsasigalloc(void);
329 97a5e5f2 2003-11-23 devnull void dsasigfree(DSAsig*);
330 97a5e5f2 2003-11-23 devnull DSApub* dsaprivtopub(DSApriv*);
331 42e8d853 2005-02-13 devnull DSApriv* asn1toDSApriv(uchar*, int);
332 97a5e5f2 2003-11-23 devnull
333 cbeb0b26 2006-04-01 devnull /*******************************************************/
334 cbeb0b26 2006-04-01 devnull /* TLS */
335 cbeb0b26 2006-04-01 devnull /*******************************************************/
336 97a5e5f2 2003-11-23 devnull typedef struct Thumbprint{
337 97a5e5f2 2003-11-23 devnull struct Thumbprint *next;
338 97a5e5f2 2003-11-23 devnull uchar sha1[SHA1dlen];
339 97a5e5f2 2003-11-23 devnull } Thumbprint;
340 97a5e5f2 2003-11-23 devnull
341 97a5e5f2 2003-11-23 devnull typedef struct TLSconn{
342 cbeb0b26 2006-04-01 devnull char dir[40]; /* connection directory */
343 cbeb0b26 2006-04-01 devnull uchar *cert; /* certificate (local on input, remote on output) */
344 97a5e5f2 2003-11-23 devnull uchar *sessionID;
345 97a5e5f2 2003-11-23 devnull int certlen, sessionIDlen;
346 97a5e5f2 2003-11-23 devnull int (*trace)(char*fmt, ...);
347 678ede7e 2004-12-27 devnull PEMChain *chain;
348 97a5e5f2 2003-11-23 devnull } TLSconn;
349 97a5e5f2 2003-11-23 devnull
350 cbeb0b26 2006-04-01 devnull /* tlshand.c */
351 97a5e5f2 2003-11-23 devnull extern int tlsClient(int fd, TLSconn *c);
352 97a5e5f2 2003-11-23 devnull extern int tlsServer(int fd, TLSconn *c);
353 97a5e5f2 2003-11-23 devnull
354 cbeb0b26 2006-04-01 devnull /* thumb.c */
355 97a5e5f2 2003-11-23 devnull extern Thumbprint* initThumbprints(char *ok, char *crl);
356 97a5e5f2 2003-11-23 devnull extern void freeThumbprints(Thumbprint *ok);
357 97a5e5f2 2003-11-23 devnull extern int okThumbprint(uchar *sha1, Thumbprint *ok);
358 97a5e5f2 2003-11-23 devnull
359 cbeb0b26 2006-04-01 devnull /* readcert.c */
360 97a5e5f2 2003-11-23 devnull extern uchar *readcert(char *filename, int *pcertlen);
361 678ede7e 2004-12-27 devnull PEMChain *readcertchain(char *filename);
362 f7012583 2003-11-25 devnull
363 f7012583 2003-11-25 devnull #if defined(__cplusplus)
364 f7012583 2003-11-25 devnull }
365 f7012583 2003-11-25 devnull #endif
366 f7012583 2003-11-25 devnull #endif