Blame


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