diff options
author | tb <> | 2023-04-10 13:57:32 +0000 |
---|---|---|
committer | tb <> | 2023-04-10 13:57:32 +0000 |
commit | 66736692539ed128ee5e2bf3bb1b2b8a93a138b7 (patch) | |
tree | 7751a6c18c2df22cb8d70302d5115b1f68a57a71 | |
parent | c6d2fd4172ff9d967c8568f18bee3e3fbb7c4d96 (diff) | |
download | openbsd-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.c | 286 |
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 | ||
25 | char *bn_to_string(const BIGNUM *bn); | 25 | char *bn_to_string(const BIGNUM *bn); |
26 | 26 | ||
27 | struct convert_st { | 27 | struct convert_st { |
28 | const char *input; | 28 | const char *input; |
29 | const char *expected; | 29 | const char *want; |
30 | }; | 30 | }; |
31 | 31 | ||
32 | struct convert_st testcases[] = { | 32 | struct 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 | ||
93 | int | 234 | int |
94 | main(int argc, char *argv[]) | 235 | main(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 | } |