Annotation of embedaddon/axTLS/samples/vbnet/axssl.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: ' 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>