From 274cadbe5860ba12d0b54811accd3cae6d524916 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Mon, 14 Aug 2017 19:29:03 +0200 Subject: [PATCH] Don't build SPTPS test programs. --- src/Makefile.am | 17 -- src/sptps_keypair.c | 100 ------------ src/sptps_speed.c | 237 ---------------------------- src/sptps_test.c | 367 -------------------------------------------- 4 files changed, 721 deletions(-) delete mode 100644 src/sptps_keypair.c delete mode 100644 src/sptps_speed.c delete mode 100644 src/sptps_test.c diff --git a/src/Makefile.am b/src/Makefile.am index 11dc219e..07f0bb77 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,11 +1,5 @@ ## Produce this file with automake to get Makefile.in -sbin_PROGRAMS = sptps_test sptps_keypair - -if LINUX -sbin_PROGRAMS += sptps_speed -endif - DEFAULT_INCLUDES = ed25519_SOURCES = \ @@ -121,17 +115,6 @@ libmeshlink_la_SOURCES += \ ed25519/ecdh.c \ ed25519/ecdsa.c \ ed25519/ecdsagen.c -sptps_test_SOURCES += \ - ed25519/ecdh.c \ - ed25519/ecdsa.c -sptps_keypair_SOURCES += \ - ed25519/ecdsagen.c -sptps_speed_SOURCES += \ - ed25519/ecdh.c \ - ed25519/ecdsa.c \ - ed25519/ecdsagen.c - -sptps_speed_LDADD = -lrt LIBS = @LIBS@ diff --git a/src/sptps_keypair.c b/src/sptps_keypair.c deleted file mode 100644 index 94d262d2..00000000 --- a/src/sptps_keypair.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - sptps_test.c -- Simple Peer-to-Peer Security test program - Copyright (C) 2014 Guus Sliepen , - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "system.h" - -#include - -#include "crypto.h" -#include "ecdsagen.h" -#include "utils.h" - -static char *program_name; - -static void usage() { - fprintf(stderr, "Usage: %s [options] private_key_file public_key_file\n\n", program_name); - fprintf(stderr, "Valid options are:\n" - " --help Display this help and exit.\n" - "\n"); - fprintf(stderr, "Report bugs to bugs@meshlink.io.\n"); -} - -static struct option const long_options[] = { - {"help", no_argument, NULL, 1}, - {NULL, 0, NULL, 0} -}; - -int main(int argc, char *argv[]) { - program_name = argv[0]; - int r; - int option_index = 0; - - while((r = getopt_long(argc, argv, "", long_options, &option_index)) != EOF) { - switch(r) { - case 0: /* long option */ - break; - - case '?': /* wrong options */ - usage(); - return 1; - - case 1: /* help */ - usage(); - return 0; - - default: - break; - } - } - - argc -= optind - 1; - argv += optind - 1; - - if(argc != 3) { - fprintf(stderr, "Wrong number of arguments.\n"); - usage(); - return 1; - } - - crypto_init(); - - ecdsa_t *key = ecdsa_generate(); - if(!key) - return 1; - - FILE *fp = fopen(argv[1], "w"); - if(fp) { - ecdsa_write_pem_private_key(key, fp); - fclose(fp); - } else { - fprintf(stderr, "Could not open '%s' for writing: %s\n", argv[1], strerror(errno)); - return 1; - } - - fp = fopen(argv[2], "w"); - if(fp) { - ecdsa_write_pem_public_key(key, fp); - fclose(fp); - } else { - fprintf(stderr, "Could not open '%s' for writing: %s\n", argv[2], strerror(errno)); - return 1; - } - - return 0; -} diff --git a/src/sptps_speed.c b/src/sptps_speed.c deleted file mode 100644 index e91fba62..00000000 --- a/src/sptps_speed.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - sptps_speed.c -- SPTPS benchmark - Copyright (C) 2014 Guus Sliepen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "system.h" - -#include - -#include "crypto.h" -#include "ecdh.h" -#include "ecdsa.h" -#include "ecdsagen.h" -#include "sptps.h" - -// Symbols necessary to link with logger.o -bool send_request(void *c, const char *msg, ...) { - return false; -} -void *mesh; -void *global_log_cb; -int global_log_level; -bool send_meta(void *c, const char *msg, int len) { - return false; -} -char *logfilename = NULL; -struct timeval now; - -static bool send_data(void *handle, uint8_t type, const void *data, size_t len) { - int fd = *(int *)handle; - send(fd, data, len, 0); - return true; -} - -static bool receive_record(void *handle, uint8_t type, const void *data, uint16_t len) { - return true; -} - -static void receive_data(sptps_t *sptps) { - char buf[4096]; - int fd = *(int *)sptps->handle; - size_t len = recv(fd, buf, sizeof(buf), 0); - if(!sptps_receive_data(sptps, buf, len)) - abort(); -} - -struct timespec start; -struct timespec end; -double elapsed; -double rate; -unsigned int count; - -static void clock_start() { - count = 0; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); -} - -static bool clock_countto(double seconds) { - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); - elapsed = end.tv_sec + end.tv_nsec * 1e-9 - start.tv_sec - start.tv_nsec * 1e-9; - if(elapsed < seconds) - return ++count; - - rate = count / elapsed; - return false; -} - -int main(int argc, char *argv[]) { - ecdsa_t *key1, *key2; - ecdh_t *ecdh1, *ecdh2; - sptps_t sptps1, sptps2; - char buf1[4096], buf2[4096], buf3[4096]; - double duration = argc > 1 ? atof(argv[1]) : 10; - - crypto_init(); - - randomize(buf1, sizeof(buf1)); - randomize(buf2, sizeof(buf2)); - randomize(buf3, sizeof(buf3)); - - // Key generation - - fprintf(stderr, "Generating keys for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) - ecdsa_free(ecdsa_generate()); - fprintf(stderr, "%17.2lf op/s\n", rate); - - key1 = ecdsa_generate(); - key2 = ecdsa_generate(); - - // ECDSA signatures - - fprintf(stderr, "ECDSA sign for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) - ecdsa_sign(key1, buf1, 256, buf2); - fprintf(stderr, "%22.2lf op/s\n", rate); - - fprintf(stderr, "ECDSA verify for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) - ecdsa_verify(key1, buf1, 256, buf2); - fprintf(stderr, "%20.2lf op/s\n", rate); - - ecdh1 = ecdh_generate_public(buf1); - fprintf(stderr, "ECDH for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) { - ecdh2 = ecdh_generate_public(buf2); - ecdh_compute_shared(ecdh2, buf1, buf3); - } - fprintf(stderr, "%28.2lf op/s\n", rate); - ecdh_free(ecdh1); - - // SPTPS authentication phase - - int fd[2]; - if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) { - fprintf(stderr, "Could not create a UNIX socket pair: %s\n", strerror(errno)); - return 1; - } - - struct pollfd pfd[2] = {{fd[0], POLLIN}, {fd[1], POLLIN}}; - - fprintf(stderr, "SPTPS/TCP authenticate for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) { - sptps_start(&sptps1, fd + 0, true, false, key1, key2, "sptps_speed", 11, send_data, receive_record); - sptps_start(&sptps2, fd + 1, false, false, key2, key1, "sptps_speed", 11, send_data, receive_record); - while(poll(pfd, 2, 0)) { - if(pfd[0].revents) - receive_data(&sptps1); - if(pfd[1].revents) - receive_data(&sptps2); - } - sptps_stop(&sptps1); - sptps_stop(&sptps2); - } - fprintf(stderr, "%10.2lf op/s\n", rate * 2); - - // SPTPS data - - sptps_start(&sptps1, fd + 0, true, false, key1, key2, "sptps_speed", 11, send_data, receive_record); - sptps_start(&sptps2, fd + 1, false, false, key2, key1, "sptps_speed", 11, send_data, receive_record); - while(poll(pfd, 2, 0)) { - if(pfd[0].revents) - receive_data(&sptps1); - if(pfd[1].revents) - receive_data(&sptps2); - } - fprintf(stderr, "SPTPS/TCP transmit for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) { - if(!sptps_send_record(&sptps1, 0, buf1, 1451)) - abort(); - receive_data(&sptps2); - } - rate *= 2 * 1451 * 8; - if(rate > 1e9) - fprintf(stderr, "%14.2lf Gbit/s\n", rate / 1e9); - else if(rate > 1e6) - fprintf(stderr, "%14.2lf Mbit/s\n", rate / 1e6); - else if(rate > 1e3) - fprintf(stderr, "%14.2lf kbit/s\n", rate / 1e3); - sptps_stop(&sptps1); - sptps_stop(&sptps2); - - // SPTPS datagram authentication phase - - close(fd[0]); - close(fd[1]); - - if(socketpair(AF_UNIX, SOCK_DGRAM, 0, fd)) { - fprintf(stderr, "Could not create a UNIX socket pair: %s\n", strerror(errno)); - return 1; - } - - fprintf(stderr, "SPTPS/UDP authenticate for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) { - sptps_start(&sptps1, fd + 0, true, true, key1, key2, "sptps_speed", 11, send_data, receive_record); - sptps_start(&sptps2, fd + 1, false, true, key2, key1, "sptps_speed", 11, send_data, receive_record); - while(poll(pfd, 2, 0)) { - if(pfd[0].revents) - receive_data(&sptps1); - if(pfd[1].revents) - receive_data(&sptps2); - } - sptps_stop(&sptps1); - sptps_stop(&sptps2); - } - fprintf(stderr, "%10.2lf op/s\n", rate * 2); - - // SPTPS datagram data - - sptps_start(&sptps1, fd + 0, true, true, key1, key2, "sptps_speed", 11, send_data, receive_record); - sptps_start(&sptps2, fd + 1, false, true, key2, key1, "sptps_speed", 11, send_data, receive_record); - while(poll(pfd, 2, 0)) { - if(pfd[0].revents) - receive_data(&sptps1); - if(pfd[1].revents) - receive_data(&sptps2); - } - fprintf(stderr, "SPTPS/UDP transmit for %lg seconds: ", duration); - for(clock_start(); clock_countto(duration);) { - if(!sptps_send_record(&sptps1, 0, buf1, 1451)) - abort(); - receive_data(&sptps2); - } - rate *= 2 * 1451 * 8; - if(rate > 1e9) - fprintf(stderr, "%14.2lf Gbit/s\n", rate / 1e9); - else if(rate > 1e6) - fprintf(stderr, "%14.2lf Mbit/s\n", rate / 1e6); - else if(rate > 1e3) - fprintf(stderr, "%14.2lf kbit/s\n", rate / 1e3); - sptps_stop(&sptps1); - sptps_stop(&sptps2); - - // Clean up - - close(fd[0]); - close(fd[1]); - ecdsa_free(key1); - ecdsa_free(key2); - crypto_exit(); - - return 0; -} diff --git a/src/sptps_test.c b/src/sptps_test.c deleted file mode 100644 index a456bb86..00000000 --- a/src/sptps_test.c +++ /dev/null @@ -1,367 +0,0 @@ -/* - sptps_test.c -- Simple Peer-to-Peer Security test program - Copyright (C) 2014 Guus Sliepen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "system.h" - -#ifdef HAVE_LINUX -#include -#include -#include -#endif - -#include - -#include "crypto.h" -#include "ecdsa.h" -#include "sptps.h" -#include "utils.h" - -// Symbols necessary to link with logger.o -bool send_request(void *c, const char *msg, ...) { - return false; -} -void *mesh; -void *global_log_cb; -int global_log_level; -bool send_meta(void *c, const char *msg, int len) { - return false; -} -char *logfilename = NULL; -struct timeval now; - -static bool verbose; -static bool readonly; -static bool writeonly; -static int in = 0; -static int out = 1; - -static bool send_data(void *handle, uint8_t type, const void *data, size_t len) { - char hex[len * 2 + 1]; - bin2hex(data, hex, len); - if(verbose) - fprintf(stderr, "Sending %d bytes of data:\n%s\n", (int)len, hex); - const int *sock = handle; - if(send(*sock, data, len, 0) != len) - return false; - return true; -} - -static bool receive_record(void *handle, uint8_t type, const void *data, uint16_t len) { - if(verbose) - fprintf(stderr, "Received type %d record of %hu bytes:\n", type, len); - if(!writeonly) - write(out, data, len); - return true; -} - -static struct option const long_options[] = { - {"datagram", no_argument, NULL, 'd'}, - {"quit", no_argument, NULL, 'q'}, - {"readonly", no_argument, NULL, 'r'}, - {"writeonly", no_argument, NULL, 'w'}, - {"packet-loss", required_argument, NULL, 'L'}, - {"replay-window", required_argument, NULL, 'W'}, - {"verbose", required_argument, NULL, 'v'}, - {"help", no_argument, NULL, 1}, - {NULL, 0, NULL, 0} -}; - -const char *program_name; - -static void usage() { - fprintf(stderr, "Usage: %s [options] my_ecdsa_key_file his_ecdsa_key_file [host] port\n\n", program_name); - fprintf(stderr, "Valid options are:\n" - " -d, --datagram Enable datagram mode.\n" - " -q, --quit Quit when EOF occurs on stdin.\n" - " -r, --readonly Only send data from the socket to stdout.\n" -#ifdef HAVE_LINUX - " -t, --tun Use a tun device instead of stdio.\n" -#endif - " -w, --writeonly Only send data from stdin to the socket.\n" - " -L, --packet-loss RATE Fake packet loss of RATE percent.\n" - " -R, --replay-window N Set replay window to N bytes.\n" - " -v, --verbose Display debug messages.\n" - "\n"); - fprintf(stderr, "Report bugs to bugs@meshlink.io.\n"); -} - -int main(int argc, char *argv[]) { - program_name = argv[0]; - bool initiator = false; - bool datagram = false; -#ifdef HAVE_LINUX - bool tun = false; -#endif - int packetloss = 0; - int r; - int option_index = 0; - ecdsa_t *mykey = NULL, *hiskey = NULL; - bool quit = false; - - while((r = getopt_long(argc, argv, "dqrtwL:W:v", long_options, &option_index)) != EOF) { - switch(r) { - case 0: /* long option */ - break; - - case 'd': /* datagram mode */ - datagram = true; - break; - - case 'q': /* close connection on EOF from stdin */ - quit = true; - break; - - case 'r': /* read only */ - readonly = true; - break; - - case 't': /* read only */ -#ifdef HAVE_LINUX - tun = true; -#else - fprintf(stderr, "--tun is only supported on Linux.\n"); - usage(); - return 1; -#endif - break; - - case 'w': /* write only */ - writeonly = true; - break; - - case 'L': /* packet loss rate */ - packetloss = atoi(optarg); - break; - - case 'W': /* replay window size */ - sptps_replaywin = atoi(optarg); - break; - - case 'v': /* be verbose */ - verbose = true; - break; - - case '?': /* wrong options */ - usage(); - return 1; - - case 1: /* help */ - usage(); - return 0; - - default: - break; - } - } - - argc -= optind - 1; - argv += optind - 1; - - if(argc < 4 || argc > 5) { - fprintf(stderr, "Wrong number of arguments.\n"); - usage(); - return 1; - } - - if(argc > 4) - initiator = true; - - srand(time(NULL)); - -#ifdef HAVE_LINUX - if(tun) { - in = out = open("/dev/net/tun", O_RDWR | O_NONBLOCK); - if(in < 0) { - fprintf(stderr, "Could not open tun device: %s\n", strerror(errno)); - return 1; - } - struct ifreq ifr = { - .ifr_flags = IFF_TUN - }; - if(ioctl(in, TUNSETIFF, &ifr)) { - fprintf(stderr, "Could not configure tun interface: %s\n", strerror(errno)); - return 1; - } - ifr.ifr_name[IFNAMSIZ - 1] = 0; - fprintf(stderr, "Using tun interface %s\n", ifr.ifr_name); - } -#endif - -#ifdef HAVE_MINGW - static struct WSAData wsa_state; - if(WSAStartup(MAKEWORD(2, 2), &wsa_state)) - return 1; -#endif - - struct addrinfo *ai, hint; - memset(&hint, 0, sizeof(hint)); - - hint.ai_family = AF_UNSPEC; - hint.ai_socktype = datagram ? SOCK_DGRAM : SOCK_STREAM; - hint.ai_protocol = datagram ? IPPROTO_UDP : IPPROTO_TCP; - hint.ai_flags = initiator ? 0 : AI_PASSIVE; - - if(getaddrinfo(initiator ? argv[3] : NULL, initiator ? argv[4] : argv[3], &hint, &ai) || !ai) { - fprintf(stderr, "getaddrinfo() failed: %s\n", strerror(errno)); - return 1; - } - - int sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); - if(sock < 0) { - fprintf(stderr, "Could not create socket: %s\n", strerror(errno)); - return 1; - } - - int one = 1; - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&one, sizeof(one)); - - if(initiator) { - if(connect(sock, ai->ai_addr, ai->ai_addrlen)) { - fprintf(stderr, "Could not connect to peer: %s\n", strerror(errno)); - return 1; - } - fprintf(stderr, "Connected\n"); - } else { - if(bind(sock, ai->ai_addr, ai->ai_addrlen)) { - fprintf(stderr, "Could not bind socket: %s\n", strerror(errno)); - return 1; - } - - if(!datagram) { - if(listen(sock, 1)) { - fprintf(stderr, "Could not listen on socket: %s\n", strerror(errno)); - return 1; - } - fprintf(stderr, "Listening...\n"); - - sock = accept(sock, NULL, NULL); - if(sock < 0) { - fprintf(stderr, "Could not accept connection: %s\n", strerror(errno)); - return 1; - } - } else { - fprintf(stderr, "Listening...\n"); - - char buf[65536]; - struct sockaddr addr; - socklen_t addrlen = sizeof(addr); - - if(recvfrom(sock, buf, sizeof(buf), MSG_PEEK, &addr, &addrlen) <= 0) { - fprintf(stderr, "Could not read from socket: %s\n", strerror(errno)); - return 1; - } - - if(connect(sock, &addr, addrlen)) { - fprintf(stderr, "Could not accept connection: %s\n", strerror(errno)); - return 1; - } - } - - fprintf(stderr, "Connected\n"); - } - - crypto_init(); - - FILE *fp = fopen(argv[1], "r"); - if(!(mykey = ecdsa_read_pem_private_key(fp))) - return 1; - fclose(fp); - - fp = fopen(argv[2], "r"); - if(!(hiskey = ecdsa_read_pem_public_key(fp))) - return 1; - fclose(fp); - - if(verbose) - fprintf(stderr, "Keys loaded\n"); - - sptps_t s; - if(!sptps_start(&s, &sock, initiator, datagram, mykey, hiskey, "sptps_test", 10, send_data, receive_record)) - return 1; - - while(true) { - if(writeonly && readonly) - break; - - char buf[65535] = ""; - - fd_set fds; - FD_ZERO(&fds); -#ifndef HAVE_MINGW - if(!readonly && s.instate) - FD_SET(in, &fds); -#endif - FD_SET(sock, &fds); - if(select(sock + 1, &fds, NULL, NULL, NULL) <= 0) - return 1; - - if(FD_ISSET(in, &fds)) { - ssize_t len = read(in, buf, sizeof(buf)); - if(len < 0) { - fprintf(stderr, "Could not read from stdin: %s\n", strerror(errno)); - return 1; - } - if(len == 0) { - if(quit) - break; - readonly = true; - continue; - } - if(buf[0] == '#') - s.outseqno = atoi(buf + 1); - if(buf[0] == '^') - sptps_send_record(&s, SPTPS_HANDSHAKE, NULL, 0); - else if(buf[0] == '$') { - sptps_force_kex(&s); - if(len > 1) - sptps_send_record(&s, 0, buf, len); - } else if(!sptps_send_record(&s, buf[0] == '!' ? 1 : 0, buf, (len == 1 && buf[0] == '\n') ? 0 : buf[0] == '*' ? sizeof(buf) : len)) - return 1; - } - - if(FD_ISSET(sock, &fds)) { - ssize_t len = recv(sock, buf, sizeof(buf), 0); - if(len < 0) { - fprintf(stderr, "Could not read from socket: %s\n", strerror(errno)); - return 1; - } - if(len == 0) { - fprintf(stderr, "Connection terminated by peer.\n"); - break; - } - if(verbose) { - char hex[len * 2 + 1]; - bin2hex(buf, hex, len); - fprintf(stderr, "Received %d bytes of data:\n%s\n", (int)len, hex); - } - if(packetloss && (rand() % 100) < packetloss) { - if(verbose) - fprintf(stderr, "Dropped.\n"); - continue; - } - if(!sptps_receive_data(&s, buf, len) && !datagram) - return 1; - } - } - - if(!sptps_stop(&s)) - return 1; - - return 0; -} -- 2.39.2