Annotation of embedaddon/axTLS/samples/vbnet/axssl.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: ' Demonstrate the use of the axTLS library in VB.NET with a set of 
        !            33: ' command-line parameters similar to openssl. In fact, openssl clients 
        !            34: ' should be able to communicate with axTLS servers and visa-versa.
        !            35: '
        !            36: ' This code has various bits enabled depending on the configuration. To enable
        !            37: ' the most interesting version, compile with the 'full mode' enabled.
        !            38: '
        !            39: ' To see what options you have, run the following:
        !            40: ' > axssl.vbnet.exe s_server -?
        !            41: ' > axssl.vbnet.exe s_client -?
        !            42: '
        !            43: ' The axtls shared library must be in the same directory or be found 
        !            44: ' by the OS.
        !            45: '
        !            46: 
        !            47: Imports System
        !            48: Imports System.Net
        !            49: Imports System.Net.Sockets
        !            50: Imports Microsoft.VisualBasic
        !            51: Imports axTLSvb
        !            52: 
        !            53: Public Class axssl
        !            54:     ' 
        !            55:     ' do_server()
        !            56:     '
        !            57:     Public Sub do_server(ByVal build_mode As Integer, _
        !            58:                                         ByVal args() As String)
        !            59:         Dim i As Integer = 1
        !            60:         Dim port As Integer = 4433
        !            61:         Dim options As Integer = axtls.SSL_DISPLAY_CERTS
        !            62:         Dim quiet As Boolean = False
        !            63:         Dim password As String = Nothing
        !            64:         Dim private_key_file As String = Nothing
        !            65: 
        !            66:         ' organise the cert/ca_cert lists 
        !            67:         Dim cert_size As Integer = SSLUtil.MaxCerts()
        !            68:         Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
        !            69:         Dim cert(cert_size) As String
        !            70:         Dim ca_cert(ca_cert_size) As String
        !            71:         Dim cert_index As Integer = 0
        !            72:         Dim ca_cert_index As Integer = 0
        !            73: 
        !            74:         While i < args.Length
        !            75:             If args(i) = "-accept" Then
        !            76:                 If i >= args.Length-1
        !            77:                     print_server_options(build_mode, args(i))
        !            78:                 End If
        !            79: 
        !            80:                 i += 1
        !            81:                 port = Int32.Parse(args(i))
        !            82:             ElseIf args(i) = "-quiet"
        !            83:                 quiet = True
        !            84:                 options = options And Not axtls.SSL_DISPLAY_CERTS
        !            85:             ElseIf build_mode >= axtls.SSL_BUILD_SERVER_ONLY
        !            86:                 If args(i) = "-cert"
        !            87:                     If i >= args.Length-1 Or cert_index >= cert_size
        !            88:                         print_server_options(build_mode, args(i))
        !            89:                     End If
        !            90: 
        !            91:                     i += 1
        !            92:                     cert(cert_index) = args(i)
        !            93:                     cert_index += 1
        !            94:                 ElseIf args(i) = "-key"
        !            95:                     If i >= args.Length-1
        !            96:                         print_server_options(build_mode, args(i))
        !            97:                     End If
        !            98: 
        !            99:                     i += 1
        !           100:                     private_key_file = args(i)
        !           101:                     options = options Or axtls.SSL_NO_DEFAULT_KEY
        !           102:                 ElseIf args(i) = "-pass"
        !           103:                     If i >= args.Length-1
        !           104:                         print_server_options(build_mode, args(i))
        !           105:                     End If
        !           106: 
        !           107:                     i += 1
        !           108:                     password = args(i)
        !           109:                 ElseIf build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION
        !           110:                     If args(i) = "-verify" Then
        !           111:                         options = options Or axtls.SSL_CLIENT_AUTHENTICATION
        !           112:                     ElseIf args(i) = "-CAfile"
        !           113:                         If i >= args.Length-1 Or _
        !           114:                                     ca_cert_index >= ca_cert_size Then
        !           115:                             print_server_options(build_mode, args(i))
        !           116:                         End If
        !           117: 
        !           118:                         i += 1
        !           119:                         ca_cert(ca_cert_index) = args(i)
        !           120:                         ca_cert_index += 1
        !           121:                     ElseIf build_mode = axtls.SSL_BUILD_FULL_MODE
        !           122:                         If args(i) = "-debug" Then
        !           123:                             options = options Or axtls.SSL_DISPLAY_BYTES
        !           124:                         ElseIf args(i) = "-state"
        !           125:                             options = options Or axtls.SSL_DISPLAY_STATES
        !           126:                         ElseIf args(i) = "-show-rsa"
        !           127:                             options = options Or axtls.SSL_DISPLAY_RSA
        !           128:                         Else
        !           129:                             print_server_options(build_mode, args(i))
        !           130:                         End If
        !           131:                     Else
        !           132:                         print_server_options(build_mode, args(i))
        !           133:                     End If
        !           134:                 Else
        !           135:                     print_server_options(build_mode, args(i))
        !           136:                 End If
        !           137:             End If
        !           138: 
        !           139:             i += 1
        !           140:         End While
        !           141: 
        !           142:         ' Create socket for incoming connections
        !           143:         Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, port)
        !           144:         Dim server_sock As TcpListener = New TcpListener(ep)
        !           145:         server_sock.Start()      
        !           146: 
        !           147:         '*********************************************************************
        !           148:         ' This is where the interesting stuff happens. Up until now we've
        !           149:         ' just been setting up sockets etc. Now we do the SSL handshake.
        !           150:         '*********************************************************************/
        !           151:         Dim ssl_ctx As SSLServer = New SSLServer(options, _
        !           152:                 axtls.SSL_DEFAULT_SVR_SESS)
        !           153: 
        !           154:         If ssl_ctx Is Nothing Then
        !           155:             Console.Error.WriteLine("Error: Server context is invalid")
        !           156:             Environment.Exit(1)
        !           157:         End If
        !           158: 
        !           159:         If private_key_file <> Nothing Then
        !           160:             Dim obj_type As Integer = axtls.SSL_OBJ_RSA_KEY
        !           161: 
        !           162:             If private_key_file.EndsWith(".p8") Then
        !           163:                 obj_type = axtls.SSL_OBJ_PKCS8
        !           164:             Else If (private_key_file.EndsWith(".p12"))
        !           165:                 obj_type = axtls.SSL_OBJ_PKCS12
        !           166:             End If
        !           167: 
        !           168:             If ssl_ctx.ObjLoad(obj_type, private_key_file, _
        !           169:                                             password) <> axtls.SSL_OK Then
        !           170:                 Console.Error.WriteLine("Error: Private key '" & _
        !           171:                         private_key_file & "' is undefined.")
        !           172:                 Environment.Exit(1)
        !           173:             End If
        !           174:         End If
        !           175: 
        !           176:         For i = 0 To cert_index-1
        !           177:             If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, _
        !           178:                             cert(i), Nothing) <> axtls.SSL_OK Then
        !           179:                 Console.WriteLine("Certificate '" & cert(i) & _
        !           180:                         "' is undefined.")
        !           181:                 Environment.Exit(1)
        !           182:             End If
        !           183:         Next
        !           184: 
        !           185:         For i = 0 To ca_cert_index-1
        !           186:             If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, _
        !           187:                             ca_cert(i), Nothing) <> axtls.SSL_OK Then
        !           188:                 Console.WriteLine("Certificate '" & ca_cert(i) & _
        !           189:                         "' is undefined.")
        !           190:                 Environment.Exit(1)
        !           191:             End If
        !           192:         Next
        !           193: 
        !           194:         Dim buf As Byte() = Nothing
        !           195:         Dim res As Integer
        !           196:         Dim ssl As SSL
        !           197: 
        !           198:         While 1
        !           199:             If Not quiet Then
        !           200:                 Console.WriteLine("ACCEPT")
        !           201:             End If
        !           202: 
        !           203:             Dim client_sock As Socket = server_sock.AcceptSocket()
        !           204: 
        !           205:             ssl = ssl_ctx.Connect(client_sock)
        !           206: 
        !           207:             ' do the actual SSL handshake 
        !           208:             While 1
        !           209:                 res = ssl_ctx.Read(ssl, buf)
        !           210:                 If  res <> axtls.SSL_OK Then
        !           211:                     Exit While
        !           212:                 End If
        !           213: 
        !           214:                 ' check when the connection has been established 
        !           215:                 If ssl.HandshakeStatus() = axtls.SSL_OK
        !           216:                     Exit While
        !           217:                 End If
        !           218: 
        !           219:                 ' could do something else here 
        !           220:             End While
        !           221: 
        !           222:             If res = axtls.SSL_OK Then  ' connection established and ok
        !           223:                 If Not quiet
        !           224:                     display_session_id(ssl)
        !           225:                     display_cipher(ssl)
        !           226:                 End If
        !           227: 
        !           228:                 ' now read (and display) whatever the client sends us
        !           229:                 While 1
        !           230:                     ' keep reading until we get something interesting 
        !           231:                     While 1
        !           232:                         res = ssl_ctx.Read(ssl, buf)
        !           233:                         If res <> axtls.SSL_OK Then
        !           234:                             Exit While
        !           235:                         End If
        !           236: 
        !           237:                         ' could do something else here
        !           238:                     End While
        !           239: 
        !           240:                     If res < axtls.SSL_OK
        !           241:                         If Not quiet
        !           242:                             Console.WriteLine("CONNECTION CLOSED")
        !           243:                         End If
        !           244: 
        !           245:                         Exit While
        !           246:                     End If
        !           247: 
        !           248:                     ' convert to String 
        !           249:                     Dim str(res) As Char
        !           250:                     For i = 0 To res-1
        !           251:                         str(i) = Chr(buf(i))
        !           252:                     Next
        !           253: 
        !           254:                     Console.Write(str)
        !           255:                 End While
        !           256:             ElseIf Not quiet
        !           257:                 SSLUtil.DisplayError(res)
        !           258:             End If
        !           259: 
        !           260:             ' client was disconnected or the handshake failed. */
        !           261:             ssl.Dispose()
        !           262:             client_sock.Close()
        !           263:         End While
        !           264: 
        !           265:         ssl_ctx.Dispose()
        !           266:     End Sub
        !           267: 
        !           268:     ' 
        !           269:     ' do_client()
        !           270:     '
        !           271:     Public Sub do_client(ByVal build_mode As Integer, _
        !           272:                                     ByVal args() As String)
        !           273: 
        !           274:         If build_mode < axtls.SSL_BUILD_ENABLE_CLIENT Then
        !           275:             print_client_options(build_mode, args(1))
        !           276:         End If
        !           277: 
        !           278:         Dim i As Integer = 1
        !           279:         Dim res As Integer
        !           280:         Dim port As Integer = 4433
        !           281:         Dim quiet As Boolean = False
        !           282:         Dim password As String = Nothing
        !           283:         Dim reconnect As Integer = 0
        !           284:         Dim private_key_file As String = Nothing
        !           285:         Dim hostname As String = "127.0.0.1"
        !           286: 
        !           287:         ' organise the cert/ca_cert lists
        !           288:         Dim ssl As SSL = Nothing
        !           289:         Dim cert_size As Integer = SSLUtil.MaxCerts()
        !           290:         Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
        !           291:         Dim cert(cert_size) As String
        !           292:         Dim ca_cert(ca_cert_size) As String
        !           293:         Dim cert_index As Integer = 0
        !           294:         Dim ca_cert_index As Integer = 0
        !           295: 
        !           296:         Dim options As Integer = _
        !           297:                     axtls.SSL_SERVER_VERIFY_LATER Or axtls.SSL_DISPLAY_CERTS
        !           298:         Dim session_id As Byte() = Nothing
        !           299: 
        !           300:         While i < args.Length
        !           301:             If args(i) = "-connect" Then
        !           302:                 Dim host_port As String
        !           303: 
        !           304:                 If i >= args.Length-1
        !           305:                     print_client_options(build_mode, args(i))
        !           306:                 End If
        !           307: 
        !           308:                 i += 1
        !           309:                 host_port = args(i)
        !           310: 
        !           311:                 Dim index_colon As Integer = host_port.IndexOf(":"C)
        !           312:                 If index_colon < 0 Then 
        !           313:                     print_client_options(build_mode, args(i))
        !           314:                 End If
        !           315: 
        !           316:                 hostname = New String(host_port.ToCharArray(), _
        !           317:                         0, index_colon)
        !           318:                 port = Int32.Parse(New String(host_port.ToCharArray(), _
        !           319:                             index_colon+1, host_port.Length-index_colon-1))
        !           320:             ElseIf args(i) = "-cert"
        !           321:                 If i >= args.Length-1 Or cert_index >= cert_size Then
        !           322:                     print_client_options(build_mode, args(i))
        !           323:                 End If
        !           324: 
        !           325:                 i += 1
        !           326:                 cert(cert_index) = args(i)
        !           327:                 cert_index += 1
        !           328:             ElseIf args(i) = "-key"
        !           329:                 If i >= args.Length-1
        !           330:                     print_client_options(build_mode, args(i))
        !           331:                 End If
        !           332: 
        !           333:                 i += 1
        !           334:                 private_key_file = args(i)
        !           335:                 options = options Or axtls.SSL_NO_DEFAULT_KEY
        !           336:             ElseIf args(i) = "-CAfile"
        !           337:                 If i >= args.Length-1 Or ca_cert_index >= ca_cert_size
        !           338:                     print_client_options(build_mode, args(i))
        !           339:                 End If
        !           340: 
        !           341:                 i += 1
        !           342:                 ca_cert(ca_cert_index) = args(i)
        !           343:                 ca_cert_index += 1
        !           344:             ElseIf args(i) = "-verify"
        !           345:                 options = options And Not axtls.SSL_SERVER_VERIFY_LATER
        !           346:             ElseIf args(i) = "-reconnect"
        !           347:                 reconnect = 4
        !           348:             ElseIf args(i) = "-quiet"
        !           349:                 quiet = True
        !           350:                 options = options And  Not axtls.SSL_DISPLAY_CERTS
        !           351:             ElseIf args(i) = "-pass"
        !           352:                 If i >= args.Length-1
        !           353:                     print_client_options(build_mode, args(i))
        !           354:                 End If
        !           355: 
        !           356:                 i += 1
        !           357:                 password = args(i)
        !           358:             ElseIf build_mode = axtls.SSL_BUILD_FULL_MODE
        !           359:                 If args(i) = "-debug" Then
        !           360:                     options = options Or axtls.SSL_DISPLAY_BYTES
        !           361:                 ElseIf args(i) = "-state"
        !           362:                     options = options Or axtls.SSL_DISPLAY_STATES
        !           363:                 ElseIf args(i) = "-show-rsa"
        !           364:                     options = options Or axtls.SSL_DISPLAY_RSA
        !           365:                 Else
        !           366:                     print_client_options(build_mode, args(i))
        !           367:                 End If
        !           368:             Else    ' don't know what this is 
        !           369:                 print_client_options(build_mode, args(i))
        !           370:             End If
        !           371: 
        !           372:             i += 1
        !           373:         End While
        !           374: 
        !           375:         'Dim hostInfo As IPHostEntry = Dns.Resolve(hostname)
        !           376:         Dim hostInfo As IPHostEntry = Dns.GetHostEntry(hostname)
        !           377:         Dim  addresses As IPAddress() = hostInfo.AddressList
        !           378:         Dim ep As IPEndPoint = New IPEndPoint(addresses(0), port) 
        !           379:         Dim client_sock As Socket = New Socket(AddressFamily.InterNetwork, _
        !           380:                 SocketType.Stream, ProtocolType.Tcp)
        !           381:         client_sock.Connect(ep)
        !           382: 
        !           383:         If Not client_sock.Connected Then
        !           384:             Console.WriteLine("could not connect")
        !           385:             Environment.Exit(1)
        !           386:         End If
        !           387: 
        !           388:         If Not quiet Then
        !           389:             Console.WriteLine("CONNECTED")
        !           390:         End If
        !           391: 
        !           392:         '*********************************************************************
        !           393:         ' This is where the interesting stuff happens. Up until now we've
        !           394:         ' just been setting up sockets etc. Now we do the SSL handshake.
        !           395:         '*********************************************************************/
        !           396:         Dim ssl_ctx As SSLClient = New SSLClient(options, _
        !           397:                 axtls.SSL_DEFAULT_CLNT_SESS)
        !           398: 
        !           399:         If ssl_ctx Is Nothing Then
        !           400:             Console.Error.WriteLine("Error: Client context is invalid")
        !           401:             Environment.Exit(1)
        !           402:         End If
        !           403: 
        !           404:         If private_key_file <> Nothing Then
        !           405:             Dim obj_type As Integer = axtls.SSL_OBJ_RSA_KEY
        !           406: 
        !           407:             If private_key_file.EndsWith(".p8") Then
        !           408:                 obj_type = axtls.SSL_OBJ_PKCS8
        !           409:             Else If (private_key_file.EndsWith(".p12"))
        !           410:                 obj_type = axtls.SSL_OBJ_PKCS12
        !           411:             End If
        !           412: 
        !           413:             If ssl_ctx.ObjLoad(obj_type, private_key_file, _
        !           414:                                             password) <> axtls.SSL_OK Then
        !           415:                 Console.Error.WriteLine("Error: Private key '" & _
        !           416:                         private_key_file & "' is undefined.")
        !           417:                 Environment.Exit(1)
        !           418:             End If
        !           419:         End If
        !           420: 
        !           421:         For i = 0 To cert_index-1
        !           422:             If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, _
        !           423:                             cert(i), Nothing) <> axtls.SSL_OK Then
        !           424:                 Console.WriteLine("Certificate '" & cert(i) & _
        !           425:                         "' is undefined.")
        !           426:                 Environment.Exit(1)
        !           427:             End If
        !           428:         Next
        !           429: 
        !           430:         For i = 0 To ca_cert_index-1
        !           431:             If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, _
        !           432:                             ca_cert(i), Nothing) <> axtls.SSL_OK Then
        !           433:                 Console.WriteLine("Certificate '" & ca_cert(i) & _
        !           434:                         "' is undefined.")
        !           435:                 Environment.Exit(1)
        !           436:             End If
        !           437:         Next
        !           438: 
        !           439:         ' Try session resumption?
        !           440:         If reconnect > 0 Then
        !           441:             While reconnect > 0
        !           442:                 reconnect -= 1
        !           443:                 ssl = ssl_ctx.Connect(client_sock, session_id)
        !           444: 
        !           445:                 res = ssl.HandshakeStatus()
        !           446:                 If res <> axtls.SSL_OK Then
        !           447:                     If Not quiet Then
        !           448:                         SSLUtil.DisplayError(res)
        !           449:                     End If
        !           450: 
        !           451:                     ssl.Dispose()
        !           452:                     Environment.Exit(1)
        !           453:                 End If
        !           454: 
        !           455:                 display_session_id(ssl)
        !           456:                 session_id = ssl.GetSessionId()
        !           457: 
        !           458:                 If reconnect > 0 Then
        !           459:                     ssl.Dispose()
        !           460:                     client_sock.Close()
        !           461:                     
        !           462:                     ' and reconnect
        !           463:                     client_sock = New Socket(AddressFamily.InterNetwork, _
        !           464:                         SocketType.Stream, ProtocolType.Tcp)
        !           465:                     client_sock.Connect(ep)
        !           466:                 End If
        !           467:             End While
        !           468:         Else
        !           469:             ssl = ssl_ctx.Connect(client_sock, Nothing)
        !           470:         End If
        !           471: 
        !           472:         ' check the return status 
        !           473:         res = ssl.HandshakeStatus()
        !           474:         If res <> axtls.SSL_OK Then
        !           475:             If Not quiet Then
        !           476:                 SSLUtil.DisplayError(res)
        !           477:             End If
        !           478: 
        !           479:             Environment.Exit(1)
        !           480:         End If
        !           481: 
        !           482:         If Not quiet Then
        !           483:             Dim common_name As String = _
        !           484:                 ssl.GetCertificateDN(axtls.SSL_X509_CERT_COMMON_NAME)
        !           485: 
        !           486:             If common_name <> Nothing
        !           487:                 Console.WriteLine("Common Name:" & _
        !           488:                         ControlChars.Tab & ControlChars.Tab & _
        !           489:                         ControlChars.Tab & common_name)
        !           490:             End If
        !           491: 
        !           492:             display_session_id(ssl)
        !           493:             display_cipher(ssl)
        !           494:         End If
        !           495: 
        !           496:         While (1)
        !           497:             Dim user_input As String = Console.ReadLine()
        !           498: 
        !           499:             If user_input = Nothing Then
        !           500:                 Exit While
        !           501:             End If
        !           502: 
        !           503:             Dim buf(user_input.Length+1) As Byte
        !           504:             buf(buf.Length-2) = Asc(ControlChars.Lf) ' add the carriage return
        !           505:             buf(buf.Length-1) = 0                    ' null terminate 
        !           506: 
        !           507:             For i = 0 To user_input.Length-1
        !           508:                 buf(i) = Asc(user_input.Chars(i))
        !           509:             Next
        !           510: 
        !           511:             res = ssl_ctx.Write(ssl, buf, buf.Length)
        !           512:             If res < axtls.SSL_OK Then
        !           513:                 If Not quiet Then
        !           514:                     SSLUtil.DisplayError(res)
        !           515:                 End If
        !           516: 
        !           517:                 Exit While
        !           518:             End If
        !           519:         End While
        !           520: 
        !           521:         ssl_ctx.Dispose()
        !           522:     End Sub
        !           523: 
        !           524:     '
        !           525:     ' Display what cipher we are using
        !           526:     '
        !           527:     Private Sub display_cipher(ByVal ssl As SSL)
        !           528:         Console.Write("CIPHER is ")
        !           529: 
        !           530:         Select ssl.GetCipherId()
        !           531:             Case axtls.SSL_AES128_SHA
        !           532:                 Console.WriteLine("AES128-SHA")
        !           533: 
        !           534:             Case axtls.SSL_AES256_SHA
        !           535:                 Console.WriteLine("AES256-SHA")
        !           536: 
        !           537:             Case axtls.SSL_RC4_128_SHA
        !           538:                 Console.WriteLine("RC4-SHA")
        !           539: 
        !           540:             Case axtls.SSL_RC4_128_MD5
        !           541:                 Console.WriteLine("RC4-MD5")
        !           542: 
        !           543:             Case Else
        !           544:                 Console.WriteLine("Unknown - " & ssl.GetCipherId())
        !           545:         End Select
        !           546:     End Sub
        !           547: 
        !           548:     '
        !           549:     ' Display what session id we have.
        !           550:     '
        !           551:     Private Sub display_session_id(ByVal ssl As SSL)
        !           552:         Dim session_id As Byte() = ssl.GetSessionId()
        !           553: 
        !           554:         If session_id.Length > 0 Then
        !           555:             Console.WriteLine("-----BEGIN SSL SESSION PARAMETERS-----")
        !           556:             Dim b As Byte
        !           557:             For Each b In session_id
        !           558:                 Console.Write("{0:x02}", b)
        !           559:             Next
        !           560: 
        !           561:             Console.WriteLine()
        !           562:             Console.WriteLine("-----END SSL SESSION PARAMETERS-----")
        !           563:         End If
        !           564:     End Sub
        !           565: 
        !           566:     ' 
        !           567:     ' We've had some sort of command-line error. Print out the basic options.
        !           568:     '
        !           569:     Public Sub print_options(ByVal options As String)
        !           570:         Console.WriteLine("axssl: Error: '" & options & _
        !           571:                 "' is an invalid command.")
        !           572:         Console.WriteLine("usage: axssl.vbnet [s_server|s_client|" & _
        !           573:                 "version] [args ...]")
        !           574:         Environment.Exit(1)
        !           575:     End Sub
        !           576: 
        !           577:     ' 
        !           578:     ' We've had some sort of command-line error. Print out the server options.
        !           579:     '
        !           580:     Private Sub print_server_options(ByVal build_mode As Integer, _
        !           581:                                     ByVal options As String)
        !           582:         Dim cert_size As Integer = SSLUtil.MaxCerts()
        !           583:         Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
        !           584: 
        !           585:         Console.WriteLine("unknown option " & options)
        !           586:         Console.WriteLine("usage: s_server [args ...]")
        !           587:         Console.WriteLine(" -accept arg" & ControlChars.Tab & _
        !           588:                 "- port to accept on (default is 4433)")
        !           589:         Console.WriteLine(" -quiet" & ControlChars.Tab & ControlChars.Tab & _
        !           590:                 "- No server output")
        !           591:         If build_mode >= axtls.SSL_BUILD_SERVER_ONLY 
        !           592:             Console.WriteLine(" -cert arg" & ControlChars.Tab & _
        !           593:                "- certificate file to add (in addition to default) to chain -")
        !           594:             Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
        !           595:                     "  Can repeat up to " & cert_size & " times")
        !           596:             Console.WriteLine(" -key arg" & ControlChars.Tab & _
        !           597:                         "- Private key file to use")
        !           598:             Console.WriteLine(" -pass" & ControlChars.Tab & ControlChars.Tab & _
        !           599:                     "- private key file pass phrase source")
        !           600:         End If
        !           601: 
        !           602:         If build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION
        !           603:             Console.WriteLine(" -verify" & ControlChars.Tab & _
        !           604:                     "- turn on peer certificate verification")
        !           605:             Console.WriteLine(" -CAfile arg" & ControlChars.Tab & _
        !           606:                     "- Certificate authority")
        !           607:             Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
        !           608:                     "  Can repeat up to " & ca_cert_size & " times")
        !           609:         End If
        !           610: 
        !           611:         If build_mode = axtls.SSL_BUILD_FULL_MODE
        !           612:             Console.WriteLine(" -debug" & _
        !           613:                     ControlChars.Tab & ControlChars.Tab & _
        !           614:                     "- Print more output")
        !           615:             Console.WriteLine(" -state" & _
        !           616:                     ControlChars.Tab & ControlChars.Tab & _
        !           617:                     "- Show state messages")
        !           618:             Console.WriteLine(" -show-rsa" & _
        !           619:                     ControlChars.Tab & "- Show RSA state")
        !           620:         End If
        !           621: 
        !           622:         Environment.Exit(1)
        !           623:     End Sub
        !           624: 
        !           625:     '
        !           626:     ' We've had some sort of command-line error. Print out the client options.
        !           627:     '
        !           628:     Private Sub print_client_options(ByVal build_mode As Integer, _
        !           629:                                                 ByVal options As String)
        !           630:         Dim cert_size As Integer = SSLUtil.MaxCerts()
        !           631:         Dim ca_cert_size As Integer = SSLUtil.MaxCACerts()
        !           632: 
        !           633:         Console.WriteLine("unknown option " & options)
        !           634: 
        !           635:         If build_mode >= axtls.SSL_BUILD_ENABLE_CLIENT Then
        !           636:             Console.WriteLine("usage: s_client [args ...]")
        !           637:             Console.WriteLine(" -connect host:port - who to connect to " & _
        !           638:                     "(default is localhost:4433)")
        !           639:             Console.WriteLine(" -verify" & ControlChars.Tab & _
        !           640:                     "- turn on peer certificate verification")
        !           641:             Console.WriteLine(" -cert arg" & ControlChars.Tab & _
        !           642:                     "- certificate file to use")
        !           643:             Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
        !           644:                     "  Can repeat up to " & cert_size & " times")
        !           645:             Console.WriteLine(" -key arg" & ControlChars.Tab & _
        !           646:                     "- Private key file to use")
        !           647:             Console.WriteLine(" -CAfile arg" & ControlChars.Tab & _
        !           648:                     "- Certificate authority")
        !           649:             Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _
        !           650:                     "  Can repeat up to " & ca_cert_size & " times")
        !           651:             Console.WriteLine(" -quiet" & _
        !           652:                     ControlChars.Tab & ControlChars.Tab & "- No client output")
        !           653:             Console.WriteLine(" -pass" & ControlChars.Tab & _
        !           654:                     ControlChars.Tab & _
        !           655:                     "- private key file pass phrase source")
        !           656:             Console.WriteLine(" -reconnect" & ControlChars.Tab & _
        !           657:                     "- Drop and re-make the " & _
        !           658:                     "connection with the same Session-ID")
        !           659: 
        !           660:             If build_mode = axtls.SSL_BUILD_FULL_MODE Then
        !           661:                 Console.WriteLine(" -debug" & _
        !           662:                         ControlChars.Tab & ControlChars.Tab & _
        !           663:                         "- Print more output")
        !           664:                 Console.WriteLine(" -state" & _
        !           665:                         ControlChars.Tab & ControlChars.Tab & _
        !           666:                         "- Show state messages")
        !           667:                 Console.WriteLine(" -show-rsa" & ControlChars.Tab & _
        !           668:                         "- Show RSA state")
        !           669:             End If
        !           670:         Else 
        !           671:             Console.WriteLine("Change configuration to allow this feature")
        !           672:         End If
        !           673: 
        !           674:         Environment.Exit(1)
        !           675:     End Sub
        !           676: 
        !           677: End Class
        !           678: 
        !           679: Public Module MyMain
        !           680:     Function Main(ByVal args() As String) As Integer
        !           681:         Dim runner As axssl = New axssl()
        !           682: 
        !           683:         If args.Length = 1 And args(0) = "version" Then
        !           684:            Console.WriteLine("axssl.vbnet " & SSLUtil.Version())
        !           685:             Environment.Exit(0)
        !           686:         End If
        !           687: 
        !           688:         If args.Length < 1 
        !           689:             runner.print_options("")
        !           690:         ElseIf args(0) <> "s_server" And args(0) <> "s_client"
        !           691:             runner.print_options(args(0))
        !           692:         End If
        !           693: 
        !           694:         Dim build_mode As Integer = SSLUtil.BuildMode()
        !           695: 
        !           696:         If args(0) = "s_server" Then
        !           697:             runner.do_server(build_mode, args)
        !           698:         Else
        !           699:             runner.do_client(build_mode, args)
        !           700:         End If
        !           701:     End Function
        !           702: End Module

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>