1323134Sdes/* $OpenBSD: myproposal.h,v 1.54 2016/09/28 16:33:07 djm Exp $ */ 2294495Sdes/* $FreeBSD: stable/11/crypto/openssh/myproposal.h 323134 2017-09-02 21:58:42Z des $ */ 376259Sgreen 465668Skris/* 565668Skris * Copyright (c) 2000 Markus Friedl. All rights reserved. 665668Skris * 765668Skris * Redistribution and use in source and binary forms, with or without 865668Skris * modification, are permitted provided that the following conditions 965668Skris * are met: 1065668Skris * 1. Redistributions of source code must retain the above copyright 1165668Skris * notice, this list of conditions and the following disclaimer. 1265668Skris * 2. Redistributions in binary form must reproduce the above copyright 1365668Skris * notice, this list of conditions and the following disclaimer in the 1465668Skris * documentation and/or other materials provided with the distribution. 1565668Skris * 1665668Skris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1765668Skris * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1865668Skris * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1965668Skris * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2065668Skris * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2165668Skris * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2265668Skris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2365668Skris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2465668Skris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2565668Skris * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2665668Skris */ 27162856Sdes 28162856Sdes#include <openssl/opensslv.h> 29162856Sdes 30255767Sdes/* conditional algorithm support */ 31255767Sdes 32221420Sdes#ifdef OPENSSL_HAS_ECC 33261320Sdes#ifdef OPENSSL_HAS_NISTP521 34221420Sdes# define KEX_ECDH_METHODS \ 35221420Sdes "ecdh-sha2-nistp256," \ 36221420Sdes "ecdh-sha2-nistp384," \ 37221420Sdes "ecdh-sha2-nistp521," 38221420Sdes# define HOSTKEY_ECDSA_CERT_METHODS \ 39221420Sdes "ecdsa-sha2-nistp256-cert-v01@openssh.com," \ 40221420Sdes "ecdsa-sha2-nistp384-cert-v01@openssh.com," \ 41221420Sdes "ecdsa-sha2-nistp521-cert-v01@openssh.com," 42221420Sdes# define HOSTKEY_ECDSA_METHODS \ 43221420Sdes "ecdsa-sha2-nistp256," \ 44221420Sdes "ecdsa-sha2-nistp384," \ 45221420Sdes "ecdsa-sha2-nistp521," 46221420Sdes#else 47261320Sdes# define KEX_ECDH_METHODS \ 48261320Sdes "ecdh-sha2-nistp256," \ 49261320Sdes "ecdh-sha2-nistp384," 50261320Sdes# define HOSTKEY_ECDSA_CERT_METHODS \ 51261320Sdes "ecdsa-sha2-nistp256-cert-v01@openssh.com," \ 52261320Sdes "ecdsa-sha2-nistp384-cert-v01@openssh.com," 53261320Sdes# define HOSTKEY_ECDSA_METHODS \ 54261320Sdes "ecdsa-sha2-nistp256," \ 55261320Sdes "ecdsa-sha2-nistp384," 56261320Sdes#endif 57261320Sdes#else 58221420Sdes# define KEX_ECDH_METHODS 59221420Sdes# define HOSTKEY_ECDSA_CERT_METHODS 60221420Sdes# define HOSTKEY_ECDSA_METHODS 61221420Sdes#endif 62221420Sdes 63255767Sdes#ifdef OPENSSL_HAVE_EVPGCM 64255767Sdes# define AESGCM_CIPHER_MODES \ 65294336Sdes ",aes128-gcm@openssh.com,aes256-gcm@openssh.com" 66255767Sdes#else 67255767Sdes# define AESGCM_CIPHER_MODES 68255767Sdes#endif 69255767Sdes 70255767Sdes#ifdef HAVE_EVP_SHA256 71323129Sdes# define KEX_SHA2_METHODS \ 72323129Sdes "diffie-hellman-group-exchange-sha256," \ 73323129Sdes "diffie-hellman-group16-sha512," \ 74323129Sdes "diffie-hellman-group18-sha512," 75323129Sdes# define KEX_SHA2_GROUP14 \ 76323129Sdes "diffie-hellman-group14-sha256," 77255767Sdes#define SHA2_HMAC_MODES \ 78255767Sdes "hmac-sha2-256," \ 79255767Sdes "hmac-sha2-512," 80162856Sdes#else 81323129Sdes# define KEX_SHA2_METHODS 82323129Sdes# define KEX_SHA2_GROUP14 83255767Sdes# define SHA2_HMAC_MODES 84221420Sdes#endif 85221420Sdes 86294328Sdes#ifdef WITH_OPENSSL 87294328Sdes# ifdef HAVE_EVP_SHA256 88323134Sdes# define KEX_CURVE25519_METHODS \ 89323134Sdes "curve25519-sha256," \ 90323134Sdes "curve25519-sha256@libssh.org," 91294328Sdes# else 92294328Sdes# define KEX_CURVE25519_METHODS "" 93294328Sdes# endif 94294336Sdes#define KEX_COMMON_KEX \ 95261320Sdes KEX_CURVE25519_METHODS \ 96221420Sdes KEX_ECDH_METHODS \ 97323129Sdes KEX_SHA2_METHODS 98294328Sdes 99294336Sdes#define KEX_SERVER_KEX KEX_COMMON_KEX \ 100323129Sdes KEX_SHA2_GROUP14 \ 101294336Sdes "diffie-hellman-group14-sha1" \ 102294336Sdes 103294336Sdes#define KEX_CLIENT_KEX KEX_COMMON_KEX \ 104162856Sdes "diffie-hellman-group-exchange-sha1," \ 105323129Sdes KEX_SHA2_GROUP14 \ 106294464Sdes "diffie-hellman-group14-sha1" 107162856Sdes 108215116Sdes#define KEX_DEFAULT_PK_ALG \ 109221420Sdes HOSTKEY_ECDSA_CERT_METHODS \ 110261320Sdes "ssh-ed25519-cert-v01@openssh.com," \ 111221420Sdes "ssh-rsa-cert-v01@openssh.com," \ 112221420Sdes HOSTKEY_ECDSA_METHODS \ 113261320Sdes "ssh-ed25519," \ 114296633Sdes "rsa-sha2-512," \ 115296633Sdes "rsa-sha2-256," \ 116303770Sdes "ssh-rsa" 117192595Sdes 118255767Sdes/* the actual algorithms */ 119255767Sdes 120294328Sdes#define KEX_SERVER_ENCRYPT \ 121294336Sdes "chacha20-poly1305@openssh.com," \ 122294336Sdes "aes128-ctr,aes192-ctr,aes256-ctr" \ 123296634Sdes AESGCM_CIPHER_MODES \ 124296634Sdes ",aes128-cbc,aes192-cbc,aes256-cbc" 125294328Sdes 126323134Sdes#define KEX_CLIENT_ENCRYPT KEX_SERVER_ENCRYPT 127255767Sdes 128294328Sdes#define KEX_SERVER_MAC \ 129248619Sdes "umac-64-etm@openssh.com," \ 130248619Sdes "umac-128-etm@openssh.com," \ 131248619Sdes "hmac-sha2-256-etm@openssh.com," \ 132248619Sdes "hmac-sha2-512-etm@openssh.com," \ 133294328Sdes "hmac-sha1-etm@openssh.com," \ 134294328Sdes "umac-64@openssh.com," \ 135294328Sdes "umac-128@openssh.com," \ 136294328Sdes "hmac-sha2-256," \ 137294328Sdes "hmac-sha2-512," \ 138294328Sdes "hmac-sha1" 139294328Sdes 140296633Sdes#define KEX_CLIENT_MAC KEX_SERVER_MAC 141226046Sdes 142296633Sdes#else /* WITH_OPENSSL */ 143294328Sdes 144294328Sdes#define KEX_SERVER_KEX \ 145323134Sdes "curve25519-sha256," \ 146294328Sdes "curve25519-sha256@libssh.org" 147294328Sdes#define KEX_DEFAULT_PK_ALG \ 148294328Sdes "ssh-ed25519-cert-v01@openssh.com," \ 149294328Sdes "ssh-ed25519" 150294328Sdes#define KEX_SERVER_ENCRYPT \ 151294336Sdes "chacha20-poly1305@openssh.com," \ 152294336Sdes "aes128-ctr,aes192-ctr,aes256-ctr" 153294328Sdes#define KEX_SERVER_MAC \ 154294328Sdes "umac-64-etm@openssh.com," \ 155294328Sdes "umac-128-etm@openssh.com," \ 156294328Sdes "hmac-sha2-256-etm@openssh.com," \ 157294328Sdes "hmac-sha2-512-etm@openssh.com," \ 158294328Sdes "hmac-sha1-etm@openssh.com," \ 159294328Sdes "umac-64@openssh.com," \ 160294328Sdes "umac-128@openssh.com," \ 161294328Sdes "hmac-sha2-256," \ 162294328Sdes "hmac-sha2-512," \ 163294328Sdes "hmac-sha1" 164294328Sdes 165294328Sdes#define KEX_CLIENT_KEX KEX_SERVER_KEX 166294328Sdes#define KEX_CLIENT_ENCRYPT KEX_SERVER_ENCRYPT 167294328Sdes#define KEX_CLIENT_MAC KEX_SERVER_MAC 168294328Sdes 169294328Sdes#endif /* WITH_OPENSSL */ 170294328Sdes 171323134Sdes#define KEX_DEFAULT_COMP "none,zlib@openssh.com" 17260573Skris#define KEX_DEFAULT_LANG "" 17360573Skris 174294328Sdes#define KEX_CLIENT \ 175294328Sdes KEX_CLIENT_KEX, \ 176294328Sdes KEX_DEFAULT_PK_ALG, \ 177294328Sdes KEX_CLIENT_ENCRYPT, \ 178294328Sdes KEX_CLIENT_ENCRYPT, \ 179294328Sdes KEX_CLIENT_MAC, \ 180294328Sdes KEX_CLIENT_MAC, \ 181294328Sdes KEX_DEFAULT_COMP, \ 182294328Sdes KEX_DEFAULT_COMP, \ 183294328Sdes KEX_DEFAULT_LANG, \ 184294328Sdes KEX_DEFAULT_LANG 18560573Skris 186294328Sdes#define KEX_SERVER \ 187294328Sdes KEX_SERVER_KEX, \ 188294328Sdes KEX_DEFAULT_PK_ALG, \ 189294328Sdes KEX_SERVER_ENCRYPT, \ 190294328Sdes KEX_SERVER_ENCRYPT, \ 191294328Sdes KEX_SERVER_MAC, \ 192294328Sdes KEX_SERVER_MAC, \ 193294328Sdes KEX_DEFAULT_COMP, \ 194294328Sdes KEX_DEFAULT_COMP, \ 195294328Sdes KEX_DEFAULT_LANG, \ 19660573Skris KEX_DEFAULT_LANG 197294328Sdes 198