Annotation of embedaddon/axTLS/bindings/vbnet/axTLSvb.vb, revision 1.1
1.1 ! misho 1: '
! 2: ' Copyright (c) 2007, Cameron Rich
! 3: '
! 4: ' All rights reserved.
! 5: '
! 6: ' Redistribution and use in source and binary forms, with or without
! 7: ' modification, are permitted provided that the following conditions are met:
! 8: '
! 9: ' * Redistributions of source code must retain the above copyright notice,
! 10: ' this list of conditions and the following disclaimer.
! 11: ' * Redistributions in binary form must reproduce the above copyright
! 12: ' notice, this list of conditions and the following disclaimer in the
! 13: ' documentation and/or other materials provided with the distribution.
! 14: ' * Neither the name of the axTLS project nor the names of its
! 15: ' contributors may be used to endorse or promote products derived
! 16: ' from this software without specific prior written permission.
! 17: '
! 18: ' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! 19: ' "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
! 20: ' LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
! 21: ' A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
! 22: ' CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
! 23: ' SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
! 24: ' TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
! 25: ' DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
! 26: ' OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
! 27: ' NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
! 28: ' THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 29: '
! 30:
! 31: '
! 32: ' A wrapper around the unmanaged Integererface to give a semi-decent VB.NET API
! 33: '
! 34:
! 35: Imports System
! 36: Imports System.Runtime.InteropServices
! 37: Imports System.Net.Sockets
! 38: Imports axTLSvb
! 39:
! 40: Namespace axTLSvb
! 41: Public Class SSL
! 42: Public m_ssl As IntPtr
! 43:
! 44: Public Sub New(ByRef ip As IntPtr)
! 45: m_ssl = ip
! 46: End Sub
! 47:
! 48: Public Sub Dispose()
! 49: axtls.ssl_free(m_ssl)
! 50: End Sub
! 51:
! 52: Public Function HandshakeStatus() As Integer
! 53: Return axtls.ssl_handshake_status(m_ssl)
! 54: End Function
! 55:
! 56: Public Function GetCipherId() As Byte
! 57: Return axtls.ssl_get_cipher_id(m_ssl)
! 58: End Function
! 59:
! 60: Public Function GetSessionId() As Byte()
! 61: Dim ptr As IntPtr = axtls.ssl_get_session_id(m_ssl)
! 62: Dim sess_id_size As Integer = axtls.ssl_get_session_id_size(m_ssl)
! 63: Dim result(sess_id_size-1) As Byte
! 64: Marshal.Copy(ptr, result, 0, sess_id_size)
! 65: Return result
! 66: End Function
! 67:
! 68: Public Function GetCertificateDN(component As Integer) As String
! 69: Return axtls.ssl_get_cert_dn(m_ssl, component)
! 70: End Function
! 71: End Class
! 72:
! 73: Public Class SSLUtil
! 74: Private dummy As Integer ' need something here
! 75:
! 76: Public Shared Function BuildMode() As Integer
! 77: Return axtls.ssl_get_config(axtls.SSL_BUILD_MODE)
! 78: End Function
! 79:
! 80: Public Shared Function MaxCerts() As Integer
! 81: Return axtls.ssl_get_config(axtls.SSL_MAX_CERT_CFG_OFFSET)
! 82: End Function
! 83:
! 84: Public Shared Function MaxCACerts() As Integer
! 85: Return axtls.ssl_get_config(axtls.SSL_MAX_CA_CERT_CFG_OFFSET)
! 86: End Function
! 87:
! 88: Public Shared Function HasPEM() As Boolean
! 89: If axtls.ssl_get_config(axtls.SSL_HAS_PEM) > 0 Then
! 90: Return True
! 91: Else
! 92: Return False
! 93: End If
! 94: End Function
! 95:
! 96: Public Shared Sub DisplayError(ByVal error_code As Integer)
! 97: axtls.ssl_display_error(error_code)
! 98: End Sub
! 99:
! 100: Public Shared Function Version() As String
! 101: Return axtls.ssl_version()
! 102: End Function
! 103: End Class
! 104:
! 105: Public Class SSLCTX
! 106: Protected m_ctx As IntPtr
! 107:
! 108: Protected Sub New(ByVal options As Integer, _
! 109: ByVal num_sessions As Integer)
! 110: m_ctx = axtls.ssl_ctx_new(options, num_sessions)
! 111: End Sub
! 112:
! 113: Public Sub Dispose()
! 114: axtls.ssl_ctx_free(m_ctx)
! 115: End Sub
! 116:
! 117: Public Function Read(ByVal ssl As SSL, ByRef in_data As Byte()) As Integer
! 118: Dim ptr As IntPtr = IntPtr.Zero
! 119: Dim ret as Integer = axtls.ssl_read(ssl.m_ssl, ptr)
! 120:
! 121: If ret > axtls.SSL_OK Then
! 122: ReDim in_data(ret)
! 123: Marshal.Copy(ptr, in_data, 0, ret)
! 124: Else
! 125: in_data = Nothing
! 126: End If
! 127:
! 128: Return ret
! 129: End Function
! 130:
! 131: Public Function Write(ByVal ssl As SSL, _
! 132: ByVal data As Byte(), len As Integer) As Integer
! 133: Return axtls.ssl_write(ssl.m_ssl, data, len)
! 134: End Function
! 135:
! 136: Public Function Find(ByVal s As Socket) As SSL
! 137: Dim client_fd As Integer = s.Handle.ToInt32()
! 138: Return New SSL(axtls.ssl_find(m_ctx, client_fd))
! 139: End Function
! 140:
! 141: Public Function VerifyCert(ByVal ssl As SSL) As Integer
! 142: Return axtls.ssl_verify_cert(ssl.m_ssl)
! 143: End Function
! 144:
! 145: Public Function Renegotiate(ByVal ssl As SSL) As Integer
! 146: Return axtls.ssl_renegotiate(ssl.m_ssl)
! 147: End Function
! 148:
! 149: Public Function ObjLoad(ByVal obj_type As Integer, _
! 150: ByVal filename As String, _
! 151: password As String) As Integer
! 152: Return axtls.ssl_obj_load(m_ctx, obj_type, filename, password)
! 153: End Function
! 154:
! 155: Public Function ObjLoad(ByVal obj_type As Integer, _
! 156: ByVal data As Byte(), ByVal len As Integer, _
! 157: password As String) As Integer
! 158: Return axtls.ssl_obj_memory_load( _
! 159: m_ctx, obj_type, data, len, password)
! 160: End Function
! 161: End Class
! 162:
! 163: Public Class SSLServer
! 164: Inherits SSLCTX
! 165:
! 166: Public Sub New(ByVal options As Integer, _
! 167: ByVal num_sessions As Integer)
! 168: MyBase.New(options, num_sessions)
! 169: End Sub
! 170:
! 171: Public Function Connect(ByVal s As Socket) As SSL
! 172: Dim client_fd As Integer = s.Handle.ToInt32()
! 173: Return New SSL(axtls.ssl_server_new(m_ctx, client_fd))
! 174: End Function
! 175: End Class
! 176:
! 177: Public Class SSLClient
! 178: Inherits SSLCTX
! 179:
! 180: Public Sub New(ByVal options As Integer, _
! 181: ByVal num_sessions As Integer)
! 182: MyBase.New(options, num_sessions)
! 183: End Sub
! 184:
! 185: Public Function Connect(ByVal s As Socket, _
! 186: ByVal session_id As Byte()) As SSL
! 187: Dim client_fd As Integer = s.Handle.ToInt32()
! 188: Dim sess_id_size As Byte
! 189: If session_id is Nothing Then
! 190: sess_id_size = 0
! 191: Else
! 192: sess_id_size = session_id.Length
! 193: End If
! 194:
! 195: Return New SSL(axtls.ssl_client_new(m_ctx, client_fd, session_id, _
! 196: sess_id_size))
! 197: End Function
! 198:
! 199: End Class
! 200: End Namespace
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>