summaryrefslogtreecommitdiffstats
path: root/src/crypto/framework.c
diff options
context:
space:
mode:
authorDerek Pryor2006-07-17 18:38:20 +0200
committerDerek Pryor2006-07-17 18:38:20 +0200
commite71098a6525c84c37ed1567d6eb8935d39c5c28e (patch)
tree7803db44fd0370cb5f385f8f4a5551b9edefd9cf /src/crypto/framework.c
parentFix creation of the htype field; the ll_proto field from which it is (diff)
downloadipxe-e71098a6525c84c37ed1567d6eb8935d39c5c28e.tar.gz
ipxe-e71098a6525c84c37ed1567d6eb8935d39c5c28e.tar.xz
ipxe-e71098a6525c84c37ed1567d6eb8935d39c5c28e.zip
The first packet (ClientHello Handshake) can be constructed and is accepted
by SSL servers. Framework.c allows me to test the library against a given https server.
Diffstat (limited to 'src/crypto/framework.c')
-rw-r--r--src/crypto/framework.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/crypto/framework.c b/src/crypto/framework.c
new file mode 100644
index 000000000..1a370f2d7
--- /dev/null
+++ b/src/crypto/framework.c
@@ -0,0 +1,82 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include "ssl.h"
+
+int main(int argc, char *argv[])
+{
+ SSL_t ssl;
+ int sockfd, portno, rc;
+ struct sockaddr_in serv_addr;
+ struct hostent *server;
+
+ portno = 443;
+ sockfd = socket(AF_INET,SOCK_STREAM,0);
+ if(sockfd<0){
+ fprintf(stderr,"Error creating socket\n");
+ exit(sockfd);
+ }
+
+ server = gethostbyname(argv[1]);
+ if(server==NULL){
+ fprintf(stderr,"Error looking up host %s\n",argv[1]);
+ exit(1);
+ }
+
+ /**
+ *matrixSslOpen()
+ *matrixSslReadKeys()
+ **/
+ printf("Calling CreateSSLHello()\n");
+ rc = CreateSSLHello(&ssl);
+ printf("Finished calling CreateSSLHello()\n");
+
+ bzero((char *) &serv_addr, sizeof(serv_addr));
+ serv_addr.sin_family = AF_INET;
+ bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
+ serv_addr.sin_port = htons(portno);
+ if(connect(sockfd,(struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
+ fprintf(stderr,"ERROR connecting to server\n");
+ exit(1);
+ }
+
+ PrintSSLPacket(&ssl);
+
+ printf("Write ssl.buffer\n");
+ write(sockfd,ssl.buffer,ssl.length);
+ printf("Finished writing\n");
+ ssl.length = read(sockfd,ssl.buffer,ssl.max_size);
+ ReadSSLHello(&ssl);
+
+ /**
+ *matrixSslNewSession()
+ *matrixSslSetCetValidator()
+ *encodeSslHandshake()
+
+ *write handshake buffer
+
+ *readSslResponse() <-+
+ |
+ *read return code |-- similar/same function??
+ |
+ *sslEncode() |
+ *sslDecode() <-------+
+
+ *encodeSslCloseAlert()
+
+ *write close alert buffer
+ **/
+ close(sockfd);
+
+ /**
+ *sslClose()
+ * -free connection
+ * -free keys
+ * -close pki interface
+ **/
+
+ return 0;
+}