File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / axTLS / bindings / vbnet / axTLSvb.vb
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Sep 28 11:55:55 2012 UTC (12 years, 9 months ago) by misho
Branches: v1_4_8, MAIN
CVS tags: datecs, HEAD
axTLS

    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>