wrapper of the mbed port of Cyassl. It's based of the work of Ashley Mills

Dependencies:   cyassl-lib

Dependents:   TLS_cyassl-Example TLS_cyassl-Example2 HTTPSClientExample2

Fork of TLS_cyassl by Francois Berder

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TLSServer.cpp Source File

TLSServer.cpp

00001 #include "TLSServer.h"
00002 
00003 #pragma once
00004 const static unsigned char deviceCertificate[] = {
00005 
00006   0x30, 0x82, 0x02, 0xad, 0x30, 0x82, 0x02, 0x16, 0xa0, 0x03, 0x02, 0x01,
00007   0x02, 0x02, 0x02, 0x31, 0x33, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
00008   0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x67, 0x31, 0x0b,
00009   0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31,
00010   0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x09, 0x42, 0x65,
00011   0x72, 0x6b, 0x73, 0x68, 0x69, 0x72, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06,
00012   0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x4e, 0x65, 0x77, 0x62, 0x75, 0x72,
00013   0x79, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08,
00014   0x56, 0x6f, 0x64, 0x61, 0x66, 0x6f, 0x6e, 0x65, 0x31, 0x0c, 0x30, 0x0a,
00015   0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x03, 0x52, 0x26, 0x44, 0x31, 0x11,
00016   0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x44, 0x4d, 0x53,
00017   0x65, 0x72, 0x76, 0x65, 0x72, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30,
00018   0x39, 0x30, 0x33, 0x31, 0x34, 0x30, 0x36, 0x30, 0x39, 0x5a, 0x17, 0x0d,
00019   0x32, 0x33, 0x30, 0x37, 0x31, 0x33, 0x31, 0x34, 0x30, 0x36, 0x30, 0x39,
00020   0x5a, 0x30, 0x54, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
00021   0x13, 0x02, 0x47, 0x42, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04,
00022   0x08, 0x0c, 0x09, 0x42, 0x65, 0x72, 0x6b, 0x73, 0x68, 0x69, 0x72, 0x65,
00023   0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x56,
00024   0x6f, 0x64, 0x61, 0x66, 0x6f, 0x6e, 0x65, 0x31, 0x0c, 0x30, 0x0a, 0x06,
00025   0x03, 0x55, 0x04, 0x0b, 0x0c, 0x03, 0x52, 0x26, 0x44, 0x31, 0x10, 0x30,
00026   0x0e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x07, 0x44, 0x65, 0x76, 0x69,
00027   0x63, 0x65, 0x31, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
00028   0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d,
00029   0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xc8, 0xa8, 0x06, 0x07,
00030   0x81, 0x24, 0xb0, 0xb6, 0x92, 0x55, 0x87, 0x12, 0x12, 0x54, 0x50, 0x08,
00031   0xd7, 0x39, 0xce, 0xba, 0xd1, 0xb3, 0x6d, 0xe7, 0xbb, 0x31, 0x8a, 0x30,
00032   0xa3, 0xb7, 0xfe, 0x1f, 0xea, 0x0d, 0xab, 0x89, 0x22, 0xf2, 0x93, 0xc8,
00033   0x5b, 0x48, 0xea, 0x73, 0x6f, 0x87, 0xae, 0x70, 0x1d, 0x94, 0x1c, 0x26,
00034   0xbe, 0x08, 0x9d, 0xb1, 0xd2, 0x7c, 0xc1, 0xe4, 0xb6, 0x8f, 0x5e, 0xbb,
00035   0x18, 0xe6, 0xb9, 0x19, 0x58, 0xb4, 0xcf, 0x06, 0x6f, 0x3f, 0x35, 0x0a,
00036   0x0f, 0x94, 0x82, 0x88, 0xb1, 0x1e, 0x17, 0xa5, 0x52, 0x73, 0xa0, 0xf8,
00037   0x6d, 0x0a, 0x17, 0x6e, 0x7a, 0x39, 0x47, 0x4c, 0x14, 0xfd, 0xdf, 0x9d,
00038   0x62, 0x48, 0x0f, 0x7f, 0xe9, 0x97, 0x94, 0xc0, 0xb8, 0x8f, 0xb7, 0x76,
00039   0xf4, 0xf0, 0x1f, 0xf1, 0xc1, 0x66, 0xbc, 0xf9, 0xf7, 0xe3, 0xf0, 0xb7,
00040   0x66, 0xe5, 0xeb, 0x09, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x7b, 0x30,
00041   0x79, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00,
00042   0x30, 0x2c, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01,
00043   0x0d, 0x04, 0x1f, 0x16, 0x1d, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, 0x4c,
00044   0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x43,
00045   0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x30, 0x1d,
00046   0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x2d, 0x14, 0x06,
00047   0x43, 0x3c, 0xae, 0xf8, 0x02, 0x0a, 0x1d, 0x21, 0xd8, 0x61, 0xd9, 0x96,
00048   0x8f, 0xc6, 0xfa, 0x9d, 0xe9, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23,
00049   0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xaa, 0x27, 0x1a, 0x6f, 0x88, 0x72,
00050   0x8c, 0x2d, 0x2d, 0xc2, 0x5a, 0xc5, 0x74, 0x82, 0xa5, 0x44, 0xd1, 0x3d,
00051   0xa3, 0x15, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
00052   0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x90, 0x07, 0x5b,
00053   0x99, 0x3c, 0xd4, 0xfe, 0x4f, 0x84, 0x65, 0xa8, 0x3b, 0xd0, 0xa4, 0x2b,
00054   0xd2, 0xe4, 0x5f, 0xc0, 0x26, 0xaf, 0xbb, 0xb3, 0x4c, 0xad, 0x7d, 0xfb,
00055   0x12, 0xb9, 0x13, 0x3f, 0x52, 0xee, 0x0b, 0x4f, 0xdf, 0x25, 0xec, 0x53,
00056   0x29, 0xca, 0xb4, 0xad, 0xf7, 0xbf, 0xaf, 0xa5, 0x4c, 0xd9, 0xea, 0x08,
00057   0xa9, 0x40, 0x8d, 0x19, 0x5a, 0x5a, 0xb9, 0x62, 0x14, 0x78, 0x3e, 0x0d,
00058   0xf1, 0x87, 0xcc, 0x75, 0xc1, 0xb8, 0x14, 0xca, 0x5e, 0x4b, 0xde, 0x9e,
00059   0xc7, 0x76, 0x85, 0xa2, 0x5d, 0x28, 0x62, 0x7c, 0x5c, 0x51, 0x96, 0xab,
00060   0x4f, 0x7e, 0xbf, 0x67, 0xba, 0xa6, 0xb0, 0x63, 0xbe, 0xbc, 0x9e, 0x1f,
00061   0xf9, 0xc5, 0x8a, 0xf5, 0xd2, 0xa5, 0x31, 0x29, 0xb1, 0x35, 0x90, 0xed,
00062   0xc7, 0xaf, 0x2f, 0x63, 0x8b, 0xc2, 0x47, 0x2b, 0x9a, 0x65, 0xa3, 0xd7,
00063   0x28, 0xe8, 0x19, 0xda, 0xbc
00064 
00065 };
00066 
00067 static const int deviceCertificateLength = sizeof(deviceCertificate); //689;
00068 
00069   #pragma once
00070   const static unsigned char devicePrivateKey[] = {
00071   
00072   0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xc8,
00073   0xa8, 0x06, 0x07, 0x81, 0x24, 0xb0, 0xb6, 0x92, 0x55, 0x87, 0x12, 0x12,
00074   0x54, 0x50, 0x08, 0xd7, 0x39, 0xce, 0xba, 0xd1, 0xb3, 0x6d, 0xe7, 0xbb,
00075   0x31, 0x8a, 0x30, 0xa3, 0xb7, 0xfe, 0x1f, 0xea, 0x0d, 0xab, 0x89, 0x22,
00076   0xf2, 0x93, 0xc8, 0x5b, 0x48, 0xea, 0x73, 0x6f, 0x87, 0xae, 0x70, 0x1d,
00077   0x94, 0x1c, 0x26, 0xbe, 0x08, 0x9d, 0xb1, 0xd2, 0x7c, 0xc1, 0xe4, 0xb6,
00078   0x8f, 0x5e, 0xbb, 0x18, 0xe6, 0xb9, 0x19, 0x58, 0xb4, 0xcf, 0x06, 0x6f,
00079   0x3f, 0x35, 0x0a, 0x0f, 0x94, 0x82, 0x88, 0xb1, 0x1e, 0x17, 0xa5, 0x52,
00080   0x73, 0xa0, 0xf8, 0x6d, 0x0a, 0x17, 0x6e, 0x7a, 0x39, 0x47, 0x4c, 0x14,
00081   0xfd, 0xdf, 0x9d, 0x62, 0x48, 0x0f, 0x7f, 0xe9, 0x97, 0x94, 0xc0, 0xb8,
00082   0x8f, 0xb7, 0x76, 0xf4, 0xf0, 0x1f, 0xf1, 0xc1, 0x66, 0xbc, 0xf9, 0xf7,
00083   0xe3, 0xf0, 0xb7, 0x66, 0xe5, 0xeb, 0x09, 0x02, 0x03, 0x01, 0x00, 0x01,
00084   0x02, 0x81, 0x80, 0x09, 0xdb, 0xd7, 0x8f, 0xfe, 0xd4, 0x62, 0xaa, 0x55,
00085   0xbe, 0x46, 0x08, 0xa9, 0x45, 0xe3, 0x38, 0xcb, 0xfa, 0x57, 0x21, 0xee,
00086   0xb3, 0xb6, 0x2e, 0xb0, 0x8f, 0xda, 0x8e, 0x51, 0x3c, 0xf5, 0x0b, 0x74,
00087   0x60, 0x7f, 0x91, 0x19, 0x5a, 0x79, 0xd0, 0x5a, 0x4b, 0xd6, 0xd9, 0x1d,
00088   0x1d, 0xb9, 0x80, 0x60, 0xb3, 0xaa, 0x3e, 0x6d, 0x0f, 0xd7, 0x4f, 0xa9,
00089   0x5b, 0xdf, 0xda, 0xf0, 0xed, 0x52, 0x66, 0x20, 0x9f, 0xb4, 0x0d, 0x88,
00090   0x23, 0x7d, 0xd2, 0x5a, 0x0a, 0x39, 0x6a, 0x82, 0xd8, 0x88, 0x75, 0x62,
00091   0x11, 0x39, 0x6f, 0xd8, 0x36, 0xba, 0x30, 0x86, 0x15, 0x1b, 0x51, 0xee,
00092   0x90, 0x7d, 0x58, 0x60, 0xd5, 0xb6, 0xc9, 0xd7, 0x2d, 0x23, 0x1b, 0xa3,
00093   0xb5, 0x8d, 0xef, 0x5d, 0xb3, 0x4d, 0x12, 0x89, 0x20, 0xee, 0x7f, 0xec,
00094   0x81, 0x40, 0x97, 0xc9, 0xee, 0xb9, 0x61, 0x21, 0x5a, 0x3e, 0x51, 0x02,
00095   0x41, 0x00, 0xf0, 0x5b, 0x47, 0x31, 0xcb, 0xf4, 0xb3, 0x5d, 0x24, 0xd6,
00096   0xd1, 0xf8, 0x41, 0x9d, 0xca, 0x3d, 0xc5, 0x90, 0x6e, 0x61, 0x32, 0xe9,
00097   0xd0, 0x43, 0x12, 0x67, 0x70, 0x01, 0x45, 0x8d, 0xbd, 0xe3, 0x0a, 0x30,
00098   0x06, 0xd0, 0x0e, 0xd4, 0x75, 0xff, 0x4b, 0x1f, 0xf8, 0x2d, 0xf9, 0xe1,
00099   0x72, 0x60, 0xb3, 0xbd, 0x60, 0x4c, 0x3e, 0x00, 0xf1, 0x0e, 0x23, 0x19,
00100   0x7f, 0x5a, 0xfe, 0x61, 0x86, 0x13, 0x02, 0x41, 0x00, 0xd5, 0xb7, 0x46,
00101   0xdf, 0xe6, 0xfc, 0x0e, 0x79, 0xea, 0xf5, 0x4f, 0x4b, 0x58, 0x0e, 0xa0,
00102   0x4a, 0x15, 0x52, 0xde, 0x4a, 0x08, 0xc1, 0x46, 0xc0, 0x25, 0x14, 0x64,
00103   0x15, 0x9a, 0x3d, 0xd4, 0x64, 0x6a, 0xad, 0x70, 0x87, 0x86, 0x6a, 0x32,
00104   0x16, 0x2d, 0xcb, 0xc1, 0x12, 0x4b, 0xfb, 0xf6, 0x64, 0x4f, 0x8d, 0x17,
00105   0xfc, 0x68, 0xe8, 0xba, 0xfb, 0xd9, 0x5c, 0x77, 0x18, 0xc5, 0xbe, 0x9d,
00106   0xf3, 0x02, 0x41, 0x00, 0xbb, 0x44, 0x12, 0xcb, 0x2c, 0x82, 0x41, 0xc1,
00107   0x1f, 0x73, 0xb3, 0xf2, 0x3d, 0x85, 0x67, 0xce, 0x0b, 0x00, 0x85, 0xcf,
00108   0x7b, 0x30, 0x8a, 0x8f, 0xc7, 0x66, 0x09, 0xf1, 0x23, 0xb4, 0xd4, 0xae,
00109   0x71, 0x00, 0x8c, 0x3e, 0x4c, 0x5f, 0xa2, 0x73, 0xbe, 0x9f, 0x70, 0xe8,
00110   0xb9, 0x58, 0xba, 0x99, 0xb7, 0x50, 0xa4, 0x17, 0xa2, 0xf3, 0x6e, 0xdc,
00111   0xb9, 0xe2, 0x22, 0xc4, 0xcd, 0x8f, 0x44, 0x3b, 0x02, 0x41, 0x00, 0xaa,
00112   0x4f, 0xe3, 0x50, 0x5d, 0x60, 0x33, 0x1d, 0x1f, 0x8c, 0x1c, 0x83, 0xdb,
00113   0x89, 0xd4, 0x5d, 0x15, 0x7f, 0x33, 0x9c, 0x66, 0x3b, 0xb8, 0x69, 0x39,
00114   0x63, 0x75, 0x9a, 0xed, 0x8f, 0x26, 0x6a, 0x5b, 0xc5, 0x19, 0xef, 0x36,
00115   0xc3, 0xfc, 0x64, 0x46, 0x5c, 0xa0, 0xe1, 0x36, 0xe2, 0x75, 0x69, 0x5d,
00116   0x28, 0x00, 0x9c, 0x6a, 0xf2, 0x44, 0xc8, 0x9d, 0x60, 0x9d, 0x9c, 0x85,
00117   0x41, 0xb1, 0xd7, 0x02, 0x40, 0x71, 0xf2, 0xf4, 0x2f, 0x5f, 0xe7, 0x9a,
00118   0x81, 0x43, 0x6b, 0x37, 0xa9, 0x92, 0x29, 0x0a, 0x64, 0xaf, 0x82, 0x8a,
00119   0x3d, 0x6a, 0x93, 0xb6, 0xd8, 0xb3, 0xd6, 0x8c, 0xd8, 0xf3, 0x66, 0xbd,
00120   0x9b, 0x59, 0x86, 0x23, 0xf5, 0xae, 0xaa, 0x3c, 0xcd, 0xc2, 0xdc, 0x91,
00121   0x16, 0x43, 0xdd, 0xec, 0x85, 0x4b, 0x7d, 0x4f, 0xc5, 0x27, 0xb5, 0x1f,
00122   0x04, 0x7e, 0xb6, 0x42, 0x75, 0x0a, 0x10, 0xcb, 0x38
00123   
00124 };
00125 
00126 const static int devicePrivateKeyLength = sizeof(devicePrivateKey);
00127 
00128 #pragma once
00129 
00130 const static unsigned char rootCertificate[] = {
00131   0x30, 0x82, 0x02, 0x95, 0x30, 0x82, 0x01, 0xfe, 0xa0, 0x03, 0x02, 0x01,
00132   0x02, 0x02, 0x02, 0x11, 0x11, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
00133   0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x67, 0x31, 0x0b,
00134   0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31,
00135   0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x09, 0x42, 0x65,
00136   0x72, 0x6b, 0x73, 0x68, 0x69, 0x72, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06,
00137   0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x4e, 0x65, 0x77, 0x62, 0x75, 0x72,
00138   0x79, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08,
00139   0x56, 0x6f, 0x64, 0x61, 0x66, 0x6f, 0x6e, 0x65, 0x31, 0x0c, 0x30, 0x0a,
00140   0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x03, 0x52, 0x26, 0x44, 0x31, 0x11,
00141   0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x44, 0x4d, 0x53,
00142   0x65, 0x72, 0x76, 0x65, 0x72, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30,
00143   0x39, 0x30, 0x33, 0x31, 0x34, 0x30, 0x36, 0x30, 0x38, 0x5a, 0x17, 0x0d,
00144   0x32, 0x33, 0x30, 0x37, 0x31, 0x33, 0x31, 0x34, 0x30, 0x36, 0x30, 0x38,
00145   0x5a, 0x30, 0x67, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
00146   0x13, 0x02, 0x47, 0x42, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04,
00147   0x08, 0x0c, 0x09, 0x42, 0x65, 0x72, 0x6b, 0x73, 0x68, 0x69, 0x72, 0x65,
00148   0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x4e,
00149   0x65, 0x77, 0x62, 0x75, 0x72, 0x79, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03,
00150   0x55, 0x04, 0x0a, 0x0c, 0x08, 0x56, 0x6f, 0x64, 0x61, 0x66, 0x6f, 0x6e,
00151   0x65, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x03,
00152   0x52, 0x26, 0x44, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03,
00153   0x0c, 0x08, 0x44, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x30, 0x81,
00154   0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
00155   0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02,
00156   0x81, 0x81, 0x00, 0xba, 0x95, 0x99, 0x1e, 0x6e, 0x75, 0x45, 0xb3, 0x24,
00157   0x12, 0x4b, 0xca, 0x02, 0xf8, 0x25, 0x33, 0xde, 0x81, 0x71, 0x65, 0x52,
00158   0x73, 0x15, 0xbb, 0x29, 0xa5, 0xc5, 0x86, 0x6d, 0x40, 0xae, 0xdb, 0x75,
00159   0xd5, 0x59, 0xb9, 0x29, 0x30, 0xb4, 0xac, 0x8f, 0xb4, 0x92, 0x21, 0xb9,
00160   0xe2, 0x4c, 0x61, 0xbd, 0x8e, 0xde, 0xb9, 0x67, 0x94, 0x71, 0x0a, 0x89,
00161   0x28, 0x7c, 0x54, 0x4c, 0x58, 0xd4, 0x5a, 0xff, 0x13, 0x70, 0x9a, 0xf3,
00162   0x9a, 0x32, 0x1e, 0xe4, 0x4b, 0x61, 0x8a, 0x92, 0xe9, 0x74, 0xdf, 0x95,
00163   0xfc, 0xf2, 0x42, 0x3b, 0xf1, 0x62, 0x2d, 0x74, 0xa2, 0xca, 0x44, 0x2c,
00164   0x0b, 0xe5, 0x61, 0xc9, 0x4f, 0x01, 0x28, 0xd6, 0x2b, 0xa6, 0xca, 0x72,
00165   0x89, 0x0d, 0x74, 0xf4, 0xa3, 0xe8, 0xc9, 0xb1, 0xfc, 0x90, 0xae, 0xd6,
00166   0xd8, 0x85, 0xdf, 0xd9, 0xdf, 0x40, 0x68, 0xba, 0xf3, 0x72, 0x05, 0x02,
00167   0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03,
00168   0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xaa, 0x27, 0x1a, 0x6f, 0x88,
00169   0x72, 0x8c, 0x2d, 0x2d, 0xc2, 0x5a, 0xc5, 0x74, 0x82, 0xa5, 0x44, 0xd1,
00170   0x3d, 0xa3, 0x15, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
00171   0x30, 0x16, 0x80, 0x14, 0xaa, 0x27, 0x1a, 0x6f, 0x88, 0x72, 0x8c, 0x2d,
00172   0x2d, 0xc2, 0x5a, 0xc5, 0x74, 0x82, 0xa5, 0x44, 0xd1, 0x3d, 0xa3, 0x15,
00173   0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01,
00174   0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
00175   0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x7d, 0x38, 0x65,
00176   0xbb, 0x6b, 0xbb, 0xde, 0x19, 0xb7, 0xaa, 0xe6, 0x49, 0x5f, 0x9e, 0xe3,
00177   0xa0, 0xc4, 0x67, 0xfc, 0xdf, 0xa5, 0xd8, 0xa6, 0x38, 0xab, 0x5e, 0x98,
00178   0x23, 0xe8, 0x19, 0x22, 0x82, 0x65, 0x2c, 0x5f, 0xee, 0x21, 0x9c, 0x3a,
00179   0xe0, 0xeb, 0xb1, 0x7c, 0xa3, 0x5f, 0x22, 0xf2, 0xaf, 0x08, 0xbe, 0x78,
00180   0x2d, 0x0f, 0xbf, 0xa6, 0x58, 0x7e, 0xf0, 0x2c, 0xec, 0x99, 0x97, 0x63,
00181   0x75, 0x5f, 0x52, 0xff, 0x5f, 0x89, 0x79, 0xf7, 0xbe, 0x46, 0x11, 0x28,
00182   0x82, 0x34, 0xaf, 0x16, 0x3b, 0x36, 0xa3, 0x25, 0x5a, 0x30, 0x28, 0xd9,
00183   0x3b, 0x15, 0xae, 0x8e, 0xf6, 0x49, 0xdd, 0x77, 0x61, 0xa5, 0x76, 0x49,
00184   0xb1, 0xd9, 0xc4, 0xc7, 0x8a, 0xe0, 0x98, 0x78, 0xa3, 0xdd, 0xeb, 0x37,
00185   0x4b, 0x36, 0xab, 0x4d, 0x28, 0xcf, 0x55, 0x6f, 0x0c, 0xa4, 0x15, 0x38,
00186   0x1f, 0xc3, 0x4a, 0x95, 0x62
00187 };
00188 
00189 static const int rootCertificateLength = sizeof(rootCertificate);
00190 
00191 
00192 static int receiveFunc(CYASSL* ssl, char *buf, int sz, void *ctx)
00193 {    
00194     int fd = *(int*)ctx;
00195     fd_set rfds;
00196     FD_ZERO(&rfds);
00197     FD_SET(fd, &rfds);
00198     
00199     int ret = lwip_select(FD_SETSIZE, &rfds, NULL, NULL, NULL);
00200     if(ret <= 0 || !FD_ISSET(fd, &rfds))
00201         return -1;   
00202     return lwip_recv(fd, buf, sz, 0);
00203 }
00204 
00205 static int sendFunc(CYASSL* ssl, char *buf, int sz, void *ctx)
00206 {
00207     int fd = *(int*)ctx;
00208     fd_set wfds;
00209     FD_ZERO(&wfds);
00210     FD_SET(fd, &wfds);
00211     
00212     int ret = lwip_select(FD_SETSIZE, NULL, &wfds, NULL, NULL);
00213     if(ret <= 0 || !FD_ISSET(fd, &wfds))
00214         return -1;   
00215             
00216     return lwip_send(fd, buf, sz, 0);    
00217 }
00218 
00219 const static int HTTPS_PORT = 443;
00220 
00221 TLSServer::TLSServer():
00222 _ssl_ctx(NULL)
00223 {
00224 }
00225 
00226 TLSServer::~TLSServer()
00227 {
00228     
00229 }
00230 
00231 bool TLSServer::init()
00232 {
00233     if (init_socket(SOCK_STREAM) < 0)
00234         return false;
00235     
00236     struct sockaddr_in localHost;
00237     memset(&localHost, 0, sizeof(localHost));
00238     
00239     localHost.sin_family = AF_INET;
00240     localHost.sin_port = htons(HTTPS_PORT);
00241     localHost.sin_addr.s_addr = INADDR_ANY;
00242     
00243     if (lwip_bind(_sock_fd, (const struct sockaddr *) &localHost, sizeof(localHost)) < 0) {
00244         close();
00245         return false;
00246     }
00247     if (lwip_listen(_sock_fd, 4) < 0) {
00248         close();
00249         return false;
00250     }
00251     
00252     CyaSSL_Init();
00253 
00254     CYASSL_METHOD* method = CyaTLSv1_server_method();
00255     if(method == NULL)
00256         return false;
00257 
00258     _ssl_ctx = CyaSSL_CTX_new(method);
00259     if(_ssl_ctx == NULL)
00260         return false;
00261     
00262     CyaSSL_SetIOSend(_ssl_ctx, &sendFunc);
00263     CyaSSL_SetIORecv(_ssl_ctx, &receiveFunc);
00264     CyaSSL_CTX_load_verify_buffer(_ssl_ctx,rootCertificate, rootCertificateLength,SSL_FILETYPE_ASN1);
00265     CyaSSL_CTX_use_certificate_buffer(_ssl_ctx, deviceCertificate, deviceCertificateLength, SSL_FILETYPE_ASN1);
00266     CyaSSL_CTX_use_PrivateKey_buffer(_ssl_ctx, devicePrivateKey, devicePrivateKeyLength, SSL_FILETYPE_ASN1);
00267     
00268 
00269     return true;
00270 }
00271 
00272 bool TLSServer::accept(TLSConnection &con)
00273 {
00274     if(_ssl_ctx == NULL)
00275         return false;
00276         
00277     fd_set fdSet;
00278     FD_ZERO(&fdSet);
00279     FD_SET(_sock_fd, &fdSet);
00280     
00281     
00282     int ret = lwip_select(FD_SETSIZE, &fdSet, NULL, NULL, NULL);
00283     if(ret <= 0 || !FD_ISSET(_sock_fd, &fdSet))
00284         return -1;   
00285                 
00286     con.reset_address();
00287     socklen_t newSockRemoteHostLen = sizeof(con._remoteHost);
00288     int fd = lwip_accept(_sock_fd, (struct sockaddr*) &con._remoteHost, &newSockRemoteHostLen);
00289     if (fd < 0)
00290         return false;
00291     con._sock_fd = fd;
00292     
00293     con._ssl_ctx = _ssl_ctx;
00294     con._ssl = CyaSSL_new(_ssl_ctx);
00295     if(con._ssl == NULL)
00296         return false;
00297     CyaSSL_set_fd(con._ssl, fd);
00298     if(CyaSSL_accept(con._ssl) < 0)
00299     {
00300         CyaSSL_free(con._ssl);
00301         return false;
00302     }
00303 
00304     con._is_connected = true;
00305     return true;
00306 }
00307