diff options
Diffstat (limited to 'kex.h')
-rw-r--r-- | kex.h | 75 |
1 files changed, 40 insertions, 35 deletions
@@ -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 | |||
62 | typedef struct Kex Kex; | 64 | typedef struct Kex Kex; |
63 | typedef struct Mac Mac; | 65 | typedef struct Mac Mac; |
64 | typedef struct Comp Comp; | 66 | typedef struct Comp Comp; |
65 | typedef struct Enc Enc; | 67 | typedef struct Enc Enc; |
68 | typedef struct Newkeys Newkeys; | ||
66 | 69 | ||
67 | struct Enc { | 70 | struct 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 | }; |
74 | struct Mac { | 77 | struct 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 | }; |
82 | struct Comp { | 85 | struct Comp { |
83 | int type; | 86 | int type; |
84 | int enabled; | 87 | int enabled; |
85 | char *name; | 88 | char *name; |
89 | }; | ||
90 | struct Newkeys { | ||
91 | Enc enc; | ||
92 | Mac mac; | ||
93 | Comp comp; | ||
86 | }; | 94 | }; |
87 | #define KEX_INIT_SENT 0x0001 | ||
88 | struct Kex { | 95 | struct 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 | ||
111 | void kex_derive_keys(Kex *k, u_char *hash, BIGNUM *shared_secret); | ||
112 | void packet_set_kex(Kex *k); | ||
113 | Kex *kex_start(char *proposal[PROPOSAL_MAX]); | 114 | Kex *kex_start(char *proposal[PROPOSAL_MAX]); |
114 | void kex_send_newkeys(void); | 115 | void kex_send_newkeys(void); |
116 | void kex_send_kexinit(Kex *kex); | ||
115 | void kex_protocol_error(int type, int plen, void *ctxt); | 117 | void kex_protocol_error(int type, int plen, void *ctxt); |
118 | void kex_derive_keys(Kex *k, u_char *hash, BIGNUM *shared_secret); | ||
116 | 119 | ||
117 | void kexdh(Kex *); | 120 | void kexdh(Kex *); |
118 | void kexgex(Kex *); | 121 | void kexgex(Kex *); |
119 | 122 | ||
123 | Newkeys *kex_get_newkeys(int mode); | ||
124 | |||
120 | #if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) | 125 | #if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) |
121 | void dump_digest(char *msg, u_char *digest, int len); | 126 | void dump_digest(char *msg, u_char *digest, int len); |
122 | #endif | 127 | #endif |