summaryrefslogtreecommitdiff
path: root/kex.h
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2001-04-04 02:00:54 +0000
committerBen Lindstrom <mouring@eviladmin.org>2001-04-04 02:00:54 +0000
commit2d90e003098834de493a797017f8704b2f383f67 (patch)
tree9465422eab9f2925c7a9ed6cb99a923173fde9fe /kex.h
parent9323d964791a8627c7733e64951d32e7d4b19f9c (diff)
- markus@cvs.openbsd.org 2001/04/03 23:32:12
[kex.c kex.h packet.c sshconnect2.c sshd.c] undo parts of recent my changes: main part of keyexchange does not need dispatch-callbacks, since application data is delayed until the keyexchange completes (if i understand the drafts correctly). add some infrastructure for re-keying.
Diffstat (limited to 'kex.h')
-rw-r--r--kex.h75
1 files changed, 40 insertions, 35 deletions
diff --git a/kex.h b/kex.h
index 58f6d82c0..83f54fd96 100644
--- a/kex.h
+++ b/kex.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: kex.h,v 1.18 2001/04/03 19:53:29 markus Exp $ */ 1/* $OpenBSD: kex.h,v 1.19 2001/04/03 23:32:12 markus Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -59,64 +59,69 @@ enum kex_exchange {
59 DH_GEX_SHA1 59 DH_GEX_SHA1
60}; 60};
61 61
62#define KEX_INIT_SENT 0x0001
63
62typedef struct Kex Kex; 64typedef struct Kex Kex;
63typedef struct Mac Mac; 65typedef struct Mac Mac;
64typedef struct Comp Comp; 66typedef struct Comp Comp;
65typedef struct Enc Enc; 67typedef struct Enc Enc;
68typedef struct Newkeys Newkeys;
66 69
67struct Enc { 70struct Enc {
68 char *name; 71 char *name;
69 Cipher *cipher; 72 Cipher *cipher;
70 int enabled; 73 int enabled;
71 u_char *key; 74 u_char *key;
72 u_char *iv; 75 u_char *iv;
73}; 76};
74struct Mac { 77struct Mac {
75 char *name; 78 char *name;
76 int enabled; 79 int enabled;
77 EVP_MD *md; 80 EVP_MD *md;
78 int mac_len; 81 int mac_len;
79 u_char *key; 82 u_char *key;
80 int key_len; 83 int key_len;
81}; 84};
82struct Comp { 85struct Comp {
83 int type; 86 int type;
84 int enabled; 87 int enabled;
85 char *name; 88 char *name;
89};
90struct Newkeys {
91 Enc enc;
92 Mac mac;
93 Comp comp;
86}; 94};
87#define KEX_INIT_SENT 0x0001
88struct Kex { 95struct Kex {
89 Enc enc [MODE_MAX]; 96 u_char *session_id;
90 Mac mac [MODE_MAX]; 97 int session_id_len;
91 Comp comp[MODE_MAX]; 98 Newkeys *keys[MODE_MAX];
92 int we_need; 99 int we_need;
93 int server; 100 int server;
94 char *name; 101 char *name;
95 int hostkey_type; 102 int hostkey_type;
96 int kex_type; 103 int kex_type;
97 104 Buffer my;
98 /* used during kex */ 105 Buffer peer;
99 Buffer my; 106 int newkeys;
100 Buffer peer; 107 int flags;
101 int newkeys; 108 char *client_version_string;
102 int flags; 109 char *server_version_string;
103 void *state; 110 int (*check_host_key)(Key *hostkey);
104 char *client_version_string; 111 Key *(*load_host_key)(int type);
105 char *server_version_string;
106
107 int (*check_host_key)(Key *hostkey);
108 Key *(*load_host_key)(int type);
109}; 112};
110 113
111void kex_derive_keys(Kex *k, u_char *hash, BIGNUM *shared_secret);
112void packet_set_kex(Kex *k);
113Kex *kex_start(char *proposal[PROPOSAL_MAX]); 114Kex *kex_start(char *proposal[PROPOSAL_MAX]);
114void kex_send_newkeys(void); 115void kex_send_newkeys(void);
116void kex_send_kexinit(Kex *kex);
115void kex_protocol_error(int type, int plen, void *ctxt); 117void kex_protocol_error(int type, int plen, void *ctxt);
118void kex_derive_keys(Kex *k, u_char *hash, BIGNUM *shared_secret);
116 119
117void kexdh(Kex *); 120void kexdh(Kex *);
118void kexgex(Kex *); 121void kexgex(Kex *);
119 122
123Newkeys *kex_get_newkeys(int mode);
124
120#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) 125#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH)
121void dump_digest(char *msg, u_char *digest, int len); 126void dump_digest(char *msg, u_char *digest, int len);
122#endif 127#endif