summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/exdata/exdata_test.c68
1 files changed, 59 insertions, 9 deletions
diff --git a/src/regress/lib/libcrypto/exdata/exdata_test.c b/src/regress/lib/libcrypto/exdata/exdata_test.c
index d90418610b..22483f7061 100644
--- a/src/regress/lib/libcrypto/exdata/exdata_test.c
+++ b/src/regress/lib/libcrypto/exdata/exdata_test.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: exdata_test.c,v 1.1 2023/12/27 12:34:32 jsing Exp $ */ 1/* $OpenBSD: exdata_test.c,v 1.2 2024/03/25 10:41:36 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2023 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -30,6 +30,10 @@ ex_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl,
30{ 30{
31 long *arg = argp; 31 long *arg = argp;
32 32
33 if (ptr != NULL) {
34 fprintf(stderr, "FAIL: ex_new() called with ptr != NULL\n");
35 return 0;
36 }
33 if (argl != 1234 || *arg != 1234) { 37 if (argl != 1234 || *arg != 1234) {
34 fprintf(stderr, "FAIL: ex_new() with bad arguments\n"); 38 fprintf(stderr, "FAIL: ex_new() with bad arguments\n");
35 return 0; 39 return 0;
@@ -78,7 +82,7 @@ struct exdata {
78static int 82static int
79ex_data_test(void) 83ex_data_test(void)
80{ 84{
81 struct exdata exdata1, exdata2; 85 struct exdata exdata1, exdata2, exdata3, exdata4;
82 void *argp; 86 void *argp;
83 long argl; 87 long argl;
84 int idx1, idx2; 88 int idx1, idx2;
@@ -86,6 +90,8 @@ ex_data_test(void)
86 90
87 memset(&exdata1, 0, sizeof(exdata1)); 91 memset(&exdata1, 0, sizeof(exdata1));
88 memset(&exdata2, 0, sizeof(exdata2)); 92 memset(&exdata2, 0, sizeof(exdata2));
93 memset(&exdata3, 0, sizeof(exdata3));
94 memset(&exdata4, 0, sizeof(exdata4));
89 95
90 argl = 1234; 96 argl = 1234;
91 argp = &argl; 97 argp = &argl;
@@ -123,33 +129,33 @@ ex_data_test(void)
123 } 129 }
124 130
125 if (!CRYPTO_set_ex_data(&exdata1.exdata, idx2, &idx2)) { 131 if (!CRYPTO_set_ex_data(&exdata1.exdata, idx2, &idx2)) {
126 fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed\n"); 132 fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index 2\n");
127 goto failure; 133 goto failure;
128 } 134 }
129 if (!CRYPTO_set_ex_data(&exdata1.exdata, idx1, &idx1)) { 135 if (!CRYPTO_set_ex_data(&exdata1.exdata, idx1, &idx1)) {
130 fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed\n"); 136 fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index 1\n");
131 goto failure; 137 goto failure;
132 } 138 }
133 if (CRYPTO_get_ex_data(&exdata1.exdata, idx1) != &idx1) { 139 if (CRYPTO_get_ex_data(&exdata1.exdata, idx1) != &idx1) {
134 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); 140 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index 1\n");
135 goto failure; 141 goto failure;
136 } 142 }
137 if (CRYPTO_get_ex_data(&exdata1.exdata, idx2) != &idx2) { 143 if (CRYPTO_get_ex_data(&exdata1.exdata, idx2) != &idx2) {
138 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); 144 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index 2\n");
139 goto failure; 145 goto failure;
140 } 146 }
141 147
142 if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2.exdata, 148 if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2.exdata,
143 &exdata1.exdata)) { 149 &exdata1.exdata)) {
144 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); 150 fprintf(stderr, "FAIL: CRYPTO_dup_ex_data() failed\n");
145 goto failure; 151 goto failure;
146 } 152 }
147 if (CRYPTO_get_ex_data(&exdata2.exdata, idx1) != &idx1) { 153 if (CRYPTO_get_ex_data(&exdata2.exdata, idx1) != &idx1) {
148 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); 154 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed after dup\n");
149 goto failure; 155 goto failure;
150 } 156 }
151 if (CRYPTO_get_ex_data(&exdata2.exdata, idx2) != &idx2) { 157 if (CRYPTO_get_ex_data(&exdata2.exdata, idx2) != &idx2) {
152 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); 158 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed after dup\n");
153 goto failure; 159 goto failure;
154 } 160 }
155 161
@@ -172,11 +178,55 @@ ex_data_test(void)
172 goto failure; 178 goto failure;
173 } 179 }
174 180
181 /* The current implementation allows for data to be set without new. */
182 if (!CRYPTO_set_ex_data(&exdata3.exdata, idx1, &idx1)) {
183 fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index "
184 "1 (without new)\n");
185 goto failure;
186 }
187 if (CRYPTO_get_ex_data(&exdata3.exdata, idx1) != &idx1) {
188 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index "
189 "1 (without new)\n");
190 goto failure;
191 }
192
193 /* And indexes can be used without allocation. */
194 if (!CRYPTO_set_ex_data(&exdata3.exdata, idx2 + 1, &idx2)) {
195 fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index "
196 "%d (unallocated)\n", idx2 + 1);
197 goto failure;
198 }
199 if (CRYPTO_get_ex_data(&exdata3.exdata, idx2 + 1) != &idx2) {
200 fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index "
201 "%d\n", idx2 + 1);
202 goto failure;
203 }
204
205 /* And new can be called without getting any index first. */
206 if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_BIO, &exdata4, &exdata4.exdata)) {
207 fprintf(stderr, "FAIL: CRYPTO_new_ex_data() failed with "
208 "uninitialised index\n");
209 goto failure;
210 }
211
212 /* And dup can be called after new or without new... */
213 if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, &exdata1, &exdata1.exdata)) {
214 fprintf(stderr, "FAIL: CRYPTO_new_ex_data() failed\n");
215 goto failure;
216 }
217 if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2.exdata,
218 &exdata1.exdata)) {
219 fprintf(stderr, "FAIL: CRYPTO_dup_ex_data() after new failed\n");
220 goto failure;
221 }
222
175 failed = 0; 223 failed = 0;
176 224
177 failure: 225 failure:
178 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata1, &exdata1.exdata); 226 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata1, &exdata1.exdata);
179 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2, &exdata2.exdata); 227 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2, &exdata2.exdata);
228 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata3, &exdata3.exdata);
229 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, &exdata4, &exdata4.exdata);
180 230
181 return failed; 231 return failed;
182} 232}