33 #include "libssh/wrapper.h" 42 #ifdef HAVE_OPENSSL_ECDH_H 43 #include <openssl/ecdh.h> 45 #include "libssh/ecdh.h" 46 #include "libssh/kex.h" 47 #include "libssh/curve25519.h" 49 #define DIGEST_MAX_LEN 64 51 enum ssh_key_exchange_e {
53 SSH_KEX_DH_GROUP1_SHA1=1,
55 SSH_KEX_DH_GROUP14_SHA1,
57 SSH_KEX_ECDH_SHA2_NISTP256,
59 SSH_KEX_ECDH_SHA2_NISTP384,
61 SSH_KEX_ECDH_SHA2_NISTP521,
63 SSH_KEX_CURVE25519_SHA256_LIBSSH_ORG,
65 SSH_KEX_CURVE25519_SHA256,
67 SSH_KEX_DH_GROUP16_SHA512,
69 SSH_KEX_DH_GROUP18_SHA512,
87 #ifdef HAVE_OPENSSL_ECC 89 #elif defined HAVE_GCRYPT_ECC 90 gcry_sexp_t ecdh_privkey;
91 #elif defined HAVE_LIBMBEDCRYPTO 92 mbedtls_ecp_keypair *ecdh_privkey;
97 #ifdef HAVE_CURVE25519 98 ssh_curve25519_privkey curve25519_privkey;
99 ssh_curve25519_pubkey curve25519_client_pubkey;
100 ssh_curve25519_pubkey curve25519_server_pubkey;
104 unsigned char *session_id;
105 unsigned char *secret_hash;
106 unsigned char *encryptIV;
107 unsigned char *decryptIV;
108 unsigned char *decryptkey;
109 unsigned char *encryptkey;
110 unsigned char *encryptMAC;
111 unsigned char *decryptMAC;
112 unsigned char hmacbuf[DIGEST_MAX_LEN];
114 enum ssh_hmac_e in_hmac, out_hmac;
119 int delayed_compress_in;
120 int delayed_compress_out;
121 void *compress_out_ctx;
122 void *compress_in_ctx;
126 char *kex_methods[SSH_KEX_METHODS];
127 enum ssh_key_exchange_e kex_type;
128 enum ssh_mac_e mac_type;
133 unsigned int blocksize;
134 enum ssh_cipher_e ciphertype;
135 uint32_t lenfield_blocksize;
137 #ifdef HAVE_LIBGCRYPT 138 gcry_cipher_hd_t *key;
139 #elif defined HAVE_LIBCRYPTO 140 struct ssh_3des_key_schedule *des3_key;
141 struct ssh_aes_key_schedule *aes_key;
142 const EVP_CIPHER *cipher;
144 #elif defined HAVE_LIBMBEDCRYPTO 145 mbedtls_cipher_context_t encrypt_ctx;
146 mbedtls_cipher_context_t decrypt_ctx;
147 mbedtls_cipher_type_t type;
150 unsigned int keysize;
160 size_t len, uint8_t *mac, uint64_t seq);
162 uint8_t *out,
size_t len, uint64_t seq);
163 int (*aead_decrypt)(
struct ssh_cipher_struct *cipher,
void *complete_packet, uint8_t *out,
164 size_t encrypted_size, uint64_t seq);
Definition: chachapoly.c:32