|
| #define | SSH_PORT 22 |
| |
| #define | ID_SIZE 1 /* ID byte */ |
| |
| #define | LENGTH_SIZE 4 /* Size of packet length field */ |
| |
| #define | UINT_SIZE 4 /* Size of integer value */ |
| |
| #define | PADLENGTH_SIZE 1 /* Size of padding length field */ |
| |
| #define | BOOLEAN_SIZE 1 /* Size of boolean value */ |
| |
| #define | SSH1_COOKIE_SIZE 8 /* Size of SSHv1 cookie */ |
| |
| #define | SSH1_HEADER_SIZE 5 /* Size of SSHv1 packet header */ |
| |
| #define | SSH1_CRC_SIZE 4 /* Size of CRC value */ |
| |
| #define | SSH1_MPI_LENGTH_SIZE 2 /* Size of MPI length field */ |
| |
| #define | SSH1_SESSIONID_SIZE 16 /* Size of SSHv1 session ID */ |
| |
| #define | SSH1_SECRET_SIZE 32 /* Size of SSHv1 shared secret */ |
| |
| #define | SSH1_CHALLENGE_SIZE 32 /* Size of SSHv1 RSA auth.challenge */ |
| |
| #define | SSH1_RESPONSE_SIZE 16 /* Size of SSHv1 RSA auth.response */ |
| |
| #define | SSH2_COOKIE_SIZE 16 /* Size of SSHv2 cookie */ |
| |
| #define | SSH2_HEADER_SIZE 5 /* Size of SSHv2 packet header */ |
| |
| #define | SSH2_MIN_ALGOID_SIZE 4 /* Size of shortest SSHv2 algo.name */ |
| |
| #define | SSH2_MIN_PADLENGTH_SIZE 4 /* Minimum amount of padding for packets */ |
| |
| #define | SSH2_PAYLOAD_HEADER_SIZE 9 /* Size of SSHv2 inner payload header */ |
| |
| #define | SSH2_FIXED_KEY_SIZE 16 /* Size of SSHv2 fixed-size keys */ |
| |
| #define | SSH2_DEFAULT_KEYSIZE 128 /* Size of SSHv2 default DH key */ |
| |
| #define | MAX_PACKET_SIZE 262144L |
| |
| #define | EXTRA_PACKET_SIZE 512 |
| |
| #define | DEFAULT_PACKET_SIZE 16384 |
| |
| #define | MAX_WINDOW_SIZE ( MAX_INTLENGTH - 8192 ) |
| |
| #define | SSH_PFLAG_NONE 0x0000/* No protocol-specific flags */ |
| |
| #define | SSH_PFLAG_HMACKEYSIZE 0x0001/* Peer uses short HMAC keys */ |
| |
| #define | SSH_PFLAG_SIGFORMAT 0x0002/* Peer omits signature algo name */ |
| |
| #define | SSH_PFLAG_NOHASHSECRET 0x0004/* Peer omits secret in key derive */ |
| |
| #define | SSH_PFLAG_NOHASHLENGTH 0x0008/* Peer omits length in exchange hash */ |
| |
| #define | SSH_PFLAG_RSASIGPAD 0x0010/* Peer requires zero-padded RSA sig.*/ |
| |
| #define | SSH_PFLAG_WINDOWSIZE 0x0020/* Peer mishandles large window sizes */ |
| |
| #define | SSH_PFLAG_TEXTDIAGS 0x0040/* Peer dumps text diagnostics on error */ |
| |
| #define | SSH_PFLAG_PAMPW 0x0080/* Peer chokes on "password" as PAM submethod */ |
| |
| #define | SSH_PFLAG_DUMMYUSERAUTH 0x0100/* Peer requires dummy userAuth message */ |
| |
| #define | SSH_PFLAG_EMPTYUSERAUTH 0x0200/* Peer sends empty userauth-failure response */ |
| |
| #define | SSH_PFLAG_ZEROLENIGNORE 0x0400/* Peer sends zero-length SSH_IGNORE */ |
| |
| #define | SSH_PFLAG_ASYMMCOPR 0x0800/* Peer sends asymmetric compression algos */ |
| |
| #define | SSH_PFLAG_EMPTYSVCACCEPT 0x1000/* Peer sends empty SSH_SERVICE_ACCEPT */ |
| |
| #define | SSH_PFLAG_CUTEFTP 0x2000/* CuteFTP, drops conn.during handshake */ |
| |
| #define | SSH_PFLAG_MAX 0x3FFF/* Maximum possible flag value */ |
| |
| #define | MIN_PACKET_SIZE 16 |
| |
| #define | SSH2_HEADER_REMAINDER_SIZE ( MIN_PACKET_SIZE - LENGTH_SIZE ) |
| |
| #define | SSH1_MAX_HEADER_SIZE ( LENGTH_SIZE + 8 + ID_SIZE + LENGTH_SIZE ) |
| |
| #define | SSH_ID "SSH-" /* Start of SSH ID */ |
| |
| #define | SSH_ID_SIZE 4 /* Size of SSH ID */ |
| |
| #define | SSH_VERSION_SIZE 4 /* Size of SSH version */ |
| |
| #define | SSH_ID_MAX_SIZE 255 /* Max.size of SSHv2 ID string */ |
| |
| #define | SSH1_ID_STRING "SSH-1.5-cryptlib" |
| |
| #define | SSH2_ID_STRING "SSH-2.0-cryptlib" /* cryptlib SSH ID strings */ |
| |
| #define | SSH_ID_STRING_SIZE 16 /* Size of ID strings */ |
| |
| #define | SSH1_MSG_DISCONNECT 1 /* Disconnect session */ |
| |
| #define | SSH1_SMSG_PUBLIC_KEY 2 /* Server public key */ |
| |
| #define | SSH1_CMSG_SESSION_KEY 3 /* Encrypted session key */ |
| |
| #define | SSH1_CMSG_USER 4 /* User name */ |
| |
| #define | SSH1_CMSG_AUTH_RSA 6 /* RSA public key */ |
| |
| #define | SSH1_SMSG_AUTH_RSA_CHALLENGE 7 /* RSA challenge from server */ |
| |
| #define | SSH1_CMSG_AUTH_RSA_RESPONSE 8 /* RSA response from client */ |
| |
| #define | SSH1_CMSG_AUTH_PASSWORD 9 /* Password */ |
| |
| #define | SSH1_CMSG_REQUEST_PTY 10 /* Request a pty */ |
| |
| #define | SSH1_CMSG_WINDOW_SIZE 11 /* Terminal window size change */ |
| |
| #define | SSH1_CMSG_EXEC_SHELL 12 /* Request a shell */ |
| |
| #define | SSH1_CMSG_EXEC_CMD 13 /* Request command execution */ |
| |
| #define | SSH1_SMSG_SUCCESS 14 /* Success status message */ |
| |
| #define | SSH1_SMSG_FAILURE 15 /* Failure status message */ |
| |
| #define | SSH1_CMSG_STDIN_DATA 16 /* Data from client stdin */ |
| |
| #define | SSH1_SMSG_STDOUT_DATA 17 /* Data from server stdout */ |
| |
| #define | SSH1_SMSG_EXITSTATUS 20 /* Exit status of command run on server */ |
| |
| #define | SSH1_MSG_IGNORE 32 /* No-op */ |
| |
| #define | SSH1_CMSG_EXIT_CONFIRMATION 33 /* Client response to server exitstatus */ |
| |
| #define | SSH1_MSG_DEBUG 36 /* Debugging/informational message */ |
| |
| #define | SSH1_CMSG_MAX_PACKET_SIZE 38 /* Maximum data packet size */ |
| |
| #define | SSH1_CMSG_PORT_FORWARD_REQUEST 28 |
| |
| #define | SSH1_CMSG_AGENT_REQUEST_FORWARDING 30 |
| |
| #define | SSH1_CMSG_X11_REQUEST_FORWARDING 34 |
| |
| #define | SSH1_CMSG_REQUEST_COMPRESSION 37 |
| |
| #define | SSH1_CIPHER_NONE 0 /* No encryption */ |
| |
| #define | SSH1_CIPHER_IDEA 1 /* IDEA/CFB */ |
| |
| #define | SSH1_CIPHER_DES 2 /* DES/CBC */ |
| |
| #define | SSH1_CIPHER_3DES 3 /* 3DES/inner-CBC (nonstandard) */ |
| |
| #define | SSH1_CIPHER_TSS 4 /* Deprecated */ |
| |
| #define | SSH1_CIPHER_RC4 5 /* RC4 */ |
| |
| #define | SSH1_CIPHER_BLOWFISH 6 /* Blowfish */ |
| |
| #define | SSH1_CIPHER_CRIPPLED 7 /* Reserved, from ssh 1.2.x source */ |
| |
| #define | SSH1_AUTH_RHOSTS 1 /* .rhosts or /etc/hosts.equiv */ |
| |
| #define | SSH1_AUTH_RSA 2 /* RSA challenge-response */ |
| |
| #define | SSH1_AUTH_PASSWORD 3 /* Password */ |
| |
| #define | SSH1_AUTH_RHOSTS_RSA 4 /* .rhosts with RSA challenge-response */ |
| |
| #define | SSH1_AUTH_TIS 5 /* TIS authsrv */ |
| |
| #define | SSH1_AUTH_KERBEROS 6 /* Kerberos */ |
| |
| #define | SSH1_PASS_KERBEROS_TGT 7 /* Kerberos TGT-passing */ |
| |
| #define | SSH_MSG_DISCONNECT 1 /* Disconnect session */ |
| |
| #define | SSH_MSG_IGNORE 2 /* No-op */ |
| |
| #define | SSH_MSG_DEBUG 4 /* No-op */ |
| |
| #define | SSH_MSG_SERVICE_REQUEST 5 /* Request authentiction */ |
| |
| #define | SSH_MSG_SERVICE_ACCEPT 6 /* Acknowledge request */ |
| |
| #define | SSH_MSG_KEXINIT 20 /* Hello */ |
| |
| #define | SSH_MSG_NEWKEYS 21 /* Change cipherspec */ |
| |
| #define | SSH_MSG_KEXDH_INIT 30 /* DH, phase 1 */ |
| |
| #define | SSH_MSG_KEXDH_REPLY 31 /* DH, phase 2 */ |
| |
| #define | SSH_MSG_KEXDH_GEX_REQUEST_OLD 30 /* Ephem.DH key request */ |
| |
| #define | SSH_MSG_KEXDH_GEX_GROUP 31 /* Ephem.DH key response */ |
| |
| #define | SSH_MSG_KEXDH_GEX_INIT 32 /* Ephem.DH, phase 1 */ |
| |
| #define | SSH_MSG_KEXDH_GEX_REPLY 33 /* Ephem.DH, phase 2 */ |
| |
| #define | SSH_MSG_KEXDH_GEX_REQUEST_NEW 34 /* Ephem.DH key request */ |
| |
| #define | SSH_MSG_KEX_ECDH_INIT 30 /* ECDH, phase 1 */ |
| |
| #define | SSH_MSG_KEX_ECDH_REPLY 31 /* ECDH, phase 2 */ |
| |
| #define | SSH_MSG_USERAUTH_REQUEST 50 /* Request authentication */ |
| |
| #define | SSH_MSG_USERAUTH_FAILURE 51 /* Authentication failed */ |
| |
| #define | SSH_MSG_USERAUTH_SUCCESS 52 /* Authentication succeeded */ |
| |
| #define | SSH_MSG_USERAUTH_BANNER 53 /* No-op */ |
| |
| #define | SSH_MSG_USERAUTH_INFO_REQUEST 60 /* Generic auth.svr.request */ |
| |
| #define | SSH_MSG_USERAUTH_INFO_RESPONSE 61 /* Generic auth.cli.response */ |
| |
| #define | SSH_MSG_GLOBAL_REQUEST 80 /* Perform a global ioctl */ |
| |
| #define | SSH_MSG_GLOBAL_SUCCESS 81 /* Global request succeeded */ |
| |
| #define | SSH_MSG_GLOBAL_FAILURE 82 /* Global request failed */ |
| |
| #define | SSH_MSG_CHANNEL_OPEN 90 /* Open a channel over an SSH link */ |
| |
| #define | SSH_MSG_CHANNEL_OPEN_CONFIRMATION 91 /* Channel open succeeded */ |
| |
| #define | SSH_MSG_CHANNEL_OPEN_FAILURE 92 /* Channel open failed */ |
| |
| #define | SSH_MSG_CHANNEL_WINDOW_ADJUST 93 /* No-op */ |
| |
| #define | SSH_MSG_CHANNEL_DATA 94 /* Data */ |
| |
| #define | SSH_MSG_CHANNEL_EXTENDED_DATA 95 /* Out-of-band data */ |
| |
| #define | SSH_MSG_CHANNEL_EOF 96 /* EOF */ |
| |
| #define | SSH_MSG_CHANNEL_CLOSE 97 /* Close the channel */ |
| |
| #define | SSH_MSG_CHANNEL_REQUEST 98 /* Perform a channel ioctl */ |
| |
| #define | SSH_MSG_CHANNEL_SUCCESS 99 /* Channel request succeeded */ |
| |
| #define | SSH_MSG_CHANNEL_FAILURE 100/* Channel request failed */ |
| |
| #define | SSH1_MSG_SPECIAL_USEROPT 500 /* Value to handle SSHv1 user name */ |
| |
| #define | SSH1_MSG_SPECIAL_PWOPT 501 /* Value to handle SSHv1 password */ |
| |
| #define | SSH1_MSG_SPECIAL_RSAOPT 502 /* Value to handle SSHv1 RSA challenge */ |
| |
| #define | SSH1_MSG_SPECIAL_ANY 503 /* Any SSHv1 packet type */ |
| |
| #define | SSH_MSG_SPECIAL_FIRST 500 /* Boundary for _SPECIAL types */ |
| |
| #define | SSH_MSG_SPECIAL_USERAUTH 501 /* Value to handle SSHv2 combined auth.*/ |
| |
| #define | SSH_MSG_SPECIAL_USERAUTH_PAM 502 /* Value to handle SSHv2 PAM auth.*/ |
| |
| #define | SSH_MSG_SPECIAL_CHANNEL 503 /* Value to handle channel open */ |
| |
| #define | SSH_MSG_SPECIAL_REQUEST 504 /* Value to handle SSHv2 global/channel req.*/ |
| |
| #define | SSH_MSG_SPECIAL_LAST 505 /* Last valid _SPECIAL type */ |
| |
| #define | SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1 |
| |
| #define | SSH_DISCONNECT_PROTOCOL_ERROR 2 |
| |
| #define | SSH_DISCONNECT_KEY_EXCHANGE_FAILED 3 |
| |
| #define | SSH_DISCONNECT_RESERVED 4 |
| |
| #define | SSH_DISCONNECT_MAC_ERROR 5 |
| |
| #define | SSH_DISCONNECT_COMPRESSION_ERROR 6 |
| |
| #define | SSH_DISCONNECT_SERVICE_NOT_AVAILABLE 7 |
| |
| #define | SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8 |
| |
| #define | SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9 |
| |
| #define | SSH_DISCONNECT_CONNECTION_LOST 10 |
| |
| #define | SSH_DISCONNECT_BY_APPLICATION 11 |
| |
| #define | SSH_DISCONNECT_TOO_MANY_CONNECTIONS 12 |
| |
| #define | SSH_DISCONNECT_AUTH_CANCELLED_BY_USER 13 |
| |
| #define | SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14 |
| |
| #define | SSH_DISCONNECT_ILLEGAL_USER_NAME 15 |
| |
| #define | SSH_OPEN_ADMINISTRATIVELY_PROHIBITED 1 |
| |
| #define | SSH_OPEN_CONNECT_FAILED 2 |
| |
| #define | SSH_OPEN_UNKNOWN_CHANNEL_TYPE 3 |
| |
| #define | SSH_OPEN_RESOURCE_SHORTAGE 4 |
| |
| #define | CRYPT_PSEUDOALGO_DHE ( CRYPT_ALGO_LAST_CONVENTIONAL - 9 ) |
| |
| #define | CRYPT_PSEUDOALGO_DHE_ALT ( CRYPT_ALGO_LAST_CONVENTIONAL - 8 ) |
| |
| #define | CRYPT_PSEUDOALGO_ECDH_P384 ( CRYPT_ALGO_LAST_CONVENTIONAL - 7 ) |
| |
| #define | CRYPT_PSEUDOALGO_ECDH_P521 ( CRYPT_ALGO_LAST_CONVENTIONAL - 6 ) |
| |
| #define | CRYPT_PSEUDOALGO_ECDSA_P384 ( CRYPT_ALGO_LAST_CONVENTIONAL - 5 ) |
| |
| #define | CRYPT_PSEUDOALGO_ECDSA_P521 ( CRYPT_ALGO_LAST_CONVENTIONAL - 4 ) |
| |
| #define | CRYPT_PSEUDOALGO_COPR ( CRYPT_ALGO_LAST_CONVENTIONAL - 3 ) |
| |
| #define | CRYPT_PSEUDOALGO_PASSWORD ( CRYPT_ALGO_LAST_CONVENTIONAL - 2 ) |
| |
| #define | CRYPT_PSEUDOALGO_PAM ( CRYPT_ALGO_LAST_CONVENTIONAL - 1 ) |
| |
| #define | MAX_ENCODED_KEYEXSIZE ( CRYPT_MAX_PKCSIZE + 16 ) |
| |
| #define | ENCODED_REQKEYSIZE ( UINT_SIZE * 3 ) |
| |
| #define | isPseudoAlgo(algorithm) |
| |
| #define | isValidDHsize(value, serverKeySize, extraLength) |
| |
| #define | isValidECDHsize(value, serverKeySize, extraLength) |
| |
| #define | hostModulus clientKeyexValue |
| |
| #define | serverModulus serverKeyexValue |
| |
| #define | hostModulusLength clientKeyexValueLength |
| |
| #define | serverModulusLength serverKeyexValueLength |
| |
| #define | UNUSED_CHANNEL_NO CRYPT_ERROR |
| |
| #define | UNUSED_CHANNEL_ID 0 |
| |
| #define | streamBookmarkSet(stream, offset) offset = stell( stream ) |
| |
| #define | streamBookmarkSetFullPacket(stream, offset) offset = stell( stream ) - ID_SIZE |
| |
| #define | initSSH1processing initSSH2processing |
| |
|
| CHECK_RETVAL | STDC_NONNULL_ARG ((1, 2, 3)) int streamBookmarkComplete(INOUT STREAM *stream |
| |
| CHECK_RETVAL int | getAlgoStringInfo (OUT const ALGO_STRING_INFO **algoStringInfoPtrPtr, OUT_INT_Z int *noInfoEntries) |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((1, 2, 4, 6)) int readAlgoString(INOUT STREAM *stream |
| |
| CHECK_RETVAL | IN_ARRAY (noAlgoStringEntries) const ALGO_STRING_INFO *algoInfo |
| |
| CHECK_RETVAL | IN_RANGE (1, 100) const int noAlgoStringEntries |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((1)) int writeAlgoString(INOUT STREAM *stream |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((1, 2)) int processClientAuth(INOUT SESSION_INFO *sessionInfoPtr |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((1, 4)) int addChannel(INOUT SESSION_INFO *sessionInfoPtr |
| |
| CHECK_RETVAL IN const long | IN_LENGTH_MIN (1024) const int maxPacketSize |
| |
| CHECK_RETVAL IN const long | IN_BUFFER (typeLen) const void *type |
| |
CHECK_RETVAL IN const long
IN_LENGTH_SHORT const int | IN_BUFFER_OPT (arg1Len) const void *arg1 |
| |
| CHECK_RETVAL IN const long | IN_ENUM (CHANNEL) const CHANNEL_TYPE channelType |
| |
| CHECK_RETVAL IN const long | IN_ENUM_OPT (CHANNEL) const CHANNEL_TYPE channelType) |
| |
| | CHECK_RETVAL_RANGE (1, LONG_MAX) STDC_NONNULL_ARG((1)) long getCurrentChannelNo(const SESSION_INFO *sessionInfoPtr |
| |
| | CHECK_RETVAL_ENUM (CHANNEL) STDC_NONNULL_ARG((1)) CHANNEL_TYPE getChannelStatusByChannelNo(const SESSION_INFO *sessionInfoPtr |
| |
| | IN_BUFFER (addrInfoLen) const char *addrInfo |
| |
CHECK_RETVAL IN_ATTRIBUTE
const CRYPT_ATTRIBUTE_TYPE | OUT_BUFFER_OPT (dataMaxLength,*dataLength) void *data |
| |
| CHECK_RETVAL | IN_ENUM (SSH_ATTRIBUTE) const SSH_ATTRIBUTE_TYPE attribute |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((1, 3)) int setChannelAttributeS(INOUT SESSION_INFO *sessionInfoPtr |
| |
CHECK_RETVAL IN_ATTRIBUTE
const CRYPT_ATTRIBUTE_TYPE | IN_BUFFER (dataLength) const void *data |
| |
CHECK_RETVAL IN_ATTRIBUTE
const CRYPT_ATTRIBUTE_TYPE | IN_RANGE (1, CRYPT_MAX_TEXTSIZE) const int dataLength) |
| |
| CHECK_RETVAL | IN_RANGE (1, 255) const int type |
| |
| CHECK_RETVAL | IN_RANGE (0, 4) const int noParams |
| |
| | CHECK_RETVAL_RANGE (10000, MAX_WINDOW_SIZE) STDC_NONNULL_ARG((1)) int getWindowSize(const SESSION_INFO *sessionInfoPtr) |
| |
| CHECK_RETVAL OUT_LENGTH_SHORT_Z int | IN_BUFFER_OPT (keyDataLength) const void *keyData |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((2)) int hashAsString(IN_HANDLE const CRYPT_CONTEXT iHashContext |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((3)) int checkMacSSH(IN_HANDLE const CRYPT_CONTEXT iMacContext |
| |
| CHECK_RETVAL IN_INT const long | IN_BUFFER (dataMaxLength) const BYTE *data |
| |
CHECK_RETVAL IN_INT const long
IN_LENGTH const int
IN_LENGTH_Z const int | IN_RANGE (16, CRYPT_MAX_HASHSIZE) const int macLength) |
| |
CHECK_RETVAL IN_INT const long
IN_LENGTH const int
IN_LENGTH_Z const int
IN_LENGTH const int | IN_ENUM (MAC) const MAC_TYPE macType |
| |
| CHECK_RETVAL_PTR const char * | getSSHPacketName (IN_RANGE(0, 255) const int packetType) |
| |
| CHECK_RETVAL | STDC_NONNULL_ARG ((1, 3, 4)) int readPacketHeaderSSH2(INOUT SESSION_INFO *sessionInfoPtr |
| |
| CHECK_RETVAL | IN_RANGE (SSH_MSG_DISCONNECT, SSH_MSG_SPECIAL_REQUEST) const int expectedType |
| |
| CHECK_RETVAL | IN_RANGE (1, 1024) const int minPacketSize) |
| |
| CHECK_RETVAL const SESSION_INFO | IN_RANGE (SSH_MSG_DISCONNECT, SSH_MSG_CHANNEL_FAILURE) const int packetType) |
| |
| void | initSSH1processing (INOUT SESSION_INFO *sessionInfoPtr, INOUT_OPT SSH_HANDSHAKE_INFO *handshakeInfo, const BOOLEAN isServer) STDC_NONNULL_ARG((1)) |
| |