1a370f2d763a3a4bd7be5817f889f46fc8c5e20e
[gpxe.git] / src / crypto / framework.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <sys/socket.h>
5 #include <netinet/in.h>
6 #include <netdb.h>
7 #include "ssl.h"
8
9 int main(int argc, char *argv[])
10 {
11   SSL_t ssl;
12   int sockfd, portno, rc;
13   struct sockaddr_in serv_addr;
14   struct hostent *server;
15
16   portno = 443;
17   sockfd = socket(AF_INET,SOCK_STREAM,0);
18   if(sockfd<0){
19     fprintf(stderr,"Error creating socket\n");
20     exit(sockfd);
21   }
22
23   server = gethostbyname(argv[1]);
24   if(server==NULL){
25     fprintf(stderr,"Error looking up host %s\n",argv[1]);
26     exit(1);
27   }
28
29   /**
30    *matrixSslOpen()
31    *matrixSslReadKeys()
32    **/
33   printf("Calling CreateSSLHello()\n");
34   rc = CreateSSLHello(&ssl);
35   printf("Finished calling CreateSSLHello()\n");
36
37   bzero((char *) &serv_addr, sizeof(serv_addr));
38   serv_addr.sin_family = AF_INET;
39   bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
40   serv_addr.sin_port = htons(portno);
41   if(connect(sockfd,(struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
42     fprintf(stderr,"ERROR connecting to server\n");
43     exit(1);
44   }
45
46   PrintSSLPacket(&ssl);
47
48   printf("Write ssl.buffer\n");
49   write(sockfd,ssl.buffer,ssl.length);
50   printf("Finished writing\n");
51   ssl.length = read(sockfd,ssl.buffer,ssl.max_size);
52   ReadSSLHello(&ssl);
53
54   /**
55    *matrixSslNewSession()
56    *matrixSslSetCetValidator()
57    *encodeSslHandshake()
58
59    *write handshake buffer
60
61    *readSslResponse() <-+
62                         |
63    *read return code    |-- similar/same function??
64                         |
65    *sslEncode()         |
66    *sslDecode() <-------+
67    
68    *encodeSslCloseAlert()
69    
70    *write close alert buffer
71    **/
72    close(sockfd);
73
74   /**
75    *sslClose()
76    * -free connection
77    * -free keys
78    * -close pki interface
79    **/
80
81   return 0;
82 }