Return to axssl.vb CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / axTLS / samples / vbnet |
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