I just got Mr. Sanchez OpenSSL port to PDA (http://karajan.it.uc3m.es/~pervasive/wce_lite_compat/) – and it works great! I have a simple SSL Client in C++. Now I want to convert that to C#. I assume(???) that I would use the two DLLs but libeay32.dll and ssleay32.dll that I now have on the PDA. I know how to use simple dlls from C++ in C# but I am having trouble figuring out how to convert this more complicated program.  Any help would be greatly!!! Appretiated

 

A simple app (which I got a lot from a great source on the web!) in C++ posts vars to a server and works fine – now to get it into C# (I can get the C++ generic code translated OK it is just how do I get at the OpenSSL stuff like for example:  SSL_load_error_strings();

 

#include "stdafx.h"

#include <stdio.h>

#include <memory.h>

#include <winsock2.h>

#include <openssl/ssl.h>

#include <openssl/err.h>

 

int _tmain(int argc, _TCHAR* argv[])

{

      char buff1[65536];

      char buff2[65536];

      char head[1024];

      char tmpstr[256];

 

      //Regular (Windows) socket stuff

      int sock;

      struct sockaddr_in sa;

      WSADATA myWSAData;

 

      //SSL specific stuff

      SSL_METHOD *meth = NULL;

      SSL_CTX *ctx = NULL;

      SSL *ssl = NULL;

 

      //Create POST body.

      strcpy(buff1, "body");

 

      //Create POST header

      char data[40];

      strcpy(data, "var1=test1&var2=test2");

      strcpy(head, "POST /testreceiver/receiver.aspx HTTP/1.0\r\n");

      strcat(head, "Host: myserver.com\r\n");

      strcat(head, "Content-Type: application/x-www-form-urlencoded\r\n");

      strcat(head, "Content-Length: ");

      sprintf(tmpstr, "%d", strlen(data));

      strcat(head, tmpstr);

      strcat(head, "\r\n");

      strcat(head, "Referer: http://dev2/\r\n");

      strcat(head, "\r\n");

      strcat(head, data);

      strcat(head, "\r\n\r\n");

     

      //Connect socket

      WSAStartup(MAKEWORD(2,2), &myWSAData);

      sock = socket(AF_INET, SOCK_STREAM, 0);

      memset (&sa, '\0', sizeof(sa));

      sa.sin_family = AF_INET;

      sa.sin_addr.s_addr = inet_addr("64.140.217.122");

      sa.sin_port = htons(443);

      connect(sock, (struct sockaddr*) &sa, sizeof(sa));

 

      //Establish SSL

      SSL_load_error_strings();

      SSL_library_init();

      meth = TLSv1_client_method();

      ctx = SSL_CTX_new(meth);

      ssl = SSL_new(ctx);

      SSL_set_fd(ssl, sock);

 

      //See section 5 of

//http://www.rtfm.com/openssl-examples/part2.pdf

      //We can get a list of supported ciphers using C:\OpenSSL\bin>openssl ciphers

      SSL_set_cipher_list(ssl, "-a DES-CBC3-SHA");    //TLS_RSA_WITH_3DES_EDE_CBC_SHA

                                                      //see http://www.openssl.org/docs/apps/ciphers.html

 

      SSL_connect(ssl);

 

      //POST

      SSL_write(ssl, head, strlen(head));

 

      memset(buff2, 0x00, sizeof(buff2)); //init recv buffer

      SSL_read(ssl, buff2, sizeof(buff2) - 1); //read server response

      printf("%s\n", buff2);                               

     

      //Clean up

      SSL_shutdown(ssl);

      SSL_free(ssl);

      SSL_CTX_free(ctx);

      ERR_free_strings();

 

      closesocket(sock);

      WSACleanup();

 

      //Keep cmd window open until user hits <return>

      cin.get();

 

      return 0;

}

 

 

 

Reply via email to