Annotation of embedaddon/axTLS/bindings/vbnet/axTLSvb.vb, revision 1.1.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>