spiped 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/ext/spiped/extconf.rb +3 -0
  3. data/ext/spiped/spiped-source/BUILDING +46 -0
  4. data/ext/spiped/spiped-source/CHANGELOG +44 -0
  5. data/ext/spiped/spiped-source/COPYRIGHT +33 -0
  6. data/ext/spiped/spiped-source/Makefile +47 -0
  7. data/ext/spiped/spiped-source/Makefile.POSIX +27 -0
  8. data/ext/spiped/spiped-source/Makefile.inc +20 -0
  9. data/ext/spiped/spiped-source/Makefile.prog +23 -0
  10. data/ext/spiped/spiped-source/POSIX/README +10 -0
  11. data/ext/spiped/spiped-source/POSIX/posix-cflags.sh +10 -0
  12. data/ext/spiped/spiped-source/POSIX/posix-clock_realtime.c +3 -0
  13. data/ext/spiped/spiped-source/POSIX/posix-l.c +1 -0
  14. data/ext/spiped/spiped-source/POSIX/posix-l.sh +14 -0
  15. data/ext/spiped/spiped-source/POSIX/posix-msg_nosignal.c +3 -0
  16. data/ext/spiped/spiped-source/README +198 -0
  17. data/ext/spiped/spiped-source/STYLE +151 -0
  18. data/ext/spiped/spiped-source/lib/dnsthread/dnsthread.c +464 -0
  19. data/ext/spiped/spiped-source/lib/dnsthread/dnsthread.h +45 -0
  20. data/ext/spiped/spiped-source/libcperciva/alg/sha256.c +442 -0
  21. data/ext/spiped/spiped-source/libcperciva/alg/sha256.h +95 -0
  22. data/ext/spiped/spiped-source/libcperciva/cpusupport/Build/cpusupport-X86-AESNI.c +13 -0
  23. data/ext/spiped/spiped-source/libcperciva/cpusupport/Build/cpusupport-X86-CPUID.c +8 -0
  24. data/ext/spiped/spiped-source/libcperciva/cpusupport/Build/cpusupport.sh +37 -0
  25. data/ext/spiped/spiped-source/libcperciva/cpusupport/cpusupport.h +63 -0
  26. data/ext/spiped/spiped-source/libcperciva/cpusupport/cpusupport_x86_aesni.c +30 -0
  27. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_aes.c +166 -0
  28. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_aes.h +31 -0
  29. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_aes_aesni.c +229 -0
  30. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_aes_aesni.h +31 -0
  31. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_aesctr.c +124 -0
  32. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_aesctr.h +41 -0
  33. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_dh.c +293 -0
  34. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_dh.h +43 -0
  35. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_dh_group14.c +46 -0
  36. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_dh_group14.h +9 -0
  37. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_entropy.c +215 -0
  38. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_entropy.h +14 -0
  39. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_verify_bytes.c +21 -0
  40. data/ext/spiped/spiped-source/libcperciva/crypto/crypto_verify_bytes.h +14 -0
  41. data/ext/spiped/spiped-source/libcperciva/datastruct/elasticarray.c +276 -0
  42. data/ext/spiped/spiped-source/libcperciva/datastruct/elasticarray.h +167 -0
  43. data/ext/spiped/spiped-source/libcperciva/datastruct/mpool.h +85 -0
  44. data/ext/spiped/spiped-source/libcperciva/datastruct/ptrheap.c +334 -0
  45. data/ext/spiped/spiped-source/libcperciva/datastruct/ptrheap.h +89 -0
  46. data/ext/spiped/spiped-source/libcperciva/datastruct/timerqueue.c +241 -0
  47. data/ext/spiped/spiped-source/libcperciva/datastruct/timerqueue.h +60 -0
  48. data/ext/spiped/spiped-source/libcperciva/events/events.c +203 -0
  49. data/ext/spiped/spiped-source/libcperciva/events/events.h +106 -0
  50. data/ext/spiped/spiped-source/libcperciva/events/events_immediate.c +149 -0
  51. data/ext/spiped/spiped-source/libcperciva/events/events_internal.h +95 -0
  52. data/ext/spiped/spiped-source/libcperciva/events/events_network.c +347 -0
  53. data/ext/spiped/spiped-source/libcperciva/events/events_network_selectstats.c +106 -0
  54. data/ext/spiped/spiped-source/libcperciva/events/events_timer.c +273 -0
  55. data/ext/spiped/spiped-source/libcperciva/network/network.h +95 -0
  56. data/ext/spiped/spiped-source/libcperciva/network/network_accept.c +103 -0
  57. data/ext/spiped/spiped-source/libcperciva/network/network_connect.c +258 -0
  58. data/ext/spiped/spiped-source/libcperciva/network/network_read.c +155 -0
  59. data/ext/spiped/spiped-source/libcperciva/network/network_write.c +188 -0
  60. data/ext/spiped/spiped-source/libcperciva/util/asprintf.c +49 -0
  61. data/ext/spiped/spiped-source/libcperciva/util/asprintf.h +16 -0
  62. data/ext/spiped/spiped-source/libcperciva/util/daemonize.c +134 -0
  63. data/ext/spiped/spiped-source/libcperciva/util/daemonize.h +10 -0
  64. data/ext/spiped/spiped-source/libcperciva/util/entropy.c +76 -0
  65. data/ext/spiped/spiped-source/libcperciva/util/entropy.h +13 -0
  66. data/ext/spiped/spiped-source/libcperciva/util/imalloc.h +33 -0
  67. data/ext/spiped/spiped-source/libcperciva/util/insecure_memzero.c +19 -0
  68. data/ext/spiped/spiped-source/libcperciva/util/insecure_memzero.h +33 -0
  69. data/ext/spiped/spiped-source/libcperciva/util/monoclock.c +52 -0
  70. data/ext/spiped/spiped-source/libcperciva/util/monoclock.h +14 -0
  71. data/ext/spiped/spiped-source/libcperciva/util/noeintr.c +54 -0
  72. data/ext/spiped/spiped-source/libcperciva/util/noeintr.h +14 -0
  73. data/ext/spiped/spiped-source/libcperciva/util/sock.c +472 -0
  74. data/ext/spiped/spiped-source/libcperciva/util/sock.h +56 -0
  75. data/ext/spiped/spiped-source/libcperciva/util/sock_internal.h +14 -0
  76. data/ext/spiped/spiped-source/libcperciva/util/sock_util.c +271 -0
  77. data/ext/spiped/spiped-source/libcperciva/util/sock_util.h +51 -0
  78. data/ext/spiped/spiped-source/libcperciva/util/sysendian.h +146 -0
  79. data/ext/spiped/spiped-source/libcperciva/util/warnp.c +76 -0
  80. data/ext/spiped/spiped-source/libcperciva/util/warnp.h +59 -0
  81. data/ext/spiped/spiped-source/proto/proto_conn.c +362 -0
  82. data/ext/spiped/spiped-source/proto/proto_conn.h +25 -0
  83. data/ext/spiped/spiped-source/proto/proto_crypt.c +396 -0
  84. data/ext/spiped/spiped-source/proto/proto_crypt.h +102 -0
  85. data/ext/spiped/spiped-source/proto/proto_handshake.c +330 -0
  86. data/ext/spiped/spiped-source/proto/proto_handshake.h +30 -0
  87. data/ext/spiped/spiped-source/proto/proto_pipe.c +202 -0
  88. data/ext/spiped/spiped-source/proto/proto_pipe.h +23 -0
  89. data/ext/spiped/spiped-source/spipe/Makefile +90 -0
  90. data/ext/spiped/spiped-source/spipe/README +24 -0
  91. data/ext/spiped/spiped-source/spipe/main.c +178 -0
  92. data/ext/spiped/spiped-source/spipe/pushbits.c +101 -0
  93. data/ext/spiped/spiped-source/spipe/pushbits.h +10 -0
  94. data/ext/spiped/spiped-source/spipe/spipe.1 +60 -0
  95. data/ext/spiped/spiped-source/spiped/Makefile +98 -0
  96. data/ext/spiped/spiped-source/spiped/README +62 -0
  97. data/ext/spiped/spiped-source/spiped/dispatch.c +214 -0
  98. data/ext/spiped/spiped-source/spiped/dispatch.h +27 -0
  99. data/ext/spiped/spiped-source/spiped/main.c +267 -0
  100. data/ext/spiped/spiped-source/spiped/spiped.1 +112 -0
  101. data/lib/spiped.rb +3 -0
  102. metadata +143 -0
