ssh

Dependents:   OS

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ssh.h Source File

ssh.h

00001 /* ssh.h
00002  *
00003  * Copyright (C) 2014-2016 wolfSSL Inc.
00004  *
00005  * This file is part of wolfSSH.
00006  *
00007  * wolfSSH is free software; you can redistribute it and/or modify
00008  * it under the terms of the GNU General Public License as published by
00009  * the Free Software Foundation; either version 3 of the License, or
00010  * (at your option) any later version.
00011  *
00012  * wolfSSH is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License
00018  * along with wolfSSH.  If not, see <http://www.gnu.org/licenses/>.
00019  */
00020 
00021 
00022 /*
00023  * The ssh module contains the public API for wolfSSH.
00024  */
00025 
00026 
00027 #pragma once
00028 
00029 #include <wolfssl/options.h>
00030 #include <wolfcrypt/types.h>
00031 #include <wolfssh/settings.h>
00032 #include <wolfssh/version.h>
00033 #include <wolfssh/port.h>
00034 #include <wolfssh/error.h>
00035 
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039 
00040 
00041 typedef struct WOLFSSH_CTX WOLFSSH_CTX;
00042 typedef struct WOLFSSH WOLFSSH;
00043 typedef struct WOLFSSH_CHANNEL WOLFSSH_CHANNEL;
00044 
00045 
00046 WOLFSSH_API int wolfSSH_Init(void);
00047 WOLFSSH_API int wolfSSH_Cleanup(void);
00048 
00049 /* debugging output functions */
00050 WOLFSSH_API void wolfSSH_Debugging_ON(void);
00051 WOLFSSH_API void wolfSSH_Debugging_OFF(void);
00052 
00053 /* context functions */
00054 WOLFSSH_API WOLFSSH_CTX* wolfSSH_CTX_new(byte, void*);
00055 WOLFSSH_API void wolfSSH_CTX_free(WOLFSSH_CTX*);
00056 
00057 /* ssh session functions */
00058 WOLFSSH_API WOLFSSH* wolfSSH_new(WOLFSSH_CTX*);
00059 WOLFSSH_API void wolfSSH_free(WOLFSSH*);
00060 
00061 WOLFSSH_API int wolfSSH_set_fd(WOLFSSH*, int);
00062 WOLFSSH_API int wolfSSH_get_fd(const WOLFSSH*);
00063 
00064 /* data high water mark functions */
00065 WOLFSSH_API int wolfSSH_SetHighwater(WOLFSSH*, word32);
00066 WOLFSSH_API word32 wolfSSH_GetHighwater(WOLFSSH*);
00067 
00068 typedef int (*WS_CallbackHighwater)(byte, void*);
00069 WOLFSSH_API void wolfSSH_SetHighwaterCb(WOLFSSH_CTX*, word32,
00070                                         WS_CallbackHighwater);
00071 WOLFSSH_API void wolfSSH_SetHighwaterCtx(WOLFSSH*, void*);
00072 WOLFSSH_API void* wolfSSH_GetHighwaterCtx(WOLFSSH*);
00073 
00074 
00075 WOLFSSH_API int wolfSSH_get_error(const WOLFSSH*);
00076 WOLFSSH_API const char* wolfSSH_get_error_name(const WOLFSSH*);
00077 
00078 /* I/O callbacks */
00079 typedef int (*WS_CallbackIORecv)(WOLFSSH*, void*, word32, void*);
00080 typedef int (*WS_CallbackIOSend)(WOLFSSH*, void*, word32, void*);
00081 WOLFSSH_API void wolfSSH_SetIORecv(WOLFSSH_CTX*, WS_CallbackIORecv);
00082 WOLFSSH_API void wolfSSH_SetIOSend(WOLFSSH_CTX*, WS_CallbackIOSend);
00083 WOLFSSH_API void wolfSSH_SetIOReadCtx(WOLFSSH*, void*);
00084 WOLFSSH_API void wolfSSH_SetIOWriteCtx(WOLFSSH*, void*);
00085 WOLFSSH_API void* wolfSSH_GetIOReadCtx(WOLFSSH*);
00086 WOLFSSH_API void* wolfSSH_GetIOWriteCtx(WOLFSSH*);
00087 
00088 /* User Authentication callback */
00089 typedef struct WS_UserAuthData_Password {
00090     byte* password;
00091     word32 passwordSz;
00092     /* The following are present for future use. */
00093     byte hasNewPassword;
00094     byte* newPassword;
00095     word32 newPasswordSz;
00096 } WS_UserAuthData_Password;
00097 
00098 typedef struct WS_UserAuthData_PublicKey {
00099     byte* dataToSign;
00100     byte* publicKeyType;
00101     word32 publicKeyTypeSz;
00102     byte* publicKey;
00103     word32 publicKeySz;
00104     byte hasSignature;
00105     byte* signature;
00106     word32 signatureSz;
00107 } WS_UserAuthData_PublicKey;
00108 
00109 typedef struct WS_UserAuthData {
00110     byte type;
00111     byte* username;
00112     word32 usernameSz;
00113     byte* serviceName;
00114     word32 serviceNameSz;
00115     byte* authName;
00116     word32 authNameSz;
00117     union {
00118         WS_UserAuthData_Password password;
00119         WS_UserAuthData_PublicKey publicKey;
00120     } sf;
00121 } WS_UserAuthData;
00122 
00123 typedef int (*WS_CallbackUserAuth)(byte, WS_UserAuthData*, void*);
00124 WOLFSSH_API void wolfSSH_SetUserAuth(WOLFSSH_CTX*, WS_CallbackUserAuth);
00125 WOLFSSH_API void wolfSSH_SetUserAuthCtx(WOLFSSH*, void*);
00126 WOLFSSH_API void* wolfSSH_GetUserAuthCtx(WOLFSSH*);
00127 
00128 WOLFSSH_API int wolfSSH_SetUsername(WOLFSSH*, const char*);
00129 
00130 WOLFSSH_API int wolfSSH_CTX_SetBanner(WOLFSSH_CTX*, const char*);
00131 WOLFSSH_API int wolfSSH_CTX_UsePrivateKey_buffer(WOLFSSH_CTX*,
00132                                                  const byte*, word32, int);
00133 
00134 WOLFSSH_API int wolfSSH_accept(WOLFSSH*);
00135 WOLFSSH_API int wolfSSH_connect(WOLFSSH*);
00136 WOLFSSH_API int wolfSSH_shutdown(WOLFSSH*);
00137 WOLFSSH_API int wolfSSH_stream_read(WOLFSSH*, byte*, word32);
00138 WOLFSSH_API int wolfSSH_stream_send(WOLFSSH*, byte*, word32);
00139 WOLFSSH_API int wolfSSH_TriggerKeyExchange(WOLFSSH*);
00140 
00141 WOLFSSH_API void wolfSSH_GetStats(WOLFSSH*,
00142                                   word32*, word32*, word32*, word32*);
00143 
00144 WOLFSSH_API int wolfSSH_KDF(byte, byte, byte*, word32, const byte*, word32,
00145                             const byte*, word32, const byte*, word32);
00146 
00147 
00148 enum WS_HighwaterSide {
00149     WOLFSSH_HWSIDE_TRANSMIT,
00150     WOLFSSH_HWSIDE_RECEIVE
00151 };
00152 
00153 
00154 enum WS_EndpointTypes {
00155     WOLFSSH_ENDPOINT_SERVER,
00156     WOLFSSH_ENDPOINT_CLIENT
00157 };
00158 
00159 
00160 enum WS_FormatTypes {
00161     WOLFSSH_FORMAT_ASN1,
00162     WOLFSSH_FORMAT_PEM,
00163     WOLFSSH_FORMAT_RAW
00164 };
00165 
00166 
00167 enum WS_UserAuthTypes {
00168     WOLFSSH_USERAUTH_PASSWORD,
00169     WOLFSSH_USERAUTH_PUBLICKEY
00170 };
00171 
00172 
00173 enum WS_UserAuthResults {
00174     WOLFSSH_USERAUTH_SUCCESS,
00175     WOLFSSH_USERAUTH_FAILURE,
00176     WOLFSSH_USERAUTH_INVALID_AUTHTYPE,
00177     WOLFSSH_USERAUTH_INVALID_USER,
00178     WOLFSSH_USERAUTH_INVALID_PASSWORD,
00179     WOLFSSH_USERAUTH_INVALID_PUBLICKEY
00180 };
00181 
00182 
00183 enum WS_DisconnectReasonCodes {
00184     WOLFSSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT    = 1,
00185     WOLFSSH_DISCONNECT_PROTOCOL_ERROR                 = 2,
00186     WOLFSSH_DISCONNECT_KEY_EXCHANGE_FAILED            = 3,
00187     WOLFSSH_DISCONNECT_RESERVED                       = 4,
00188     WOLFSSH_DISCONNECT_MAC_ERROR                      = 5,
00189     WOLFSSH_DISCONNECT_COMPRESSION_ERROR              = 6,
00190     WOLFSSH_DISCONNECT_SERVICE_NOT_AVAILABLE          = 7,
00191     WOLFSSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED = 8,
00192     WOLFSSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE        = 9,
00193     WOLFSSH_DISCONNECT_CONNECTION_LOST                = 10,
00194     WOLFSSH_DISCONNECT_BY_APPLICATION                 = 11,
00195     WOLFSSH_DISCONNECT_TOO_MANY_CONNECTIONS           = 12,
00196     WOLFSSH_DISCONNECT_AUTH_CANCELLED_BY_USER         = 13,
00197     WOLFSSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 14,
00198     WOLFSSH_DISCONNECT_ILLEGAL_USER_NAME              = 15
00199 };
00200 
00201 
00202 #ifdef __cplusplus
00203 }
00204 #endif
00205