int test_CyaSSL_Method_Allocators(void) { #ifndef NO_OLD_TLS test_method(CyaSSLv3_server_method(), "CyaSSLv3_server_method()"); test_method(CyaSSLv3_client_method(), "CyaSSLv3_client_method()"); test_method(CyaTLSv1_server_method(), "CyaTLSv1_server_method()"); test_method(CyaTLSv1_client_method(), "CyaTLSv1_client_method()"); test_method(CyaTLSv1_1_server_method(), "CyaTLSv1_1_server_method()"); test_method(CyaTLSv1_1_client_method(), "CyaTLSv1_1_client_method()"); #endif /* NO_OLD_TLS */ test_method(CyaTLSv1_2_server_method(), "CyaTLSv1_2_server_method()"); test_method(CyaTLSv1_2_client_method(), "CyaTLSv1_2_client_method()"); test_method(CyaSSLv23_client_method(), "CyaSSLv23_client_method()"); #ifdef CYASSL_DTLS test_method(CyaDTLSv1_server_method(), "CyaDTLSv1_server_method()"); test_method(CyaDTLSv1_client_method(), "CyaDTLSv1_client_method()"); #endif /* CYASSL_DTLS */ #ifdef OPENSSL_EXTRA test_method2(CyaSSLv2_server_method(), "CyaSSLv2_server_method()"); test_method2(CyaSSLv2_client_method(), "CyaSSLv2_client_method()"); #endif /* OPENSSL_EXTRA */ return TEST_SUCCESS; }
int Server(word16 port) { char msg[MAXSZ]; const char reply[] = "I hear ya fa shizzle!\n"; int n, listenfd, connfd; CYASSL_CTX* ctx; CYASSL* ssl; CyaSSL_Init(); /* create ctx and configure certificates */ if ((ctx = CyaSSL_CTX_new(CyaTLSv1_2_server_method())) == NULL) err_sys("Fatal error : CyaSSL_CTX_new error"); if (CyaSSL_CTX_use_certificate_file(ctx, svrCert, SSL_FILETYPE_PEM) != SSL_SUCCESS) err_sys("can't load server cert file," "Please run from CyaSSL home dir"); if (CyaSSL_CTX_use_PrivateKey_file(ctx, svrKey, SSL_FILETYPE_PEM) != SSL_SUCCESS) err_sys("can't load server key file, " "Please run from CyaSSL home dir"); /*sets the IO callback methods*/ CyaSSL_SetIORecv(ctx, CbIORecv); CyaSSL_SetIOSend(ctx, CbIOSend); tcp_accept(&listenfd, &connfd, NULL, port, 1, 0); if (connfd < 0) { err_sys("Fatal error : accept error"); } else { /* create CYASSL object and respond */ if ((ssl = CyaSSL_new(ctx)) == NULL) err_sys("Fatal error : CyaSSL_new error"); CyaSSL_set_fd(ssl, connfd); memset(msg, 0, MAXSZ); n = CyaSSL_read(ssl, msg, MAXSZ - 1); if (n > 0) { msg[n] = '\0'; printf("Client sent : %s\n", msg); if (CyaSSL_write(ssl, reply, strlen(reply)) > strlen(reply)) err_sys("Fatal error : respond: write error"); } if (n < 0) err_sys("Fatal error :respond: read error"); /* closes the connections after responding */ CyaSSL_shutdown(ssl); CyaSSL_free(ssl); if (close(listenfd) == -1 && close(connfd) == -1) err_sys("Fatal error : close error"); } /* free up memory used by CyaSSL */ CyaSSL_CTX_free(ctx); return 0; }
int main() { /* Create a ctx pointer for our ssl */ CYASSL_CTX* ctx; /* * Creates a socket that uses an internet IP address, * Sets the type to be Stream based (TCP), * 0 means choose the default protocol. */ socklen_t sockfd = socket(AF_INET, SOCK_STREAM, 0); int loopExit = 0; /* 0 = False, 1 = True */ int ret = 0; /* Return value */ /* Server and client socket address structures */ struct sockaddr_in serverAddr, clientAddr; /* Initialize CyaSSL */ CyaSSL_Init(); /* If positive value, the socket is valid */ if (sockfd == -1) { printf("ERROR: failed to create the socket\n"); return EXIT_FAILURE; /* Kill the server with exit status 1 */ } /* create and initialize CYASSL_CTX structure */ if ((ctx = CyaSSL_CTX_new(CyaTLSv1_2_server_method())) == NULL) { fprintf(stderr, "CyaSSL_CTX_new error.\n"); return EXIT_FAILURE; } /* Load server certificate into CYASSL_CTX */ if (CyaSSL_CTX_use_certificate_file(ctx, "../certs/server-cert.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading certs/server-cert.pem, please check" "the file.\n"); return EXIT_FAILURE; } /* Load server key into CYASSL_CTX */ if (CyaSSL_CTX_use_PrivateKey_file(ctx, "../certs/server-key.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading certs/server-key.pem, please check" "the file.\n"); return EXIT_FAILURE; } /* Initialize the server address struct to zero */ memset((char *)&serverAddr, 0, sizeof(serverAddr)); /* Fill the server's address family */ serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(DEFAULT_PORT); /* Attach the server socket to our port */ if (bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) { printf("ERROR: failed to bind\n"); return EXIT_FAILURE; } printf("Waiting for a connection...\n"); /* Continuously accept connects while not currently in an active connection or told to quit */ while (loopExit == 0) { /* listen for a new connection, allow 5 pending connections */ ret = listen(sockfd, 5); if (ret == 0) { /* Accept client connections and read from them */ loopExit = AcceptAndRead(ctx, sockfd, clientAddr); } } CyaSSL_CTX_free(ctx); /* Free CYASSL_CTX */ CyaSSL_Cleanup(); /* Free CyaSSL */ return EXIT_SUCCESS; }