summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2023-04-10 13:57:32 +0000
committertb <>2023-04-10 13:57:32 +0000
commit66736692539ed128ee5e2bf3bb1b2b8a93a138b7 (patch)
tree7751a6c18c2df22cb8d70302d5115b1f68a57a71
parentc6d2fd4172ff9d967c8568f18bee3e3fbb7c4d96 (diff)
downloadopenbsd-66736692539ed128ee5e2bf3bb1b2b8a93a138b7.tar.gz
openbsd-66736692539ed128ee5e2bf3bb1b2b8a93a138b7.tar.bz2
openbsd-66736692539ed128ee5e2bf3bb1b2b8a93a138b7.zip
Rework the bn_to_string() to use public API
We can use the undocumented functions {i2s,s2i}_ASN1_INTEGER(3) to exercise bn_to_string(). This way we use public API and remove the need of linking statically.
-rw-r--r--src/regress/lib/libcrypto/bn/bn_to_string.c286
1 files changed, 213 insertions, 73 deletions
diff --git a/src/regress/lib/libcrypto/bn/bn_to_string.c b/src/regress/lib/libcrypto/bn/bn_to_string.c
index 8f990f0ea5..7cbafbfe7d 100644
--- a/src/regress/lib/libcrypto/bn/bn_to_string.c
+++ b/src/regress/lib/libcrypto/bn/bn_to_string.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bn_to_string.c,v 1.3 2023/02/13 04:26:32 jsing Exp $ */ 1/* $OpenBSD: bn_to_string.c,v 1.4 2023/04/10 13:57:32 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2019 Theo Buehler <tb@openbsd.org> 3 * Copyright (c) 2019 Theo Buehler <tb@openbsd.org>
4 * 4 *
@@ -20,97 +20,237 @@
20#include <stdlib.h> 20#include <stdlib.h>
21#include <string.h> 21#include <string.h>
22 22
23#include <openssl/bn.h> 23#include <openssl/x509v3.h>
24 24
25char *bn_to_string(const BIGNUM *bn); 25char *bn_to_string(const BIGNUM *bn);
26 26
27struct convert_st { 27struct convert_st {
28 const char *input; 28 const char *input;
29 const char *expected; 29 const char *want;
30}; 30};
31 31
32struct convert_st testcases[] = { 32struct convert_st testcases[] = {
33 {"0", "0"}, 33 {
34 {"-0", "0"}, 34 .input = "0x0",
35 {"7", "7"}, 35 .want = "0",
36 {"-7", "-7"}, 36 },
37 {"8", "8"}, 37 {
38 {"-8", "-8"}, 38 .input = "-0x0",
39 {"F", "15"}, 39 .want = "0",
40 {"-F", "-15"}, 40 },
41 {"10", "16"}, 41 {
42 {"-10", "-16"}, 42 .input = "0x7",
43 {"7F", "127"}, 43 .want = "7",
44 {"-7F", "-127"}, 44 },
45 {"80", "128"}, 45 {
46 {"-80", "-128"}, 46 .input = "-0x7",
47 {"FF", "255"}, 47 .want = "-7",
48 {"-FF", "-255"}, 48 },
49 {"100", "256"}, 49 {
50 {"7FFF", "32767"}, 50 .input = "0x8",
51 {"-7FFF", "-32767"}, 51 .want = "8",
52 {"8000", "32768"}, 52 },
53 {"-8000", "-32768"}, 53 {
54 {"FFFF", "65535"}, 54 .input = "-0x8",
55 {"-FFFF", "-65535"}, 55 .want = "-8",
56 {"10000", "65536"}, 56 },
57 {"-10000", "-65536"}, 57 {
58 {"7FFFFFFF", "2147483647"}, 58 .input = "0xF",
59 {"-7FFFFFFF", "-2147483647"}, 59 .want = "15",
60 {"80000000", "2147483648"}, 60 },
61 {"-80000000", "-2147483648"}, 61 {
62 {"FFFFFFFF", "4294967295"}, 62 .input = "-0xF",
63 {"-FFFFFFFF", "-4294967295"}, 63 .want = "-15",
64 {"100000000", "4294967296"}, 64 },
65 {"-100000000", "-4294967296"}, 65 {
66 {"7FFFFFFFFFFFFFFF", "9223372036854775807"}, 66 .input = "0x10",
67 {"-7FFFFFFFFFFFFFFF", "-9223372036854775807"}, 67 .want = "16",
68 {"8000000000000000", "9223372036854775808"}, 68 },
69 {"-8000000000000000", "-9223372036854775808"}, 69 {
70 {"FFFFFFFFFFFFFFFF", "18446744073709551615"}, 70 .input = "-0x10",
71 {"-FFFFFFFFFFFFFFFF", "-18446744073709551615"}, 71 .want = "-16",
72 {"10000000000000000", "18446744073709551616"}, 72 },
73 {"-10000000000000000", "-18446744073709551616"}, 73 {
74 {"7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 74 .input = "0x7F",
75 "170141183460469231731687303715884105727"}, 75 .want = "127",
76 {"-7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 76 },
77 "-170141183460469231731687303715884105727"}, 77 {
78 {"80000000000000000000000000000000", 78 .input = "-0x7F",
79 "0x80000000000000000000000000000000"}, 79 .want = "-127",
80 {"-80000000000000000000000000000000", 80 },
81 "-0x80000000000000000000000000000000"}, 81 {
82 {"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 82 .input = "0x80",
83 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}, 83 .want = "128",
84 {"-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 84 },
85 "-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}, 85 {
86 {"100000000000000000000000000000000", 86 .input = "-0x80",
87 "0x0100000000000000000000000000000000"}, 87 .want = "-128",
88 {"-100000000000000000000000000000000", 88 },
89 "-0x0100000000000000000000000000000000"}, 89 {
90 { NULL, NULL }, 90 .input = "0xFF",
91 .want = "255",
92 },
93 {
94 .input = "-0xFF",
95 .want = "-255",
96 },
97 {
98 .input = "0x100",
99 .want = "256",
100 },
101 {
102 .input = "0x7FFF",
103 .want = "32767",
104 },
105 {
106 .input = "-0x7FFF",
107 .want = "-32767",
108 },
109 {
110 .input = "0x8000",
111 .want = "32768",
112 },
113 {
114 .input = "-0x8000",
115 .want = "-32768",
116 },
117 {
118 .input = "0xFFFF",
119 .want = "65535",
120 },
121 {
122 .input = "-0xFFFF",
123 .want = "-65535",
124 },
125 {
126 .input = "0x10000",
127 .want = "65536",
128 },
129 {
130 .input = "-0x10000",
131 .want = "-65536",
132 },
133 {
134 .input = "0x7FFFFFFF",
135 .want = "2147483647",
136 },
137 {
138 .input = "-0x7FFFFFFF",
139 .want = "-2147483647",
140 },
141 {
142 .input = "0x80000000",
143 .want = "2147483648",
144 },
145 {
146 .input = "-0x80000000",
147 .want = "-2147483648",
148 },
149 {
150 .input = "0xFFFFFFFF",
151 .want = "4294967295",
152 },
153 {
154 .input = "-0xFFFFFFFF",
155 .want = "-4294967295",
156 },
157 {
158 .input = "0x100000000",
159 .want = "4294967296",
160 },
161 {
162 .input = "-0x100000000",
163 .want = "-4294967296",
164 },
165 {
166 .input = "0x7FFFFFFFFFFFFFFF",
167 .want = "9223372036854775807",
168 },
169 {
170 .input = "-0x7FFFFFFFFFFFFFFF",
171 .want = "-9223372036854775807",
172 },
173 {
174 .input = "0x8000000000000000",
175 .want = "9223372036854775808",
176 },
177 {
178 .input = "-0x8000000000000000",
179 .want = "-9223372036854775808",
180 },
181 {
182 .input = "0xFFFFFFFFFFFFFFFF",
183 .want = "18446744073709551615",
184 },
185 {
186 .input = "-0xFFFFFFFFFFFFFFFF",
187 .want = "-18446744073709551615",
188 },
189 {
190 .input = "0x10000000000000000",
191 .want = "18446744073709551616",
192 },
193 {
194 .input = "-0x10000000000000000",
195 .want = "-18446744073709551616",
196 },
197 {
198 .input = "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
199 .want = "170141183460469231731687303715884105727",
200 },
201 {
202 .input = "-0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
203 .want = "-170141183460469231731687303715884105727",
204 },
205 {
206 .input = "0x80000000000000000000000000000000",
207 .want = "0x80000000000000000000000000000000",
208 },
209 {
210 .input = "-0x80000000000000000000000000000000",
211 .want = "-0x80000000000000000000000000000000",
212 },
213 {
214 .input = "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
215 .want = "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
216 },
217 {
218 .input = "-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
219 .want = "-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
220 },
221 {
222 .input = "0x100000000000000000000000000000000",
223 .want = "0x0100000000000000000000000000000000",
224 },
225 {
226 .input = "-0x100000000000000000000000000000000",
227 .want = "-0x0100000000000000000000000000000000",
228 },
229 {
230 .input = NULL,
231 },
91}; 232};
92 233
93int 234int
94main(int argc, char *argv[]) 235main(int argc, char *argv[])
95{ 236{
96 struct convert_st *test; 237 struct convert_st *test;
97 BIGNUM *bn = NULL; 238 ASN1_INTEGER *aint;
98 char *bnstr; 239 char *got;
99 int failed = 0; 240 int failed = 0;
100 241
101 for (test = testcases; test->input != NULL; test++) { 242 for (test = testcases; test->input != NULL; test++) {
102 if (!BN_hex2bn(&bn, test->input)) 243 if ((aint = s2i_ASN1_INTEGER(NULL, test->input)) == NULL)
103 errx(1, "BN_hex2bn(%s)", test->input); 244 errx(1, "s2i_ASN1_INTEGER(%s)", test->input);
104 if ((bnstr = bn_to_string(bn)) == NULL) 245 if ((got = i2s_ASN1_INTEGER(NULL, aint)) == NULL)
105 errx(1, "bn_to_string(%s)", test->input); 246 errx(1, "i2s_ASN1_INTEGER(%s)", test->input);
106 if (strcmp(bnstr, test->expected) != 0) { 247 if (strcmp(got, test->want) != 0) {
107 warnx("%s != %s", bnstr, test->expected); 248 warnx("want: %s, got: %s", test->want, got);
108 failed = 1; 249 failed |= 1;
109 } 250 }
110 free(bnstr); 251 ASN1_INTEGER_free(aint);
252 free(got);
111 } 253 }
112 254
113 BN_free(bn);
114
115 return failed; 255 return failed;
116} 256}