forked from wolfSSL/wolfssl
Merge pull request #7692 from gasbytes/sni-csharp-wrapper-patch
Sni csharp wrapper patch
This commit is contained in:
@@ -155,6 +155,7 @@ public class wolfSSL_TLS_CSHarp
|
|||||||
|
|
||||||
Console.WriteLine("Started TCP and waiting for a connection");
|
Console.WriteLine("Started TCP and waiting for a connection");
|
||||||
fd = tcp.AcceptSocket();
|
fd = tcp.AcceptSocket();
|
||||||
|
|
||||||
ssl = wolfssl.new_ssl(ctx);
|
ssl = wolfssl.new_ssl(ctx);
|
||||||
if (ssl == IntPtr.Zero)
|
if (ssl == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
@@ -208,6 +209,16 @@ public class wolfSSL_TLS_CSHarp
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get and print sni used by the client */
|
||||||
|
if (haveSNI(args)) {
|
||||||
|
IntPtr data = IntPtr.Zero;
|
||||||
|
|
||||||
|
ushort size = wolfssl.SNI_GetRequest(ssl, 0, ref data);
|
||||||
|
string dataStr = Marshal.PtrToStringAnsi(data);
|
||||||
|
Console.WriteLine("(SNI_GetRequest) Size of SNI used by client: " + size);
|
||||||
|
Console.WriteLine("(SNI_GetRequest) SNI used by client: " + dataStr);
|
||||||
|
}
|
||||||
|
|
||||||
/* print out results of TLS/SSL accept */
|
/* print out results of TLS/SSL accept */
|
||||||
Console.WriteLine("SSL version is " + wolfssl.get_version(ssl));
|
Console.WriteLine("SSL version is " + wolfssl.get_version(ssl));
|
||||||
Console.WriteLine("SSL cipher suite is " + wolfssl.get_current_cipher(ssl));
|
Console.WriteLine("SSL cipher suite is " + wolfssl.get_current_cipher(ssl));
|
||||||
@@ -222,6 +233,45 @@ public class wolfSSL_TLS_CSHarp
|
|||||||
}
|
}
|
||||||
Console.WriteLine(buff);
|
Console.WriteLine(buff);
|
||||||
|
|
||||||
|
/* get and print sni from a sample buffer, can be used by using the raw client hello */
|
||||||
|
if (haveSNI(args)) {
|
||||||
|
IntPtr result = Marshal.AllocHGlobal(32);
|
||||||
|
IntPtr inOutSz = Marshal.AllocHGlobal(sizeof(int));
|
||||||
|
Marshal.WriteInt32(inOutSz, 32);
|
||||||
|
byte []buffer = { /* from TextMate website client hello example */
|
||||||
|
0x16, 0x03, 0x01, 0x00, 0xc6, 0x01, 0x00, 0x00, 0xc2, 0x03, 0x03, 0x52,
|
||||||
|
0x8b, 0x7b, 0xca, 0x69, 0xec, 0x97, 0xd5, 0x08, 0x03, 0x50, 0xfe, 0x3b,
|
||||||
|
0x99, 0xc3, 0x20, 0xce, 0xa5, 0xf6, 0x99, 0xa5, 0x71, 0xf9, 0x57, 0x7f,
|
||||||
|
0x04, 0x38, 0xf6, 0x11, 0x0b, 0xb8, 0xd3, 0x00, 0x00, 0x5e, 0x00, 0xff,
|
||||||
|
0xc0, 0x24, 0xc0, 0x23, 0xc0, 0x0a, 0xc0, 0x09, 0xc0, 0x07, 0xc0, 0x08,
|
||||||
|
0xc0, 0x28, 0xc0, 0x27, 0xc0, 0x14, 0xc0, 0x13, 0xc0, 0x11, 0xc0, 0x12,
|
||||||
|
0xc0, 0x26, 0xc0, 0x25, 0xc0, 0x2a, 0xc0, 0x29, 0xc0, 0x05, 0xc0, 0x04,
|
||||||
|
0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x0f, 0xc0, 0x0e, 0xc0, 0x0c, 0xc0, 0x0d,
|
||||||
|
0x00, 0x3d, 0x00, 0x3c, 0x00, 0x2f, 0x00, 0x05, 0x00, 0x04, 0x00, 0x35,
|
||||||
|
0x00, 0x0a, 0x00, 0x67, 0x00, 0x6b, 0x00, 0x33, 0x00, 0x39, 0x00, 0x16,
|
||||||
|
0x00, 0xaf, 0x00, 0xae, 0x00, 0x8d, 0x00, 0x8c, 0x00, 0x8a, 0x00, 0x8b,
|
||||||
|
0x00, 0xb1, 0x00, 0xb0, 0x00, 0x2c, 0x00, 0x3b, 0x01, 0x00, 0x00, 0x3b,
|
||||||
|
0x00, 0x00, 0x00, 0x15, 0x00, 0x13, 0x00, 0x00, 0x10, 0x61, 0x70, 0x69,
|
||||||
|
0x2e, 0x74, 0x65, 0x78, 0x74, 0x6d, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x72,
|
||||||
|
0x67, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x06, 0x00, 0x17, 0x00, 0x18, 0x00,
|
||||||
|
0x19, 0x00, 0x0b, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x0c, 0x00,
|
||||||
|
0x0a, 0x05, 0x01, 0x04, 0x01, 0x02, 0x01, 0x04, 0x03, 0x02, 0x03
|
||||||
|
};
|
||||||
|
|
||||||
|
int ret = wolfssl.SNI_GetFromBuffer(buffer, 1024, 0, result, inOutSz);
|
||||||
|
|
||||||
|
if (ret != wolfssl.SUCCESS) {
|
||||||
|
Console.WriteLine("Error on reading SNI from buffer, ret value = " + ret);
|
||||||
|
tcp.Stop();
|
||||||
|
clean(ssl, ctx);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string resultStr = Marshal.PtrToStringAnsi(result);
|
||||||
|
Console.WriteLine("(SNI_GetFromBuffer) SNI used by client: " + resultStr);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (wolfssl.write(ssl, reply, reply.Length) != reply.Length)
|
if (wolfssl.write(ssl, reply, reply.Length) != reply.Length)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Error in write");
|
Console.WriteLine("Error in write");
|
||||||
|
@@ -330,6 +330,10 @@ namespace wolfSSL.CSharp {
|
|||||||
private extern static int wolfSSL_CTX_UseSNI(IntPtr ctx, byte type, IntPtr data, ushort size);
|
private extern static int wolfSSL_CTX_UseSNI(IntPtr ctx, byte type, IntPtr data, ushort size);
|
||||||
[DllImport(wolfssl_dll, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(wolfssl_dll, CallingConvention = CallingConvention.Cdecl)]
|
||||||
private extern static int wolfSSL_UseSNI(IntPtr ssl, byte type, IntPtr data, ushort size);
|
private extern static int wolfSSL_UseSNI(IntPtr ssl, byte type, IntPtr data, ushort size);
|
||||||
|
[DllImport(wolfssl_dll, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
private extern static ushort wolfSSL_SNI_GetRequest(IntPtr ssl, byte type, ref IntPtr data);
|
||||||
|
[DllImport(wolfssl_dll, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
private extern static int wolfSSL_SNI_GetFromBuffer(byte[] clientHello, uint helloSz, byte type, IntPtr sni, IntPtr inOutSz);
|
||||||
|
|
||||||
/********************************
|
/********************************
|
||||||
* SSL Structure
|
* SSL Structure
|
||||||
@@ -1200,6 +1204,29 @@ namespace wolfSSL.CSharp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ushort SNI_GetRequest(IntPtr ssl, byte type, ref IntPtr data)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
GCHandle gch = GCHandle.FromIntPtr(ssl);
|
||||||
|
ssl_handle handles = (ssl_handle)gch.Target;
|
||||||
|
|
||||||
|
return wolfSSL_SNI_GetRequest(handles.get_ssl(), type, ref data);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log(ERROR_LOG, "wolfssl sni get request error: " + e.ToString());
|
||||||
|
return ushort.MaxValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int SNI_GetFromBuffer(byte []clientHello, uint helloSz, byte type, IntPtr sni, IntPtr inOutSz)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
return wolfSSL_SNI_GetFromBuffer(clientHello, helloSz, type, sni, inOutSz);
|
||||||
|
} catch(Exception e) {
|
||||||
|
log(ERROR_LOG, "wolfssl sni get from buffer error: " + e.ToString());
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set identity hint to use
|
/// Set identity hint to use
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Reference in New Issue
Block a user