@@ -0,0 +1,23 @@
1
+ #ifndef _PROTO_PIPE_H_
2
+ #define _PROTO_PIPE_H_
3
+
4
+ struct proto_keys;
5
+
6
+ /**
7
+ * proto_pipe(s_in, s_out, decr, k, status, callback, cookie):
8
+ * Read bytes from ${s_in} and write them to ${s_out}. If ${decr} is non-zero
9
+ * then use ${k} to decrypt the bytes; otherwise use ${k} to encrypt them.
10
+ * If EOF is read, set ${status} to 0, and if an error is encountered set
11
+ * ${status} to -1; in either case, invoke ${callback}(${cookie}). Return a
12
+ * cookie which can be passed to proto_pipe_cancel.
13
+ */
14
+ void * proto_pipe(int, int, int, struct proto_keys *, int *,
15
+ int (*)(void *), void *);
16
+
17
+ /**
18
+ * proto_pipe_cancel(cookie):
19
+ * Shut down the pipe created by proto_pipe for which ${cookie} was returned.
20
+ */
21
+ void proto_pipe_cancel(void *);
22
+
23
+ #endif /* !_PROTO_PIPE_H_ */
@@ -0,0 +1,90 @@
1
+ # Program name.
2
+ PROG = spipe
3
+ MAN1 = ${PROG}.1
4
+
5
+ # Libraries which are sometimes merged into libc
6
+ LDADD = -lrt
7
+ #LDADD += -lxnet # Missing on FreeBSD
8
+
9
+ # Library code required
10
+ LDADD_REQ = -lcrypto
11
+ LDADD_REQ += -lpthread
12
+
13
+ # spipe code
14
+ SRCS = main.c
15
+ SRCS += pushbits.c
16
+
17
+ # spipe protocol
18
+ .PATH.c : ../proto
19
+ SRCS += proto_conn.c
20
+ SRCS += proto_crypt.c
21
+ SRCS += proto_handshake.c
22
+ SRCS += proto_pipe.c
23
+ IDIRS += -I ../proto
24
+
25
+ # Fundamental algorithms
26
+ .PATH.c : ../libcperciva/alg
27
+ SRCS += sha256.c
28
+ IDIRS += -I ../libcperciva/alg
29
+
30
+ # Data structures
31
+ .PATH.c : ../libcperciva/datastruct
32
+ SRCS += elasticarray.c
33
+ SRCS += ptrheap.c
34
+ SRCS += timerqueue.c
35
+ IDIRS += -I ../libcperciva/datastruct
36
+
37
+ # Utility functions
38
+ .PATH.c : ../libcperciva/util
39
+ SRCS += asprintf.c
40
+ SRCS += entropy.c
41
+ SRCS += insecure_memzero.c
42
+ SRCS += monoclock.c
43
+ SRCS += noeintr.c
44
+ SRCS += sock.c
45
+ SRCS += warnp.c
46
+ IDIRS += -I ../libcperciva/util
47
+
48
+ # CPU features detection
49
+ .PATH.c : ../libcperciva/cpusupport
50
+ SRCS += cpusupport_x86_aesni.c
51
+ IDIRS += -I ../libcperciva/cpusupport
52
+
53
+ # Event loop
54
+ .PATH.c : ../libcperciva/events
55
+ SRCS += events_immediate.c
56
+ SRCS += events_network.c
57
+ SRCS += events_network_selectstats.c
58
+ SRCS += events_timer.c
59
+ SRCS += events.c
60
+ IDIRS += -I ../libcperciva/events
61
+
62
+ # Event-driven networking
63
+ .PATH.c : ../libcperciva/network
64
+ SRCS += network_connect.c
65
+ SRCS += network_read.c
66
+ SRCS += network_write.c
67
+ IDIRS += -I ../libcperciva/network
68
+
69
+ # Crypto code
70
+ .PATH.c : ../libcperciva/crypto
71
+ SRCS += crypto_aes.c
72
+ SRCS += crypto_aes_aesni.c
73
+ SRCS += crypto_aesctr.c
74
+ SRCS += crypto_dh.c
75
+ SRCS += crypto_dh_group14.c
76
+ SRCS += crypto_entropy.c
77
+ SRCS += crypto_verify_bytes.c
78
+ IDIRS += -I ../libcperciva/crypto
79
+
80
+ crypto_aes_aesni.o: crypto_aes_aesni.c cpusupport-config.h
81
+ . ./cpusupport-config.h; ${CC} ${CFLAGS} $${CFLAGS_X86_AESNI} -c $< -o $@
82
+ cflags-crypto_aes_aesni.o=$${CFLAGS_X86_AESNI}
83
+
84
+ # Debugging options
85
+ CFLAGS += -g
86
+ #CFLAGS += -DNDEBUG
87
+ #CFLAGS += -DDEBUG
88
+ #CFLAGS += -pg
89
+
90
+ .include <bsd.prog.mk>
@@ -0,0 +1,24 @@
1
+ spipe usage
2
+ ===========
3
+
4
+ usage: spipe -t <target socket> -k <key file> [-f | -g] [-j]
5
+ [-o <connection timeout>]
6
+
7
+ Options:
8
+ -t <target socket>
9
+ Address to which spipe should connect.
10
+ -k <key file>
11
+ Use the provided key file to authenticate and encrypt.
12
+ -f
13
+ Use fast/weak handshaking: This reduces the CPU time spent in the
14
+ initial connection setup, at the expense of losing perfect forward
15
+ secrecy.
16
+ -g
17
+ Require perfect forward secrecy by dropping connections if the other
18
+ host is using the -f option.
19
+ -j
20
+ Disable transport layer keep-alives. (By default they are enabled.)
21
+ -o <connection timeout>
22
+ Timeout, in seconds, after which an attempt to connect to the target
23
+ or a protocol handshake will be aborted (and the connection dropped)
24
+ if not completed. Defaults to 5s.
@@ -0,0 +1,178 @@
1
+ #include <sys/socket.h>
2
+
3
+ #include <inttypes.h>
4
+ #include <stdio.h>
5
+ #include <stdlib.h>
6
+ #include <string.h>
7
+ #include <unistd.h>
8
+
9
+ #include "asprintf.h"
10
+ #include "events.h"
11
+ #include "sha256.h"
12
+ #include "sock.h"
13
+ #include "warnp.h"
14
+
15
+ #include "proto_conn.h"
16
+ #include "proto_crypt.h"
17
+
18
+ #include "pushbits.h"
19
+
20
+ static int
21
+ callback_conndied(void * cookie)
22
+ {
23
+
24
+ (void)cookie; /* UNUSED */
25
+
26
+ /* We're done! */
27
+ exit(0);
28
+ }
29
+
30
+ static void
31
+ usage(void)
32
+ {
33
+
34
+ fprintf(stderr, "usage: spipe -t <target socket> -k <key file>"
35
+ " [-f | -g] [-j] [-o <connection timeout>]\n");
36
+ exit(1);
37
+ }
38
+
39
+ /* Simplify error-handling in command-line parse loop. */
40
+ #define OPT_EPARSE(opt, arg) do { \
41
+ warnp("Error parsing argument: -%c %s", opt, arg); \
42
+ exit(1); \
43
+ } while (0)
44
+
45
+ int
46
+ main(int argc, char * argv[])
47
+ {
48
+ /* Command-line parameters. */
49
+ int opt_f = 0;
50
+ int opt_g = 0;
51
+ int opt_j = 0;
52
+ const char * opt_k = NULL;
53
+ double opt_o = 0.0;
54
+ const char * opt_t = NULL;
55
+
56
+ /* Working variables. */
57
+ struct sock_addr ** sas_t;
58
+ struct proto_secret * K;
59
+ int ch;
60
+ int s[2];
61
+
62
+ WARNP_INIT;
63
+
64
+ /* Parse the command line. */
65
+ while ((ch = getopt(argc, argv, "fgjk:o:t:")) != -1) {
66
+ switch (ch) {
67
+ case 'f':
68
+ if (opt_f)
69
+ usage();
70
+ opt_f = 1;
71
+ break;
72
+ case 'g':
73
+ if (opt_g)
74
+ usage();
75
+ opt_g = 1;
76
+ break;
77
+ case 'j':
78
+ if (opt_j)
79
+ usage();
80
+ opt_j = 1;
81
+ break;
82
+ case 'k':
83
+ if (opt_k)
84
+ usage();
85
+ opt_k = optarg;
86
+ break;
87
+ case 'o':
88
+ if (opt_o != 0.0)
89
+ usage();
90
+ if ((opt_o = strtod(optarg, NULL)) == 0.0) {
91
+ warn0("Invalid option: -o %s", optarg);
92
+ exit(1);
93
+ }
94
+ break;
95
+ case 't':
96
+ if (opt_t)
97
+ usage();
98
+ opt_t = optarg;
99
+ break;
100
+ default:
101
+ usage();
102
+ }
103
+ }
104
+
105
+ /* We should have processed all the arguments. */
106
+ if (argc != optind)
107
+ usage();
108
+
109
+ /* Set defaults. */
110
+ if (opt_o == 0.0)
111
+ opt_o = 5.0;
112
+
113
+ /* Sanity-check options. */
114
+ if (opt_f && opt_g)
115
+ usage();
116
+ if (opt_k == NULL)
117
+ usage();
118
+ if (!(opt_o > 0.0))
119
+ usage();
120
+ if (opt_t == NULL)
121
+ usage();
122
+
123
+ /* Resolve target address. */
124
+ if ((sas_t = sock_resolve(opt_t)) == NULL) {
125
+ warnp("Error resolving socket address: %s", opt_t);
126
+ exit(1);
127
+ }
128
+ if (sas_t[0] == NULL) {
129
+ warn0("No addresses found for %s", opt_t);
130
+ exit(1);
131
+ }
132
+
133
+ /* Load the keying data. */
134
+ if ((K = proto_crypt_secret(opt_k)) == NULL) {
135
+ warnp("Error reading shared secret");
136
+ exit(1);
137
+ }
138
+
139
+ /*
140
+ * Create a socket pair to push bits through. The spiped protocol
141
+ * code expects to be handed a socket to read/write bits to, and our
142
+ * stdin/stdout might not be sockets (in fact, almost certainly aren't
143
+ * sockets); so we'll hand one end of the socket pair to the spiped
144
+ * protocol code and shuttle bits between stdin/stdout and the other
145
+ * end of the socket pair ourselves.
146
+ */
147
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, s)) {
148
+ warnp("socketpair");
149
+ exit(1);
150
+ }
151
+
152
+ /* Set up a connection. */
153
+ if (proto_conn_create(s[1], sas_t, 0, opt_f, opt_g, opt_j, K, opt_o,
154
+ callback_conndied, NULL)) {
155
+ warnp("Could not set up connection");
156
+ exit(1);
157
+ }
158
+
159
+ /* Push bits from stdin into the socket. */
160
+ if (pushbits(STDIN_FILENO, s[0]) || pushbits(s[0], STDOUT_FILENO)) {
161
+ warnp("Could not push bits");
162
+ exit(1);
163
+ }
164
+
165
+ /* Loop until we die. */
166
+ do {
167
+ if (events_run()) {
168
+ warnp("Error running event loop");
169
+ exit(1);
170
+ }
171
+ } while (1);
172
+
173
+ /* NOTREACHED */
174
+ /*
175
+ * If we could reach this point, we would free memory, close sockets,
176
+ * and otherwise clean up here.
177
+ */
178
+ }
@@ -0,0 +1,101 @@
1
+ #include <sys/socket.h>
2
+
3
+ #include <pthread.h>
4
+ #include <stdint.h>
5
+ #include <stdio.h>
6
+ #include <stdlib.h>
7
+ #include <string.h>
8
+ #include <unistd.h>
9
+
10
+ #include "noeintr.h"
11
+ #include "warnp.h"
12
+
13
+ #include "pushbits.h"
14
+
15
+ struct push {
16
+ uint8_t buf[BUFSIZ];
17
+ int in;
18
+ int out;
19
+ };
20
+
21
+ /* Bit-pushing thread. */
22
+ static void *
23
+ workthread(void * cookie)
24
+ {
25
+ struct push * P = cookie;
26
+ ssize_t readlen;
27
+
28
+ /* Infinite loop unless we hit EOF or an error. */
29
+ do {
30
+ /* Read data and die on error. */
31
+ if ((readlen = read(P->in, P->buf, BUFSIZ)) == -1) {
32
+ if (errno == EINTR)
33
+ continue;
34
+ warnp("Error reading");
35
+ exit(1);
36
+ }
37
+
38
+ /* If we hit EOF, exit the loop. */
39
+ if (readlen == 0)
40
+ break;
41
+
42
+ /* Write the data back out. */
43
+ if (noeintr_write(P->out, &P->buf, readlen) != readlen) {
44
+ warnp("Error writing");
45
+ exit(1);
46
+ }
47
+ } while (1);
48
+
49
+ /* Close the descriptor we hit EOF on. */
50
+ close(P->in);
51
+
52
+ /*
53
+ * Try to shut down the descriptor we're writing to. Ignore ENOTSOCK,
54
+ * since it might, indeed, not be a socket.
55
+ */
56
+ if (shutdown(P->out, SHUT_WR)) {
57
+ if (errno != ENOTSOCK) {
58
+ warnp("Error shutting down socket");
59
+ exit(1);
60
+ }
61
+ }
62
+
63
+ /* Free our parameters. */
64
+ free(P);
65
+
66
+ /* We're done. */
67
+ return (NULL);
68
+ }
69
+
70
+ /**
71
+ * pushbits(in, out):
72
+ * Create a thread which copies data from ${in} to ${out}.
73
+ */
74
+ int
75
+ pushbits(int in, int out)
76
+ {
77
+ struct push * P;
78
+ pthread_t thr;
79
+ int rc;
80
+
81
+ /* Allocate structure. */
82
+ if ((P = malloc(sizeof(struct push))) == NULL)
83
+ goto err0;
84
+ P->in = in;
85
+ P->out = out;
86
+
87
+ /* Create thread. */
88
+ if ((rc = pthread_create(&thr, NULL, workthread, P)) != 0) {
89
+ warn0("pthread_create: %s", strerror(rc));
90
+ goto err1;
91
+ }
92
+
93
+ /* Success! */
94
+ return (0);
95
+
96
+ err1:
97
+ free(P);
98
+ err0:
99
+ /* Failure! */
100
+ return (-1);
101
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef _PUSHBITS_H_
2
+ #define _PUSHBITS_H_
3
+
4
+ /**
5
+ * pushbits(in, out):
6
+ * Create a thread which copies data from ${in} to ${out}.
7
+ */
8
+ int pushbits(int, int);
9
+
10
+ #endif /* !_PUSHBITS_H_ */
@@ -0,0 +1,60 @@
1
+ .\"-
2
+ .\" Copyright (c) 2012 Andreas Olsson
3
+ .\"
4
+ .\" Redistribution and use in source and binary forms, with or without
5
+ .\" modification, are permitted provided that the following conditions
6
+ .\" are met:
7
+ .\" 1. Redistributions of source code must retain the above copyright
8
+ .\" notice, this list of conditions and the following disclaimer.
9
+ .\" 2. Redistributions in binary form must reproduce the above copyright
10
+ .\" notice, this list of conditions and the following disclaimer in the
11
+ .\" documentation and/or other materials provided with the distribution.
12
+ .\"
13
+ .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14
+ .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
+ .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
+ .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17
+ .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
+ .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19
+ .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20
+ .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21
+ .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22
+ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23
+ .\" SUCH DAMAGE.
24
+ .TH SPIPE 1 "April 2, 2013" "spiped 1.3.0" "spipe README"
25
+ .SH NAME
26
+ spipe \- spiped client utility
27
+ .SH SYNOPSIS
28
+ .B spipe
29
+ \-t <target socket>
30
+ \-k <key file>
31
+ [\-f | \-g]
32
+ [\-j]
33
+ [\-o <connection timeout>]
34
+ .SH OPTIONS
35
+ .TP
36
+ .B \-t <target socket>
37
+ Address to which spipe should connect.
38
+ .TP
39
+ .B \-k <key file>
40
+ Use the provided key file to authenticate and encrypt.
41
+ .TP
42
+ .B \-f
43
+ Use fast/weak handshaking: This reduces the CPU time spent in the
44
+ initial connection setup, at the expense of losing perfect forward
45
+ secrecy.
46
+ .TP
47
+ .B \-g
48
+ Require perfect forward secrecy by dropping connections if the other
49
+ host is using the -f option.
50
+ .TP
51
+ .B \-j
52
+ Disable transport layer keep-alives.
53
+ (By default they are enabled.)
54
+ .TP
55
+ .B \-o <connection timeout>
56
+ Timeout, in seconds, after which an attempt to connect to the target
57
+ or a protocol handshake will be aborted (and the connection dropped)
58
+ if not completed. Defaults to 5s.
59
+ .SH SEE ALSO
60
+ .BR spiped (1).