summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2017-01-03 16:58:10 +0000
committerjsing <>2017-01-03 16:58:10 +0000
commit5da7b92521d672c4c9ed6738c3b4f70f6da48894 (patch)
tree85089786050c03935f120187205e757c675d3a73
parent5bf1d8eae1dc8ce16782f7063874adf628e6d7c8 (diff)
downloadopenbsd-5da7b92521d672c4c9ed6738c3b4f70f6da48894.tar.gz
openbsd-5da7b92521d672c4c9ed6738c3b4f70f6da48894.tar.bz2
openbsd-5da7b92521d672c4c9ed6738c3b4f70f6da48894.zip
Add regress tests for max shared version code.
-rw-r--r--src/regress/lib/libssl/unit/ssl_versions.c135
1 files changed, 133 insertions, 2 deletions
diff --git a/src/regress/lib/libssl/unit/ssl_versions.c b/src/regress/lib/libssl/unit/ssl_versions.c
index 32f7b3eea2..d4be40cbd8 100644
--- a/src/regress/lib/libssl/unit/ssl_versions.c
+++ b/src/regress/lib/libssl/unit/ssl_versions.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_versions.c,v 1.1 2016/12/30 16:58:12 jsing Exp $ */ 1/* $OpenBSD: ssl_versions.c,v 1.2 2017/01/03 16:58:10 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2016 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -18,6 +18,7 @@
18#include <openssl/ssl.h> 18#include <openssl/ssl.h>
19 19
20int ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); 20int ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver);
21int ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver);
21 22
22struct version_range_test { 23struct version_range_test {
23 const long options; 24 const long options;
@@ -101,7 +102,7 @@ test_ssl_enabled_version_range(void)
101 102
102 minver = maxver = 0xffff; 103 minver = maxver = 0xffff;
103 104
104 if (ssl_enabled_version_range(ssl, &minver, &maxver) == -1) { 105 if (ssl_enabled_version_range(ssl, &minver, &maxver) != 1) {
105 if (vrt->minver != 0 || vrt->maxver != 0) { 106 if (vrt->minver != 0 || vrt->maxver != 0) {
106 fprintf(stderr, "FAIL: test %zu - failed but " 107 fprintf(stderr, "FAIL: test %zu - failed but "
107 "wanted non-zero versions\n", i); 108 "wanted non-zero versions\n", i);
@@ -128,6 +129,135 @@ test_ssl_enabled_version_range(void)
128 return (failed); 129 return (failed);
129} 130}
130 131
132struct shared_version_test {
133 const long options;
134 const uint16_t peerver;
135 const uint16_t maxver;
136};
137
138static struct shared_version_test shared_version_tests[] = {
139 {
140 .options = 0,
141 .peerver = SSL2_VERSION,
142 .maxver = 0,
143 },
144 {
145 .options = 0,
146 .peerver = SSL3_VERSION,
147 .maxver = 0,
148 },
149 {
150 .options = 0,
151 .peerver = TLS1_VERSION,
152 .maxver = TLS1_VERSION,
153 },
154 {
155 .options = 0,
156 .peerver = TLS1_1_VERSION,
157 .maxver = TLS1_1_VERSION,
158 },
159 {
160 .options = 0,
161 .peerver = TLS1_2_VERSION,
162 .maxver = TLS1_2_VERSION,
163 },
164 {
165 .options = 0,
166 .peerver = 0x7f12,
167 .maxver = TLS1_2_VERSION,
168 },
169 {
170 .options = SSL_OP_NO_TLSv1_2,
171 .peerver = TLS1_2_VERSION,
172 .maxver = TLS1_1_VERSION,
173 },
174 {
175 .options = SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2,
176 .peerver = TLS1_2_VERSION,
177 .maxver = TLS1_VERSION,
178 },
179 {
180 .options = SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2,
181 .peerver = TLS1_2_VERSION,
182 .maxver = 0,
183 },
184 {
185 .options = SSL_OP_NO_TLSv1,
186 .peerver = TLS1_1_VERSION,
187 .maxver = TLS1_1_VERSION,
188 },
189 {
190 .options = SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1,
191 .peerver = TLS1_1_VERSION,
192 .maxver = 0,
193 },
194 {
195 .options = SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2,
196 .peerver = TLS1_1_VERSION,
197 .maxver = TLS1_VERSION,
198 },
199 {
200 .options = SSL_OP_NO_TLSv1,
201 .peerver = TLS1_VERSION,
202 .maxver = 0,
203 },
204};
205
206#define N_SHARED_VERSION_TESTS \
207 (sizeof(shared_version_tests) / sizeof(*shared_version_tests))
208
209static int
210test_ssl_max_shared_version(void)
211{
212 struct shared_version_test *srt;
213 SSL_CTX *ssl_ctx = NULL;
214 SSL *ssl = NULL;
215 uint16_t maxver;
216 int failed = 1;
217 size_t i;
218
219 if ((ssl_ctx = SSL_CTX_new(TLS_method())) == NULL) {
220 fprintf(stderr, "SSL_CTX_new() returned NULL\n");
221 goto failure;
222 }
223 if ((ssl = SSL_new(ssl_ctx)) == NULL) {
224 fprintf(stderr, "SSL_new() returned NULL\n");
225 goto failure;
226 }
227
228 failed = 0;
229
230 for (i = 0; i < N_SHARED_VERSION_TESTS; i++) {
231 srt = &shared_version_tests[i];
232
233 SSL_clear_options(ssl, SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 |
234 SSL_OP_NO_TLSv1_2);
235 SSL_set_options(ssl, srt->options);
236
237 maxver = 0;
238
239 if (ssl_max_shared_version(ssl, srt->peerver, &maxver) != 1) {
240 if (srt->maxver != 0) {
241 fprintf(stderr, "FAIL: test %zu - failed but "
242 "wanted non-zero shared version\n", i);
243 failed++;
244 }
245 continue;
246 }
247 if (maxver != srt->maxver) {
248 fprintf(stderr, "FAIL: test %zu - got shared "
249 "version %x, want %x\n", i, maxver, srt->maxver);
250 failed++;
251 }
252 }
253
254 failure:
255 SSL_CTX_free(ssl_ctx);
256 SSL_free(ssl);
257
258 return (failed);
259}
260
131int 261int
132main(int argc, char **argv) 262main(int argc, char **argv)
133{ 263{
@@ -136,6 +266,7 @@ main(int argc, char **argv)
136 SSL_library_init(); 266 SSL_library_init();
137 267
138 failed |= test_ssl_enabled_version_range(); 268 failed |= test_ssl_enabled_version_range();
269 failed |= test_ssl_max_shared_version();
139 270
140 if (failed == 0) 271 if (failed == 0)
141 printf("PASS %s\n", __FILE__); 272 printf("PASS %s\n", __FILE__);