mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-22 21:23:07 +03:00
git-svn-id: svn://svn.code.sf.net/p/axtls/code/trunk@56 9a5d90b5-6617-0410-8a86-bb477d3ed2e3
180 lines
5.7 KiB
VB.net
180 lines
5.7 KiB
VB.net
'
|
|
' Copyright(C) 2006 Cameron Rich
|
|
'
|
|
' This program 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 2.1 of the License, or
|
|
' (at your option As ) any later version.
|
|
'
|
|
' This program 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 Lesser General Public License for more details.
|
|
'
|
|
' You should have received a copy of the GNU General Public License
|
|
' along with this program if not, write to the Free Software
|
|
' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
'
|
|
|
|
'
|
|
' A wrapper around the unmanaged Integererface to give a semi-decent VB.NET API
|
|
'
|
|
|
|
Imports System
|
|
Imports System.Runtime.InteropServices
|
|
Imports System.Net.Sockets
|
|
Imports axTLSvb
|
|
|
|
Namespace axTLSvb
|
|
Public Class SSL
|
|
Public m_ssl As IntPtr
|
|
|
|
Public Sub New(ByRef ip As IntPtr)
|
|
m_ssl = ip
|
|
End Sub
|
|
|
|
Public Sub Dispose()
|
|
axtls.ssl_free(m_ssl)
|
|
End Sub
|
|
|
|
Public Function HandshakeStatus() As Integer
|
|
Return axtls.ssl_handshake_status(m_ssl)
|
|
End Function
|
|
|
|
Public Function GetCipherId() As Byte
|
|
Return axtls.ssl_get_cipher_id(m_ssl)
|
|
End Function
|
|
|
|
Public Function GetSessionId() As Byte()
|
|
Dim result(axtls.SSL_SESSION_ID_SIZE) As Byte
|
|
Dim ptr As IntPtr = axtls.ssl_get_session_id(m_ssl)
|
|
Marshal.Copy(ptr, result, 0, axtls.SSL_SESSION_ID_SIZE)
|
|
Return result
|
|
End Function
|
|
|
|
Public Function GetCertificateDN(component As Integer) As String
|
|
Return axtls.ssl_get_cert_dn(m_ssl, component)
|
|
End Function
|
|
End Class
|
|
|
|
Public Class SSLUtil
|
|
Private dummy As Integer ' need something here
|
|
|
|
Public Shared Function BuildMode() As Integer
|
|
Return axtls.ssl_get_config(axtls.SSL_BUILD_MODE)
|
|
End Function
|
|
|
|
Public Shared Function MaxCerts() As Integer
|
|
Return axtls.ssl_get_config(axtls.SSL_MAX_CERT_CFG_OFFSET)
|
|
End Function
|
|
|
|
Public Shared Function MaxCACerts() As Integer
|
|
Return axtls.ssl_get_config(axtls.SSL_MAX_CA_CERT_CFG_OFFSET)
|
|
End Function
|
|
|
|
Public Shared Function HasPEM() As Boolean
|
|
If axtls.ssl_get_config(axtls.SSL_HAS_PEM) > 0 Then
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
End Function
|
|
|
|
Public Shared Sub DisplayError(ByVal error_code As Integer)
|
|
axtls.ssl_display_error(error_code)
|
|
End Sub
|
|
|
|
Public Shared Function Version() As String
|
|
Return axtls.ssl_version()
|
|
End Function
|
|
End Class
|
|
|
|
Public Class SSLCTX
|
|
Protected m_ctx As IntPtr
|
|
|
|
Protected Sub New(ByVal options As Integer, _
|
|
ByVal num_sessions As Integer)
|
|
m_ctx = axtls.ssl_ctx_new(options, num_sessions)
|
|
End Sub
|
|
|
|
Public Sub Dispose()
|
|
axtls.ssl_ctx_free(m_ctx)
|
|
End Sub
|
|
|
|
Public Function Read(ByVal ssl As SSL, ByRef in_data As Byte()) As Integer
|
|
Dim ptr As IntPtr = IntPtr.Zero
|
|
Dim ret as Integer = axtls.ssl_read(ssl.m_ssl, ptr)
|
|
|
|
If ret > axtls.SSL_OK Then
|
|
ReDim in_data(ret)
|
|
Marshal.Copy(ptr, in_data, 0, ret)
|
|
Else
|
|
in_data = Nothing
|
|
End If
|
|
|
|
Return ret
|
|
End Function
|
|
|
|
Public Function Write(ByVal ssl As SSL, _
|
|
ByVal data As Byte(), len As Integer) As Integer
|
|
Return axtls.ssl_write(ssl.m_ssl, data, len)
|
|
End Function
|
|
|
|
Public Function Find(ByVal s As Socket) As SSL
|
|
Dim client_fd As Integer = s.Handle.ToInt32()
|
|
Return New SSL(axtls.ssl_find(m_ctx, client_fd))
|
|
End Function
|
|
|
|
Public Function VerifyCert(ByVal ssl As SSL) As Integer
|
|
Return axtls.ssl_verify_cert(ssl.m_ssl)
|
|
End Function
|
|
|
|
Public Function Renegotiate(ByVal ssl As SSL) As Integer
|
|
Return axtls.ssl_renegotiate(ssl.m_ssl)
|
|
End Function
|
|
|
|
Public Function ObjLoad(ByVal obj_type As Integer, _
|
|
ByVal filename As String, _
|
|
password As String) As Integer
|
|
Return axtls.ssl_obj_load(m_ctx, obj_type, filename, password)
|
|
End Function
|
|
|
|
Public Function ObjLoad(ByVal obj_type As Integer, _
|
|
ByVal data As Byte(), ByVal len As Integer, _
|
|
password As String) As Integer
|
|
Return axtls.ssl_obj_memory_load( _
|
|
m_ctx, obj_type, data, len, password)
|
|
End Function
|
|
End Class
|
|
|
|
Public Class SSLServer
|
|
Inherits SSLCTX
|
|
|
|
Public Sub New(ByVal options As Integer, _
|
|
ByVal num_sessions As Integer)
|
|
MyBase.New(options, num_sessions)
|
|
End Sub
|
|
|
|
Public Function Connect(ByVal s As Socket) As SSL
|
|
Dim client_fd As Integer = s.Handle.ToInt32()
|
|
Return New SSL(axtls.ssl_server_new(m_ctx, client_fd))
|
|
End Function
|
|
End Class
|
|
|
|
Public Class SSLClient
|
|
Inherits SSLCTX
|
|
|
|
Public Sub New(ByVal options As Integer, _
|
|
ByVal num_sessions As Integer)
|
|
MyBase.New(options, num_sessions)
|
|
End Sub
|
|
|
|
Public Function Connect(ByVal s As Socket, _
|
|
ByVal session_id As Byte()) As SSL
|
|
Dim client_fd As Integer = s.Handle.ToInt32()
|
|
Return New SSL( axtls.ssl_client_new(m_ctx, client_fd, session_id))
|
|
End Function
|
|
|
|
End Class
|
|
End Namespace
|