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>