ssh

Dependents:   OS

Revision:
0:c4152c628df5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wolfssh/ssh.h	Mon Nov 25 14:24:05 2019 +0000
@@ -0,0 +1,205 @@
+/* ssh.h
+ *
+ * Copyright (C) 2014-2016 wolfSSL Inc.
+ *
+ * This file is part of wolfSSH.
+ *
+ * wolfSSH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * wolfSSH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with wolfSSH.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+/*
+ * The ssh module contains the public API for wolfSSH.
+ */
+
+
+#pragma once
+
+#include <wolfssl/options.h>
+#include <wolfcrypt/types.h>
+#include <wolfssh/settings.h>
+#include <wolfssh/version.h>
+#include <wolfssh/port.h>
+#include <wolfssh/error.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct WOLFSSH_CTX WOLFSSH_CTX;
+typedef struct WOLFSSH WOLFSSH;
+typedef struct WOLFSSH_CHANNEL WOLFSSH_CHANNEL;
+
+
+WOLFSSH_API int wolfSSH_Init(void);
+WOLFSSH_API int wolfSSH_Cleanup(void);
+
+/* debugging output functions */
+WOLFSSH_API void wolfSSH_Debugging_ON(void);
+WOLFSSH_API void wolfSSH_Debugging_OFF(void);
+
+/* context functions */
+WOLFSSH_API WOLFSSH_CTX* wolfSSH_CTX_new(byte, void*);
+WOLFSSH_API void wolfSSH_CTX_free(WOLFSSH_CTX*);
+
+/* ssh session functions */
+WOLFSSH_API WOLFSSH* wolfSSH_new(WOLFSSH_CTX*);
+WOLFSSH_API void wolfSSH_free(WOLFSSH*);
+
+WOLFSSH_API int wolfSSH_set_fd(WOLFSSH*, int);
+WOLFSSH_API int wolfSSH_get_fd(const WOLFSSH*);
+
+/* data high water mark functions */
+WOLFSSH_API int wolfSSH_SetHighwater(WOLFSSH*, word32);
+WOLFSSH_API word32 wolfSSH_GetHighwater(WOLFSSH*);
+
+typedef int (*WS_CallbackHighwater)(byte, void*);
+WOLFSSH_API void wolfSSH_SetHighwaterCb(WOLFSSH_CTX*, word32,
+                                        WS_CallbackHighwater);
+WOLFSSH_API void wolfSSH_SetHighwaterCtx(WOLFSSH*, void*);
+WOLFSSH_API void* wolfSSH_GetHighwaterCtx(WOLFSSH*);
+
+
+WOLFSSH_API int wolfSSH_get_error(const WOLFSSH*);
+WOLFSSH_API const char* wolfSSH_get_error_name(const WOLFSSH*);
+
+/* I/O callbacks */
+typedef int (*WS_CallbackIORecv)(WOLFSSH*, void*, word32, void*);
+typedef int (*WS_CallbackIOSend)(WOLFSSH*, void*, word32, void*);
+WOLFSSH_API void wolfSSH_SetIORecv(WOLFSSH_CTX*, WS_CallbackIORecv);
+WOLFSSH_API void wolfSSH_SetIOSend(WOLFSSH_CTX*, WS_CallbackIOSend);
+WOLFSSH_API void wolfSSH_SetIOReadCtx(WOLFSSH*, void*);
+WOLFSSH_API void wolfSSH_SetIOWriteCtx(WOLFSSH*, void*);
+WOLFSSH_API void* wolfSSH_GetIOReadCtx(WOLFSSH*);
+WOLFSSH_API void* wolfSSH_GetIOWriteCtx(WOLFSSH*);
+
+/* User Authentication callback */
+typedef struct WS_UserAuthData_Password {
+    byte* password;
+    word32 passwordSz;
+    /* The following are present for future use. */
+    byte hasNewPassword;
+    byte* newPassword;
+    word32 newPasswordSz;
+} WS_UserAuthData_Password;
+
+typedef struct WS_UserAuthData_PublicKey {
+    byte* dataToSign;
+    byte* publicKeyType;
+    word32 publicKeyTypeSz;
+    byte* publicKey;
+    word32 publicKeySz;
+    byte hasSignature;
+    byte* signature;
+    word32 signatureSz;
+} WS_UserAuthData_PublicKey;
+
+typedef struct WS_UserAuthData {
+    byte type;
+    byte* username;
+    word32 usernameSz;
+    byte* serviceName;
+    word32 serviceNameSz;
+    byte* authName;
+    word32 authNameSz;
+    union {
+        WS_UserAuthData_Password password;
+        WS_UserAuthData_PublicKey publicKey;
+    } sf;
+} WS_UserAuthData;
+
+typedef int (*WS_CallbackUserAuth)(byte, WS_UserAuthData*, void*);
+WOLFSSH_API void wolfSSH_SetUserAuth(WOLFSSH_CTX*, WS_CallbackUserAuth);
+WOLFSSH_API void wolfSSH_SetUserAuthCtx(WOLFSSH*, void*);
+WOLFSSH_API void* wolfSSH_GetUserAuthCtx(WOLFSSH*);
+
+WOLFSSH_API int wolfSSH_SetUsername(WOLFSSH*, const char*);
+
+WOLFSSH_API int wolfSSH_CTX_SetBanner(WOLFSSH_CTX*, const char*);
+WOLFSSH_API int wolfSSH_CTX_UsePrivateKey_buffer(WOLFSSH_CTX*,
+                                                 const byte*, word32, int);
+
+WOLFSSH_API int wolfSSH_accept(WOLFSSH*);
+WOLFSSH_API int wolfSSH_connect(WOLFSSH*);
+WOLFSSH_API int wolfSSH_shutdown(WOLFSSH*);
+WOLFSSH_API int wolfSSH_stream_read(WOLFSSH*, byte*, word32);
+WOLFSSH_API int wolfSSH_stream_send(WOLFSSH*, byte*, word32);
+WOLFSSH_API int wolfSSH_TriggerKeyExchange(WOLFSSH*);
+
+WOLFSSH_API void wolfSSH_GetStats(WOLFSSH*,
+                                  word32*, word32*, word32*, word32*);
+
+WOLFSSH_API int wolfSSH_KDF(byte, byte, byte*, word32, const byte*, word32,
+                            const byte*, word32, const byte*, word32);
+
+
+enum WS_HighwaterSide {
+    WOLFSSH_HWSIDE_TRANSMIT,
+    WOLFSSH_HWSIDE_RECEIVE
+};
+
+
+enum WS_EndpointTypes {
+    WOLFSSH_ENDPOINT_SERVER,
+    WOLFSSH_ENDPOINT_CLIENT
+};
+
+
+enum WS_FormatTypes {
+    WOLFSSH_FORMAT_ASN1,
+    WOLFSSH_FORMAT_PEM,
+    WOLFSSH_FORMAT_RAW
+};
+
+
+enum WS_UserAuthTypes {
+    WOLFSSH_USERAUTH_PASSWORD,
+    WOLFSSH_USERAUTH_PUBLICKEY
+};
+
+
+enum WS_UserAuthResults {
+    WOLFSSH_USERAUTH_SUCCESS,
+    WOLFSSH_USERAUTH_FAILURE,
+    WOLFSSH_USERAUTH_INVALID_AUTHTYPE,
+    WOLFSSH_USERAUTH_INVALID_USER,
+    WOLFSSH_USERAUTH_INVALID_PASSWORD,
+    WOLFSSH_USERAUTH_INVALID_PUBLICKEY
+};
+
+
+enum WS_DisconnectReasonCodes {
+    WOLFSSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT    = 1,
+    WOLFSSH_DISCONNECT_PROTOCOL_ERROR                 = 2,
+    WOLFSSH_DISCONNECT_KEY_EXCHANGE_FAILED            = 3,
+    WOLFSSH_DISCONNECT_RESERVED                       = 4,
+    WOLFSSH_DISCONNECT_MAC_ERROR                      = 5,
+    WOLFSSH_DISCONNECT_COMPRESSION_ERROR              = 6,
+    WOLFSSH_DISCONNECT_SERVICE_NOT_AVAILABLE          = 7,
+    WOLFSSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED = 8,
+    WOLFSSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE        = 9,
+    WOLFSSH_DISCONNECT_CONNECTION_LOST                = 10,
+    WOLFSSH_DISCONNECT_BY_APPLICATION                 = 11,
+    WOLFSSH_DISCONNECT_TOO_MANY_CONNECTIONS           = 12,
+    WOLFSSH_DISCONNECT_AUTH_CANCELLED_BY_USER         = 13,
+    WOLFSSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 14,
+    WOLFSSH_DISCONNECT_ILLEGAL_USER_NAME              = 15
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+