diff options
| author | Derek Pryor | 2006-07-17 18:38:20 +0200 |
|---|---|---|
| committer | Derek Pryor | 2006-07-17 18:38:20 +0200 |
| commit | e71098a6525c84c37ed1567d6eb8935d39c5c28e (patch) | |
| tree | 7803db44fd0370cb5f385f8f4a5551b9edefd9cf /src/crypto/framework.c | |
| parent | Fix creation of the htype field; the ll_proto field from which it is (diff) | |
| download | ipxe-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.c | 82 |
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; +} |
