33#elif defined(HAVE_LIBMBEDCRYPTO)
34#include <mbedtls/gcm.h>
36#include "libssh/wrapper.h"
45#ifdef HAVE_OPENSSL_ECDH_H
46#include <openssl/ecdh.h>
49#include "libssh/ecdh.h"
50#include "libssh/kex.h"
51#include "libssh/curve25519.h"
53#define DIGEST_MAX_LEN 64
55#define AES_GCM_TAGLEN 16
56#define AES_GCM_IVLEN 12
58enum ssh_key_exchange_e {
60 SSH_KEX_DH_GROUP1_SHA1=1,
62 SSH_KEX_DH_GROUP14_SHA1,
67 SSH_KEX_DH_GEX_SHA256,
70 SSH_KEX_ECDH_SHA2_NISTP256,
72 SSH_KEX_ECDH_SHA2_NISTP384,
74 SSH_KEX_ECDH_SHA2_NISTP521,
76 SSH_KEX_CURVE25519_SHA256_LIBSSH_ORG,
78 SSH_KEX_CURVE25519_SHA256,
80 SSH_KEX_DH_GROUP16_SHA512,
82 SSH_KEX_DH_GROUP18_SHA512,
84 SSH_KEX_DH_GROUP14_SHA256,
89#ifdef WITH_BLOWFISH_CIPHER
101 SSH_AEAD_CHACHA20_POLY1305
107 bignum shared_secret;
110 size_t dh_pmin;
size_t dh_pn;
size_t dh_pmax;
113#ifdef HAVE_OPENSSL_ECC
119 EC_KEY *ecdh_privkey;
121 EVP_PKEY *ecdh_privkey;
123#elif defined HAVE_GCRYPT_ECC
124 gcry_sexp_t ecdh_privkey;
125#elif defined HAVE_LIBMBEDCRYPTO
126 mbedtls_ecp_keypair *ecdh_privkey;
131#ifdef HAVE_CURVE25519
132 ssh_curve25519_privkey curve25519_privkey;
133 ssh_curve25519_pubkey curve25519_client_pubkey;
134 ssh_curve25519_pubkey curve25519_server_pubkey;
137 size_t session_id_len;
138 unsigned char *session_id;
140 unsigned char *secret_hash;
141 unsigned char *encryptIV;
142 unsigned char *decryptIV;
143 unsigned char *decryptkey;
144 unsigned char *encryptkey;
145 unsigned char *encryptMAC;
146 unsigned char *decryptMAC;
147 unsigned char hmacbuf[DIGEST_MAX_LEN];
149 enum ssh_hmac_e in_hmac, out_hmac;
150 bool in_hmac_etm, out_hmac_etm;
155 int delayed_compress_in;
156 int delayed_compress_out;
157 void *compress_out_ctx;
158 void *compress_in_ctx;
162 char *kex_methods[SSH_KEX_METHODS];
163 enum ssh_key_exchange_e kex_type;
164 enum ssh_kdf_digest digest_type;
165 enum ssh_crypto_direction_e used;
170 unsigned int blocksize;
171 enum ssh_cipher_e ciphertype;
172 uint32_t lenfield_blocksize;
175 gcry_cipher_hd_t *key;
176 unsigned char last_iv[AES_GCM_IVLEN];
177#elif defined HAVE_LIBCRYPTO
178 struct ssh_3des_key_schedule *des3_key;
179 struct ssh_aes_key_schedule *aes_key;
180 const EVP_CIPHER *cipher;
182#elif defined HAVE_LIBMBEDCRYPTO
183 mbedtls_cipher_context_t encrypt_ctx;
184 mbedtls_cipher_context_t decrypt_ctx;
185 mbedtls_cipher_type_t type;
187 mbedtls_gcm_context gcm_ctx;
188 unsigned char last_iv[AES_GCM_IVLEN];
192 unsigned int keysize;
211 size_t len, uint8_t *mac, uint64_t seq);
213 uint8_t *out,
size_t len, uint64_t seq);
214 int (*aead_decrypt)(
struct ssh_cipher_struct *cipher,
void *complete_packet, uint8_t *out,
215 size_t encrypted_size, uint64_t seq);
225 unsigned char *key,
size_t key_len,
226 uint8_t key_type,
unsigned char *output,
227 size_t requested_len);
229int secure_memcmp(
const void *s1,
const void *s2,
size_t n);
231ENGINE *pki_get_engine(
void);
Definition chachapoly.c:31
Definition dh_crypto.c:47