2 * Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 __RCSID("$Heimdal: test_bn.c 21047 2007-06-10 19:11:54Z lha $"
43 #include <sys/types.h>
53 set_get(unsigned long num
)
58 if (!BN_set_word(bn
, num
))
61 if (BN_get_word(bn
) != num
)
68 #define CHECK(x) do { ret += x; } while(0)
77 CHECK(set_get(0x1ff));
78 CHECK(set_get(0xffff));
79 CHECK(set_get(0xf000));
80 CHECK(set_get(ULONG_MAX
/ 2));
81 CHECK(set_get(ULONG_MAX
- 1));
94 /* test setting and getting of "word" */
95 if (!BN_set_word(bn
, 1))
97 if (!BN_is_bit_set(bn
, 0))
99 if (!BN_is_bit_set(bn
, 0))
102 if (!BN_set_word(bn
, 2))
104 if (!BN_is_bit_set(bn
, 1))
107 if (!BN_set_word(bn
, 3))
109 if (!BN_is_bit_set(bn
, 0))
111 if (!BN_is_bit_set(bn
, 1))
114 if (!BN_set_word(bn
, 0x100))
116 if (!BN_is_bit_set(bn
, 8))
119 if (!BN_set_word(bn
, 0x1000))
121 if (!BN_is_bit_set(bn
, 12))
124 /* test bitsetting */
125 if (!BN_set_word(bn
, 1))
127 if (!BN_set_bit(bn
, 1))
129 if (BN_get_word(bn
) != 3)
131 if (!BN_clear_bit(bn
, 0))
133 if (BN_get_word(bn
) != 2)
136 /* test bitsetting past end of current end */
138 if (!BN_set_bit(bn
, 12))
140 if (BN_get_word(bn
) != 0x1000)
143 /* test bit and byte counting functions */
144 if (BN_num_bits(bn
) != 13)
146 if (BN_num_bytes(bn
) != 2)
162 { "\x01\x00", 2, 256 }
166 test_BN_import_export(void)
174 for (i
= 0; i
< sizeof(ietests
)/sizeof(ietests
[0]); i
++) {
177 if (!BN_bin2bn((unsigned char*)ietests
[i
].data
, ietests
[i
].len
, bn
))
179 if (BN_get_word(bn
) != ietests
[i
].num
)
181 len
= BN_num_bytes(bn
);
182 if (len
!= ietests
[i
].len
)
189 if (memcmp(p
, ietests
[i
].data
, ietests
[i
].len
) != 0)
213 if (BN_get_word(c
) != 3)
218 if (BN_get_word(c
) != 3)
221 BN_set_word(b
, 0xff);
224 if (BN_get_word(c
) != 0x100)
228 if (BN_get_word(c
) != 0x100)
231 BN_set_word(a
, 0xff);
234 if (BN_get_word(c
) != 0x1fe)
238 if (BN_get_word(c
) != 0x1fe)
245 BN_hex2bn(&a
, "50212A3B611D46642C825A16A354CE0FD4D85DD2");
246 BN_hex2bn(&b
, "84B6C7E8D28ACA1614954DA");
250 if (strcmp(p
, "50212A3B611D466434CDC695307D7AB13621B2AC") != 0) {
258 if (strcmp(p
, "50212A3B611D466434CDC695307D7AB13621B2AC") != 0) {
279 if (!BN_set_word(a
, 1))
281 if (!BN_set_word(b
, 1))
284 if (BN_cmp(a
, b
) != 0)
286 if (BN_cmp(b
, a
) != 0)
289 if (!BN_set_word(b
, 2))
292 if (BN_cmp(a
, b
) >= 0)
294 if (BN_cmp(b
, a
) <= 0)
297 BN_set_negative(b
, 1);
299 if (BN_cmp(a
, b
) <= 0)
301 if (BN_cmp(b
, a
) >= 0)
307 BN_hex2bn(&a
, "50212A3B611D46642C825A16A354CE0FD4D85DD1");
308 BN_hex2bn(&b
, "50212A3B611D46642C825A16A354CE0FD4D85DD2");
310 if (BN_cmp(a
, b
) >= 0)
312 if (BN_cmp(b
, a
) <= 0)
315 BN_set_negative(b
, 1);
317 if (BN_cmp(a
, b
) <= 0)
319 if (BN_cmp(b
, a
) >= 0)
332 if (RAND_status() != 1)
339 if (!BN_rand(bn
, 1024, 0, 0))
347 main(int argc
, char **argv
)
351 ret
+= test_BN_set_get();
352 ret
+= test_BN_bit();
353 ret
+= test_BN_import_export();
354 ret
+= test_BN_uadd();
355 ret
+= test_BN_cmp();
356 ret
+= test_BN_rand();