summaryrefslogtreecommitdiffhomepage
path: root/libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb
diff options
context:
space:
mode:
Diffstat (limited to 'libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb')
-rw-r--r--libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb702
1 files changed, 702 insertions, 0 deletions
diff --git a/libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb b/libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb
new file mode 100644
index 000000000..1b423c865
--- /dev/null
+++ b/libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb
@@ -0,0 +1,702 @@
+'
+' 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.
+'
+
+'
+' Demonstrate the use of the axTLS library in VB.NET with a set of
+' command-line parameters similar to openssl. In fact, openssl clients
+' should be able to communicate with axTLS servers and visa-versa.
+'
+' This code has various bits enabled depending on the configuration. To enable
+' the most interesting version, compile with the 'full mode' enabled.
+'
+' To see what options you have, run the following:
+' > axssl.vbnet.exe s_server -?
+' > axssl.vbnet.exe s_client -?
+'
+' The axtls shared library must be in the same directory or be found
+' by the OS.
+'
+
+Imports System
+Imports System.Net
+Imports System.Net.Sockets
+Imports Microsoft.VisualBasic
+Imports axTLSvb
+
+Public Class axssl
+ '
+ ' do_server()
+ '
+ Public Sub do_server(ByVal build_mode As Integer, _
+ ByVal args() As String)
+ Dim i As Integer = 1
+ Dim port As Integer = 4433
+ Dim options As Integer = axtls.SSL_DISPLAY_CERTS
+ Dim quiet As Boolean = False
+ Dim password As String = Nothing
+ Dim private_key_file As String = Nothing
+
+ ' organise the cert/ca_cert lists
+ Dim cert_size As Integer = SSLUtil.MaxCerts()
+ Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
+ Dim cert(cert_size) As String
+ Dim ca_cert(ca_cert_size) As String
+ Dim cert_index As Integer = 0
+ Dim ca_cert_index As Integer = 0
+
+ While i < args.Length
+ If args(i) = "-accept" Then
+ If i >= args.Length-1
+ print_server_options(build_mode, args(i))
+ End If
+
+ i += 1
+ port = Int32.Parse(args(i))
+ ElseIf args(i) = "-quiet"
+ quiet = True
+ options = options And Not axtls.SSL_DISPLAY_CERTS
+ ElseIf build_mode >= axtls.SSL_BUILD_SERVER_ONLY
+ If args(i) = "-cert"
+ If i >= args.Length-1 Or cert_index >= cert_size
+ print_server_options(build_mode, args(i))
+ End If
+
+ i += 1
+ cert(cert_index) = args(i)
+ cert_index += 1
+ ElseIf args(i) = "-key"
+ If i >= args.Length-1
+ print_server_options(build_mode, args(i))
+ End If
+
+ i += 1
+ private_key_file = args(i)
+ options = options Or axtls.SSL_NO_DEFAULT_KEY
+ ElseIf args(i) = "-pass"
+ If i >= args.Length-1
+ print_server_options(build_mode, args(i))
+ End If
+
+ i += 1
+ password = args(i)
+ ElseIf build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION
+ If args(i) = "-verify" Then
+ options = options Or axtls.SSL_CLIENT_AUTHENTICATION
+ ElseIf args(i) = "-CAfile"
+ If i >= args.Length-1 Or _
+ ca_cert_index >= ca_cert_size Then
+ print_server_options(build_mode, args(i))
+ End If
+
+ i += 1
+ ca_cert(ca_cert_index) = args(i)
+ ca_cert_index += 1
+ ElseIf build_mode = axtls.SSL_BUILD_FULL_MODE
+ If args(i) = "-debug" Then
+ options = options Or axtls.SSL_DISPLAY_BYTES
+ ElseIf args(i) = "-state"
+ options = options Or axtls.SSL_DISPLAY_STATES
+ ElseIf args(i) = "-show-rsa"
+ options = options Or axtls.SSL_DISPLAY_RSA
+ Else
+ print_server_options(build_mode, args(i))
+ End If
+ Else
+ print_server_options(build_mode, args(i))
+ End If
+ Else
+ print_server_options(build_mode, args(i))
+ End If
+ End If
+
+ i += 1
+ End While
+
+ ' Create socket for incoming connections
+ Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, port)
+ Dim server_sock As TcpListener = New TcpListener(ep)
+ server_sock.Start()
+
+ '*********************************************************************
+ ' This is where the interesting stuff happens. Up until now we've
+ ' just been setting up sockets etc. Now we do the SSL handshake.
+ '*********************************************************************/
+ Dim ssl_ctx As SSLServer = New SSLServer(options, _
+ axtls.SSL_DEFAULT_SVR_SESS)
+
+ If ssl_ctx Is Nothing Then
+ Console.Error.WriteLine("Error: Server context is invalid")
+ Environment.Exit(1)
+ End If
+
+ If private_key_file <> Nothing Then
+ Dim obj_type As Integer = axtls.SSL_OBJ_RSA_KEY
+
+ If private_key_file.EndsWith(".p8") Then
+ obj_type = axtls.SSL_OBJ_PKCS8
+ Else If (private_key_file.EndsWith(".p12"))
+ obj_type = axtls.SSL_OBJ_PKCS12
+ End If
+
+ If ssl_ctx.ObjLoad(obj_type, private_key_file, _
+ password) <> axtls.SSL_OK Then
+ Console.Error.WriteLine("Error: Private key '" & _
+ private_key_file & "' is undefined.")
+ Environment.Exit(1)
+ End If
+ End If
+
+ For i = 0 To cert_index-1
+ If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, _
+ cert(i), Nothing) <> axtls.SSL_OK Then
+ Console.WriteLine("Certificate '" & cert(i) & _
+ "' is undefined.")
+ Environment.Exit(1)
+ End If
+ Next
+
+ For i = 0 To ca_cert_index-1
+ If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, _
+ ca_cert(i), Nothing) <> axtls.SSL_OK Then
+ Console.WriteLine("Certificate '" & ca_cert(i) & _
+ "' is undefined.")
+ Environment.Exit(1)
+ End If
+ Next
+
+ Dim buf As Byte() = Nothing
+ Dim res As Integer
+ Dim ssl As SSL
+
+ While 1
+ If Not quiet Then
+ Console.WriteLine("ACCEPT")
+ End If
+
+ Dim client_sock As Socket = server_sock.AcceptSocket()
+
+ ssl = ssl_ctx.Connect(client_sock)
+
+ ' do the actual SSL handshake
+ While 1
+ res = ssl_ctx.Read(ssl, buf)
+ If res <> axtls.SSL_OK Then
+ Exit While
+ End If
+
+ ' check when the connection has been established
+ If ssl.HandshakeStatus() = axtls.SSL_OK
+ Exit While
+ End If
+
+ ' could do something else here
+ End While
+
+ If res = axtls.SSL_OK Then ' connection established and ok
+ If Not quiet
+ display_session_id(ssl)
+ display_cipher(ssl)
+ End If
+
+ ' now read (and display) whatever the client sends us
+ While 1
+ ' keep reading until we get something interesting
+ While 1
+ res = ssl_ctx.Read(ssl, buf)
+ If res <> axtls.SSL_OK Then
+ Exit While
+ End If
+
+ ' could do something else here
+ End While
+
+ If res < axtls.SSL_OK
+ If Not quiet
+ Console.WriteLine("CONNECTION CLOSED")
+ End If
+
+ Exit While
+ End If
+
+ ' convert to String
+ Dim str(res) As Char
+ For i = 0 To res-1
+ str(i) = Chr(buf(i))
+ Next
+
+ Console.Write(str)
+ End While
+ ElseIf Not quiet
+ SSLUtil.DisplayError(res)
+ End If
+
+ ' client was disconnected or the handshake failed. */
+ ssl.Dispose()
+ client_sock.Close()
+ End While
+
+ ssl_ctx.Dispose()
+ End Sub
+
+ '
+ ' do_client()
+ '
+ Public Sub do_client(ByVal build_mode As Integer, _
+ ByVal args() As String)
+
+ If build_mode < axtls.SSL_BUILD_ENABLE_CLIENT Then
+ print_client_options(build_mode, args(1))
+ End If
+
+ Dim i As Integer = 1
+ Dim res As Integer
+ Dim port As Integer = 4433
+ Dim quiet As Boolean = False
+ Dim password As String = Nothing
+ Dim reconnect As Integer = 0
+ Dim private_key_file As String = Nothing
+ Dim hostname As String = "127.0.0.1"
+
+ ' organise the cert/ca_cert lists
+ Dim ssl As SSL = Nothing
+ Dim cert_size As Integer = SSLUtil.MaxCerts()
+ Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
+ Dim cert(cert_size) As String
+ Dim ca_cert(ca_cert_size) As String
+ Dim cert_index As Integer = 0
+ Dim ca_cert_index As Integer = 0
+
+ Dim options As Integer = _
+ axtls.SSL_SERVER_VERIFY_LATER Or axtls.SSL_DISPLAY_CERTS
+ Dim session_id As Byte() = Nothing
+
+ While i < args.Length
+ If args(i) = "-connect" Then
+ Dim host_port As String
+
+ If i >= args.Length-1
+ print_client_options(build_mode, args(i))
+ End If
+
+ i += 1
+ host_port = args(i)
+
+ Dim index_colon As Integer = host_port.IndexOf(":"C)
+ If index_colon < 0 Then
+ print_client_options(build_mode, args(i))
+ End If
+
+ hostname = New String(host_port.ToCharArray(), _
+ 0, index_colon)
+ port = Int32.Parse(New String(host_port.ToCharArray(), _
+ index_colon+1, host_port.Length-index_colon-1))
+ ElseIf args(i) = "-cert"
+ If i >= args.Length-1 Or cert_index >= cert_size Then
+ print_client_options(build_mode, args(i))
+ End If
+
+ i += 1
+ cert(cert_index) = args(i)
+ cert_index += 1
+ ElseIf args(i) = "-key"
+ If i >= args.Length-1
+ print_client_options(build_mode, args(i))
+ End If
+
+ i += 1
+ private_key_file = args(i)
+ options = options Or axtls.SSL_NO_DEFAULT_KEY
+ ElseIf args(i) = "-CAfile"
+ If i >= args.Length-1 Or ca_cert_index >= ca_cert_size
+ print_client_options(build_mode, args(i))
+ End If
+
+ i += 1
+ ca_cert(ca_cert_index) = args(i)
+ ca_cert_index += 1
+ ElseIf args(i) = "-verify"
+ options = options And Not axtls.SSL_SERVER_VERIFY_LATER
+ ElseIf args(i) = "-reconnect"
+ reconnect = 4
+ ElseIf args(i) = "-quiet"
+ quiet = True
+ options = options And Not axtls.SSL_DISPLAY_CERTS
+ ElseIf args(i) = "-pass"
+ If i >= args.Length-1
+ print_client_options(build_mode, args(i))
+ End If
+
+ i += 1
+ password = args(i)
+ ElseIf build_mode = axtls.SSL_BUILD_FULL_MODE
+ If args(i) = "-debug" Then
+ options = options Or axtls.SSL_DISPLAY_BYTES
+ ElseIf args(i) = "-state"
+ options = options Or axtls.SSL_DISPLAY_STATES
+ ElseIf args(i) = "-show-rsa"
+ options = options Or axtls.SSL_DISPLAY_RSA
+ Else
+ print_client_options(build_mode, args(i))
+ End If
+ Else ' don't know what this is
+ print_client_options(build_mode, args(i))
+ End If
+
+ i += 1
+ End While
+
+ 'Dim hostInfo As IPHostEntry = Dns.Resolve(hostname)
+ Dim hostInfo As IPHostEntry = Dns.GetHostEntry(hostname)
+ Dim addresses As IPAddress() = hostInfo.AddressList
+ Dim ep As IPEndPoint = New IPEndPoint(addresses(0), port)
+ Dim client_sock As Socket = New Socket(AddressFamily.InterNetwork, _
+ SocketType.Stream, ProtocolType.Tcp)
+ client_sock.Connect(ep)
+
+ If Not client_sock.Connected Then
+ Console.WriteLine("could not connect")
+ Environment.Exit(1)
+ End If
+
+ If Not quiet Then
+ Console.WriteLine("CONNECTED")
+ End If
+
+ '*********************************************************************
+ ' This is where the interesting stuff happens. Up until now we've
+ ' just been setting up sockets etc. Now we do the SSL handshake.
+ '*********************************************************************/
+ Dim ssl_ctx As SSLClient = New SSLClient(options, _
+ axtls.SSL_DEFAULT_CLNT_SESS)
+
+ If ssl_ctx Is Nothing Then
+ Console.Error.WriteLine("Error: Client context is invalid")
+ Environment.Exit(1)
+ End If
+
+ If private_key_file <> Nothing Then
+ Dim obj_type As Integer = axtls.SSL_OBJ_RSA_KEY
+
+ If private_key_file.EndsWith(".p8") Then
+ obj_type = axtls.SSL_OBJ_PKCS8
+ Else If (private_key_file.EndsWith(".p12"))
+ obj_type = axtls.SSL_OBJ_PKCS12
+ End If
+
+ If ssl_ctx.ObjLoad(obj_type, private_key_file, _
+ password) <> axtls.SSL_OK Then
+ Console.Error.WriteLine("Error: Private key '" & _
+ private_key_file & "' is undefined.")
+ Environment.Exit(1)
+ End If
+ End If
+
+ For i = 0 To cert_index-1
+ If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, _
+ cert(i), Nothing) <> axtls.SSL_OK Then
+ Console.WriteLine("Certificate '" & cert(i) & _
+ "' is undefined.")
+ Environment.Exit(1)
+ End If
+ Next
+
+ For i = 0 To ca_cert_index-1
+ If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, _
+ ca_cert(i), Nothing) <> axtls.SSL_OK Then
+ Console.WriteLine("Certificate '" & ca_cert(i) & _
+ "' is undefined.")
+ Environment.Exit(1)
+ End If
+ Next
+
+ ' Try session resumption?
+ If reconnect > 0 Then
+ While reconnect > 0
+ reconnect -= 1
+ ssl = ssl_ctx.Connect(client_sock, session_id)
+
+ res = ssl.HandshakeStatus()
+ If res <> axtls.SSL_OK Then
+ If Not quiet Then
+ SSLUtil.DisplayError(res)
+ End If
+
+ ssl.Dispose()
+ Environment.Exit(1)
+ End If
+
+ display_session_id(ssl)
+ session_id = ssl.GetSessionId()
+
+ If reconnect > 0 Then
+ ssl.Dispose()
+ client_sock.Close()
+
+ ' and reconnect
+ client_sock = New Socket(AddressFamily.InterNetwork, _
+ SocketType.Stream, ProtocolType.Tcp)
+ client_sock.Connect(ep)
+ End If
+ End While
+ Else
+ ssl = ssl_ctx.Connect(client_sock, Nothing)
+ End If
+
+ ' check the return status
+ res = ssl.HandshakeStatus()
+ If res <> axtls.SSL_OK Then
+ If Not quiet Then
+ SSLUtil.DisplayError(res)
+ End If
+
+ Environment.Exit(1)
+ End If
+
+ If Not quiet Then
+ Dim common_name As String = _
+ ssl.GetCertificateDN(axtls.SSL_X509_CERT_COMMON_NAME)
+
+ If common_name <> Nothing
+ Console.WriteLine("Common Name:" & _
+ ControlChars.Tab & ControlChars.Tab & _
+ ControlChars.Tab & common_name)
+ End If
+
+ display_session_id(ssl)
+ display_cipher(ssl)
+ End If
+
+ While (1)
+ Dim user_input As String = Console.ReadLine()
+
+ If user_input = Nothing Then
+ Exit While
+ End If
+
+ Dim buf(user_input.Length+1) As Byte
+ buf(buf.Length-2) = Asc(ControlChars.Lf) ' add the carriage return
+ buf(buf.Length-1) = 0 ' null terminate
+
+ For i = 0 To user_input.Length-1
+ buf(i) = Asc(user_input.Chars(i))
+ Next
+
+ res = ssl_ctx.Write(ssl, buf, buf.Length)
+ If res < axtls.SSL_OK Then
+ If Not quiet Then
+ SSLUtil.DisplayError(res)
+ End If
+
+ Exit While
+ End If
+ End While
+
+ ssl_ctx.Dispose()
+ End Sub
+
+ '
+ ' Display what cipher we are using
+ '
+ Private Sub display_cipher(ByVal ssl As SSL)
+ Console.Write("CIPHER is ")
+
+ Select ssl.GetCipherId()
+ Case axtls.SSL_AES128_SHA
+ Console.WriteLine("AES128-SHA")
+
+ Case axtls.SSL_AES256_SHA
+ Console.WriteLine("AES256-SHA")
+
+ Case axtls.SSL_RC4_128_SHA
+ Console.WriteLine("RC4-SHA")
+
+ Case axtls.SSL_RC4_128_MD5
+ Console.WriteLine("RC4-MD5")
+
+ Case Else
+ Console.WriteLine("Unknown - " & ssl.GetCipherId())
+ End Select
+ End Sub
+
+ '
+ ' Display what session id we have.
+ '
+ Private Sub display_session_id(ByVal ssl As SSL)
+ Dim session_id As Byte() = ssl.GetSessionId()
+
+ If session_id.Length > 0 Then
+ Console.WriteLine("-----BEGIN SSL SESSION PARAMETERS-----")
+ Dim b As Byte
+ For Each b In session_id
+ Console.Write("{0:x02}", b)
+ Next
+
+ Console.WriteLine()
+ Console.WriteLine("-----END SSL SESSION PARAMETERS-----")
+ End If
+ End Sub
+
+ '
+ ' We've had some sort of command-line error. Print out the basic options.
+ '
+ Public Sub print_options(ByVal options As String)
+ Console.WriteLine("axssl: Error: '" & options & _
+ "' is an invalid command.")
+ Console.WriteLine("usage: axssl.vbnet [s_server|s_client|" & _
+ "version] [args ...]")
+ Environment.Exit(1)
+ End Sub
+
+ '
+ ' We've had some sort of command-line error. Print out the server options.
+ '
+ Private Sub print_server_options(ByVal build_mode As Integer, _
+ ByVal options As String)
+ Dim cert_size As Integer = SSLUtil.MaxCerts()
+ Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
+
+ Console.WriteLine("unknown option " & options)
+ Console.WriteLine("usage: s_server [args ...]")
+ Console.WriteLine(" -accept arg" & ControlChars.Tab & _
+ "- port to accept on (default is 4433)")
+ Console.WriteLine(" -quiet" & ControlChars.Tab & ControlChars.Tab & _
+ "- No server output")
+ If build_mode >= axtls.SSL_BUILD_SERVER_ONLY
+ Console.WriteLine(" -cert arg" & ControlChars.Tab & _
+ "- certificate file to add (in addition to default) to chain -")
+ Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
+ " Can repeat up to " & cert_size & " times")
+ Console.WriteLine(" -key arg" & ControlChars.Tab & _
+ "- Private key file to use")
+ Console.WriteLine(" -pass" & ControlChars.Tab & ControlChars.Tab & _
+ "- private key file pass phrase source")
+ End If
+
+ If build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION
+ Console.WriteLine(" -verify" & ControlChars.Tab & _
+ "- turn on peer certificate verification")
+ Console.WriteLine(" -CAfile arg" & ControlChars.Tab & _
+ "- Certificate authority")
+ Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
+ " Can repeat up to " & ca_cert_size & " times")
+ End If
+
+ If build_mode = axtls.SSL_BUILD_FULL_MODE
+ Console.WriteLine(" -debug" & _
+ ControlChars.Tab & ControlChars.Tab & _
+ "- Print more output")
+ Console.WriteLine(" -state" & _
+ ControlChars.Tab & ControlChars.Tab & _
+ "- Show state messages")
+ Console.WriteLine(" -show-rsa" & _
+ ControlChars.Tab & "- Show RSA state")
+ End If
+
+ Environment.Exit(1)
+ End Sub
+
+ '
+ ' We've had some sort of command-line error. Print out the client options.
+ '
+ Private Sub print_client_options(ByVal build_mode As Integer, _
+ ByVal options As String)
+ Dim cert_size As Integer = SSLUtil.MaxCerts()
+ Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
+
+ Console.WriteLine("unknown option " & options)
+
+ If build_mode >= axtls.SSL_BUILD_ENABLE_CLIENT Then
+ Console.WriteLine("usage: s_client [args ...]")
+ Console.WriteLine(" -connect host:port - who to connect to " & _
+ "(default is localhost:4433)")
+ Console.WriteLine(" -verify" & ControlChars.Tab & _
+ "- turn on peer certificate verification")
+ Console.WriteLine(" -cert arg" & ControlChars.Tab & _
+ "- certificate file to use")
+ Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
+ " Can repeat up to " & cert_size & " times")
+ Console.WriteLine(" -key arg" & ControlChars.Tab & _
+ "- Private key file to use")
+ Console.WriteLine(" -CAfile arg" & ControlChars.Tab & _
+ "- Certificate authority")
+ Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
+ " Can repeat up to " & ca_cert_size & " times")
+ Console.WriteLine(" -quiet" & _
+ ControlChars.Tab & ControlChars.Tab & "- No client output")
+ Console.WriteLine(" -pass" & ControlChars.Tab & _
+ ControlChars.Tab & _
+ "- private key file pass phrase source")
+ Console.WriteLine(" -reconnect" & ControlChars.Tab & _
+ "- Drop and re-make the " & _
+ "connection with the same Session-ID")
+
+ If build_mode = axtls.SSL_BUILD_FULL_MODE Then
+ Console.WriteLine(" -debug" & _
+ ControlChars.Tab & ControlChars.Tab & _
+ "- Print more output")
+ Console.WriteLine(" -state" & _
+ ControlChars.Tab & ControlChars.Tab & _
+ "- Show state messages")
+ Console.WriteLine(" -show-rsa" & ControlChars.Tab & _
+ "- Show RSA state")
+ End If
+ Else
+ Console.WriteLine("Change configuration to allow this feature")
+ End If
+
+ Environment.Exit(1)
+ End Sub
+
+End Class
+
+Public Module MyMain
+ Function Main(ByVal args() As String) As Integer
+ Dim runner As axssl = New axssl()
+
+ If args.Length = 1 And args(0) = "version" Then
+ Console.WriteLine("axssl.vbnet " & SSLUtil.Version())
+ Environment.Exit(0)
+ End If
+
+ If args.Length < 1
+ runner.print_options("")
+ ElseIf args(0) <> "s_server" And args(0) <> "s_client"
+ runner.print_options(args(0))
+ End If
+
+ Dim build_mode As Integer = SSLUtil.BuildMode()
+
+ If args(0) = "s_server" Then
+ runner.do_server(build_mode, args)
+ Else
+ runner.do_client(build_mode, args)
+ End If
+ End Function
+End Module