123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- '
- ' Copyright (c) 2007, Cameron Rich
- '
- ' All rights reserved.
- '
- ' Redistribution and use in source and binary forms, with or without
- ' modification, are permitted provided that the following conditions are met:
- '
- ' * Redistributions of source code must retain the above copyright notice,
- ' this list of conditions and the following disclaimer.
- ' * Redistributions in binary form must reproduce the above copyright
- ' notice, this list of conditions and the following disclaimer in the
- ' documentation and/or other materials provided with the distribution.
- ' * Neither the name of the axTLS project nor the names of its
- ' contributors may be used to endorse or promote products derived
- ' from this software without specific prior written permission.
- '
- ' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- ' "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- ' LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- ' A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- ' CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- ' SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- ' TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- ' DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- ' OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- ' NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- ' THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- '
- '
- ' 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 ptr As IntPtr = axtls.ssl_get_session_id(m_ssl)
- Dim sess_id_size As Integer = axtls.ssl_get_session_id_size(m_ssl)
- Dim result(sess_id_size-1) As Byte
- Marshal.Copy(ptr, result, 0, sess_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()
- Dim sess_id_size As Byte
- If session_id is Nothing Then
- sess_id_size = 0
- Else
- sess_id_size = session_id.Length
- End If
- Return New SSL(axtls.ssl_client_new(m_ctx, client_fd, session_id, _
- sess_id_size))
- End Function
- End Class
- End Namespace
|