TrustCore SDK NanoSSH API reference  version 7.0
ssh.h
Go to the documentation of this file.
1 /*
2  * ssh.h
3  *
4  * SSH Developer API
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
37 /*------------------------------------------------------------------*/
38 
39 #ifndef __SSH_HEADER__
40 #define __SSH_HEADER__
41 
42 #include "../common/mtcp.h"
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 #if !defined( __ENABLE_MOCANA_SSH_SERVER__ ) && defined( __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__ )
48 #define __ENABLE_MOCANA_SSH_SERVER__
49 #endif
50 
51 
52 /*------------------------------------------------------------------*/
53 
54 /* message types */
55 enum sshSessionTypes
56 {
57  SSH_SESSION_NOTHING,
58  SSH_SESSION_OPEN,
59  SSH_SESSION_OPEN_PF,
60  SSH_SESSION_PTY_REQUEST,
61  SSH_SESSION_OPEN_SHELL,
62  SSH_SESSION_OPEN_SFTP,
63  SSH_SESSION_OPEN_EXEC,
64  SSH_SESSION_WINDOW_CHANGE,
65  SSH_SESSION_DATA,
66  SSH_SESSION_STDERR,
67  SSH_SESSION_EOF,
68  SSH_SESSION_CLOSED,
69  SSH_SESSION_CHANNEL_CLOSED,
70  SSH_PF_CLOSED,
71  SSH_PF_EOF,
72  SSH_SESSION_BREAK_OP,
73  SSH_SESSION_PING_REPLY,
74  SSH_PF_DATA
75 };
76 
77 
78 /*------------------------------------------------------------------*/
79 
80 enum asyncWaitEvents
81 {
82  kNotWaiting = 0,
83  kWaitingForAuth,
84  kWaitingForHwOffload
85 };
86 
87 
88 /*------------------------------------------------------------------*/
89 
90 /* timeouts in milliseconds (zero indicates no timeout) */
91 #ifndef TIMEOUT_SSH_OPEN
92 #define TIMEOUT_SSH_OPEN (2000)
93 #endif
94 
95 #ifndef TIMEOUT_SSH_KEX
96 #ifdef __ENABLE_MOCANA_QS__
97  #define TIMEOUT_SSH_KEX (120000)
98 #else
99  #define TIMEOUT_SSH_KEX (10000)
100 #endif
101 #endif
102 
103 #ifndef TIMEOUT_SSH_NEWKEYS
104 #ifdef __ENABLE_MOCANA_QS__
105  #define TIMEOUT_SSH_NEWKEYS (120000)
106 #else
107  #define TIMEOUT_SSH_NEWKEYS (15000)
108 #endif
109 #endif
110 
111 #ifndef TIMEOUT_SSH_SERVICE_REQUEST
112 #ifdef __ENABLE_MOCANA_QS__
113  #define TIMEOUT_SSH_SERVICE_REQUEST (120000)
114 #else
115  #define TIMEOUT_SSH_SERVICE_REQUEST (4000)
116 #endif
117 #endif
118 
119 #ifndef TIMEOUT_SSH_OPEN_STATE
120 #define TIMEOUT_SSH_OPEN_STATE (0)
121 #endif
122 
123 /* the most interesting of these values, the amount of time we allow the user to authenticate */
124 #ifndef TIMEOUT_SSH_AUTH_LOGON
125 #ifdef __ENABLE_MOCANA_QS__
126  #define TIMEOUT_SSH_AUTH_LOGON (1000 * 60 * 200)
127 #else
128  #define TIMEOUT_SSH_AUTH_LOGON (1000 * 60 * 10)
129 #endif
130 #endif
131 
132 /* suggested by SSHv2 standard, max number of authentication attempts */
133 #ifndef MAX_SSH_AUTH_ATTEMPTS
134 #define MAX_SSH_AUTH_ATTEMPTS (20)
135 #endif
136 
137 /* sizes */
138 #ifndef SSH_MAX_BUFFER_SIZE
139 #ifdef __ENABLE_MOCANA_QS__
140 #define SSH_MAX_BUFFER_SIZE (2097152)
141 #else
142 #define SSH_MAX_BUFFER_SIZE (1024*4)
143 #endif
144 #endif
145 
146 #ifndef MAX_SESSION_WINDOW_SIZE
147 #define MAX_SESSION_WINDOW_SIZE (1024*2)
148 #endif
149 
150 #ifndef SSH_SYNC_BUFFER_SIZE
151 #define SSH_SYNC_BUFFER_SIZE (512)
152 #endif
153 
154 #ifndef MOCANA_SSH_SOCKET_STREAM_SIZE
155 #define MOCANA_SSH_SOCKET_STREAM_SIZE (4096)
156 #endif
157 
158 #if (MAX_SESSION_WINDOW_SIZE > SSH_MAX_BUFFER_SIZE)
159 #error ssh.h: SSH_MAX_BUFFER_SIZE must be greater than MAX_SESSION_WINDOW_SIZE
160 #endif
161 
162 /* SSH Key Blob Types */
163 #define SSH_PUBLIC_KEY_BLOB 1
164 #define SSH_PRIVATE_KEY_BLOB 2
165 
166 /* SSH Advertised Authentication Methods (OR for multiple types) */
167 #define MOCANA_SSH_AUTH_NONE 0x10
168 #define MOCANA_SSH_AUTH_PUBLIC_KEY 0x80
169 #define MOCANA_SSH_AUTH_PASSWORD 0x40
170 #define MOCANA_SSH_AUTH_KEYBOARD_INTERACTIVE 0x20
171 
172 #define SSH_DEFAULT_TCPIP_PORT (22)
173 
174 /* authentication results */
175 #define AUTH_FAIL (0)
176 #define AUTH_PASS (1)
177 #define AUTH_MORE (2)
178 #define AUTH_WAIT (3)
179 #define AUTH_FAIL_MORE (4)
180 
181 /* authentication keyboard interactive */
182 #define AUTH_ECHO (1)
183 #define AUTH_NO_ECHO (0)
184 
185 #ifndef AUTH_MAX_NUM_PROMPTS
186 #define AUTH_MAX_NUM_PROMPTS 3
187 #endif
188 
189 /* stream buffer sizes */
190 #ifndef SFTP_SERVER_STREAM_BUF_SIZE
191 #define SFTP_SERVER_STREAM_BUF_SIZE (4096)
192 #endif
193 
194 #ifdef __ENABLE_MOCANA_SSH_PORT_FORWARDING__
195 #define MOCANA_SSH_ALLOW_DIRECT_TCPIP (0x00010000)
196 #define MOCANA_SSH_ALLOW_FORWARDED_TCPIP (0x00020000)
197 #define MOCANA_SSH_ALLOW_PRIVILEGED_DIRECT_TCPIP (0x00040000)
198 #define MOCANA_SSH_ALLOW_PRIVILEGED_FORWARD_TCPIP (0x00080000)
199 #define MOCANA_SSH_REVERSE_PORT_FWD_PORT_VALUE (25000)
200 #endif
201 
202 /* SSH ioctls */
203 #define SET_SSH_MAX_SESSION_TIME_LIMIT (1)
204 
205 
206 /*------------------------------------------------------------------*/
207 
212 typedef struct
213 {
214  ubyte4 width;
215  ubyte4 height;
216  ubyte4 pixelWidth;
217  ubyte4 pixelHeight;
218 
219  sbyte* pTerminalEnvironment;
220  ubyte4 terminalEnvironmentLength;
221 
222  sbyte* pEncodedTerminalModes;
223  ubyte4 encodedTerminalModes;
224 
225  ubyte4 breakLength;
226 
227 } terminalState;
228 
233 typedef struct
234 {
235  sbyte* pPrompt;
236  ubyte4 promptLen;
237  ubyte4 echo;
238 
239 } keyIntPrompt;
240 
245 typedef struct keyIntInfoReq
246 {
247  sbyte4 cookie; /* for flexiblity, useful for marking things as static or dynamic, etc */
248 
249  sbyte* pName;
250  ubyte4 nameLen;
251  sbyte* pInstruction;
252  ubyte4 instructionLen;
253 
254  ubyte4 numPrompts;
255  keyIntPrompt* prompts[AUTH_MAX_NUM_PROMPTS];
256 
257 } keyIntInfoReq;
258 
263 typedef struct
264 {
265  ubyte* pResponse;
266  ubyte4 responseLen;
267 
268 } keyIntResp;
269 
274 typedef struct
275 {
276  ubyte4 numResponses;
277  keyIntResp* responses[AUTH_MAX_NUM_PROMPTS]; /* contains responses to prompts */
278 
280 
281 struct certChain;
282 typedef struct certChain* certChainPtr;
283 
304 typedef struct
305 {
311 
317 
325 
333 
341 
349 
357 
365 
373 
374 #if ((defined(__ENABLE_MOCANA_SSH_OCSP_SUPPORT__)) && (defined(__ENABLE_MOCANA_OCSP_CLIENT__)))
375  sbyte * pOcspResponderUrl;
376 #if (defined(__ENABLE_MOCANA_OCSP_TIMEOUT_CONFIG__))
377  ubyte4 ocspTimeout;
378 #endif
379 #endif
380 
381  /* protocol specific upcalls */
382 
417  sbyte4(*funcPtrSessionOpen) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
418 
450  sbyte4(*funcPtrPtyRequest) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
451 
484  sbyte4(*funcPtrOpenShell) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
485 
518  sbyte4(*funcPtrOpenSftp) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
519 
552  sbyte4(*funcPtrWindowChange) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
553 
586  sbyte4(*funcPtrReceivedData) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
587 
618  sbyte4(*funcPtrStdErr) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
619 
653  sbyte4(*funcPtrEof) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
654 
686  sbyte4(*funcPtrClosed) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
687 
719  sbyte4(*funcPtrCloseChannel) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
720 
753  sbyte4(*funcPtrBreakOp) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
754 
789  sbyte4(*funcPtrExec) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
790 
823  sbyte4(*funcPtrReplyPing) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen);
824 
825  /* general purpose upcalls */
826 #ifndef __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__
827 
854  void(*funcPtrPostAccept) (sbyte4 connectionInstance, TCP_SOCKET tcpAcceptSocket);
855 
880  void(*funcPtrConnection) (sbyte4 connectionInstance);
881 #else
882 
908  void(*funcPtrStartTimer) (sbyte4 connectionInstance, ubyte4 msTimerExpire, sbyte4 boolUserAuthenticated);
909 #endif /* __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__ */
910 
942  sbyte4(*funcPtrPasswordAuth) (sbyte4 connectionInstance, const ubyte *pUser, ubyte4 userLength, const ubyte *pPassword, ubyte4 passwordLength);
943 
948  sbyte4(*funcPtrNoneAuth) (sbyte4 connectionInstance, const ubyte *pUser, ubyte4 userLength);
949 
954 
1053  sbyte4(*funcPtrPubKeyAuth) (sbyte4 connectionInstance, const ubyte *pUser, ubyte4 userLength, const ubyte *pPubKey, ubyte4 pubKeyLength, ubyte4 keyType);
1054 
1091  sbyte4(*funcPtrCertStatus) (sbyte4 connectionInstance,
1092  const ubyte *pUser, ubyte4 userLength,
1093  sbyte4 cert_status, ubyte *pCertificate, ubyte4 certLen,
1094  certChainPtr pCertChain, const ubyte *pAnchorCert, ubyte4 anchorCertLen);
1095 
1134  sbyte4(*funcPtrKeyIntAuthReq) (sbyte4 connectionInstance, const ubyte* pUser, ubyte4 userLength, keyIntInfoResp* pResponseInfo, keyIntInfoReq* pRequestInfo, sbyte4 *pAuthState);
1135 
1164  sbyte4(*funcPtrReleaseKeyIntReq)(sbyte4 connectionInstance, keyIntInfoReq* request);
1165 
1195  sbyte4(*funcPtrGetAuthAdvertizedMethods) (sbyte4 connectionInstance);
1196 
1197 #ifdef __ENABLE_MOCANA_SSH_PORT_FORWARDING__
1198 
1238  sbyte4(*funcPtrConnect) (sbyte4 connectionInstance, sbyte4 sessionNum, ubyte *pConnectHost, ubyte2 port, sbyte4 *pIgnoreRequest, sbyte4 channel);
1239 
1278  sbyte4(*funcPortFwdReceivedData) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen, ubyte4 channel);
1279 
1280 
1281 
1319  sbyte4(*funcPortFwdPtrClosed) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen, ubyte4 channel);
1320 
1358  sbyte4 (*funcPortFwdPtrEof) (sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte *pMesg, ubyte4 mesgLen, ubyte4 channel);
1359 
1365  sbyte4 (*funcCheckPort) (ubyte4 dstPort);
1366 
1372  sbyte4 (*funcStartTcpIpForward) (sbyte4 connectionInstance,ubyte* pSrc, ubyte4 dstport, ubyte4 orgPort);
1373 
1379  sbyte4 (*funcCancelTcpIpForward) (sbyte4 connectionInstance, ubyte4 dstPort);
1380 
1386  sbyte4 (*funcPtrRemotePortFwdSessionOpen) (sbyte4 connectionInstance, ubyte4 channel, ubyte4 myChannel);
1387 #endif /* __ENABLE_MOCANA_SSH_PORT_FORWARDING__ */
1388 
1413  sbyte4(*funcPtrSessionReKey) (sbyte4 connectionInstance, intBoolean initiatedByRemote);
1414 
1415 } sshSettings;
1416 
1417 
1418 /*------------------------------------------------------------------*/
1419 
1420 #ifdef __ENABLE_MOCANA_SSH_SERVER__
1421 
1456 MOC_EXTERN sbyte4 SSH_assignCertificateStore(sbyte4 connectionInstance, certStorePtr pCertStore);
1457 
1458 #ifndef __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__
1459 
1498 MOC_EXTERN sbyte4 SSH_init(sbyte4 sshMaxConnections);
1499 
1550 MOC_EXTERN sbyte4 SSH_acceptConnection(TCP_SOCKET socket);
1551 
1599 MOC_EXTERN sbyte4 SSH_negotiateConnection(sbyte4 connectionInstance);
1600 
1601 #ifndef __ENABLE_MOCANA_SSH_STREAM_API__
1602 
1677 MOC_EXTERN sbyte4 SSH_recvMessage(sbyte4 connectionInstance, sbyte4 *pMessageType, sbyte *pRetMessage, sbyte4 *pNumBytesReceived, ubyte4 timeout);
1678 #else
1679 
1729 MOC_EXTERN sbyte4 SSH_recv(sbyte4 connectionInstance, sbyte4 *pMessageType, ubyte *pRetBuffer, ubyte4 bufferSize, sbyte4 *pNumBytesReceived, ubyte4 timeout);
1730 
1768 MOC_EXTERN sbyte4 SSH_recvPending(sbyte4 connectionInstance, sbyte4 *pRetBooleanIsPending);
1769 #endif
1770 
1844 MOC_EXTERN sbyte4 SSH_sendMessage(sbyte4 connectionInstance, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent);
1845 
1880 MOC_EXTERN sbyte4 SSH_sendErrMessage(sbyte4 connectionInstance, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent);
1881 
1919 MOC_EXTERN sbyte4 SSH_closeConnection(sbyte4 connectionInstance);
1920 
1921 #ifdef __ENABLE_MOCANA_SSH_PING__
1922 
1956 MOC_EXTERN sbyte4 SSH_sendPing(sbyte4 connectionInstance);
1957 #endif
1958 #endif /* __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__ */
1959 
1960 #if (defined(__ENABLE_MOCANA_SSH_OLD_DSA_CONVERSION__) && defined(__ENABLE_MOCANA_DSA__))
1961 
2037 MOC_EXTERN sbyte4 SSH_convertOldKeyBlobToNew(ubyte *pOldDsaPublicKeyBlob, ubyte4 oldDsaPublicKeyBlobLength, ubyte *pOldDsaPrivateKeyBlob, ubyte4 oldDsaPrivateKeyBlobLength, ubyte **ppRetNewKeyBlob, ubyte4 *pRetNewKeyBlobLength);
2038 #endif
2039 
2077 MOC_EXTERN sbyte4 SSH_getTerminalSettingDescr(sbyte4 connectionInstance, terminalState **ppTerminalSettings);
2078 
2119 MOC_EXTERN sbyte4 SSH_getCookie(sbyte4 connectionInstance, sbyte4 *pCookie);
2120 
2160 MOC_EXTERN sbyte4 SSH_setCookie(sbyte4 connectionInstance, sbyte4 cookie);
2161 
2191 MOC_EXTERN sbyte4 SSH_getInstanceFromSocket(TCP_SOCKET socket);
2192 
2250 MOC_EXTERN sbyte4 SSH_getSessionCryptoInfo(sbyte4 connectionInstance, sbyte **ppInCipherName, sbyte **ppInMacName, sbyte **ppOutCipherName, sbyte **ppOutMacName);
2251 
2284 MOC_EXTERN sbyte4 SSH_getNextConnectionInstance(sbyte4 connectionInstance);
2285 
2318 MOC_EXTERN sbyte4 SSH_getSocketId(sbyte4 connectionInstance, TCP_SOCKET *pRetSocket);
2319 
2320 MOC_EXTERN sbyte4 SSH_setErrorCode(sbyte4 connectionInstance, sbyte4 errorCode);
2321 
2374 MOC_EXTERN sbyte4 SSH_useThisCipherList(sbyte4 connectionInstance, ubyte *pCipherList);
2375 
2425 MOC_EXTERN sbyte4 SSH_useThisHmacList(sbyte4 connectionInstance, ubyte *pHmacList);
2426 
2478 MOC_EXTERN sbyte4 SSH_ioctl(sbyte4 connectionInstance, ubyte4 ioctlSelector, ubyte4 ioctlValue);
2479 
2517 MOC_EXTERN sbyte4 SSH_initiateReKey(sbyte4 connectionInstance, ubyte4 msAllowToComply);
2518 
2555 MOC_EXTERN sbyte4 SSH_numBytesTransmitted(sbyte4 connectionInstance, ubyte8 *pRetNumBytes);
2556 
2557 #ifndef __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__
2558 #ifdef __USE_MOCANA_SSH_SERVER__
2559 
2623 MOC_EXTERN sbyte4 SSH_startServer(void);
2624 
2657 MOC_EXTERN void SSH_stopServer (void);
2658 
2690 MOC_EXTERN void SSH_disconnectAllClients(void);
2691 #endif /* __USE_MOCANA_SSH_SERVER__ */
2692 #endif /* __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__ */
2693 
2733 MOC_EXTERN sbyte4 SSH_compareAuthKeys(const ubyte *pPubKey, ubyte4 pubKeyLength,
2734  const ubyte *pFileKey, ubyte4 fileKeyLength,
2735  sbyte4 *pRetIsMatch);
2736 
2794 MOC_EXTERN sbyte4 SSH_verifyPublicKeyFile(sbyte *pKeyFileData, ubyte4 fileSize);
2795 
2834 MOC_EXTERN sbyte4 SSH_shutdown(void);
2835 
2872 MOC_EXTERN sbyte4 SSH_releaseTables(void);
2873 
2911 MOC_EXTERN sshSettings* SSH_sshSettings(void);
2912 
2913 #ifdef __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__
2914 
2949 MOC_EXTERN sbyte4 SSH_ASYNC_init(sbyte4 sshMaxConnections);
2950 
2985 MOC_EXTERN sbyte4 SSH_ASYNC_setListeningPort(ubyte4 listeningPort);
2986 
3037 MOC_EXTERN sbyte4 SSH_ASYNC_acceptConnection(TCP_SOCKET tempSocket, ubyte *pClientHelloString, ubyte4 clientHelloStringLength, ubyte *pServerHelloString, ubyte4 serverHelloStringLength);
3038 
3069 MOC_EXTERN sbyte4 SSH_ASYNC_startProtocolV2(sbyte4 connectionInstance);
3070 
3131 MOC_EXTERN sbyte4 SSH_ASYNC_recvMessage(sbyte4 connectionInstance, ubyte *pBytesReceived, ubyte4 numBytesReceived);
3132 
3173 MOC_EXTERN sbyte4 SSH_ASYNC_ackReceivedMessageBytes(sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte4 numBytesAck);
3174 
3207 MOC_EXTERN sbyte4 SSH_ASYNC_recvContinueMessage(sbyte4 connectionInstance, sbyte4 result);
3208 
3255 MOC_EXTERN sbyte4 SSH_ASYNC_sendMessage(sbyte4 connectionInstance, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent);
3256 
3296 MOC_EXTERN sbyte4 SSH_ASYNC_sendMessagePending(sbyte4 connectionInstance, ubyte4 *pRetNumBytesPending);
3297 
3337 MOC_EXTERN sbyte4 SSH_ASYNC_closeConnection(sbyte4 connectionInstance);
3338 #endif /* __ENABLE_MOCANA_SSH_ASYNC_SERVER_API__ */
3339 
3340 #ifdef __ENABLE_MOCANA_SSH_PORT_FORWARDING__
3341 
3380 MOC_EXTERN sbyte4 SSH_setUserPortForwardingPermissions(sbyte4 connectionInstance, ubyte4 memberGroups);
3381 
3443 MOC_EXTERN sbyte4 SSH_sendPortForwardMessage(sbyte4 connectionInstance, sbyte4 channel, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent);
3444 
3445 MOC_EXTERN sbyte4 SSH_sendPortFwdOpen(sbyte4 connectionInstance, ubyte* pConnectHost,ubyte4 connectPort,ubyte* pSrc, ubyte4 srcPort,ubyte4 *myChannel);
3446 
3489 MOC_EXTERN sbyte4 SSH_sendPortForwardClose(sbyte4 connectionInstance, sbyte4 channel);
3490 
3528 MOC_EXTERN sbyte4 SSH_ackPortFwdReceivedMessageBytes(sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte4 numBytesAck, ubyte4 channel);
3529 #endif /* __ENABLE_MOCANA_SSH_PORT_FORWARDING__ */
3530 
3531 #else
3532 
3533 /* stub functions */
3534 #define SSH_init(X) (-1)
3535 #define SSH_acceptConnection(X) (-1)
3536 #define SSH_negotiateConnection(X) (-1)
3537 #define SSH_recvMessage(X) (-1)
3538 #define SSH_sendMessage(X) (-1)
3539 #define SSH_closeConnection(X) (-1)
3540 #define SSH_getTerminalSettingDescr(X) (-1)
3541 #define SSH_getCookie(X) (-1)
3542 #define SSH_setCookie(X) (-1)
3543 #define SSH_startServer(X) (-1)
3544 #define SSH_stopServer(X)
3545 #define SSH_disconnectAllClients(X)
3546 #define SSH_compareAuthKeys(X) (-1)
3547 #define SSH_shutdown(X) (-1)
3548 #define SSH_releaseTables(X) (-1)
3549 #define SSH_verifyPublicKeyFile(X) (-1)
3550 #define SSH_sshSettings(X) (0)
3551 #define SSH_sftpSettings(X) (0)
3552 
3553 #endif /* __ENABLE_MOCANA_SSH_SERVER__ */
3554 
3555 #ifdef __cplusplus
3556 }
3557 #endif
3558 
3559 #endif /* __SSH_HEADER__ */
MOC_EXTERN sbyte4 SSH_getNextConnectionInstance(sbyte4 connectionInstance)
Get the next connection instance from the active NanoSSH connection instance table.
MOC_EXTERN sbyte4 SSH_getTerminalSettingDescr(sbyte4 connectionInstance, terminalState **ppTerminalSettings)
Get a pointer to a connection instance's negotiated terminal settings.
MOC_EXTERN sbyte4 SSH_ioctl(sbyte4 connectionInstance, ubyte4 ioctlSelector, ubyte4 ioctlValue)
Change a NanoSSH server setting value.
MOC_EXTERN sbyte4 SSH_setUserPortForwardingPermissions(sbyte4 connectionInstance, ubyte4 memberGroups)
Set a connection's port forwarding access permission.
sbyte4 sshMaxConnections
Maximum number of connections to this server.
Definition: ssh.h:310
MOC_EXTERN sbyte4 SSH_ASYNC_recvContinueMessage(sbyte4 connectionInstance, sbyte4 result)
Resume (continue) an authentication process that was waiting for a result.
ubyte4 sshTimeOutAuthentication
Number of milliseconds the server waits for an authentication response before timing out...
Definition: ssh.h:364
MOC_EXTERN sbyte4 SSH_ASYNC_setListeningPort(ubyte4 listeningPort)
Set NanoSSH server listening port.
ubyte4 sshTimeOutOpen
Number of milliseconds the server waits for an open session response before timing out...
Definition: ssh.h:332
MOC_EXTERN sbyte4 SSH_sendErrMessage(sbyte4 connectionInstance, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent)
Send stderr error message output data over SSH.
MOC_EXTERN void SSH_stopServer(void)
Stop NanoSSH server from accepting any new client connections.
MOC_EXTERN sbyte4 SSH_negotiateConnection(sbyte4 connectionInstance)
Exchange keys and establishe a secure SSHv2 client-server connection.
ubyte4 sshTimeOutDefaultOpenState
Number of milliseconds the server waits after authentication for a client to make a request (such as ...
Definition: ssh.h:372
MOC_EXTERN sbyte4 SSH_convertOldKeyBlobToNew(ubyte *pOldDsaPublicKeyBlob, ubyte4 oldDsaPublicKeyBlobLength, ubyte *pOldDsaPrivateKeyBlob, ubyte4 oldDsaPrivateKeyBlobLength, ubyte **ppRetNewKeyBlob, ubyte4 *pRetNewKeyBlobLength)
Convert a key blob from NanoSSH version 1.41 and earlier formats to version 2.02 format.
MOC_EXTERN sbyte4 SSH_ASYNC_init(sbyte4 sshMaxConnections)
Initialize NanoSSH server internal structures.
ubyte4 sshMaxAuthAttempts
Number of authentication tries allowed before the connection is said to have failed.
Definition: ssh.h:324
MOC_EXTERN sbyte4 SSH_ackPortFwdReceivedMessageBytes(sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte4 numBytesAck, ubyte4 channel)
Send an acknowledgement that data was received by the server.
MOC_EXTERN sbyte4 SSH_sendPortForwardMessage(sbyte4 connectionInstance, sbyte4 channel, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent)
Send a message to a client over a secure SSH connection.
MOC_EXTERN sbyte4 SSH_getSessionCryptoInfo(sbyte4 connectionInstance, sbyte **ppInCipherName, sbyte **ppInMacName, sbyte **ppOutCipherName, sbyte **ppOutMacName)
Get a NanoSSH session's cipher names.
MOC_EXTERN sbyte4 SSH_sendPortForwardClose(sbyte4 connectionInstance, sbyte4 channel)
Send an SSH CLOSE message to an SSH client whose local port forwarding socket is inactive.
MOC_EXTERN sbyte4 SSH_ASYNC_closeConnection(sbyte4 connectionInstance)
Close a NanoSSH server session and releases all its resources.
MOC_EXTERN sbyte4 SSH_setCookie(sbyte4 connectionInstance, sbyte4 cookie)
Store custom information (a cookie) about the context connection.
MOC_EXTERN sbyte4 SSH_recv(sbyte4 connectionInstance, sbyte4 *pMessageType, ubyte *pRetBuffer, ubyte4 bufferSize, sbyte4 *pNumBytesReceived, ubyte4 timeout)
Get data from a server and decrypt the data.
MOC_EXTERN sbyte4 SSH_closeConnection(sbyte4 connectionInstance)
Close an NanoSSH server session and releases its resources.
MOC_EXTERN sbyte4 SSH_acceptConnection(TCP_SOCKET socket)
Register an SSH client-server connection and get its connection instance.
MOC_EXTERN sbyte4 SSH_ASYNC_ackReceivedMessageBytes(sbyte4 connectionInstance, enum sshSessionTypes sessionEvent, ubyte4 numBytesAck)
Send an acknowledgement that data was received by the server.
Definition: ssh.h:263
MOC_EXTERN sbyte4 SSH_ASYNC_sendMessagePending(sbyte4 connectionInstance, ubyte4 *pRetNumBytesPending)
Determine whether there is data in a connection instance's SSH send buffer.
MOC_EXTERN sbyte4 SSH_useThisHmacList(sbyte4 connectionInstance, ubyte *pHmacList)
Set a server's HMAC list.
sbyte * pBannerString
Definition: ssh.h:953
MOC_EXTERN sbyte4 SSH_ASYNC_startProtocolV2(sbyte4 connectionInstance)
Initiate sending a hello message.
MOC_EXTERN sbyte4 SSH_releaseTables(void)
Release NanoSSH server's internal memory tables.
ubyte4 sshTimeOutServiceRequest
Number of milliseconds the server waits for a service request response before timing out...
Definition: ssh.h:356
MOC_EXTERN sshSettings * SSH_sshSettings(void)
Get a pointer to NanoSSH server settings.
MOC_EXTERN sbyte4 SSH_getInstanceFromSocket(TCP_SOCKET socket)
Get a socket's connection instance.
MOC_EXTERN sbyte4 SSH_verifyPublicKeyFile(sbyte *pKeyFileData, ubyte4 fileSize)
Verify that an RSA or DSS/DSA or ECC or EDDSA public key file format is valid.
MOC_EXTERN sbyte4 SSH_ASYNC_recvMessage(sbyte4 connectionInstance, ubyte *pBytesReceived, ubyte4 numBytesReceived)
Get data from a client.
MOC_EXTERN void SSH_disconnectAllClients(void)
Disconnect all NanoSSH server clients.
MOC_EXTERN sbyte4 SSH_sendPing(sbyte4 connectionInstance)
Determine which connections are alive by pinging each open connection.
Definition: ssh.h:212
MOC_EXTERN sbyte4 SSH_getCookie(sbyte4 connectionInstance, sbyte4 *pCookie)
Get a connection context's custom information.
MOC_EXTERN sbyte4 SSH_sendMessage(sbyte4 connectionInstance, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent)
Send data to a client.
ubyte4 sshTimeOutKeyExchange
Number of milliseconds the server waits for a key exchange before timing out.
Definition: ssh.h:340
Configuration settings and callback function pointers for NanoSSH servers.
Definition: ssh.h:304
ubyte4 sshTimeOutNewKeys
Number of milliseconds the server waits for new keys before timing out.
Definition: ssh.h:348
Definition: ssh.h:245
MOC_EXTERN sbyte4 SSH_ASYNC_acceptConnection(TCP_SOCKET tempSocket, ubyte *pClientHelloString, ubyte4 clientHelloStringLength, ubyte *pServerHelloString, ubyte4 serverHelloStringLength)
Register a secure SSH asynchronous connection and exchange public/private encryption keys...
MOC_EXTERN sbyte4 SSH_init(sbyte4 sshMaxConnections)
Initialize NanoSSH server internal structures.
MOC_EXTERN sbyte4 SSH_recvPending(sbyte4 connectionInstance, sbyte4 *pRetBooleanIsPending)
Determine whether there is data in a connection instance's SSH receive buffer.
Definition: ssh.h:274
MOC_EXTERN sbyte4 SSH_numBytesTransmitted(sbyte4 connectionInstance, ubyte8 *pRetNumBytes)
Get the number of bytes sent and received through a given connectionInstance.
Definition: ssh.h:233
MOC_EXTERN sbyte4 SSH_getSocketId(sbyte4 connectionInstance, TCP_SOCKET *pRetSocket)
Get a connection's socket identifier.
ubyte4 sshListenPort
Port number for the connection context.
Definition: ssh.h:316
MOC_EXTERN sbyte4 SSH_startServer(void)
Start the NanoSSH server.
MOC_EXTERN sbyte4 SSH_useThisCipherList(sbyte4 connectionInstance, ubyte *pCipherList)
Set a server's cipher list.
MOC_EXTERN sbyte4 SSH_ASYNC_sendMessage(sbyte4 connectionInstance, sbyte *pBuffer, sbyte4 bufferSize, sbyte4 *pBytesSent)
Send data to a client.
MOC_EXTERN sbyte4 SSH_compareAuthKeys(const ubyte *pPubKey, ubyte4 pubKeyLength, const ubyte *pFileKey, ubyte4 fileKeyLength, sbyte4 *pRetIsMatch)
Authenticate a client by public key authentication.
MOC_EXTERN sbyte4 SSH_assignCertificateStore(sbyte4 connectionInstance, certStorePtr pCertStore)
Associate host keys with a connection.
MOC_EXTERN sbyte4 SSH_initiateReKey(sbyte4 connectionInstance, ubyte4 msAllowToComply)
Initiate an SSH re-key operation.
MOC_EXTERN sbyte4 SSH_shutdown(void)
Disconnect all clients and shut down the NanoSSH server stack.
MOC_EXTERN sbyte4 SSH_recvMessage(sbyte4 connectionInstance, sbyte4 *pMessageType, sbyte *pRetMessage, sbyte4 *pNumBytesReceived, ubyte4 timeout)
Get an entire message from a server and decrypt the data.