68
68
#define PK_PRIVATE 0 /* PK private keys */
69
69
#define PK_PUBLIC 1 /* PK public keys */
70
#define PK_PRIVATE_OPTIMIZED 2 /* PK private key [rsa optimized] */
72
71
/* ---- PACKET ---- */
75
extern void packet_store_header(unsigned char *dst, int section, int subsection);
76
extern int packet_valid_header(unsigned char *src, int section, int subsection);
74
void packet_store_header(unsigned char *dst, int section, int subsection);
75
int packet_valid_header(unsigned char *src, int section, int subsection);
91
90
typedef struct Rsa_key {
93
mp_int e, d, N, qP, pQ, dP, dQ, p, q;
92
mp_int e, d, N, p, q, qP, dP, dQ;
96
extern int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key);
95
int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key);
98
extern int rsa_exptmod(const unsigned char *in, unsigned long inlen,
97
int rsa_exptmod(const unsigned char *in, unsigned long inlen,
99
98
unsigned char *out, unsigned long *outlen, int which,
100
99
prng_state *prng, int prng_idx,
103
102
#ifdef RSA_TIMING
105
extern int tim_exptmod(prng_state *prng, int prng_idx,
104
int tim_exptmod(prng_state *prng, int prng_idx,
106
105
mp_int *c, mp_int *e, mp_int *d, mp_int *n, mp_int *m);
114
extern void rsa_free(rsa_key *key);
113
void rsa_free(rsa_key *key);
115
/* These use PKCS #1 v2.0 padding */
116
116
int rsa_encrypt_key(const unsigned char *inkey, unsigned long inlen,
117
117
unsigned char *outkey, unsigned long *outlen,
118
118
const unsigned char *lparam, unsigned long lparamlen,
137
137
int hash_idx, unsigned long saltlen,
138
138
int *stat, rsa_key *key);
140
/* these use PKCS #1 v1.5 padding */
141
int rsa_v15_encrypt_key(const unsigned char *inkey, unsigned long inlen,
142
unsigned char *outkey, unsigned long *outlen,
143
prng_state *prng, int prng_idx,
146
int rsa_v15_decrypt_key(const unsigned char *in, unsigned long inlen,
147
unsigned char *outkey, unsigned long keylen,
148
prng_state *prng, int prng_idx,
149
int *res, rsa_key *key);
151
int rsa_v15_sign_hash(const unsigned char *msghash, unsigned long msghashlen,
152
unsigned char *sig, unsigned long *siglen,
153
prng_state *prng, int prng_idx,
154
int hash_idx, rsa_key *key);
156
int rsa_v15_verify_hash(const unsigned char *sig, unsigned long siglen,
157
const unsigned char *msghash, unsigned long msghashlen,
158
prng_state *prng, int prng_idx,
159
int hash_idx, int *stat,
163
/* PKCS #1 import/export */
140
164
int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key);
141
165
int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key);
153
extern int dh_test(void);
154
extern void dh_sizes(int *low, int *high);
155
extern int dh_get_size(dh_key *key);
157
extern int dh_make_key(prng_state *prng, int wprng, int keysize, dh_key *key);
158
extern void dh_free(dh_key *key);
160
extern int dh_export(unsigned char *out, unsigned long *outlen, int type, dh_key *key);
161
extern int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key);
163
extern int dh_shared_secret(dh_key *private_key, dh_key *public_key,
178
void dh_sizes(int *low, int *high);
179
int dh_get_size(dh_key *key);
181
int dh_make_key(prng_state *prng, int wprng, int keysize, dh_key *key);
182
void dh_free(dh_key *key);
184
int dh_export(unsigned char *out, unsigned long *outlen, int type, dh_key *key);
185
int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key);
187
int dh_shared_secret(dh_key *private_key, dh_key *public_key,
164
188
unsigned char *out, unsigned long *outlen);
166
extern int dh_encrypt_key(const unsigned char *inkey, unsigned long keylen,
190
int dh_encrypt_key(const unsigned char *inkey, unsigned long keylen,
167
191
unsigned char *out, unsigned long *len,
168
192
prng_state *prng, int wprng, int hash,
171
extern int dh_decrypt_key(const unsigned char *in, unsigned long inlen,
195
int dh_decrypt_key(const unsigned char *in, unsigned long inlen,
172
196
unsigned char *outkey, unsigned long *keylen,
175
extern int dh_sign_hash(const unsigned char *in, unsigned long inlen,
199
int dh_sign_hash(const unsigned char *in, unsigned long inlen,
176
200
unsigned char *out, unsigned long *outlen,
177
201
prng_state *prng, int wprng, dh_key *key);
179
extern int dh_verify_hash(const unsigned char *sig, unsigned long siglen,
203
int dh_verify_hash(const unsigned char *sig, unsigned long siglen,
180
204
const unsigned char *hash, unsigned long hashlen,
181
205
int *stat, dh_key *key);
198
extern int ecc_test(void);
199
extern void ecc_sizes(int *low, int *high);
200
extern int ecc_get_size(ecc_key *key);
202
extern int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key);
203
extern void ecc_free(ecc_key *key);
205
extern int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key);
206
extern int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key);
208
extern int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key,
223
void ecc_sizes(int *low, int *high);
224
int ecc_get_size(ecc_key *key);
226
int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key);
227
void ecc_free(ecc_key *key);
229
int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key);
230
int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key);
232
int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key,
209
233
unsigned char *out, unsigned long *outlen);
211
extern int ecc_encrypt_key(const unsigned char *inkey, unsigned long keylen,
235
int ecc_encrypt_key(const unsigned char *inkey, unsigned long keylen,
212
236
unsigned char *out, unsigned long *len,
213
237
prng_state *prng, int wprng, int hash,
216
extern int ecc_decrypt_key(const unsigned char *in, unsigned long inlen,
240
int ecc_decrypt_key(const unsigned char *in, unsigned long inlen,
217
241
unsigned char *outkey, unsigned long *keylen,
220
extern int ecc_sign_hash(const unsigned char *in, unsigned long inlen,
244
int ecc_sign_hash(const unsigned char *in, unsigned long inlen,
221
245
unsigned char *out, unsigned long *outlen,
222
246
prng_state *prng, int wprng, ecc_key *key);
224
extern int ecc_verify_hash(const unsigned char *sig, unsigned long siglen,
248
int ecc_verify_hash(const unsigned char *sig, unsigned long siglen,
225
249
const unsigned char *hash, unsigned long hashlen,
226
250
int *stat, ecc_key *key);
233
257
mp_int g, q, p, x, y;
236
extern int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key);
237
extern void dsa_free(dsa_key *key);
260
int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key);
261
void dsa_free(dsa_key *key);
239
extern int dsa_sign_hash(const unsigned char *in, unsigned long inlen,
263
int dsa_sign_hash(const unsigned char *in, unsigned long inlen,
240
264
unsigned char *out, unsigned long *outlen,
241
265
prng_state *prng, int wprng, dsa_key *key);
243
extern int dsa_verify_hash(const unsigned char *sig, unsigned long siglen,
267
int dsa_verify_hash(const unsigned char *sig, unsigned long siglen,
244
268
const unsigned char *hash, unsigned long inlen,
245
269
int *stat, dsa_key *key);
247
extern int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key);
249
extern int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key);
251
extern int dsa_verify_key(dsa_key *key, int *stat);
271
int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key);
273
int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key);
275
int dsa_verify_key(dsa_key *key, int *stat);
279
/* ifdef added by matt - a bit of a hack */
282
int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen);
283
int der_decode_integer(const unsigned char *in, unsigned long *inlen, mp_int *num);
284
int der_length_integer(mp_int *num, unsigned long *len);
285
int der_put_multi_integer(unsigned char *dst, unsigned long *outlen, mp_int *num, ...);
286
int der_get_multi_integer(const unsigned char *src, unsigned long *inlen, mp_int *num, ...);